以下、本発明の実施の形態を図面に基づいて詳細に説明する。
図1は、本発明の一実施の形態に係る制御装置を適用した自動演奏電子ピアノ(以下、「電子ピアノ」と略して言う)の概略構成を示すブロック図である。
同図に示すように、本実施の形態の電子ピアノは、各種情報を入力するための複数のスイッチやホイール、ジョイスティックを含む設定操作子1と、設定操作子1の操作状態を検出する検出回路2と、音高情報を含む演奏情報を入力するための鍵盤装置3と、装置全体の制御を司るCPU4と、該CPU4が実行する制御プログラムや、各種テーブルデータ等を記憶するROM5と、曲データ、各種入力情報および演算結果等を一時的に記憶するRAM6と、タイマ割込み処理における割込み時間や各種時間を計時するタイマ7と、各種情報等を表示する、たとえば液晶ディスプレイ(LCD)および発光ダイオード(LED)等を備えた表示器8と、前記制御プログラムを含む各種アプリケーションプログラムや各種曲データ、各種データ等を記憶する外部記憶装置9と、外部MIDI機器等の外部機器100を接続し、この外部機器100とデータの送受信を行う通信インターフェース(I/F)10と、鍵盤装置3から入力された演奏情報や、前記外部記憶装置9に記憶されたいずれかの曲データを自動再生することによって得られた演奏情報等をオーディオ信号に変換し、これに適宜効果を付与する音源11と、該音源11からのオーディオ信号を音響に変換する、たとえば、DAC(digital-to-analog converter)やアンプ、スピーカ等のサウンドシステム12とにより構成されている。
上記構成要素2〜11は、バス13を介して相互に接続され、CPU4にはタイマ7が接続され、通信I/F10には外部機器100が接続され、音源11にはサウンドシステム12が接続されている。ここで、通信I/F10は、有線方式のものに限らず、無線方式のものであってもよい。また、両方式のものを備えていてもよい。
外部記憶装置9は、たとえば、フレキシブルディスク(FD)、ハードディスク(HD)、CD−ROM、DVD(digital versatile disc)、光磁気ディスク(MO)および半導体メモリなどの記憶媒体とその駆動装置である。記憶媒体は、駆動装置から着脱可能であってもよいし、外部記憶装置9自体が、本実施の形態の電子ピアノから着脱可能であってもよい。あるいは、記憶媒体も外部記憶装置9も着脱不可能であってもよい。そして、外部記憶装置9には、前述のように、CPU4が実行する制御プログラムも記憶でき、ROM5に制御プログラムが記憶されていない場合には、この外部記憶装置9に制御プログラムを記憶させておき、それをRAM6に読み込むことにより、ROM5に制御プログラムを記憶している場合と同様の動作をCPU4にさせることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。
通信I/F10には、図示例では、外部機器100が接続されているが、これに限られず、たとえばLAN(local area network)やインターネット、電話回線等の通信ネットワークを介して、サーバコンピュータが接続されるようにしてもよい。この場合、外部記憶装置9に上記各プログラムや各種パラメータが記憶されていなければ、通信I/F10は、サーバコンピュータからプログラムやパラメータをダウンロードするために用いられる。クライアントとなる電子ピアノは、通信I/F10および通信ネットワークを介してサーバコンピュータへとプログラムやパラメータのダウンロードを要求するコマンドを送信する。サーバコンピュータは、このコマンドを受け、要求されたプログラムやパラメータを、通信ネットワークを介して電子ピアノへと配信し、電子ピアノが通信I/F10を介して、これらプログラムやパラメータを受信して外部記憶装置9に蓄積することにより、ダウンロードが完了する。
図2は、鍵盤装置3の各鍵の駆動を制御する制御構成を示すブロック図である。ただし、図2には、説明の都合上、CPU4も記載されている。
同図に示すように、鍵盤装置3は、複数の鍵(たとえば、88鍵)を備えた鍵盤3aと、鍵毎に設けられたソレノイド3b1(後述する図3および図4では、ソレノイドからなるアクチュエータ330)に電力を供給する電力供給部3bと、各ソレノイド3b1の駆動を制御する駆動制御部3cと、各鍵にそれぞれ設けられた鍵スイッチ(図3および図4では、鍵スイッチSW)のオン/オフ状態を検出するスキャン部3dと、駆動制御部3c、スキャン部3dおよびCPU4間を接続するバス3eとによって、主として構成されている。
鍵盤3aは、「低域」、「中低域」、「中高域」および「高域」の4つの鍵域(各鍵域にはそれぞれ、22鍵が属している)に分割され、各鍵域に属する22個のソレノイド3b1のそれぞれへの電力供給は、鍵域毎に1つの電力供給部3bによって制御されている。さらに1つの電力供給部3bは、1つの駆動制御部3cによって制御されている。なお、鍵域の分割態様や分割数は、これに限らないことは言うまでもない。
駆動制御部3cは、駆動制御処理部4aとして機能するCPU4によって制御される。具体的には、ある1つの鍵を押鍵方向に駆動させたい場合、駆動制御処理部4aは、その鍵(のソレノイド3b1)の駆動制御を担当する1つの駆動制御部3c(4つの駆動制御部3cのうちの1つ)をサーチし、サーチした駆動制御部3cを指定し、その鍵のキーナンバ(各鍵に付与された番号)および駆動オンをバス3e上に送信する(以下、「駆動オン要求」という)と、その駆動オン要求は、指定された駆動制御部3cによって受信される。駆動オン要求を受信した駆動制御部3cは、その駆動オン要求内に記載された鍵のソレノイド3b1に電力が供給されるように、電力供給部3bに対して、所定のタイミングで所定のPWM波形信号を供給する。これに応じて、ソレノイド3b1には、電力供給部3bから所定量の電力が供給され、ソレノイド3b1は、対応する鍵を押下方向に段階的に引き下げる。これとは逆に、ある1つの鍵を離鍵方向に駆動させたい場合、駆動制御処理部4aは、その鍵(のソレノイド3b1)の駆動制御を担当する1つの駆動制御部3cをサーチし、サーチした駆動制御部3cを指定し、その鍵のキーナンバおよび駆動オフをバス3e上に送信する(以下、「駆動オフ要求」という)と、その駆動オフ要求は、指定された駆動制御部3cによって受信される。駆動オフ要求を受信した駆動制御部3cは、その駆動オフ要求内に記載された鍵のソレノイド3b1に電力が供給されなくなるように、電力供給部3bに対して、PWM波形信号の供給を段階的に停止する。これに応じて、ソレノイド3b1には、電力供給部3bから電力が段階的に供給されなくなるので、ソレノイド3b1に対する引き下げ動作も停止して、鍵は離鍵方向に引き上げられる。
なお、電力供給部3bは、ソレノイド3b1の故障(異常発熱など)をハードウェア的に検出し、それを駆動制御部3cに通知するエラー通知機能も備えている。駆動制御部3cは、電力供給部3bからエラー通知が送信されてくると、そのエラー通知を駆動制御処理部4aに転送する。
各鍵には、前述のように、1つの鍵スイッチが設けられている。本実施の形態では、鍵スイッチとして、接点時間差タイプの3メイク式タッチレスポンススイッチを採用している。スキャン部3dは、この各鍵スイッチにそれぞれ設けられた3つの接点(図3および図4では、第1〜第3スイッチSW1〜SW3)を所定の時間毎にスキャンし、鍵毎に各接点のオン/オフ状態を検出する。検出した鍵毎の各接点のオン/オフ状態は、バス3eを介して、駆動制御処理部4aに送信される。なお、鍵スイッチのメイク数は、上記3つに限らず、4つ以上でもよい。ただし、2つ以下の場合には、鍵の駆動制御に利用する情報が不足するので、現実的でない。一方、鍵毎にその非押鍵状態から最深押鍵状態までの全工程内の押下位置を略連続的に検出するために、たとえば光学的なセンサを用いた場合には、背景技術に記載したように、製造コストの上昇により本発明の目的や趣旨が薄れてしまうので、現実的でない。
図3および図4は、鍵盤装置3の断面図であり、図3が鍵の非押鍵状態を示し、図4が鍵の押鍵状態を示している。
図3において、本実施の形態の電子ピアノの楽器本体は、全体は図示しないが、棚板315およびそれより上方の部分が該当する。棚板315上には、鍵盤シャーシ(以下、単に「シャーシ」と称する)314が配設固定される。棚板315に対するシャーシ314の固定は不図示の締結具等で行われる。以降、本実施の形態の電子ピアノの奏者側(図3の左方)を「前方」と呼ぶことにする。
シャーシ314の前部から棚板315の前部にかけて、口棒部317が、全鍵幅に亘って設けられる。口棒部317によって、金具318および弾性材319を介して、シャーシ314の前部が棚板315に押しつけられている。
シャーシ314には、複数の鍵310および各鍵310に対応するハンマ体HMが個々に支持される。鍵310は、押下操作され、後部の鍵回動支点PKを中心として各々上下方向に回動(前端部が揺動)自在になっている。鍵310として白鍵310Wおよび黒鍵310Bがそれぞれ複数存在する。各鍵310の前部下部には、ハンマ体駆動部311が設けられる。
各鍵310の下方には、各鍵310に対応してハンマ体HMが配置される。シャーシ314には、各ハンマ体HMに対応するハンマ体回動軸PHが設けられ、各ハンマ体HMは、対応するハンマ体回動軸PHを中心に上下方向に回動(後端部が揺動)自在になっている。また、ハンマ体HMの係合部321が、鍵310のハンマ体駆動部311と常に係合状態にあり、ハンマ体HMが鍵310に連動して回動するようになっている。奏者による押鍵操作に応じて、鍵310のハンマ体駆動部311により係合部321が駆動され、ハンマ体HMがハンマ体回動軸PHを中心に同図反時計方向(押鍵方向に対応する方向)に回動することで、適切な慣性が付与され、良好な押鍵感触が得られる。各鍵310の構成、および各ハンマ体HMの構成は、それぞれ同様である。なお、押鍵感触のキースケーリングを実現するために、白鍵用と黒鍵用とで、あるいは音高に応じてハンマ体HMの長さや重さ等を異ならせてもよい。
ハンマ体HMにおいて、ハンマ体回動軸PHよりも後方の基部322から質量部材323が延設されている。ハンマ体HMは、質量部材323の自重によって、同図時計方向(離鍵方向に対応する方向)に常に付勢されており、図3に示すハンマ体HMの位置は、初期状態である非押鍵状態における位置である。
鍵310の押鍵状態からの復帰力は、質量部材323の重さによるハンマ体HMの復帰力によるものである。復帰時にも、ハンマ体HMは、対応する鍵310と連動して回動する。
シャーシ314の後部上部および後部下部にはそれぞれ、フェルト等の上側ストッパ312および下側ストッパ313が設けられている。上側ストッパ312は押鍵時にハンマ体HMの質量部材323と当接して鍵310の押鍵終了位置を規制する(図4参照)。下側ストッパ313は非押鍵時に質量部材323と当接して鍵310の非押鍵状態への復帰位置を規制する(図3参照)。
また、本実施の形態の電子ピアノには、シャーシ314の前部に配設されたスイッチ基板326上に3メイク式の鍵スイッチSWが設けられる。この鍵スイッチSWには、前述のように、第1〜第3スイッチSW1〜SW3が設けられている。押鍵時、すなわちスイッチ押圧部324の下方への変位時に、第1スイッチSW1、第2スイッチSW2および第3スイッチSW3の順にオフからオンに切換えられる。そして、押鍵が維持されていれば、第1〜第3スイッチSW1〜SW3はオン状態に保たれる。一方、離鍵時、すなわちスイッチ押圧部324の上方への変位時には、第3スイッチSW3、第2スイッチSW2および第1スイッチSW1の順にオンからオフに切換えられる。第1スイッチSW1のオン/オフが、アコースティックピアノで言うところのダンパのオフ(リリース)/オン(ホールド)に対応し、第2スイッチSW2のオフがキーオフ(消音指示)に対応し、第3スイッチSW3のオンがキーオン(発音指示)に対応する。鍵スイッチSWは、ハンマ体HMのスイッチ押圧部324によって押圧駆動されて、キーベロシティ(第2スイッチSW2のオンから第3スイッチSW3のオンまでの時間差に基づいて検出される)を含む鍵動作を検出する。奏者による押鍵動作、すなわちリアルタイム演奏の場合は、スイッチ押圧部324の検出結果に基づいて、楽音制御がなされる。
本実施の形態の電子ピアノにはまた、自動演奏用の鍵駆動手段として、駆動ユニットUNTが配設される。図5は、駆動ユニットUNTの平面図である。駆動ユニットUNTは、透磁性のある上側ヨーク335と下側ヨーク340とを備える。上側ヨーク335および下側ヨーク340は、全鍵幅の長さを有する。駆動ユニットUNTには、各ハンマ体HMに対応する全鍵分のアクチュエータ(ソレノイド)330が含まれる。アクチュエータ330は、鍵並び方向に沿った前列と後列の2列に並列的に、それぞれ一直線上に配置、すなわち、千鳥配置される。すべてのアクチュエータ330は、配置位置を除きいずれも同様に構成される。
図3に示すように、上側ヨーク335は、下方に開口した断面コ字状に一体に形成される。下側ヨーク340は、上側ヨーク335を受け入れる断面コ字状の凹部343と、凹部343から後方に延設された後方水平部341と、凹部343から前方に延設された前方水平部342とを有して一体に形成される。後方水平部341は、後方に十分に長く、質量部材323の先端よりも後方まで延びている。下側ヨーク340が、断面コ字状の凹部343を有して逆ハット型であることで、下側ヨーク340の剛性が高くなっている。
棚板315には、少なくとも全鍵幅に亘る長さの装着穴315b(図3参照)が形成されている。上側ヨーク335は、下側ヨーク340の凹部343内に収容され、これにより上側ヨーク335および下側ヨーク340が重なっている部分を含むアクチュエータ330が、装着穴315b内に位置している。この位置は、ハンマ体回動軸PHに近接している。プランジャ333のストロークが小さくて済むようにする観点から、アクチュエータ330の位置は、鍵回動支点PKとハンマ体回動軸PHとの間であってハンマ体回動軸PHに極力近接した位置に配設するのが好ましい。
図3に示すように、各アクチュエータ330において、上側ヨーク335の内側であってボビン331の周囲にソレノイドコイル332が巻回される。また、ボビン331の内部をプランジャ333が上下方向に往復動作可能に配設される。プランジャ333の上部には、弾性材でなる駆動部334が設けられる。各アクチュエータ330は、上側ヨーク335および下側ヨーク340が重なっている部分を主な磁路として利用して成り立っている。
上側ヨーク335と下側ヨーク340とは、複数のネジ337(図3、図5参照)で固定される。ネジ337による固定は、ボビン331およびソレノイドコイル332を上側ヨーク335および下側ヨーク340間に固定することにも役立っている。アクチュエータ330が千鳥配置であることで、個々のアクチュエータ330のソレノイドコイル332の巻回の径(ボビン331の径)を大きく、巻き数を多く設定でき、駆動力の効率的な向上に有利となっている。
図3に示すように、駆動ユニットUNTは、下側ヨーク340の取り付け用穴341ab、342ab(図5参照)を通じて、複数のネジ329にて、シャーシ314の後部下部における取り付け部314a、前部下部における取り付け部314bに締結固定される。
駆動ユニットUNTのすぐ後方であって、棚板315の下部には、駆動ユニットUNTの動作を制御するための基板344が、複数のネジ346によって固定されている。また、駆動ユニットUNTおよび基板344を下方から覆うユニットカバー345が設けられる。ユニットカバー345は、板金または樹脂等で構成され、その前後の取り付け部345bが、複数のネジ347によって棚板315の下面に固定される。
非押鍵状態では、アクチュエータ330の駆動部334が、対応するハンマ体HMに近接している。なお、非押鍵状態においては、駆動部334がハンマ体HMに当接するようにしてもよい。ソレノイドコイル332に通電されると、プランジャ333が上方に移動し、駆動部334とハンマ体HMとの当接を通じてハンマ体HMを押し上げ駆動する。すると、ハンマ体HMに連動して、鍵310が押鍵方向(鍵310の先端が下方に変位する方向)に回動する(図4参照)。
通電が解除されると、ハンマ体HMおよび鍵310の復帰に伴い、プランジャ333がハンマ体HMに押されることに加えて、自重によって元の初期位置(図3で示す位置)に復帰する。
なお本実施の形態では、鍵盤装置として、ハンマ体を介して鍵を駆動するようにしたものを採用したが、これに限らず、ハンマ体を介さずに直接、鍵を駆動するようにしたものを採用してもよい。この場合、ハンマ体を備えた構造のものと、ハンマ体を備えない構造のものがあるが、いずれの構造のものを採用してもよい。
また本実施の形態では、下側ヨーク340をシャーシ314に固定し、下側ヨーク340の固定されたシャーシ314を前記締結具等で棚板315に固定するようにしたが、これに限らず、下側ヨーク340もシャーシ314も、たとえばネジによって直接、棚板315に締結固定するようにしてもよい。
以上のように構成された電子ピアノ、特に前記CPU4が実行する自動鍵駆動制御処理を、図6〜図13を参照して詳細に説明するが、以下、基本動作と同一鍵連打動作に分けて説明する。同一鍵連打動作とは、自動鍵駆動制御により、同一の鍵が短時間内にオン・オフ動作を繰り返す動作である。基本動作とは、各鍵が非押鍵状態から最深押鍵状態を経由して非押鍵状態に戻るまでの全工程間で、同一鍵連打動作などの特殊な動作がなされない基本的な動作である。なお、特殊な動作としては、同一鍵連打動作以外にも、自動鍵駆動制御により、複数の鍵が短時間内にオン動作してオン状態を同時に維持する「複数鍵連打動作」や、自動鍵駆動制御中にマニュアル演奏がされた場合の動作である「マニュアル演奏との競合動作」などがあるが、これらの動作については、本実施の形態では考慮されていない。この理由は、本発明の特徴、すなわち鍵駆動のフィードフォワード制御を基本としつつ、鍵スイッチSWの第1〜第3スイッチSW1〜SW3によってそれぞれ発生されるオン/オフイベントを用いて、当該フィードフォワード制御内の一部でフィードバック制御を行うという特徴を説明するには、上記「基本動作」と「同一鍵連打動作」を例に挙げて説明するだけで十分であるからである。このように本実施の形態において、上記「複数鍵連打動作」および「マニュアル演奏との競合動作」を考慮しないのは、専ら説明の都合上である。そして、本実施の形態は、前記特許文献2の実施の形態に基づいて構成され、特許文献2の実施の形態には「複数鍵連打動作」および「マニュアル演奏との競合動作」についての制御処理が詳述されているので、この制御処理の記載に基づいて本発明を「複数鍵連打動作」および「マニュアル演奏との競合動作」に簡単に適用することができる。
(1)基本動作
ユーザが、たとえば前記設定操作子1に含まれるモードスイッチ(図示せず)を操作して自動演奏モードを選択すると、図示しないプログラムの実行により、表示器8に曲の選択指示が表示される。そしてユーザは、この指示に従って外部記憶装置9に記憶されている所望の曲を設定操作子1に含まれる所定の操作子の操作により選択する。この選択により、選択された曲の曲データおよび鍵駆動用データが外部記憶装置9から読み出されて、RAM6の所定位置に確保された曲データ格納領域および鍵駆動用データ格納領域(ともに図示せず)にそれぞれ記憶される。なお、ユーザが所望とする曲の曲データおよび鍵駆動用データが外部記憶装置9に記憶されていない場合には、ユーザがあるいは自動的に、本実施の形態の電子ピアノの外部、たとえば前記外部機器100から、その曲データおよび鍵駆動用データを通信I/F10を介してRAM6内に取り込むようにしてもよい。
本実施の形態で用いる曲データは、ヘッダ、一連のイベントデータ、発生タイミングデータおよびエンドデータからなる。ヘッダは、曲名、初期の音色、音量、演奏テンポなどを表す複数のデータからなる。イベントデータには、キーオンイベントデータ、キーオフイベントデータ、楽音制御イベントデータおよびテンポイベントデータなどが含まれる。キーオンイベントデータは、発生楽音の音高を表すキーコードKCおよび楽音の発生開始を表すキーオンKONを有する。キーオフイベントデータは、発生中の楽音の音高を表すキーコードKCおよび楽音の発生停止を表すキーオフKOFを有する。楽音制御イベントデータは、発生楽音の音色、音量を制御するための制御データを有する。発生タイミングデータは、各イベントデータに付随して(隣接して)設けられ、当該イベントデータの楽曲中の発生タイミングを表すテンポクロックタイミングTCLTを有する。テンポイベントデータは、自動演奏のテンポを変更するための制御データを有する。エンドデータは、曲データの終了を表す。
一方、本実施の形態で用いる鍵駆動用データは、ヘッダ、一連の駆動イベントデータ、駆動タイミングデータおよびエンドデータからなる。ヘッダには、曲名を表すデータが含まれる。駆動イベントデータには、駆動オンイベントデータおよび駆動オフイベントデータが含まれる。駆動オンイベントデータは、駆動鍵のキーナンバ(各鍵に付与された番号のうち、駆動鍵に付与された番号)を表すキーコードKCおよび駆動開始を表す駆動オンKONを有する。駆動オフイベントデータは、駆動中の鍵のキーナンバを表すキーコードKCおよび駆動停止を表す駆動オフKOFを有する。駆動タイミングデータは、各駆動イベントデータに付随して(隣接して)設けられ、当該駆動イベントデータの楽曲中の駆動タイミングを表すテンポクロックタイミングTCLTを有する。エンドデータは、鍵駆動用データの終了を表す。
なお本実施の形態では、曲データが記憶されていれば必ず、鍵駆動用データも記憶されているとし(したがって、ある曲データが外部記憶装置9に記憶されていれば、その曲データに対応する鍵駆動用データも外部記憶装置9あるいは外部機器100などに記憶されている)、上述のように曲が選択されると、その曲データだけでなくその鍵駆動用データも読み出されてRAM6内に取り込まれる。しかし、曲データと鍵駆動用データとの違いは、曲データ内の発生タイミングデータによって表される発生タイミングと、その発生タイミングデータに対応する、鍵駆動用データ内の駆動タイミングデータによって表される駆動タイミングとが若干異なる(つまり、鍵駆動制御は発音制御に比べて時間がかかるので、駆動タイミングを発生タイミングより早くする必要がある)程度であるので、外部記憶装置9には曲データのみを記憶しておき、鍵駆動用データが必要となったときに、その鍵駆動用データを対応する曲データから生成するようにしてもよい。
また、自動演奏の指示により、図示しない初期設定処理が実行されて、RAM6内に、自動演奏用テーブルおよび鍵駆動用テーブルが用意される。自動演奏用テーブルは、曲データに基づいて自動演奏(楽音信号の自動生成)を行うためのテーブルであり、鍵駆動用テーブルは、鍵駆動用データに基づいて鍵盤装置3の駆動制御を行うためのテーブルである。後述するように、自動演奏と鍵盤装置3の駆動制御とは並行して実行されるが、本発明の特徴は鍵盤装置3の駆動制御にあり、自動演奏にはないので、自動演奏用テーブルの構成や自動演奏用テーブルを用いてどのように自動演奏を行うかについての説明は省略する。
鍵駆動用テーブルは、図6に示すように、鍵駆動用データ中の駆動オンイベントデータを割り当てるための複数(本実施の形態では、10個)のチャンネルch1〜ch10を有する。なお、この10個のチャンネルは例示であって、これに限定されることなく、他の個数を採用してもよい。各チャンネルchi(iは、1から10までの整数)には、キーコードKC(i)、鍵駆動状態ST(i)、経過時間TM(i)、オフディレイフラグOFDL(i)、オンディレイフラグONDL(i)、駆動アシスト制御フラグTA(i)および第1〜第3スイッチフラグSW1(i)〜SW3(i)がそれぞれ記憶されるようになっている。
キーコードKC(i)は、駆動オンイベントデータ中のキーコードKCである。鍵駆動状態ST(i)は、駆動オンタイミング、すなわちアクチュエータ330への通電制御開始からの時間経過(ただし、駆動オン維持時間を除外する)に従った第1〜第11状態ST1〜ST11のいずれかを表す(図14(a)参照)。経過時間TM(i)は、駆動オンタイミングおよび駆動オフタイミングからの経過時間を表す。ただし、駆動オフに関する経過時間TM(i)は、駆動オフタイミングからの時間に、駆動オンタイミングから駆動オン持続開始タイミングまでの時間を加算して表している。オフディレイフラグOFDL(i)は、同一鍵の連打に関係して同一鍵に関する駆動オン直後の駆動オフに対して駆動オフ制御を遅延させるためのフラグであり、“1”により遅延を表し、“0”により非遅延を表す。オンディレイフラグONDL(i)は、同一鍵の連打に関係して同一鍵に関する駆動オフ直後の駆動オンに対して駆動オン制御を遅延させるためのフラグであり、“1”により遅延を表し、“0”により非遅延を表す。駆動アシスト制御フラグTA(i)は、アクチュエータ330の駆動力が発熱等によって低下した場合に発生する駆動アシスト制御の状態を表すフラグであり、“1”により駆動アシスト制御状態を表し、“0”により駆動アシスト非制御状態を表す。第1〜第3スイッチフラグSW1(i)〜SW3(i)は、第1〜第3スイッチSW1〜SW3のオン/オフ状態をそれぞれ表すもので、“0”によりオフ状態を表し、“1”によりオン状態を表す。
この鍵駆動用テーブルの初期設定においては、キーコードKC(i)、経過時間TM(i)および鍵駆動状態ST(i)は、それぞれ“0”にリセットされる。オフディレイフラグOFDL(i)、オンディレイフラグONDL(i)、駆動アシスト制御フラグTA(i)および第1〜第3スイッチフラグSW1(i)〜SW3(i)は、それぞれ“0”にリセットされる。
前記曲の選択および初期設定後、CPU4は、タイマ7との協働により、曲データのヘッダ部分に含まれているテンポデータにより表された演奏テンポによって規定される所定の短時間毎に、図7の自動演奏処理プログラムを繰り返し実行し始める。所定の短時間とは、たとえば、4分音符の時間長の1/16,1/32程度の時間長である。この演奏テンポは、設定操作子1に含まれるテンポ操作子(図示せず)の操作によっても変更される。
自動演奏処理プログラムの実行が開始されると、CPU4は、ステップS1にてランフラグRUNが“1”であるか否かを判定する。ランフラグRUNは、“1”により自動演奏の動作中を表し、“0”により自動演奏の待機中を表す。ランフラグRUNは“0”に初期設定されているので、最初CPU4は、ステップS1にて“NO”と判定して、ステップS2の判定処理により、ユーザによるスタート指示を待つ。ユーザが自動演奏のスタートを指示しなければ、CPU4は、ステップS2にて“NO”と判定して、この自動演奏処理プログラムの実行を一旦終了する。ユーザが、たとえば設定操作子1に含まれる自動演奏スタートスイッチ(図示せず)を操作して自動演奏のスタートを指示すると、CPU4は、ステップS2にて“YES”と判定して、ステップS3にてランフラグRUNを“1”に設定するとともに、テンポクロックTCLを“0”にクリアする。その後、ステップS5〜S14からなる処理が実行される。
前述のようにして、ランフラグRUNが“1”に設定されると、以降の自動演奏処理プログラムの実行時に、CPU4は、ステップS1にて“YES”と判定し、ステップS4にてテンポクロックTCLに“1”を加算する。次に、ステップS5以降の処理について説明する。CPU4は、ステップS5にて、曲データ中に、テンポクロックTCLにより示されたタイミングを表すタイミングデータの付随したイベントデータがあるか否かを判定する。該当するイベントデータがなければ、CPU4は、ステップS5にて“NO”と判定して、処理をステップS9に進める。
該当するイベントデータがあれば、CPU4は、ステップS5にて“YES”と判定して、ステップS6にて該当する1つのイベントデータを読み出し、ステップS7の自動演奏イベント処理を実行する。この自動演奏イベント処理では、CPU4は、読み出されたイベントデータがキーオンイベントデータであれば、当該キーオンイベントデータ中のキーコードKCおよびキーオンKONを音源11に出力し、読み出されたイベントデータがキーオフイベントデータであれば、当該キーオフイベントデータ中のキーコードKCおよびキーオフKOFを音源11に出力し、読み出されたイベントデータが楽音制御イベントデータであれば、当該楽音制御イベントデータ中の楽音パラメータを音源11に出力し、読み出されたイベントデータがテンポイベントデータであれば、自動演奏のテンポを変更する。
ステップS7の処理後、CPU4は、ステップS8にて該当する残りのイベントデータが曲データ中にあるか否かを判定し、該当する残りのイベントデータがあれば、前記ステップS6およびS7の処理を実行する。ステップS8の判定処理は、曲データ中に同じ発生タイミングのイベントデータが複数存在する場合に必要なものである。つまり、ステップS6では、同じ発生タイミングのイベントデータが複数あったとしても、そのうちの1つだけを読み出し、そのイベントデータを次のステップS7の自動演奏イベント処理に渡しているため、当該イベントデータが複数ある場合には、その個数に応じた回数だけ、ステップS6およびS7の処理を繰り返す必要があるからである。このようにして、該当するイベントデータは、ステップS7の自動演奏イベント処理にて1つずつ処理される。該当する残りのイベントデータがなくなると、CPU4は、ステップS8にて“NO”と判定して、ステップS9にて、鍵駆動用データ中に、テンポクロックTCLにより示された駆動タイミングを表す駆動タイミングデータの付随した駆動イベントデータがあるか否かを判定する。該当する駆動イベントデータがなければ、CPU4は、ステップS9にて“NO”と判定して、この自動演奏処理プログラムを一旦終了する。
該当する駆動イベントデータがあれば、CPU4は、ステップS9にて“YES”と判定して、ステップS10にて該当する1つの駆動イベントデータを読み出し、ステップS11の鍵駆動イベント処理サブルーチンを実行する。ステップS11の処理後、CPU4は、ステップS12にて該当する残りの駆動イベントデータが鍵駆動用データ中にあるか否かを判定し、該当する残りの駆動イベントデータがあれば、前記ステップS10およびS11の処理を実行する。なお、ステップS12の判定処理を設けた理由は、前記ステップS8の判定処理を設けた理由と同様である。このようにして、該当する駆動イベントデータは、ステップS11の鍵駆動イベント処理サブルーチンにて1つずつ処理される。該当する残りの駆動イベントデータがなくなると、CPU4は、ステップS12にて“NO”と判定して、ステップS13にて鍵駆動用データの読み出しがエンドデータまで達したか否かを判定する。そして、エンドデータに達するまで、すなわち1曲分の鍵駆動用データの読み出しが終了するまで、演奏テンポに応じた短時間毎に、ステップS4〜S13の処理が繰り返し実行される。
鍵駆動用データの読み出しがエンドデータまで達すると、CPU4は、ステップS13にて“YES”と判定し、ステップS14にてランフラグRUNを“0”に設定して、この自動演奏処理プログラムの実行を終了する。このようにしてランフラグRUNが“0”に設定されると、自動演奏処理プログラムが次に実行されたときには、前述のように、ステップS1およびS2の処理により、ユーザによってスタートが指示されるまで、曲データおよび鍵駆動用データの読み出し処理は実行されない。
なお、鍵駆動用データ内の最後の駆動イベントデータ(エンドデータの直前の駆動イベントデータ)の読み出しが、曲データ内の対応するイベントデータの読み出しより早く終了することが起こり得る(前述のように、駆動イベントデータの駆動タイミングを、対応するイベントデータの発生タイミングより早くする必要があるため)が、この場合には、図7のフローチャートでは、曲データ内の最後のイベントデータを読み出すことができない。これに対処するためには、曲データの読み出しがエンドデータに至ったときに“1”に設定し、それ以外は“0”に設定する曲データ読出終了フラグと、鍵駆動用データの読み出しがエンドデータに至ったときに“1”に設定し、それ以外は“0”に設定する鍵駆動用データ読出終了フラグを設け、曲データ読出終了フラグおよび鍵駆動用データ読出終了フラグがいずれも“1”に設定されているときに、ランフラグRUNを“0”に設定するようにすればよい。
次に、前記ステップS11の鍵駆動イベント処理サブルーチンについて説明する。鍵駆動イベント処理サブルーチンは、図8に詳細に示されている。その実行が開始されると、CPU4は、ステップS21にて、前記読み出した駆動イベントデータが駆動オンイベントデータであるか否かを判定する。駆動オンイベントデータであれば、CPU4は、ステップS21にて“YES”と判定して、処理をステップS22に進める。前記読み出したイベントデータが駆動オンイベントデータでない場合には、CPU4は、ステップS21において“NO”と判定して、処理をステップS25に進める。まず、読み出された駆動イベントデータが駆動オンイベントデータである場合について説明を続ける。ステップS22においては、CPU4は、鍵駆動用テーブルを参照し、前記読み出した駆動オンイベントデータ中に含まれているキーコードKCと同一のキーコードKCを記憶したチャンネルが存在するか否かを判定する。この判定条件は、後述する同一鍵連打に関する判定条件である。この基本動作においては、同一鍵連打に関係して同一鍵に関する駆動オンイベントデータが短時間内に発生しないことを前提としているので、前記読み出した駆動オンイベントデータ中に含まれているキーコードKCと同一のキーコードKCを記憶したチャンネルは存在しない。なお、該当するチャンネルが存在する場合については詳しく後述する。したがって、この場合、CPU4は、ステップS22にて“NO”と判定して、処理をステップS23に進める。
ステップS23においては、CPU4は、鍵駆動用テーブル内にて第1スイッチフラグSW1が“0”であり、かつ割当て優先度が最大であるチャンネルchiを探し出し、同探し出したチャンネルchiに前記図7のステップS10の処理により鍵駆動用データ中から読み出した駆動イベントデータである駆動オンイベントデータを割当てる。すなわち、鍵駆動用テーブルの前記探し出したチャンネルchiのキーコードKC(i)を駆動オンイベントデータ中に含まれるキーコードKCに設定し、鍵駆動状態ST(i)を第1状態ST1に設定し、経過時間TM(i)を“0”にリセットし、オフディレイフラグOFDL(i)、オンディレイフラグONDL(i)、駆動アシスト制御フラグTA(i)および第1〜第3スイッチフラグSW1(i)〜SW3(i)をそれぞれ“0”に設定する。
次にCPU4は、ステップS24にて、前記記憶したキーコードKC(i)が予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル内の第1状態ST1に対応したデューティ比をキーコードKC(i)と共に前記駆動制御部3cに出力する。そして、CPU4は、この鍵駆動イベント処理サブルーチンの実行を一旦終了する。
本実施の形態では、前記ROM5または外部記憶装置9には、アクチュエータ330を通電制御するためのデューティ比を記憶した複数のデューティ比テーブルが記憶されている。複数のデューティ比テーブルはそれぞれ、押鍵時に鍵310を円滑に突き上げるためにアクチュエータ330を通電制御する際のデューティ比を押鍵開始からの時間の関数として記憶しているとともに、離鍵時の鍵310を円滑に降下させるためにアクチュエータ330を通電制御する際のデューティ比を離鍵開始からの時間の関数として記憶している。本実施の形態では、図14(a)に示すように、各デューティ比テーブルは、押鍵時のデューティ比として階段状に変化する6種類(ST1〜ST6)のデューティ比、押鍵維持のための1種類(ST7)のデューティ比、および離鍵時のデューティ比として階段状に変化する4種類(ST8〜ST11)のデューティ比が用意されている。また、複数のデューティ比テーブル内にそれぞれ記憶された時間変化するデューティ比の各平均値はそれぞれ異なる。そして、鍵310をなるべく均一な速度で変位させるために、鍵の属する音域(たとえば、低域、中低域、中高域および高域)、白鍵または黒鍵、および千鳥状に配置されたアクチュエータ330の前後位置の組み合わせに応じて、鍵310は複数のデューティ比テーブルのうちのいずか1つのデューティ比テーブルに予め割当てられている。具体的には、鍵盤装置3の質量部材323は低音域ほど重いために(すなわち、回転モーメントが大きいために)、低音域の鍵310ほど、前記平均値の大きなデューティ比テーブルに割当てられている。白鍵310Wは、黒鍵310Bに比べて回転モーメントが大きいために、黒鍵310Bに比べて前記平均値の大きなデューティ比テーブルに割当てられている。アクチュエータ330が前側に位置している鍵310は、アクチュエータ330が後側に位置している鍵310に比べてハンマ体回動軸PHからの距離が短いために、前記平均値の大きなデューティ比テーブルに割当てられている。
前記ステップS24の処理のように、第1状態ST1に対応したデューティ比およびキーコードKC(i)が駆動制御部3cに出力されると、駆動制御部3cは、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を前記デューティ比に応じたPWM波形で通電制御する。
一方、前記図7の自動演奏処理プログラムの実行に並行して、CPU4は、タイマ7との協働により、所定の短時間(たとえば、100μs)毎に、図10〜図13の鍵駆動制御処理プログラムを繰り返し実行している。この鍵駆動制御処理プログラムの実行が開始されると、CPU4は、ステップS101にて鍵駆動用テーブルのチャンネルch1〜ch10を順に指定する変数iを“1”に設定した後、図13のステップS172およびS173の処理により、変数iが“10”に達するまで、ステップS102〜S171の処理を繰り返し実行する。
この場合、全てのチャンネルは共通の動作をするので、前記図8のステップS23の処理により、駆動オンイベントデータが登録された鍵駆動用テーブルの1つのチャンネルiについてのみ説明する。ステップS102においては、CPU4は、鍵駆動状態ST(i)が第7状態ST7を表しているか否かを判定する。この場合、前記図8のステップS23の処理により、鍵駆動状態ST(i)は第1状態ST1に設定されているので、CPU4は、ステップS102にて“NO”と判定して、ステップS103にて経過時間TM(i)に所定の短い時間値Tcを表す値を加算する。この時間値Tcは、この鍵駆動制御処理プログラムの実行周期(たとえば、100μs)である。
前記ステップS103の処理後、鍵駆動状態ST(i)は第1状態ST1に設定されているので、CPU4は、ステップS104にて“YES”と判定して、ステップS105にて経過時間TM(i)が第1状態ST1の終了タイミングを示す所定の第1時間値T1(図14(a)参照)以上であるか否かを判定する。経過時間TM(i)が第1時間値T1以上でなければ、CPU4は、ステップS105にて“NO”と判定して、処理をステップS172以降に進める。そして、鍵駆動制御処理プログラムが再び実行されても、経過時間TM(i)が第1時間値T1以上になるまで、前記ステップS101〜S105,S172およびS173の処理を繰り返す。この繰り返し処理中、駆動制御部3cは、図8のステップS24の処理によって供給されたデューティ比に応じたPWM波形で、キーコードKC(i)により表されたアクチュエータ330を通電制御し続ける。
一方、前記ステップS103の加算処理により、経過時間TM(i)が第1時間値T1以上になると、CPU4は、ステップS105にて“YES”と判定して、ステップS106にて鍵駆動状態ST(i)を第2状態ST2に変更する。そして、CPU4は、ステップS107にて、キーコードKC(i)が予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図14(a)参照)内の第2状態ST2に対応したデューティ比をキーコードKC(i)と共に駆動制御部3cに出力する。駆動制御部3cは、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を前記デューティ比に応じたPWM波形で通電制御する。前記ステップS107の処理後、CPU4は、処理をステップS172以降に進める。
次にこの鍵駆動制御処理プログラムが実行されたときには、鍵駆動状態ST(i)は第2状態ST2に設定されているので、CPU4は、ステップS108にて“YES”と判定して、前記ステップS105〜S107と同様なステップS109〜S111の処理により、駆動制御部3cとの協働により、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を、第2状態ST2に対応したデューティ比に応じたPWM波形で、第2状態ST2の終了タイミングを示す所定の第2時間値T2になるまで通電制御し続ける。そして、経過時間TM(i)が第2時間値T2に達すると、前記と同じアクチュエータ330を、第3状態ST3に対応したデューティ比に応じたPWM波形で通電制御し始める。したがって、キーコードKC(i)により表された鍵310に対応したアクチュエータ330は、時間T2−T1だけ、第2状態ST2に対応したデューティ比に応じたPWM波形で通電制御され、その後に第3状態ST3に対応したデューティ比に応じたPWM波形の通電制御に切換えられる。
次にこの鍵駆動制御処理プログラムが実行されたときには、鍵駆動状態ST(i)は第3状態ST3に設定されているので、CPU4は、ステップS112にて“YES”と判定して、ステップS113にて第1スイッチSW1のオンイベントが前記図2のスキャン部3dによって検出されたか否かを判定する。第1スイッチSW1のオンイベントが検出されなければ、CPU4は、ステップS113にて“NO”と判定して、処理をステップS172以降に進める。一方、第1スイッチSW1のオンイベントが検出されると、CPU4は、ステップS113にて“YES”と判定して、ステップS114にて第1スイッチフラグSW1(i)を“1”に設定する。そしてCPU4は、ステップS115にて経過時間TM(i)が第3状態ST3の終了タイミングを示す所定の第3時間値T3より所定時間長い第3′時間値T3′以上であるか否かを判定する。ここで、第3時間値T3は、アクチュエータ330の駆動力が通常状態(つまり、その駆動力が発熱等により低下していない状態)であれば、鍵駆動を開始してから第1時間値T1までの時間、時間T2−T1および時間T3−T2の各時間だけ、第1状態ST1〜第3状態ST3にそれぞれ対応したデューティ比に応じたPWM波形でアクチュエータ330に通電制御し続けた場合、鍵310のスイッチ押圧部324が鍵スイッチSWの第1スイッチSW1をオン状態にする時間である。そして第3′時間値T3′は、この第3時間値T3に所定の時間値だけ余裕を持たせて、アクチュエータ330の駆動力が真に低下していると判定できるようにした閾値である。
経過時間TM(i)が第3′時間値T3′以上でなければ、CPU4は、ステップS115にて“NO”と判定して、ステップS117にて鍵駆動状態ST(i)を第4状態ST4に変更する。そして、CPU4は、ステップS118にて、キーコードKC(i)が予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル内の第4状態ST4に対応したデューティ比をキーコードKC(i)と共に駆動制御部3cに出力する。駆動制御部3cは、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を前記デューティ比に応じたPWM波形で通電制御する。前記ステップS118の処理後、CPU4は、処理をステップS172以降に進める。
一方、経過時間TM(i)が第3′時間値T3′以上であれば、CPU4は、ステップS115にて“YES”と判定して、ステップS116にて駆動アシスト制御フラグTA(i)を“1”に設定した後、処理を前記ステップS117に進める。
次にこの鍵駆動制御処理プログラムが実行されたときには、鍵駆動状態ST(i)は第4状態ST4に設定されているが、図11のステップS120にて鍵駆動状態ST(i)が第4状態ST4を表しているか否かを判定する前に、CPU4は、ステップS119にて駆動アシスト制御フラグTA(i)が“1”に設定されているか否かを判定する。この判定は、アクチュエータ330の駆動力が低下しているために駆動アシスト制御を行う場合と、アクチュエータ330の駆動力が低下していないために駆動アシスト制御を行わない場合とを分けるためになされている。ここでは、駆動アシスト制御フラグTA(i)が“0”に設定されていて、駆動アシスト制御を行わない場合を説明し、駆動アシスト制御を行う場合については後述する。
駆動アシスト制御フラグTA(i)が“0”に設定されているときには、CPU4は、ステップS119にて“NO”と判定して、ステップS120にて鍵駆動状態ST(i)が第4状態ST4を表しているか否かを判定する。このとき、鍵駆動状態ST(i)は第4状態ST4であるので、CPU4は、ステップS120にて“YES”と判定して、ステップS121にて第3スイッチSW3のオンイベントがスキャン部3dによって検出されたか否かを判定する。第3スイッチSW3のオンイベントが検出されなければ、CPU4は、ステップS121にて“NO”と判定して、処理をステップS172以降に進める。一方、第3スイッチSW3のオンイベントが検出されると、CPU4は、ステップS121にて“YES”と判定して、ステップS122にて第2および第3スイッチフラグSW2(i)およびSW3(i)をそれぞれ“1”に設定し、ステップS123にて鍵駆動状態ST(i)を第5状態ST5に変更する。そして、CPU4は、ステップS124にて、キーコードKC(i)が予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル内の第5状態ST5に対応したデューティ比をキーコードKC(i)と共に駆動制御部3cに出力する。駆動制御部3cは、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を前記デューティ比に応じたPWM波形で通電制御する。さらにCPU4は、ステップS125にて第5状態ST5を継続させる時間ΔTst5(図14(a)参照)と経過時間TM(i)との加算値を第5時間値T5とした後、処理をステップS172以降に進める。このように第5時間値T5を設定するのは、第4状態ST4から第5状態ST5に切り替わる時刻、つまり第4時間値T4は、固定値ではなく、第3スイッチSW3のオンイベントの発生タイミングによって決まる変動値であり、その変動値に対して常に所定時間、すなわち時間ΔTst5だけ第5状態ST5を継続させたいからである。
続くステップS126〜S129の処理は、前記ステップS104〜S107およびステップS108〜S111の各処理と同様である。したがって、このステップS126〜S129の処理により、キーコードKC(i)により表された鍵310に対応したアクチュエータ330は、時間T5−T4(=ΔTst5)、第5状態ST5に対応したデューティ比に応じたPWM波形で通電制御される。
次に、鍵駆動状態ST(i)が第6状態ST6になった場合について説明する。この場合、CPU4は、前記第5状態ST5の場合と異なり、ステップS130〜S138の処理を実行する。しかし、ステップS132,S135〜S138の処理は、同一鍵連打に関係してオフディレイフラグOFDL(i)が“1”に設定されている場合の処理であり、この基本動作においては、オフディレイフラグOFDL(i)は必ず“0”に設定されている。したがって、この場合、ステップS132における“YES”との判定のもとに、実質的には、ステップS130,S131,S133およびS134の処理が実行される。そして、これらのステップS130,S131,S133およびS134の処理は、前述したステップS104〜S107、ステップS108〜S111およびステップS126〜S129の各処理に対応している。したがって、この場合も、キーコードKC(i)により表された鍵310に対応したアクチュエータ330は、前記の処理と同様に、時間T6−T5の間、第6状態ST6に対応したデューティ比に応じたPWM波形で通電制御され、その後に、第7状態ST7に対応したデューティ比に応じたPWM波形で通電制御され続ける。
この第1〜第6状態ST1〜ST6の制御により、鍵310およびハンマ体HMは図3の状態から図4の状態に変化し、ハンマ体HMの質量部材323の後端部は上側ストッパ312により上方への変位が規制される。この状態は、ユーザが鍵310の押鍵を維持している状態に対応する。
このような状態で、図7のステップS10の処理により駆動イベントデータである駆動オフイベントデータが読み出されて、図7のステップS11、すなわち図8の鍵駆動イベント処理サブルーチンが実行されると、CPU4は、図8のステップS21にて“NO”と判定するとともに、ステップS25にて“YES”と判定して、ステップS26にて鍵駆動オフ処理サブルーチンを実行する。
鍵駆動オフ処理サブルーチンは、図9に詳細に示されている。その実行が開始されると、CPU4は、ステップS31にて、鍵駆動用テーブルを参照し、前記読み出した駆動オフイベントデータ中に含まれているキーコードKCと同一のキーコードKCを記憶しているチャンネルchiを探し出す。次に、前記探し出したチャンネルchiにより指定される鍵駆動用テーブル内の鍵駆動状態ST(i)が第7状態ST7であるか否かを判定する。この場合、前記探し出したチャンネルchiは、前述した図10のステップS101〜図11のステップS134の処理により、鍵駆動状態ST(i)が第7状態ST7に設定されたチャンネルと同じであるものとして話を進める。したがって、CPU4は、ステップS32にて“YES”と判定して、処理をステップS33以降に進める。なお、ステップS32にて“NO”、すなわち鍵駆動状態ST(i)が第7状態ST7でないと判定される場合は、この基本動作でない同一鍵連打に関する場合である。
前記ステップS32の“YES”との判定後、CPU4は、ステップS33にて鍵駆動状態ST(i)を第8状態ST8に変更し、ステップS34にてキーコードKC(i)が予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図14(a)参照)内の第8状態ST8に対応したデューティ比をキーコードKC(i)と共に駆動制御部3cに出力する。駆動制御部3cは、前記場合と同様に、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を前記デューティ比に応じたPWM波形で通電制御する。なお、この制御および今後の制御は、図4の状態にある鍵310およびハンマ体HMを図3の状態に戻す動作、すなわち駆動オフ動作に対応する。
一方、前述のように、CPU4は、図10〜図13の鍵駆動制御処理プログラムを所定の短い時間値Tc毎に繰り返し実行している。前記図9の鍵駆動オフ処理サブルーチンによって、鍵駆動状態ST(i)は第8状態ST8に設定されているので、図12のステップS148〜S152の処理が実行される。このステップS148〜S152の処理は、前述した図11のステップS120〜S124の処理と同様であり、CPU4は、駆動制御部3cとの協働により、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を、第8状態ST8に対応したデューティ比に応じたPWM波形で、第2スイッチSW2のオフイベントがスキャン部3dによって検出されるまで(ただし、ステップS120〜S124の処理では、第3スイッチSW3のオンイベントが検出されるまで)通電制御し、その後に第9状態ST9に対応したデューティ比に応じたPWM波形の通電制御に切換える。また、図12のステップS153〜S158は、前述した図11のステップS120〜S125の処理と同様であり、CPU4は、駆動制御部3cとの協働により、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を、第9状態ST9に対応したデューティ比に応じたPWM波形で、第1スイッチSW1のオフイベントがスキャン部3dによって検出されるまで通電制御し、その後に第10状態ST10に対応したデューティ比に応じたPWM波形の通電制御に切換えるとともに、第10状態ST10を継続させる時間ΔTst10(図14(a)参照)と経過時間TM(i)との加算値を第10時間値T10とする。さらに、図13のステップS159〜S162の処理は、前述した図10のステップS104〜S107などの処理と同様であり、CPU4は、駆動制御部3cとの協働により、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を、第10状態ST10に対応したデューティ比に応じたPWM波形で、時間ΔTst10にわたって通電制御し、その後に第11状態ST11に対応したデューティ比に応じたPWM波形の通電制御に切換える。
次に、鍵駆動状態ST(i)が第11状態ST11になった場合について説明する。この場合、CPU4は、前記第10状態ST10の場合と異なり、ステップS163〜S171の処理を実行する。しかし、ステップS165,S168〜S171の処理は、同一鍵連打に関係してオンディレイフラグONDL(i)が“1”に設定されている場合の処理であり、この基本動作においては、オンディレイフラグONDL(i)は必ず“0”に設定されているので、ステップS165における“YES”との判定のもとに、実質的には、ステップS164〜S167の処理が実行される。したがって、経過時間TM(i)が第11時間値T11以上になると、CPU4は、ステップS166にて、“0”を表すデューティ比をキーコードKC(i)と共に駆動制御部3cに出力する。したがって、駆動制御部3cは、キーコードKC(i)により表された鍵310に対応したアクチュエータ330の通電制御を停止する。
この第8状態ST8〜第11状態ST11の制御により、鍵310およびハンマ体HMは図4の状態から図3の状態に変化し、ハンマ体HMの質量部材323の後端部は下側ストッパ313により下方への変位が規制される。この状態は、ユーザが鍵310の押鍵を解除した後の鍵の初期状態に対応する。
前記ステップS166の処理後、CPU4は、ステップS167にて、鍵駆動用テーブル内のチャンネルchiのデータを初期値にクリアする。これにより、駆動イベントデータである次の駆動オンイベントデータの鍵駆動用テーブルへの登録に備える。
なお本実施の形態では、図7のステップS10の処理により、駆動イベントデータとして、駆動オンイベントデータおよび駆動オフイベントデータ以外のイベントデータが読み出されることはないが、何らかの事情で駆動オン/オフイベントデータ以外のイベントデータが読み出された場合、CPU4は、図7のステップS11、すなわち図8の鍵駆動イベント処理サブルーチンのステップS21およびS25にて“NO”とそれぞれ判定して、何もせずにこの鍵駆動イベント処理サブルーチンを終了する。
次に、前記図10のステップS116にて駆動アシスト制御フラグTA(i)が“1”に設定されて、駆動アシスト制御を行う場合について説明する。
駆動アシスト制御フラグTA(i)が“1”に設定されているときには、CPU4は、前記図11のステップS119にて“YES”と判定して、処理を図12のステップS139に進める。そしてCPU4は、ステップS139にて鍵駆動状態ST(i)が第4状態ST4を表しているか否かを判定する。このとき、鍵駆動状態ST(i)は第4状態ST4であるので、CPU4は、ステップS139にて“YES”と判定して、前記ステップS105〜S107などと同様なステップS140〜S142の処理により、駆動制御部3cとの協働により、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を、第4状態ST4に対応したデューティ比に応じたPWM波形で、第4A状態ST4Aの開始タイミングを示す所定の第4As時間値T4Asになるまで通電制御し続ける。そして、経過時間TM(i)が第4As時間値T4Asに達すると、前記と同じアクチュエータ330を、第4A状態ST4Aに対応したデューティ比に応じたPWM波形で通電制御し始める。したがって、キーコードKC(i)により表された鍵310に対応したアクチュエータ330は、時間T4As−T3だけ、第4状態ST4に対応したデューティ比に応じたPWM波形で通電制御され、その後に第4A状態ST4Aに対応したデューティ比に応じたPWM波形の通電制御に切換えられる。
図14(b)は、同図(a)のデューティ比テーブルにおいて、駆動アシスト制御時に切換えられる第4A状態ST4Aに対応したデューティ比の一例を示す図である。同図(b)に示すように、第4A状態ST4Aに対応したデューティ比は、第4状態ST4に対応したデューティ比より十分に大きく設定されている。
次にこの鍵駆動制御処理プログラムが実行されたときには、鍵駆動状態ST(i)は第4A状態ST4Aに設定されているので、CPU4は、ステップS143にて“YES”と判定して、前記ステップS105〜S107などと同様なステップS144〜S146の処理により、駆動制御部3cとの協働により、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を、第4A状態ST4Aに対応したデューティ比に応じたPWM波形で、第4A状態ST4Aの終了タイミングを示す所定の第4Ae時間値T4Aeになるまで通電制御し続ける。そして、経過時間TM(i)が第4Ae時間値T4Aeに達すると、前記と同じアクチュエータ330を、第4状態ST4に対応したデューティ比に応じたPWM波形で通電制御し始める。したがって、キーコードKC(i)により表された鍵310に対応したアクチュエータ330は、時間T4Ae−T4Asだけ、第4A状態ST4Aに対応したデューティ比に応じたPWM波形で通電制御され、その後に第4状態ST4に対応したデューティ比に応じたPWM波形の通電制御に切換えられる。さらにCPU4は、ステップS147にて駆動アシスト制御フラグTA(i)を“0”にリセットする。
次にこの鍵駆動制御処理プログラムが実行されたときには、駆動アシスト制御フラグTA(i)がリセットされた状態で、鍵駆動状態ST(i)が第4状態ST4に設定されているので、CPU4は、前期ステップS119にて“NO”と判定するとともに、前期ステップS120にて“YES”と判定して、前記ステップS121〜S125の処理を行う。CPU4は、このステップS121〜S125の処理により、駆動制御部3cとの協働により、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を、第4状態ST4に対応したデューティ比に応じたPWM波形で、第3スイッチSW3のオンイベントがスキャン部3dによって検出されるまで通電制御し、その後に第5状態ST5に対したデューティ比に応じたPWM波形の通電制御に切換える。第5状態ST5以降の鍵駆動制御処理については、前述した制御処理と同様であるので、その説明は省略する。
以上説明したように、駆動アシスト制御フラグTA(i)が“0”にリセットされているときの基本動作においては、図8のステップS23,S24、図9のステップS31〜S34、図10のステップS101〜S118、図11のステップS119〜S134、図12のステップS148〜S158,図13のステップS159〜S167,S172およびS173の処理により、鍵310の押鍵および離鍵動作を制御するために、アクチュエータ330が図14(a)に示すデューティ比の時間変化に応じて通電制御される。すなわち、アクチュエータ330への通電量および駆動力が時間経過と共に図14(a)に示すデューティ比に比例して制御される。
このデューティ比の変化においては、鍵310およびハンマ体HMの押鍵に対応した押鍵動作の開始時には、図14(a)の第1状態ST1で示すように、アクチュエータ330は中程度のデューティ比で通電制御、すなわち鍵310およびハンマ体HMは中程度の駆動力で駆動制御される。これは、押鍵動作の開始前には駆動部334は基部322から離れており、駆動部334の上端が基部322に接触した際の衝突を小さくするためである。次に、第2状態ST2で、アクチュエータ330は大きなデューティ比で通電制御、すなわち鍵310およびハンマ体HMは大きな駆動力で駆動制御される。次に、第3状態ST3で、デューティ比を若干下げる、すなわち鍵310およびハンマ体HMの駆動力を若干下げるようにした。
第3状態ST3の終了後、第4状態ST4では、アクチュエータ330は中程度のデューティ比で通電制御、すなわち鍵310およびハンマ体HMは中程度の駆動力で駆動制御される。このように、第4状態ST4におけるデューティ比を第3状態ST3におけるデューティ比より小さく設定したのは、第3状態ST3での大きな駆動力により、鍵310およびハンマ体HMには(押鍵方向への)勢い(慣性力)がついているために、駆動力をセーブして省電力化を図るようにしているからである。
第4状態ST4の終了後、第5状態ST5では、中程度のデューティ比をさらに若干下げるようにした。これは、ハンマ体HMの質量部材323の後端部が上側ストッパ312に衝突するときに発生する衝突音を低減させるためである。つまり、第3スイッチSW3のオンイベント、すなわちキーオンイベントが検出されてから、ハンマ体HMの質量部材323の後端部が上側ストッパ312に衝突するまでには、少しストロークがある。したがって、キーオンイベントが検出された直後に、いきなり大きな駆動力を発生させるデューティ比でアクチュエータ330を通電制御すると、上記質量部材323の後端部が勢いを増した状態で上側ストッパ312に衝突するので、衝突音が大きくなってしまう。このため、第5状態ST5におけるデューティ比を第4状態ST4におけるデューティ比よりさらに小さく設定することで、上記衝突音を低減させるようにしている。
第5状態ST5の終了後、第6状態ST6で、アクチュエータ330は再び大きなデューティ比で通電制御、すなわち鍵310およびハンマ体HMは再び大きな駆動力で駆動制御される。これは、ハンマ体HMの質量部材323の後端部の上側ストッパ312への衝突の反発力により、質量部材323が下方へ変位することを防止、すなわち質量部材323のリバウンドを回避するためである。
その後の第7状態ST7では、アクチュエータ330は中程度のデューティ比で通電制御、すなわち鍵310およびハンマ体HMは中程度の駆動力で駆動制御される。第7状態ST7は押鍵維持状態、すなわちハンマ体HMの質量部材323の後端部を上側ストッパ312に接触させ続ける状態であり、この状態は長時間継続することもあり、電力消費の観点からも、押鍵状態を維持できる最低限のデューティ比でアクチュエータ330を通電制御することが望ましいからである。
そして、鍵310の押鍵解除、すなわちハンマ体HMの原位置への復帰時には、最初アクチュエータ330は、第8状態ST8で小さなデューティ比で通電制御、すなわち鍵310およびハンマ体HMは、小さな駆動力で駆動制御される。これは、押鍵解除に伴い、ハンマ体HMの質量部材323を急激に落下させるためである。その後、アクチュエータ330は、第9状態ST9で中低度のデューティ比で通電制御、すなわち鍵310およびハンマ体HMは中程度の駆動力で駆動制御される。そして、第9状態ST9から第11状態ST11まで少しずつ段階的に大きくなるデューティ比で通電制御、すなわち鍵310およびハンマ体HMは少しずつ段階的に大きくなる駆動力で駆動制御され、最終的にデューティ比が“0”、すなわち鍵310およびハンマ体HMの駆動制御が終了する。これらの第9状態ST9から第11状態ST11においてデューティ比(駆動力)を上昇させる理由は、押鍵解除に伴うハンマ体HMの原位置への復帰時において質量部材323の後端の下側ストッパ313への衝突を緩和して衝突に伴う衝撃音の発生を防止するとともに同後部のリバウンドを回避するために、アクチュエータ330はある程度大きな推力を必要とするからである。そして、質量部材323の後端が下側ストッパ313上に完全に静止した後に、アクチュエータ330への通電制御を解除してアクチュエータ330の推力を“0”にするためである。特に、鍵310およびハンマ体HMが原位置に近づくほど、すなわちプランジャ333がボビン331の内底面に近づいてソレノイドコイル332との対向面積が減少するほど、デューティ比(ソレノイドコイル332への通電量)が同じでも、プランジャ333を引き上げる電磁力は減少する。この電磁力の減少を補正するためにも、前記第9状態ST9から第11状態ST11に渡ってデューティ比を大きくする必要がある。
このような押鍵動作における第1状態ST1から第6状態ST6までの制御、押鍵維持動作における第7状態ST7の制御、および離鍵動作における第8状態ST8から第11状態ST11までの制御により、鍵310およびハンマ体HMを、機械的な雑音の発生を低減させつつ、円滑に変位させることができる。
また、前述のようにアクチュエータ330のデューティ比を制御するために、複数のデューティ比テーブルが用意されている。そして、これらの複数のデューティ比テーブルは、鍵310の属する音域(たとえば、低域、中低域、中高域および高域)、白鍵または黒鍵、および千鳥状に配置されたアクチュエータ330の前後位置の組み合わせに応じて用意されているとともに、各鍵310に予め割当てられている。これにより、鍵310毎に適切なデューティ比を用いてアクチュエータ330への通電制御がなされるので、各鍵310や各アクチュエータ330のばらつきの影響を軽減させつつ、鍵盤装置3の構造とは無関係に、いずれの鍵310およびハンマ体HMも適切に駆動される。
なお、この基本動作、すなわち図14(a)に示すデューティ比の時間変化に応じてアクチュエータ330を通電制御する動作は、駆動オンタイミング(あるいは駆動オフタイミング)からの経過時間TMに従って鍵駆動状態STを切換え、この鍵駆動状態STに応じたデューティ比のPWM波形で対応するアクチュエータ330を通電制御する点では、前記特許文献2に記載の基本動作とほぼ同じである。しかし、特許文献2に記載の基本動作では、鍵駆動状態STの切換えを単純に経過時間TMのみに従って行うようにしている(すなわち、完全なフィードフォワード制御によって鍵駆動制御を行っている)のに対して、本実施の形態における基本動作(駆動アシスト制御フラグTA(i)が“0”にリセットされているときの基本動作)では、鍵駆動状態STの一部、具体的には、第4状態ST4、第5状態ST5、第9状態ST9および第10状態ST10への切換えを第1〜第3スイッチSWのオン/オフイベントが検出されたことに従って行うようにしている(すなわち、フィードフォワード制御を基本としつつ、部分的に鍵スイッチSWを用いたフィードバック制御によって鍵駆動制御を行っている)点が異なっている。これにより、本実施の形態の電子ピアノでは、各鍵の押鍵から離鍵に至る全工程をセンシングすることなく、その一部、具体的には、それぞれ独立して発生するダンパオフ(リリース)/オン(ホールド)およびキーオン/オフを検出することで、各鍵の動きを簡易的にフィードバックして押鍵/離鍵動作を制御することができる。したがって、可及的に簡略な鍵盤および駆動装置構成で自動演奏時の鍵盤動作を精度良く制御することが可能となる。
一方、たとえば、アクチュエータ330への通電制御が続き、ソレノイドコイル332が発熱することなどにより、アクチュエータ330の駆動力が低下した状態で、鍵310の押鍵駆動が開始されると、第1スイッチSW1がオンになったときの経過時間TMは第3′時間値T3′以上となって、駆動アシスト制御フラグTAがセットされ、鍵駆動状態STが第4状態ST4の途中で所定時間、第4状態ST4に対応したデューティ比よりも遙かに大きなデューティ比のPWM波形で対応するアクチュエータ330が通電制御される。これにより、アクチュエータ330の低下した駆動力を補って、その後の押鍵駆動を的確に行うことができる。
(2)同一鍵連打動作
次に、同一鍵連打に関係して、同一キーコードKCを有する複数の駆動オンイベントデータおよび駆動オフイベントデータが鍵駆動用データ中から短時間内に読み出された場合について説明する。これは、鍵駆動用データ中に極めて速い同一鍵の連打を表す駆動オンイベントデータおよび駆動オフイベントデータが駆動イベントデータとして予め含まれている場合や、前記テンポ操作子の操作により自動演奏のテンポが速められた場合などに生ずる。
この同一鍵連打動作については、連打の条件別に説明する。連打の条件とは、
(A)駆動オンイベントデータが鍵駆動用データ中から読み出された直後に、当該駆動オンイベントデータと同一キーコードKCを有する駆動オフイベントデータが鍵駆動用データ中から読み出された場合(以下、「駆動オン直後の駆動オフ」という)
(B)上記(A)駆動オン直後の駆動オフの直後に、さらに当該駆動オンイベントデータおよび駆動オフイベントデータと同一キーコードKCを有する駆動オンイベントデータが鍵駆動用データ中から読み出された場合(以下、「駆動オン直後の駆動オフ・オン」という)
(C)駆動オフイベントデータが鍵駆動用データ中から読み出された直後に、当該駆動オフイベントデータと同一キーコードKCを有する駆動オンイベントデータが鍵駆動用データ中から読み出された場合(以下、「駆動オフ直後の駆動オン」という)
(D)上記(C)駆動オフ直後の駆動オンの直後に、さらに当該駆動オフイベントデータおよび駆動オンイベントデータと同一キーコードKCを有する駆動オフイベントデータが鍵駆動用データ中から読み出された場合(以下、「駆動オフ直後の駆動オン・オフ」という)
(E)上記(D)駆動オフ直後の駆動オン・オフの直後に、当該駆動オフイベントデータおよび駆動オンイベントデータと同一キーコードKCを有する駆動オンイベントデータが鍵駆動用データ中から読み出された場合(以下、「駆動オフ直後の駆動オン・オフ・オン」という)
である。本発明の特徴は、「基本動作」がなされたときも「同一鍵連打動作」がなされたときも、基本的に異ならない。つまり、「同一鍵連打動作」がなされたときに特有な鍵駆動制御処理はなされていない。しかし、図10〜図13の鍵駆動制御処理プログラムには、「同一鍵連打動作」についての制御処理も記載されているので、以下、上記(A)〜(E)の連打条件のうち、(A)および(C)の条件がそれぞれ成立したときになされる「同一鍵連打動作」について説明する。
(A)駆動オン直後の駆動オフ
この駆動オン直後の駆動オフは、具体的には、駆動オンイベントデータが鍵駆動用データ中から読み出された後、鍵駆動状態ST(i)が第7状態ST7に達する前に、当該駆動オンイベントデータと同一のキーコードKCを有する駆動オフイベントデータが鍵駆動用データ中から読み出された場合である。この場合、前記図9の鍵駆動オフ処理サブルーチンにおいて、CPU4は、ステップS35にて“YES”、すなわち駆動オフイベントデータに含まれるキーコードKCと同一キーコードKCを記憶したチャンネルchiの鍵駆動状態ST(i)が第1〜第6状態ST1〜ST6のいずれかであると判定する。そして、CPU4は、ステップS36にて、前記チャンネルchiのオフディレイフラグOFDL(i)を“1”に設定する。
この状態で、図10〜図13の鍵駆動制御処理プログラムの実行により、経過時間TM(i)が増加して、鍵駆動状態ST(i)が第6状態ST6の終了時を表す第6時間値T6に達すると、CPU4は、図11のステップS131の処理後のステップS132にて、前記“1”に設定したオフディレイフラグOFDL(i)に基づいて“NO”と判定して、ステップS135〜S138の処理を実行する。ステップS135においては、鍵駆動状態ST(i)を第8状態ST8に設定する。ステップS136においては、経過時間TM(i)を第8状態ST8の開始時(すなわち第7状態ST7の終了時)を表す第7時間値T7(第6時間値T6に等しい)に設定する。ステップS137においては、キーコードKC(i)が予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図14(a)参照)内の第8状態ST8に対応したデューティ比をキーコードKC(i)と共に駆動制御部3cに出力する。駆動制御部3cは、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を前記デューティ比に応じたPWM波形で通電制御する。ステップS138においては、オフディレイフラグOFDL(i)を“0”にリセットする。
このような処理により、鍵駆動状態ST(i)が第1状態ST1〜第6状態ST6のいずれかである状態で、同一キーコードKCに関する駆動オフイベントデータが読み出されると、第6状態ST6の終了時まで待って、鍵駆動状態ST(i)は第7状態ST7を飛ばして第8状態ST8に変更される。したがってこの場合には、駆動オフイベントデータが読み出されてから、ハンマ体HMの質量部材323の後端部の回動が上側ストッパ312により規制された状態になるまで待った後、鍵310およびハンマ体HMの原位置への復帰制御が開始されることになる。これにより、楽音信号の発生タイミングとは異なるものの、鍵310の押鍵動作および離鍵動作が確実に行われる。また、楽音信号の発生から短時間内に鍵310の離鍵動作が開始されるので、視覚的にも不自然ではない。
(C)駆動オフ直後の駆動オン
この駆動オフ直後の駆動オンは、具体的には、駆動オンイベントデータが鍵駆動用データ中から読み出された後、鍵駆動状態ST(i)が第11状態ST11を終了する前に、当該駆動オフイベントデータと同一のキーコードKCを有する駆動オンイベントデータが鍵駆動用データ中から読み出された場合である。この場合、駆動オンイベントデータの読み出し時期が第8状態ST8から第11状態ST11のいずれに属するかにより制御が異なるが、本実施の形態では、駆動オフ直後の駆動オンがあった場合に、通常の鍵駆動制御、つまり第1状態ST1から第11状態ST11に至るまでに順次なされる鍵駆動制御とは異なる制御がなされることが分かればよいので、以下、第11状態ST11で駆動オンイベントデータが鍵駆動用データ中から読み出された場合のみを例に挙げて説明する。
この場合、前記図8の鍵駆動イベント処理サブルーチンのステップS27の再打鍵処理において、CPU4は、駆動オンイベントデータに含まれるキーコードKCを記憶したチャンネルchiの鍵駆動状態ST(i)が第11状態ST11であるときに、オンディレイフラグONDL(i)を“1”に設定する。そして、経過時間TM(i)が第11状態ST11の終了時に達すると、CPU4は、前記図13の鍵駆動制御処理プログラムのステップS165にて“NO”、すなわちオンディレイフラグONDL(i)が“0”でないと判定して、ステップS168以降の処理を実行する。
CPU4は、ステップS168にて鍵駆動状態ST(i)を第2状態ST2に設定し、ステップS169にて経過時間TM(i)を第1状態ST1の終了時を表す時間値T1に設定する。そして、CPU4は、ステップS170にて、駆動オンイベントデータに含まれているキーコードKCが予め割当てられているデューティ比テーブルを探し出して、同探し出したデューティ比テーブル(図14(a)参照)内の第2状態ST2に対応したデューティ比をキーコードKCと共に駆動制御部3cに出力する。そして、CPU4は、ステップS171にてオンディレイフラグONDL(i)を“0”にリセットしておく。駆動制御部3cは、キーコードKCにより表された鍵310に対応したアクチュエータ330を前記デューティ比に応じたPWM波形で通電制御する。
このような処理により、鍵駆動状態ST(i)が第11状態ST11で、同一キーコードKCに関する駆動オンイベントデータが読み出されると、鍵駆動状態ST(i)が第11状態ST11を終了するまで待って、鍵駆動状態ST(i)が第2状態ST2に変更される。したがって、この場合には、駆動オフイベントデータの読み出し直後の駆動オンイベントデータの読み出しにより、鍵310およびハンマ体HMは、離鍵動作の終了後、鍵駆動状態ST(i)の途中から(第1状態ST1からではなく、第2状態ST2から)押鍵動作に入る。これにより、楽音信号の発生タイミングとは僅かに異なるものの、鍵310の離鍵動作および押鍵動作が確実に行われ、視覚的にも不自然ではない。
(3)変形例
さらに、本発明の実施にあたっては、上記実施の形態に限定されるものではなく、本発明の目的を逸脱しない限りにおいて種々の変更が可能である。
図15は、本実施の形態の第1の変形例の鍵駆動制御処理プログラムの一部手順を示すフローチャートであり、同図中、前記図10および図11中のステップと同一処理を行うステップには同一ステップ番号を付している。
図15において、鍵駆動状態ST(i)が第3状態ST3で、第1スイッチSW1のオンイベントが検出されると、CPU4は、ステップS112〜S118の処理を実行した後、ステップS201にて経過時間TM(i)を第3時間値T3とする。その後、経過時間TM(i)が第4D時間値T4D以上になると、CPU4は、ステップS211にて“YES”と判定し、ステップS212にて鍵駆動状態ST(i)を第4D状態ST4Dに変更する。そしてCPU4は、ステップS213にて、キーコードKC(i)が予め割当てられているデューティ比関数DR(t)を探し出して、同探し出したデューティ比関数DR(t)(図16(a)参照)の第3時間値T3に対応したデューティ比DR(T3)をキーコードKC(i)と共に駆動制御部3cに出力する。駆動制御部3cは、キーコードKC(i)により表された鍵310に対応したアクチュエータ330を前記デューティ比に応じたPWM波形で通電制御する。これにより、図16(b)に示すように、鍵駆動状態STが第4D状態ST4Dのときのデューティ比は、押鍵駆動を開始してから第1スイッチSW1がオンになるまでの経過時間T3の値(この値は、押鍵の速さを表している)に応じて変動する。図16(a)では、デューティ比関数DR(t)として非線形増加関数を例示しているが、これに限らず、線形増加関数を採用するようにしてもよい。ただし、経過時間tが長い程、デューティ比を大きくする方が好ましいので、減少関数を採用するのは現実的でない。
なお、図16(b)の例では、押鍵の速さに応じて押鍵時の鍵駆動制御を行うようにしたが、これに限らず、離鍵の速さに応じて離鍵時の鍵駆動制御を行うようにしてもよい。具体的には、離鍵駆動を開始してからの経過時間tに応じてデューティ比が変動するデューティ比関数DR′(t)を定義しておき、第2スイッチSW2がオフになるまでの経過時間T8−T7の値、あるいは離鍵駆動を開始してから第1スイッチSW1がオフになるまでの経過時間T9−T7の値に対応するデューティ比をこのデューティ比関数DR′(t)から求め、このデューティ比をその後の鍵駆動状態ST、つまり第10状態ST10あるいは第11状態ST11のデューティ比とする。あるいは、第2スイッチSW2がオフしてから第1スイッチSW1がオフするまでの経過時間T9−T8の値に対応するデューティ比を所定のデューティ比関数から求め、このデューティ比をその後の鍵駆動状態ST、つまり第10状態ST10あるいは第11状態ST11のデューティ比としてもよい。
このように第1の変形例では、鍵の押離鍵位置だけでなく、その押離鍵の速さにも基づいて鍵駆動制御を行うようにしたので、さらに精度のよい鍵駆動制御を行うことが可能となる。
図17は、本実施の形態の第2の変形例の鍵駆動制御処理プログラムの一部手順を示すフローチャートであり、同図中、前記図10および図11中のステップと同一処理を行うステップには同一ステップ番号を付している。
図17において、鍵駆動状態ST(i)が第3状態ST3で、第1スイッチSW1のオンイベントが検出されると、CPU4は、ステップS112〜S118の処理を実行した後、ステップS301にて経過時間TM(i)を第3時間値T3とし、ステップS302にて、キーコードKC(i)が予め割当てられている第5時間値関数T5(t)を探し出して、同探し出した第5時間値関数T5(t)(図18(a)参照)の第3時間値T3に対応した第5時間値T5(T3)を第5時間値T5とする。この第5時間値T5は、ステップS311にて、第5状態ST5から第6状態ST6への切換えの判断に用いられているので、第5状態ST5の終了時を規定する。つまり第5状態ST5の終了時は、押鍵駆動を開始してから第1スイッチSW1がオンになるまでの経過時間T3の値(この値は、押鍵の速さを表している)に応じて変動する(図18(b)参照)。
なお、図18(b)の例では、押鍵の速さに応じて押鍵時の鍵駆動制御を行うようにしたが、これに限らず、離鍵の速さに応じて離鍵時の鍵駆動制御を行うようにしてもよい。具体的には、離鍵駆動を開始してからの経過時間tに応じて第10時間値T10あるいは第11時間値T11が変動する第10時間値関数T10(t)あるいは第11時間値関数T11(t)を定義しておき、第2スイッチSW2がオフになるまでの経過時間T8−T7の値、あるいは離鍵駆動を開始してから第1スイッチSW1がオフになるまでの経過時間T9−T7の値に対応する第10時間値T10あるいは第11時間値T11をこの第10時間値関数T10(t)あるいは第11時間値関数T11(t)から求め、この第10時間値T10あるいは第11時間値T11を前記図13のステップS160あるいはS164の判定で用いるようにする。
このように第2の変形例でも、鍵の押離鍵位置だけでなく、その押離鍵の速さにも基づいて鍵駆動制御を行うようにしたので、さらに精度のよい鍵駆動制御を行うことが可能となる。
なお、上述した実施の形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムまたは装置に供給し、そのシステムまたは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
この場合、記憶媒体から読出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードおよび該プログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、たとえば、フレキシブルディスク、ハードディスク、光磁気ディスク、CD−ROM、CD−R、CD−RW、DVD−ROM、DVD−RAM、DVD−RW、DVD+RW、磁気テープ、不揮発性のメモリカード、ROMなどを用いることができる。また、通信ネットワークを介してサーバコンピュータからプログラムコードが供給されるようにしてもよい。
また、コンピュータが読出したプログラムコードを実行することにより、上述した実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOSなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。