"揺動可能に支持された鍵と、前記鍵を押鍵動作及び離鍵動作させる駆動手段と、前記鍵の押鍵深さを検出する押鍵深さ検出手段と、楽曲の演奏内容を表わす演奏情報に従って、前記鍵の押鍵を表す押鍵情報及び前記鍵の離鍵を表す離鍵情報を出力する自動演奏制御手段と、前記自動演奏制御手段及び外部機器のいずれか一方又は両方から入力した前記押鍵情報及び前記離鍵情報に応じて前記駆動手段を制御する鍵駆動制御手段であって、所定の短い期間内に前記押鍵情報及び前記離鍵情報を繰り返し入力したとき、前記離鍵動作途中に前記押鍵動作に切り替えて、前記鍵を連打するよう前記駆動手段を制御する鍵駆動制御手段と、前記自動演奏制御手段及び外部機器のいずれか一方又は両方から入力した前記押鍵情報及び前記離鍵情報に応じて楽音信号の発生を制御する楽音信号発生手段とを備えた演奏装置において、前記鍵駆動制御手段は、前記連打の最初の押鍵開始後、前記入力した前記押鍵情報の回数をカウントする第1カウンタと、前記連打の最初の押鍵開始後、前記鍵を押鍵動作させた回数をカウントする第2カウンタと、前記鍵の離鍵動作途中であって、前記押鍵深さ検出手段によって検出した前記鍵の押鍵深さが所定の範囲内にある状態において、前記第1カウンタのカウント値と前記第2カウンタのカウント値との差に応じて、前記連打を継続するか、前記連打を終了するかを決定する連打決定手段を備えたことを特徴とする演奏装置。請求項1に記載の演奏装置において、連打決定手段は、前記第1カウンタのカウント値と前記第2カウンタのカウント値との差が所定の第1基準値よりも大きい場合、前記連打を継続し、前記第1カウンタのカウント値と前記第2カウンタのカウント値との差が前記第1基準値以下である場合、前記連打を終了すると決定することを特徴とする演奏装置。請求項2に記載の演奏装置において、前記連打決定手段は、前記第1カウンタのカウント値と前記第2カウンタのカウント値との差が、前記第1基準値よりも大きい場合であっても、前記第1基準値よりも大きな第2基準値よりも大きい場合には、前記連打を終了すると決定することを特徴とする演奏装置。請求項1乃至請求項3のうちのいずれか1つに記載の演奏装置において、前記連打決定手段は、前記連打を終了すると決定した後であって、前記鍵の離鍵動作が終了する前に新たな押鍵情報を入力したとき、前記連打を終了する決定を取り消して、前記連打を継続すると決定することを特徴とする演奏装置。本発明の一実施形態について図面を用いて説明する。この電子楽器は、図1及び図2に示すように、鍵盤装置10を備えている。鍵盤装置10は、それぞれ発生させる楽音信号の音高を指定するとともに楽音信号の発生及び停止を指示する複数の白鍵及び黒鍵を有する。なお、図2においては、1つの白鍵及びその周辺の構成部品を示しているが、黒鍵に関する構成も同様である。また、白鍵及び黒鍵の動作も同様であるので、以下の説明においては、白鍵及び黒鍵を鍵11として説明する。鍵11は、前後方向の中間部が、フレームFRの鍵支持部材12に支持されている。鍵支持部材12は、フレームFRにおいて、鍵11の配列方向に沿って延設されたバランスレール12aと、バランスレール12aの上に垂直に設けられた支点ピン12bを備えている。鍵11の前後方向の中間部には、上下に貫通する貫通孔11aが設けられていて、この貫通孔11aに支点ピン12bが挿入されている。貫通孔11aは、下端部から上端部へ向かうに従って、前後方向の幅が広くなっている。これにより、鍵11は、支点ピン12bを支点として揺動可能となっている。すなわち、演奏者による押離鍵操作によって、鍵11の前端部及び後端部が上下方向へ移動可能となっている。また、鍵11の前端部の下方には、フロントピン13が、垂直に延設されている。フロントピン13は、その上端部が鍵11の下面に設けられた孔部に挿入されており、鍵11の前端部の横方向の振れを規制する。鍵11の後端部の下方のフレームFRの表面には、上限ストッパー14が接着されている。上限ストッパー14は、フエルトなどの緩衝材によって構成され、鍵11が押鍵されない状態において、鍵11の後端部の下面に当接して、鍵11の前端部の上方向への移動を規制する。このように、前端部の上方向への移動が規制された状態の鍵11の前端部の押鍵深さ方向の位置をレスト位置という。また、鍵11の前端部の下方のフレームFRの表面には、下限ストッパー15が接着されている。下限ストッパー15は、上限ストッパー14と同様に構成され、鍵11が押鍵された状態において、鍵11の前端部の下面に当接して、鍵11の前端部の下方向への移動を規制する。このように、前端部の下方向への移動が規制された状態の鍵11の前端部の押鍵深さ方向の位置をフルストローク位置という。また、鍵支持部材12より後方には、各鍵11と連動してそれぞれ揺動するハンマー20が設けられている。ハンマー20は、ハンマー支持部21に支持されている。ハンマー20は、棒状のハンマーシャンク20aとハンマーシャンク20aの後端に組み付けられた質量体20bからなる。低音部のハンマー20から高音部のハンマー20に向かうに従って、質量体20bを徐々に軽くして、手動演奏時の鍵タッチ感をアコースティックピアノの鍵タッチ感に近似させている。ハンマー支持部21は、支持板21a、ハンマーレール21b、上限ストッパーレール21c、下限ストッパーレール21d、上限ストッパー21e、及び下限ストッパー21fからなる。支持板21aは、左右方向に薄肉の板状に形成され、前後方向かつ垂直方向に延設されている。複数の支持板21aが、フレームFR上に、左右方向に所定の間隔例えば、1オクターブごとをおいて設けられている。すなわち、支持板21aは、所定の隣り合う2つの鍵例えば、B鍵とC鍵の間に設けられている。前記所定の隣り合う2つの鍵の後端部は、支持板21aと干渉しないように、他の鍵11に比べて、左右方向の幅がやや狭く形成されている。また、支持板21aの上端部の中央の部分が下方へ向かって大きく切り欠かれている。この切り欠きよりも前方の部分を前部21a1と呼び、後方の部分を後部21a2と呼ぶ。前部21a1の上端には、レール状に形成されたハンマーレール21bが、隣り合う支持板21aを連結するようにして、組み付けられている。すなわち、ハンマーレール21bは、鍵11の並び方向に延設されていて、その下面が各前部21a1の上端に支持されている。ハンマーレール21bの後端部には、ハンマー20を支持するハンマー支点部21b1が設けられていて、ハンマーシャンク20aの前端部がハンマー支点部21b1に支持されている。これにより、ハンマー20がハンマー支点部21b1を支点として揺動可能となっている。すなわち、鍵11が揺動することにより、ハンマー20の質量体20b側が、上下に移動可能となっている。また、後部21a2の後端部の中央の部分が切り欠かれて、前方へ凹んだ凹部が形成されている。この凹部の上端部及び下端部には、レール状に形成された上限ストッパーレール21c及び下限ストッパーレール21dがそれぞれ組み付けられている。上限ストッパーレール21c及び下限ストッパーレール21dは、鍵11の並び方向に延設されていて、各支持板21aの後部21a2にそれぞれ支持されている。上限ストッパーレール21cの下面には、鍵11の上限ストッパー14と同様の、上限ストッパー21eが組み付けられている。上限ストッパー21eは、鍵11が押鍵された状態において、ハンマーシャンク20aの後端部の上面に当接して、ハンマー20の後端部の上方向への移動を規制する。一方、下限ストッパーレール21dの上面には、上限ストッパー14と同様の、下限ストッパー21fが組み付けられている。下限ストッパー21fは、鍵11が押鍵されない状態において、ハンマーシャンク20aの後端部の下面に当接して、ハンマー20の後端部の下方向への移動を規制する。支持板21aの後部21a2の前端部には、レール状に形成されたソレノイドレール30が組み付けられている。すなわち、ソレノイドレール30は、鍵11の並び方向に延設されていて、各支持板21aの後部21a2に支持されている。ソレノイドレール30には、各鍵11に対応したソレノイド31がそれぞれ組み付けられている。ソレノイド31は、図3に示すように、ボビン31a、コイル31b、プランジャ31c及びヨーク31dからなる。ボビン31aは、円筒状に形成されている。ボビン31aの外周部には、電線が巻き付けられてコイル31bが形成されている。プランジャ31cは、ボビン31a内に上下に移動可能に収容されていて、ソレノイド31への非通電時には、自重及びハンマー20の重量により降下する。一方、ソレノイド31への通電時には、プランジャ31cは、電磁力により自重及びハンマー20の重量に抗して上方へ変位する。また、ヨーク31dは、コイル31bを取り囲むようにして設けられ、漏れ磁束を低減する。ソレノイド31は、ヨーク31dに設けた図示しない取り付け部にてソレノイドレール30に固定されている。プランジャ31cの上端には、プランジャ31cよりも細い第1ロッド32が連結されている。また、プランジャ31cの下端には、第1ロッド32と同程度の太さの第2ロッド33が連結されている。プランジャ31c、第1ロッド32及び第2ロッド33の中心軸は共通である。第1ロッド32の上端面には、後述する位置センサ40の一部を構成する反射板35が組み付けられている。反射板35は、合成樹脂によって形成された軽量な部材で、第1ロッド32の上端面に組み付けられている。反射板35は、前方へ延設された水平部35aと水平部35aの前端部から下方へ垂直に延設された垂直壁部35bからなり、水平部35aの下面と第1ロッド32の上端面とが接着されている。反射板35の水平部35aの上面には、台部材36が組み付けられている。台部材36の上面は、水平に形成されている。ハンマーシャンク20aにおける、台部材36に対向する部分には、円筒状のローラ20a1が組み付けられている。ローラ20a1の中心軸は、鍵11の並び方向に平行である。離鍵状態において、ローラ20a1の下側の外周面が、台部材36の上面に当接している。一方、第2ロッド33の下端には、連結部材であるプランジャキャップ37が組み付けられている。プランジャキャップ37の下端面には、シート状の緩衝シート37aが貼り付けられている。そして、緩衝シート37aの下面には、シート状の低摩擦シート37bが貼り付けられている。緩衝シート37aは、後述するキャプスタンスクリュー38とプランジャキャップ37との当接による衝撃を吸収する。また、低摩擦シート37bは、キャプスタンスクリュー38と緩衝シート37aとの摩擦を低減する。また、鍵11の後端部であって、プランジャキャップ37に対向する部分には、キャプスタンスクリュー38が組み付けられている。キャプスタンスクリュー38の上面は、凸状かつ曲面状に形成されている。上記のように、ソレノイド31への非通電時には、プランジャ31cは、自重及びハンマー20の重量により降下する。これにより、低摩擦シート37bの下面がキャプスタンスクリュー38の上面に当接して、キャプスタンスクリュー38を下方へ押すことにより、鍵11の前端部が上方へ移動してレスト位置にて停止する。一方、ソレノイド31への通電時には、プランジャ31cは、電磁力により自重及びハンマー20の重量に抗して上方へ移動する。これにより、プランジャキャップ37も上方へ移動する。鍵11は、後端部よりも前端部の方が重いので、鍵11の前端部が下方へ移動する。また、鍵盤装置10は、プランジャ31cの位置を検出する位置センサ40を備えている。位置センサ40は、ヨーク31dの前面に設けた発光部40a、受光部40b、及び反射板35からなる。発光部40aから出射された光は、反射板35にて反射して、受光部40bによって受光される。反射板35の垂直壁部35bの後面の光の反射率が、下部から上部に向かうに従って徐々に変化するように構成されている。ソレノイド31が駆動され、反射板35が上下に移動することにより、受光部40bに入射する光の強度が変化する。すなわち、受光部40bにて受光した光の強度は、プランジャ31cの上下方向の位置に対応している。位置センサ40は、受光部40bにて受光した光の強度に応じて、プランジャ31cの位置Pを表す位置信号を出力する。また、各鍵11の前端部の下方には、手動演奏時の鍵11の押離鍵操作を検出する鍵スイッチSWが設けられている。鍵スイッチSWは、第1スイッチSW1及び第2スイッチSW2からなる。鍵11が押鍵されない状態においては、両スイッチはオフ状態である。そして、鍵11を押すと、まず第1スイッチSW1がオフ状態からオン状態に切り替わり、さらに、押鍵深さが大きくなると、第2スイッチSW2がオフ状態からオン状態に切り替わる。そして、鍵11を離すと、第2スイッチSW2がオン状態からオフ状態に切り替わり、さらに押鍵深さが小さくなると、第1スイッチSW1がオン状態からオフ状態に切り替わる。また、この電子楽器は、バス42に接続された検出回路43を備えている。手動演奏時における各鍵11の第1スイッチSW1及び第2スイッチSW2のオンオフ動作は、検出回路43によって検出される。すなわち、検出回路43は、各鍵11の第1スイッチSW1及び第2スイッチSW2を走査して、スイッチSW2がオフ状態からオン状態へ変化したことを検出すると、後述するコンピュータ部45に、割り込み信号を出力するとともに、同スイッチの属する鍵11に割り当てられた音高を表すキーコード及び押鍵されたことを表すキーオン指令キーオンデータを出力してキーオンイベントを発生させる。また、検出回路43は、第1スイッチSW1がオン状態からオフ状態に変化したことを検出すると、コンピュータ部45に、割り込み信号を出力するとともに、同スイッチの属する鍵11の音高を表すキーコード及び離鍵されたことを表すキーオフ指令キーオフデータを出力してキーオフイベントを発生させる。また、検出回路43は、コンピュータ部45からの指示に応じて、位置センサ40からプランジャ31cの位置Pを表す位置信号を入力して、コンピュータ部45に出力する。また、この電子楽器は、バス42に接続された駆動回路44を備えている。駆動回路44は、パルス幅変調PWMした駆動信号を供給して、ソレノイド31を駆動する。具体的には、バス42を介して、コンピュータ部45から供給されるキーコード及びデューティ比を入力して、キーコードによって表される鍵11に対応したソレノイド31に、前記デューティ比に設定されたPWM信号を駆動信号として供給する。また、この電子楽器は、バス42に接続されたコンピュータ部45を備えている。コンピュータ部45は、CPU45a、タイマ45b、ROM45c及びRAM45dからなる。CPU45aは、後述の各種プログラムを実行して音源回路48を制御して、自動演奏及び手動演奏に応じた楽音信号を発生させる。さらに、自動演奏時においては、ソレノイド31を制御して、鍵11を駆動する。本実施形態においては、詳しくは後述するように、ソレノイド31の制御状態が、複数のフラグの値の組み合わせに応じて分類されている。キーイベントの発生、プランジャ31cの移動などに起因して、前記複数のフラグの値が変化する。これにより、ソレノイド31の制御状態が遷移する。各制御状態において、ソレノイド31へ供給する駆動信号の制御情報すなわち、出力フラグPWFの値が規定されていて、CPU45aは、この制御情報に従ってソレノイド31を制御する。タイマ45bは、予めCPU45aによって設定された周期で、割り込み信号をCPU45aに出力する。ROM45cは、この電子楽器に予め組み込まれている半導体メモリ及びハードディスク、並びにこの電子楽器に装着可能なHDD、FDD、CD-ROM、MO、DVDなどの大容量の不揮発性記録媒体と、同各記録媒体に対応するドライブユニットを含むものであり、各種プログラム及び各種データを記憶する。本実施形態においては、ROM45cに、楽曲を自動演奏するための複数の曲データ、ソレノイド31へ供給する駆動信号のデューティ比を表す複数のデューティ比テーブルなどが記憶されている。各曲データは、ヘッダ、及び一連のイベントデータからなる。ヘッダは、曲名、初期の音色、音量、演奏のテンポなどを表す複数のデータからなる。イベントデータには、キーオンデータ、キーオフデータ、楽音制御データ、テンポデータ、エンドデータなどが含まれる。詳しくは後述するように、CPU45aによって、この曲データを読み出して再生することにより、コンピュータ部45は、自動演奏制御装置として動作する。キーオンデータは、発生させる楽音信号の音高を表すキーコード及び押鍵を表すキーオン指令から構成されている。すなわち、キーオンデータは、手動演奏における押鍵時に検出回路43から出力されるキーコード及びキーオン指令と同様のデータから構成されている。キーオフデータは、発生中の楽音の音高を表すキーコード及び離鍵を表すキーオフ指令から構成されている。すなわち、キーオフデータは、手動演奏における離鍵時に検出回路43から出力されるキーコード及びキーオフ指令と同様のデータから構成されている。楽音制御データは、発生中の楽音信号の音色、音量などを変化させる制御データから構成されている。テンポデータは、自動演奏のテンポを変更させる制御データから構成されている。これらのキーオンデータ、キーオフデータ、楽音制御データ及びテンポデータは、それらの楽曲中のタイミングを表すテンポクロックタイミングをそれぞれ含む。エンドデータは、曲の終了を表す。なお、上述のキーオンデータ、キーオフデータ及び楽音制御データを、楽音制御パラメータと呼ぶ。また、上述の曲データ及びプログラムは予め各記録媒体に記録されていてもよいし、後述するMIDIインターフェース回路52及び通信インターフェース回路53を介して外部機器から取り込んでもよい。複数のデューティ比テーブルは、図4に示すように、それぞれ、鍵11を円滑に移動させるために、プランジャ31cの位置すなわち、押鍵深さとソレノイド31に供給する駆動信号PWM信号のデューティ比との関係を規定している。押鍵時のテーブルと離鍵時のテーブルは異なる。すなわち、各デューティ比テーブルは、ヒステリシスを有する。以下の説明において、鍵11をレスト位置からフルストローク位置へ向かって移動させるときにソレノイド31へ供給する駆動信号を押鍵用の駆動信号といい、鍵11をフルストローク位置からレスト位置へ向かって移動させるときにソレノイド31へ供給する駆動信号を離鍵用の駆動信号という。また、プランジャ31cの位置に応じたデューティ比の平均値は、デューティ比テーブルごとに異なる。鍵11の属する音域例えば、低音域、中音域、高音域に応じて、鍵11は、複数のデューティ比テーブルのうちのいずれか1つに割り当てられている。具体的には、鍵盤装置10の質量体は低音域ほど重いすなわち、回転モーメントが大きいため、低音域の鍵11ほど、デューティ比の平均値が大きいデューティ比テーブルに割り当てられている。RAM45dは、各種プログラムの実行に必要なデータを一時的に記憶する。とくに、本実施形態においては、RAM45dは、鍵11ごとに、ソレノイド31の制御状態を判定するためのデータを記憶する。具体的には、MIDIステータスフラグMSF、プランジャ位置フラグPF1乃至PF3、前状態出力フラグPPWF、キーオン回数ONCT、キーオフ回数OFCT、鍵駆動回数KDCT、キーオフ回数フラグOFF及び鍵駆動回数フラグKDFの値を記憶する。MIDIステータスフラグMSFは、自動演奏時において発生した最新のキーイベントの種類を表す。すなわち、MIDIステータスフラグMSFは、キーオンイベントが発生すると1に設定され、キーオフイベントが発生すると0に設定される。プランジャ位置フラグP1乃至P3の値は、プランジャ31cの位置に応じて決定される。ここで、ソレノイド31の非通電状態であって、鍵11がレスト位置にあるときのプランジャ31cの位置を初期位置PS0mmとし、ソレノイド31が駆動されて、鍵11がフルストローク位置にあるときのプランジャ31cの位置を限界位置PE5mmとする。そして、初期位置PSと限界位置PEとの間に第1位置P10.3mm、第2位置P23.5mm及び第3位置P34.7mmを設定している。プランジャ31cが、初期位置PSから第1位置P1までの間にあるとき、プランジャ位置フラグPF1乃至PF3は、いずれも0に設定される。プランジャ31cが、第1位置P1から第2位置P2までの間にあるとき、プランジャ位置フラグPF1が1に設定され、残りのプランジャ位置フラグPF2及びPF3は0に設定される。プランジャ31cが第2位置P2から第3位置P3までの間にあるとき、プランジャ位置フラグPF1及びPF2が1に設定され、プランジャ位置フラグPF3が0に設定される。そして、プランジャ31cが、第3位置P3から限界位置PEまでの間にあるとき、プランジャ位置フラグPF1乃至PF3が1に設定される。前状態出力フラグPPWFは、1つ前の制御状態におけるソレノイド31への駆動信号の種類を表す。すなわち、前状態出力フラグPPWFは、1つ前の制御状態においてソレノイド31に押鍵用の駆動信号を供給していたとき1に設定され、1つ前の制御状態においてソレノイド31に離鍵用の駆動信号を供給していたとき0に設定される。キーオン回数ONCT及びキーオフ回数OFCTは、鍵11が、駆動回路44によって駆動されて、レスト位置から移動し始めてから再びレスト位置に戻るまでの間に発生した、鍵11に関するキーオンイベント及びキーオフイベントの回数を表す。短い期間内に同一鍵を繰り返し打鍵する連打演奏においては、鍵11がレスト位置に戻る前に、キーオンイベント及びキーオフイベントが繰り返し発生する。この場合、詳しくは後述するように、駆動回路44は、鍵11の離鍵動作の途中で、再び押鍵動作に切り替える。CPU45aは、この連打演奏時のキーオンイベント及びキーオフイベントの回数をカウントして、キーオン回数ONCT及びキーオフ回数OFCTとしてRAM45dに記憶する。また、CPU45aは、前記連打演奏時において、プランジャ31cが限界位置PEに達した回数を鍵駆動回数KDCTとしてRAM45dに記憶する。キーオフ回数フラグOFFは、キーオフ回数OFCTが0であるとき0に設定され、キーオフ回数OFCTが1以上であるとき1に設定される。また、鍵駆動回数フラグKDFは、キーオン回数ONCTと鍵駆動回数KDCTとの差DIF=ONCT-KDCTが、所定の基準値bより大きいとき1に設定され、差DIFが、基準値b以下であるとき0に設定される。ただし、差DIFが基準値aよりも大きいとき、差DIFは、0に設定される。なお、基準値a及び基準値bは、ソレノイド31の出力特性すなわち、供給電力に対する推力に関係している。したがって、ソレノイド31の特性及びデューティ比テーブルに応じて、最適な基準値a及び基準値bを求める。また、最適な基準値a及び基準値bを実験的に求めてもよい。本実施形態においては、a=6かつb=2であるときに最も良好な結果が得られた。すなわち、発音に対する鍵の駆動が自然に感じられた。ソレノイド31の制御状態は、図5に示すように、MIDIステータスフラグMSF、プランジャ位置フラグPF1乃至PF3、前状態出力フラグPPWF、キーオフ回数フラグOFF及び鍵駆動回数フラグKDFの値の組み合わせに応じて、状態ST1~ST16の16種類の状態に分類されている。そして、上記のように分類された各状態において、ソレノイド31へ駆動信号を供給するか否かを表す出力フラグPWFの値がそれぞれ設定されてROM45cに記憶されている。同図中、出力フラグPWFの値が1と記載されている状態においては、ソレノイド31へ押鍵用の駆動信号を供給し、出力フラグPWFの値が0と記載されている状態においては、ソレノイド31へ離鍵用の駆動信号を供給する。なお、同図中、NCとは、0又は1のいずれの値であってもよいことを表す。また、以下の説明において、ST1~ST16を状態番号という。例えば、状態ST1は、MIDIステータスフラグMSF、プランジャ位置フラグPF1乃至PF3、前状態出力フラグPPWF、キーオフ回数フラグOFF及び鍵駆動回数フラグKDFの値が0に設定されている状態である。この状態ST1においては、出力フラグPWFの値が0と規定されているので、ソレノイド31へ離鍵用の駆動信号を供給する。また、例えば、状態ST2は、MIDIステータスフラグMSF、プランジャ位置フラグPF1乃至PF3、前状態出力フラグPPWF、キーオフ回数フラグOFF及び鍵駆動回数フラグKDFのうち、MIDIステータスフラグMSFのみが1に設定され、他のフラグが0に設定されている状態である。この状態ST9においては、出力フラグPWFの値が1と規定されているので、ソレノイド31へ押鍵用の駆動信号を供給する。他の制御状態においても、出力フラグPWFの値に従って、ソレノイド31への駆動信号の供給を制御する。また、この電子楽器は、複数のパネル操作子46、ディスプレイ47及び音源回路48を備えている。複数のパネル操作子46は、この電子楽器の操作パネル上に設けられていて、この電子楽器の各種データの設定に利用される。例えば、鍵盤10を押離鍵操作したときに発生させる楽音の音色を選択するために利用される。また、例えば、ROM45cに記憶されている曲データを選択し、自動演奏させるために利用される。複数のパネル操作子46の操作は、バス42に接続された検出回路49によって検出される。検出回路49は、複数のパネル操作子46の操作を表す操作情報をコンピュータ部45に出力する。例えば、ユーザが、パネル操作子を用いて、鍵盤10に割り当てる音色を選択すると、検出回路49は、コンピュータ部45に割り込み信号を出力するとともに、前記選択された音色を表す音色番号を出力する。また、例えば、ユーザが、曲データを選択し、自動演奏の開始を指示すると、検出回路49は、コンピュータ部45に割り込み信号を出力するとともに、前記選択された曲を表す曲番号及び自動演奏の開始を表す演奏開始データを出力する。ディスプレイ47は、操作パネル上に設けられた液晶ディスプレイ、CRTなどで構成され、文字、数字、図形などを表示する。このディスプレイ47の表示内容は、バス42に接続された表示回路50によって制御される。音源回路48は、バス42に接続されていて、バス42を介してCPU45aから供給された楽音信号の生成開始を表わす楽音制御パラメータに応じて、楽音信号の生成を開始する。また、音源回路48は、バス42を介してCPU45aから供給された楽音信号の生成停止を表わす楽音制御パラメータに応じて、楽音信号の生成を停止する。楽音信号の生成の停止とは、楽音信号をリリース制御減衰制御した後に、その生成を停止することを意味する。なお、音源回路48は、複数の発音チャンネルを有しており、本実施形態においては、キーオンイベントの発生時には、いずれかの発音チャンネルにて楽音信号が生成される。音源回路48にて生成された楽音信号は、サウンドシステム51を介して放音される。サウンドシステム51は、楽音信号をD/A変換するD/A変換器、D/A変換器によってアナログ信号に変換された楽音信号を増幅するアンプ、及びアンプによって増幅されたアナログ信号を空気振動に変換して放音するスピーカなどが含まれている。また、この電子楽器は、種々の外部機器52に接続可能となっている。すなわち、この電子楽器は、バス42に接続されたMIDIインターフェース回路53を備えていて、MIDI対応のMIDI機器54例えば、シーケンサに接続可能となっている。また、この電子楽器は、通信インターフェース回路55を備えていて、インターネットなどの通信ネットワークNTを介してサーバコンピュータ56に接続可能となっている。次に、上記のように構成した電子楽器の動作について説明する。ユーザがこの電子楽器の図示しない電源スイッチをオンにすると、CPU45aは、図6の初期化プログラムを実行する。CPU45aは、ステップS10にて初期化処理を開始すると、ステップS12にて、この電子楽器の各回路を初期状態に設定する。すなわち、鍵盤10に割り当てられる音色のデータ、ディスプレイ47に表示する表示データなどをROM45cから読み出して、それぞれの初期値として設定する。つぎに、CPU45aは、ステップS14にて、タイマ45bを作動開始させ、所定の間隔例えば、1ミリ秒間隔でタイマ割り込みを発生させるよう設定する。つぎに、CPU45aは、ステップS16にて、検出回路43及び検出回路49からの割り込みを許可する。そして、CPU45aは、ステップS18にて初期化処理を終了する。検出回路43からキーイベントキーオンイベント又はキーオフイベントに関する割り込みが発生すると、CPU45aは、図7に示す手動演奏プログラムを実行する。CPU45aは、ステップS20にて手動演奏処理を開始すると、ステップS22にて、検出回路43からキーイベントデータキーオンデータ又はキーオフデータを取り込んで、RAM45d内のイベント処理バッファに記憶する。イベント処理バッファは、複数のキーイベントデータを記憶できるFIFOFirstInFirstOutメモリである。すなわち、イベント処理バッファに記憶されている複数のデータは、記憶されたタイミングが古い順に、次に説明するキーイベントプログラム、及び後述する鍵駆動プログラムによって処理される。そして、CPU45aは、ステップS24にて、図8に示すキーイベントプログラムを実行する。キーイベントプログラムは、手動演奏プログラム及び後述する自動演奏プログラムに共通のサブルーチンである。CPU45aは、ステップS30にて、キーイベント処理を開始すると、ステップS32にて、イベント処理バッファに記憶されているキーイベントデータがキーオンイベントであるかキーオフイベントであるか判定する。そして、イベント処理バッファに記憶されているキーイベントデータがキーオンイベントを表すときには、CPU45aは、ステップS34にて、音源回路48に発音を指示する。すなわち、キーイベントデータを用いて、発生させる楽音を規定する楽音制御パラメータを生成して、音源回路48に出力する。音源回路48は、入力した楽音制御パラメータに応じた楽音信号を生成して、サウンドシステム51へ供給する。そして、CPU45aは、後述のステップS38へ処理を進める。一方、ステップS32において、イベント処理バッファに記憶されているキーイベントデータがキーオフイベントを表すときには、CPU45aは、ステップS36にて、消音を指示する。すなわち、キーイベントデータによって特定された楽音信号の発生を停止するよう、音源回路48に指示する。これにより、音源回路48は、前記発生中の楽音信号の音量を減衰させて、前記楽音の発生を停止する。そして、CPU45aは、ステップS38にて、キーイベントプログラムを終了して、メインルーチンに戻る。上記の場合、キーイベントプログラムは、手動演奏プログラムのサブルーチンとして実行されたので、CPU45aは、メインルーチンである手動演奏プログラムに戻り、手動演奏プログラムのステップS26にて手動演奏処理を終了する。また、検出回路49から割り込みが発生し、その割り込み要因がユーザからの自動演奏の開始指示であることをCPU45aが検出すると、CPU45aは、図9に示す自動演奏プログラムと、図10に示す鍵駆動プログラムを実行する。自動演奏プログラムと鍵駆動プログラムとは、並列に実行される。まず、自動演奏プログラムについて説明する。CPU45aは、ステップS40にて自動演奏処理を開始すると、ステップS42にて、タイマ45bを用いて時間計測を開始する。つぎに、CPU45aは、ステップS44にて、ユーザによって選択された曲データのイベントデータのうち、テンポクロックタイミングと現在時刻が一致するイベントデータを検索する。該当するイベントデータが無い場合には、Noと判定して、再びステップS44を実行する。一方、該当するイベントデータがある場合には、Yesと判定して、ステップS46にて、そのイベントデータを読み出してイベント処理バッファに記憶する。そして、CPU45aは、ステップS48にて、イベント処理バッファに記憶したイベントデータの種類に応じて、次に実行する処理を決定する。すなわち、前記記憶したイベントデータがキーイベントデータである場合には、ステップS50にて、上記のキーイベントプログラムを実行して、ステップS44に戻る。なお、自動演奏においては、後述する鍵駆動プログラムによって鍵11を駆動するので、駆動した鍵11の第1スイッチSW1及び第2スイッチSW2のオンオフ状態が変化するが、この駆動した鍵11に関しては、手動演奏プログラムを実行しない。ただし、駆動していない鍵11の第1スイッチSW1及び第2スイッチSW2のオンオフ状態が変化した場合すなわち、駆動していない鍵11が、演奏者によって押離鍵操作された場合には、手動演奏プログラムを実行する。また、ステップS46において記憶したイベントデータがその他のデータである場合には、CPU45aは、ステップS52にて、そのイベントデータに応じた処理を実行して、ステップS44に戻る。例えば、イベントデータが音色を変更するプログラムチェンジデータである場合には、音色を変更することを表す楽音制御パラメータを生成して音源回路48に出力し、ステップS44に戻る。また、ステップS46において記憶したイベントデータがエンドデータである場合には、CPU45aは、ステップS54にて、自動演奏処理を終了する。つぎに、鍵駆動プログラムについて説明する。鍵駆動プログラムは、以下説明するステップS64~ステップS86を繰り返し実行し、ソレノイド31の制御状態を遷移させる。以下、1つの鍵11の鍵駆動処理について説明するが、他の鍵についても同様に処理する。CPU45aは、ステップS60にて鍵駆動処理を開始すると、ステップS62にて、初期化処理を実行する。すなわち、全てのフラグの値を0に設定する。また、キーオン回数ONCT、キーオフ回数OFCT及び鍵駆動回数KDCTの値を0に設定する。さらに、現在の制御状態に遷移する1つ前の制御状態の状態番号を記憶しておく状態番号バッファをST1に設定する。つぎに、CPU45aは、ステップS64にて、上記の自動演奏プログラムのステップS46の実行によりイベント処理バッファに記憶されたイベントデータのうち、鍵駆動処理の実行されていない未処理のイベントデータがあるか否かを検出する。未処理のイベントデータが無い場合には、CPU45aは、Noと判定して、後述のステップS70に処理を進める。一方、未処理のイベントデータがある場合には、CPU45aは、Yesと判定して、ステップS66にて、前記未処理のイベントデータの種類に応じて、次に実行する処理を決定する。前記未処理のイベントデータが、キーイベントデータ及びエンドデータとは異なるその他のデータである場合には、CPU45aは、後述のステップS70に処理を進める。また、前記未処理のイベントデータが、キーイベントデータである場合には、CPU45aは、ステップS68にて、キーイベントデータが表すイベントの種類すなわち、キーオンイベント又はキーオフイベントに応じて、前記キーイベントデータが表すキーコードに対応する、MIDIステータスフラグMSFを更新するとともに、キーオン回数ONCT又はキーオフ回数OFCTを更新する。すなわち、キーイベントデータがキーオンイベントを表す場合には、MIDIステータスフラグMSFを1に設定するとともに、キーオン回数ONCTをインクリメントする。この場合、差DIF=ONCT-KDCTに応じて、鍵駆動回数フラグKDFを更新する。すなわち、差DIFが基準値b以下であれば、鍵駆動回数フラグKDFを0に設定し、差DIFが基準値bより大きければ鍵駆動回数フラグKDFを1に設定する。ただし、差DIFが、基準値aよりも大きい場合は、差DIFを0とみなして鍵駆動回数フラグKDFを設定する。一方、キーオフイベントを表す場合には、MIDIステータスフラグMSFを0に設定するとともに、キーオフ回数OFCTをインクリメントする。この場合、キーオフ回数OFCTが1以上になるので、キーオフ回数フラグOFFを1に設定する。さらに、前状態出力フラグPPWFを1つ前の制御状態の出力フラグPWFの値に設定する。つぎに、CPU45aは、ステップS70にて、検出回路43を介して、位置センサ40から、現在のプランジャ31cの位置Pを読み込み、前記読み込んだ位置Pに応じて、プランジャ位置フラグPF1乃至PF3を更新する。すなわち、位置Pが、初期位置PSから第1位置P1までの間にあるとき、プランジャ位置フラグPF1乃至PF3を、いずれも0に設定する。また、位置Pが、第1位置P1から第2位置P2までの間にあるとき、プランジャ位置フラグPF1を1に設定し、残りのプランジャ位置フラグPF2及びPF3を0に設定する。また、位置Pが、第2位置P2から第3位置P3までの間にあるとき、プランジャ位置フラグPF1及びPF2を1に設定し、プランジャ位置フラグPF3を0に設定する。そして、位置Pが、第3位置P3から限界位置PEまでの間にあるとき、プランジャ位置フラグPF1乃至PF3を1に設定する。つぎに、CPU45aは、ステップS72にて、MIDIステータスフラグMSF、プランジャ位置フラグPF1乃至PF3の値が全て0であるか否か判定する。MIDIステータスフラグMSF、プランジャ位置フラグPF1乃至PF3のうちの少なくとも1つのフラグの値が1であれば、Noと判定して、CPU45aは、処理を後述のステップS76に進める、一方、MIDIステータスフラグMSF、プランジャ位置フラグPF1乃至PF3の値が全て0であれば、Yesと判定して、CPU45aは、ステップS74にて、前状態出力フラグPPWF、キーオフ回数フラグOFF、鍵駆動回数フラグKDF、キーオン回数ONCT、キーオフ回数OFCT及び鍵駆動回数KDCTを、0に設定する。つぎに、CPU45aは、ステップS76にて、MIDIステータスフラグMSF、プランジャ位置フラグPF1乃至PF3、前状態出力フラグPPWF、キーオフ回数フラグOFF及び鍵駆動回数フラグKDFの値を用いて、現在のソレノイド31の制御状態が、制御状態ST1~ST16のうちの、どの制御状態に該当するかを判別する。例えば、鍵駆動プログラムの開始直後においては、MIDIステータスフラグMSF、プランジャ位置フラグPF1乃至PF3、前状態出力フラグPPWF、キーオフ回数フラグOFF及び鍵駆動回数フラグKDFは全て0に初期化されているので、CPU45aは、制御状態ST1に該当すると判定する。つぎに、CPU45aは、ステップS78にて、ソレノイド31の制御状態が遷移したか否かを判定する。すなわち、状態番号バッファに記憶されている状態番号が表わす1つ前の制御状態とステップS76にて判定した現在の制御状態とが一致するか否かを判定する。両制御状態が一致する場合にはNoと判定して、CPU45aは、後述のステップS84に処理を進める。一方、両制御状態が異なる場合には、Yesと判定して、ステップS80にて、上記制御状態の遷移が、状態ST4から状態ST5への遷移、状態ST4から状態ST6への遷移又は状態ST8から制御状態ST9への遷移のいずれかに該当するか否か判定する。いずれの遷移にも該当しない場合は、CPU45aは、Noと判定して、ステップS84に処理を進める。一方、いずれかの遷移に該当する場合は、CPU45aは、Yesと判定して、ステップS82にて、鍵駆動回数KDCT及び鍵駆動回数フラグKDFを更新する。すなわち、鍵駆動回数KDCTをインクリメントする。そして、差DIFを算出し、差DIFが基準値b以下であれば、鍵駆動回数フラグKDFを0に設定し、差DIFが基準値bより大きければ鍵駆動回数フラグKDFを1に設定する。ただし、差DIFが、基準値aよりも大きい場合は、差DIFを0とみなして鍵駆動回数フラグKDFを設定する。つぎに、CPU45aは、ステップS84にて、前記判定した現在の制御状態の出力フラグPWFの値に従って、ソレノイド31への駆動信号の供給を制御する。具体的には、出力フラグPWFの値が1であれば、CPU45aは、駆動対象のソレノイド31を表すキーコードを駆動回路44に供給するとともに、上記の押鍵用のデューティ比テーブルに従って、デューティ比を駆動回路44に供給する。一方、出力フラグPWFの値が0であれば、CPU45aは、駆動対象のソレノイド31を表すキーコードを駆動回路44に供給するとともに、上記の離鍵用のデューティ比テーブルに従って、デューティ比を駆動回路44に供給する。つぎに、CPU45aは、ステップS86にて、現在の制御状態の状態番号を1つ前の制御状態の状態番号として制御状態バッファに記憶して、ステップS64に戻る。このように、CPU45aは、上記のステップS64~S86の処理を繰り返す。ただし、ステップS66において、イベントデータの種類がエンドデータである場合には、CPU45aは、ステップS88にて、鍵駆動プログラムを終了する。上記のステップS64~S86を繰り返す処理は高速に実行されるので、ステップS64~S86の実行において、いずれのフラグ及びカウンタの値も更新されないこともある。すなわち、一度ステップS64~S86を実行しただけでは、制御状態が遷移しないこともある。つぎに、ソレノイド31の制御状態の遷移及び各状態における動作について、図11乃至図15を用いて具体的に説明する。なお、図11の各制御状態を示すブロック中において、各制御状態のMIDIステータスフラグMSF、プランジャ位置フラグPF1乃至PF3、前状態出力フラグPPWF、キーオフ回数フラグOFF及び鍵駆動回数フラグKDFの値をこの順に括弧内に列記している。そして、各種フラグの値を列記した括弧の下に、各制御状態に規定されている出力フラグPWFの値を記載している。また、図12乃至図15におけるキーオン指令及びキーオフ指令を表すキーオン信号KEYON及びキーオフ信号KEYOFFのパルスのそれぞれの立下り時に、キーオンイベント及びキーオフイベントがそれぞれ発生する。A.通常駆動まず、鍵11を押鍵してフルストローク位置に一定時間保持した後にレスト位置まで戻す通常駆動における、ソレノイド31の制御状態の遷移及び各制御状態における動作について、図11及び図12を用いて説明する。A1状態ST1鍵11の駆動開始時においては、全てのフラグが0に初期化されるS62ので、ソレノイド31の制御状態は、状態ST1である。A2状態ST1~状態ST2つぎに、キーオンイベントにより、MIDIステータスフラグMSFが1に設定されS68、キーオン回数ONCTがインクリメントされて1に設定される。また、キーオン回数ONCTと鍵駆動回数KDCTとの差DIFが1になる。差DIFはb=2以下であるので、鍵駆動回数フラグKDFは0のままである。また、他のフラグ及び他のカウンタの値も、0のままである。以下の説明においては、各ステップにおいて値が変更されたフラグについてのみ説明し、値が変更されていないフラグについての説明を省略する。これにより、ソレノイド31の制御状態は、状態ST2に遷移するS76。状態ST2においては、出力フラグPWFが1に設定されているので、ソレノイド31に押鍵用の駆動信号が供給されS84、プランジャ31cが上昇する。A3状態ST2~状態ST3プランジャ31cの位置Pが第1位置P1を超えると、位置フラグPF1が1に設定され、前状態出力フラグPPWFが、1つ前の制御状態である状態ST2の出力フラグPWFの値に設定されるS70。すなわち、前状態出力フラグPPWFが1に設定される。これにより、ソレノイド31の制御状態は、状態ST3に遷移するS76。状態ST3においては、出力フラグPWFが1に設定されているので、ソレノイド31に押鍵用の駆動信号が供給されS84、プランジャ31cがさらに上昇する。A4状態ST3~状態ST4つぎに、プランジャ31cの位置Pが第2位置P2を超えると、プランジャ位置フラグPF2が1に設定され、前状態出力フラグPPWFが1に設定されるS70。これにより、ソレノイド31の制御状態は、状態ST4に遷移するS76。状態ST4においては、出力フラグPWFが1に設定されているので、ソレノイド31に押鍵用の駆動信号が供給されS84、プランジャ31cがさらに上昇する。A5状態ST4~状態ST5つぎに、プランジャ31cの位置Pが第3位置P3を超えると、プランジャ位置フラグPF3が1に設定され、前状態出力フラグPPWFが1に設定されるS70。また、キーオフ回数OFCTは0であるので、ソレノイド31の制御状態は、状態ST5に遷移するS76。状態ST4から状態ST5への遷移であるので、鍵駆動回数KDCTがインクリメントされてS82、1に設定される。これにより、鍵駆動回数KDCTとキーオン回数ONCTの差DIFは0となる。鍵駆動回数フラグKDFは0のままである。状態ST5においては、出力フラグPWFが1に設定されているので、ソレノイド31に押鍵用の駆動信号が供給され、プランジャ31cがさらに上昇し、限界位置PEに保持される。すなわち、鍵11がフルストローク位置に保持される。A6状態ST5~状態ST9つぎに、キーオフイベントにより、MIDIステータスフラグMSFが0に設定され、前状態出力フラグPPWFが1に設定されるS68。また、キーオフ回数OFCTがインクリメントされて1に設定され、キーオフ回数フラグOFFが1に設定されるS68。これにより、ソレノイド31の制御状態は、状態ST9に遷移するS76。状態ST9においては、出力フラグPWFが0に設定されているので、ソレノイド31への離鍵用の駆動信号が供給されS84、プランジャ31cが下降する。A7状態ST9~状態ST13つぎに、プランジャ31cの位置Pが第3位置P3を下回ると、プランジャ位置フラグPF3が0に設定され、前状態出力フラグPPWFが0に設定されるS70。これにより、ソレノイド31の制御状態は、状態ST13に遷移するS76。状態ST13においては、出力フラグPWFが0に設定されているので、ソレノイド31に離鍵用の駆動信号が供給されていてS84、プランジャ31cがさらに下降する。A8状態ST13~状態ST15つぎに、プランジャ31cの位置Pが第2位置P2を下回ると、プランジャ位置フラグPF2が0に設定され、前状態出力フラグPPWFが0に設定されるS70。また、鍵駆動回数フラグKDFは0であるから、ソレノイド31の制御状態は、状態ST15に遷移するS76。状態ST15においては、出力フラグPWFが0に設定されているので、ソレノイド31に離鍵用の駆動信号が供給されていてS84、プランジャ31cがさらに下降する。A9状態ST15~状態ST1そして、プランジャ31cの位置Pが第1位置P1を下回ると、プランジャ位置フラグPF1が0に設定され、前状態出力フラグPPWFが0に設定されるS70。これにより、ソレノイド31の制御状態は、状態ST1に遷移してS76、鍵11がレスト位置にて停止する。B.スタッカート駆動つぎに、鍵11を押鍵して、鍵11がフルストローク位置に達する前にキーオフイベントが発生し、鍵11がフルストローク位置に達した直後に離鍵動作に移行して、鍵11をレスト位置に戻すスタッカート駆動における、ソレノイド31の制御状態の遷移及び各制御状態における動作について、図11及び図13を用いて説明する。B1状態ST1~状態ST2~状態ST3状態ST1から状態ST3までの状態遷移及び各状態における動作は、上記の通常駆動と同様であるので、説明を省略する。B2状態ST3~状態ST7状態ST3において、キーオフイベントが発生すると、MIDIステータスフラグMSFが0に設定され、前状態出力フラグPPWFが1に設定されるS68。また、キーオフ回数OFCTがインクリメントされて1に設定され、キーオフ回数フラグOFFが1に設定されるS68。これにより、ソレノイド31の制御状態は、状態ST7に遷移するS76。状態ST7においては、出力フラグPWFが1に設定されているので、ソレノイド31に押鍵用の駆動信号が供給されS84、プランジャ31cがさらに上昇する。B3状態ST7~状態ST8つぎに、プランジャ31cの位置Pが第2位置P2を超えると、プランジャ位置フラグPF2が1に設定され、前状態出力フラグPPWFが1に設定されるS70。これにより、ソレノイド31の制御状態は、状態ST8に遷移するS76。状態ST8においては、出力フラグPWFが1に設定されているので、ソレノイド31に押鍵用の駆動信号が供給されS84、プランジャ31cがさらに上昇する。B4状態ST8~~状態ST1つぎに、プランジャ31cの位置Pが第3位置P3を超えると、プランジャ位置フラグPF3が1に設定され、前状態出力フラグPPWFが1に設定されるS70。これにより、ソレノイド31の制御状態は、状態ST9に遷移するS76。状態ST8から状態ST9への遷移であるので、鍵駆動回数KDCTがインクリメントされてS82、1に設定される。これにより、鍵駆動回数KDCTとキーオン回数ONCTの差DIFは0となる。鍵駆動回数フラグKDFは0のままである。状態ST9においては、出力フラグPWFが0に設定されているが、CPU45aが、ソレノイド31へ供給する駆動信号を離鍵用の駆動信号に切り替えても、プランジャ31cは惰性により若干上方へ移動する図12参照。そして、プランジャ31cは限界位置PEに達した後、下降する。その後、ソレノイド31の制御状態は、上記通常駆動と同様に、状態ST13、状態ST15、状態ST1の順に遷移し、鍵11がレスト位置にて停止する。C.連打駆動つぎに、鍵11を押鍵して、鍵11がフルストローク位置に達する前にキーオフイベントが発生し、鍵11がフルストローク位置に達した直後に離鍵動作に移行し、離鍵動作途中にキーオンイベントが発生し、鍵11がレスト位置に達する前に押鍵動作に移行する連打駆動における、ソレノイド31の制御状態の遷移及び各制御状態における動作について、図11、図14A及び図14Bを用いて説明する。C1状態ST1~~状態ST9状態ST1から状態ST9へ至るまでの状態遷移及び各状態における動作は、上記スタッカート駆動における動作と同様であるので、説明を省略する。C2状態ST9~状態ST11状態ST9において、キーオンイベントが発生すると、MIDIステータスフラグMSFが1に設定され、前状態出力フラグPPWFが0に設定されるS68。また、キーオン回数ONCTがインクリメントされて2に設定され、差DIFが1になるが、鍵駆動回数フラグKDFは0のままであるS68。これにより、ソレノイド31の制御状態は、状態ST11に遷移するS76。状態ST11においては、出力フラグPWFが0に設定されているので、ソレノイド31に離鍵用の駆動信号が供給されS84、プランジャ31cが下降する。C3状態ST11~状態ST10状態ST11において、キーオフイベントが発生すると、MIDIステータスフラグMSFが0に設定され、前状態出力フラグPPWFが0に設定されるS68。また、キーオフ回数OFCTがインクリメントされて2に設定され、キーオフ回数フラグOFFが1に設定されるS68。これにより、ソレノイド31の制御状態は、状態ST10に遷移するS76。状態ST10においては、出力フラグPWFが0に設定されているので、ソレノイド31に押鍵用の駆動信号が供給されS84、プランジャ31cがさらに下降する。C4状態ST10~状態ST15つぎに、プランジャ31cの位置Pが第2位置P2を下回ると、プランジャ位置フラグPF2が0に設定され、前状態出力フラグPPWFが0に設定されるS70。これにより、ソレノイド31の制御状態は、状態ST13に遷移するS76。状態ST13においては、出力フラグPWFが0に設定されているので、ソレノイド31に離鍵用の駆動信号が供給されていてS84、プランジャ31cがさらに下降する。そして、ソレノイド31の制御状態は、状態ST15へ遷移する。状態ST13から状態ST15への遷移及び状態ST15における動作は、上記通常駆動と同様なので、説明を省略する。C5状態ST15~状態ST16状態ST15において、キーオンイベントが発生すると、MIDIステータスフラグMSFが1に設定され、前状態出力フラグPPWFが0に設定されるS68。また、キーオン回数ONCTがインクリメントされて3に設定され、差DIFが2になるが、鍵駆動回数フラグKDFは0のままであるS68。これにより、ソレノイド31の制御状態は、状態ST16に遷移するS76。状態ST16においては、出力フラグPWFが1に設定されているので、ソレノイド31に押鍵用の駆動信号が供給されるがS84、プランジャ31cは、惰性により若干下降した後、上昇し始める。すなわち、プランジャ31cは、初期位置PSに達する前に、再び上昇し始める。C6状態ST16~状態ST4つぎに、プランジャ31cの位置Pが第2位置P2を超えると、プランジャ位置フラグPF2が1に設定され、前状態出力フラグPPWFが1に設定されるS70。これにより、ソレノイド31の制御状態は、状態ST4に遷移するS76。状態ST4においては、出力フラグPWFが1に設定されているので、ソレノイド31に押鍵用の駆動信号が供給されS84、プランジャ31cがさらに上昇する。C7状態ST4~状態ST6つぎに、プランジャ31cの位置Pが第3位置P3を超えると、プランジャ位置フラグPF3が1に設定され、前状態出力フラグPPWFが1に設定されるS70。また、キーオフ回数OFCTは2であるので、ソレノイド31の制御状態は、状態ST6に遷移するS76。状態ST4から状態ST6への遷移であるので、鍵駆動回数KDCTがインクリメントされてS82、2に設定される。これにより、鍵駆動回数KDCTとキーオン回数ONCTの差DIFは1となる。鍵駆動回数フラグKDFは0のままである。状態ST6においては、出力フラグPWFが0に設定されているので、ソレノイド31に離鍵用の駆動信号が供給されるが、プランジャ31cは惰性により若干上昇し、位置Pが第3位置P3を超える。C8状態ST6~状態ST10状態ST6において、キーオフイベントが発生すると、MIDIステータスフラグMSFが0に設定され、前状態出力フラグPPWFが0に設定されるS68。また、キーオフ回数OFCTがインクリメントされて3に設定されるS68。これにより、ソレノイド31の制御状態は、状態ST10に遷移するS76。状態ST10においても、状態ST6に引き続き、出力フラグPWFが0に設定されているが、プランジャ31cは惰性によりさらに上昇して限界位置PEに達した後、下降し始める。C9状態ST10~状態ST11状態ST10において、キーオンイベントが発生すると、MIDIステータスフラグMSFが1に設定され、前状態出力フラグPPWFが0に設定されるS68。また、キーオン回数ONCTがインクリメントされて4に設定され、差DIFが2になるが、鍵駆動回数フラグは0のままであるS68。これにより、ソレノイド31の制御状態は、状態ST11に遷移するS76。状態ST11においては、出力フラグPWFが0に設定されているので、ソレノイド31に離鍵用の駆動信号が供給されS84、プランジャ31cが下降する。C10状態ST11~状態ST12つぎに、プランジャ31cの位置Pが第3位置P3を下回ると、プランジャ位置フラグPF3が0に設定され、前状態出力フラグPPWFが0に設定されるS70。これにより、ソレノイド31の制御状態は、状態ST12に遷移するS76。状態ST12においては、出力フラグPWFが0に設定されているので、ソレノイド31に離鍵用の駆動信号が供給されS84、プランジャ31cがさらに下降する。C11状態ST12~状態ST16~状態ST4つぎに、プランジャ31cの位置Pが第2位置P2を下回ると、プランジャ位置フラグPF2が0に設定され、前状態出力フラグPPWFが0に設定されるS70。これにより、ソレノイド31の制御状態は、状態ST16に遷移しS76、再びプランジャ31cが上昇し始める。そして、C6において説明したように、ソレノイド31の制御状態は、再び状態ST4へ遷移する。C12状態ST4~状態ST8状態ST4において、キーオフイベントが発生すると、MIDIステータスフラグMSFが0に設定され、前状態出力フラグPPWFが1に設定されるS68。また、キーオフ回数OFCTがインクリメントされて4に設定されるS68。これにより、ソレノイド31の制御状態は、状態ST8に遷移しS76、プランジャ31cはさらに上昇する。C13状態ST8~状態ST9~状態ST11~状態ST12プランジャ31cの位置Pが第3位置P3を超えると、状態ST9へ遷移する。鍵駆動回数KDCTがインクリメントされて3に設定され、差DIFが1になる。鍵駆動回数フラグKDFは0のままである。そして、プランジャ31cが下降して、状態ST11へ遷移する。キーオン回数ONCTがインクリメントされて5に設定され、差DIFが2になる。鍵駆動回数フラグKDFは0のままである。そして、プランジャ31cがさらに下降して、ソレノイド31の制御状態は、状態ST12へ遷移する。C14状態ST12~~状態ST12プランジャ31cの位置Pが第2位置P2を下回ると、ソレノイド31の制御状態は、状態ST16へ遷移する。以降、状態ST16、状態ST4、状態ST8、状態ST9、状態ST11、状態ST12の順に遷移する。状態ST4から状態ST8への遷移において、キーオフ回数OFCTがインクリメントされて5に設定される。また、状態ST8から状態ST9への遷移において、鍵駆動回数KDCTがインクリメントされて4に設定される。これにより差DIFが1になるが、鍵駆動回数フラグKDFは0のままである。また、状態ST9から状態ST11への遷移において、キーオン回数ONCTがインクリメントされて6に設定される。これにより差DIFが2になるが、鍵駆動回数フラグKDFは0のままである。C15状態ST12~状態ST13状態ST12において、キーオフイベントが発生すると、MIDIステータスフラグMSFが0に設定され、前状態出力フラグPPWFが0に設定されるS68。また、キーオフ回数OFCTがインクリメントされて6に設定されるS68。これにより、ソレノイド31の制御状態は、状態ST13に遷移しS76、プランジャ31cがさらに下降する。C16状態ST13~状態ST15~状態ST1プランジャ31cが下降して、ソレノイド31の制御状態が、状態ST15、状態ST1の順に遷移し、鍵11がレスト位置にて停止する。つぎに、上記の図14Bの状態ST15において、さらにキーオンイベントが発生してさらに連打を継続する例を図11及び図15を用いて説明する。C17状態ST15~状態ST16~~ST13この場合、ソレノイド31の制御状態は、状態ST16に遷移する。この例においては、その後、ソレノイド31の制御状態が、状態ST4、状態ST6、状態ST10、状態ST11、状態ST12、状態ST13の順に遷移している。これらの状態遷移及び各状態における動作は、上記の連打駆動と同様である。なお、状態ST15から状態ST16への遷移において、キーオン回数ONCTがインクリメントされて7に設定される。これにより差DIFが3になるので、鍵駆動回数フラグKDFが1に設定される。また、状態ST4から状態ST6への遷移において、鍵駆動回数KDCTがインクリメントされて5に設定される。これにより差DIFが2になり、鍵駆動回数フラグKDFが0に設定される。また、状態ST6から状態ST10への遷移において、キーオフ回数OFCTがインクリメントされて7に設定される。これにより差DIFが2になるが、鍵駆動回数フラグKDFは0のままである。また、状態ST10から状態ST11への遷移において、キーオン回数ONCTがインクリメントされて8に設定される。これにより差DIFが3になるので、鍵駆動回数フラグKDFが1に設定される。また、状態ST12から状態ST13への遷移において、キーオフ回数OFCTがインクリメントされて8に設定される。C18状態ST13~状態ST14つぎに、プランジャ31cの位置Pが第2位置P2を下回ると、プランジャ位置フラグPF2が0に設定され、前状態出力フラグPPWFが0に設定されるS70。また、鍵駆動回数フラグKDFは1であるから、ソレノイド31の制御状態は、状態ST14に遷移するS76。状態ST14においては、出力フラグPWFが1に設定されているので、ソレノイド31に押鍵用の駆動信号が供給されるがS84、プランジャ31cは惰性により若干下降した後、上昇し始める。C19状態ST14~状態ST8つぎに、プランジャ31cの位置Pが第2位置P2を超えると、プランジャ位置フラグPF2が1に設定され、前状態出力フラグPPWFが1に設定されるS70。これにより、ソレノイド31の制御状態は、状態ST8に遷移するS76。これにより、プランジャ31cがさらに上昇する。以降、状態ST9、状態ST11、状態ST12、状態ST13、状態ST15、状態ST16、状態ST4、状態ST6、状態ST10、状態ST11、状態ST12、状態ST14の順に遷移し、再び状態ST8に戻る動作を繰り返すと、差DIFが基準値a=6を超える。この場合、状態ST13において、差DIFを0とみなす。これにより、状態ST13から状態ST14へ遷移するのではなく、状態ST15へ遷移する。そして、状態ST15においてキーオンイベントが発生しなければ、状態ST1へ遷移して、鍵11がレスト位置にて停止する。D.その他つぎに、ソレノイド31の制御状態のその他の遷移について説明する。状態ST8において、キーオンイベントが発生すると、MIDIステータスフラグMSFが1に設定され、前状態出力フラグPPWFが1に設定されるS68。また、キーオン回数ONCTがインクリメントされ、差DIFに応じて、鍵駆動回数フラグが設定されるS68。これにより、ソレノイド31の制御状態は、状態ST4に遷移するS76。そして、状態ST8に引き続き、プランジャ31cは上昇する。また、状態ST6において、プランジャ31cが下降し、プランジャ31cの位置Pが第3位置P3を下回ると、プランジャ位置フラグPF3が0に設定され、前状態出力フラグPPWFが0に設定されるS70。これにより、ソレノイド31の制御状態は、状態ST12に遷移するS76。そして、状態ST6に引き続き、プランジャ31cは下降する。また、状態ST13において、キーオンイベントが発生すると、MIDIステータスフラグMSFが1に設定され、前状態出力フラグPPWFが0に設定されるS68。また、キーオン回数ONCTがインクリメントされ、差DIFに応じて、鍵駆動回数フラグが設定されるS68。これにより、ソレノイド31の制御状態は、状態ST12に遷移するS76。そして、状態ST13に引き続き、プランジャ31cは下降する。また、状態ST7において、キーオンイベントが発生すると、MIDIステータスフラグMSFが1に設定され、前状態出力フラグPPWFが1に設定されるS68。また、キーオン回数ONCTがインクリメントされ、差DIFに応じて、鍵駆動回数フラグKDFが設定されるS68。これにより、ソレノイド31の制御状態は、状態ST3に遷移するS76。そして、状態ST7に引き続き、プランジャ31cは上昇する。また、状態ST16において、キーオフイベントが発生すると、MIDIステータスフラグMSFが0に設定され、前状態出力フラグPPWFが1に設定されるS68。また、キーオフ回数OFCTがインクリメントされるS68。これにより、ソレノイド31の制御状態は、状態ST7に遷移するS76。そして、状態ST16に引き続き、プランジャ31cは上昇する。なお、本実施形態においては、初期位置PSと第1位置P1との間隔を非常に狭く設定したので、状態ST2から状態ST3へ遷移する前に、キーオフイベントが発生することを考慮していない。上記のように構成した電子楽器によれば、短期間内に鍵11に関するキーオンイベント及びキーオフイベントが繰り返し発生した場合、これらのキーオンイベント及びキーオフイベントの発生に同期して、楽音信号の発生及び停止が制御される。そして、鍵11の連打開始から終了までのキーオン回数ONCTと鍵駆動回数KDCTとの差DIFは、基準値b以下であるので、前記連打時における押離鍵の回数が多い場合であっても、発音に対する鍵11の動作が自然である。また、鍵11の連打開始から終了までのキーオン回数ONCTと鍵駆動回数KDCTとの差DIFが基準値aよりも大きいとき、差DIFを0とみなすようにした。これにより、連打動作途中において、連打開始からそれまでに供給された押鍵情報の数と鍵の駆動回数のずれが基準値aより大きくなった場合には、連打を終了させる。すなわち、押離鍵回数分の発音が終了するのと、ほぼ同時に鍵11の駆動も終了する。これにより、楽音の発生に対する鍵11の動作が不自然に感じられることを防止できる。この場合、押離鍵回数が非常に多いので、楽音の発生回数と鍵11の駆動回数とのずれが多少大きくても、鍵11の動作が不自然に感じられることはない。また、上記のように、デューティ比テーブルは、プランジャ31cの位置すなわち、押鍵深さとソレノイド31に供給する駆動信号PWM信号のデューティ比との関係を規定しているだけであるので、プランジャ31cの移動速度は、奏法上記の通常駆動、スタッカート駆動、連打駆動などに依存しない。したがって、ソレノイド31に供給する駆動信号の制御が簡単である。さらに、本発明の実施にあたっては、上記実施形態に限定されるものではなく、本発明の目的を逸脱しない限りにおいて種々の変更が可能である。例えば、プランジャ31cと鍵11との係合部を、図16Aに示すように構成してもよい。この場合、プランジャキャップ37に代えてプランジャキャップ37Aを用いている。プランジャキャップ37Aの下端部には、鍵11の左方向及び右方向へ向かってそれぞれ延設された軸37A1,37A1が設けられている。また、鍵11の後端部であって、プランジャキャップ37Aに対向する部分には、連結部材38Aが組み付けられている。すなわち、連結部材38Aの下端部には、上下方向に延設された突起が設けられていて、この突起を鍵11に設けられた嵌合孔に圧入した後、接着することにより、連結部材38Aが鍵11の後端部に組み付けられている。連結部材38の上端部には、前側から見て上方に開いたV字型の溝が設けられている。そして、連結部材38の側面部には、前記溝の下端部から高音側及び低音側へそれぞれ貫通していて前後方向に長い長孔38A1,38A1が設けられている。長孔38A1,38A1の上端面には、図16Bに示すように、上記実施形態と同様の緩衝シート37a及び低摩擦シート37bが貼り付けられている。プランジャキャップ37Aを連結部材38Aの上方から前記溝部に押し込むと、前記溝部の弾性によって前記溝部が若干開き、軸37A1,37A1が、長孔38A1,38A1にそれぞれ嵌合し、軸37A1,37A1の上面が低摩擦シート37bの下面に当接する。上記のように構成した場合、ソレノイド31への非通電時には、プランジャ31cの自重及びハンマー20の重量が軸37A1,37A1を介して連結部38Aに伝達され、連結部38Aが下方へ押される。これにより、鍵11の前端部が上方へ移動する。一方、ソレノイド31への通電時には、軸37A1,37A1によって、連結部材38Aが上方へ引き上げられるので、鍵11の前端部が下方へ移動する。その他の動作及び効果は、上記実施形態と同様である。上記実施形態においては、鍵駆動プログラムのステップS64~ステップS86を繰り返し実行して、プランジャ31cの移動を監視するようにした。しかし、これに代えて、プランジャ31cの位置が第1位置P1、第2位置P2及び第3位置P3に達するごとに、検出回路43が、CPU45aに割り込み信号を出力するようにしておき、この割り込み信号をトリガとして、プランジャ位置フラグPF1乃至PF3を更新するようにしてもよい。このように構成すれば、ステップS64~ステップS86の実行において、ステップS70を省略できるので、CPU45aの負荷を軽減できる。駆動回路44は、MIDIインターフェース回路52又は通信インターフェース回路53を介して外部機器52から供給されるMIDI信号によって制御されるようにしてもよい。すなわち、CPU45aは、上記の鍵駆動プログラムと平行して、外部機器52から供給されたMIDI信号に含まれるイベントデータをイベント処理バッファに記憶するプログラムを実行するように構成すればよい。また、上記実施形態においては、位置センサ40は、プランジャ31cの位置を検出するようにしたが、これに代えて、鍵11の押鍵深さを検出するようにしてもよい。すなわち、鍵11の前端部又は後端部の上下方向の位置を検出するようにしてもよい。"