(57)【特許請求の範囲】
【請求項１】
揺動可能に支持された鍵と、
前記鍵を押鍵動作及び離鍵動作させる駆動手段と、
前記鍵の押鍵深さを検出する押鍵深さ検出手段と、
楽曲の演奏内容を表わす演奏情報に従って、前記鍵の押鍵を表す押鍵情報及び前記鍵の離鍵を表す離鍵情報を出力する自動演奏制御手段と、
前記自動演奏制御手段及び外部機器のいずれか一方又は両方から入力した前記押鍵情報及び前記離鍵情報に応じて前記駆動手段を制御する鍵駆動制御手段であって、所定の短い期間内に前記押鍵情報及び前記離鍵情報を繰り返し入力したとき、前記離鍵動作途中に前記押鍵動作に切り替えて、前記鍵を連打するよう前記駆動手段を制御する鍵駆動制御手段と、
前記自動演奏制御手段及び外部機器のいずれか一方又は両方から入力した前記押鍵情報及び前記離鍵情報に応じて楽音信号の発生を制御する楽音信号発生手段とを備えた演奏装置において、
前記鍵駆動制御手段は、
前記連打の最初の押鍵開始後、前記入力した前記押鍵情報の回数をカウントする第１カウンタと、
前記連打の最初の押鍵開始後、前記鍵を押鍵動作させた回数をカウントする第２カウンタと、
前記鍵の離鍵動作途中であって、前記押鍵深さ検出手段によって検出した前記鍵の押鍵深さが所定の範囲内にある状態において、前記第１カウンタのカウント値と前記第２カウンタのカウント値との差に応じて、前記連打を継続するか、前記連打を終了するかを決定する連打決定手段を備えたことを特徴とする演奏装置。
【請求項２】
請求項１に記載の演奏装置において、
連打決定手段は、前記第１カウンタのカウント値と前記第２カウンタのカウント値との差が所定の第１基準値よりも大きい場合、前記連打を継続し、前記第１カウンタのカウント値と前記第２カウンタのカウント値との差が前記第１基準値以下である場合、前記連打を終了すると決定することを特徴とする演奏装置。
【請求項３】
請求項２に記載の演奏装置において、
前記連打決定手段は、前記第１カウンタのカウント値と前記第２カウンタのカウント値との差が、前記第１基準値よりも大きい場合であっても、前記第１基準値よりも大きな第２基準値よりも大きい場合には、前記連打を終了すると決定することを特徴とする演奏装置。
【請求項４】
請求項１乃至請求項３のうちのいずれか１つに記載の演奏装置において、
前記連打決定手段は、前記連打を終了すると決定した後であって、前記鍵の離鍵動作が終了する前に新たな押鍵情報を入力したとき、前記連打を終了する決定を取り消して、前記連打を継続すると決定することを特徴とする演奏装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、押鍵及び離鍵を表す鍵情報に応じて、楽音信号を発生するとともに鍵を駆動する演奏装置に関する。
【背景技術】
【０００２】
従来から、例えば、下記特許文献１に示されているように、予め記録しておいた押離鍵情報を自動演奏装置によって読み出して、前記読み出した押離鍵情報に従って、楽音信号を発生させるとともに鍵を駆動する演奏装置は知られている。この演奏装置においては、押離鍵情報を読み出すと、その押離鍵情報に応じて、即座に楽音信号の生成が制御される。しかし、同一鍵についての繰り返し間隔の短い押離鍵情報に、鍵を駆動する駆動装置が追従できないこともある。そこで、発生される楽音に対する鍵の動きが不自然に感じられないように、駆動装置が追従できないような繰り返し間隔の短い押離鍵情報を、前記鍵の駆動制御に適用しないようにしている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−２３３８２５
【発明の概要】
【０００４】
上記従来の演奏装置では、例えば同一鍵の連打演奏時のように、鍵の押鍵深さが押鍵開始時の深さからその最大深さに達するまでの短期間内に同一鍵に関する押離鍵情報を繰り返し読み出した場合（すなわち、同一鍵に関する複数組の離鍵情報及び押鍵情報を読み出した場合）には、これらの複数組の離鍵情報及び押鍵情報が全てキャンセルされる。また、離鍵開始直後又は離鍵終了直前の所定の期間内に、前記鍵に関する複数組の離鍵情報及び押鍵情報を読み出した場合も、これらの複数組の離鍵情報及び押鍵情報が全てキャンセルされる。したがって、短期間内における同一鍵についての押離鍵の繰り返し回数が多い連打演奏において、発音回数に対して鍵の駆動回数が少なくなることがあり、不自然に感じられることがあった。
【０００５】
本発明は上記問題に対処するためになされたもので、その目的は、同一鍵に関して、短期間内の押離鍵の繰り返し回数が多い場合であっても、発音に対する鍵の動作が自然に感じられる演奏装置を提供することにある。なお、下記本発明の各構成要件の記載及び図１７に示す作動原理図においては、本発明の理解を容易にするために、実施形態の対応箇所の符号を括弧内に記載しているが、本発明の各構成要件は、実施形態の符号によって示された対応箇所の構成に限定解釈されるべきものではない。
【０００６】
上記目的を達成するために、本発明の特徴は、揺動可能に支持された鍵（１１）と、鍵を押鍵動作及び離鍵動作させる駆動手段（３１）と、鍵の押鍵深さを検出する押鍵深さ検出手段（４０）と、楽曲の演奏内容を表わす演奏情報に従って、鍵の押鍵を表す押鍵情報及び鍵の離鍵を表す離鍵情報を出力する自動演奏制御手段（４５，Ｓ４０〜Ｓ５４）と、自動演奏制御手段及び外部機器のいずれか一方又は両方から入力した押鍵情報及び離鍵情報に応じて駆動手段を制御する鍵駆動制御手段であって、所定の短い期間内に押鍵情報及び離鍵情報を繰り返し入力したとき、離鍵動作途中に押鍵動作に切り替えて、鍵を連打するよう駆動手段を制御する鍵駆動制御手段（４４，４５，Ｓ６０〜Ｓ８６）と、自動演奏制御手段及び外部機器のいずれか一方又は両方から入力した押鍵情報及び離鍵情報に応じて楽音信号の発生を制御する楽音信号発生手段（４８）とを備えた演奏装置において、鍵駆動制御手段は、連打の最初の押鍵開始後、前記入力した押鍵情報の回数をカウントする第１カウンタ（ＯＮＣＴ）と、連打の最初の押鍵開始後、鍵を押鍵動作させた回数をカウントする第２カウンタ（ＫＤＣＴ）と、鍵の離鍵動作途中であって、押鍵深さ検出手段によって検出した鍵の押鍵深さが所定の範囲内にある状態において、第１カウンタのカウント値と第２カウンタのカウント値との差（ＤＩＦ）に応じて、連打を継続するか、連打を終了するかを決定する連打決定手段（Ｓ７４，Ｓ８２，Ｓ８４，ＳＴ１４，ＳＴ１５）を備えたことにある。
【０００７】
また、この場合、連打決定手段は、前記第１カウンタのカウント値と前記第２カウンタのカウント値との差が所定の第１基準値（ｂ）よりも大きい場合、連打を継続し、第１カウンタのカウント値と第２カウンタのカウント値との差が第１基準値以下である場合、連打を終了すると決定するとよい。
【０００８】
また、この場合、連打決定手段は、連打を終了すると決定した後であって、鍵の離鍵動作が終了する前に新たな押鍵情報を入力したとき、連打を終了する決定を取り消して、連打を継続すると決定するとよい。なお、外部機器とは、演奏装置に接続されるＭＩＤＩシーケンサ、パーソナルコンピュータなどである。
【０００９】
これによれば、短期間内に同一鍵に関する押鍵情報及び離鍵情報が鍵駆動制御手段に繰り返し供給される場合、これらの押鍵情報及び離鍵情報に同期して、楽音信号の発生及び停止が制御される。また、同一鍵の連打が終了するまでに入力した押鍵情報の数と鍵の駆動回数とのずれが所定の回数（例えば、２回）以下であるので、前記連打時における押離鍵の回数が多い場合であっても、発音に対する鍵の動作が自然に感じられる。
【００１０】
また、本発明の他の特徴は、連打決定手段は、第１カウンタのカウント値と第２カウンタのカウント値との差が、第１基準値よりも大きい場合であっても、第１基準値よりも大きな第２基準値（ａ）よりも大きい場合には、連打を終了すると決定することにある。
【００１１】
上記のように構成すれば、連打動作途中において、連打開始からそれまでに供給された押鍵情報の数と鍵の駆動回数のずれが非常に大きくなった場合（例えば、６回）には、連打を終了させて、発音が終了した後になっても鍵が駆動されることを防止できる。すなわち、連打演奏において、最後の楽音の発生の停止とほぼ同時に、鍵の駆動も終了する。この場合、押離鍵回数が非常に多いので、楽音の発生回数と鍵の駆動回数とのずれが多少大きくても、鍵の動作が不自然に感じられることはない。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態に係る演奏装置が適用された電子楽器の全体ブロック図である。
【図２】図１の鍵盤装置の１つの鍵及びその周辺部についての側面図である。
【図３】図２のソレノイド及びその周辺部の拡大側面図である。
【図４】デューティ比テーブルの概念図である。
【図５】制御状態の分類表である。
【図６】初期化プログラムのフローチャートである。
【図７】手動演奏プログラムのフローチャートである。
【図８】図７のキーイベント処理ルーチンのフローチャートである。
【図９】自動演奏プログラムのフローチャートである。
【図１０】鍵駆動プログラムのフローチャートである。
【図１１】ソレノイドの制御状態の遷移を表す状態遷移図である。
【図１２】通常駆動時のソレノイドの状態遷移及びプランジャ軌跡の説明図である。
【図１３】スタッカート駆動時のソレノイドの状態遷移及びプランジャ軌跡の説明図である。
【図１４Ａ】連打駆動時のソレノイドの状態遷移及びプランジャ軌跡の前半部分の説明図である。
【図１４Ｂ】連打駆動時のソレノイドの状態遷移及びプランジャ軌跡の後半部分の説明図である。
【図１５】図１４Ｂの連打駆動において、連打を終了せずに、さらに連打を継続した場合のソレノイドの状態遷移及びプランジャ軌跡の説明図である。
【図１６Ａ】本発明の変形例に係るソレノイド及びその周辺部の拡大図である。
【図１６Ｂ】図１６Ａの連結部材周辺の拡大図である。
【図１７】本発明の作動原理図である。
【発明を実施するための形態】
【００１３】
本発明の一実施形態について図面を用いて説明する。この電子楽器は、図１及び図２に示すように、鍵盤装置１０を備えている。鍵盤装置１０は、それぞれ発生させる楽音信号の音高を指定するとともに楽音信号の発生及び停止を指示する複数の白鍵及び黒鍵を有する。なお、図２においては、１つの白鍵及びその周辺の構成部品を示しているが、黒鍵に関する構成も同様である。また、白鍵及び黒鍵の動作も同様であるので、以下の説明においては、白鍵及び黒鍵を鍵１１として説明する。
【００１４】
鍵１１は、前後方向の中間部が、フレームＦＲの鍵支持部材１２に支持されている。鍵支持部材１２は、フレームＦＲにおいて、鍵１１の配列方向に沿って延設されたバランスレール１２ａと、バランスレール１２ａの上に垂直に設けられた支点ピン１２ｂを備えている。鍵１１の前後方向の中間部には、上下に貫通する貫通孔１１ａが設けられていて、この貫通孔１１ａに支点ピン１２ｂが挿入されている。貫通孔１１ａは、下端部から上端部へ向かうに従って、前後方向の幅が広くなっている。これにより、鍵１１は、支点ピン１２ｂを支点として揺動可能となっている。すなわち、演奏者による押離鍵操作によって、鍵１１の前端部及び後端部が上下方向へ移動可能となっている。また、鍵１１の前端部の下方には、フロントピン１３が、垂直に延設されている。フロントピン１３は、その上端部が鍵１１の下面に設けられた孔部に挿入されており、鍵１１の前端部の横方向の振れを規制する。
【００１５】
鍵１１の後端部の下方のフレームＦＲの表面には、上限ストッパー１４が接着されている。上限ストッパー１４は、フエルトなどの緩衝材によって構成され、鍵１１が押鍵されない状態において、鍵１１の後端部の下面に当接して、鍵１１の前端部の上方向への移動を規制する。このように、前端部の上方向への移動が規制された状態の鍵１１の前端部の押鍵深さ方向の位置をレスト位置という。また、鍵１１の前端部の下方のフレームＦＲの表面には、下限ストッパー１５が接着されている。下限ストッパー１５は、上限ストッパー１４と同様に構成され、鍵１１が押鍵された状態において、鍵１１の前端部の下面に当接して、鍵１１の前端部の下方向への移動を規制する。このように、前端部の下方向への移動が規制された状態の鍵１１の前端部の押鍵深さ方向の位置をフルストローク位置という。
【００１６】
また、鍵支持部材１２より後方には、各鍵１１と連動してそれぞれ揺動するハンマー２０が設けられている。ハンマー２０は、ハンマー支持部２１に支持されている。ハンマー２０は、棒状のハンマーシャンク２０ａとハンマーシャンク２０ａの後端に組み付けられた質量体２０ｂからなる。低音部のハンマー２０から高音部のハンマー２０に向かうに従って、質量体２０ｂを徐々に軽くして、手動演奏時の鍵タッチ感をアコースティックピアノの鍵タッチ感に近似させている。
【００１７】
ハンマー支持部２１は、支持板２１ａ、ハンマーレール２１ｂ、上限ストッパーレール２１ｃ、下限ストッパーレール２１ｄ、上限ストッパー２１ｅ、及び下限ストッパー２１ｆからなる。支持板２１ａは、左右方向に薄肉の板状に形成され、前後方向かつ垂直方向に延設されている。複数の支持板２１ａが、フレームＦＲ上に、左右方向に所定の間隔（例えば、１オクターブごと）をおいて設けられている。すなわち、支持板２１ａは、所定の隣り合う２つの鍵（例えば、Ｂ鍵とＣ鍵）の間に設けられている。前記所定の隣り合う２つの鍵の後端部は、支持板２１ａと干渉しないように、他の鍵１１に比べて、左右方向の幅がやや狭く形成されている。また、支持板２１ａの上端部の中央の部分が下方へ向かって大きく切り欠かれている。この切り欠きよりも前方の部分を前部２１ａ１と呼び、後方の部分を後部２１ａ２と呼ぶ。前部２１ａ１の上端には、レール状に形成されたハンマーレール２１ｂが、隣り合う支持板２１ａを連結するようにして、組み付けられている。すなわち、ハンマーレール２１ｂは、鍵１１の並び方向に延設されていて、その下面が各前部２１ａ１の上端に支持されている。
【００１８】
ハンマーレール２１ｂの後端部には、ハンマー２０を支持するハンマー支点部２１ｂ１が設けられていて、ハンマーシャンク２０ａの前端部がハンマー支点部２１ｂ１に支持されている。これにより、ハンマー２０がハンマー支点部２１ｂ１を支点として揺動可能となっている。すなわち、鍵１１が揺動することにより、ハンマー２０の質量体２０ｂ側が、上下に移動可能となっている。また、後部２１ａ２の後端部の中央の部分が切り欠かれて、前方へ凹んだ凹部が形成されている。この凹部の上端部及び下端部には、レール状に形成された上限ストッパーレール２１ｃ及び下限ストッパーレール２１ｄがそれぞれ組み付けられている。
【００１９】
上限ストッパーレール２１ｃ及び下限ストッパーレール２１ｄは、鍵１１の並び方向に延設されていて、各支持板２１ａの後部２１ａ２にそれぞれ支持されている。上限ストッパーレール２１ｃの下面には、鍵１１の上限ストッパー１４と同様の、上限ストッパー２１ｅが組み付けられている。上限ストッパー２１ｅは、鍵１１が押鍵された状態において、ハンマーシャンク２０ａの後端部の上面に当接して、ハンマー２０の後端部の上方向への移動を規制する。一方、下限ストッパーレール２１ｄの上面には、上限ストッパー１４と同様の、下限ストッパー２１ｆが組み付けられている。下限ストッパー２１ｆは、鍵１１が押鍵されない状態において、ハンマーシャンク２０ａの後端部の下面に当接して、ハンマー２０の後端部の下方向への移動を規制する。
【００２０】
支持板２１ａの後部２１ａ２の前端部には、レール状に形成されたソレノイドレール３０が組み付けられている。すなわち、ソレノイドレール３０は、鍵１１の並び方向に延設されていて、各支持板２１ａの後部２１ａ２に支持されている。ソレノイドレール３０には、各鍵１１に対応したソレノイド３１がそれぞれ組み付けられている。ソレノイド３１は、図３に示すように、ボビン３１ａ、コイル３１ｂ、プランジャ３１ｃ及びヨーク３１ｄからなる。ボビン３１ａは、円筒状に形成されている。ボビン３１ａの外周部には、電線が巻き付けられてコイル３１ｂが形成されている。プランジャ３１ｃは、ボビン３１ａ内に上下に移動可能に収容されていて、ソレノイド３１への非通電時には、自重及びハンマー２０の重量により降下する。一方、ソレノイド３１への通電時には、プランジャ３１ｃは、電磁力により自重及びハンマー２０の重量に抗して上方へ変位する。また、ヨーク３１ｄは、コイル３１ｂを取り囲むようにして設けられ、漏れ磁束を低減する。ソレノイド３１は、ヨーク３１ｄに設けた図示しない取り付け部にてソレノイドレール３０に固定されている。
【００２１】
プランジャ３１ｃの上端には、プランジャ３１ｃよりも細い第１ロッド３２が連結されている。また、プランジャ３１ｃの下端には、第１ロッド３２と同程度の太さの第２ロッド３３が連結されている。プランジャ３１ｃ、第１ロッド３２及び第２ロッド３３の中心軸は共通である。第１ロッド３２の上端面には、後述する位置センサ４０の一部を構成する反射板３５が組み付けられている。
【００２２】
反射板３５は、合成樹脂によって形成された軽量な部材で、第１ロッド３２の上端面に組み付けられている。反射板３５は、前方へ延設された水平部３５ａと水平部３５ａの前端部から下方へ垂直に延設された垂直壁部３５ｂからなり、水平部３５ａの下面と第１ロッド３２の上端面とが接着されている。反射板３５の水平部３５ａの上面には、台部材３６が組み付けられている。台部材３６の上面は、水平に形成されている。
【００２３】
ハンマーシャンク２０ａにおける、台部材３６に対向する部分には、円筒状のローラ２０ａ１が組み付けられている。ローラ２０ａ１の中心軸は、鍵１１の並び方向に平行である。離鍵状態において、ローラ２０ａ１の下側の外周面が、台部材３６の上面に当接している。一方、第２ロッド３３の下端には、連結部材であるプランジャキャップ３７が組み付けられている。プランジャキャップ３７の下端面には、シート状の緩衝シート３７ａが貼り付けられている。そして、緩衝シート３７ａの下面には、シート状の低摩擦シート３７ｂが貼り付けられている。緩衝シート３７ａは、後述するキャプスタンスクリュー３８とプランジャキャップ３７との当接による衝撃を吸収する。また、低摩擦シート３７ｂは、キャプスタンスクリュー３８と緩衝シート３７ａとの摩擦を低減する。
【００２４】
また、鍵１１の後端部であって、プランジャキャップ３７に対向する部分には、キャプスタンスクリュー３８が組み付けられている。キャプスタンスクリュー３８の上面は、凸状かつ曲面状に形成されている。上記のように、ソレノイド３１への非通電時には、プランジャ３１ｃは、自重及びハンマー２０の重量により降下する。これにより、低摩擦シート３７ｂの下面がキャプスタンスクリュー３８の上面に当接して、キャプスタンスクリュー３８を下方へ押すことにより、鍵１１の前端部が上方へ移動してレスト位置にて停止する。一方、ソレノイド３１への通電時には、プランジャ３１ｃは、電磁力により自重及びハンマー２０の重量に抗して上方へ移動する。これにより、プランジャキャップ３７も上方へ移動する。鍵１１は、後端部よりも前端部の方が重いので、鍵１１の前端部が下方へ移動する。
【００２５】
また、鍵盤装置１０は、プランジャ３１ｃの位置を検出する位置センサ４０を備えている。位置センサ４０は、ヨーク３１ｄの前面に設けた発光部４０ａ、受光部４０ｂ、及び反射板３５からなる。発光部４０ａから出射された光は、反射板３５にて反射して、受光部４０ｂによって受光される。反射板３５の垂直壁部３５ｂの後面の光の反射率が、下部から上部に向かうに従って徐々に変化するように構成されている。ソレノイド３１が駆動され、反射板３５が上下に移動することにより、受光部４０ｂに入射する光の強度が変化する。すなわち、受光部４０ｂにて受光した光の強度は、プランジャ３１ｃの上下方向の位置に対応している。位置センサ４０は、受光部４０ｂにて受光した光の強度に応じて、プランジャ３１ｃの位置Ｐを表す位置信号を出力する。
【００２６】
また、各鍵１１の前端部の下方には、手動演奏時の鍵１１の押離鍵操作を検出する鍵スイッチＳＷが設けられている。鍵スイッチＳＷは、第１スイッチＳＷ１及び第２スイッチＳＷ２からなる。鍵１１が押鍵されない状態においては、両スイッチはオフ状態である。そして、鍵１１を押すと、まず第１スイッチＳＷ１がオフ状態からオン状態に切り替わり、さらに、押鍵深さが大きくなると、第２スイッチＳＷ２がオフ状態からオン状態に切り替わる。そして、鍵１１を離すと、第２スイッチＳＷ２がオン状態からオフ状態に切り替わり、さらに押鍵深さが小さくなると、第１スイッチＳＷ１がオン状態からオフ状態に切り替わる。
【００２７】
また、この電子楽器は、バス４２に接続された検出回路４３を備えている。手動演奏時における各鍵１１の第１スイッチＳＷ１及び第２スイッチＳＷ２のオン・オフ動作は、検出回路４３によって検出される。すなわち、検出回路４３は、各鍵１１の第１スイッチＳＷ１及び第２スイッチＳＷ２を走査して、スイッチＳＷ２がオフ状態からオン状態へ変化したことを検出すると、後述するコンピュータ部４５に、割り込み信号を出力するとともに、同スイッチの属する鍵１１に割り当てられた音高を表すキーコード及び押鍵されたことを表すキーオン指令（キーオンデータ）を出力してキーオンイベントを発生させる。また、検出回路４３は、第１スイッチＳＷ１がオン状態からオフ状態に変化したことを検出すると、コンピュータ部４５に、割り込み信号を出力するとともに、同スイッチの属する鍵１１の音高を表すキーコード及び離鍵されたことを表すキーオフ指令（キーオフデータ）を出力してキーオフイベントを発生させる。また、検出回路４３は、コンピュータ部４５からの指示に応じて、位置センサ４０からプランジャ３１ｃの位置Ｐを表す位置信号を入力して、コンピュータ部４５に出力する。
【００２８】
また、この電子楽器は、バス４２に接続された駆動回路４４を備えている。駆動回路４４は、パルス幅変調（ＰＷＭ）した駆動信号を供給して、ソレノイド３１を駆動する。具体的には、バス４２を介して、コンピュータ部４５から供給されるキーコード及びデューティ比を入力して、キーコードによって表される鍵１１に対応したソレノイド３１に、前記デューティ比に設定されたＰＷＭ信号を駆動信号として供給する。
【００２９】
また、この電子楽器は、バス４２に接続されたコンピュータ部４５を備えている。コンピュータ部４５は、ＣＰＵ４５ａ、タイマ４５ｂ、ＲＯＭ４５ｃ及びＲＡＭ４５ｄからなる。ＣＰＵ４５ａは、後述の各種プログラムを実行して音源回路４８を制御して、自動演奏及び手動演奏に応じた楽音信号を発生させる。さらに、自動演奏時においては、ソレノイド３１を制御して、鍵１１を駆動する。本実施形態においては、詳しくは後述するように、ソレノイド３１の制御状態が、複数のフラグの値の組み合わせに応じて分類されている。キーイベントの発生、プランジャ３１ｃの移動などに起因して、前記複数のフラグの値が変化する。これにより、ソレノイド３１の制御状態が遷移する。各制御状態において、ソレノイド３１へ供給する駆動信号の制御情報（すなわち、出力フラグＰＷＦの値）が規定されていて、ＣＰＵ４５ａは、この制御情報に従ってソレノイド３１を制御する。
【００３０】
タイマ４５ｂは、予めＣＰＵ４５ａによって設定された周期で、割り込み信号をＣＰＵ４５ａに出力する。ＲＯＭ４５ｃは、この電子楽器に予め組み込まれている半導体メモリ及びハードディスク、並びにこの電子楽器に装着可能なＨＤＤ、ＦＤＤ、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどの大容量の不揮発性記録媒体と、同各記録媒体に対応するドライブユニットを含むものであり、各種プログラム及び各種データを記憶する。
【００３１】
本実施形態においては、ＲＯＭ４５ｃに、楽曲を自動演奏するための複数の曲データ、ソレノイド３１へ供給する駆動信号のデューティ比を表す複数のデューティ比テーブルなどが記憶されている。各曲データは、ヘッダ、及び一連のイベントデータからなる。ヘッダは、曲名、初期の音色、音量、演奏のテンポなどを表す複数のデータからなる。イベントデータには、キーオンデータ、キーオフデータ、楽音制御データ、テンポデータ、エンドデータなどが含まれる。詳しくは後述するように、ＣＰＵ４５ａによって、この曲データを読み出して再生することにより、コンピュータ部４５は、自動演奏制御装置として動作する。
【００３２】
キーオンデータは、発生させる楽音信号の音高を表すキーコード及び押鍵を表すキーオン指令から構成されている。すなわち、キーオンデータは、手動演奏における押鍵時に検出回路４３から出力されるキーコード及びキーオン指令と同様のデータから構成されている。キーオフデータは、発生中の楽音の音高を表すキーコード及び離鍵を表すキーオフ指令から構成されている。すなわち、キーオフデータは、手動演奏における離鍵時に検出回路４３から出力されるキーコード及びキーオフ指令と同様のデータから構成されている。
【００３３】
楽音制御データは、発生中の楽音信号の音色、音量などを変化させる制御データから構成されている。テンポデータは、自動演奏のテンポを変更させる制御データから構成されている。これらのキーオンデータ、キーオフデータ、楽音制御データ及びテンポデータは、それらの楽曲中のタイミングを表すテンポクロックタイミングをそれぞれ含む。エンドデータは、曲の終了を表す。なお、上述のキーオンデータ、キーオフデータ及び楽音制御データを、楽音制御パラメータと呼ぶ。また、上述の曲データ及びプログラムは予め各記録媒体に記録されていてもよいし、後述するＭＩＤＩインターフェース回路５２及び通信インターフェース回路５３を介して外部機器から取り込んでもよい。
【００３４】
複数のデューティ比テーブルは、図４に示すように、それぞれ、鍵１１を円滑に移動させるために、プランジャ３１ｃの位置（すなわち、押鍵深さ）とソレノイド３１に供給する駆動信号（ＰＷＭ信号）のデューティ比との関係を規定している。押鍵時のテーブルと離鍵時のテーブルは異なる。すなわち、各デューティ比テーブルは、ヒステリシスを有する。以下の説明において、鍵１１をレスト位置からフルストローク位置へ向かって移動させるときにソレノイド３１へ供給する駆動信号を押鍵用の駆動信号といい、鍵１１をフルストローク位置からレスト位置へ向かって移動させるときにソレノイド３１へ供給する駆動信号を離鍵用の駆動信号という。また、プランジャ３１ｃの位置に応じたデューティ比の平均値は、デューティ比テーブルごとに異なる。鍵１１の属する音域（例えば、低音域、中音域、高音域）に応じて、鍵１１は、複数のデューティ比テーブルのうちのいずれか１つに割り当てられている。具体的には、鍵盤装置１０の質量体は低音域ほど重い（すなわち、回転モーメントが大きい）ため、低音域の鍵１１ほど、デューティ比の平均値が大きいデューティ比テーブルに割り当てられている。
【００３５】
ＲＡＭ４５ｄは、各種プログラムの実行に必要なデータを一時的に記憶する。とくに、本実施形態においては、ＲＡＭ４５ｄは、鍵１１ごとに、ソレノイド３１の制御状態を判定するためのデータを記憶する。具体的には、ＭＩＤＩステータスフラグＭＳＦ、プランジャ位置フラグＰＦ１乃至ＰＦ３、前状態出力フラグＰＰＷＦ、キーオン回数ＯＮＣＴ、キーオフ回数ＯＦＣＴ、鍵駆動回数ＫＤＣＴ、キーオフ回数フラグＯＦＦ及び鍵駆動回数フラグＫＤＦの値を記憶する。
【００３６】
ＭＩＤＩステータスフラグＭＳＦは、自動演奏時において発生した最新のキーイベントの種類を表す。すなわち、ＭＩＤＩステータスフラグＭＳＦは、キーオンイベントが発生すると「１」に設定され、キーオフイベントが発生すると「０」に設定される。
【００３７】
プランジャ位置フラグＰ１乃至Ｐ３の値は、プランジャ３１ｃの位置に応じて決定される。ここで、ソレノイド３１の非通電状態であって、鍵１１がレスト位置にあるときのプランジャ３１ｃの位置を初期位置ＰＳ（０ｍｍ）とし、ソレノイド３１が駆動されて、鍵１１がフルストローク位置にあるときのプランジャ３１ｃの位置を限界位置ＰＥ（５ｍｍ）とする。そして、初期位置ＰＳと限界位置ＰＥとの間に第１位置Ｐ１（０．３ｍｍ）、第２位置Ｐ２（３．５ｍｍ）及び第３位置Ｐ３（４．７ｍｍ）を設定している。プランジャ３１ｃが、初期位置ＰＳから第１位置Ｐ１までの間にあるとき、プランジャ位置フラグＰＦ１乃至ＰＦ３は、いずれも「０」に設定される。プランジャ３１ｃが、第１位置Ｐ１から第２位置Ｐ２までの間にあるとき、プランジャ位置フラグＰＦ１が「１」に設定され、残りのプランジャ位置フラグＰＦ２及びＰＦ３は「０」に設定される。プランジャ３１ｃが第２位置Ｐ２から第３位置Ｐ３までの間にあるとき、プランジャ位置フラグＰＦ１及びＰＦ２が「１」に設定され、プランジャ位置フラグＰＦ３が「０」に設定される。そして、プランジャ３１ｃが、第３位置Ｐ３から限界位置ＰＥまでの間にあるとき、プランジャ位置フラグＰＦ１乃至ＰＦ３が「１」に設定される。
【００３８】
前状態出力フラグＰＰＷＦは、１つ前の制御状態におけるソレノイド３１への駆動信号の種類を表す。すなわち、前状態出力フラグＰＰＷＦは、１つ前の制御状態においてソレノイド３１に押鍵用の駆動信号を供給していたとき「１」に設定され、１つ前の制御状態においてソレノイド３１に離鍵用の駆動信号を供給していたとき「０」に設定される。
【００３９】
キーオン回数ＯＮＣＴ及びキーオフ回数ＯＦＣＴは、鍵１１が、駆動回路４４によって駆動されて、レスト位置から移動し始めてから再びレスト位置に戻るまでの間に発生した、鍵１１に関するキーオンイベント及びキーオフイベントの回数を表す。短い期間内に同一鍵を繰り返し打鍵する連打演奏においては、鍵１１がレスト位置に戻る前に、キーオンイベント及びキーオフイベントが繰り返し発生する。この場合、詳しくは後述するように、駆動回路４４は、鍵１１の離鍵動作の途中で、再び押鍵動作に切り替える。ＣＰＵ４５ａは、この連打演奏時のキーオンイベント及びキーオフイベントの回数をカウントして、キーオン回数ＯＮＣＴ及びキーオフ回数ＯＦＣＴとしてＲＡＭ４５ｄに記憶する。また、ＣＰＵ４５ａは、前記連打演奏時において、プランジャ３１ｃが限界位置ＰＥに達した回数を鍵駆動回数ＫＤＣＴとしてＲＡＭ４５ｄに記憶する。
【００４０】
キーオフ回数フラグＯＦＦは、キーオフ回数ＯＦＣＴが「０」であるとき「０」に設定され、キーオフ回数ＯＦＣＴが「１」以上であるとき「１」に設定される。また、鍵駆動回数フラグＫＤＦは、キーオン回数ＯＮＣＴと鍵駆動回数ＫＤＣＴとの差ＤＩＦ（＝ＯＮＣＴ−ＫＤＣＴ）が、所定の基準値ｂより大きいとき「１」に設定され、差ＤＩＦが、基準値ｂ以下であるとき「０」に設定される。ただし、差ＤＩＦが基準値ａよりも大きいとき、差ＤＩＦは、「０」に設定される。なお、基準値ａ及び基準値ｂは、ソレノイド３１の出力特性（すなわち、供給電力に対する推力）に関係している。したがって、ソレノイド３１の特性及びデューティ比テーブルに応じて、最適な基準値ａ及び基準値ｂを求める。また、最適な基準値ａ及び基準値ｂを実験的に求めてもよい。本実施形態においては、ａ＝６かつｂ＝２であるときに最も良好な結果が得られた。すなわち、発音に対する鍵の駆動が自然に感じられた。
【００４１】
ソレノイド３１の制御状態は、図５に示すように、ＭＩＤＩステータスフラグＭＳＦ、プランジャ位置フラグＰＦ１乃至ＰＦ３、前状態出力フラグＰＰＷＦ、キーオフ回数フラグＯＦＦ及び鍵駆動回数フラグＫＤＦの値の組み合わせに応じて、状態ＳＴ１〜ＳＴ１６の１６種類の状態に分類されている。そして、上記のように分類された各状態において、ソレノイド３１へ駆動信号を供給するか否かを表す出力フラグＰＷＦの値がそれぞれ設定されてＲＯＭ４５ｃに記憶されている。同図中、出力フラグＰＷＦの値が「１」と記載されている状態においては、ソレノイド３１へ押鍵用の駆動信号を供給し、出力フラグＰＷＦの値が「０」と記載されている状態においては、ソレノイド３１へ離鍵用の駆動信号を供給する。なお、同図中、「ＮＣ」とは、「０」又は「１」のいずれの値であってもよいことを表す。また、以下の説明において、「ＳＴ１」〜「ＳＴ１６」を状態番号という。
【００４２】
例えば、状態ＳＴ１は、ＭＩＤＩステータスフラグＭＳＦ、プランジャ位置フラグＰＦ１乃至ＰＦ３、前状態出力フラグＰＰＷＦ、キーオフ回数フラグＯＦＦ及び鍵駆動回数フラグＫＤＦの値が「０」に設定されている状態である。この状態ＳＴ１においては、出力フラグＰＷＦの値が「０」と規定されているので、ソレノイド３１へ離鍵用の駆動信号を供給する。また、例えば、状態ＳＴ２は、ＭＩＤＩステータスフラグＭＳＦ、プランジャ位置フラグＰＦ１乃至ＰＦ３、前状態出力フラグＰＰＷＦ、キーオフ回数フラグＯＦＦ及び鍵駆動回数フラグＫＤＦのうち、ＭＩＤＩステータスフラグＭＳＦのみが「１」に設定され、他のフラグが「０」に設定されている状態である。この状態ＳＴ９においては、出力フラグＰＷＦの値が「１」と規定されているので、ソレノイド３１へ押鍵用の駆動信号を供給する。他の制御状態においても、出力フラグＰＷＦの値に従って、ソレノイド３１への駆動信号の供給を制御する。
【００４３】
また、この電子楽器は、複数のパネル操作子４６、ディスプレイ４７及び音源回路４８を備えている。複数のパネル操作子４６は、この電子楽器の操作パネル上に設けられていて、この電子楽器の各種データの設定に利用される。例えば、鍵盤１０を押離鍵操作したときに発生させる楽音の音色を選択するために利用される。また、例えば、ＲＯＭ４５ｃに記憶されている曲データを選択し、自動演奏させるために利用される。複数のパネル操作子４６の操作は、バス４２に接続された検出回路４９によって検出される。
【００４４】
検出回路４９は、複数のパネル操作子４６の操作を表す操作情報をコンピュータ部４５に出力する。例えば、ユーザが、パネル操作子を用いて、鍵盤１０に割り当てる音色を選択すると、検出回路４９は、コンピュータ部４５に割り込み信号を出力するとともに、前記選択された音色を表す音色番号を出力する。また、例えば、ユーザが、曲データを選択し、自動演奏の開始を指示すると、検出回路４９は、コンピュータ部４５に割り込み信号を出力するとともに、前記選択された曲を表す曲番号及び自動演奏の開始を表す演奏開始データを出力する。ディスプレイ４７は、操作パネル上に設けられた液晶ディスプレイ、ＣＲＴなどで構成され、文字、数字、図形などを表示する。このディスプレイ４７の表示内容は、バス４２に接続された表示回路５０によって制御される。
【００４５】
音源回路４８は、バス４２に接続されていて、バス４２を介してＣＰＵ４５ａから供給された楽音信号の生成開始を表わす楽音制御パラメータに応じて、楽音信号の生成を開始する。また、音源回路４８は、バス４２を介してＣＰＵ４５ａから供給された楽音信号の生成停止を表わす楽音制御パラメータに応じて、楽音信号の生成を停止する。楽音信号の生成の停止とは、楽音信号をリリース制御（減衰制御）した後に、その生成を停止することを意味する。なお、音源回路４８は、複数の発音チャンネルを有しており、本実施形態においては、キーオンイベントの発生時には、いずれかの発音チャンネルにて楽音信号が生成される。音源回路４８にて生成された楽音信号は、サウンドシステム５１を介して放音される。サウンドシステム５１は、楽音信号をＤ／Ａ変換するＤ／Ａ変換器、Ｄ／Ａ変換器によってアナログ信号に変換された楽音信号を増幅するアンプ、及びアンプによって増幅されたアナログ信号を空気振動に変換して放音するスピーカなどが含まれている。
【００４６】
また、この電子楽器は、種々の外部機器５２に接続可能となっている。すなわち、この電子楽器は、バス４２に接続されたＭＩＤＩインターフェース回路５３を備えていて、ＭＩＤＩ対応のＭＩＤＩ機器５４（例えば、シーケンサ）に接続可能となっている。また、この電子楽器は、通信インターフェース回路５５を備えていて、インターネットなどの通信ネットワークＮＴを介してサーバコンピュータ５６に接続可能となっている。
【００４７】
次に、上記のように構成した電子楽器の動作について説明する。ユーザがこの電子楽器の図示しない電源スイッチをオンにすると、ＣＰＵ４５ａは、図６の初期化プログラムを実行する。ＣＰＵ４５ａは、ステップＳ１０にて初期化処理を開始すると、ステップＳ１２にて、この電子楽器の各回路を初期状態に設定する。すなわち、鍵盤１０に割り当てられる音色のデータ、ディスプレイ４７に表示する表示データなどをＲＯＭ４５ｃから読み出して、それぞれの初期値として設定する。つぎに、ＣＰＵ４５ａは、ステップＳ１４にて、タイマ４５ｂを作動開始させ、所定の間隔（例えば、１ミリ秒間隔）でタイマ割り込みを発生させるよう設定する。つぎに、ＣＰＵ４５ａは、ステップＳ１６にて、検出回路４３及び検出回路４９からの割り込みを許可する。そして、ＣＰＵ４５ａは、ステップＳ１８にて初期化処理を終了する。
【００４８】
検出回路４３からキーイベント（キーオンイベント又はキーオフイベント）に関する割り込みが発生すると、ＣＰＵ４５ａは、図７に示す手動演奏プログラムを実行する。ＣＰＵ４５ａは、ステップＳ２０にて手動演奏処理を開始すると、ステップＳ２２にて、検出回路４３からキーイベントデータ（キーオンデータ又はキーオフデータ）を取り込んで、ＲＡＭ４５ｄ内のイベント処理バッファに記憶する。イベント処理バッファは、複数のキーイベントデータを記憶できるＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）メモリである。すなわち、イベント処理バッファに記憶されている複数のデータは、記憶されたタイミングが古い順に、次に説明するキーイベントプログラム、及び後述する鍵駆動プログラムによって処理される。そして、ＣＰＵ４５ａは、ステップＳ２４にて、図８に示すキーイベントプログラムを実行する。
【００４９】
キーイベントプログラムは、手動演奏プログラム及び後述する自動演奏プログラムに共通のサブルーチンである。ＣＰＵ４５ａは、ステップＳ３０にて、キーイベント処理を開始すると、ステップＳ３２にて、イベント処理バッファに記憶されているキーイベントデータがキーオンイベントであるかキーオフイベントであるか判定する。そして、イベント処理バッファに記憶されているキーイベントデータがキーオンイベントを表すときには、ＣＰＵ４５ａは、ステップＳ３４にて、音源回路４８に発音を指示する。すなわち、キーイベントデータを用いて、発生させる楽音を規定する楽音制御パラメータを生成して、音源回路４８に出力する。音源回路４８は、入力した楽音制御パラメータに応じた楽音信号を生成して、サウンドシステム５１へ供給する。そして、ＣＰＵ４５ａは、後述のステップＳ３８へ処理を進める。
【００５０】
一方、ステップＳ３２において、イベント処理バッファに記憶されているキーイベントデータがキーオフイベントを表すときには、ＣＰＵ４５ａは、ステップＳ３６にて、消音を指示する。すなわち、キーイベントデータによって特定された楽音信号の発生を停止するよう、音源回路４８に指示する。これにより、音源回路４８は、前記発生中の楽音信号の音量を減衰させて、前記楽音の発生を停止する。そして、ＣＰＵ４５ａは、ステップＳ３８にて、キーイベントプログラムを終了して、メインルーチンに戻る。上記の場合、キーイベントプログラムは、手動演奏プログラムのサブルーチンとして実行されたので、ＣＰＵ４５ａは、メインルーチンである手動演奏プログラムに戻り、手動演奏プログラムのステップＳ２６にて手動演奏処理を終了する。
【００５１】
また、検出回路４９から割り込みが発生し、その割り込み要因がユーザからの自動演奏の開始指示であることをＣＰＵ４５ａが検出すると、ＣＰＵ４５ａは、図９に示す自動演奏プログラムと、図１０に示す鍵駆動プログラムを実行する。自動演奏プログラムと鍵駆動プログラムとは、並列に実行される。
【００５２】
まず、自動演奏プログラムについて説明する。ＣＰＵ４５ａは、ステップＳ４０にて自動演奏処理を開始すると、ステップＳ４２にて、タイマ４５ｂを用いて時間計測を開始する。つぎに、ＣＰＵ４５ａは、ステップＳ４４にて、ユーザによって選択された曲データのイベントデータのうち、テンポクロックタイミングと現在時刻が一致するイベントデータを検索する。該当するイベントデータが無い場合には、「Ｎｏ」と判定して、再びステップＳ４４を実行する。一方、該当するイベントデータがある場合には、「Ｙｅｓ」と判定して、ステップＳ４６にて、そのイベントデータを読み出してイベント処理バッファに記憶する。そして、ＣＰＵ４５ａは、ステップＳ４８にて、イベント処理バッファに記憶したイベントデータの種類に応じて、次に実行する処理を決定する。すなわち、前記記憶したイベントデータがキーイベントデータである場合には、ステップＳ５０にて、上記のキーイベントプログラムを実行して、ステップＳ４４に戻る。なお、自動演奏においては、後述する鍵駆動プログラムによって鍵１１を駆動するので、駆動した鍵１１の第１スイッチＳＷ１及び第２スイッチＳＷ２のオン・オフ状態が変化するが、この駆動した鍵１１に関しては、手動演奏プログラムを実行しない。ただし、駆動していない鍵１１の第１スイッチＳＷ１及び第２スイッチＳＷ２のオン・オフ状態が変化した場合（すなわち、駆動していない鍵１１が、演奏者によって押離鍵操作された場合）には、手動演奏プログラムを実行する。
【００５３】
また、ステップＳ４６において記憶したイベントデータがその他のデータである場合には、ＣＰＵ４５ａは、ステップＳ５２にて、そのイベントデータに応じた処理を実行して、ステップＳ４４に戻る。例えば、イベントデータが音色を変更するプログラムチェンジデータである場合には、音色を変更することを表す楽音制御パラメータを生成して音源回路４８に出力し、ステップＳ４４に戻る。また、ステップＳ４６において記憶したイベントデータがエンドデータである場合には、ＣＰＵ４５ａは、ステップＳ５４にて、自動演奏処理を終了する。
【００５４】
つぎに、鍵駆動プログラムについて説明する。鍵駆動プログラムは、以下説明するステップＳ６４〜ステップＳ８６を繰り返し実行し、ソレノイド３１の制御状態を遷移させる。以下、１つの鍵１１の鍵駆動処理について説明するが、他の鍵についても同様に処理する。ＣＰＵ４５ａは、ステップＳ６０にて鍵駆動処理を開始すると、ステップＳ６２にて、初期化処理を実行する。すなわち、全てのフラグの値を「０」に設定する。また、キーオン回数ＯＮＣＴ、キーオフ回数ＯＦＣＴ及び鍵駆動回数ＫＤＣＴの値を「０」に設定する。さらに、現在の制御状態に遷移する１つ前の制御状態の状態番号を記憶しておく状態番号バッファを「ＳＴ１」に設定する。
【００５５】
つぎに、ＣＰＵ４５ａは、ステップＳ６４にて、上記の自動演奏プログラムのステップＳ４６の実行によりイベント処理バッファに記憶されたイベントデータのうち、鍵駆動処理の実行されていない未処理のイベントデータがあるか否かを検出する。未処理のイベントデータが無い場合には、ＣＰＵ４５ａは、「Ｎｏ」と判定して、後述のステップＳ７０に処理を進める。一方、未処理のイベントデータがある場合には、ＣＰＵ４５ａは、「Ｙｅｓ」と判定して、ステップＳ６６にて、前記未処理のイベントデータの種類に応じて、次に実行する処理を決定する。
【００５６】
前記未処理のイベントデータが、キーイベントデータ及びエンドデータとは異なるその他のデータである場合には、ＣＰＵ４５ａは、後述のステップＳ７０に処理を進める。また、前記未処理のイベントデータが、キーイベントデータである場合には、ＣＰＵ４５ａは、ステップＳ６８にて、キーイベントデータが表すイベントの種類（すなわち、キーオンイベント又はキーオフイベント）に応じて、前記キーイベントデータが表すキーコードに対応する、ＭＩＤＩステータスフラグＭＳＦを更新するとともに、キーオン回数ＯＮＣＴ又はキーオフ回数ＯＦＣＴを更新する。すなわち、キーイベントデータがキーオンイベントを表す場合には、ＭＩＤＩステータスフラグＭＳＦを「１」に設定するとともに、キーオン回数ＯＮＣＴをインクリメントする。この場合、差ＤＩＦ（＝ＯＮＣＴ−ＫＤＣＴ）に応じて、鍵駆動回数フラグＫＤＦを更新する。すなわち、差ＤＩＦが基準値ｂ以下であれば、鍵駆動回数フラグＫＤＦを「０」に設定し、差ＤＩＦが基準値ｂより大きければ鍵駆動回数フラグＫＤＦを「１」に設定する。ただし、差ＤＩＦが、基準値ａよりも大きい場合は、差ＤＩＦを「０」とみなして鍵駆動回数フラグＫＤＦを設定する。一方、キーオフイベントを表す場合には、ＭＩＤＩステータスフラグＭＳＦを「０」に設定するとともに、キーオフ回数ＯＦＣＴをインクリメントする。この場合、キーオフ回数ＯＦＣＴが「１」以上になるので、キーオフ回数フラグＯＦＦを「１」に設定する。さらに、前状態出力フラグＰＰＷＦを１つ前の制御状態の出力フラグＰＷＦの値に設定する。
【００５７】
つぎに、ＣＰＵ４５ａは、ステップＳ７０にて、検出回路４３を介して、位置センサ４０から、現在のプランジャ３１ｃの位置Ｐを読み込み、前記読み込んだ位置Ｐに応じて、プランジャ位置フラグＰＦ１乃至ＰＦ３を更新する。すなわち、位置Ｐが、初期位置ＰＳから第１位置Ｐ１までの間にあるとき、プランジャ位置フラグＰＦ１乃至ＰＦ３を、いずれも「０」に設定する。また、位置Ｐが、第１位置Ｐ１から第２位置Ｐ２までの間にあるとき、プランジャ位置フラグＰＦ１を「１」に設定し、残りのプランジャ位置フラグＰＦ２及びＰＦ３を「０」に設定する。また、位置Ｐが、第２位置Ｐ２から第３位置Ｐ３までの間にあるとき、プランジャ位置フラグＰＦ１及びＰＦ２を「１」に設定し、プランジャ位置フラグＰＦ３を「０」に設定する。そして、位置Ｐが、第３位置Ｐ３から限界位置ＰＥまでの間にあるとき、プランジャ位置フラグＰＦ１乃至ＰＦ３を「１」に設定する。
【００５８】
つぎに、ＣＰＵ４５ａは、ステップＳ７２にて、ＭＩＤＩステータスフラグＭＳＦ、プランジャ位置フラグＰＦ１乃至ＰＦ３の値が全て「０」であるか否か判定する。ＭＩＤＩステータスフラグＭＳＦ、プランジャ位置フラグＰＦ１乃至ＰＦ３のうちの少なくとも１つのフラグの値が「１」であれば、「Ｎｏ」と判定して、ＣＰＵ４５ａは、処理を後述のステップＳ７６に進める、一方、ＭＩＤＩステータスフラグＭＳＦ、プランジャ位置フラグＰＦ１乃至ＰＦ３の値が全て「０」であれば、「Ｙｅｓ」と判定して、ＣＰＵ４５ａは、ステップＳ７４にて、前状態出力フラグＰＰＷＦ、キーオフ回数フラグＯＦＦ、鍵駆動回数フラグＫＤＦ、キーオン回数ＯＮＣＴ、キーオフ回数ＯＦＣＴ及び鍵駆動回数ＫＤＣＴを、「０」に設定する。
【００５９】
つぎに、ＣＰＵ４５ａは、ステップＳ７６にて、ＭＩＤＩステータスフラグＭＳＦ、プランジャ位置フラグＰＦ１乃至ＰＦ３、前状態出力フラグＰＰＷＦ、キーオフ回数フラグＯＦＦ及び鍵駆動回数フラグＫＤＦの値を用いて、現在のソレノイド３１の制御状態が、制御状態ＳＴ１〜ＳＴ１６のうちの、どの制御状態に該当するかを判別する。例えば、鍵駆動プログラムの開始直後においては、ＭＩＤＩステータスフラグＭＳＦ、プランジャ位置フラグＰＦ１乃至ＰＦ３、前状態出力フラグＰＰＷＦ、キーオフ回数フラグＯＦＦ及び鍵駆動回数フラグＫＤＦは全て「０」に初期化されているので、ＣＰＵ４５ａは、制御状態ＳＴ１に該当すると判定する。
【００６０】
つぎに、ＣＰＵ４５ａは、ステップＳ７８にて、ソレノイド３１の制御状態が遷移したか否かを判定する。すなわち、状態番号バッファに記憶されている状態番号が表わす１つ前の制御状態とステップＳ７６にて判定した現在の制御状態とが一致するか否かを判定する。両制御状態が一致する場合には「Ｎｏ」と判定して、ＣＰＵ４５ａは、後述のステップＳ８４に処理を進める。一方、両制御状態が異なる場合には、「Ｙｅｓ」と判定して、ステップＳ８０にて、上記制御状態の遷移が、状態ＳＴ４から状態ＳＴ５への遷移、状態ＳＴ４から状態ＳＴ６への遷移又は状態ＳＴ８から制御状態ＳＴ９への遷移のいずれかに該当するか否か判定する。いずれの遷移にも該当しない場合は、ＣＰＵ４５ａは、「Ｎｏ」と判定して、ステップＳ８４に処理を進める。一方、いずれかの遷移に該当する場合は、ＣＰＵ４５ａは、「Ｙｅｓ」と判定して、ステップＳ８２にて、鍵駆動回数ＫＤＣＴ及び鍵駆動回数フラグＫＤＦを更新する。すなわち、鍵駆動回数ＫＤＣＴをインクリメントする。そして、差ＤＩＦを算出し、差ＤＩＦが基準値ｂ以下であれば、鍵駆動回数フラグＫＤＦを「０」に設定し、差ＤＩＦが基準値ｂより大きければ鍵駆動回数フラグＫＤＦを「１」に設定する。ただし、差ＤＩＦが、基準値ａよりも大きい場合は、差ＤＩＦを「０」とみなして鍵駆動回数フラグＫＤＦを設定する。
【００６１】
つぎに、ＣＰＵ４５ａは、ステップＳ８４にて、前記判定した現在の制御状態の出力フラグＰＷＦの値に従って、ソレノイド３１への駆動信号の供給を制御する。具体的には、出力フラグＰＷＦの値が「１」であれば、ＣＰＵ４５ａは、駆動対象のソレノイド３１を表すキーコードを駆動回路４４に供給するとともに、上記の押鍵用のデューティ比テーブルに従って、デューティ比を駆動回路４４に供給する。一方、出力フラグＰＷＦの値が「０」であれば、ＣＰＵ４５ａは、駆動対象のソレノイド３１を表すキーコードを駆動回路４４に供給するとともに、上記の離鍵用のデューティ比テーブルに従って、デューティ比を駆動回路４４に供給する。
【００６２】
つぎに、ＣＰＵ４５ａは、ステップＳ８６にて、現在の制御状態の状態番号を１つ前の制御状態の状態番号として制御状態バッファに記憶して、ステップＳ６４に戻る。このように、ＣＰＵ４５ａは、上記のステップＳ６４〜Ｓ８６の処理を繰り返す。ただし、ステップＳ６６において、イベントデータの種類がエンドデータである場合には、ＣＰＵ４５ａは、ステップＳ８８にて、鍵駆動プログラムを終了する。上記のステップＳ６４〜Ｓ８６を繰り返す処理は高速に実行されるので、ステップＳ６４〜Ｓ８６の実行において、いずれのフラグ及びカウンタの値も更新されないこともある。すなわち、一度ステップＳ６４〜Ｓ８６を実行しただけでは、制御状態が遷移しないこともある。
【００６３】
つぎに、ソレノイド３１の制御状態の遷移及び各状態における動作について、図１１乃至図１５を用いて具体的に説明する。なお、図１１の各制御状態を示すブロック中において、各制御状態のＭＩＤＩステータスフラグＭＳＦ、プランジャ位置フラグＰＦ１乃至ＰＦ３、前状態出力フラグＰＰＷＦ、キーオフ回数フラグＯＦＦ及び鍵駆動回数フラグＫＤＦの値をこの順に括弧内に列記している。そして、各種フラグの値を列記した括弧の下に、各制御状態に規定されている出力フラグＰＷＦの値を記載している。また、図１２乃至図１５におけるキーオン指令及びキーオフ指令を表すキーオン信号ＫＥＹＯＮ及びキーオフ信号ＫＥＹＯＦＦのパルスのそれぞれの立下り時に、キーオンイベント及びキーオフイベントがそれぞれ発生する。
【００６４】
Ａ．通常駆動
まず、鍵１１を押鍵してフルストローク位置に一定時間保持した後にレスト位置まで戻す通常駆動における、ソレノイド３１の制御状態の遷移及び各制御状態における動作について、図１１及び図１２を用いて説明する。
【００６５】
（Ａ１）状態ＳＴ１
鍵１１の駆動開始時においては、全てのフラグが「０」に初期化される（Ｓ６２）ので、ソレノイド３１の制御状態は、状態ＳＴ１である。
【００６６】
（Ａ２）状態ＳＴ１〜状態ＳＴ２
つぎに、キーオンイベントにより、ＭＩＤＩステータスフラグＭＳＦが「１」に設定され（Ｓ６８）、キーオン回数ＯＮＣＴがインクリメントされて「１」に設定される。また、キーオン回数ＯＮＣＴと鍵駆動回数ＫＤＣＴとの差ＤＩＦが「１」になる。差ＤＩＦは「ｂ」（＝「２」）以下であるので、鍵駆動回数フラグＫＤＦは「０」のままである。また、他のフラグ及び他のカウンタの値も、「０」のままである。以下の説明においては、各ステップにおいて値が変更されたフラグについてのみ説明し、値が変更されていないフラグについての説明を省略する。これにより、ソレノイド３１の制御状態は、状態ＳＴ２に遷移する（Ｓ７６）。状態ＳＴ２においては、出力フラグＰＷＦが「１」に設定されているので、ソレノイド３１に押鍵用の駆動信号が供給され（Ｓ８４）、プランジャ３１ｃが上昇する。
【００６７】
（Ａ３）状態ＳＴ２〜状態ＳＴ３
プランジャ３１ｃの位置Ｐが第１位置Ｐ１を超えると、位置フラグＰＦ１が「１」に設定され、前状態出力フラグＰＰＷＦが、１つ前の制御状態である状態ＳＴ２の出力フラグＰＷＦの値に設定される（Ｓ７０）。すなわち、前状態出力フラグＰＰＷＦが「１」に設定される。これにより、ソレノイド３１の制御状態は、状態ＳＴ３に遷移する（Ｓ７６）。状態ＳＴ３においては、出力フラグＰＷＦが「１」に設定されているので、ソレノイド３１に押鍵用の駆動信号が供給され（Ｓ８４）、プランジャ３１ｃがさらに上昇する。
【００６８】
（Ａ４）状態ＳＴ３〜状態ＳＴ４
つぎに、プランジャ３１ｃの位置Ｐが第２位置Ｐ２を超えると、プランジャ位置フラグＰＦ２が「１」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ７０）。これにより、ソレノイド３１の制御状態は、状態ＳＴ４に遷移する（Ｓ７６）。状態ＳＴ４においては、出力フラグＰＷＦが「１」に設定されているので、ソレノイド３１に押鍵用の駆動信号が供給され（Ｓ８４）、プランジャ３１ｃがさらに上昇する。
【００６９】
（Ａ５）状態ＳＴ４〜状態ＳＴ５
つぎに、プランジャ３１ｃの位置Ｐが第３位置Ｐ３を超えると、プランジャ位置フラグＰＦ３が「１」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ７０）。また、キーオフ回数ＯＦＣＴは「０」であるので、ソレノイド３１の制御状態は、状態ＳＴ５に遷移する（Ｓ７６）。状態ＳＴ４から状態ＳＴ５への遷移であるので、鍵駆動回数ＫＤＣＴがインクリメントされて（Ｓ８２）、「１」に設定される。これにより、鍵駆動回数ＫＤＣＴとキーオン回数ＯＮＣＴの差ＤＩＦは「０」となる。鍵駆動回数フラグＫＤＦは「０」のままである。状態ＳＴ５においては、出力フラグＰＷＦが「１」に設定されているので、ソレノイド３１に押鍵用の駆動信号が供給され、プランジャ３１ｃがさらに上昇し、限界位置ＰＥに保持される。すなわち、鍵１１がフルストローク位置に保持される。
【００７０】
（Ａ６）状態ＳＴ５〜状態ＳＴ９
つぎに、キーオフイベントにより、ＭＩＤＩステータスフラグＭＳＦが「０」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ６８）。また、キーオフ回数ＯＦＣＴがインクリメントされて「１」に設定され、キーオフ回数フラグＯＦＦが「１」に設定される（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ９に遷移する（Ｓ７６）。状態ＳＴ９においては、出力フラグＰＷＦが「０」に設定されているので、ソレノイド３１への離鍵用の駆動信号が供給され（Ｓ８４）、プランジャ３１ｃが下降する。
【００７１】
（Ａ７）状態ＳＴ９〜状態ＳＴ１３
つぎに、プランジャ３１ｃの位置Ｐが第３位置Ｐ３を下回ると、プランジャ位置フラグＰＦ３が「０」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ７０）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１３に遷移する（Ｓ７６）。状態ＳＴ１３においては、出力フラグＰＷＦが「０」に設定されているので、ソレノイド３１に離鍵用の駆動信号が供給されていて（Ｓ８４）、プランジャ３１ｃがさらに下降する。
【００７２】
（Ａ８）状態ＳＴ１３〜状態ＳＴ１５
つぎに、プランジャ３１ｃの位置Ｐが第２位置Ｐ２を下回ると、プランジャ位置フラグＰＦ２が「０」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ７０）。また、鍵駆動回数フラグＫＤＦは「０」であるから、ソレノイド３１の制御状態は、状態ＳＴ１５に遷移する（Ｓ７６）。状態ＳＴ１５においては、出力フラグＰＷＦが「０」に設定されているので、ソレノイド３１に離鍵用の駆動信号が供給されていて（Ｓ８４）、プランジャ３１ｃがさらに下降する。
【００７３】
（Ａ９）状態ＳＴ１５〜状態ＳＴ１
そして、プランジャ３１ｃの位置Ｐが第１位置Ｐ１を下回ると、プランジャ位置フラグＰＦ１が「０」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ７０）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１に遷移して（Ｓ７６）、鍵１１がレスト位置にて停止する。
【００７４】
Ｂ．スタッカート駆動
つぎに、鍵１１を押鍵して、鍵１１がフルストローク位置に達する前にキーオフイベントが発生し、鍵１１がフルストローク位置に達した直後に離鍵動作に移行して、鍵１１をレスト位置に戻すスタッカート駆動における、ソレノイド３１の制御状態の遷移及び各制御状態における動作について、図１１及び図１３を用いて説明する。
【００７５】
（Ｂ１）状態ＳＴ１〜状態ＳＴ２〜状態ＳＴ３
状態ＳＴ１から状態ＳＴ３までの状態遷移及び各状態における動作は、上記の通常駆動と同様であるので、説明を省略する。
【００７６】
（Ｂ２）状態ＳＴ３〜状態ＳＴ７
状態ＳＴ３において、キーオフイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「０」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ６８）。また、キーオフ回数ＯＦＣＴがインクリメントされて「１」に設定され、キーオフ回数フラグＯＦＦが「１」に設定される（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ７に遷移する（Ｓ７６）。状態ＳＴ７においては、出力フラグＰＷＦが「１」に設定されているので、ソレノイド３１に押鍵用の駆動信号が供給され（Ｓ８４）、プランジャ３１ｃがさらに上昇する。
【００７７】
（Ｂ３）状態ＳＴ７〜状態ＳＴ８
つぎに、プランジャ３１ｃの位置Ｐが第２位置Ｐ２を超えると、プランジャ位置フラグＰＦ２が「１」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ７０）。これにより、ソレノイド３１の制御状態は、状態ＳＴ８に遷移する（Ｓ７６）。状態ＳＴ８においては、出力フラグＰＷＦが「１」に設定されているので、ソレノイド３１に押鍵用の駆動信号が供給され（Ｓ８４）、プランジャ３１ｃがさらに上昇する。
【００７８】
（Ｂ４）状態ＳＴ８〜・・・〜状態ＳＴ１
つぎに、プランジャ３１ｃの位置Ｐが第３位置Ｐ３を超えると、プランジャ位置フラグＰＦ３が「１」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ７０）。これにより、ソレノイド３１の制御状態は、状態ＳＴ９に遷移する（Ｓ７６）。状態ＳＴ８から状態ＳＴ９への遷移であるので、鍵駆動回数ＫＤＣＴがインクリメントされて（Ｓ８２）、「１」に設定される。これにより、鍵駆動回数ＫＤＣＴとキーオン回数ＯＮＣＴの差ＤＩＦは「０」となる。鍵駆動回数フラグＫＤＦは「０」のままである。状態ＳＴ９においては、出力フラグＰＷＦが「０」に設定されているが、ＣＰＵ４５ａが、ソレノイド３１へ供給する駆動信号を離鍵用の駆動信号に切り替えても、プランジャ３１ｃは惰性により若干上方へ移動する（図１２参照）。そして、プランジャ３１ｃは限界位置ＰＥに達した後、下降する。その後、ソレノイド３１の制御状態は、上記通常駆動と同様に、状態ＳＴ１３、状態ＳＴ１５、状態ＳＴ１の順に遷移し、鍵１１がレスト位置にて停止する。
【００７９】
Ｃ．連打駆動
つぎに、鍵１１を押鍵して、鍵１１がフルストローク位置に達する前にキーオフイベントが発生し、鍵１１がフルストローク位置に達した直後に離鍵動作に移行し、離鍵動作途中にキーオンイベントが発生し、鍵１１がレスト位置に達する前に押鍵動作に移行する連打駆動における、ソレノイド３１の制御状態の遷移及び各制御状態における動作について、図１１、図１４Ａ及び図１４Ｂを用いて説明する。
【００８０】
（Ｃ１）状態ＳＴ１〜・・・〜状態ＳＴ９
状態ＳＴ１から状態ＳＴ９へ至るまでの状態遷移及び各状態における動作は、上記スタッカート駆動における動作と同様であるので、説明を省略する。
【００８１】
（Ｃ２）状態ＳＴ９〜状態ＳＴ１１
状態ＳＴ９において、キーオンイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「１」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ６８）。また、キーオン回数ＯＮＣＴがインクリメントされて「２」に設定され、差ＤＩＦが「１」になるが、鍵駆動回数フラグＫＤＦは「０」のままである（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１１に遷移する（Ｓ７６）。状態ＳＴ１１においては、出力フラグＰＷＦが「０」に設定されているので、ソレノイド３１に離鍵用の駆動信号が供給され（Ｓ８４）、プランジャ３１ｃが下降する。
【００８２】
（Ｃ３）状態ＳＴ１１〜状態ＳＴ１０
状態ＳＴ１１において、キーオフイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「０」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ６８）。また、キーオフ回数ＯＦＣＴがインクリメントされて「２」に設定され、キーオフ回数フラグＯＦＦが「１」に設定される（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１０に遷移する（Ｓ７６）。状態ＳＴ１０においては、出力フラグＰＷＦが「０」に設定されているので、ソレノイド３１に押鍵用の駆動信号が供給され（Ｓ８４）、プランジャ３１ｃがさらに下降する。
【００８３】
（Ｃ４）状態ＳＴ１０〜状態ＳＴ１５
つぎに、プランジャ３１ｃの位置Ｐが第２位置Ｐ２を下回ると、プランジャ位置フラグＰＦ２が「０」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ７０）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１３に遷移する（Ｓ７６）。状態ＳＴ１３においては、出力フラグＰＷＦが「０」に設定されているので、ソレノイド３１に離鍵用の駆動信号が供給されていて（Ｓ８４）、プランジャ３１ｃがさらに下降する。そして、ソレノイド３１の制御状態は、状態ＳＴ１５へ遷移する。状態ＳＴ１３から状態ＳＴ１５への遷移及び状態ＳＴ１５における動作は、上記通常駆動と同様なので、説明を省略する。
【００８４】
（Ｃ５）状態ＳＴ１５〜状態ＳＴ１６
状態ＳＴ１５において、キーオンイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「１」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ６８）。また、キーオン回数ＯＮＣＴがインクリメントされて「３」に設定され、差ＤＩＦが「２」になるが、鍵駆動回数フラグＫＤＦは「０」のままである（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１６に遷移する（Ｓ７６）。状態ＳＴ１６においては、出力フラグＰＷＦが「１」に設定されているので、ソレノイド３１に押鍵用の駆動信号が供給されるが（Ｓ８４）、プランジャ３１ｃは、惰性により若干下降した後、上昇し始める。すなわち、プランジャ３１ｃは、初期位置ＰＳに達する前に、再び上昇し始める。
【００８５】
（Ｃ６）状態ＳＴ１６〜状態ＳＴ４
つぎに、プランジャ３１ｃの位置Ｐが第２位置Ｐ２を超えると、プランジャ位置フラグＰＦ２が「１」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ７０）。これにより、ソレノイド３１の制御状態は、状態ＳＴ４に遷移する（Ｓ７６）。状態ＳＴ４においては、出力フラグＰＷＦが「１」に設定されているので、ソレノイド３１に押鍵用の駆動信号が供給され（Ｓ８４）、プランジャ３１ｃがさらに上昇する。
【００８６】
（Ｃ７）状態ＳＴ４〜状態ＳＴ６
つぎに、プランジャ３１ｃの位置Ｐが第３位置Ｐ３を超えると、プランジャ位置フラグＰＦ３が「１」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ７０）。また、キーオフ回数ＯＦＣＴは「２」であるので、ソレノイド３１の制御状態は、状態ＳＴ６に遷移する（Ｓ７６）。状態ＳＴ４から状態ＳＴ６への遷移であるので、鍵駆動回数ＫＤＣＴがインクリメントされて（Ｓ８２）、「２」に設定される。これにより、鍵駆動回数ＫＤＣＴとキーオン回数ＯＮＣＴの差ＤＩＦは「１」となる。鍵駆動回数フラグＫＤＦは「０」のままである。状態ＳＴ６においては、出力フラグＰＷＦが「０」に設定されているので、ソレノイド３１に離鍵用の駆動信号が供給されるが、プランジャ３１ｃは惰性により若干上昇し、位置Ｐが第３位置Ｐ３を超える。
【００８７】
（Ｃ８）状態ＳＴ６〜状態ＳＴ１０
状態ＳＴ６において、キーオフイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「０」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ６８）。また、キーオフ回数ＯＦＣＴがインクリメントされて「３」に設定される（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１０に遷移する（Ｓ７６）。状態ＳＴ１０においても、状態ＳＴ６に引き続き、出力フラグＰＷＦが「０」に設定されているが、プランジャ３１ｃは惰性によりさらに上昇して限界位置ＰＥに達した後、下降し始める。
【００８８】
（Ｃ９）状態ＳＴ１０〜状態ＳＴ１１
状態ＳＴ１０において、キーオンイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「１」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ６８）。また、キーオン回数ＯＮＣＴがインクリメントされて「４」に設定され、差ＤＩＦが「２」になるが、鍵駆動回数フラグは「０」のままである（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１１に遷移する（Ｓ７６）。状態ＳＴ１１においては、出力フラグＰＷＦが「０」に設定されているので、ソレノイド３１に離鍵用の駆動信号が供給され（Ｓ８４）、プランジャ３１ｃが下降する。
【００８９】
（Ｃ１０）状態ＳＴ１１〜状態ＳＴ１２
つぎに、プランジャ３１ｃの位置Ｐが第３位置Ｐ３を下回ると、プランジャ位置フラグＰＦ３が「０」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ７０）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１２に遷移する（Ｓ７６）。状態ＳＴ１２においては、出力フラグＰＷＦが「０」に設定されているので、ソレノイド３１に離鍵用の駆動信号が供給され（Ｓ８４）、プランジャ３１ｃがさらに下降する。
【００９０】
（Ｃ１１）状態ＳＴ１２〜状態ＳＴ１６〜状態ＳＴ４
つぎに、プランジャ３１ｃの位置Ｐが第２位置Ｐ２を下回ると、プランジャ位置フラグＰＦ２が「０」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ７０）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１６に遷移し（Ｓ７６）、再びプランジャ３１ｃが上昇し始める。そして、（Ｃ６）において説明したように、ソレノイド３１の制御状態は、再び状態ＳＴ４へ遷移する。
【００９１】
（Ｃ１２）状態ＳＴ４〜状態ＳＴ８
状態ＳＴ４において、キーオフイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「０」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ６８）。また、キーオフ回数ＯＦＣＴがインクリメントされて「４」に設定される（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ８に遷移し（Ｓ７６）、プランジャ３１ｃはさらに上昇する。
【００９２】
（Ｃ１３）状態ＳＴ８〜状態ＳＴ９〜状態ＳＴ１１〜状態ＳＴ１２
プランジャ３１ｃの位置Ｐが第３位置Ｐ３を超えると、状態ＳＴ９へ遷移する。鍵駆動回数ＫＤＣＴがインクリメントされて「３」に設定され、差ＤＩＦが「１」になる。鍵駆動回数フラグＫＤＦは「０」のままである。そして、プランジャ３１ｃが下降して、状態ＳＴ１１へ遷移する。キーオン回数ＯＮＣＴがインクリメントされて「５」に設定され、差ＤＩＦが「２」になる。鍵駆動回数フラグＫＤＦは「０」のままである。そして、プランジャ３１ｃがさらに下降して、ソレノイド３１の制御状態は、状態ＳＴ１２へ遷移する。
【００９３】
（Ｃ１４）状態ＳＴ１２〜・・・〜状態ＳＴ１２
プランジャ３１ｃの位置Ｐが第２位置Ｐ２を下回ると、ソレノイド３１の制御状態は、状態ＳＴ１６へ遷移する。以降、状態ＳＴ１６、状態ＳＴ４、状態ＳＴ８、状態ＳＴ９、状態ＳＴ１１、状態ＳＴ１２の順に遷移する。状態ＳＴ４から状態ＳＴ８への遷移において、キーオフ回数ＯＦＣＴがインクリメントされて「５」に設定される。また、状態ＳＴ８から状態ＳＴ９への遷移において、鍵駆動回数ＫＤＣＴがインクリメントされて「４」に設定される。これにより差ＤＩＦが「１」になるが、鍵駆動回数フラグＫＤＦは「０」のままである。また、状態ＳＴ９から状態ＳＴ１１への遷移において、キーオン回数ＯＮＣＴがインクリメントされて「６」に設定される。これにより差ＤＩＦが「２」になるが、鍵駆動回数フラグＫＤＦは「０」のままである。
【００９４】
（Ｃ１５）状態ＳＴ１２〜状態ＳＴ１３
状態ＳＴ１２において、キーオフイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「０」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ６８）。また、キーオフ回数ＯＦＣＴがインクリメントされて「６」に設定される（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１３に遷移し（Ｓ７６）、プランジャ３１ｃがさらに下降する。
【００９５】
（Ｃ１６）状態ＳＴ１３〜状態ＳＴ１５〜状態ＳＴ１
プランジャ３１ｃが下降して、ソレノイド３１の制御状態が、状態ＳＴ１５、状態ＳＴ１の順に遷移し、鍵１１がレスト位置にて停止する。
【００９６】
つぎに、上記の図１４Ｂの状態ＳＴ１５において、さらにキーオンイベントが発生してさらに連打を継続する例を図１１及び図１５を用いて説明する。
【００９７】
（Ｃ１７）状態ＳＴ１５〜状態ＳＴ１６〜・・・〜ＳＴ１３
この場合、ソレノイド３１の制御状態は、状態ＳＴ１６に遷移する。この例においては、その後、ソレノイド３１の制御状態が、状態ＳＴ４、状態ＳＴ６、状態ＳＴ１０、状態ＳＴ１１、状態ＳＴ１２、状態ＳＴ１３の順に遷移している。これらの状態遷移及び各状態における動作は、上記の連打駆動と同様である。なお、状態ＳＴ１５から状態ＳＴ１６への遷移において、キーオン回数ＯＮＣＴがインクリメントされて「７」に設定される。これにより差ＤＩＦが「３」になるので、鍵駆動回数フラグＫＤＦが「１」に設定される。また、状態ＳＴ４から状態ＳＴ６への遷移において、鍵駆動回数ＫＤＣＴがインクリメントされて「５」に設定される。これにより差ＤＩＦが「２」になり、鍵駆動回数フラグＫＤＦが「０」に設定される。また、状態ＳＴ６から状態ＳＴ１０への遷移において、キーオフ回数ＯＦＣＴがインクリメントされて「７」に設定される。これにより差ＤＩＦが「２」になるが、鍵駆動回数フラグＫＤＦは「０」のままである。また、状態ＳＴ１０から状態ＳＴ１１への遷移において、キーオン回数ＯＮＣＴがインクリメントされて「８」に設定される。これにより差ＤＩＦが「３」になるので、鍵駆動回数フラグＫＤＦが「１」に設定される。また、状態ＳＴ１２から状態ＳＴ１３への遷移において、キーオフ回数ＯＦＣＴがインクリメントされて「８」に設定される。
【００９８】
（Ｃ１８）状態ＳＴ１３〜状態ＳＴ１４
つぎに、プランジャ３１ｃの位置Ｐが第２位置Ｐ２を下回ると、プランジャ位置フラグＰＦ２が「０」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ７０）。また、鍵駆動回数フラグＫＤＦは「１」であるから、ソレノイド３１の制御状態は、状態ＳＴ１４に遷移する（Ｓ７６）。状態ＳＴ１４においては、出力フラグＰＷＦが「１」に設定されているので、ソレノイド３１に押鍵用の駆動信号が供給されるが（Ｓ８４）、プランジャ３１ｃは惰性により若干下降した後、上昇し始める。
【００９９】
（Ｃ１９）状態ＳＴ１４〜状態ＳＴ８
つぎに、プランジャ３１ｃの位置Ｐが第２位置Ｐ２を超えると、プランジャ位置フラグＰＦ２が「１」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ７０）。これにより、ソレノイド３１の制御状態は、状態ＳＴ８に遷移する（Ｓ７６）。これにより、プランジャ３１ｃがさらに上昇する。
【０１００】
以降、状態ＳＴ９、状態ＳＴ１１、状態ＳＴ１２、状態ＳＴ１３、状態ＳＴ１５、状態ＳＴ１６、状態ＳＴ４、状態ＳＴ６、状態ＳＴ１０、状態ＳＴ１１、状態ＳＴ１２、状態ＳＴ１４の順に遷移し、再び状態ＳＴ８に戻る動作を繰り返すと、差ＤＩＦが基準値ａ（＝「６」）を超える。この場合、状態ＳＴ１３において、差ＤＩＦを「０」とみなす。これにより、状態ＳＴ１３から状態ＳＴ１４へ遷移するのではなく、状態ＳＴ１５へ遷移する。そして、状態ＳＴ１５においてキーオンイベントが発生しなければ、状態ＳＴ１へ遷移して、鍵１１がレスト位置にて停止する。
【０１０１】
Ｄ．その他
つぎに、ソレノイド３１の制御状態のその他の遷移について説明する。
【０１０２】
状態ＳＴ８において、キーオンイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「１」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ６８）。また、キーオン回数ＯＮＣＴがインクリメントされ、差ＤＩＦに応じて、鍵駆動回数フラグが設定される（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ４に遷移する（Ｓ７６）。そして、状態ＳＴ８に引き続き、プランジャ３１ｃは上昇する。
【０１０３】
また、状態ＳＴ６において、プランジャ３１ｃが下降し、プランジャ３１ｃの位置Ｐが第３位置Ｐ３を下回ると、プランジャ位置フラグＰＦ３が「０」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ７０）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１２に遷移する（Ｓ７６）。そして、状態ＳＴ６に引き続き、プランジャ３１ｃは下降する。
【０１０４】
また、状態ＳＴ１３において、キーオンイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「１」に設定され、前状態出力フラグＰＰＷＦが「０」に設定される（Ｓ６８）。また、キーオン回数ＯＮＣＴがインクリメントされ、差ＤＩＦに応じて、鍵駆動回数フラグが設定される（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ１２に遷移する（Ｓ７６）。そして、状態ＳＴ１３に引き続き、プランジャ３１ｃは下降する。
【０１０５】
また、状態ＳＴ７において、キーオンイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「１」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ６８）。また、キーオン回数ＯＮＣＴがインクリメントされ、差ＤＩＦに応じて、鍵駆動回数フラグＫＤＦが設定される（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ３に遷移する（Ｓ７６）。そして、状態ＳＴ７に引き続き、プランジャ３１ｃは上昇する。
【０１０６】
また、状態ＳＴ１６において、キーオフイベントが発生すると、ＭＩＤＩステータスフラグＭＳＦが「０」に設定され、前状態出力フラグＰＰＷＦが「１」に設定される（Ｓ６８）。また、キーオフ回数ＯＦＣＴがインクリメントされる（Ｓ６８）。これにより、ソレノイド３１の制御状態は、状態ＳＴ７に遷移する（Ｓ７６）。そして、状態ＳＴ１６に引き続き、プランジャ３１ｃは上昇する。
【０１０７】
なお、本実施形態においては、初期位置ＰＳと第１位置Ｐ１との間隔を非常に狭く設定したので、状態ＳＴ２から状態ＳＴ３へ遷移する前に、キーオフイベントが発生することを考慮していない。
【０１０８】
上記のように構成した電子楽器によれば、短期間内に鍵１１に関するキーオンイベント及びキーオフイベントが繰り返し発生した場合、これらのキーオンイベント及びキーオフイベントの発生に同期して、楽音信号の発生及び停止が制御される。そして、鍵１１の連打開始から終了までのキーオン回数ＯＮＣＴと鍵駆動回数ＫＤＣＴとの差ＤＩＦは、基準値ｂ以下であるので、前記連打時における押離鍵の回数が多い場合であっても、発音に対する鍵１１の動作が自然である。
【０１０９】
また、鍵１１の連打開始から終了までのキーオン回数ＯＮＣＴと鍵駆動回数ＫＤＣＴとの差ＤＩＦが基準値ａよりも大きいとき、差ＤＩＦを「０」とみなすようにした。これにより、連打動作途中において、連打開始からそれまでに供給された押鍵情報の数と鍵の駆動回数のずれが基準値ａより大きくなった場合には、連打を終了させる。すなわち、押離鍵回数分の発音が終了するのと、ほぼ同時に鍵１１の駆動も終了する。これにより、楽音の発生に対する鍵１１の動作が不自然に感じられることを防止できる。この場合、押離鍵回数が非常に多いので、楽音の発生回数と鍵１１の駆動回数とのずれが多少大きくても、鍵１１の動作が不自然に感じられることはない。
【０１１０】
また、上記のように、デューティ比テーブルは、プランジャ３１ｃの位置（すなわち、押鍵深さ）とソレノイド３１に供給する駆動信号（ＰＷＭ信号）のデューティ比との関係を規定しているだけであるので、プランジャ３１ｃの移動速度は、奏法（上記の通常駆動、スタッカート駆動、連打駆動など）に依存しない。したがって、ソレノイド３１に供給する駆動信号の制御が簡単である。
【０１１１】
さらに、本発明の実施にあたっては、上記実施形態に限定されるものではなく、本発明の目的を逸脱しない限りにおいて種々の変更が可能である。
【０１１２】
例えば、プランジャ３１ｃと鍵１１との係合部を、図１６Ａに示すように構成してもよい。この場合、プランジャキャップ３７に代えてプランジャキャップ３７Ａを用いている。プランジャキャップ３７Ａの下端部には、鍵１１の左方向及び右方向へ向かってそれぞれ延設された軸３７Ａ１，３７Ａ１が設けられている。また、鍵１１の後端部であって、プランジャキャップ３７Ａに対向する部分には、連結部材３８Ａが組み付けられている。すなわち、連結部材３８Ａの下端部には、上下方向に延設された突起が設けられていて、この突起を鍵１１に設けられた嵌合孔に圧入した後、接着することにより、連結部材３８Ａが鍵１１の後端部に組み付けられている。連結部材３８の上端部には、前側から見て上方に開いたＶ字型の溝が設けられている。そして、連結部材３８の側面部には、前記溝の下端部から高音側及び低音側へそれぞれ貫通していて前後方向に長い長孔３８Ａ１，３８Ａ１が設けられている。長孔３８Ａ１，３８Ａ１の上端面には、図１６Ｂに示すように、上記実施形態と同様の緩衝シート３７ａ及び低摩擦シート３７ｂが貼り付けられている。プランジャキャップ３７Ａを連結部材３８Ａの上方から前記溝部に押し込むと、前記溝部の弾性によって前記溝部が若干開き、軸３７Ａ１，３７Ａ１が、長孔３８Ａ１，３８Ａ１にそれぞれ嵌合し、軸３７Ａ１，３７Ａ１の上面が低摩擦シート３７ｂの下面に当接する。上記のように構成した場合、ソレノイド３１への非通電時には、プランジャ３１ｃの自重及びハンマー２０の重量が軸３７Ａ１，３７Ａ１を介して連結部３８Ａに伝達され、連結部３８Ａが下方へ押される。これにより、鍵１１の前端部が上方へ移動する。一方、ソレノイド３１への通電時には、軸３７Ａ１，３７Ａ１によって、連結部材３８Ａが上方へ引き上げられるので、鍵１１の前端部が下方へ移動する。その他の動作及び効果は、上記実施形態と同様である。
【０１１３】
上記実施形態においては、鍵駆動プログラムのステップＳ６４〜ステップＳ８６を繰り返し実行して、プランジャ３１ｃの移動を監視するようにした。しかし、これに代えて、プランジャ３１ｃの位置が第１位置Ｐ１、第２位置Ｐ２及び第３位置Ｐ３に達するごとに、検出回路４３が、ＣＰＵ４５ａに割り込み信号を出力するようにしておき、この割り込み信号をトリガとして、プランジャ位置フラグＰＦ１乃至ＰＦ３を更新するようにしてもよい。このように構成すれば、ステップＳ６４〜ステップＳ８６の実行において、ステップＳ７０を省略できるので、ＣＰＵ４５ａの負荷を軽減できる。
【０１１４】
駆動回路４４は、ＭＩＤＩインターフェース回路５２又は通信インターフェース回路５３を介して外部機器５２から供給されるＭＩＤＩ信号によって制御されるようにしてもよい。すなわち、ＣＰＵ４５ａは、上記の鍵駆動プログラムと平行して、外部機器５２から供給されたＭＩＤＩ信号に含まれるイベントデータをイベント処理バッファに記憶するプログラムを実行するように構成すればよい。
【０１１５】
また、上記実施形態においては、位置センサ４０は、プランジャ３１ｃの位置を検出するようにしたが、これに代えて、鍵１１の押鍵深さを検出するようにしてもよい。すなわち、鍵１１の前端部又は後端部の上下方向の位置を検出するようにしてもよい。
【符号の説明】
【０１１６】
１１・・・鍵、３１・・・ソレノイド（駆動手段）、４０・・・位置センサ(押鍵深さ検出手段)、４４・・・駆動回路（鍵駆動制御手段）、４５・・・コンピュータ部（自動演奏制御手段、鍵駆動制御手段、連打決定手段）、４８・・・楽音信号発生手段、ＭＳＦ・・・ＭＩＤＩステータスフラグ、ＰＦ１，ＰＦ２，ＰＦ３・・・プランジャ位置フラグ、ＰＰＷＦ・・・前状態出力フラグ、ＰＷＦ・・・出力フラグ、ＯＦＦ・・・キーオフ回数フラグ、ＫＤＦ・・・鍵駆動回数フラグ、ＯＮＣＴ・・・キーオン回数（第１カウンタ）、ＯＦＣＴ・・・キーオフ回数、ＫＤＣＴ・・・鍵駆動回数（第２カウンタ）、ＤＩＦ・・・差
【図１】
0005772504.tif 000002
【図２】
0005772504.tif 000003
【図３】
0005772504.tif 000004
【図４】
0005772504.tif 000005
【図５】
0005772504.tif 000006
【図６】
0005772504.tif 000007
【図７】
0005772504.tif 000008
【図８】
0005772504.tif 000009
【図９】
0005772504.tif 000010
【図１０】
0005772504.tif 000011
【図１１】
0005772504.tif 000012
【図１２】
0005772504.tif 000013
【図１３】
0005772504.tif 000014
【図１４Ａ】
0005772504.tif 000015
【図１４Ｂ】
0005772504.tif 000016
【図１５】
0005772504.tif 000017
【図１６Ａ】
0005772504.tif 000018
【図１６Ｂ】
0005772504.tif 000019
【図１７】
0005772504.tif 000020