a.構成例
以下、本発明の一実施形態について図面を用いて説明する。図1は、本発明の一実施形態に係る電子楽器の構成を示す全体ブロック図である。この電子楽器は、鍵盤装置10を備えている。鍵盤装置10は、図2に示すように、前後方向に延設された複数の白鍵及び黒鍵11を横方向に1列に配置している。各鍵11は、図3Aに示すように、合成樹脂により一体成形した鍵フレーム20に組み付けられている。鍵フレーム20は支持台30上に固定されており、鍵フレーム20には、複数の鍵11に対応した複数の揺動レバー40が複数の鍵11の下方にてそれぞれ組み付けられている。
鍵11は、下方を開放させて断面コ字状に合成樹脂により一体成形され、後端部11aを鍵フレーム20の後端部21に設けられて前方に開口した凹部に勘合させて、後端部11aの側面を支点に前端部11bを上下方向に揺動可能に鍵フレーム20に支持されている。鍵11の前端部11bには、鍵フレーム20の前端水平部に立設された鍵ガイド22が下方から侵入しており、鍵11の前端部11bは押鍵時に鍵ガイド22に案内されて垂直に変位する。また、フレーム20の前端水平部上にはフェルト等を重ねた長尺の鍵ストッパ23も鍵盤横方向に延設されて固着され、同ストッパ23は鍵11の前端部11bの下方への変位を規制する。ただし、この鍵ストッパ23は演奏による通常の押鍵時に鍵11の下方への変位を規制するものではなく、通常の押鍵時には、鍵11の前端部下端面は鍵ストッパ23の上面から離間した状態にある。一方、鍵11の上に重い物を置いたりした場合などのように、非常に大きな下方への力が鍵11に加わった場合には、鍵ストッパ23が鍵11の下方への変位を規制して鍵11の異常な変形による破壊を防止する。
鍵11の前端部11b近傍の前部分下面には、同下面からほぼ垂直下方に延設した駆動部12が一体的に形成されている。駆動部12は、後方を開放させて水平断面コ字状に形成され、下端は下端部12aにより閉じている。下端部12aの下面には、図示省略した弾性部材が組み付けられている。
揺動レバー40は、合成樹脂製のレバー基部41と金属製の質量体42とにより構成されている。レバー基部41は長尺状かつ平板状に成形されて、長手方向を前後方向にかつ板面を垂直に鍵11の前部分下方に配置されている。レバー基部41は下面中央部にて切り欠いた鍵盤横方向を軸線とする凹部41aを有し、凹部41aは軸線方向に厚肉に成形されている。この凹部41aは前方斜め下方にて開放されていて、鍵フレーム20の前方下端位置から後方斜め上方に延設された傾斜板24の上端部に設けた回動支持部25に組み付けられている。回動支持部25は鍵盤横方向に延設されている。これにより、揺動レバー40は、回動支持部25を支点として鍵フレーム20に上下に揺動可能に支持される。
この揺動レバー40は板ばね44により前方(図示左方向)に付勢されている。板ばね44は、前端にてレバー基部41の凹部41bに係合し、鍵フレーム20の中間部に設けた開口部26を介して鍵11の下面から鍵11内に侵入している。そして、板ばね44の後端部は、鍵11の後端部11aの内面に当接している。レバー基部41の前端部には、所定の隙間を隔てて上下方向に二股に分けた一対の脚部41c,41dが形成され、上方に位置する脚部41cは下方に位置する脚部41dより短く設定されている。両脚部41c,41dの間には、鍵11の駆動部12の下端部12aが侵入して両脚部41c,41dに係合している。これにより、鍵11の離鍵時には、質量体42の下方への自重による変位により、揺動レバー40の前端部は上方へ変位しており、鍵11の前端部も上方へ変位している。一方、鍵11の押鍵時には、駆動部12の下端部12aの下端面が脚部41dの上面を押圧し、揺動レバー40の前端部は下方へ変位する。
レバー基部41の下面には、凹部41aと脚部41dとの間にて、下方に突出したスイッチ駆動部41eが形成されている。スイッチ駆動部41eは、傾斜板24に設けた貫通窓24aを介してプリント基板45上に組み付けた第1乃至第3スイッチ46〜48に対向している。プリント基板45は傾斜板24の下面に同板24とほぼ平行に組み付けられており、第1乃至第3スイッチ46〜48は、鍵11ごとに設けられて鍵盤横方向に配列されている。第1乃至第3スイッチ46〜48は、複数の鍵11に共通に一体的に形成されたゴム接点スイッチである。第1乃至第3スイッチ46〜48においては、押鍵時すなわちスイッチ駆動部41eの下方への変位時に、第1スイッチ46、第2スイッチ47及び第3スイッチ48の順にオフからオンに切り換えられる。そして、押鍵が維持されていれば、第1乃至第3スイッチ46〜48はオン状態に保たれる。一方、離鍵時すなわちスイッチ駆動部41eの上方への変位時には、第3スイッチ48、第2スイッチ47及び第3スイッチ46の順にオンからオフに切り換えられる。
質量体42は棒状に成形され、その前部外周上にレバー基部41をアウトサート成形することによりレバー基部41に一体的に組み付けられている。質量体42の後部は折り曲げて重ね合わされており、この折り曲げ部分42aの長さをそれぞれ異ならせることにより質量体42の重さを異ならせている。具体的には、隣接する白鍵11および黒鍵11との間では、各鍵11,11の押圧位置上方への回転モーメントがほぼ等しくなるように設定される。また、白鍵11においても、黒鍵11においても、低音鍵に対して重い質量体42を用い、高音側に向かうにしたがって質量体42の重さを軽く設定し、前記回転モーメントが低音側で大きく高音側に向かうにしたがって小さくなるようになっている。
また、鍵フレーム20の後端部に位置する支持台30の上面には、下限ストッパ部材31が鍵盤横方向に延設して固着されている。この下限ストッパ部材31は、揺動レバー40の後端部の下方への変位を規制することにより、鍵11の離鍵時における鍵11の前端部の上方への変位を規制する。また、鍵フレーム20の後端部に位置する上面板27の下面には、長尺の上限ストッパ部材32が下限ストッパ部材31と上下方向に所定距離だけ隔てて下方を向けて鍵盤横方向に延設して固着されている。この上限ストッパ部材32は、揺動レバー40の後端部の上方への変位を規制することにより、鍵11の押鍵時における鍵11の前端部の下方への変位を規制する。
さらに、鍵盤装置10内には、複数の鍵11にそれぞれ対応した複数の鍵駆動装置50が設けられている。各鍵駆動装置50は、ボビン51、ソレノイド52、プランジャ53及び駆動ロッド54からなる。ボビン51は、複数の鍵11に共通に設けられて支持台30に組み付けられた支持部材55に固定されている。ソレノイド52は、ボビン51の外周上に組み付けられている。プランジャ53は、ボビン51内に上下方向に摺動可能に収容され、ソレノイド52への非通電時には自重でボビン51の内底面に接する位置まで降下している。ソレノイド52への通電時には、プランジャ53は電磁力により自重に抗して上方へ変位する。駆動ロッド54は、プランジャ53の上面に固定されて上方に延設されている。ソレノイド52の非通電時には、図3Bに拡大して示すように、駆動ロッド54の先端は、レバー基部41の先端部の下面(被駆動部)から所定の僅かなクリアランス分だけ離れて位置する
この場合、ソレノイド52を大きく構成して大きな駆動力を得るために、複数のソレノイド52、プランジャ53及び駆動ロッド54は、図4に示すように、前後2列に千鳥状に配置されている。この配置のために、前側に位置するプランジャ53を後側に位置するプランジャ53に比べて大きく構成して、揺動レバー40の駆動力を補うようにしている。しかし、この前後のプランジャ53の大きさを異ならせなくも、後述する駆動制御のみにより、前側に位置するプランジャ53を後側に位置するプランジャ53に比べて大きな駆動力で駆動するようにしてもよい。このように構成した鍵駆動装置50においては、ソレノイド52の非通電状態時に、駆動ロッド54の先端が揺動レバー40のレバー基部41の先端部の下面から僅かに離れた下方に位置する(図3B参照)。一方、ソレノイド52の通電時には、駆動ロッド54の先端がレバー基部41の先端部の下面に当接してレバー基部41の先端部を上方に変位させる。このとき、前記押鍵時と同様に、スイッチ駆動部41eがレバー基部41(揺動レバー40)の揺動に連動して下方に変位して、第1乃至第3スイッチ46〜48をオフからオンに切り換える。また、揺動レバー40の揺動により、鍵11の前端部も押鍵時のように下方に変位する。図3Cは、このソレノイド52への通電による鍵11及び揺動レバー40の駆動状態を示している。
ふたたび、図1の説明に戻ると、各鍵11の第1乃至第3スイッチ46〜48のオン・オフ動作は検出回路61によって検出され、各鍵11のソレノイド52の通電・非通電は駆動回路62によって制御されるようになっている。検出回路61は、各鍵11の第1乃至第3スイッチ46〜48を走査し、いずれかのスイッチがオフ状態からオン状態に変化したとき、変化のあったスイッチの種類(SW1〜SW3)、同スイッチの属する鍵11を表すキーコードKC、及びスイッチオンであることを表すキーオンイベントをバス63に出力する。いずれかのスイッチがオン状態からオフ状態に変化したときには、変化のあったスイッチの種類(SW1〜SW3)、同スイッチの属する鍵11を表すキーコードKC、及びスイッチオフであることを表すキーオフイベントをバス63に出力する。駆動回路62は、パルス幅変調(PWM)制御によりソレノイド52を通電制御するもので、バス63を介して供給されるキーコードKC及び波形デューティ比(以下、単にデューティ比という)を入力して、キーコードKCによって表される鍵11に対応したソレノイド52を前記デューティ比で通電制御する。
電子楽器は、さらに、複数のパネル操作子64、ディスプレイ65及び音源回路66を備えている。複数のパネル操作子64は、電子楽器の操作パネル上に設けられて、電子楽器の各部の動作を指示するとともに、各種データの設定に利用される。特に、本実施形態では、自動演奏のテンポを設定するテンポ操作子64aが設けられていることに注目すべきである。複数のパネル操作子64の操作は、バス63に接続された検出回路67によって検出される。ディスプレイ65は、操作パネル上に設けられた液晶ディスプレイ、CRTなどで構成され、文字、数字、図形などを表示する。このディスプレイ65の表示内容は、バス63に接続された表示回路68によって制御される。
音源回路66は、バス63に接続されていて、バス63を介して供給されるキーコードKC及びキーオンKONからなるキーオン制御データに応答して、キーコードKCによって表される音高の楽音信号を生成し始める。このキーオン制御データ中にはベロシティVELが含まれることもあり、ベロシティVELが含まれている場合には、生成される楽音信号の音色、音量などがベロシティVELに応じて制御される。また、音源回路66は、バス63を介して供給されるキーコードKC及びキーオフKOFからなるキーオフ制御データに応答して、生成中のキーコードKCによって表される音高の楽音信号の生成を終了し始める。楽音信号の生成の終了とは、楽音信号をリリース制御した後に、その生成を停止することを意味する。この場合、生成される楽音信号の音色及び音量、並びに同生成された楽音信号に付与される効果は、本明細書では詳しい説明は省略するが、別途供給される楽音制御データによって制御される。なお、音源回路66は多数の音源チャンネルを有しており、本実施形態においては、キーオン制御データの到来時には、いずれかの音源チャンネルにて楽音信号が生成されるものとする。音源回路66にて生成された楽音信号はディジタル楽音信号であり、このディジタル楽音信号はサウンドシステム69を介して放音される。サウンドシステム69内には、ディジタル楽音信号をD/A変換するD/A変換器、D/A変換されたアナログ楽音信号を増幅するアンプ、及び同増幅されたアナログ楽音信号を放音するスピーカなどが含まれている。
また、この電子楽器は、バス63に接続されたコンピュータ部70、外部記憶装置81、MIDIインターフェース回路82及び通信インターフェース回路83も備えている。コンピュータ部70は、CPU71、タイマ72、ROM73及びRAM74からなり、後述する図5乃至図13のプログラムを実行することにより、自動演奏及び鍵盤装置10を用いたマニュアル演奏による楽音の発生を制御することに加え、鍵盤装置10の鍵11の駆動を制御する。外部記憶装置81は、HDD、FDD、CD−ROM、MO、DVD、半導体メモリなどの不揮発性の記録媒体と、同各記録媒体に対するドライブユニットを含む。
本実施形態においては、外部記憶装置81に、特に、曲を自動演奏するための複数の曲データ及びソレノイド52を通電制御するためのデューティ比を記憶した複数のデューティ比テーブルが記憶されている。各曲データは、図14に示すように、ヘッダ、一連のイベントデータ及びエンドデータからなる。ヘッダは、曲名、初期の音色、音量、演奏テンポなどを表す複数のデータからなる。イベントデータには、キーオンデータ、キーオフデータ、楽音制御データ(図示しない)及びテンポデータ(図示しない)などが含まれる。キーオンデータは、発生楽音の音高を表すキーコードKC及び楽音の発生開始を表すキーオンKONを有する。キーオフデータは、発生中の楽音の音高を表すキーコードKC及び楽音の発生停止を表すキーオフKOFを有する。楽音制御データは、発生楽音の音色、音量を制御するための制御データを有する。テンポデータは、自動演奏のテンポを変更するための制御データを有する。これらのキーオンデータ、キーオフデータ、楽音制御データ及びテンポデータは、それらの楽曲中のタイミングを表すテンポクロックタイミングTCLTをそれぞれ含む。エンドデータは、曲の終了を表す。なお、これらの曲データ及び前記プログラムは、予め外部記憶装置81に記憶されていてもよいし、MIDIインターフェース回路82又は通信インターフェース回路83を介して外部から取り込んでもよい。
複数のデューティ比テーブルは、図15に示すように、それぞれ、押鍵時に鍵11を円滑に突き上げるためにソレノイド52を通電制御する際のデューティ比を押鍵開始からの時間の関数として記憶しているとともに、離鍵時の鍵11を円滑に降下させるためにソレノイド52を通電制御する際のデューティ比を離鍵開始からの時間の関数として記憶している。本実施形態では、図16に示すように、各デューティ比テーブルは、押鍵時のデューティ比として階段状に変化する7種類(ST1〜ST7)のデューティ比、押鍵維持のための1種類(ST8)のデューティ比、及び離鍵時のデューティ比として階段状に変化する4種類(ST9〜ST12)のデューティ比が用意されている。また、複数のデューティ比テーブル内にそれぞれ記憶された時間変化するデューティ比の各平均値はそれぞれ異なる。そして、鍵11をなるべく均一な速度で変位させるために、鍵の属する音域(例えば、低域、中低域、中高域及び高域)、白鍵又は黒鍵、及び千鳥状に配置された鍵駆動装置50の前後位置の組み合わせに応じて、鍵11は複数のデューティ比テーブルのうちのいずか一つのデューティ比テーブルに予め割当てられている。具体的には、鍵盤装置10の質量体42は低音域ほど重いために(すなわち、回転モーメントが大きいために)、低音域の鍵11ほど、前記平均値の大きなデューティ比テーブルに割当てられている。白鍵11は、黒鍵11に比べて回転モーメントが大きいために、黒鍵11に比べて前記平均値の大きなデューティ比テーブルに割当てられている。鍵駆動装置50が前側に位置している鍵11は、鍵駆動装置50が後側に位置している鍵11に比べて回動支点からの距離が短いために、前記平均値の大きなデューティ比テーブルに割当てられている。
MIDIインターフェース回路82は、他の電子音楽装置、シーケンサ、パーソナルコンピュータなどのMIDI対応の外部機器91に接続可能となっていて、この電子楽器が外部機器91と各種プログラム及びデータを交信可能としている。通信インターフェース回路83は、通信ネットワーク92に接続可能となっていて、この電子楽器が各種プログラム及びデータをサーバコンピュータ93から受信できるとともに、各種プログラム及びデータをサーバコンピュータ93に送信できるようになっている。
次に、上記のように構成した実施形態の動作について説明するが、基本動作、同一鍵連打動作、複数鍵連打動作及びマニュアル演奏との競合動作に分けて説明する。同一鍵連打動作とは、自動演奏により、同一の鍵が短時間内にオン・オフ動作を繰り返す動作である。複数鍵連打動作とは、自動演奏により、複数の鍵が短時間内にオン動作してオン状態を同時に維持する動作である。マニュアル演奏との競合動作とは、自動演奏中にマニュアル演奏がされた場合の動作である。基本動作とは、これら以外の基本的な動作である。
b.基本動作
ユーザがパネル操作子64を操作して自動演奏を指示すると、図示しないプログラムの実行により、ディスプレイ65に曲の選択指示が表示される。そして、ユーザは、この指示に従って外部記憶装置81に記憶されている所望の曲をパネル操作子64の操作により選択する。この選択により、選択された曲の曲データが外部記憶装置81から読み出されてRAM74に記憶される。なお、ユーザが所望とする曲が外部記憶装置81に記憶されていない場合には、ユーザが、MIDI機器91又はサーバコンピュータ93に記憶されている曲をRAM74内に取り込むようにしてもよい。
また、自動演奏の指示により、図示しない初期設定処理が実行されて、RAM74内に、自動演奏テーブル、ウェイトテーブル及びマニュアル演奏テーブルが用意される。自動演奏テーブルは、図17に示すように、曲データに基づく自動演奏による鍵盤装置10の駆動を制御するためのテーブルであり、イベントデータ中のキーオンデータを割り当てるための複数(本実施形態では、10個)のチャンネルch1〜ch10を有する。なお、この10個のチャンネルは例示であって、これに限定されることなく、他の個数を採用してもよい。各チャンネルchi(iは、1から10までの整数)には、キーコードKC(i)、キー駆動状態ST(i)、経過時間TM(i)、オフディレイフラグOFDL(i)、オンディレイフラグONDL(i)、第1スイッチフラグSW1(i)、割当て優先度ASPR(i)及びウェイトフラグWAIT(i)がそれぞれ記憶されるようになっている。
キーコードKC(i)は、キーオンデータ中のキーコードKCである。キー駆動状態ST(i)は、キーオンタイミングすなわちソレノイド52への通電開始からの時間経過(但し、キーオン維持時間を除外する)に従った第1乃至第12状態ST1〜ST12のいずれかを表す(図16参照)。経過時間TM(i)は、キーオンタイミング及びキーオフタイミングからの経過時間を表す。但し、キーオフに関する経過時間TM(i)は、キーオフタイミングからの時間に、キーオンタイミングからキーオン持続開始タイミングまでの時間を加算して表している。オフディレイフラグOFDL(i)は、同一鍵の連打に関係して同一鍵に関するキーオン直後のキーオフに対してキーオフ制御を遅延させるためのフラグであり、“1”により遅延を表し、“0”により非遅延を表す。オンディレイフラグONDL(i)は、同一鍵の連打に関係して同一鍵に関するキーオフ直後のキーオンに対してキーオン制御を遅延させるためのフラグであり、“1”により遅延を表し、“0”により非遅延を表す。第1スイッチフラグSW1(i)は、第1スイッチ46のオン・オフ状態をそれぞれ表すもので、“0”によりオフ状態を表し、“1”によりオン状態を表す。割当て優先度ASPR(i)は、新たなキーオンデータをチャンネルch1〜ch10のうちのいずれかのチャンネルに割当てるための優先順位を表すもので、「0」〜「10」のうちのいずれかの値を取る。この場合、「0」は新たなキーオンデータのチャンネル割当てが禁止されることを表し、「1」〜「10」は大きいほど新たなキーオンデータのチャンネル割当ての優先順位が高いことを表す。ウェイトフラグWAIT(i)は、複数の鍵の連打に関係し、異なる鍵に関する複数のキーオンデータが短時間内に曲データ中から読み出されたとき、前回の鍵11の駆動から今回の鍵の駆動を所定時間(例えば、5ms)だけ遅延させるためのフラグであり、“1”により遅延を表し、“0”により非遅延を表す。
この自動演奏テーブルの初期設定においては、キーコードKC及び経過時間TMは、「0」にそれぞれリセットされる。キー駆動状態ST(i)、オフディレイフラグOFDL(i)、オンディレイフラグONDL(i)、第1スイッチフラグSW1(i)及びウェイトフラグWAIT(i)は、それぞれ“0”にリセットされる。割当て優先度ASPR(i)は、チャンネルch1〜ch10の順に、「10」〜「1」にそれぞれ設定される。
ウェイトテーブルは、図18に示すように、異なる鍵に関する複数のキーオンデータが短時間内に曲データ中から読み出された場合に、鍵駆動待機中のキーオンデータが割当てられているチャンネル(すなわち、自動演奏テーブル内のウェイトフラグWAIT(i)が“1”であるチャンネル)を表す1つ又は複数のチャンネル番号chNOを、鍵11が駆動される順に記憶する。前記初期設定時には、このウェイトテーブル内の全てのデータがクリアされる。
マニュアル演奏テーブルは、図19に示すように、鍵盤装置10の演奏による楽音の発生を制御するためのテーブルであり、演奏操作された鍵11を割り当てるための複数(例えば、20程度)のチャンネルch1〜chpを有する。各チャンネルchj(jは、1からpまでの整数)には、キーコードKC(j)、第1〜第3スイッチフラグSW1(j)〜SW3(j)、カウントフラグCNTF(j)、タッチカウント値TCNT(j)及び割当て優先度ASPR(j)がそれぞれ記憶されるようになっている。
キーコードKC(i)は、押鍵された鍵11を表す。第1〜第3スイッチフラグSW1(i)〜SW3(i)は、第1乃至第3スイッチ46〜48のオン・オフ状態をそれぞれ表すもので、“0”によりオフ状態を表し、“1”によりオン状態を表す。カウントフラグCNTF(i)は、押鍵された鍵11のベロシティ(鍵タッチ)を検出するために、“1”により第2スイッチ47がオンしてから第3スイッチ48がオンするまでの状態を表し、“0”によりそれ以外の状態を表す。タッチカウント値TCNT(i)は、前記ベロシティ検出のために時間計測のカウント値を示す。割当て優先度ASPR(i)は、新たに押鍵された鍵をチャンネルch1〜chpのうちのいずれかのチャンネルに割当てるための優先順位を表すもので、「0」〜「p」のうちのいずれかの値を取る。この場合も、「0」は新たに押鍵された鍵のチャンネル割当て禁止を表し、「1」〜「p」は大きい程新たに押鍵された鍵のチャンネル割当ての優先順位が高いことを表す。
このマニュアル演奏テーブルの初期設定においては、キーコードKC(i)及びタッチカウント値TCNT(i)は、「0」にそれぞれリセットされる。第1〜第3スイッチフラグSW1(i)〜SW3(i)及びカウントフラグCNTF(i)、は、それぞれ“0”にリセットされる。割当て優先度ASPR(i)は、チャンネルch1〜chpの順に、「p」〜「1」にそれぞれ設定される。
前記曲の選択及び初期設定後、CPU71は、タイマ72との協働により、曲データのヘッダ部分に含まれているテンポデータにより表された演奏テンポによって規定される所定の短時間ごとに、図5の自動演奏プログラムを繰り返し実行し始める。所定の短時間とは、例えば、4分音符の時間長の1/16,1/32程度の時間長である。なお、この演奏テンポはテンポ操作子64aの操作によっても変更される。
自動演奏プログラムの実行は、ステップS10にて開始され、CPU71は、ステップS11にてランフラグRUNが“1”であるか否かを判定する。ランフラグRUNは、“1”により自動演奏の動作中を表し、“0”により自動演奏の待機中を表す。ランフラグRUNは“0”に初期設定されているので、最初、CPU71はステップS11にて「No」と判定して、ステップS12の判定処理により、ユーザによるスタート指示を待つ。ユーザが自動演奏のスタートを指示しなければ、CPU71は、ステップS12にて「No」と判定して、ステップS21にてこの自動演奏プログラムの実行を一旦終了する。ユーザがパネル操作子64を操作して自動演奏のスタートを指示すると、CPU71は、ステップS12にて「Yes」と判定して、ステップS13にてランフラグRUNを“1”に設定するとともに、テンポクロックTCLを「0」にクリアする。その後、ステップS15〜S20からなる処理が実行される。
前記のようにして、ランフラグRUNが“1”に設定されると、以降の自動演奏プログラムの実行時に、CPU71は、ステップS11にて「Yes」と判定し、ステップS14にてテンポクロックTCLに「1」を加算する。次に、ステップS15以降の処理について説明する。CPU71は、ステップS15にて、曲データ中に、テンポクロックTCLにより示されたタイミングを表すテンポクロックタイミングTCLTを含むイベントデータがあるかを判定する。該当するイベントデータがなければ、CPU71は、ステップS15にて「No」と判定して、この自動演奏プログラムを一旦終了する。
該当するイベントデータがあれば、CPU71は、ステップS15にて「Yes」と判定して、ステップS16にて該当する1つのイベントデータを読み出し、ステップS17の自動演奏イベント処理ルーチンを実行する。ステップS17の処理後、CPU71は、該当する残りのイベントデータが曲データ中にあるかを判定し、該当する残りのイベントデータがあれば、前記ステップS16,S17の処理を実行する。このようにして、該当するイベントデータは、ステップS17の自動演奏イベント処理ルーチンにて一つずつ処理される。該当する残りのイベントデータがなくなると、CPU71は、ステップS18にて「No」と判定して、ステップS19にて曲データの読み出しがエンドデータまで達したかを判定する。そして、エンドデータに達するまで、すなわち1曲分の曲データの読み出しが終了するまで、演奏テンポに応じた短時間ごとに、ステップS14〜S18の処理が繰り返し実行される。
曲データの読み出しがエンドデータまで達すると、CPU71は、ステップS19にて「Yes」と判定し、ステップS20にてランフラグRUNを“0”に設定してこの自動演奏プログラムの実行を終了する。このようにしてランフラグRUNが“0”に設定されると、自動演奏プログラムが次に実行されたときには、前述のように、ステップS11,S12の処理により、ユーザによってスタートが指示されるまで、曲データの読み出し処理は実行されない。
次に、前記ステップS17の自動演奏イベント処理ルーチンについて説明する。自動演奏イベント処理ルーチンは、図6に詳細に示されており、その実行がステップS100にて開始される。ステップS100の実行開始後、CPU71は、ステップS101にて、前記読み出したイベントデータがキーオンデータであるかを判定する。キーオンデータであれば、CPU71は、ステップS101にて「Yes」と判定して、プログラムをステップS102に進める。前記読み出したイベントデータが、キーオフデータ、楽音制御データ、テンポデータなどのキーオンデータでない場合には、CPU71は、ステップS101において「No」と判定して、プログラムをステップ110に進める。まず、読み出されたイベントデータがキーオンデータである場合について説明を続ける。ステップS102においては、CPU71は、キーオンデータ中のキーコードKC及びキーオンKONを音源回路66に出力する。音源回路66は、キーコードKC及びキーオンKONの供給に応答し、供給されたキーコードKCに対応した音高の楽音信号を生成し始める。生成された楽音信号はサウンドシステム69を介して放音されるので、曲データに応じた楽音がサウンドシステム69から発音される。
次に、CPU71は、ステップS103にて、RAM64内に用意されているマニュアル演奏テーブル(図19)を参照し、前記読み出したイベントデータ中に含まれているキーコードKCと同一のキーコードKCを記憶し、かつ第1スイッチフラグSW1が“1”であるチャンネルが存在するかを判定する。この基本動作においては、ユーザによる鍵盤装置10の演奏がないことを前提としているので、マニュアル演奏テーブル内には、前記読み出したイベントデータ中に含まれているキーコードKCと同一のキーコードKCを記憶し、かつ第1スイッチフラグSW1が“1”であるチャンネルは存在しない。なお、前記該当するチャンネルが存在する場合については詳しく後述する。したがって、この場合には、CPU71は、ステップS103にて「No」と判定して、プログラムをステップS104に進める。
ステップS104においては、CPU71は、自動演奏テーブル(図17)を参照し、前記読み出したイベントデータ中に含まれているキーコードKCと同一のキーコードKCを記憶したチャンネルが存在するかを判定する。この判定条件は、後述する同一鍵連打に関する判定条件である。この基本動作においては、同一鍵連打に関係して同一鍵に関するキーオンデータが短時間内に発生しないことを前提しているので、前記読み出したイベントデータ中に含まれているキーコードKCと同一のキーコードKCを記憶したチャンネルは存在しない。なお、該当するチャンネルが存在する場合については詳しく後述する。したがって、この場合、CPU71は、ステップS104にて「No」と判定して、プログラムをステップS105に進める。
ステップS105においては、CPU71は、自動演奏テーブル内にキーオンデータを割り当て可能な空きチャンネルがないか、具体的には自動演奏テーブル内の全てのチャンネルの第1スイッチフラグSW1が“1”であるかを判定する。この判定条件は、後述する複数鍵連打に関する判定条件である。したがって、この場合も、CPU71は、ステップS105にて「No」と判定して、プログラムをステップS106に進める。
ステップS106においては、CPU71は、自動演奏テーブル内にて第1スイッチフラグSW1が“0”であり、かつ割当て優先度ASPRが最大であるチャンネルchiを探し出し、同探し出したチャンネルchiに前記図5のステップS16の処理により曲データ中から読み出したイベントデータであるキーオンデータを割当てる。すなわち、自動演奏テーブルの前記探し出したチャンネルchiのキーコードKC(i)をキーオンデータ中に含まれるキーコードKCに設定し、キー駆動状態ST(i)を第1状態ST1に設定し、経過時間TM(i)を「0」にリセットし、オフディレイフラグOFDL(i)及びオンディレイフラグONDL(i)を“0”に設定し、第1スイッチフラグSW1(i)を“1”に設定し、割当て優先度ASPR(i)を「0」に設定し、かつウェイトフラグWAIT(i)を“0”に設定する。
次に、CPU107は、ウェイト制御フラグWTCNTが“0”であるかを判定する。ウェイト制御フラグWTCNTは、複数の鍵の連打に関係して異なるキーコードKCを有する複数のキーオンデータが短時間内に曲データ中から読み出された場合に、前のキーオンデータに基づく鍵11の駆動から所定の短い待ち時間WTMmax(例えば、5ms)だけ次の鍵11の駆動を遅延させるためのフラグであり、“1”により遅延状態を表し、“0”によりそれ以外の状態を表す。この基本動作では、複数の鍵の連打に関係して複数の鍵に関するキーオンデータが短時間内に発生しないことを前提しているので、ウェイト制御フラグWTCNTは“0”に設定されている。したがって、CPU71は、ステップS107にて「Yes」と判定して、ステップS108にて、前記記憶したキーコードKC(i)が予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図16参照)内の第1状態ST1に対応したデューティ比をキーコードKC(i)と共に駆動回路62に出力する。次に、CPU71は、ステップS109にてウェイト制御フラグWTCNTを“1”に設定するとともに、ウェイトタイマWTMを待ち時間WTMmaxに設定する。なお、このステップS109の処理は、複数鍵連打に関係するもので、この基本動作には関係のない処理である。そして、CPU71は、ステップS116にて、この自動演奏イベント処理ルーチンの実行を一旦終了する。
前記ステップS108の処理のように、第1状態ST1に対応したデューティ比及びキーコードKC(i)が駆動回路62に出力されると、駆動回路62は、キーコードKC(i)により表された鍵11に対応したソレノイド52を前記デューティ比に応じたPWM波形で通電制御する。
一方、前記図5の自動演奏プログラムの実行に並行して、CPU71は、タイマ72との協働により、所定の短時間(例えば、100μs)ごとに、図9A乃至図9Cのキー駆動プログラムを繰り返し実行している。このキー駆動プログラムの実行は、図9AのステップS200にて開始され、CPU71は、ステップS201にて自動演奏テーブルのチャンネルch1〜ch10を順に指定する変数iを「1」に設定した後、図9CのステップS259,S260の処理により、変数iが「10」に達するまで、ステップS202〜S258の処理を繰り返し実行する。
この場合、全てのチャンネルは共通の動作をするので、前記図6のステップS106の処理により、キーオンデータが登録された自動演奏テーブルの一つのチャンネルiについてのみ説明する。ステップS202においては、CPU71は、変数iにより指定される自動演奏テーブル内のウェイトフラグWAIT(i)が“0”であるかを判定する。この基本動作では、前記ウェイト制御フラグWTCNTの場合と同様に、ウェイトフラグWAIT(i)も“1”に設定されることはない。したがって、CPU71は、ステップS202にて「Yes」と判定して、ステップS203にてキー駆動状態STが第8状態ST8を表しているかを判定する。この場合、前記図6のステップS106の処理により、キー駆動状態ST(i)は第1状態ST1に設定されているので、CPU71はステップS203にて「No」と判定して、ステップS204にて経過時間TM(i)に所定の短い時間値Tcを表す値を加算する。この時間値Tcは、このキー駆動プログラムの実行周期(例えば、100μs)である。
前記ステップS204の処理後、キー駆動状態ST(i)は第1状態ST1に設定されているので、CPU71はステップS205にて「Yes」と判定して、ステップS206にて経過時間TM(i)が第1状態ST1の終了タイミングを示す所定の第1時間値T1(図16参照)以上であるかを判定する。経過時間TM(i)が第1時間値T1以上でなければ、CPU71は、ステップS206にて「No」と判定して、プログラムをステップS259以降に進める。そして、キー駆動プログラムが再び実行されても、経過時間TM(i)が第1時間値T1以上になるまで、前記処理を繰り返す。この繰り返し処理中、駆動回路62は、図6のステップS108の処理によって供給されたデューティ比に応じたPWM波形で、キーコードKC(i)により表されたソレノイド52を通電し続ける。
一方、前記ステップS204の加算処理により、経過時間TM(i)が第1時間値T1以上になると、CPU71は、ステップS206に「Yes」と判定して、ステップS207にてキー駆動状態ST(i)を第2状態ST2に変更する。そして、CPU71は、ステップS208にて、キーコードKC(i)が予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図16参照)内の第2状態ST2に対応したデューティ比をキーコードKC(i)と共に駆動回路62に出力する。駆動回路62は、キーコードKC(i)により表された鍵11に対応したソレノイド52を前記デューティ比に応じたPWM波形で通電制御する。前記ステップS208の処理後、CPU71は、プログラムをステップS259以降に進める。
次に、このキー駆動プログラムが実行されたときには、キー駆動状態ST(i)は第2状態ST1に設定されているので、CPU71はステップS209にて「Yes」と判定して、前記ステップS206〜S208と同様なステップS210〜S212の処理により、駆動回路62との協働により、キーコードKC(i)により表された鍵11に対応したソレノイド52を、第2状態ST2に対応したデューティ比に応じたPWM波形で、第2状態ST2の終了タイミングを示す所定の第2時間値T2になるまで通電制御し続ける。そして、経過時間TM(i)が第2時間値T2に達すると、前記と同じソレノイド52を、第3状態ST3に対応したデューティ比に応じたPWM波形で通電し始める。したがって、キーコードKC(i)により表された鍵11に対応したソレノイド52は、時間T2−T1だけ、第2状態ST2に対応したデューティ比に応じたPWM波形で通電制御され、その後に第3状態ST3に対応したデューティ比に応じたPWM波形の通電制御に切換えられる。
また、ステップS213〜S216、ステップS217〜S220、ステップS221〜S224及びステップS225〜S228の各処理も、前記ステップS205〜S208及びステップS209〜S212の処理と同様である。したがって、これらのステップS213〜S216、ステップS217〜S220、ステップS221〜S224及びステップS225〜S228の処理により、キーコードKC(i)により表された鍵11に対応したソレノイド52は、時間T3−T2,T4−T3,T5−T4,T6−T5ずつ、第3状態ST3乃至第6状態ST6に対応したデューティ比に応じたPWM波形で順次通電制御される。
次に、キー駆動状態ST(i)が第7状態ST7になった場合について説明する。この場合、CPU71は、前記場合と異なり、ステップS229〜S237の処理を実行する。しかし、ステップS231,S234〜S237の処理は、同一鍵連打に関係してオフディレイフラグOFDL(i)が“1”に設定されている場合の処理であり、この基本動作においては、オフディレイフラグOFDL(i)は必ず“0”に設定されている。したがって、この場合、ステップS231における「Yes」との判定のもとに、実質的には、ステップS229,S230,S232,S233の処理が実行される。そして、これらのステップS229,S230,S232,S233の処理は、前述したステップS205〜S208、ステップS209〜S212、ステップS213〜S216、ステップS217〜S220、ステップS221〜S224及びステップS225〜S228の各処理に対応している。したがって、この場合も、キーコードKC(i)により表された鍵11に対応したソレノイド52は、前記の処理と同様に、時間T7−T6の間、第7状態ST7に対応したデューティ比に応じたPWM波形で通電制御され、その後に、第8状態ST8に対応したデューティ比に応じたPWM波形で通電制御され続ける。
この第1乃至第7状態ST1〜ST7の制御により、鍵11及び揺動レバー40は図3Aの状態から図3Cの状態に変化し、揺動レバー40の質量体42の後端部は上限ストッパ部材32により上方への変位が規制される。そして、スイッチ駆動部41eは第1乃至第3スイッチ46〜48を押圧してオンさせる。この状態は、ユーザが鍵11の押鍵を維持している状態に対応する。
このような状態で、図5のステップS16の処理によりイベントデータであるキーオフデータが読み出されて、図5のステップS17すなわち図6の自動演奏イベント処理ルーチンが実行されると、CPU71は、図6のステップS101にて「No」と判定するとともにステップS110にて「Yes」と判定して、ステップS111にてキーオフ処理ルーチンを実行する。
キーオフ処理ルーチンは、図7に詳細に示されており、その実行がステップS120にて開始される。ステップS120の実行開始後、CPU71は、ステップS121にてキーオフデータ中のキーコードKC及びキーオフKOFを音源回路66に出力する。音源回路66は、キーコードKC及びキーオフKOFの供給に応答し、供給されたキーコードKCにより表される音高であって発生中の楽音信号を発生停止させる。具体的に、前記発生中の楽音信号をリリースさせて、その後に楽音信号の生成を停止する。その結果、前記楽音信号に対応した楽音の放音が停止される。
次に、CPU71は、ステップS122にて、自動演奏テーブル(図17)を参照し、前記読み出したイベントデータ中に含まれているキーコードKCと同一のキーコードKCを記憶しているチャンネルchiを探し出す。次に、前記探し出したチャンネルchiにより指定される自動演奏テーブル内のキー駆動状態ST(i)が第8状態ST8であるかを判定する。この場合、前記探し出したチャンネルchiは、前述した図9AのステップS201乃至図9BのステップS233の処理により、キー駆動状態ST(i)が第8状態ST8に設定されたチャンネルと同じであるものとして話を進める。したがって、CPU71は、ステップS123にて「Yes」と判定して、プログラムをステップS124以降に進める。なお、ステップS123にて「No」すなわちキー駆動状態ST(i)が第8状態ST8でないと判定される場合は、この基本動作でない同一鍵連打に関する場合である。
前記ステップS123の「Yes」との判定後、CPU71は、ステップS124にてキー駆動状態ST(i)を第9状態ST9に変更し、ステップS125にてキーコードKC(i)が予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図16参照)内の第9状態ST9に対応したデューティ比をキーコードKC(i)と共に駆動回路62に出力する。駆動回路62は、前記場合と同様に、キーコードKC(i)により表された鍵11に対応したソレノイド52を前記デューティ比に応じたPWM波形で通電制御する。なお、この制御及び今後の制御は、図3Cの状態にある鍵11及び揺動レバー40を図3Aの状態に戻す、すなわちキーオフ動作に対応する。
一方、前述のように、CPU71は、図9A〜図9Cのキー駆動プログラムを所定の短い時間値Tcごとに繰り返し実行している。この場合、キー駆動状態ST(i)は第9状態ST9に設定されているので、図9BのステップS238〜S241の処理が実行される。このステップS238〜S241の処理も、前述した図9AのステップS205〜S208などの処理と同様であり、CPU71は、駆動回路62との協働により、キーコードKC(i)により表された鍵11に対応したソレノイド52を、第9状態ST9に対応したデューティ比に応じたPWM波形で、時間T9−T8にわたって通電制御し、その後に第10状態ST10に対応したデューティ比に応じたPWM波形の通電制御に切換える。また、図9BのステップS242〜S245及び図9CのステップS246〜S249の処理も、前述した図9BのステップS238〜S241の処理と同様である。したがって、ステップS238〜S241,S242〜S245,S246〜S249の処理により、キーコードKC(i)により表された鍵11に対応したソレノイド52は、時間T9−T8(=T9−T7),T10−T9,T11−T10ずつ、第9乃至第11状態ST9〜ST11に対応したデューティ比に応じたPWM波形で順次通電制御される。
次に、キー駆動状態ST(i)が第12状態ST12になった場合について説明する。この場合、CPU71は、前記場合と異なり、ステップS250〜S258の処理を実行する。しかし、ステップS252,S255〜S258の処理は、同一鍵連打に関係してオンディレイフラグONDL(i)が“1”に設定されている場合の処理であり、この基本動作においては、オンディレイフラグONDL(i)は必ず“0”に設定されているので、ステップS251における「Yes」との判定のもとに、実質的には、ステップS250,S251,S253,S254の処理が実行される。したがって、経過時間TM(i)が時間値T12以上になると、CPU71は、ステップS253にて、「0」を表すデューティ比をキーコードKC(i)と共に駆動回路62に出力する。したがって、駆動回路62は、キーコードKC(i)により表された鍵11に対応したソレノイド52の通電を停止する。
この第9状態ST9乃至第12状態ST12の制御により、鍵11及び揺動レバー40は図3Cの状態から図3Aの状態に変化し、揺動レバー40の質量体42の後端部は下限ストッパ部材31により下方への変位が規制される。そして、スイッチ駆動部41eは第1乃至第3スイッチ46〜48の押圧を解除してオフさせる。この状態は、ユーザが鍵11の押鍵を解除している状態に対応する。
前記ステップS253の処理後、CPU71は、ステップS254にて、自動演奏テーブル内のチャンネルchiの割当て優先度ASPR(i)を以前の値に維持したまま、それ以外のデータを初期値にクリアする。これにより、イベントデータである次のキーオンデータの自動演奏テーブルへの登録に備える。この割当て優先度ASPR(i)は、実際には、図10のスイッチイベントプログラムの処理により、前記ステップS254の処理よりも前に既に更新されている。したがって、このスイッチイベントプログラムについて説明しておく。スイッチイベントプログラムは、鍵11の第1乃至第3スイッチ46〜48のオン状態及びオフ状態に変化があるときに実行される。
検出回路61は、前述したソレノイド52による鍵駆動操作及び後述するマニュアル演奏操作による全ての鍵11に関する第1乃至第3スイッチ46〜48のオン・オフ動作を常時監視している。この監視動作において、第1乃至第3スイッチ46〜48のオン状態及びオフ状態に変化あると、検出回路61は、第1乃至第3スイッチ46〜48の状態変化の種類を表すスイッチイベントデータ及び状態変化のあった鍵11を表すキーコードKCを含むキーイベントデータを、バス63を介してコンピュータ部70に供給する。
このようにして、キーイベントデータがコンピュータ部70に供給されると、CPU71は、図10のステップS300にてスイッチイベントプログラムの実行を開始し、ステップS301にて、RAM64内の自動演奏テーブル(図17)を参照し、前記供給されたキーイベントデータ中に含まれているキーコードKCと同一のキーコードKCを記憶し、かつ第1スイッチフラグSW1が“1”であるチャンネルが存在するかを判定する。前記条件が成立すれば、CPU71は、ステップS301にて「Yes」と判定してステップS302以降の処理を実行する。一方、前記条件が成立しなければ、CPU71は、ステップS301にて「No」と判定し、ステップS310にてマニュアル演奏ルーチンを実行する。前記条件が成立しないことは、自動演奏ではなく、後述するマニュアル演奏動作に関係することである。したがって、この基本動作においては、CPU71は、ステップS301にて「Yes」と判定し、ステップS302以降の処理を実行する。
ステップS302においては、CPU71は、供給されたキーイベントデータに含まれるスイッチイベントデータが第1スイッチ46のオフイベントを表しているか、すなわちキーイベントデータが第1スイッチ46のオン状態からオフ状態への変化を表しているかを判定する。キーイベントデータが第1スイッチ46のオフイベントに関するものであれば、CPU71は、ステップS302にて「Yes」と判定して、ステップS303以降の処理を実行する。そうでなければ、CPU71は、ステップS302にて「No」と判定して、ステップS311にてこのスイッチイベントプログラムの実行を終了する。なお、この第1スイッチ46に関するオフイベントは、通常前述した第9状態ST9(図16参照)時に発生するものである。
ステップS303においては、キーイベントデータに含まれているキーコードKCと同一のキーコードKCを記憶している自動演奏テーブルのチャンネルchiを検出して、同チャンネルchiの第1スイッチフラグSW1(i)を“0”に設定するとともに、同チャンネルchiの割当て優先度ASPR(i)を「1」に設定する。次に、CPU71は、自動演奏テーブル内の前記チャンネルchi以外であり、かつ第1スイッチフラグSW1が“0”であるチャンネルの割当て優先度ASPR(i)にそれぞれ「1」を加算する。この割当て優先度ASPR(i)の加算処理により、前述した割当て優先度ASPR(i)の更新が行われる。したがって、次のキーオンデータが曲データ中から読み出された際には、最も古く第1スイッチフラグSW1(i)が“0”にリセットされるとともに割当て優先度ASPR(i)が「1」に設定されたチャンネルに、前記読み出されたキーオンデータが割り当てられることになる。
そして、前述した図9CのステップS254の処理で割当て優先度ASPR(i)を更新しなかった理由は、図9CのステップS254の処理が時間的には前記ステップS303の処理後に行われもので、同ステップS303の処理によって割当て優先度ASPR(i)が既に更新されているためである。また、第1スイッチフラグSW1(i)に関しては、前記ステップS254の処理によって“0”にリセットするようにしたが、前記ステップS303にて“0”にリセットされているので、前記ステップS254の処理によって敢えて“0”にリセットしなくてもよい。それよりも、前記ステップS303にて、前記ステップS301の処理により探し出されたチャンネルi内の第1スイッチフラグSW1(i)及び割当て優先度ASPR(i)を更新した理由は、前記新たなキーオンデータの割当てを許容するためである。そして、前記ステップS303にて前記探し出したチャンネルi内の第1スイッチフラグSW1(i)及び割当て優先度ASPR(i)以外のデータをクリアしない理由は、前記第1スイッチ46のオフ後も、前述した第9状態ST9乃至第12状態ST12の離鍵動作を確保するためである。なお、前記ステップS304の処理後、CPU71はステップS305以降の処理を実行するが、ステップS305以降の処理は同一鍵連打動作に関するものであり、ステップS305以降の処理については後述する。
また、図5のステップS16の処理により、イベントデータとして、キーオンデータ及びキーオフデータ以外の音色、音量、テンポなどを制御する制御データが読み出されると、CPU71は、図5のステップS17すなわち図6の自動演奏イベント処理ルーチンのステップS101,S110にて「No」とそれぞれ判定して、ステップS112のその他の処理を実行する。その他の処理においては、前記制御データに応じて、音源回路66にて生成される楽音信号の音色、音量などが変更制御されるとともに、自動演奏のテンポも変更される。
上記作動説明からも理解できるように、この基本動作においては、図6のステップS102及び図7のステップS121の処理により、曲データ中のキーオンデータ及びキーオフンデータに基づいて音源回路66における楽音信号の発生および停止が制御されて曲データが自動的に再生される。一方、図6のステップS106,S108、図7のステップS122〜S125、図9AのステップS201、S204〜S228、図9BのステップS229〜S233、ステップS238〜S245、図9CのステップS246〜S254,S259,S260の処理により、鍵11の押鍵及び離鍵動作を制御するために、ソレノイド52が図16に示すデューティ比の時間変化に応じて制御される。すなわち、ソレノイド52への通電量及び駆動力が時間経過と共に図16に示すデューティ比に比例して制御される。
このデューティ比の変化においては、鍵11及び揺動レバー40の押鍵に対応した押鍵動作の開始時には、図16の第1状態ST1で示すように、ソレノイド52は中程度のデューティ比で通電制御、すなわち鍵11及び揺動レバー40は中程度の駆動力で駆動制御される。これは、押鍵動作の開始前には駆動ロッド54はレバー基部41から離れており、駆動ロッド54の上端がレバー基部41に接触した際の衝突を小さくするためである。次に、第2状態ST2で、ソレノイド52は大きなデューティ比で通電制御、すなわち鍵11及び揺動レバー40は大きな駆動力で駆動制御される。その後、第3状態ST3から第5状態ST5まで少しずつ段階的にデューティ比を下げる、すなわち鍵11及び揺動レバー40の駆動力を少しずつ段階的に下げるようにした。第3状態ST3から第5状態ST5まで段階的にデューティ比(駆動力)を下げる理由は、同一鍵の連打に関係するもので、後述する連打時の動作説明の際に説明する。第2状態ST2から第5状態ST5にわたってデューティ比(駆動力)を大きく、特に第2状態ST2の切換え時にデューティ比(駆動力)を大きくする理由は、第1状態ST1の通電制御によって駆動ロッド54の上端がレバー基部41に接触した後に、揺動レバー40の質量体42を大きな力で短時間のうちに突き上げるためである。
別な観点から図16の第1状態ST1から第2状態ST2への急激な大きな変化(飛躍制御)の理由について説明する。鍵11の離鍵状態では駆動ロッド54の先端とレバー基部41の下面の被駆動部との間には僅かなクリアランスが存在する(図3B参照)。これは、離鍵時におけるレバー基部41との接触による駆動ロッド54の耐久性を高く保つことが難しく、鍵11の離鍵後には、質量体42が下限ストッパ部材31にのみと当接するようにしたためである。また、前記クリアランスをなくして、離鍵時にレバー基部41の下面が駆動ロッド54の先端に当接するようにした場合には、鍵11のマニュアル演奏時に、メカ的な雑音が発生するという問題もある。このように理由により前記クリアランスを設けた機構において、駆動ロッド54の押上げ時のメカ的な雑音の発生を防止したうえで、鍵11を迅速に駆動するために前記のような飛躍制御が必要とされる。
前記第5状態ST5の終了後、第6状態ST6では、ソレノイド52は中程度のデューティ比で通電制御、すなわち鍵11及び揺動レバー40は中程度の駆動力で駆動制御される。これは、揺動レバー40の質量体42の後端部の上方への変位が上限ストッパ部材32に衝突して規制される際に、前記衝突を緩和して衝突に伴う衝撃音の発生を防止するためである。この第6状態ST6の通電制御後、第7状態ST7で、ソレノイド52はふたたび大きなデューティ比で通電制御、すなわち鍵11及び揺動レバー40はふたたび大きな駆動力で駆動制御される。これは、揺動レバー40の質量体42の後端部の上限ストッパ部材32への衝突の反発力により、質量体42が下方へ変位することを防止、すなわち質量体42のリバウンドを回避するためである。その後の第8状態ST8では、ソレノイド52は中程度のデューティ比で通電制御、すなわち鍵11及び揺動レバー40は中程度の駆動力で駆動制御される。第8状態ST8は押鍵維持状態すなわち揺動レバー40の質量体42の後端部を上限ストッパ部材32に接触させ続ける状態であり、この状態は長時間継続することもあり、電力消費の観点からも、押鍵状態を維持できる最低限のデューティ比でソレノイド52の通電を制御することが望ましいからである。
そして、鍵11の押鍵解除すなわち揺動レバー40の原位置への復帰時には、最初、ソレノイド52は第9状態ST9で小さなデューティ比で通電制御、すなわち鍵11及び揺動レバー40は小さな駆動力で駆動制御される。これは、押鍵解除に伴い、揺動レバー40の質量体41を急激に落下させるためである。その後、ソレノイド52は、第10状態ST10で中低度のデューティ比で通電制御、すなわち鍵11及び揺動レバー40は中程度の駆動力で駆動制御される。そして、第10状態ST10から第12状態ST12まで少しずつ段階的に大きくなるデューティ比で通電制御、すなわち鍵11及び揺動レバー40は少しずつ段階的に大きくなる駆動力で駆動制御され、最終的にデューティ比が「0」、すなわち鍵11及び揺動レバー40の駆動制御が終了する。これらの第10状態ST10から第12状態ST12においてデューティ比(駆動力)を上昇させる理由は、押鍵解除に伴う揺動レバー40の原位置への復帰時において質量体41の後端の下限ストッパ部材31への衝突を緩和して衝突に伴う衝撃音の発生を防止するとともに同後部のリバウンドを回避するために、ソレノイド52はある程度大きな推力を必要とするからである。そして、質量体41の後端が下限ストッパ部材31上に完全に静止した後に、ソレノイド52への通電を解除してソレノイド52の推力を「0」にするためである。特に、鍵11及び揺動レバー40が原位置に近づくほど、すなわちプランジャ53がボビン51の内底面に近づいてソレノイド52との対向面積が減少するほど、デューティ比(ソレノイド52への通電量)が同じでも、プランジャ53を引き上げる電磁力は減少する。この電磁力の減少を補正するためにも、前記第10状態ST10から第12状態ST12に渡ってデューティ比を大きくする必要がある。
このような押鍵動作における第1状態ST1から第7状態ST7までの制御、押鍵維持動作における第8状態ST8の制御、及び離鍵動作における第9状態ST9から第12状態ST12までの制御により、鍵11及び揺動レバー40を、機械的な雑音を発生させることなく、円滑に変位させることができる。
また、前記のようにソレノイド52のデューティ比を制御するために、複数のデューティ比テーブルが用意されている。そして、これらの複数のデューティ比テーブルは、鍵11の属する音域(例えば、低域、中低域、中高域及び高域)、白鍵又は黒鍵、及び千鳥状に配置された鍵駆動装置50の前後位置の組み合わせに応じて用意されているとともに、各鍵11に予め割当てられている。これにより、鍵11ごとに適切なデューティ比を用いてソレノイド52の通電が制御されるので、鍵盤装置10の構造とは無関係に、いずれの鍵11及び揺動レバー40も適切に駆動される。
b.同一鍵連打動作
次に、同一鍵連打に関係して、同一キーコードKCを有する複数のキーオンデータ及びキーオフデータが曲データ中から短時間内に読み出された場合について説明する。これは、曲データ中に極めて速い同一鍵の連打を表すキーオンデータ及びキーオフデータがイベントデータとして予め含まれている場合もあるが、テンポ操作子64aの操作により自動演奏のテンポが速められたときに生ずることが多い。
この同一鍵連打動作については、連打の条件別に説明する。連打の条件とは次の(A)〜(E)の場合である。(A)は、図20(A)に示すように、自動演奏によるイベントデータであるキーオンデータが曲データ中から読み出された直後に、前記キーオンデータと同一キーコードKCを有するキーオフデータが曲データ中から読み出された場合である(以下、キーオン直後のキーオフという)。(B)は、図20(B)に示すように、前記「(A)キーオン直後のキーオフ」の直後に、さらに前記キーオンデータ及びキーオフデータと同一キーコードKCを有するキーオンデータが曲データ中から読み出された場合である(以下、キーオン直後のキーオフ・オンという)。(C)は、図20(C)に示すように、自動演奏によるイベントデータであるキーオフデータが曲データ中から読み出された直後に、前記キーオフデータと同一キーコードKCを有するキーオンデータが曲データ中から読み出された場合である(以下、キーオフ直後のキーオンという)。(D)は、図20(D)に示すように、前記「(C)キーオフ直後のキーオン」の直後に、さらに前記キーオフデータ及びキーオンデータと同一キーコードKCを有するキーオフデータが曲データ中から読み出された場合である(以下、キーオフ直後のキーオン・オフという)。(E)は、図20(E)に示すように、さらに前記「(D)キーオフ直後のキーオン・オフ」の直後に、前記キーオフデータ及びキーオンデータと同一キーコードKCを有するキーオンデータが曲データ中から読み出された場合である(以下、キーオフ直後のキーオン・オフ・オンという)。以下、前記(A)〜(E)について順次説明する。
(A)キーオン直後のキーオフ
このキーオン直後のキーオフは、具体的には、図20(A)に示すように、キーオンデータが曲データ中から読み出された後、キー駆動状態STが第8状態ST8に達する前に、前記キーオンデータと同一のキーコードKCを有するキーオフデータが曲データ中から読み出された場合である。この場合、前述した図7のキーオフ処理ルーチンにおいて、CPU71は、ステップS126にて、「Yes」すなわちキーオフデータに含まれるキーコードKCと同一キーコードKCを記憶したチャンネルchiのキー駆動状態ST(i)が第1乃至第7状態ST1〜ST7のいずれかであると判定する。そして、CPU71は、ステップS127にて、前記チャンネルchiのオフディレイフラグOFDL(i)を“1”に設定する。
この状態で、図9A〜図9Cのキー駆動プログラムの実行により、経過時間TM(i)が増加して、キー駆動状態ST(i)が第7状態ST7の終了時を表す時間値T7に達すると、CPU71は、図9BのステップS230の処理後のステップS231にて、前記“1”に設定したオフディレイフラグOFDL(i)に基づいて「No」と判定して、ステップS234〜S237の処理を実行する。ステップS234においては、キー駆動状態ST(i)を第9状態ST9に設定する。ステップS238においては、経過時間TM(i)を第9状態ST9の開始時(すなわち第8状態の終了時)を表す時間値T8(時間値T7に等しい)に設定する。ステップS236においては、キーコードKC(i)が予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図16参照)内の第9状態ST9に対応したデューティ比をキーコードKC(i)と共に駆動回路62に出力する。駆動回路62は、キーコードKC(i)により表された鍵11に対応したソレノイド52を前記デューティ比に応じたPWM波形で通電制御する。ステップS237においては、オフディレイフラグOFDL(i)を“0”にリセットする。
このような処理により、キー駆動状態ST(i)が第1状態ST1乃至第7状態ST7のいずれかである状態で、同一キーコードKCに関するキーオフデータが読み出されると、第7状態ST7の終了時まで待って、キー駆動状態ST(i)は第8状態ST8を飛ばして第9状態ST9に変更される。したがって、この場合には、キーオフデータが読み出され、揺動レバー40の質量体42の後端部が上限ストッパ部材32により静止された状態、すなわち鍵11が完全に押鍵された状態になるまで待った後、鍵11及び揺動レバー40の原位置への復帰制御が開始されることになる。これにより、楽音信号の発生タイミングとは異なるものの、鍵11の押鍵動作及び離鍵動作が確実に行われる。また、楽音信号の発生から短時間内に鍵11の離鍵動作が開始されるので、視覚的にも不自然でなくなる。
(B)キーオン直後のキーオフ・オン
このキーオン直後のキーオフ・オンは、具体的には、図20(B)に示すように、キーオンデータが曲データ中から読み出された後、キー駆動状態STが第8状態ST8に達する前に、前記キーオンデータと同一のキーコードKCを有するキーオフデータ及びキーオンデータが曲データ中から読み出された場合である。この場合、前記「(A)キーオン直後のキーオフ」で説明したように、キーオフデータが読み出されたときに、図7のステップS127の処理により、オフディレイフラグOFDL(i)が“1”に設定される。そして、前記キーオフデータと同一のキーコードKCを有するキーオンデータが読み出されると、鍵11及び揺動レバー40はキーオン駆動状態にあり、自動演奏テーブル内にはキーオンデータ中のキーコードKCを記憶したチャンネルchiが存在する。しかも、この場合には、第1スイッチフラグSW1(i)も“1”に設定されている。したがって、CPU71は、図6の自動演奏イベント処理ルーチンのステップS104にて「Yes」と判定して、ステップS113すなわち図8の特殊キーオン処理ルーチンのステップS141にて、「Yes」すなわちキーオンデータに含まれるキーコードKCを記憶したチャンネルchiのキー駆動状態ST(i)が第1状態ST1乃至第7状態ST7のいずれかであると判定する。そして、CPU71は、ステップS142,S143の処理により、前記チャンネルchiのオフディレイフラグOFDL(i)を“0”にリセットする。
したがって、この場合には、キーオン直後のキーオフデータ及びキーオンデータがキャンセルされてしまい、鍵11及び揺動レバー40は短時間内で離鍵及び押鍵動作することはない。これは、連打に関係したキーオンデータ及びキーオフデータに応答して鍵11及び揺動レバー40を駆動しても駆動に遅れが生じ、かつ最終的には鍵11及び揺動レバー40は押鍵状態に設定されるのであるから、鍵11及び揺動レバー40を駆動しない方が不自然でなくなるためである。ただし、この場合でも、図6のステップS102及び図7のステップS121の処理により、前記キャンセルされたキーオンデータ及びキーオフデューティに関する楽音は発生され、合計で2つの楽音が発音される。
(C)キーオフ直後のキーオン
このキーオフ直後のキーオンは、具体的には、図20(C)に示すように、キーオンデータが曲データ中から読み出された後、キー駆動状態STが第12状態ST12を終了する前に、前記キーオフデータと同一のキーコードKCを有するキーオンデータが曲データ中から読み出された場合である。この場合、キーオンデータの読み出し時期が第9状態ST9から第12状態ST12のいずれに属するかにより制御が異なるので、これらを順次説明する。
まず、キーオンデータが第9状態ST9で曲データ中から読み出された場合について説明する。この場合、前述した図8の特殊キーオン処理ルーチンにおいて、CPU71は、ステップS144にて、「Yes」すなわちキーオンデータに含まれるキーコードKCを記憶したチャンネルchiのキー駆動状態ST(i)が第9状態ST9であると判定して、ステップS145以降の処理を実行する。この場合、オフディレイフラグOFDL(i)は“0”に設定されているので、CPU71は、ステップS145にて「No」と判定して、ステップS147にて第1スイッチフラグSW1(i)が“0”であるかを判定する。第1スイッチフラグSW1(i)が“0”であれば、CPU71は、ステップS147にて「YES」と判定して、ステップS148にてキー駆動状態ST(i)を第5状態ST5に設定するとともに、経過時間TM(i)を第4状態ST4の終了時を表す時間値T4に設定する。そして、CPU71は、ステップS149にて、キーオンデータに含まれているキーコードKCが予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図16参照)内の第5状態ST5に対応したデューティ比をキーコードKCと共に駆動回路62に出力する。駆動回路62は、前記キーコードKCにより表された鍵11に対応したソレノイド52を前記デューティ比に応じたPWM波形で通電制御する。
前記ステップS147の判定処理において、第1スイッチフラグSW1(i)が“1”であれば、CPU71は、ステップS147にて「No」と判定して、ステップS150にてオンディレイフラグONDL(i)を“1”に設定する。この場合には、第1スイッチ46がオン状態からオフ状態に変化すると、前述した図10のスイッチイベントプログラムのステップS302にて「YES」と判定された後、ステップS303,S304の処理を経て、ステップS305,S306の処理により、キー駆動状態ST(i)が第9状態ST9を表し、かつ前記オンディレイフラグONDL(i)が“1”に設定されていることを条件に、前述したステップS148,S149と同様なステップS307,S308の処理を実行する。そして、この場合には、ステップS309にて、オンディレイフラグONDL(i)は“0”にリセットされる。
このような処理により、キー駆動状態ST(i)が第9状態ST9で、同一キーコードKCに関するキーオンデータが読み出されると、第1スイッチ46がオフ状態にあることを条件に、キー駆動状態ST(i)が第5状態ST5に変更される。したがって、この場合には、キーオフデータの読み出し直後のキーオンデータの読み出しにより、鍵11及び揺動レバー40は離鍵動作を中止して、押鍵動作を行う。また、第1スイッチ46がオフ状態にあることを条件にした理由は、鍵11及び揺動レバー40は離鍵動作がある程度完了した後に、押鍵動作に入るようにするためである。これにより、楽音信号の発生タイミングとは異なるものの、鍵11の離鍵動作及び押鍵動作が確実に行われ、視覚的にも不自然でなくなる。
次に、キーオンデータが第10状態ST10で曲データ中から読み出された場合について説明する。この場合、前述した図8の特殊キーオン処理ルーチンにおいて、CPU71は、ステップS151にて、「Yes」すなわちキーオンデータに含まれるキーコードKCを記憶したチャンネルchiのキー駆動状態ST(i)が第10状態ST10であると判定して、ステップS152,S153の処理を実行する。ステップS152においては、CPU71は、キー駆動状態ST(i)を第4状態ST4に設定するとともに、経過時間TM(i)を第3状態ST3の終了時を表す時間値T3に設定する。ステップS153においては、CPU71は、キーオンデータに含まれているキーコードKCが予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図16参照)内の第4状態ST4に対応したデューティ比をキーコードKC(i)と共に駆動回路62に出力する。駆動回路62は、キーコードKCにより表された鍵11に対応したソレノイド52を前記デューティ比に応じたPWM波形で通電制御する。
このような処理により、キー駆動状態ST(i)が第10状態ST10で、同一キーコードKCに関するキーオンデータが読み出されると、キー駆動状態ST(i)が第4状態ST4に変更される。したがって、この場合には、キーオフデータの読み出し直後のキーオンデータの読み出しにより、鍵11及び揺動レバー40は離鍵動作を中止して、ただちに押鍵動作を行う。なお、この場合には、第1スイッチ46は既にオフ状態にあり、鍵11及び揺動レバー40は離鍵動作がある程度完了した後に、押鍵動作に入る。これにより、楽音信号の発生タイミングとは異なるものの、鍵11の離鍵動作及び押鍵動作が確実に行われ、視覚的にも不自然でなくなる。
次に、キーオンデータが第11状態ST11で曲データ中から読み出された場合について説明する。この場合、前述した図8の特殊キーオン処理ルーチンにおいて、CPU71は、ステップS154にて、「Yes」すなわちキーオンデータに含まれるキーコードKCを記憶したチャンネルchiのキー駆動状態ST(i)が第11状態ST11であると判定して、前述したステップS152,S153と同様なステップS155,S156の処理を実行する。ステップS155においては、CPU71は、キー駆動状態ST(i)を第3状態ST3に設定するとともに、経過時間TM(i)を第2状態ST2の終了時を表す時間値T2に設定する。ステップS156においては、CPU71は、キーオンデータに含まれているキーコードKCが予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図16参照)内の第3状態ST3に対応したデューティ比をキーコードKCと共に駆動回路62に出力する。駆動回路62は、キーコードKCにより表された鍵11に対応したソレノイド52を前記デューティ比に応じたPWM波形で通電制御する。
このような処理により、キー駆動状態ST(i)が第11状態ST11で、同一キーコードKCに関するキーオンデータが読み出されると、キー駆動状態ST(i)が第3状態ST3に変更される。したがって、この場合には、キーオフデータの読み出し直後のキーオンデータの読み出しにより、鍵11及び揺動レバー40は離鍵動作を中止して、ただちに押鍵動作を行う。なお、この場合も、第1スイッチ46は既にオフ状態にあり、鍵11及び揺動レバー40は離鍵動作がある程度完了した後に、押鍵動作に入る。これにより、楽音信号の発生タイミングとは異なるものの、鍵11の離鍵動作及び押鍵動作が確実に行われ、視覚的にも不自然でなくなる。
次に、キーオンデータが第12状態ST12で曲データ中から読み出された場合について説明する。この場合、前述した図8の特殊キーオン処理ルーチンにおいて、CPU71は、ステップS157にて、「Yes」すなわちキーオンデータに含まれるキーコードKCを記憶したチャンネルchiのキー駆動状態ST(i)が第12状態ST12であると判定して、ステップS158以降の処理を実行する。この場合、オフディレイフラグOFDL(i)は“0”に設定されているので、CPU71は、ステップS158にて「No」と判定して、ステップS160にてオンディレイフラグONDL(i)を“1”に設定する。そして、経過時間TM(i)が第12状態ST12の終了時に達すると、CPU71は、前述した図9Cのキー駆動プログラムのステップS252にて「No」すなわちオンディレイフラグONDL(i)が“0”でないと判定して、ステップS255以降の処理を実行する。
CPU71は、ステップS255にてキー駆動状態ST(i)を第2状態ST2に設定し、ステップS256にて経過時間TM(i)を第1状態ST1の終了時を表す時間値T1に設定する。そして、CPU71は、ステップS257にて、キーオンデータに含まれているキーコードKCが予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図16参照)内の第2状態ST2に対応したデューティ比をキーコードKCと共に駆動回路62に出力する。そして、CPU71は、ステップS258にてオンディレイフラグONDL(i)を“0”にリセットしておく。駆動回路62は、キーコードKCにより表された鍵11に対応したソレノイド52を前記デューティ比に応じたPWM波形で通電制御する。
このような処理により、キー駆動状態ST(i)が第12状態ST12で、同一キーコードKCに関するキーオンデータが読み出されると、キー駆動状態STが第12状態ST12を終了するまで待って、キー駆動状態ST(i)が第2状態ST2に変更される。したがって、この場合には、キーオフデータの読み出し直後のキーオンデータの読み出しにより、鍵11及び揺動レバー40は、離鍵動作の完全な終了後、押鍵動作に入る。これにより、楽音信号の発生タイミングとは僅かに異なるものの、鍵11の離鍵動作及び押鍵動作が確実に行われ、視覚的にも不自然でなくなる。
前記説明のように、キーオフデータの読み出しの直後にキーオンデータが読み出された場合には、読み出しのタイミングが第9状態ST9から第12状態ST12のいずれかの状態にあるかにより、鍵11及び揺動レバー40を駆動するために、第2状態ST2から第5状態ST5のいずれかに戻るようにした。これは、揺動レバー40の質量体42の後部が下限ストッパ部材31に近づくほど大きな推力で質量体42を押し上げる必要があり、そのために、キーオンデータの読み出しタイミングが第12状態ST12に近づくほど、鍵11及び揺動レバー40を駆動するためのソレノイド52による推力を大きくするためである。したがって、キーオフデータの読み出し直後にキーオンデータによる鍵11及び揺動レバー40の押鍵動作が適切に行われる。このような理由により、デューティ比テーブル内のデューティ比は、第2状態ST2から第5状態ST5にわたって、段階的に少しずつ下げられている。
(D)キーオフ直後のキーオン・オフ
このキーオフ直後のキーオン・オフは、具体的には、図20(D)に示すように、キー駆動状態STが第9状態ST9又は第12状態ST12にあるときにキーオンデータが曲データ中から読み出され、第9状態ST9から第5状態ST5に切換わる前又は第12状態ST12から第2状態ST2に切換わる前に、さらにキーオフデータが曲データ中から読み出された場合である。なお、キー駆動状態STが第10状態ST10又は第11状態ST11にあるときにキーオンデータが読み出された場合には、即座に、第10状態ST10から第4状態に切換わる又は第11状態ST11から第3状態ST3に切換わるので、第10状態ST10又は第11状態ST11における更なるキーオフデータの読み出しはあり得ない。
まず、キー駆動状態STが第9状態ST9にあるときにキーオンデータが曲データ中から読み出され、その直後にキーオフデータが曲データ中から読み出された場合について説明する。この場合、前記「(C)キーオフ直後のキーオン」で説明したように、キーオンデータの読み出し時に、図8のステップS147,S150の処理により、オンディレイフラグONDL(i)が“1”に設定される。そして、この状態で、前記キーオンデータと同一のキーコードKCを有するキーオフデータが読み出されると、前述した図7のキーオフ処理ルーチンにおいて、CPU71は、ステップS128にて「Yes」すなわちキーオフデータに含まれるキーコードKCを記憶したチャンネルchiのキー駆動状態ST(i)が第9状態ST9であると判定する。そして、CPU71は、ステップS129にて、オフディレイフラグOFDL(i)を“1”に設定する。
その後、前記キーコードKCに対応した鍵11の第1スイッチ46がオフされると、前述した図10のスイッチイベントプログラムのステップS302にて「Yes」と判定され、前記ステップS303,S304の処理後、CPU71は、ステップS305にて「Yes」すなわちキー駆動状態ST(i)は第9状態ST9であると判定してプログラムをステップS306以降に進める。この場合、オンディレイフラグONDL(i)は“1”に設定されているので、CPU71は、ステップS306にて「Yes」と判定し、ステップS307〜S309の処理を実行する。ステップS307〜S309の処理は、前記「(C)キーオフ直後のキーオン」の説明したように、キー駆動状態ST(i)を第5状態ST5に戻して鍵11及び揺動レバー40を押鍵動作させるとともに、オンディレイフラグONDL(i)を“0”にリセットするものである。
このような処理により、キー駆動状態ST(i)が第9状態ST9で、同一キーコードKCに関するキーオンデータ及びキーオフデータが曲データ中から順次読み出されると、前記「(C)キーオフ直後のキーオン」と同様に、前記第1スイッチ46がオフ状態にあることを条件に、キー駆動状態ST(i)が第5状態ST5に変更されて、鍵11及び揺動レバー40は押鍵動作を開始する。ただし、この場合には、前記「(C)キーオフ直後のキーオン」とは異なり、オフディレイフラグOFDL(i)は“1”に保たれたまま第5状態ST5に戻るので、前記「(A)キーオン直後のキーオフ」と同様に、キー駆動状態ST(i)が第7状態ST7を終了すると、その直後に、キー駆動状態ST(i)は第9状態ST9に変更されて、鍵11及び揺動レバー40は離鍵動作を開始する。これにより、この場合も、楽音信号の発生タイミングとは異なるものの、鍵11の離鍵動作及び押鍵動作からなる連打動作が確実に行われ、視覚的にも不自然でなくなる。
次に、キー駆動状態STが第12状態ST12にあるときにキーオンデータが曲データ中から読み出され、その直後にキーオフデータが曲データ中から読み出された場合について説明する。この場合、前記「(C)キーオフ直後のキーオン」で説明したように、キーオンデータの読み出し時に、図8のステップS157,S160の処理により、オンディレイフラグONDL(i)が“1”に設定される。そして、この状態で、前記キーオンデータと同一のキーコードKCを有するキーオフデータが読み出されると、前述した図7のキーオフ処理ルーチンにおいて、CPU71は、ステップS130にて「Yes」すなわちキーオフデータに含まれるキーコードKCを記憶したチャンネルchiのキー駆動状態ST(i)が第12状態ST12であると判定する。そして、CPU71は、ステップS131にて、オフディレイフラグOFDL(i)を“1”に設定する。
その後、経過時間TM(i)が時間値T12以上になると、CPU71は、図9CのステップS251にて「Yes」と判定して、前述したステップS252の判定処理を実行する。この場合、オンディレイフラグONDL(i)は“1”に設定されているので、CPU71は、ステップS252にて「No」と判定して、ステップS255〜S258の処理を実行する。ステップS255〜S258の処理は、前記「(C)キーオフ直後のキーオン」の説明したように、キー駆動状態ST(i)を第2状態ST2に戻して鍵11及び揺動レバー40を押鍵動作させるとともに、オンディレイフラグONDL(i)を“0”にリセットするものである。
このような処理により、キー駆動状態ST(i)が第12状態ST12で、同一キーコードKCに関するキーオンデータ及びキーオフデータが読み出されると、前記「(C)キーオフ直後のキーオン」と同様に、経過時間TM(i)が第12状態ST12の終了を表す時間値T12になったことを条件に、キー駆動状態ST(i)が第2状態ST2に変更されて、鍵11及び揺動レバー40は押鍵動作を開始する。ただし、この場合には、前記「(C)キーオフ直後のキーオン」とは異なり、オフディレイフラグOFDL(i)は“1”に保たれたまま第2状態ST2に戻るので、前記「(A)キーオン直後のキーオフ」と同様に、キー駆動状態ST(i)が第7状態ST7を終了すると、その直後に、キー駆動状態ST(i)は第9状態ST9に変更されて、鍵11及び揺動レバー40は離鍵動作を開始する。これにより、この場合も、楽音信号の発生タイミングとは異なるものの、鍵11の離鍵動作及び押鍵動作からなる連打動作が確実に行われ、視覚的にも不自然でなくなる。
(E)キーオフ直後のキーオン・オフ・オン
このキーオフ直後のキーオン・オフ・オンは、具体的には、図20(E)に示すように、キー駆動状態ST(i)が第9状態ST9又は第12状態ST12にあるときにキーオンデータ及びキーオフデータが曲データ中から順次読み出され、第9状態ST9から第5状態ST5に切換わる前又は第12状態ST12から第2状態ST2に切換わる前に、さらにキーオンデータが曲データ中から読み出された場合である。
まず、キー駆動状態ST(i)が第9状態ST9にあるときにキーオンデータ及びキーオフデータが読み出され、その直後にキーオンデータが読み出された場合について説明する。この場合、前記「(D)キーオフ直後のキーオン・オフ」で説明したように、前のキーオンデータの読み出し時に、図8のステップS147,S150の処理により、オンディレイフラグONDL(i)が“1”に設定され、キーオフデータの読み出し時に、図7のステップS128,S129の処理によりオフディレイフラグOFDL(i)が“1”に設定される。
その後、キーオンデータの読み出しにより、CPU71は図8の特殊キーオンルーチンのステップS144にて「Yes」と判定して、ステップS145の判定処理を実行する。この場合、オフディレイフラグOFDL(i)は“1”に設定されているので、CPU71は、ステップS145にて「Yes」と判定して、ステップS146にてOFDL(i)を“0”にリセットする。このOFDL(i)のリセットは、キーオフデータのキャンセルを意味する。これにより、この状態では、前記「(C)キーオフ直後のキーオン」の場合と同じなり、第1スイッチ46のオフを条件に、キー駆動状態ST(i)が第5状態ST5に戻されて鍵11及び揺動レバー40が押鍵動作するとともに、オンディレイフラグONDL(i)が“0”にリセットされる。
したがって、この場合には、キーオフ直後のキーオフデータ及びその後のキーオンデータがキャンセルされてしまい、鍵11及び揺動レバー40は、第1スイッチ46のオフを条件に、押鍵動作する。そして、その後の鍵11及び揺動レバー40の離鍵動作は、その後のキーオフデータの読み出しに従う。これは、キー駆動状態ST(i)が第9状態ST9である間に、キーオンデータ及びキーオフデータが読み出され、その直後にキーオンデータがふたたび読み出された場合でも、前のキーオンデータ及びキーオフデータに応答して鍵11及び揺動レバー40を駆動しても駆動に遅れが生じ、かつその後のキーオンデータにより最終的には鍵11及び揺動レバー40は押鍵状態に設定されるのであるから、鍵11及び揺動レバー40を繰り返し駆動しない方が不自然でなくなるためである。
次に、キー駆動状態ST(i)が第12状態ST12にあるときにキーオンデータ及びキーオフデータが曲データ中から順次読み出され、その直後にキーオンデータが曲データ中から読み出された場合について説明する。この場合、前記「(D)キーオフ直後のキーオン・オフ」で説明したように、前のキーオンデータの読み出し時に、図8のステップS157,S160の処理により、オンディレイフラグONDL(i)が“1”に設定され、キーオフデータの読み出し時に、図7のステップS130,S131の処理によりオフディレイフラグOFDL(i)が“1”に設定される。
その後、キーオンデータの読み出しにより、CPU71は図8の特殊キーオンルーチンのステップS157にて「Yes」と判定して、ステップS158の判定処理を実行する。この場合、オフディレイフラグOFDL(i)は“1”に設定されているので、CPU71は、ステップS158にて「Yes」と判定して、ステップS159にてOFDL(i)を“0”にリセットする。このOFDL(i)のリセットも、キーオフデータのキャンセルを意味する。これにより、この状態では、前記「(C)キーオフ直後のキーオン」の場合と同じなり、キー駆動状態ST(i)の第12状態ST12の終了時に、キー駆動状態ST(i)が第2状態ST2に戻されて鍵11及び揺動レバー40が押鍵動作するとともに、オンディレイフラグONDL(i)が“0”にリセットされる。
したがって、この場合にも、キーオフ直後のキーオフデータ及びその後のキーオンデータがキャンセルされてしまい、鍵11及び揺動レバー40は、キー駆動状態ST(i)の第12状態ST12の終了時に押鍵動作する。そして、その後の鍵11及び揺動レバー40の離鍵動作は、その後のキーオフデータの読み出しに従う。これは、キー駆動状態ST(i)が第12状態ST12である間に、キーオンデータ及びキーオフデータが読み出され、その直後にキーオンデータがふたたび読み出された場合、前のキーオンデータ及びキーオフデータに応答して鍵11及び揺動レバー40を駆動しても駆動に遅れが生じ、かつその後のキーオンデータにより最終的には鍵11及び揺動レバー40は押鍵状態に設定されるのであるから、鍵11及び揺動レバー40を繰り返し駆動しない方が不自然でなくなるためである。
c.複数鍵連打動作
次に、複数の鍵11に関するイベントデータを構成するキーオンデータが、和音演奏又は複数の鍵11の連打演奏のように、短時間内に曲データ中から読み出される場合について説明する。キーオンデータが読み出されるとともに、読み出されたキーオンデータが自動演奏テーブルのいずれかのチャンネルに割当てられると、図6の自動演奏イベント処理ルーチンのステップS109の処理により、ウェイト制御フラグWTCNTが“1”に設定されるとともに、ウェイトタイマWTMが所定の待ち時間WTMmaxに設定される。この待ち時間WTMmaxは、例えば5ms程度の所定の短い時間値に設定されている。一方、CPU71は、タイマ72との協働により、図13のウェイト処理プログラムを所定の短時間ごとに繰り返し実行している。
このウェイト処理プログラムの実行はステップS500にて開始され、CPU71はステップS501にてウェイト制御フラグWTCNTが“1”であるか否かを判定する。ウェイト制御フラグWTCNTが“1”に設定されていると、CPU71は、ステップS501にて「Yes」と判定し、ステップS502にてウェイトタイマWTMからこのウェイト処理プログラムの実行間隔時間を表す所定値WTMoを減算する。そして、CPU71は、ステップS503にてウェイトタイマWTMが「0」以下であるかを判定する。この場合、キーオンデータの前回の読み出しから待ち時間WTMmaxが経過するまでは、CPU71は、ステップS503にて「No」と判定して、ステップS512にてこのウェイト処理プログラムの実行を一旦終了する。
前記基本動作では、複数のキーオンデータは同時又は短時間内に曲データ中から順次読み出されないことを前提としていたので、後述する図6のステップS115の処理によってウェイトテーブル内に押鍵動作待ちのチャンネル番号chNOが記憶されることはない。したがって、キーオンデータの読み出しから待ち時間WTMmaxが経過すると、CPU71は、図13のステップS503にて「Yes」と判定し、ステップS504にて「No」と判定する。そして、CPU71は、ステップS511にて、ウェイト制御フラグWTCNTを“0”にリセットする。その結果、前回のキーオンデータの読み出しタイミングから待ち時間WTMmaxを経過した後に、次のキーオンデータが読み出される場合には、前記基本動作で説明したように、CPU71は、図6のステップS107にて「Yes」と判定してステップS108,S109の処理を実行する。これにより、この場合には、ステップS102の楽音信号の発生開始と同時に鍵11及び揺動レバー40は押鍵動作する。
しかし、図21に示すように、複数のキーオンデータが同時又は待ち時間WTMmax内に曲データ中から順次読み出されて、前記図13のステップS511の処理によりウェイト制御フラグWTCNTが“0”にリセットされる前に、次のキーオンデータが曲データ中から読み出された場合には、CPU71は、図6のステップS107にて「No」と判定して、ステップS114,S115の処理を実行する。ステップS114においては、CPU71は、前述したステップS106の処理によって探し出された、キーオンデータ中に含まれるキーコードKCと同一のキーコードKCを記憶した自動演奏テーブル内のチャンネルiのウェイトフラグWAIT(i)を“1”に設定する。ステップS115においては、ウェイトテーブル内のチャンネル番号chNOを更新する。このチャンネル番号chNOの更新においては、前記探し出されたチャンネル番号chNO(=i)を、ウェイトテーブル内に最も優先順位の低いチャンネル番号chNOとして記憶する。ただし、ウェイトテーブル内にチャンネル番号chNOが1つしか存在しない場合には、最も優先順位の高いチャンネル番号chNOと同等である。
この場合、前記ステップS108,S109の処理が実行されないので、ステップS102の処理によりキーオンデータに関する楽音信号の発生は開始されるが、同キーオンデータに関した鍵11及び揺動レバー40の押鍵動作は行われない。その代わり、ウェイトテーブルには、押鍵動作待ちのキーオンデータの割当てチャンネルを表す複数のチャンネル番号chNOが次々に記憶される。このウェイトテーブル内の複数のチャンネル番号chNOは、前記図6のステップS115のチャンネル番号chNOの更新処理及び後述する図13のステップS505の更新処理により、常に優先順位順に記憶されている。
このようにウェイトテーブル内にチャンネル番号chNOが記憶された状態で、ウェイトタイマWTMが図13のステップS502の処理によって前述のように「0」以下になると、CPU71は、ステップS503にて「Yes」と判定した後、ステップS504にて「Yes」と判定して、ステップS505以降の処理を実行する。ステップS505においては、CPU71は、ウェイトテーブルに記憶されていて最も優先順位の高いチャンネル番号chNOを取り出して変数iとして設定する。次に、CPU71は、ステップS506にて、ウェイトテーブルのチャンネル番号chNOを更新する。このチャンネル番号chNOの更新においては、前記取り出したチャンネル番号chNO(=i)をウェイトテーブルから消去し、それ以外のチャンネル番号chNOを優先順に並び換えて記憶する。次に、CPU71は、ステップS507にて、変数iにより指定されるチャンネルchiのウェイトフラグWAIT(i)を“0”にリセットする。
ステップS507の処理後、CPU71は、ステップS508にて、前記変数iにより指定される自動演奏テーブル内のキーコードKC(i)が予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図16参照)内の第1状態ST1に対応したデューティ比をキーコードKC(i)と共に駆動回路62に出力する。駆動回路62は、キーコードKC(i)により表された鍵11に対応したソレノイド52を前記デューティ比に応じたPWM波形で通電制御するので、キーコードKC(i)に対応した鍵11及び揺動レバー40は押鍵動作を開始する。この場合の押鍵動作は、前回の押鍵動作から待ち時間WTMmaxだけ遅れている。
次に、CPU71は、ステップS509にて、ウェイトテーブル内にチャンネル番号chNOがあるか、すなわちチャンネル番号chNOがウェイトテーブル内に残っているかを判定する。チャンネル番号chNOが残っていれば、CPU71は、ステップS509にて「Yes」と判定して、ステップS510にてウェイトタイマWTMをふたたび待ち時間WTMmaxに設定して、ステップS512にてこのウェイト処理プログラムの実行を一旦終了する。
この場合、ウェイト制御フラグWTCNTは“1”に設定されたままであるので、その後に、ウェイト処理プログラムが実行された場合には、ステップS501〜S503の処理が繰り返し実行されて、ウェイトタイマWTMが時間経過に従って減少する。そして、ウェイトタイマWTMが「0」以下になれば、ステップS503,S504にてそれぞれ「Yes」と判定されて、ステップS505〜S508の処理により、ウェイトテーブル内のチャンネル番号chNOにより指定される鍵11及び揺動レバー40が押鍵動作するとともに、ウェイトテーブル内のチャンネル番号chNOが順次消去されていく。そして、ウェイトテーブル内にチャンネル番号chNOが存在しなくなった時点で、CPU71はステップS509にて「No」と判定して、ステップS511にてウェイト制御フラグWTCNTを“0”に設定する。したがって、これ以降にキーオンデータが曲データ中から読み出された場合には、図6のステップS107,S108の処理により、キーオンデータの読み出しすなわち楽音信号の発生開始と同時に鍵11及び揺動レバー40は押鍵動作するようになる。
上記作動説明からも理解できるように、複数の鍵11に関するキーオンデータが短時間内に曲データ中から次々に読み出される場合には、楽音信号はキーオンデータの発生に同期して開始されるが、鍵11及び揺動レバー40の押鍵動作は待ち時間WTMmax間隔で行われる。この場合、待ち時間WTMmax(例えば、5ms)は、図16のデューティ比テーブルにおける第3状態ST3乃至第6状態ST6のいずかれの状態すなわちソレノイド52への通電量が減少する状態に含まれる時間に設定されている。したがって、前記待ち時間WTMmax間隔の押鍵動作により、複数の鍵11に関するキーオンデータが短時間内に読み出されても、図21に示すように、複数のソレノイド52への通電量の合計値の上昇を抑えることができる。その結果、鍵11及び揺動レバー40を駆動するための瞬間電力量及び所定の短い時間内の積算電力量を抑えることができて、瞬間電力量及び所定の短い時間内の積算電力量が許容値を超えることを防止できる。その結果、電力の供給源である電源装置が損傷したり、音源回路66、表示回路68、コンピュータ部70などの他の回路の動作が不安定になることもない。
また、前記基本動作で説明したように、キーオフデータが読み出されることなく、多くのキーオンデータが読み出され続けた場合(すなわち同時に多くのキーオンが存在するような場合)、図6のステップS102の処理により楽音信号の発生は許容されるが、図6のステップS105の処理により、イベントデータであるキーオンデータの自動演奏テーブルへの割当てが禁止されて、鍵11及び揺動レバー40は駆動されない。本実施形態では、自動演奏テーブルのチャンネル数(例えば、10個)に対応した最大で10個のみのソレノイド52への通電が許容されるだけである。これにより、キーオン維持された状態すなわち図16の第8状態ST8に維持された鍵11の数がある程度増加しても、ソレノイド52への最大電力をある程度小さく抑えることができる。その結果、鍵11及び揺動レバー40を駆動するための瞬間電力量及び所定の短い時間内の積算電力量を抑えることができて、瞬間電力量及び所定の短い時間内の積算電力量が許容値を超えることを防止できる。なお、前記第8状態ST8があまりにも長く継続する場合には、第8状態ST8にあるソレノイド52への通電を停止する措置を取ることも可能である。
d.マニュアル演奏との競合動作
次に、自動演奏の再生と同時に、ユーザが鍵盤装置10を用いてマニュアル演奏した場合について説明する。ユーザが鍵盤装置10内のいずれかの鍵11を押離鍵操作すると、押鍵時には鍵11の前端部の降下及び揺動レバー40の反時計回りの回転により、レバー基部41に設けたスイッチ駆動部41eが第1乃至第3スイッチ46〜48を順に押圧し、第1スイッチ46、第2スイッチ47及び第3スイッチ48はこの順にオンする。一方、離鍵時には、スイッチ駆動部41eが第1乃至第3スイッチ46〜48の押圧を順に解除するので、第3スイッチ48、第2スイッチ47及び第1スイッチ46はこの順にオフする。そして、これらの第1乃至第3スイッチ46〜48のオン・オフ動作は検出回路61により検出される。
前記第1乃至第3スイッチ46〜48のオン・オフ動作が検出回路61により検出されると、検出回路61はバス63を介してキーイベントデータをコンピュータ部70に供給する。このキーイベントデータは、第1乃至第3スイッチ46〜48のオンイベント及びオフイベントに加えて、第1乃至第3スイッチ46〜48に対応した鍵11を表すキーコードKCを含んでいる。そして、このキーイベントデータがコンピュータ部70に供給されると、CPU71は、前述のように、図10のスイッチイベントプログラムを実行する。このスイッチイベントプログラムの実行は、ステップS300にて開始され、CPU71は、ステップS301にて、RAM64内の自動演奏テーブル(図17)を参照し、前記供給されたキーイベントデータ中に含まれているキーコードKCと同一のキーコードKCを記憶し、かつ第1スイッチフラグSW1が“1”であるチャンネルchが存在するかを判定する。そして、前記条件が成立しなければ、CPU71は、ステップS301にて「No」と判定し、ステップS310にてマニュアル演奏ルーチンの処理を実行する。
このマニュアル演奏ルーチンは図11に示されており、その実行がステップS320にて開始される。このマニュアル演奏ルーチンにおいては、第1スイッチ46のオンイベントがキーコードKCと共に検出回路61からコンピュータ部70に供給されると、CPU71は、ステップS321にて「Yes」と判定して、ステップS322の処理を実行する。ステップS322においては、CPU71は、RAM64内に用意されているマニュアル演奏テーブル(図19参照)内において、第1スイッチフラグSW1が“0”であり、かつ割当て優先度ASPRが最大であるチャンネルchjを探し出し、同探し出したチャンネルchjに前記供給されたキーコードKCを割当てる。すなわち、マニュアル演奏テーブルの前記探し出したチャンネルchjのキーコードKC(j)を前記供給されたキーコードKCに設定し、第1スイッチフラグSW1(j)を“1”に設定し、第2スイッチフラグSW2(j)を“0”にリセットし、第3スイッチフラグSW3(j)を“0”にリセットし、カウントフラグCNTF(j)を“0”にリセットし、タッチカウント値TCNT(j)を「0」にクリアし、かつ割当て優先度ASPR(j)を「0」に設定する。
なお、この場合は、ソレノイド52の通電により鍵11及び揺動レバー40を駆動するわけでなく、消費電力の問題がないので、マニュアル演奏テーブルの割当てチャンネル数pは十分に大きな値であり、全ての鍵11の押鍵はマニュアル演奏テーブルのいずれかに割り当てられる。また、供給されたキーコードKCと同一キーコードKCを記憶しているチャンネルが存在する場合には、割当て優先度ASPR(j)とは無関係に、前記供給されたキーコードKCを前記同一キーコードKCを記憶しているチャンネルに割当てるようにしてもよい。
第2スイッチ47のオンイベントがキーコードKCと共に検出回路61からコンピュータ部70に供給されると、CPU71は、ステップS323にて「Yes」と判定して、ステップS324,S325の処理を実行する。ステップS324においては、CPU71は、マニュアル演奏テーブル内において、供給されたキーコードKCと同一キーコードKC(j)を記憶し、かつ第1スイッチフラグSW1(j)が“1”であるチャンネルを探し出し、同探し出したチャンネルのチャンネル番号chを変数jに設定する。ステップS325においては、CPU71は、前記設定した変数jによって指定される第2スイッチフラグSW2(j)を“1”に設定し、かつカウントフラグCNTF(j)を“1”に設定する。
一方、CPU71は、図12のタッチカウントプログラムを所定の短時間ごとに繰り返し実行している。このタッチカウントプログラムの実行はステップS400にて開始され、CPU71は、ステップS401,S404,S405の処理により、変数jを「1」から「1」ずつ順次増加させながら、ステップS402,S403の処理を実行する。そして、変数jが「p」に達すると、CPU71は、ステップS404にて「Yes」と判定し、ステップS406にてこのタッチカウントプログラムの実行を一旦終了する。
ステップS402,S403の処理においては、CPU71は、マニュアル演奏テーブル内の変数jで指定されるチャンネルのカウントフラグCNTF(j)が“1”であるチャンネルjのタッチカウント値TCNT(j)に「1」を加算する。これにより、鍵11の押鍵操作により、第2スイッチ47がオン状態に変化した後、時間経過に従ってタッチカウント値TCNT(j)が、このタッチカウントプログラムの実行周期ごとに「1」ずつ順次増加する。
このようなタッチカウント値TCNT(j)の増加状態で、第3スイッチ48のオンイベントがキーコードKCと共に検出回路61からコンピュータ部70に供給されると、CPU71は、ステップS326にて「Yes」と判定して、ステップS327以降の処理を実行する。ステップS327においては、CPU71は、マニュアル演奏テーブル内において、供給されたキーコードKCと同一キーコードKC(j)を記憶し、かつ第2スイッチフラグSW2(j)が“1”であるチャンネルを探し出し、同探し出したチャンネルのチャンネル番号を変数jに設定する。次に、CPU71は、ステップS328にて、前記変数jにより指定されるチャンネルのタッチカウント値TCNT(j)を読み出して、図示しないベロシティ変換テーブルを参照して、タッチカウント値TCNT(j)にほぼ反比例するベロシティVELを計算する。ベロシティ変換テーブルは、タッチカウント値TCNTにほぼ反比例するベロシティVELを記憶している。したがって、計算されたベロシティVELは、第2スイッチSW2がオンしてから第3スイッチSW3がオンするまでの時間にほぼ反比例した値を示し、鍵タッチの速さ(すなわち強さ)を表すデータとして利用される。
このベロシティVELの計算後、CPU71は、ステップS329にて、前記変数jによって指定されるキーコードKC(j)、キーオンKON及びベロシティVELをバス63を介して音源回路66に供給する。音源回路66は、前記キーコードKC(j)により表された音高の楽音信号の生成を開始し、同楽音信号に対応した楽音をサウンドシステム69を介して放音し始める。なお、この場合の楽音信号の音色、音量、効果などは、パネル操作子64の操作により設定されたものであると同時に、前記音色、音量などは供給されたベロシティVELによっても制御される。前記ステップS329の処理後、CPU71は、ステップS330にて、前記設定した変数jによって指定される第3スイッチフラグSW3(j)を“1”に設定し、かつカウントフラグCNTF(j)を“0”にリセットする。このカウントフラグCNTF(j)のリセットにより、前記図12のタッチカウントプログラムが実行されても、タッチカウント値TCNT(i)は増加しない。
第3スイッチ48のオフイベントがキーコードKCと共に検出回路61からコンピュータ部70に供給されると、CPU71は、ステップS331にて「Yes」と判定して、ステップS332,S333の処理を実行する。ステップS332においては、CPU71は、マニュアル演奏テーブル内において供給されたキーコードKCと同一キーコードKC(j)を記憶し、かつ第3スイッチフラグSW3(j)が“1”であるチャンネルを探し出し、同探し出したチャンネルのチャンネル番号chを変数jに設定する。ステップS333においては、CPU71は、前記設定した変数jによって指定される第3スイッチフラグSW3(j)を“0”にリセットする。
第2スイッチ47のオフイベントがキーコードKCと共に検出回路61からコンピュータ部70に供給されると、CPU71は、ステップS334にて「Yes」と判定して、ステップS335,S336の処理を実行する。ステップS335においては、CPU71は、マニュアル演奏テーブル内において供給されたキーコードKCと同一キーコードKC(j)を記憶し、かつ第2スイッチフラグSW2(j)が“1”であるチャンネルを探し出し、同探し出したチャンネルのチャンネル番号chを変数jに設定する。ステップS336においては、CPU71は、前記設定した変数jによって指定される第2スイッチフラグSW2(j)を“0”にリセットする。
第1スイッチ46のオフイベントがキーコードKCと共に検出回路61からコンピュータ部70に供給されると、CPU71は、ステップS337にて「Yes」と判定して、ステップS338以降の処理を実行する。ステップS338においては、CPU71は、マニュアル演奏テーブル内において、供給されたキーコードKCと同一キーコードKC(j)を記憶し、かつ第1スイッチフラグSW1(j)が“1”であるチャンネルを探し出し、同探し出したチャンネルのチャンネル番号を変数jに設定する。次に、CPU71は、ステップS339にて、前記変数jによって指定されるキーコードKC(j)及びキーオフKOFをバス63を介して音源回路66に供給する。音源回路66は、前記キーコードKC(j)により表された音高の楽音信号の生成を停止する。詳しくは、同楽音信号をリリースさせた後、その発生を停止する。
次に、CPU71は、ステップS340にて、前記設定した変数jによって指定される第1スイッチフラグSW1(j)を“0”にリセットし、かつ割当て優先度ASPR(j)を「1」に設定する。そして、CPU71は、ステップS341にて、前記変数jによって指定される以外かつ第1スイッチフラグSW1が“0”であるチャンネルの割当て優先度ASPRにそれぞれ「1」を加算する。
このような動作説明からも理解できるように、鍵盤装置10の鍵11を押鍵及び離鍵操作することにより、ユーザがマニュアル演奏を行うと、同演奏に従って、楽音が発音される。そして、この発生楽音は、ユーザによる鍵タッチに応じて音色、音量などが変更制御される。
このようなマニュアル演奏が行われた鍵11に関しては、自動演奏によるキーイベントデータであるキーオンデータが曲データ中から読み出されても、前述のように、図6の自動演奏イベント処理ルーチンのステップS103の処理により、自動演奏による鍵11及び揺動レバー40の駆動が禁止される。その結果、ユーザが押鍵中の鍵11に対応したソレノイド52を通電制御した場合に、駆動ロッド54が既に上方に変位しているレバー基部41に勢いよく衝突することを回避でき、前記衝突による異音の発生を防止できるとともに、駆動ロッド54及びレバー基部41の衝突による磨耗を回避できる。また、曲の練習において、ユーザは自動演奏される曲を鍵盤装置10を用いて演奏した場合、鍵11がソレノイド52によって駆動されないことは、ユーザの演奏が正しいことを意味するので、ソレノイド52による鍵11の駆動によりユーザの演奏の正確さを判定することもできる。
逆に、自動演奏に基づくキーオンデータが自動演奏テーブル内のいずれかのチャンネルに割当てられ、前記キーオンデータによる楽音信号が発生される場合には、第1乃至第3スイッチ46〜48がオン・オフ動作して、検出回路61からこれらのオン・オフ動作によるキーイベントデータがコンピュータ部70に供給されても、このキーイベントデータによる楽音信号の発生の制御はなされない。すなわち、前記キーイベントデータがコンピュータ部70に供給されても、CPU71は図10のステップS301の判定処理により、自動演奏テーブル内に供給されたキーイベントデータ中のキーコードKCと同一キーコードKCを記憶し、かつ第1スイッチフラグSW1が“1”であるチャンネルが存在すれば、ステップS310の処理を実行しない。そして、自動演奏テーブルへのキーオンデータの割り当てはキーオンデータの読み出し後に瞬時に実行されるのに対し、鍵11の駆動には遅れがあるので、自動演奏による曲データの再生による楽音信号の発生と、前記曲データに従った鍵11の駆動によるキーイベントデータの発生による楽音信号の発生が重ねて行われることはない。
e.変形例
さらに、本発明の実施にあたっては、上記実施形態に限定されるものではなく、本発明の目的を逸脱しない限りにおいて種々の変更が可能である。
例えば、上記実施形態においては、自動演奏に関する曲データ中にベロシティ(鍵タッチ)VELを含ませなかった。しかし、これに代えて、曲データ中にベロシティVELを含ませておいて、曲データ中のベロシティVELに応じて音源回路66にて生成される楽音信号の音色、音量などを制御するようにしてもよい。この場合、鍵11及び揺動レバー40の押鍵動作の初期駆動において、ソレノイド52へのデューティ比(すなわち通電量)をベロシティVELに比例させるようにすればよい。具体的には、第1状態ST1乃至第5状態ST5における図6のステップS108、図8のステップS149,S153,S156、図9AのステップS208,S212,S216,S220、図9CのステップS249,S257及び図10のステップS308の処理によるデューティ比をベロシティVELに比例させるようにすればよい。この場合、デューティ比テーブルから読み出されたデューティ比にベロシティVELを乗算して、駆動回路62に出力するようにすればよい。
また、上記実施形態においては、曲データ中からキーオンデータが読み出されると、鍵11及び揺動レバー40が駆動されない場合すなわち読み出されたキーオンデータ中のキーコードKCにより表された鍵が既にマニュアル演奏され又は自動演奏テーブルが満杯の場合でも、図6のステップS102の処理により楽音信号は必ず発生されるようにした。しかし、これらの場合には、楽音信号を発生しないようにしてもよい。この場合、図6の自動演奏イベント処理ルーチンにおいて、ステップS102の処理を止めて、同ステップS102と同じ処理をステップS106及びステップS113の直前に実行するようにすればよい。
また、上記実施形態においては、図10のステップS303の処理及び図6のステップS105,S106の処理により、第1スイッチ46がオフした鍵11に関して、自動演奏のイベントデータであるキーオンデータを割当て可能とした。この場合、説明を省略したが、新たなキーオンデータを割り当てたチャンネルが未だ完全にクリアされていない場合、すなわち同チャンネルのキー駆動状態STが第12状態ST12を終了していない場合には、この第12状態ST12を終了していないソレノイド52の通電を解除するようにするとよい。また、前記のような割り当てに代えて、キー駆動動作において、キー駆動状態STが第12状態ST12を終了したチャンネルに、キーイベントデータであるキーオンデータを割当て可能としてもよい。この場合、図9CのステップS254の処理により、キー駆動状態STが第12状態ST12を終了したチャンネルをクリアするようにしているので、図6のステップS106のキーオンデータの割当て際に、前記クリアされているチャンネルが割当てチャンネルとして決定されるようにすればよい。
また、上記実施形態においては、図10のスイッチイベントプログラムにおけるステップS301の判定処理により、自動演奏テーブル内に同一キーコードKC(すなわち鍵盤11の演奏によるキーコードKCと同一キーコードKC)が記憶されていない場合、又は自動演奏テーブル内に同一キーコードKCが記憶されていても第1スイッチフラグSW1が“1”でなければ、ステップS310のマニュアル演奏ルーチンが実行されるようにした。しかし、これに代えて、マニュアル演奏ルーチンの実行条件として、自動演奏テーブル内に同一キーコードKCを記憶したチャンネルが存在しないことを条件としてもよい。言い換えれば、ステップS301のように自動演奏テーブル内に同一キーコードKCが存在していて、キー駆動状態STが第12状態ST12を終了していない場合には、マニュアル演奏ルーチンを実行しないようにしてもよい。
また、上記実施形態においては、キー駆動状態STが第9状態ST9であるとき、新たにイベントデータであるキーオンデータが曲データ中から読み出されると、図10のステップS305〜S309の処理により、第1スイッチ46がオフ状態であることを条件に、キー駆動状態STが第9状態ST9から第5状態ST5に切換えられるようにした。しかし、これに代えて、キー駆動状態STが第9状態ST9であるとき、新たにイベントデータであるキーオンデータが曲データ中から読み出された場合も、上記実施形態のキー駆動状態STが第12状態ST12であるときと同様に、第9状態ST9の終了を条件に、キー駆動状態STが第9状態ST9から第5状態ST5に切換えられるようにしてもよい。
また、上記実施形態においては、ソレノイド52のデューティ比の制御において、図16に示すように時間経過に従って段階的に変更するようにした。しかし、これに代えて、デューティ比を時間経過に従って連続的に変更するようにしてもよい。この場合、時間経過に従ったデューティ比を離散的に記憶しておいて、経過時間TMを用いてデューティ比を補間演算により計算するようにすればよい。
また、上記実施形態の複数連打動作においては、所定の待ち時間WTMmax内に複数のキーオンデータが読み出された場合に、一方のキーオンデータによる鍵11及び揺動レバー40の駆動を遅延するようにした。しかし、これに代えて、所定の待ち時間WTMmax内に、3以上の所定数以上のキーオンデータが読み出された場合に、前記所定数以上のキーオンデータによる鍵11及び揺動レバー40の駆動を遅延するようにしてもよい。この場合、図6のステップS109の処理に代えて、前記所定数よりも「1」だけ小さな数のキーオンデータが待ち時間WTMmax内に読み出されたとき、ウェイト制御フラグWTCNTの“1”への設定処理、及びウェイトタイマWTMの待ち時間WTMmaxへの設定処理を実行するようにすればよい。
また、上記実施形態においては、外部記憶装置81、MIDI機器91及びサーバコンピュータ93から供給された曲データをRAM74に一旦記憶させた後に順次読み出して、楽音の発生、鍵11及び揺動レバー40の動作を制御するようにした。しかし、これに代えて、シーケンサ、電子楽器などの曲データの再生可能なMIDI機器91から曲データに関するキーイベントデータが時間経過に従って直接供給されるようにし、このキーイベントデータを用いて、楽音の発生、鍵11及び揺動レバー40の動作を制御するようにしてもよい。また、MIDI機器91として電子楽器を採用し、この電子楽器の演奏、例えば教師による演奏に基づくキーイベントデータをリアルタイムで入力して、この入力したキーイベントデータに基づいて楽音信号の発生及び鍵11の駆動を制御するようにしてもよい。
さらに、上記実施形態においては、鍵駆動装置50によって揺動レバー40のレバー基部41を突き上げて駆動するようにしたが、電子楽器の鍵盤構造が異なる場合には、他の構成を採用することもできる。要は、鍵駆動装置50への通電時に、鍵11の押鍵時と同様な機能を果たすように、鍵11及び揺動レバー40を駆動するようにすればよい。また、この鍵駆動装置50及びその制御方法に関しては、電子楽器の鍵盤装置ばかりでなく、自然楽器であるピアノの鍵及びハンマー(質量体に相当)を駆動する鍵駆動装置にも適用される。
10…鍵盤装置、11…鍵、40…揺動レバー、41…レバー基部、42…質量体、46…第1スイッチ、47…第2スイッチ、48…第3スイッチ、50…鍵駆動装置、52…ソレノイド、64…パネル操作子、70…コンピュータ部、66…音源回路、81…外部記憶装置