(57)【特許請求の範囲】
【請求項１】
演奏操作子の位置を一定のサンプリング間隔で検出する位置検出手段と、
前記位置検出手段の検出位置と複数のしきい値とを比較し、この比較結果を認識する比較結果認識手段と、
前記演奏操作子が所定の状態のいずれにあるかを決定する際に、前の状態と前記比較結果認識手段の認識内容とに応じて決定する動作を繰り返す状態決定手段と、
前記状態決定手段が決定した状態に基づいて楽音の制御を行う制御手段と
を具備することを特徴とする楽音制御装置。
【請求項２】
前記状態決定手段は、前記演奏操作子が所定の状態のいずれにあるかを決定する際に、前の状態、前記比較結果認識手段の認識内容、および前の状態の継続時間に応じて決定することを特徴とする請求項１記載の楽音制御装置。
【請求項３】
前記操作子は鍵盤楽器のキーであり、前記しきい値はキーオフ近傍の領域に複数設定され、前記制御手段は、離鍵時において前記状態決定手段が決定した状態に基づきリリースレートを制御することを特徴とする請求項１または２記載の楽音制御装置。
【請求項４】
楽音を発音する音源手段をさらに具備し、
前記制御手段は、発音制御情報に基づいて前記音源手段による楽音の発音を制御し、
前記制御手段は、前記状態決定手段によって前の状態とは異なる状態に決定されたとき、新たな発音制御情報を求め、求めた新たな発音制御情報が更新条件を満たした場合には、既に設定されている発音制御情報を前記新たな発音制御情報に更新し、更新後の前記新たな発音制御情報に基づいて前記音源手段による楽音の発音を制御することを特徴とする請求項１または２記載の楽音制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、鍵盤楽器のキーなどの動きに応じて楽音を制御する楽音制御装置に関する。
【０００２】
【従来の技術】
周知のように、近年にあっては、記録した演奏情報（あるいは外部から供給される演奏情報）に応じて自動演奏する自動演奏ピアノが各種実用化されている。この自動演奏ピアノにおいては、キーの動きを検出するためのキーセンサが設けられ、演奏記録時においてキーの挙動を検出するようにしている。
また、所定の機構を作動させることにより、ハンマーの打弦を抑制して消音させる消音ピアノも開発されているが、この消音ピアノでは、消音時にはキーの動きをキーセンサによって検出し、これにより電子的に楽音を発生するようにしている。
【０００３】
ここで、図２９に従来のキーセンサの構成を示す。図において、１はキーであり、下部にシャッタ２が設けられている。３はキーセンサであり、２つのフォトセンサ４ａ，４ｂを設けている。これらフォトセンサ４ａ，４ｂは、図示のように所定距離隔てて設けられており、各々は対向する発光素子からの光を受光するようになっている。
【０００４】
上記構成においては、フォトセンサ４ａ，４ｂの受光状態から次の３つの状態が認識できる。すなわち、
▲１▼フォトセンサ４ａ，４ｂがともに受光状態、
▲２▼フォトセンサ４ａが受光状態、フォトセンサ４ｂが遮光状態、
▲３▼フォトセンサ４ａ，４ｂが共に遮光状態
の３状態である。
そして、▲１▼〜▲３▼のいずれの状態に遷移したかにより、キーオンおよびキーオフが検出される。
【０００５】
なお、図２９には、検出箇所が２カ所ある２点センサを示したが、検出点を増やした多点センサも開発されている。この場合には、検出点の数に応じて認識し得る状態の数が増える。
【０００６】
【発明が解決しようとする課題】
しかしながら、上述した従来のキーセンサは、決まった検出位置での情報しか得られないため、位置精度が十分でないという欠点があった。さらに、キーセンサの取付位置によって検出位置が決まってしまうので、その取付精度が要求されるという問題があった。
【０００７】
ところで、キーの上下動に応じたアナログ信号を出力するセンサを設け、このセンサの出力値をソフトウエアによって処理することにより、検出点の位置をしきい値として設定するピアノが開発されている（ＵＳＰ５００１３３９，ＵＳＰ５２３１２８３）。このピアノによれば、検出点の位置はセンサ取付後に任意に設定することができるので、センサ取付精度は要求されない。
【０００８】
しかしながら、上述した各従来例においては、キーがどの検出点（あるいはしきい値）を通過したか否かによって直接的に発音制御を行っているため、不自然な発音がなされることがある。
例えば、ピアノにおいては、キーをゆっくり押下してある深さまで達すると、その後さらに押下してもハンマーが打弦せず、発音されないのが通常であるが、上述した各従来装置においては、キーがある検出点（しきい値）を超えると必ず発音されてしまうという問題があった。
【０００９】
また、ピアノにおいては、離鍵するとダンパーが弦を押さえて消音するが、この際、キーの操作によっては、ダンパーと弦とが触れたり離れたりし、また、その触れ方も一様ではない。したがって、楽音の減衰レートは一定ではない。一方、上述した従来装置においては、楽音のリリース時の減衰レートは一定であり、キー操作が反映されないという欠点があった。
【００１０】
この発明は、上述した事情に鑑みてなされたもので、極めて自然な発音制御を行うことができる楽音制御装置を提供することを目的としている。また、この発明の他の目的は、リリース時の楽音制御をより自然なものにすることができる楽音制御装置を提供することにある。
【００１１】
【課題を解決するための手段】
上記課題を解決するために、請求項１に記載の発明においては、演奏操作子の位置を一定のサンプリング間隔で検出する位置検出手段と、前記位置検出手段の検出位置と複数のしきい値とを比較し、この比較結果を認識する比較結果認識手段と、前記演奏操作子が所定の状態のいずれにあるかを決定する際に、前の状態と前記比較結果認識手段の認識内容とに応じて決定する動作を繰り返す状態決定手段と、前記状態決定手段が決定した状態に基づいて楽音の制御を行う制御手段とを具備することを特徴とする。
【００１２】
また、請求項２に記載の発明においては、前記状態決定手段は、前記演奏操作子が所定の状態のいずれにあるかを決定する際に、前の状態、前記比較結果認識手段の認識内容、および前の状態の継続時間に応じて決定することを特徴とする。
【００１３】
請求項３に記載の発明にあっては、請求項１または２記載の楽音制御装置において、前記操作子は鍵盤楽器のキーであり、前記しきい値はキーオフ近傍の領域に複数設定され、前記制御手段は、離鍵時において前記状態決定手段が決定した状態に基づきリリースレートを制御することを特徴とする。
また、請求項４に記載の発明にあっては、請求項１または２記載の楽音制御装置において、楽音を発音する音源手段をさらに具備し、前記制御手段は、発音制御情報に基づいて前記音源手段による楽音の発音を制御し、前記制御手段は、前記状態決定手段によって前の状態とは異なる状態に決定されたとき、新たな発音制御情報を求め、求めた新たな発音制御情報が更新条件を満たした場合には、既に設定されている発音制御情報を前記新たな発音制御情報に更新し、更新後の前記新たな発音制御情報に基づいて前記音源手段による楽音の発音を制御することを特徴とする。
【００１４】
（作用）
前の状態と操作子位置に応じて新たな状態が決定され、制御手段は、このように決定された状態に応じて楽音を制御する。したがって、操作子位置によって単純に楽音制御する場合にくらべ、多様で自然な制御が行われる（請求項１〜３）。
また、状態を決定する際に、前の状態の継続時間をも参照すると、よりきめ細かな状態把握を行うことができる（請求項２）。
さらに、キーオフ近傍の領域に複数のしきい値を設定してより細かな状態決定を行い、これに基づいてリリースレートを制御することにより、自然楽器のリリース状態を良好に模倣することができる（請求項３）。
【００１５】
【発明の実施の形態】
Ａ：実施形態の構成
以下、図面を参照してこの発明の実施形態について説明する。なお、この実施形態は、本発明を消音機構付きの自動ピアノに適用した例である。
図２は、本実施形態におけるキーの構造を示す側面図である。図において、１０はキーであり、バランスピンＢＰを中心に揺動する。このキー１０の下部には、板状のシャッタＫＳが設けられており、シャッタＫＳの下方にはセンサボックスＳＢが設けられている。センサボックスＳＢは、棚板１１の上面に取り付けられており、キー１０の位置に応じた量だけシャッタＫＳが進入するようになっている。
【００１６】
ここで、図３はセンサボックスＳＢの内部を示す概略図であり、図において２２１は発光側センサヘッドである。この発光側センサヘッド２２１は、光ファイバを介してＬＥＤ２２４から光を供給されて、直径約５ｍｍ程度の光ビームを出力する。２２２は、受光側センサヘッドであり、発光側センサヘッド２２１が照射する光ビームを受光する。その受けられた光は、光ファイバを介してフォトダイオード２２５へ送られ、そのフォトダイオード２２５は光量に応じた信号Ｓａを出力する。
【００１７】
この場合、発光側センサヘッド２２１から照射される光ビームは、シャッタＫＳの位置に応じた分だけ遮蔽されるようになっており、この結果、受光側センサヘッド２２２の受光量はシャッタＫＳの位置、すなわち、キー１０の位置に応じて変化する。したがって、フォトダイオード２２５の出力信号Ｓａは、キー１０の位置を反映するアナログ値となり、例えば、図４に示すような特性となる。なお、この図においてレスト位置とは、キー１０の初期位置であり、また、エンド位置とはキー１０を押し切った位置である。
ところで、図１、図２および図５に示すＳＯＬは、ソレノイドであり、励磁されるとプランジャＰ・ＳＯＬが突出してキー１０の右端側（演奏者に対して奥側）を押し上げ、演奏者による押鍵と同様の鍵動作を行わせる。
【００１８】
次に、図５は、この実施形態におけるピアノアクションの構成を示す側面図である。本実施形態においては、押鍵に応じた打弦を行う通常演奏モードと、押鍵があっても打弦を抑止して弦から発音させない消音演奏モードとがあり、以下、図５を参照して、各モードにおけるピアノアクションの動作について説明する。
【００１９】
（１）通常演奏時の動作
押鍵が行われると、ウイペン２３はキャプスタン１２によって突き上げられ、ピン２２ａを中心として時計回りに回動する。これにより、ジャック大２６ａがバット４１を突き上げてハンマーアッセンブリ４０（バット４１、ハンマー４４、キャッチャー４６等からなる）を時計回りの方向へ回転させ、ハンマー４４が弦Ｓを打撃する。この打弦操作時において、ジャック２６は、その回動途中にジャック小２６ｂがレギュレーティングボタン３４に当接することにより、時計方向への回動が阻まれる。一方、ウイペン２３は回動を継続しているため、ジャック２６は、レギュレーティングボタン３４を支点としてウイペン２３に対して反時計方向へ相対的に回動し、これにより、ジャック大２６ａの上端面がバット４１の下面から図中左方向へ逃げ、バット４１との非当接位置に移動する。そして、ハンマー４４による打弦後のハンマーアッセンブリ４０の回動復帰の動作は、キャッチャー４６がバックチェック３８に当接することにより一時的に停止され、その間にジャック２６は、キー１０の復帰動作に伴うウイペン２３の回動復帰に連動し、ジャック大２６ａの上端部は再びバット４１の下部に入り込み、次の打弦動作を可能にする。
【００２０】
（２）消音演奏時の動作
次に、消音演奏状態にするには、所定の操作を行ってストッパー６６を実線で示す水平状態から回転させて下方へ向けて鎖線で示す状態にする。本実施形態においては、ストッパー６６はアクチュエータ７７（図１参照）によって駆動されるが、これに代えて、ストッパー６６に連動するレバーやペダルを設けておき、これらを操作することによってストッパー６６を回転させてもよい。また、本実施形態においては、ストッパー６６は、キャッチャー４６の回動を阻止することで、ハンマーアッセンブリ４０全体の回動を阻止するようにしているが、ハンマーアッセンブリ４０の他の部分を阻止することでハンマーアッセンブリ４０全体の回動を阻止するようにしてもよい。
【００２１】
さて、ストッパー６６が回転した状態で押鍵が行われると、ウイペン２３はキャプスタン１２によって突き上げられ、ピン２２ａを中心として時計回りに回動する。これにより、ジャック大２６ａがバット４１を突き上げてハンマーアッセンブリ４０を時計回りの方向へ回転させる。次に、ジャック小２６ｂがレギュレーティングボタン３４に当接することにより、ジャック大２６ａの上端面がバット４１の下面から図中左方向に逃げる。その間、ハンマーアッセンブリ４０は慣性力で回動を続けるが、弦Ｓに当たる手前でキャッチャー４６がストッパー６６に当接し、反時計回りの方向へ跳ね返される。その後のハンマーアッセンブリ４０等の復帰動作は通常演奏の場合と同様である。なお、消音演奏時においては、電子的に楽音が形成されるが、これについては後述する。
上述した通常演奏時および消音演奏時における押鍵は、演奏者による押鍵であっても、また、ソレノイドＳＯＬによる押鍵であっても、全く同様の動作となる。
【００２２】
次に、図１は、本実施形態の制御回路の構成を示すブロック図である。図において、２０１は装置各部を制御するＣＰＵであり、２０２はプログラムや各種テーブルが記憶されているＲＯＭである。２０３は各種データが一時記憶されるワーキングエリアや、各種処理に用いられるテーブルが設定されているＲＡＭである。
２０４は種々のスイッチが設けられているパネルスイッチ部であり、この中には前述した通常演奏と消音演奏を切り換えるための通常／消音切替スイッチＳＷが設けられている。ここで、通常／消音切替スイッチＳＷが押されると、そのスイッチ信号がＣＰＵ２０１に検出され、この結果、ＣＰＵ２０１はアクチュエータ駆動回路２０８を制御してアクチュエータ７７を回動させる。これにより、ストッパー６６が図５に示す鎖線の位置に移動し、消音演奏モードになる。そして、通常／消音切替スイッチＳＷを再び押すと、ＣＰＵ２０１はアクチュエータ駆動回路２０８を制御して、アクチュエータ７７を反対方向に駆動させる。この結果、ストッパー６６は図５に示す実線位置に戻り、通常演奏モードになる。このように、通常／消音切替スイッチＳＷを押す毎に、通常演奏モードと消音演奏モードとが交互に切り替わる。
【００２３】
次に、２１０は音源回路であり、ＣＰＵ２０１から供給されるキー番号（キーコードともいう）、ベロシティ（押鍵の強さに対応したデータ）、キーオン信号ＫＯＮ、キーオフ信号ＫＯＦおよびリリースレートＲＬ等に基づいてピアノ音の楽音信号を生成し、スピーカＳＰまたはヘッドホンＨＨに供給する。
この場合、キーオン信号ＫＯＮが供給されると、アタック、ディケイ、サステインの各部分のエンベロープ制御を行い、さらに、リリース期間のエンベロープ制御としてリリースレートＲＬに基づく減衰制御を行う。なお、楽音信号の振幅（音量）は、ベロシティＫＶに基づいて制御される。
また、音源回路２１０は、１６個の発音チャンネルを有しており、これにより、１６音の同時発音が可能になっている。
【００２４】
次に、２２３は、前述したフォトダイオード２２５（図３参照）の出力信号をデジタル信号に変換するＡ／Ｄ変換器であり、その出力信号はＣＰＵ２０１に読み取られるようになっている。本構成では、センサマトリックス方式が採用されており、１２個のＬＥＤ２２４と８個のフォトダイオード２２５を使って８８鍵分のデータ（８８＜１２×８）を読み取るようになっている。すなわち、１２個のＬＥＤ２２４は、各々８個の発光側センサヘッド２２１に接続されており、また、各発光側センサヘッド２２１に対応する受光側センサヘッド２２２は、各々フォトダイオード２２５に接続される。この時、１つのフォトダイオードが１２個の受光側センサヘッドを受け持つように接続される。
そして、ある１つのＬＥＤだけを点灯させ、その時の８個のフォトダイオードの出力を読み、次に、また別のＬＥＤを１つだけ点灯させて８個のフォトダイオードの出力を読むというように順次データを獲得する。また、本構成ではハードウエアの制約から、一度に４個のフォトダイオードの出力をＡ／Ｄ変換するようになっている。これら受発光センサヘッド２２１、２２２、ＬＥＤ２２４、およびフォトダイオード２２５等でフォトセンサを構成している。
【００２５】
ＣＰＵ２０１は、Ａ／Ｄ変換器２２３によってデジタル値に変換された各キーの位置情報に基づいて各キーの状態を認識し、これに基づいて、ベロシティ、キーオン信号ＫＯＮ、キーオフ信号ＫＯＦおよびリリースレートＲＬを生成する。また、ＣＰＵ２０１は、スキャン操作に応じて、いずれのキーについての位置情報かを認識し、これに基づいてキー番号ＫＮを出力する。
【００２６】
次に、２５０はＦＤドライバであり、フロッピーディスク２５１に対して、演奏情報の書込／読出を行う。この場合の演奏情報は、前述したベロシティ、キー番号ＫＮ、キーオン信号ＫＯＮ、キーオフ信号ＫＯＦおよびリリースレートＲＬであり、ＭＩＤＩ情報に変換されて書き込まれる。また、フロッピーディスク２５１から読み出された演奏情報は、ＲＡＭ２０３に一旦格納された後、楽曲の進行に応じて読み出され、ソレノイド駆動回路２６０に供給される。ソレノイド駆動回路２６０は、演奏情報に応じたソレノイド駆動信号を作成し、ソレノイドＳＯＬに供給する。これによって、各キー毎に設けられているソレノイドＳＯＬが駆動され、演奏情報に基づいた自動演奏が行われる。
【００２７】
Ｂ：実施形態の動作
（１）しきい値設定動作
次に、上述した構成によるこの実施形態の動作について説明するが、始めに、キーストロークの所定位置に設定されるしきい値について説明する。
この実施形態においては、しきい値を超えたことが検出された時刻や位置に基づいて、後述するキー・ステートの決定やベロシティの決定などが行われる。また、この実施形態においては、キー・ステートに基づいて、楽音制御が行われるようになっており、このため、しきい値の設定は極めて重要な事項となる。
【００２８】
ここで、しきい値には、図６に示すように、レスト位置からエンド位置へ向けて順次設定されるＫ１〜Ｋ４と、しきい値Ｋ２とＫ３との間に設定されるＫ２Ａとがある。上述したしきい値Ｋ１〜Ｋ４およびＫ２Ａは、キー・ステートの決定に用いられ、特に、しきい値Ｋ２Ａは、リリース時におけるエンベロープ制御にも用いられる。なお、図６に示す曲線Ｃ１は、一般的なキー軌跡の一例である。
【００２９】
始めに、装置に電源が投入されると、ＣＰＵ２０１は、各レジスタやＲＡＭ２０３を初期化し、また、割込処理を許可した後に、以下のようなしきい値設定動作を行う（図１７のステップＳＰ１，２参照）。
まず、ＣＰＵ２０１は、Ａ／Ｄ変換器２２３によってデジタルデータに変換されたフォトダイオード２２５の出力信号を、４キー分ずつ受け取る。ここで、ＣＰＵ２０１は、４キー分ずつのＡ／Ｄ変換情報を、第０〜第２３の検出チャンネルのデータとして受け取る。なお、この実施形態のキー数は８８鍵であるから、実際には第０〜第２１の検出チャンネルを設定すれば足りるが（２２×４＝８８）、ハードウエアの関係から０〜９５を１周期とするため、第０〜第２３の検出チャンネルが設定されている。
【００３０】
さて、電源投入直後においては、全てのキーは押されていない状態にあるから、ＣＰＵ２０１が受け取るデータは、全て各キーのレスト位置のデータとなる。次に、ＣＰＵ２０１は、各キーのレスト位置に対して所定の演算を行い、しきい値Ｋ１〜Ｋ４およびＫ２Ａを算出する。
【００３１】
この実施形態の場合は、レスト位置データをＸｒとした場合に、所定の係数ｒｉ（ｉ＝１〜４および２Ａ）を乗算することによって各しきい値を得る。すなわち、
Ｋ１＝Ｘｒ×ｒ１
Ｋ２＝Ｘｒ×ｒ２
Ｋ３＝Ｘｒ×ｒ３
Ｋ４＝Ｘｒ×ｒ４
Ｋ２Ａ＝Ｘｒ×ｒ２Ａ
という演算によって各しきい値が求められる。各係数ｒ１〜ｒ４およびｒ２Ａは、キーの状態を識別するのに適した値が実験等によって求められ、例えば、白鍵と黒鍵のそれぞれについて、実験値の平均が設定される。
【００３２】
以上の演算によって求められた各しきい値は、ＲＡＭ２０３の所定エリアに記憶される。ここで、図７に、ＲＡＭ２０３内に設定されているキー情報用のテーブルを示す。この図においてはマトリックス状に表示してあり、横方向にはキー番号が示されている。ただし、実際のキーは第０番から第８７番までであるが、各キーの現在位置を示すＫＥＹ−ＰＯＳの行（詳細は後述）には、ハードウエアの関係上、第９５番までのキー番号が付されている。
【００３３】
また、図に示すＫＥＹ−ＲＳＴの行は、キーのレスト位置情報が記憶される行であり、上述した処理によってＣＰＵ２０１が読み取った各キーのレスト位置情報は、対応するキー番号のエリアに記憶される。同様に、ＴＨＲ−Ｋ１、ＴＨＲ−Ｋ２、ＴＨＲ−Ｋ３、ＴＨＲ−Ｋ４およびＴＨＲ−Ｋ２Ａの行は、各々しきい値Ｋ１，Ｋ２，Ｋ３，Ｋ４およびＫ２Ａを記憶する行であり、上述の演算によって求められた各しきい値が、対応するキー番号のエリアに記憶される。
また、ＫＥＹ−ＳＴＡＴＥの行は、キー・ステート（キーの状態）が記憶される行であり、また、ＴＢＬ−ＮＵＭはテーブルナンバーが記憶される行である。テーブルナンバーとは、押下されたキーについての発音を制御するための発音制御テーブルのナンバーである。この実施形態においては、音源回路２１０の１６個の発音チャンネル（同時発音可能チャンネル）に合わせて、第０〜第１５の発音制御テーブルが用意されている。すなわち、発音制御テーブルによって指示された発音情報が、１６個の発音チャンネルに適宜割り当てられて発音される。
【００３４】
ここで、図８に発音制御テーブルの内容を示す。この発音制御テーブルは、ＲＡＭ２０３内の所定エリアに設けられ、後述する処理によってその内容が適宜書き込まれるようになっている。また、図８においてはマトリックス状に表示してあり、横方向にはテーブル番号が示されている。そして、ＫＥＹ−ＮＵＭの行には、テーブルが割り当てられたキーの番号が書き込まれ、ＯＶＲ−Ｋ１〜ＯＶＲ−Ｋ３には、しきい値Ｋ１〜Ｋ３を越えたときのキーの位置が各々書き込まれるようになっている。同様にして、ＯＶＫ１−ＴＩＭ〜ＯＶＫ３−ＴＩＭの行には、しきい値Ｋ１〜Ｋ３を越えたときの時刻（検出時刻）が書き込まれるようになっている。この実施形態においては、各キーの位置情報は、所定のタイミングで検出するようにしており（図１３参照）、このため、各キーがしきい値に達するタイミングと検出タイミングとが一致するとは限らない。そこで、上述のように、各キーがしきい値を越えたときの位置と時刻とを対にして記憶するようにしている。また、上述の時刻データは、２バイトのデータ長になっている。
【００３５】
（２）ベロシティの基本演算
次に、図８に示すＶＥＬＯＣＩＴＹの行には、ベロシティ（押鍵速度に対応）が書き込まれる。この場合のベロシティの基本的な算出は、以下のようにして行われる。
【００３６】
まず、あるしきい値Ｋｉ（ｉ＝１〜３）を超えたときのキー位置をｄ１とし、それより大きいしきい値Ｋｊ（ｊ＝２〜４，ｊ＞ｉ）を超えたときのキー位置をｄ２とする。また、これらのしきい値を超えたときの時刻を各々ｔ１、ｔ２とすると、ＣＰＵ２０１においては、まず、以下の計算を行う。
（ｄ１−ｄ２）×２８÷（レスト位置データ）×２８＝（正規化された変位）
ここで、ｄ１−ｄ２はキーの移動距離（変位）である。ｄ１からｄ２を減算しているのは、キー位置データがレスト位置からエンド位置に向かって小さくなるように出力されるからである。また、レスト位置データで除しているのは、各キーのレスト位置のばらつきを正規化するためであり、２８を乗じているのは時刻データのバイト数（２バイト）と合わせるためである。
以上のようにして、正規化された変位が演算されると、これを時刻データの差（移動時間）で除して速度を求める。すなわち、次の演算を行う。
（正規化された変位）÷（ｔ２−ｔ１）÷２８＝（速度データ）
なお、この演算において２８で除しているのは、データ長を再び１バイトに戻すためである。
【００３７】
次に、ＣＰＵ２０１は、以上のようにして求められた鍵の速度を表す速度データを、図１１に示すテーブルＴＢ２を参照してハンマーの打弦速度を表すハンマーベロシティに変換する。テーブルＴＢ２は、速度データｘに対し、所定の演算に従う変換曲線によって、キーについての速度データをＭＩＤＩ規格によるハンマーベロシティに変換するとともに、フォトセンサの非線形特性を補正する。実際には、これら２つの変換を同時に行うような変換曲線が設定されている。この場合、このテーブルＴＢ２は、ＲＯＭ２０２内に設定されている。
【００３８】
次に、図１１に示すテーブルＴＢ３−２〜ＴＢ３−４は、各々ダウンカウント値出力テーブルであり、テーブルＴＢ２が出力するベロシティに基づき、当該ベロシティでハンマーが運動を続けた場合の打弦までの時間データ（ダウンカウント値）を出力する。打弦までの時間は、キー速度を算出したときの位置、すなわち、どのしきい値を通過していたかによって異なる。このため、上述のｄ２がどのしきい値を超えたときのデータであるかによって、ダウンカウント値出力テーブルＴＢ３−２〜ＴＢ３−４のいずれかが選択される。すなわち、しきい値Ｋ２、Ｋ３、Ｋ４に対応して、ダウンカウント値出力テーブルＴＢ３−２、ＴＢ３−３、ＴＢ３−４が適宜選択される。
【００３９】
さて、テーブルＴＢ２から出力されるベロシティおよびダウンカウント値出力テーブルＴＢ３−２〜ＴＢ３−４から出力されるダウンカウント値は、各々図８に示すＶＥＬＯＣＩＴＹおよびＤＷＮ−ＣＮＴＲの行に書き込まれる。この場合、ベロシティは、キーが新たなしきい値を通過すると再計算されるが（詳細は後述）、再計算によるベロシティの方が大きい場合にのみ、該当するエリアの値が更新される。また、ダウンカウント値は、所定の周期でダウンカウントされ、その値が「０」になると、そのキーについてのキー番号とベロシティが音源回路２１０に供給されて発音されるようになっている。
【００４０】
（３）各種処理ルーチンの関係
次に、各種処理ルーチンについて説明するが、始めに、各ルーチンの時間的な関係について説明する。この実施形態においては、メインルーチン（分岐するルーチンを含む）、Ａ／Ｄ割込みルーチンおよびタイマ割込みルーチンがあり、それぞれのタイミング的関係は、図１２に示すようになっている。ここで、同図に示す（ロ）がメインルーチンの処理タイミングである。メインルーチンは、発音制御における主な処理を行うルーチンであり、大半の処理はここにおいて行われる。
【００４１】
次に、同図（イ）は、タイマ割込みルーチンであり、１００μｓ毎に割込で起動される。このルーチンは、時間計測に用いられるタイマ値を更新する処理や、上述したダウンカウント値を減算する処理を行う。また、同図（ハ）は、Ａ／Ｄ割込みルーチンであり、約１ｍｓｅｃ毎に割込で起動される。このＡ／Ｄ割込みルーチンは、フォトダイオード２２５の出力信号を４キー分ずつ読み込む処理を行う。前述のタイマ割込み処理ルーチンとＡ／Ｄ割込み処理ルーチンとが競合する場合は、タイマ割込み処理ルーチンが優先される。これはタイマ割込み処理ルーチンが所定周期で起動されないと、タイマの値に誤差が生じるからである。
なお、図１２は、各処理ルーチンの動作タイミングを模式的に示すもので、それらの処理時間の割合を示すものではない。以下、各処理について、順次詳細に説明する。
【００４２】
（４）タイマ割込み処理
図１４はタイマ割込み処理を示すフローチャートである。まず、図に示すステップＳＰａ１においては、タイマの値を１増加させる。この場合、タイマはＣＰＵ２０１内のレジスタによって構成されている。すなわち、図１０に示すＣＰＵ２０１内のレジスタセットのうち、レジスタＥ６がタイマとして機能する。
【００４３】
ここで、図１０に示す各レジスタについて説明すると、図示のように、Ｅｎ（ｎ＝０〜６）、ＲｎＨ（ｎ＝０〜６）、およびＲｎＬ（ｎ＝０〜６）の合計２１個が設定されている。これらのうち本実施形態で特に機能を決めて使用しているのは、上述のレジスタＥ６（タイマ）の他、以下の６つである。
【００４４】
まず、メインルーチン（詳細は後述）に関連して、レジスタＥ５にはＡ／Ｄ変換の時刻が書き込まれ、レジスタＲ３Ｈにはキー・ステート（キーの状態）が書き込まれ、レジスタＲ３Ｌにはキーの現在位置が書き込まれ、レジスタＲ４Ｌにはテーブル番号が書き込まれ、レジスタＲ５Ｌにはキー番号が書き込まれる。そして、レジスタＲ６ＬにはＡ／Ｄ変換を行うチャンネルが書き込まれる。なお、その他のレジスタは、汎用レジスタとして使用される。
【００４５】
さて、ステップＳＰａ１の処理は、タイマ割込みが起動される毎に行われるから、タイマ値は１００μ毎に１つずつ増加する。したがって、タイマ値は、現在時刻を示す値となる。
次に、ステップＳＰａ２に進み、タイマ値が８の倍数であるか否かが判定される。この判定が「ＮＯ」の場合はそのままメインルーチンへ復帰し、「ＹＥＳ」の場合はステップＳＰａ３へ進む。この場合、ステップＳＰａ２の判定は、８００μｓ毎に「ＹＥＳ」となる。
【００４６】
次に、ステップＳＰａ３においては、図８に示す各発音制御テーブルのダウンカウント値（ＤＷＮ−ＣＮＴＲの行の各値）を各々１減算し、減算後の値が０の発音制御テーブルがあれば、音源回路２１０に対応するＭＩＤＩ信号を出力する。すなわち、ダウンカウント値が０となったキーに対応するベロシティ、キー番号ＫＮおよびキー音信号ＫＯＮを音源回路２１０の空きチャンネルに出力する。この結果、音源回路２１０はキー番号ＫＮに応じた音高で、かつ、ベロシティに応じたエンベロープを有する楽音を発生する。
【００４７】
また、ステップＳＰａ３においては、ダウンカウント値が０になったキーについては、そのキー・ステートをＳＯＵＮＤにし、図７に示すＫＥＹ−ＳＴＡＴＥ行の該当エリアを書き換える。さらに、そのキーについてのテーブル番号（図７に示すＴＢＬ−ＮＵＭ行に書かれる番号）をクリアし、発音制御テーブルを解放する。すなわち、今まで当該キーが使用していた発音制御テーブルを解放し、他のキーの使用を許可する。ここで、キー・ステートがＳＯＵＮＤであるということは、そのキーについては発音がなされていることを意味する。
【００４８】
次に、ステップＳＰａ４に進み、タイマ値が８１９２の倍数か否かが判定される。この判定が「ＮＯ」の場合は、メインルーチンに復帰し、「ＹＥＳ」の場合はステップＳＰａ５に進む。この場合、ステップＳＰａ４は、８１９．２ｍｓ毎に「ＹＥＳ」となる。
そして、ステップＳＰａ５においては、第０〜第１５の各発音制御テーブル毎に設けられたタイムオーバー検知用カウンタを各々１増加させる。タイムオーバー用カウンタは、ＲＡＭ２０３内に設定されており、そのカウント内容に基づいてキー・ステートがｔｉｍｅ  ｏｖｅｒか否かが判断される。この場合、ｔｉｍｅ  ｏｖｅｒとは、キー・ステートが所定時間以上継続したことを示す。なお、タイムオーバーカウンタについては、図示を省略する。
【００４９】
（５）Ａ／Ｄ割込み処理
次に、Ａ／Ｄ割込み処理について図１３を参照して説明する。Ａ／Ｄ変換器２２３は、ＣＰＵの動きと並行して動作しており、４キー分のＡ／Ｄ変換が終わると割込み要求を発生し、これによりＣＰＵは、Ａ／Ｄ割込み処理を開始する。まず、ステップＳＰｂ１においては、Ａ／Ｄ変換処理を停止させ、また、次のチャンネルのＬＥＤ２２４を点灯させる。
【００５０】
次に、ステップＳＰｂ２へ進み、４キー分の位置データを、図７に示すＫＥＹ−ＰＯＳ行の対応するエリアに書き込む。また、タイマ値（レジスタＥ６の値）を図９に示すテーブル（ＫＥＹ−ＴＩＭ行のみ）に書き込む。この場合の書き込みは、現在読み込んだ検出チャンネル番号に対応するエリアに行われる。図９に示すテーブルは、各検出チャンネルについての検出時刻（Ａ／Ｄ変換時刻）を記憶するテーブルであり、ＲＡＭ２０３内に設けられている。
【００５１】
次に、ステップＳＰｂ３に進み、検出チャンネルの番号を１インクリメントし（ただし、「２３」の次は「０」）、Ａ／Ｄ変換をスタートさせて、メインルーチンに復帰する。ここで、上記処理におけるＡ／Ｄ変換のスタート／ストップのタイミングについては、図１２の（ハ）、（ニ）に示す。
【００５２】
（６）メインルーチン
次に、メインルーチン（分岐されるルーチンを含む）について説明する。このメインルーチンにおいては、キー・ステートを適宜設定する処理が行われるので、理解のために、まず、キー・ステート設定の概略について説明する。
【００５３】
図１５は、キーの軌跡の一例を示す図であり、図においては、時刻ｔ１においてレスト位置にあったキーが時刻ｔ２，ｔ３，ｔ４，ｔ５において、それぞれしきい値Ｋ１，Ｋ２，Ｋ３，Ｋ４を通過し、時刻ｔ６においてエンド位置に達している。このような軌跡は、一般的な押鍵の軌跡である。そして、この実施形態における原則的なキー・ステートは、キーがレスト位置からしきい値Ｋ１の間にあるときにＵＰＰＥＲ、しきい値Ｋ１を超えるた場合にＴＯＵＣＨ−Ａ、しきい値Ｋ２を超えた場合にＣＯＵＮＴ−ＤＯＷＮ−０、しきい値Ｋ３を超えた場合にＣＯＵＮＴ−ＤＯＷＮ−１、しきい値Ｋ４を超えた場合にＣＯＵＮＴ−ＤＯＷＮ−２としている。また、発音がなされた場合のキー・ステートは、前述のようにＳＯＵＮＤとする。
【００５４】
また、時刻ｔ６からｔ７においてエンド位置にあったキーが離鍵され、時刻ｔ８，ｔ９，ｔ１０においてしきい値Ｋ４，Ｋ３，Ｋ２を通過した場合は、しきい値Ｋ２を通過するまではキー・ステートはＳＯＵＮＤを維持し、しきい値Ｋ２を通過した後にキーオフされてキー・ステートがＨＯＬＤになる。すなわち、離鍵過程にあるキーが、しきい値Ｋ２を通過したときは、キー・ステートはＨＯＬＤとなる。
【００５５】
また、時刻ｔ１０でＨＯＬＤとなったキーが、その後、レスト位置に戻ることなく再び押下されてしきい値Ｋ２を超えると、キー・ステートはＴＯＵＣＨ−Ｂとなる。一方、ＴＯＵＣＨ−Ｂとなったキーが、その状態を所定時間以上維持すると、キー・ステートはＴＩＭＥ−ＯＶＥＲとなる。
また、押鍵速度が早い場合には、キー位置のサンプリング間隔において、２以上のしきい値を通過することがあり、この場合のキー・ステートはＣＯＵＮＴ−ＤＯＷＮ−３としている。図１６は、このような押鍵があった場合の軌跡を示しており、この軌跡において、前回のサンプリングにおけるキー位置が点Ｐ１であり、今回のサンプリングにおけるキー位置が点Ｐ２であることが検出されると、ＣＯＵＮＴ−ＤＯＷＮ−３となる。同様に、前回サンプリング位置がＰ３で、今回サンプリング位置がＰ４の場合も、キー・ステートはＣＯＵＮＴ−ＤＯＷＮ−３となる。
【００５６】
以上がこの実施形態におけるキー・ステート設定の概略であるが、実際には前のキー・ステートやその継続時間などによって適宜決定される。上述の説明はあくまで原則的なものである。次に、各処理ルーチンについて説明する。
【００５７】
ａ：メインルーチン
図１７は、メインルーチンの処理内容を示すフローチャートであり、電源が投入されると、ステップＳＰ１の初期化およびステップＳＰ２におけるしきい値計算処理が行われる。なお、これらの処理内容については、前述した「しきい値設定動作」の項において説明したので省略する。
【００５８】
次に、ステップＳＰ３に進むと、図１０に示すレジスタＲ５Ｌに１を加える。ただし、レジスタＲ５Ｌの内容が「８７」であれば０にする。すなわち、レジスタＲ５Ｌは、これから処理を行おうとするキーのキー番号が書き込まれるレジスタであり、０〜８７までを循環する必要があるため、ステップＳＰ３において歩進するようにしている。
【００５９】
次に、ステップＳＰ５に進み、レジスタＲ５Ｌが示すキーについてのＡ／Ｄ変換された位置データおよびＡ／Ｄ変換時刻をＲＡＭ２０３のテーブルのＫＥＹ−ＰＯＳ行（図７参照）およびＫＥＹ−ＴＩＭ行（図９参照）から読み込み、レジスタＲ３ＬおよびＥ５に各々書き込む。この場合、前述したＡ／Ｄ割込み処理によって各テーブルには所定のデータが書き込まれている。そして、ステップＳＰ６に進み、図７に示すＫＥＹ−ＳＴＡＴＥ行から当該キーのキー・ステートを読み出し、図１０に示すレジスタＲ３Ｈに書き込む。
【００６０】
次いで、ステップＳＰ７〜ＳＰ１２においては、レジスタＲ３Ｈに書き込まれたキー・ステートがＵＰＰＥＲか、ＣＯＵＮＴ−ＤＯＷＮか（ＣＯＵＮＴ−ＤＯＷＮ１〜３のいずれかか）、ＴＯＵＣＨ−Ａか、ＳＯＵＮＤか、ＨＯＬＤか、あるいはＴＩＭＥ−ＯＶＥＲかが判断され、「ＹＥＳ」であれば、それぞれに対応したステップ（分岐ルーチン）ＳＰ１３，１４，１５，１６，１７あるいはＳＰ１８に進む。また、ステップＳＰ７〜１２の全てにおいて「ＮＯ」と判断された場合は、そのキー・ステートはＴＯＵＣＨ−Ｂであるので、ステップＳＰ１９に進んでＴＯＵＣＨ−Ｂルーチンに入る。
そして、各分岐ルーチンであるステップＳＰ１３〜ＳＰ１９のいずれかに進んだ後、それらの処理が終了すると、再び、ステップＳＰ３に戻り、レジスタＲ５Ｌ内のキー番号を更新し、次のキーについて上述の処理を行う。このように、各キーについて、順次そのキー・ステートに対応した処理が行われる。次に、各分岐処理について説明する。
【００６１】
ｂ：ＵＰＰＥＲルーチン
図１８はＵＰＰＥＲルーチンの処理内容を示すフローチャートであり、ステップＳＰｃ１においては、レジスタＲ３Ｌのキー位置データがそのキーのしきい値Ｋ１を超えたか否かが判定される。この判定が「ＮＯ」の場合は、メインルーチンに戻り、ステップＳＰ３に進んで次のキーについての処理を開始する。これは、当該キーについては、キー・ステートＵＰＰＥＲのまま変化しておらず、特に処理を行う事項がないからである。
【００６２】
一方、ステップＳＰｃ１の判定が「ＹＥＳ」の場合は、ステップＳＰｃ２に進んで、発音制御テーブルの確保を行う。すなわち、キーが押されたと認識し、発音制御のための準備を開始する。ここで、テーブルの空きがあれば、当該テーブル番号をレジスタＲ４Ｌに書き込んでステップＳＰｃ３に進むが、空きテーブルがない場合は、メインルーチンに戻る。これは、本実施形態においては、１６音まで同時発音可能にしているが、１６の発音制御テーブルが全て使用中であれば、それ以上の発音制御は不可能だからである。
【００６３】
次に、ステップＳＰｃ３においては、レジスタＲ３Ｌ内のキー位置データが、しきい値Ｋ２を超えたか否かが判断される。この判定が「ＮＯ」の場合は、キーがしきい値Ｋ１だけを超えた場合であり、キー・ステートがＵＰＰＥＲからＴＯＵＣＨ−Ａに変化した場合である。そこで、ステップＳＰｃ４に進み、図７に示すＫＥＹ−ＳＴＡＴＥ行の該当するエリアをＵＰＰＥＲからＴＯＵＣＨ−Ａに書き換える。また、ステップＳＰｃ４においては、そのキーが割当てられた発音制御テーブルに対応するタイムオーバー検知用のカウンタをクリアするとともに、レジスタＲ３Ｌ内のキー位置データおよびレジスタＥ５にある時刻データを、図８に示す発音制御テーブルのＯＶＲ−Ｋ１行およびＯＶＫ１−ＴＩＭ行の当該キー番号のエリアに書き込む。これにより、当該キーについて、しきい値Ｋ１を超えたときの位置と時刻が記憶される。
【００６４】
一方、ステップＳＰｃ３の判定が「ＹＥＳ」の場合は、サンプリング間隔内において、しきい値Ｋ１とＫ２を一度に超えた場合である（図１６のＰ１，Ｐ２参照）。そこで、ステップＳＰｃ５に進み、図７に示すＫＥＹ−ＳＴＡＴＥ行の該当するエリアをＵＰＰＥＲからＣＯＵＮＴ−ＤＯＷＮ−３に書き換える。また、キー・ステートがＣＯＵＮＴ−ＤＯＷＮ−３の場合は、キーが最高速度で押されたと判断して、ベロシティとしての最高値「７Ｆ」をＶＥＬＯＣＩＴＹ行（図８参照）の該当するエリアに書き込み、さらに、このベロシティを基にダウンカウント値を求め、ＤＷＮ−ＣＮＴＲ行の該当するエリアに書き込む。この場合、ダウンカウント値は、前述したＴＢ３−２（図１１参照）を用いて求められるが、ベロシティはテーブルＴＢ２を用いずに予め設定された最高値を設定する。
上述したステップＳＰｃ４またはＳＰｃ５の処理の後はメインルーチンにリターンし、次のキーについての処理を開始する。
【００６５】
ｃ：ＴＯＵＣＨ−Ａルーチン
図１９は、ＴＯＵＣＨ−Ａルーチンの処理内容を示すフローチャートである。先ず、ステップＳＰｄ１においては、ｔｉｍｅ  ｏｖｅｒか否かが判断される。この判断は、タイムオーバー検知用カウンタの値が予め定められた所定値を超えたか否かによって判断される。タイムオーバー検知用カウンタは、図１４に示すステップＳＰａ５においてタイマ割込み処理毎に歩進されるので、所定値に達する前にリセットされないとタイムオーバーとなる。そして、ステップＳＰｄ１の判定が「ＹＥＳ」の場合には、ステップＳＰｄ２に進み、獲得していた発音制御テーブルを解放するとともに、図７に示すＫＥＹ−ＳＴＡＴＥ行の該当するエリアをＴＯＵＣＨ−ＡからＨＯＬＤに書き換えてメインルーチンにリターンする。
【００６６】
このように、ステップＳＰｄ１→ＳＰｄ２と移行するときは、ＴＯＵＣＨ−Ａの状態が所定時間以上継続する場合であり、キーが浅く押された位置で長時間止まっている状態と認識される。このような押鍵操作は、そのキーに指を乗せているだけで、しばらく押鍵されない可能性が高いので、この実施形態においては、上述のように、発音制御テーブルを解放して当該キーの発音準備を解除し、他のキーの発音処理を優先させるようにしている。なお、キー・ステートがＨＯＬＤとなった場合でも、その状態からキーを押下すれば、後述する処理によって発音される。
【００６７】
一方、ステップＳＰｄ１において「ＮＯ」と判定された場合は、ステップＳＰｄ３に進み、しきい値Ｋ３を超えたか否かが判定され、「ＮＯ」であれば、ステップＳＰｄ４に進んでしきい値Ｋ２を超えたか否かが判定される。この判定が「ＹＥＳ」であれば、キーがしきい値Ｋ２を超えた場合であり、キー・ステートがＴＯＵＣＨ−ＡからＣＯＵＮＴ−ＤＯＷＮ−０に変化した場合である。そこで、ステップＳＰｄ５に進み、図７に示すＫＥＹ−ＳＴＡＴＥ行の該当するエリアをＴＯＵＣＨ−ＡからＣＯＵＮＴ−ＤＯＷＮ−０に書き換える。また、ステップＳＰｄ５においては、レジスタＲ３Ｌ内のキー位置データおよびレジスタＥ５にあるＡ／Ｄ変換の時刻データを、図８に示す発音制御テーブルのＯＶＲ−Ｋ２行およびＯＶＫ２−ＴＩＭ行の当該キー番号のエリアに書き込む。これにより、当該キーについて、しきい値Ｋ２を超えたときの位置と時間が記憶される。また、ステップＳＰｄ５に至る場合は、図１８に示すステップＳＰｃ４を経過しているから、しきい値Ｋ１を超えたときの位置と時刻がＲＡＭ２０３のテーブルに記憶されている。そこで、ステップＳＰｄ５においては、前述した数式に基づいて速度データを算出し、かつ、図１１に示すテーブルＴＢ２を用いてベロシティを求める。また、テーブルＴＢ３−２を用いてダウンカウント値を求め、ベロシティとともに発音制御テーブル（図８参照）の所定エリアに書き込む。
【００６８】
一方、ステップＳＰｄ３において、「ＹＥＳ」と判定された場合は、サンプリング間隔内において、しきい値Ｋ２とＫ３を一度に超えた場合である（図１６のＰ３，Ｐ４参照）。そこで、ステップＳＰｄ６に進み、図７に示すＫＥＹ−ＳＴＡＴＥ行の該当するエリアをＴＯＵＣＨ−ＡからＣＯＵＮＴ−ＤＯＷＮ−３に書き換える。また、ベロシティとしての最高値「７Ｆ」をＶＥＬＯＣＩＴＹ行（図８参照）の該当するエリアに書き込み、さらに、このベロシティを基にダウンカウント値を求め、ＤＷＮ−ＣＮＴＲ行の該当するエリアに書き込む。この処理は、前述したステップＳＰｃ５と同様である。
【００６９】
一方、ステップＳＰｄ４において「ＮＯ」と判断された場合は、ステップＳＰｄ７に進み、キーがしきい値Ｋ１を超えているか否かが判定される。この判定が「ＹＥＳ」の場合は、キーはいぜんとしてＴＯＵＣＨ−Ａの状態を維持している場合であるから、何もせずにメインルーチンに戻る。また、ステップＳＰｄ７において「ＮＯ」と判定された場合は、ステップＳＰｄ８に進み、獲得していた発音制御テーブルを解放するとともに、図７に示すＫＥＹ−ＳＴＡＴＥ行の該当するエリアをＴＯＵＣＨ−ＡからＵＰＰＥＲに書き換えてメインルーチンにリターンする。
【００７０】
このように、ステップＳＰｄ８に至るときは、ＴＯＵＣＨ−ＡからＵＰＰＥＲに戻る場合であり、言い換えれば、キーが浅く押された直後に離された場合である。このような押鍵操作では、通常のピアノでは発音されないので、この実施形態においては、上述のように、発音制御テーブルを解放して当該キーの発音準備を解除し、他のキーの発音処理を優先させるようにしている。
【００７１】
ｄ：ＣＯＵＮＴ−ＤＯＷＮルーチン
次に、ＣＯＵＮＴ−ＤＯＷＮルーチンについて図２０を参照して説明する。まず、ステップＳＰｅ１においては、キー位置（レジスタＲ３Ｌ内のキー位置データ）がしきい値Ｋ２を超えているか否かが判定される。この判定が「ＮＯ」の場合には、しきい値Ｋ２を一旦超えたキーが戻された場合であるので、発音準備を停止すべく、ステップＳＰｅ２に移って発音制御テーブルを解放する。そして、ステップＳＰｅ３において、キーがしきい値Ｋ１を超えているか否かが判定され、「ＮＯ」であれば、レスト位置かそれに近い位置まで戻された場合であるから、ステップＳＰｅ４に進んでキー・ステートをＵＰＰＥＲとする。すなわち、図７に示すＫＥＹ−ＳＴＡＴＥ行の該当するエリアをＣＯＵＮＴ−ＤＯＷＮ（０〜３）からＵＰＰＥＲに書き換える。
【００７２】
また、ステップＳＰｅ３において「ＹＥＳ」と判定された場合は、ステップＳＰｅ５に進んで、ＫＥＹ−ＳＴＡＴＥ行の該当するエリアをＣＯＵＮＴ−ＤＯＷＮ（０〜３）からＨＯＬＤに書き換える。
一方、ステップＳＰｅ１において「ＹＥＳ」と判定された場合には、ステップＳＰｅ６に進み、ＣＯＵＮＴ−ＤＯＷＮ−２，３か否かが判定される。この判定が「ＹＥＳ」の場合には、以下の処理を行わず、そのままリターンする。ステップＳＰｅ６の判定が「ＮＯ」の場合には、ステップＳＰｅ７に進み、レジスタＲ３Ｌ内のキー位置データがしきい値Ｋ３を超えたか否かが判断される。この判断が「ＮＯ」の場合は、キーはしきい値Ｋ２〜Ｋ３の間にある場合なので、いぜんとして図１９のステップＳＰｄ５で設定したキー・ステートＣＯＵＮＴ−ＤＯＷＮ−０のままであると認識されるので、何の処理も行わずリターンする。
【００７３】
一方、ステップＳＰｅ７において「ＹＥＳ」と判定された場合は、ステップＳＰｅ８に進んでしきい値Ｋ４を超えたか否かが判定される。このステップＳＰｅ８において「ＮＯ」と判定された場合は、ステップＳＰｅ１２に進み、キー・ステートがＣＯＵＮＴ−ＤＯＷＮ−０か否かが判定される。この判定が「ＹＥＳ」の場合は、キーがしきい値を一つ超えてＣＯＵＮＴ−ＤＯＷＮ−１に移行したと考えられるので、ステップＳＰｅ１３に移って、キー・ステートをＣＯＵＮＴ−ＤＯＷＮ−１に変更するとともに、しきい値Ｋ１、Ｋ３を超えたときの位置および時刻に基づいてベロシティおよびダウンカウント値を求める。そして、新たに求めたベロシティが、発音制御テーブルに記憶されているベロシティより大きければ、新たに求めたベロシティおよびダウンカウント値に書き換える。これは、キーの押下が加速されたと認識されるので、それに対応させるためである。
【００７４】
なお、ステップＳＰｅ１３における演算において、しきい値Ｋ１を超えた場合の位置および時刻は、発音制御テーブルから得るが、しきい値Ｋ３を超えたときの位置および時刻は、現在位置および時刻であるから、レジスタＲ３Ｌ、Ｅ５（図１０参照）から読み出す。
また、ステップＳＰｅ１２において「ＮＯ」と判定された場合は、既に設定されたＣＯＵＮＴ−ＤＯＷＮ−１がそのまま維持されていると考えられるので、直ちにリターンする。
【００７５】
一方、ステップＳＰｅ８において「ＹＥＳ」と判定された場合は、キー・ステートがＣＯＵＮＴ−ＤＯＷＮ−０か否かが判定される。この判定が「ＹＥＳ」のときは、サンプリング期間の間に、２つのしきい値Ｋ３，Ｋ４を超えた場合であるから、ステップＳＰｅ１０に進んでキー・ステートをＣＯＵＮＴ−ＤＯＷＮ−３に更新し、最大ベロシティおよびこれに対応するカウントダウン値を発音制御テーブルに書き込む。
【００７６】
また、ステップＳＰｅ９において「ＮＯ」と判定された場合には、ステップＳＰｅ１１に進み、キー・ステートをＣＯＵＮＴ−ＤＯＷＮ−２に更新するとともに、しきい値Ｋ２、Ｋ４を超えたときの位置および時刻に基づいてベロシティおよびダウンカウント値を求める。そして、新たに求めたベロシティが、発音制御テーブルに記憶されているベロシティより大きければ、新たに求めたベロシティおよびダウンカウント値に書き換える。これは、キーの押下が加速されたと認識されるので、それに対応させるためである。
なお、ステップＳＰｅ１３の場合と同様に、しきい値Ｋ２を超えた場合の位置および時刻は、発音制御テーブルから得るが、しきい値Ｋ４を超えたときの位置および時刻は、現在位置および時刻であるから、レジスタＲ３Ｌ、Ｅ５（図１０参照）から読み出す。
ところで、スタッカートのように押鍵後直ちに離鍵されるような演奏の場合に、ステップＳＰｅ２に至る可能性があり、発音されないこともある。しかしこのようなケースは希であると考えられるため、本実施形態では他のキーの発音処理を優先させている。しかしながら、このようなケースにおいても発音を有効とさせた方がよい場合には、ダウンカウント値が書き込まれている発音制御テーブルについては解放しないように制御してもよい。
【００７７】
ｅ：ＳＯＵＮＤルーチン
次に、図２１を参照してＳＯＵＮＤルーチンについて説明する。このサウンドルーチンが実行されるのは、前述した各処理において設定されたダウンカウント値が、図１４に示すタイマ割込みのステップＳＰａ３の処理で減算され、その値が０となって発音処理が開始されてキー・ステートがＳＯＵＮＤとなった後である。
【００７８】
さて、図２１に示すステップＳＰｆ１においては、キーがしきい値Ｋ２を超えているか否かが判定される。この判定が「ＮＯ」の場合は、ステップＳＰｆ２に進み、音源回路２１０に対してキーオフ信号ＫＯＦ（ＭＩＤＩ  ＯＦＦ）を出力する。この結果、音源回路２１０は、当該キーについての発音を急速ダンプさせて消音する。そして、ステップＳＰｆ３に進み、キー位置がしきい値Ｋ１を越えているか否かを判定する。この判定が「ＮＯ」の場合は、ステップＳＰｆ４に進んで、キー・ステートをＵＰＰＥＲにしてリターンし、また、「ＹＥＳ」の場合はキー・ステートをＨＯＬＤにしてリターンする。
【００７９】
一方、ステップＳＰｆ１の判定が「ＹＥＳ」の場合には、ステップＳＰｆ６に進んで、リリース・ルーチンの処理を行う。ここで、図２２はリリース・ルーチンの処理を示すフローチャートである。始めに、ステップＳＰｇ１において、キー・ステートがＳＯＵＮＤ  ０か否かが判定される。ところで、キー・ステートＳＯＵＮＤは、ＳＯＵＮＤ  ０とＳＯＵＮＤ  １の２つのステートがある。前述した図１４のステップＳＰａ３で設定されるキー・ステートは、実際にはＳＯＵＮＤ  ０である。したがって、発音が開始されたときのキー・ステートはＳＯＵＮＤ  ０になっている。このため、リリースルーチンに移行した際のステップＳＰｇ１の判定は、当初は「ＹＥＳ」になり、ステップＳＰｇ４に進む。ステップＳＰｇ４においては、キーがしきい値２Ａを超えているか否かが判定され、「ＹＥＳ」であれば未だ深い押鍵位置にあるので、なにもせずにリターンする。一方、ステップＳＰｇ４の判定が「ＮＯ」の場合には、押鍵位置がしきい値Ｋ２Ａより浅くなっているので、ＳＰｇ５に進み、キー・ステートをＳＯＵＮＤ  １に変更するとともに、リリースレートＲＬをダンピングが大きい値（Ａ×××０１（ＭＩＤＩ信号の一例））に書き換える。この結果、音源回路２１０においては、当該キーの発音のリリースエンベロープにおける減衰レートが大きくなり、その音は自然減衰より若干早く減衰する。
【００８０】
一方、ステップＳＰｇ１の判定が「ＮＯ」の場合（キー・ステートとしてＳＯＵＮＤ  １が設定されている場合）には、ステップＳＰｇ２に進み、キー位置がしきい値Ｋ２Ａを超えているか否かが判定される。この判定が「ＮＯ」の場合には、押鍵位置が浅くＳＯＵＮＤ  １のままであると認識されるので、そのままリターンする。また、ステップＳＰｇ２の判定が「ＹＥＳ」の場合は、押鍵位置が深くなっている場合であり、ステップＳＰｇ３に進み、キー・ステートをＳＯＵＮＤ  ０に変更し、リリースレートをダンピングが小さい値（Ａ×××００（ＭＩＤＩ信号の一例））にする。この結果、当該キーの発音のリリースエンベロープにおける減衰レートが小さくなり、その音は自然減衰と同様の速度で減衰する。
【００８１】
したがって、押鍵の深さが変化すると、リリースルーチンによってリリースレートが切り替わり、微妙なリリース制御が行われる。アコースティックピアノにおいては、ダンパが弦を押さえることによって消音が行われるが、演奏の仕方によってはダンパと弦とが触れたり離れたりし、また、その触れ方も一様ではない。従って、上述のようにキーの位置によってリリースレートを制御すると、実際のピアノのダンパ動作による音の消え入り方を模倣することができる。
【００８２】
ｆ：ＨＯＬＤルーチン
次に、ＨＯＬＤルーチンについて図２４を参照して説明する。始めに、ステップＳＰｉ１において、キー位置がしきい値Ｋ２を超えているか否かが判定され、「ＮＯ」であれば、ステップＳＰｉ２に移ってキー位置がしきい値Ｋ１を超えているか否を判定する。このステップＳＰｉ２の判定が「ＹＥＳ」の場合は何もせずにリターンする。これは、キー・ステートＨＯＬＤは、一旦しきい値Ｋ２より深く押鍵されたキーが、再びＫ２より浅い位置（ただし、しきい値Ｋ１よりは深い位置）まで戻されたとき、あるいはしきい値Ｋ２以下でＫ１を超える領域に所定時間以上止まっていた場合に設定されるステートであるから、ＳＰｉ２で「ＹＥＳ」となるときは状態の変化は生じていないと判断されるからである。また、ステップＳＰｉ２で「ＮＯ」と判定された場合は、キー位置がレスト位置に近く、極めて浅くなった場合であるから、キー・ステートをＵＰＰＥＲに変更してリターンする（ステップＳＰｉ３）。
【００８３】
一方、ステップＳＰｉ１において「ＹＥＳ」と判定された場合、すなわち、キーが再びしきい値Ｋ２より深く押下された場合は、ステップＳＰｉ４に進み、発音制御テーブルを確保して発音の準備に入る。ただし、空きテーブルがない場合はリターンする。
【００８４】
次に、ステップＳＰｉ５に進むと、キー位置がしきい値Ｋ３を超えたか否かが判定され、「ＹＥＳ」であれば、サンプリング期間に２つのしきい値Ｋ２，Ｋ３を超えた場合であるので、キー・ステートをＣＯＵＮＴ−ＤＯＷＮ−３にするとともに、最大値のベロシティおよびこれに応じたダウンカウント値を設定してリターンする（ステップＳＰｉ６）。また、ステップＳＰｉ５の判定が「ＮＯ」の場合は、ステップＳＰｉ７に進み、キー・ステートをＴＯＵＣＨ−Ｂとするとともに、タイムオーバー検知用カウンタをクリアする。また、ステップＳＰｉ７においては、レジスタＲ３Ｌ内のキー位置データおよびレジスタＥ５にある時刻データを、図８に示す発音制御テーブルのＯＶＲ−Ｋ２行およびＯＶＫ２−ＴＩＭ行の当該キー番号のエリアに書き込む。これにより、当該キーについて、しきい値Ｋ２を超えたときの位置と時刻が記憶される。
【００８５】
ｇ：ＴＯＵＣＨ−Ｂルーチン
次に、ＴＯＵＣＨ−Ｂルーチンについて図２５を参照して説明する。まず、ステップＳＰｊ１においては、ｔｉｍｅ  ｏｖｅｒか否か、すなわち、タイムオーバー検知用カウンタが所定値を超えたか否かが判定される。この判定が「ＹＥＳ」の場合には、発音テーブルを解放して他のキーの発音を優先させ、また、キーステートをＴＩＭＥ−ＯＶＥＲに書き換える（ステップＳＰｊ２）。
【００８６】
一方、ステップＳＰｊ１の判定が「ＮＯ」の場合は、ステップＳＰｊ３に進んで、キー位置がしきい値Ｋ４を超えているか否かが判定される。この判定が「ＹＥＳ」の場合は、サンプリング期間に２つのしきい値Ｋ３，Ｋ４を超えた場合だから、キー・ステートをＣＯＵＮＴ−ＤＯＷＮ−３にするとともに、最大値のベロシティおよびこれに応じたダウンカウント値を設定してリターンする（ステップＳＰｊ４）。
【００８７】
また、ステップＳＰｊ３で「ＮＯ」と判定された場合は、ステップＳＰｊ５に進み、キー位置がしきい値Ｋ３を超えているか否かが判定される。この判定が「ＹＥＳ」の場合は、ステップＳＰｊ６に進み、キー・ステートをＣＯＵＮＴ−ＤＯＷＮ−１に更新するとともに、しきい値Ｋ２、Ｋ３を超えたときの位置および時刻に基づいてベロシティおよびダウンカウント値を求める。そして、発音制御テーブルに、新たに求めたベロシティおよびダウンカウント値を書き込む。なお、ステップＳＰｅ１３の場合と同様に、しきい値Ｋ２を超えた場合の位置および時刻は、発音制御テーブルから得るが、しきい値Ｋ３を超えたときの位置および時刻は、現在位置および時刻であるから、レジスタＲ３Ｌ、Ｅ５（図１０参照）から読み出す。
【００８８】
一方、ステップＳＰｊ７において「ＮＯ」と判定された場合は、ステップＳＰｊ８に進み、発音制御テーブルを解放して他のキーの発音を優先させ、次いで、ステップＳＰｊ９においてキー位置がしきい値Ｋ１を超えているか否かを判定する。この判定は「ＹＥＳ」の場合はキー・ステートをＨＯＬＤに、「ＮＯ」の場合はキー・ステートをＵＰＰＥＲにする。
【００８９】
ｈ：ＴＩＭＥ−ＯＶＥＲルーチン
次に、ＴＩＭＥ−ＯＶＥＲルーチンについて図２３を参照して説明する。まず、ステップＳＰｈ１において、キー位置がしきい値Ｋ２を超えたか否かが判定され、「ＹＥＳ」であればそのままリターンする。すなわち、キー・ステートがＴＩＭＥ−ＯＶＥＲになった後は、その状態からキーを押し下げてもキー・ステートは変わらない。したがって、仮に、キーをエンド位置まで押下しても発音はされない。これは、実際のピアノでもしきい値Ｋ２とＫ３の間でキーがある時間以上停止した場合、その後キーを押し下げても発音がされないので、これに対応させるためである。
【００９０】
一方、しきい値Ｋ２よりもキー位置を浅くすると、ステップＳＰｈ１の判定が「ＮＯ」となり、ステップＳＰｈ２の判定を介して、キー・ステートＨＯＬＤかキー・ステートＵＰＰＥＲのいずれかが設定されるので（ステップＳＰｈ３，ＳＰｈ４）、それ以後の押鍵操作によって再発音が可能になる。
以上のように、各ルーチンにおいてキー・ステートが適宜設定され、また、書き換えられる。そして、各キー・ステートに応じた発音制御が行われる。ここで、参考のために、図２６にキー・ステートの遷移状態を示す。
【００９１】
（７）動作例
次に、上述した各処理ルーチンの動作の関連をより明確にするために、図１５、図１６に示すキー軌道が発生した場合を例にとって説明する。
始めに、図１５の時刻ｔ１において押鍵が開始される。初期状態におけるキー・ステートはＵＰＰＥＲが設定されるので、押鍵開始直後は図１８に示すＵＰＰＥＲルーチンにより処理が行われる。そして、キーがしきい値Ｋ１を超えるまでは、ステップＳＰｃ１からすぐにリターンするので、キー・ステートは変化しない。次に、キーがしきい値Ｋ１を超えると、ステップＳＰｃ２，３，４の処理が行われ、発音制御テーブルが獲得されて、発音の準備が開始される。また、キー・ステートはＴＯＵＣＨ−Ａとなる。
【００９２】
したがって、以後は図１９に示すＴＯＵＣＨ−Ａルーチンに処理が移行される。そして、図１５の時刻ｔ３においてしきい値Ｋ２を通過した後は、図１９のステップＳＰｄ１，３，４，５の処理が行われ、カウントダウン値の計算などが行われる。また、キー・ステートはＣＯＵＮＴ−ＤＯＷＮとなり、以後の処理は図２０に示すＣＯＵＮＴ−ＤＯＷＮルーチンに移行する。そして、時刻ｔ４においてしきい値Ｋ３を通過した後は、ステップＳＰｅ７，８，１２，１３の処理が行われ、カウントダウン値の計算等が行われるとともに、キー・ステートがＣＯＵＮＴ−ＤＯＷＮ−１となる。さらに、時刻ｔ５においてしきい値Ｋ４を通過した後は、図２０のステップＳＰｅ８，９，１１の処理が行われ、カウントダウン値の計算等が行われるとともに、キー・ステートがＣＯＵＮＴ−ＤＯＷＮ−２に設定される。この場合、ベロシティはキーが新たなしきい値を通過するたびに再計算されるが、再計算によるベロシティが大きい場合のみ更新されるから、最終的には一番大きいベロシティが選択されることになる。そして、そのベロシティに対応するダウンカウント値がダウンカウント値出力テーブルＴＢ３−１〜ＴＢ３−４のいずれかから求められる。このようにして求められたカウントダウン値は、タイマ割込みのステップＳＰａ３（図１４参照）において減算され、その減算値が０となった時点（時刻ｔ６）において発音が開始されてキー・ステートがＳＯＵＮＤモードになる。
【００９３】
次に、時刻ｔ７から離鍵が開始され、キー位置がしきい値Ｋ２より浅くなると（時刻ｔ１０）、キーオフ信号ＫＯＦが出力されて発音が停止され、キー・ステートはＨＯＬＤになる（図２１のステップＳＰｆ１，２，３，５）。そして、再びキーが押下され始め、時刻ｔ１１においてしきい値Ｋ２を超えた後は、図２４に示すステップＳＰｉ１，４，５，７の処理によって発音制御テーブルが獲得され、かつ、キー・ステートがＴＯＵＣＨ−Ｂになる。次に、キー位置が更に深くなると、前述の場合と同様にキー・ステートがＣＯＵＮＴ−ＤＯＷＮとなり、カウントダウン値が０になった時点（時刻ｔ１４）において発音が行われる。そして、離鍵が行われ、時刻ｔ１７以後にＨＯＬＤ、時刻ｔ１８以後にＴＯＵＣＨ−Ｂのキー・ステートが設定される。次に、ＴＯＵＣＨ−Ｂの状態が所定時間以上経過すると、図２５に示すステップＳＰｊ１，２の処理によってキー・ステートがＴＩＭＥ−ＯＶＥＲとなる。この後、図１５に示すように、キー位置が深くなってもキーステートはＴＩＭＥ−ＯＶＥＲのまま変化せず、カウントダウン値が設定されることはないため、発音は行われない。そして、図１５の時刻ｔ２１、ｔ２２において、キー位置が各々しきい値Ｋ２およびＫ１より浅くなると、キー・ステートは各々ＨＯＬＤ、ＵＰＰＥＲとなる。
【００９４】
ところで、図１５の点Ｐ１０において、キー位置が維持され、そのまま所定時間が経過すると点Ｐ１１においてｔｉｍｅ  ｏｖｅｒとなり、キー・ステートはＨＯＬＤとなる（ステップＳＰｄ１，２）。また、点Ｐ１０からキー位置が浅くなり、例えば、点Ｐ１２の位置に達すると、キー・ステートはＵＰＰＥＲになる（ステップＳＰｄ７，８）。
【００９５】
一方、ＴＯＵＣＨ−Ｂにある点Ｐ２０から離鍵が行われ、例えば、点２１の位置に達すると、キー・ステートはＨＯＬＤになる（ステップＳＰｊ９，１０）。次に、図１６に示す点Ｐ１，Ｐ２の場合は、サンプリング期間に２つのしきい値を通過した場合であるから、図１８に示すＵＰＰＥＲルーチンのステップＳＰｃ１，２，３，５が行われ、ＣＯＯＵＮＴ−ＤＯＷＮ−３となり、最高ベロシティの発音が行われる。また、点Ｐ３，Ｐ４の場合も同様である（ステップＳＰｉ１，４，５，６）。
【００９６】
ところで、図６に示すように、発音が開始されてキー・ステートがＳＯＵＮＤとなった後の離鍵操作において、しきい値Ｋ２Ａを上下するようにキー位置が変化すると、図２２のリリースルーチンにより、リリースレートが切り替わり、音の消え入り方を微妙に制御することができる。
【００９７】
Ｃ：実施形態効果
（１）しきい値の設定をソフトウエア処理によって自由に行うことができる。
【００９８】
（２）しきい値Ｋ１までに至らない浅いキー位置、しきい値の間のキー位置、あるいはしきい値Ｋ４を超えた深いキー位置についても、正確な位置情報が得られるので、種々の奏法に対応できる楽音制御を行うことができる。例えば、しきい値Ｋ１まで達しない浅い打弦の発音制御や、音の消え入り方を微妙に制御することが可能である。
【００９９】
（３）しきい値をソフトウエア処理によって自由に設定できるので、フォトセンサの取付精度が要求されない。
【０１００】
（４）上記実施形態においては、例えば、ＴＯＵＣＨ−Ａ、ＣＯＵＮＴ−ＤＯＷＮ−０、ＴＯＵＣＨ−Ｂ、ＨＯＬＤなどのキー・ステートを決定する際に、前のキー・ステートとキーの位置（どのしきい値の間にいるか）によって決定しているので、適切な状態把握を行うことができる。さらに、ＴＩＭＥ−ＯＶＥＲやＨＯＬＤを決定する際においては、前のキー・ステート、キーの位置、および前のキー・ステートの継続時間も考慮して決定しているので、実際のピアノに即した状態把握を行うことができる。
【０１０１】
しかも、以上のようにして設定したキー・ステート（状態）に基づいて楽音が制御されるから、ピアノ等の自然楽器の発音を正確に模倣することができるとともに、きめ細かな楽音制御を行うことができる。
また、しきい値をキーオフ近傍の領域に複数設定し、離鍵時にキーがどのしきい値の間にいるかによってリリースレートを制御するようにしているので、例えば、ピアノのダンパー操作を模倣した発音制御を行うことができる。
【０１０２】
Ｄ：変形例
（１）上述した実施形態は、ピアノ音を電子的に発生する例であったが、ピアノ音以外の楽音を合成するようにしてもよい。この場合には、エンベロープ制御は、楽音に応じたエンベロープを予め設定して置けばよく、リリース時のエンベロープ制御は実施形態と同様に行えばよい。
また、実施形態におけるリリースルーチンのエンベロープ制御は、リリース時の制御に限らず、その他の部分（例えば、サステイン部）のエンベロープ制御に用いることもできる。
【０１０３】
（２）上述した実施形態は、消音機構付きの自動ピアノにおける例であったが、本発明は打弦機構を持たない、電子楽器にも適用することができる。
【０１０４】
（３）フォトセンサの出力信号を自動演奏時のキー位置フィードバック信号として用いることもできる。
【０１０５】
（４）また、ＴＯＵＣＨ−Ａではしきい値Ｋ１〜Ｋ２間、ＣＯＵＮＴ−ＤＯＷＮ−０ではしきい値Ｋ１〜Ｋ３間、ＣＯＵＮＴ−ＤＯＷＮ−１ではしきい値Ｋ２〜Ｋ４間で速度を算出するようにしたが、どのような間隔を選んでも良く、例えば、ＣＯＵＮＴ−ＤＯＷＮ−０においてしきい値Ｋ２〜Ｋ３間で速度を算出してもよい。
【０１０６】
（５）リリース時のエンベロープ制御をより繊細に行うために、図２７に示すように、しきい値Ｋ２とＫ３の間をより細かく区切っても良い。そして、同図に示すように、上方の区間に行くほどダンピングが大きくなるようにリリースレートを設定する。このようにすると、例えば、同図に示すような鍵の軌跡の場合は、点Ｐ５０〜Ｐ５１、Ｐ５２〜Ｐ５３の間は自然消音するが、鍵が上方に行くに従いダンピング係数が強くなって次第に早く減衰するようになり、より自然な楽音とすることができる。図２８は、この時のエンベロープの様子を示している。
また、しきい値Ｋ２とＫ３の間をより細かく区切る場合であっても、キーセンサ等を追加することなく、しきい値Ｋ２Ａ〜Ｋ２Ｃをソフトウエア処理で設定すればよい。したがって、ハードウエアの変更が不要であり、コストアップにならない。さらに、使用状況や演奏者の技量に応じて、しきい値Ｋ２とＫ３の間の区間数を切り換えるようにしてもよい。
【０１０７】
（６）また、上述した実施形態においては、キーが新たなしきい値を通過する毎にベロシティを再計算し、再計算によるベロシティと既に得られているベロシティとを比較することにより、ベロシティおよびダウンカウント値を更新するようにしているが、既に得られているダウンカウント値の現在値と再計算によるベロシティに対応したダウンカウント値とを比較するようにすれば、より精度が向上する。ただし、本出願人の実験によれば、両者の比較結果は、ほぼ完全に一致するので、上述した実施形態においては、処理の簡単化のために、前者を採用している。
【０１０８】
【発明の効果】
以上説明したように、この発明によれば、センサの取付精度が要求されず、しかも、極めて自然で多様な発音制御を行うことができる（請求項１〜３）。
また、しきい値をキーオフ近傍の領域に複数設定し、離鍵時に状態決定手段が決定した状態に基づきリリースレートを制御することにより、リリース時の楽音制御をより自然で繊細なものにすることができる（請求項３）。
【図面の簡単な説明】
【図１】この発明による一実施形態の構成を示すブロック図である。
【図２】同実施形態のキーの構成を示す側面図である。
【図３】同実施形態におけるキーのシャッタ付近の構成を示す斜視図である。
【図４】図３に示すフォトダイオード２２５の出力特性を示す特性図である。
【図５】同実施形態におけるハンマーアクションを示す側面図である。
【図６】同実施形態におけるしきい値を示す図である。
【図７】同実施形態においてＲＡＭ２０３内に設けられているテーブルを示す概念図である。
【図８】同実施形態における発音制御テーブルを示す概念図である。
【図９】同実施形態におけるサンプリング時刻を記憶するためのテーブルを示す概念図である。
【図１０】同実施形態におけるレジスタを示す概念図である。
【図１１】同実施形態におけるベロシティおよびダウンカウント値を求めるためのテーブルを示す図である。
【図１２】同実施形態における各処理のタイミング関係を示す図である。
【図１３】同実施形態におけるＡ／Ｄ割込み処理を示すフローチャートである。
【図１４】同実施形態におけるタイマ割込み処理を示すフローチャートである。
【図１５】同実施形態におけるキー軌道の一例と、これに対するキー・ステートの関係を示す図である。
【図１６】同実施形態におけるキー軌道の一例と、これに対するキー・ステートの関係を示す図である。
【図１７】同実施形態のメインルーチンを示すフローチャートである。
【図１８】同実施形態のＵＰＰＥＲルーチンを示すフローチャートである。
【図１９】同実施形態のＴＯＵＣＨ−Ａルーチンを示すフローチャートである。
【図２０】同実施形態のＣＯＵＮＴ−ＤＯＷＮルーチンを示すフローチャートである。
【図２１】同実施形態のＳＯＵＮＤルーチンを示すフローチャートである。
【図２２】同実施形態のリリースルーチンを示すフローチャートである。
【図２３】同実施形態のＴＩＭＥ−ＯＶＥＲルーチンを示すフローチャートである。
【図２４】同実施形態のＨＯＬＤルーチンを示すフローチャートである。
【図２５】同実施形態のＴＯＵＣＨ−Ｂルーチンを示すフローチャートである。
【図２６】同実施形態におけるキー・ステートの遷移状態を示す図である。
【図２７】しきい値Ｋ２，Ｋ３間をより細かく区切る際のしきい値の例を示す図である。
【図２８】図２７に示すしきい値を用いた際の楽音制御の一例を示す図である。
【図２９】従来のキーセンサの一例を示す側面図である。
【符号の説明】
２０１……ＣＰＵ（比較結果認識手段、状態決定手段、制御手段）、２０２……ＲＯＭ、２０３……ＲＡＭ（状態決定手段）、２１０……音源回路、２２０……ＬＥＤドライバ（位置検出手段）、２２１……発光側センサヘッド（位置検出手段）、２２２……受光側センサヘッド（位置検出手段）、２２３……Ａ／Ｄ変換器（位置検出手段）、２２４……ＬＥＤ（位置検出手段）、２２５……フォトダイオード（位置検出手段）。
【図１】
0003552366.tif 000002
【図２】
0003552366.tif 000003
【図３】
0003552366.tif 000004
【図４】
0003552366.tif 000005
【図５】
0003552366.tif 000006
【図６】
0003552366.tif 000007
【図７】
0003552366.tif 000008
【図８】
0003552366.tif 000009
【図９】
0003552366.tif 000010
【図１０】
0003552366.tif 000011
【図１１】
0003552366.tif 000012
【図１２】
0003552366.tif 000013
【図１３】
0003552366.tif 000014
【図１４】
0003552366.tif 000015
【図１５】
0003552366.tif 000016
【図１６】
0003552366.tif 000017
【図１７】
0003552366.tif 000018
【図１８】
0003552366.tif 000019
【図１９】
0003552366.tif 000020
【図２０】
0003552366.tif 000021
【図２１】
0003552366.tif 000022
【図２２】
0003552366.tif 000023
【図２３】
0003552366.tif 000024
【図２４】
0003552366.tif 000025
【図２５】
0003552366.tif 000026
【図２６】
0003552366.tif 000027
【図２７】
0003552366.tif 000028
【図２８】
0003552366.tif 000029
【図２９】
0003552366.tif 000030