(57)【特許請求の範囲】
【請求項１】
少なくとも１つ以上の鍵を備えた鍵盤の鍵の押鍵状態または離鍵状態を検出する鍵操作状態検出手段と、
所定時間毎に１ずつカウントを行う第１のカウント手段であって、カウント値が初期値の状態で、前記鍵操作状態検出手段により鍵の押鍵状態が検出されたときからカウントを開始する第１のカウント手段と、
前記第１のカウント手段によってカウントされる度に、前記鍵操作状態検出手段により当該鍵が押鍵状態であるかまたは離鍵状態であるかを検出し、当該鍵が所定回数連続して押鍵状態であるときに、当該鍵の押鍵状態が、ユーザが押鍵操作を行うことによって発生したものと決定する第１の決定手段と、
前記所定時間毎に１ずつカウントを行う第２のカウント手段であって、前記第１の決定手段により当該鍵の押鍵状態が、ユーザが押鍵操作を行うことによって発生したものと決定された後、当該鍵の離鍵状態が検出されたときからカウントを開始する第２のカウント手段と、
前記第２のカウント手段のカウント値が少なくとも１つ以上の所定値に一致したときに、前記鍵操作状態検出手段に対して、再度当該鍵が押鍵状態であるかまたは離鍵状態であるかを検出させるように制御する制御手段と、
該検出された状態に基づいて、当該鍵の離鍵状態が、ユーザが離鍵操作を行うことによって発生したものであるか、または鍵リバウンドによって発生したものであるかを決定する第２の決定手段と
を有し、
前記第１のカウント手段が前記所定回数を連続してカウントする時間は、前記第２のカウンタ手段が前記所定値をカウントする時間より短いことを特徴とする鍵リバウンド信号除去装置。
【請求項２】
前記制御手段が前記鍵操作状態検出手段を制御することにより当該鍵が押鍵状態であることが検出されたときに、前記第２のカウント手段のカウントを停止し、その値を初期値にリセットするリセット手段を有し、
前記第２の決定手段は、前記制御手段が前記鍵操作状態検出手段を制御することにより当該鍵が離鍵状態であることが検出され、かつ前記第２のカウント手段のカウント値が所定値以上であるときに、当該鍵の離鍵状態は、ユーザが離鍵操作を行うことによって発生したものであると決定する
ことを特徴とする請求項１記載の鍵リバウンド信号除去装置。
【請求項３】
少なくとも１つ以上の鍵を備えた鍵盤の鍵の押鍵状態または離鍵状態を検出する鍵操作状態検出モジュールと、
所定時間毎に１ずつカウントを行う第１のカウントモジュールであって、カウント値が初期値の状態で、前記鍵操作状態検出モジュールにより鍵の押鍵状態が検出されたときからカウントを開始する第１のカウントモジュールと、
前記第１のカウントモジュールによってカウントされる度に、前記鍵操作状態検出モジュールにより当該鍵が押鍵状態であるかまたは離鍵状態であるかを検出し、当該鍵が所定回数連続して押鍵状態であるときに、当該鍵の押鍵状態が、ユーザが押鍵操作を行うことによって発生したものと決定する第１の決定モジュールと、
前記所定時間毎に１ずつカウントを行う第２のカウントモジュールであって、前記第１の決定モジュールにより当該鍵の押鍵状態が、ユーザが押鍵操作を行うことによって発生したものと決定された後、当該鍵の離鍵状態が検出されたときからカウントを開始する第２のカウントモジュールと、
前記第２のカウントモジュールのカウント値が少なくとも１つ以上の所定値に一致したときに、前記鍵操作状態検出モジュールに対して、再度当該鍵が押鍵状態であるかまたは離鍵状態であるかを検出させるように制御する制御モジュールと、
該検出された状態に基づいて、当該鍵の離鍵状態が、ユーザが離鍵操作を行うことによって発生したものであるか、または鍵リバウンドによって発生したものであるかを決定する第２の決定モジュールと
を含む、コンピュータが実現できるプログラムを格納した記憶媒体であって、
前記第１のカウントモジュールが前記所定回数を連続してカウントする時間は、前記第２のカウンタモジュールが前記所定値をカウントする時間より短いことを特徴とする記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、鍵盤の鍵がリバウンドしたときに発生する鍵リバウンド信号を除去する鍵リバウンド信号除去装置および記憶媒体に関する。
【０００２】
【従来の技術】
従来、鍵リバウンド信号の除去、すなわち離鍵されたときに発生するキーチャタリングの吸収は、次のようにして行われていた。
【０００３】
すなわち、
１）キーオフ（離鍵状態）が検出されたときに、専用のハードウェアによってその検出タイミングを所定時間遅延させ、この遅延時間内にキーオンが検出されると、その前に検出されたキーオフを無視する（たとえば、特公昭４８−１５０２６号公報参照）
２）専用のハードウェアにより、ノイズ（鍵リバウンド信号）の発生そのものを抑制する（たとえば、特公昭６１−２９５４号公報参照）
３）キーオフが検出されてから、当該鍵のキーオフが所定回数続けて検出されたときに、実際のキーオフと判定する等である。
【０００４】
【発明が解決しようとする課題】
しかしながら、上記従来のリバウンド信号の除去のうち、１）および２）の方法では、専用のハードウェアを必要とするために、装置が複雑化するとともに製造コストが増大化し、また、３）の方法では、前記所定回数を小さい値に設定した場合には、チャタリングの吸収を十分に行うことができない一方、大きい値に設定した場合には、キーオフの検出処理を何度も行う必要があり、処理が複雑化していた。
【０００５】
本発明は、この点に着目してなされたものであり、製造コストの増大化を抑制しつつ簡単な方法でリバウンド信号を除去することが可能な鍵リバウンド信号除去装置および記憶媒体を提供することを目的とする。
【０００６】
【課題を解決するための手段】
上記目的を達成するため、本発明の鍵リバウンド信号除去装置は、少なくとも１つ以上の鍵を備えた鍵盤の鍵の押鍵状態または離鍵状態を検出する鍵操作状態検出手段と、所定時間毎に１ずつカウントを行う第１のカウント手段であって、カウント値が初期値の状態で、前記鍵操作状態検出手段により鍵の押鍵状態が検出されたときからカウントを開始する第１のカウント手段と、前記第１のカウント手段によってカウントされる度に、前記鍵操作状態検出手段により当該鍵が押鍵状態であるかまたは離鍵状態であるかを検出し、当該鍵が所定回数連続して押鍵状態であるときに、当該鍵の押鍵状態が、ユーザが押鍵操作を行うことによって発生したものと決定する第１の決定手段と、前記所定時間毎に１ずつカウントを行う第２のカウント手段であって、前記第１の決定手段により当該鍵の押鍵状態が、ユーザが押鍵操作を行うことによって発生したものと決定された後、当該鍵の離鍵状態が検出されたときからカウントを開始する第２のカウント手段と、前記第２のカウント手段のカウント値が少なくとも１つ以上の所定値に一致したときに、前記鍵操作状態検出手段に対して、再度当該鍵が押鍵状態であるかまたは離鍵状態であるかを検出させるように制御する制御手段と、該検出された状態に基づいて、当該鍵の離鍵状態が、ユーザが離鍵操作を行うことによって発生したものであるか、または鍵リバウンドによって発生したものであるかを決定する第２の決定手段とを有し、前記第１のカウント手段が前記所定回数を連続してカウントする時間は、前記第２のカウンタ手段が前記所定値をカウントする時間より短いことを特徴とする。
【０００７】
これにより、第１の決定手段により当該鍵の押鍵状態が、ユーザが押鍵操作を行うことによって発生したものと決定された後、当該鍵の離鍵状態が検出されたときからカウントが開始され、そのカウント値が１つ以上の所定値に一致する毎に、鍵操作状態検出手段によって当該鍵が押鍵状態であるかまたは離鍵状態であるかが検出され、この検出された状態に基づいて、当該鍵の離鍵状態が、ユーザが離鍵操作を行うことによって発生したものであるか、または鍵リバウンドによって発生したものであるかが決定される、すなわち第２のカウント手段がカウントする毎でなく、それより間引かれた状態で、当該鍵の押鍵状態または離鍵状態が確認され、この確認された状態に基づいて、当該鍵の離鍵状態が決定されるので、製造コストの増大化を抑制しつつ簡単な方法でリバウンド信号を除去することができる。
【０００８】
また、好ましくは、前記制御手段が前記鍵操作状態検出手段を制御することにより当該鍵が押鍵状態であることが検出されたときに、前記第２のカウント手段のカウントを停止し、その値を初期値にリセットするリセット手段を有し、前記第２の決定手段は、前記制御手段が前記鍵操作状態検出手段を制御することにより当該鍵が離鍵状態であることが検出され、かつ前記第２のカウント手段のカウント値が所定値以上であるときに、当該鍵の離鍵状態は、ユーザが離鍵操作を行うことによって発生したものであると決定することを特徴とする。
【０００９】
これにより、前記鍵操作状態検出手段により当該鍵が押鍵状態であることが確認されたときに、前記第２のカウント手段のカウントが停止されて、その値が初期値にリセットされるとともに、前記鍵操作状態検出手段により当該鍵が離鍵状態であることが確認され、かつ前記第２のカウント手段のカウント値が所定値以上であるときに、当該鍵の離鍵状態は、ユーザが離鍵操作を行うことによって発生したものであると決定されるので、リバウンド信号をさらに精度よく除去することができる。
【００１０】
また、本発明の記憶媒体は、少なくとも１つ以上の鍵を備えた鍵盤の鍵の押鍵状態または離鍵状態を検出する鍵操作状態検出モジュールと、所定時間毎に１ずつカウントを行う第１のカウントモジュールであって、カウント値が初期値の状態で、前記鍵操作状態検出モジュールにより鍵の押鍵状態が検出されたときからカウントを開始する第１のカウントモジュールと、前記第１のカウントモジュールによってカウントされる度に、前記鍵操作状態検出モジュールにより当該鍵が押鍵状態であるかまたは離鍵状態であるかを検出し、当該鍵が所定回数連続して押鍵状態であるときに、当該鍵の押鍵状態が、ユーザが押鍵操作を行うことによって発生したものと決定する第１の決定モジュールと、前記所定時間毎に１ずつカウントを行う第２のカウントモジュールであって、前記第１の決定モジュールにより当該鍵の押鍵状態が、ユーザが押鍵操作を行うことによって発生したものと決定された後、当該鍵の離鍵状態が検出されたときからカウントを開始する第２のカウントモジュールと、前記第２のカウントモジュールのカウント値が少なくとも１つ以上の所定値に一致したときに、前記鍵操作状態検出モジュールに対して、再度当該鍵が押鍵状態であるかまたは離鍵状態であるかを検出させるように制御する制御モジュールと、該検出された状態に基づいて、当該鍵の離鍵状態が、ユーザが離鍵操作を行うことによって発生したものであるか、または鍵リバウンドによって発生したものであるかを決定する第２の決定モジュールとを含む、コンピュータが実現できるプログラムを格納した記憶媒体であって、前記第１のカウントモジュールが前記所定回数を連続してカウントする時間は、前記第２のカウンタモジュールが前記所定値をカウントする時間より短いことを特徴とする。
【００１１】
これにより、上記鍵リバウンド信号除去装置と同様の効果を得ることができる。
【００１２】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【００１３】
図１は、本発明の実施の一形態に係る鍵リバウンド信号除去装置の概略構成を示すブロック図である。
【００１４】
同図に示すように、本実施の形態の鍵リバウンド信号除去装置は、音高情報を入力するための鍵盤１と、各種情報を入力するための複数のスイッチを備えたパネルスイッチ２と、鍵盤１の各鍵の押鍵状態（離鍵状態も含む）を検出する押鍵検出回路３と、パネルスイッチ２の各スイッチの押下状態を検出するスイッチ検出回路４と、装置全体の制御を司るＣＰＵ５と、該ＣＰＵ５が実行する制御プログラムやテーブルデータ等を記憶するＲＯＭ６と、演奏データ、各種入力情報および演算結果等を一時的に記憶するＲＡＭ７と、タイマ割込み処理における割込み時間や各種時間を計時するタイマ８と、各種情報等を表示する、たとえば大型液晶ディスプレイ（ＬＣＤ）若しくはＣＲＴ（Cathode Ray Tube）ディスプレイおよび発光ダイオード（ＬＥＤ）等を備えた表示装置９と、記憶媒体であるフロッピディスク（ＦＤ）２０をドライブするフロッピディスクドライブ（ＦＤＤ）１０と、前記制御プログラムを含む各種アプリケーションプログラムや各種データ等を記憶するハードディスク（図示せず）をドライブするハードディスクドライブ（ＨＤＤ）１１と、前記制御プログラムを含む各種アプリケーションプログラムや各種データ等を記憶するコンパクトディスク−リード・オンリ・メモリ（ＣＤ−ＲＯＭ）２１をドライブするＣＤ−ＲＯＭドライブ（ＣＤ−ＲＯＭＤ）１２と、外部からのＭＩＤＩ（Musical Instrument Digital Interface）信号を入力したり、ＭＩＤＩ信号として外部に出力したりするＭＩＤＩインターフェース（Ｉ／Ｆ）１３と、通信ネットワーク１０１を介して、たとえばサーバコンピュータ１０２とデータの送受信を行う通信インターフェース（Ｉ／Ｆ）１４と、鍵盤１から入力された演奏データや予め設定された演奏データ等を楽音信号に変換する音源回路１５と、該音源回路１５からの楽音信号に各種効果を付与するための効果回路１６と、該効果回路１６からの楽音信号を音響に変換する、たとえば、ＤＡＣ（Digital-to-Analog Converter）やアンプ、スピーカ等のサウンドシステム１７とにより構成されている。
【００１５】
上記構成要素３〜１６は、バス１８を介して相互に接続され、ＣＰＵ５にはタイマ８が接続され、ＭＩＤＩＩ／Ｆ１３には他のＭＩＤＩ機器１００が接続され、通信Ｉ／Ｆ１４には通信ネットワーク１０１が接続され、音源回路１５には効果回路１６が接続され、効果回路１６にはサウンドシステム１７が接続されている。
【００１６】
ＨＤＤ１１のハードディスクには、前述のように、ＣＰＵ５が実行する制御プログラムも記憶でき、ＲＯＭ６に制御プログラムが記憶されていない場合には、このハードディスクに制御プログラムを記憶させておき、それをＲＡＭ７に読み込むことにより、ＲＯＭ６に制御プログラムを記憶している場合と同様の動作をＣＰＵ５にさせることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。
【００１７】
ＣＤ−ＲＯＭドライブ１２のＣＤ−ＲＯＭ２１から読み出された制御プログラムや各種データは、ＨＤＤ１１内のハードディスクにストアされる。これにより、制御プログラムの新規インストールやバージョンアップ等が容易に行える。なお、このＣＤ−ＲＯＭドライブ１２以外にも、外部記憶装置として、光磁気ディスク（ＭＯ）装置等、様々な形態のメディアを利用するための装置を設けるようにしてもよい。
【００１８】
通信Ｉ／Ｆ１４は、上述のように、たとえばＬＡＮ（Local Area Network）やインターネット、電話回線等の通信ネットワーク１０１に接続されており、該通信ネットワーク１０１を介して、サーバコンピュータ１０２に接続される。ＨＤＤ１１内のハードディスクに上記各プログラムや各種パラメータが記憶されていない場合には、通信Ｉ／Ｆ１４は、サーバコンピュータ１０２からプログラムやパラメータをダウンロードするために用いられる。クライアントとなるコンピュータ（本実施の形態では、鍵リバウンド信号除去装置）は、通信Ｉ／Ｆ１４および通信ネットワーク１０１を介してサーバコンピュータ１０２へとプログラムやパラメータのダウンロードを要求するコマンドを送信する。サーバコンピュータ１０２は、このコマンドを受け、要求されたプログラムやパラメータを、通信ネットワーク１０１を介してコンピュータへと配信し、コンピュータが通信Ｉ／Ｆ１４を介して、これらプログラムやパラメータを受信してＨＤＤ１１内のハードディスクに蓄積することにより、ダウンロードが完了する。
【００１９】
この他、外部コンピュータ等との間で直接データのやりとりを行うためのインターフェースを備えてもよい。
【００２０】
図１から分かるように、本実施の形態の鍵リバウンド信号除去装置は、主として汎用のコンピュータを用いて構成され、このコンピュータに、鍵盤１や音源部（音源回路１５、効果回路１６およびサウンドシステム１７によって構成される）等のハードウェアが外付けされて構成されている。
【００２１】
図２は、ＲＡＭ７の所定位置に確保されたキーオンイベントバッファおよびキーオフイベントバッファの構成を示す図であり、（ａ）がキーオンイベントバッファを示し、（ｂ）がキーオフイベントバッファを示している。
【００２２】
キーオンイベントバッファは、キーオンされたキー（鍵）のキーコードとキーオン状態の経過時間とを複数個（本実施の形態では８個）分記憶するものであり、同図（ａ）に示すように、キーコードを記憶する領域ｋｏ（ｎ）とその経過時間（カウント値）を記憶する領域ｔｏ（ｎ）を一対にして８個のキー（ｎ＝０，…，７）を記憶できるだけの容量を有している。
【００２３】
同様に、キーオフイベントバッファは、キーオフされたキーのキーコードとキーオフ状態の経過時間とを複数個（本実施の形態では８個）分記憶するものであり、同図（ｂ）に示すように、キーコードを記憶する領域ｋｆ（ｍ）とその経過時間を記憶する領域ｔｆ（ｍ）を一対にして８個のキー（ｍ＝０，…，７）を記憶できるだけの容量を有している。
【００２４】
ここで、本実施の形態の鍵リバウンド信号除去装置は、同時に８音発音でき、鍵盤１は、Ｃ２〜Ｇ５（Ｃ４が中央のＣ）の４４個のキースイッチ（以下、「鍵スイッチ」という）を備えるものとするが、これに限る必要はないことはいうまでもない。
【００２５】
以上のように構成された鍵リバウンド信号除去装置が実行する制御処理を、以下、図３〜１０を参照して説明する。
【００２６】
図３は、本実施の形態の鍵リバウンド信号除去装置、特にＣＰＵ５が実行するメインルーチンの手順を示すフローチャートである。
【００２７】
同図において、まず、前記各領域ｋｏ（ｎ），ｋｆ（ｍ）をすべてクリア（“０”）するとともに前記各領域ｔｏ（ｎ），ｔｆ（ｍ）をすべてクリア（“１”）し、さらに、インデックスカウンタ（以下、「インデックス」と略す）ｎ，ｍをそれぞれクリア（“０”）する等の初期設定を行う（ステップＳ１）。ここで、各インデックスｎ，ｍは、前記ＲＡＭ７の所定位置に確保されたソフトカウンタであり、それぞれ前記キーオンイベントバッファおよびキーオフイベントバッファの領域を示すものである。なお、各インデックスｎ，ｍは、それぞれ、メインルーチンで使用されるものと、タイマ割込み処理で使用されるものの２種類あり、それぞれＲＡＭ７中位置を別にして領域が確保されているが、混同の恐れがない場合には、両者ともにインデックスｎ，ｍという。
【００２８】
次に、発音／消音処理サブルーチンを実行する（ステップＳ２）。この発音／消音処理サブルーチンは、主として、キーオン時の初期チャタリング除去ルーチン（後述する図６のステップＳ３１〜Ｓ３７のルーチン）およびキーオフ時のチャタリング除去ルーチン（後述する図７のステップＳ３８〜Ｓ４７のルーチン）により構成され、割り込み処理I ルーチン（その詳細な処理内容は、図８および９を用いて後述する）で、イベント検出された後の時間管理を行っている。
【００２９】
そして、たとえば、音色スイッチや効果スイッチ、各種操作子（ともに図示せず）等が操作されたときに、その操作に応じてなされる音色や効果の設定処理または変更処理等のその他処理を実行した（ステップＳ３）後に、上記ステップＳ２に戻って上述の処理を繰り返す。
【００３０】
図４は、所定時間（本実施の形態では１ｍｓｅｃ）毎に発生するタイマ割り込みに応じて実行される割り込み処理I の手順を示すフローチャートである。
【００３１】
本割り込み処理I は、キーオン／オフイベントが発生したときに、そのイベントがどのキーにより発生したものであり、さらにそのイベントがオン／オフイベントのいずれのイベントであるかを判別し、そのキーコードを前記キーオンイベントバッファまたはキーオフイベントバッファに取り込む処理を主として行っている。
【００３２】
同図において、図８および９を用いて後述するキースイッチイベント処理サブルーチンを実行した（ステップＳ１１）後に、本タイマ割り込み処理I を終了する。
【００３３】
図５は、所定時間（本実施の形態では２０ｍｓｅｃ）毎に発生するタイマ割り込み処理IIの手順を示すフローチャートである。
【００３４】
同図において、前記ステップＳ３で設定または変更された音色や効果に応じて、生成された楽音の音色や効果を制御する音色／効果制御処理を実行した（ステップＳ２１）後に、本タイマ割り込み処理IIを終了する。
【００３５】
このように、鍵盤１の各鍵スイッチに対しては、タイマ割り込み間隔の短いタイマ割り込み処理I で行い、その他のキーまたは操作子に対しては、タイマ割り込み間隔の長いタイマ割り込み処理IIで行うようにしたのは、鍵盤１の鍵が押鍵されてから発音されるまでの時間はできるだけ短くしないと、演奏者は違和感を感じるのに対して、鍵盤１以外のキーや操作子が操作されてから対応する制御が行われるまでの時間は少しくらい長くても、演奏者は、それほど違和感を感じないからである。
【００３６】
次に、説明の都合上、まず、前記ステップＳ１１のキースイッチイベント処理サブルーチン、その次に、前記ステップＳ２の発音／消音処理サブルーチンの順に、各サブルーチンでなされる制御処理の詳細を説明する。
【００３７】
図８および９は、キースイッチイベント処理サブルーチンの詳細な手順を示すフローチャートである。
【００３８】
図８において、まず、前記各インデックスｍ，ｎ（前記２種類のインデックスのうち、タイマ割込み処理で使用するもの）を、それぞれリセット（“０”）するとともに、鍵盤１の各鍵スイッチおよびパネルスイッチ２の各スイッチをキースキャンするためのインデックスｉをリセット（“０”）する。
【００３９】
次に、インデックスｉが示すキーのキースキャンを行う（ステップＳ５２）。ここで、インデックスｉが０〜４３のときには、インデックスｉは鍵盤１のいずれかの鍵スイッチ（たとえば、ｉ＝０のときには“Ｃ２”の鍵スイッチ）を示し、インデックスｉが“４４”以上のときには、鍵盤１の鍵スイッチ以外のスイッチ、すなわち上記パネルスイッチ２の各スイッチを示している。
【００４０】
続くステップＳ５３では、キーオン／オフイベントが発生したか否かを判別し、発生しないときには、図９のステップＳ５４に進み、インデックスｉが最後のキーを示しているか否か、すなわちまだキースキャンすべきキースイッチがあるか否かを判別する。
【００４１】
ステップＳ５４で、インデックスｉが最後のキーを示しているときにはステップＳ５５に進み、キーオンイベントバッファ中、領域ｋｏ（０）〜ｋｏ（７）にデータが格納されているときには、その領域ｋｏ（ｎ）に対応する領域ｔｏ（ｎ）を“１”だけインクリメントするとともに、同様にして、キーオフイベントバッファ中、領域ｋｆ（０）〜ｋｆ（７）にデータが格納されているときには、その領域ｋｆ（ｍ）に対応する領域ｔｆ（ｍ）を“１”だけインクリメントした後に本キースイッチイベント処理を終了する。すなわち、キーオンイベントバッファおよびキーオフイベントバッファともに、キーコードが格納されているときには、当該対応する領域ｔｏ（ｎ），ｔｆ（ｍ）の値は、１ｍｓｅｃ毎に“１”ずつインクリメントされることになる。したがって、領域ｔｏ（ｎ）、ｔｆ（ｍ）の値は、それぞれキーオンイベントおよびキーオフイベントが発生したときからの経過時間を示すことになる。
【００４２】
一方、ステップＳ５４で、インデックスｉが最後のキーを示していないとき、すなわちキースキャンすべきキーが残っているときには、前記図８のステップＳ５２の戻る。
【００４３】
一方、前記ステップＳ５３で、キーオン／オフイベントが発生したときには、そのイベントに係るスイッチは鍵盤１の鍵スイッチであるか否かを判別する（ステップＳ５６）。ここで、鍵スイッチか否かの判別は、上述のように、インデックスｉが０〜４３の範囲にあるか否かを判別することによって行う。
【００４４】
ステップＳ５６で、イベントに係るキーが鍵盤１の鍵スイッチでないとき、すなわちインデックスｉが０〜４３以外の値であるときには、前記ステップＳ５４に進む一方、イベントに係るキーが鍵盤１の鍵スイッチのとき、すなわちインデックスｉが０〜４３のいずれかの値であるときにはステップＳ５７に進む。
【００４５】
ステップＳ５７では、インデックスｎが“８”またはインデックスｍが“８”であるか否かを判別し、ｎ＝８またはｍ＝８のいずれかが成立するとき、すなわち９音以上同時にキーオン／オフされたときには、インデックスｉを鍵盤１の鍵スイッチの最終値、すなわち本実施の形態では“４３”に設定した（ステップＳ５８）後に、前記ステップＳ５４に進む。
【００４６】
一方、ステップＳ５７で、ｎ≠８かつｍ≠８のときには、発生したイベントがオンイベントであるか否かを判別する（ステップＳ５９）。
【００４７】
ステップＳ５９で、発生したイベントがオンイベントであるときには、次に説明するステップＳ６０〜Ｓ７４の処理を実行する一方、発生したイベントがオンイベントでないとき、すなわちオフイベントであるときには、次に説明する図９のステップＳ７６〜Ｓ８２の処理を実行する。
【００４８】
ステップＳ６０では、キーオンイベントバッファの領域ｋｏ（０）〜ｋｏ（７）内に、インデックスｉの値に一致するキーコードが格納されている領域があるか否かを判別し、該領域があるときには、その領域ｋｏ（ｎ）に対応する領域ｔｏ（ｎ）をリセット（“０”）した（ステップＳ７５）後に前記ステップＳ５４に進む一方、該領域がないときにはステップＳ７１に進む。なお、ステップＳ７５の処理を省略してもよい。
【００４９】
ステップＳ７１では、キーオンイベントバッファ中、最初の空き領域を示す番号ｎを取得し、次いでステップＳ７２では、この番号ｎが示す領域ｋｏ（ｎ）にキーオンイベントに係るキーナンバ、すなわちインデックスｉの値を格納し、ステップＳ７３では、該領域ｋｏ（ｎ）に対応する領域ｔｏ（ｎ）をリセット（“０”）し、ステップＳ７４では、インデックスｎを“１”だけインクリメントした後に、前記ステップＳ５４に進む。
【００５０】
図９のステップＳ７６では、キーオフイベントバッファの領域ｋｆ（０）〜ｋｆ（７）内に、インデックスｉの値に一致するキーコードが格納されている領域があるか否かを判別し、該領域があるときには、その領域ｋｆ（ｍ）に対応する領域ｔｆ（ｍ）をリセット（“０”）した（ステップＳ７７）後に前記ステップＳ５４に進む一方、該領域がないときにはステップＳ７８に進む。なお、ステップＳ７７の処理を省略してもよい。
【００５１】
ステップＳ７８では、キーオフイベントバッファ中、最初の空き領域を示す番号ｍを取得し、次いでステップＳ７９では、この番号ｍが示す領域ｋｆ（ｍ）にキーオフイベントに係るキーナンバ、すなわちインデックスｉの値を格納し、ステップＳ８０では、該領域ｋｆ（ｍ）に対応する領域ｔｆ（ｍ）をリセット（“０”）する。
【００５２】
さらに、ステップＳ８１では、領域ｋｆ（ｍ）に格納されたキーナンバ、すなわちインデックスｉの値が、キーオンイベントバッファの領域ｋｏ（０）〜ｋｏ（７）のいずれかの領域に格納されているときには、当該領域ｋｏ（ｎ）をクリア（“０”）するとともに、これに対応する領域ｔｏ（ｎ）をクリア（“１”）し、ステップＳ８２では、インデックスｍを“１”だけインクリメントした後に、前記ステップＳ５４に進む。
【００５３】
ここで、ステップＳ８１の処理は、安全のためにこの位置に挿入した処理であり、この処理を省略したとしても、この処理と同様の処理がメインルーチン（次の発音／消音処理）に含まれているので、本来であれば問題ない。
【００５４】
図６および７は、前記ステップ２の発音／消音処理サブルーチンの詳細な手順を示すフローチャートである。
【００５５】
図６において、まず、インデックスｎをリセット（“０”）する（ステップＳ３１）。ここで、インデックスｎは、前記２種類のインデックスのうち、メインルーチンで使用されるものである。
【００５６】
次に、前記キーオンイベントバッファのインデックスｎで示される領域ｋｏ（ｎ）にデータ（すなわちキーコード）が格納されているか否かを判別する（ステップＳ３２）。
【００５７】
ステップＳ３２で、領域ｋｏ（ｎ）にデータが格納されていないとき、すなわちｋｏ（ｎ）＝０のときには、ステップＳ３５〜Ｓ３７をスキップしてステップＳ３３に進み、インデックスｎを“１”だけインクリメントした後に、ステップＳ３４で、インデックスｎの値が“８”であるか否かを判別する。
【００５８】
ステップＳ３４で、ｎ≠８のときには前記ステップＳ３２に戻る一方、ｎ＝８のときには図７のステップＳ３８に進む。
【００５９】
一方、ステップＳ３２で、領域ｋｏ（ｎ）にデータが格納されているとき、すなわちｋｏ（ｎ）≠０のときには、その対応する領域ｔｏ（ｎ）に格納されている値が“４”であるか否かを判別する（ステップＳ３５）。
【００６０】
ステップＳ３５で、ｔｏ（ｎ）＝４のとき、すなわち領域ｋｏ（ｎ）に当該キーコードが格納されてから３回カウントアップされたとき（３ｓｅｃ経過したとき）には、チャタリングによるキーオンではなく、実際にユーザが鍵スイッチを押すことによってなされたキーオンであると判定して、この領域ｋｏ（ｎ）に格納されたキーコードを前記音源回路１５に送って発音する（ステップＳ３６）。
【００６１】
続くステップＳ３７では、この領域ｋｏ（ｎ）をクリア（“０”）するとともに、その対応する領域ｔｏ（ｎ）をクリア（“１”）した後に、前記ステップＳ３３に進む。
【００６２】
一方、ステップＳ３５で、ｔｏ（ｎ）≠４のときには、ステップＳ３６およびＳ３７をスキップしてステップＳ３３に進む。
【００６３】
図７のステップＳ３８では、インデックスｍをリセット（“０”）する。ここで、インデックスｍは、前記２種類のインデックスのうち、メインルーチンで使用されるものである。
【００６４】
続くステップＳ３９では、前記キーオフイベントバッファのインデックスｍで示される領域ｋｆ（ｍ）にデータ（キーコード）が格納されているか否かを判別し、ｋｆ（ｍ）＝０のときには、ステップＳ４２〜Ｓ４７をスキップしてステップＳ４０に進み、インデックスｍを“１”だけインクリメントした後に、インデックスｍが“８”であるか否かを判別する（ステップＳ４１）。
【００６５】
ステップＳ４１で、ｍ＝８のとき、すなわちキーオフイベントバッファのすべての領域ｋｆ（０）〜ｋｆ（７）に対して、ステップＳ３９の判別処理を完了したときには、本発音／消音処理を終了する一方、ｍ≠８のとき、すなわちステップＳ３９の判別処理を行うべき領域が残っているときには、前記ステップＳ３９に戻る。
【００６６】
ステップＳ３９で、ｋｆ（ｍ）≠０のときには、その対応する領域ｔｆ（ｍ）に格納されている値が、“１１”，“２１”，“３１”，“４１”，“５１”のいずれかの値であるか否かを判別する（ステップＳ４２）。ここで、値１１，２１，３１，４１，５１は、キーオフイベントが発生した時点から、それぞれ１０ｍｓｅｃ，２０ｍｓｅｃ，３０ｍｓｅｃ，４０ｍｓｅｃ，５０ｍｓｅｃ経過した時点を示している。これは、領域ｔｆ（ｍ）の値は、キーオフイベントが発生した時点で“１”となり、その後、タイマ割込み処理I が実行される毎、すなわち１ｍｓｅｃ毎にカウントアップされるからである。
【００６７】
ステップＳ４２で、領域ｔｆ（ｍ）の値が、上記いずれの値にも一致しないときには、前記ステップＳ４０に進む一方、いずれかの値に一致するときには、この領域ｋｆ（ｍ）に格納されているキーコードに対応する鍵スイッチがオフ（中）であるか否かを判別する（ステップＳ４３）。
【００６８】
ステップＳ４３で、その鍵スイッチがオフ（中）であるときには、領域ｋｆ（ｍ）の値が“５０”より大きいか否かを判別する（ステップＳ４４）一方、その鍵スイッチがオフ（中）でないときには、対応する領域ｔｆ（ｍ）をリセット（“１”）して、タイマを再スタートさせた後に、前記ステップＳ４０に進む。
【００６９】
ステップＳ４４で、ｔｆ（ｍ）＞５０のときには、領域ｋｆ（ｍ）に格納されているキーコードを音源回路１５に送って消音し（ステップＳ４６）、次いで領域ｋｆ（ｍ）およびｔｆ（ｍ）をそれぞれクリア（“０”）した（ステップＳ４７）後に、ステップＳ４０に進む。
【００７０】
すなわち、ステップＳ４２〜Ｓ４６の処理では、キーオフイベントが発生してから、経過時間が１０，２０，３０，４０，５０ｍｓｅｃの各時点で、当該鍵スイッチがキーオフされているか否かをチェックし、全時点において当該鍵スイッチがキーオフされているときには、その時点が、キーオフイベント発生後５０ｍｓｅｃ経過した時点であれば、キーオフと判定して消音する。
【００７１】
図１０は、本実施の形態の鍵リバウンド信号除去装置が鍵リバウンド信号の除去を行うタイミングを示すタイムチャートであり、（ａ）は、前記押鍵検出回路３から検出されるキーオン／オフ信号の一例を示し、（ｂ）は、（ａ）の信号に対して本実施の形態の鍵リバウンド信号除去装置が決定したキーオンからキーオフまでのタイミングを示し、（ｃ）は、演奏者が実際に鍵を押鍵してから離鍵するまでのタイミングを示す。図中、縦軸はキーオン／オフの状態を示し、横軸は時刻を示している。
【００７２】
同図に示すように、時刻ｔ０で演奏者が押鍵を開始すると、このキーオンイベントが検出され、この状態で、対応する領域ｔｏ（ｍ）が３回カウントアップされると、すなわち３ｍｓｅｃ経過した時刻ｔ１になると、（ｂ）に示すように、本実施の形態の鍵リバウンド信号除去装置は、キーオンと判定し、当該キーイベントに対応するキーコードおよびそのキーオンを音源回路１５に出力する。
【００７３】
次に、時刻ｔ２でキーオフイベントが検出されると、その５０ｍｓｅｃ後の時刻ｔ３までには、１０ｍｓｅｃ毎にキーオフ状態か否かが検出され、この例ではキーオン状態が少なくとも１つ以上検出されるので、時刻ｔ２のキーオフイベントはノイズと判定されて、（ｂ）に示すように、キーオン状態が継続される。
【００７４】
さらに、時刻ｔ４でも、キーオフイベントが検出されるが、その５０ｍｓｅｃ後の時刻ｔ５までに、キーオン状態が検出されるため、同様に、時刻ｔ４のキーオフイベントはノイズと判定されて、キーオン状態が継続される。
【００７５】
そして、時刻ｔ６でキーオフイベントが検出されると、その５０ｍｓｅｃ後の時刻ｔ７までに、１０ｍｓｅｃ毎にキーオフ状態か否かが検出されたとしても、この例ではノイズは２つと少ないため、その検出時に、当該ノイズによりキーオン状態が検出される可能性は少ない。したがって、時刻ｔ７までには、一度もキーオフ状態は検出されず、（ｂ）に示すように、本実施の形態の鍵リバウンド信号除去装置は、時刻ｔ７でキーオフされたと判定し、当該キーイベントに対応するキーコードおよびそのキーオフを音源回路１５に送出する。
【００７６】
このように、本実施の形態では、キーオンイベントが発生した後、キーオンの状態で所定時間（たとえば３ｍｓｅｃ）経過したときに、キーオンと判定して当該鍵スイッチに対応するキーオン処理を行う一方、キーオフイベントが発生した後、所定のタイミングで当該鍵スイッチのキーオフをチェックし、そのチェック結果がキーオフであり、かつキーオフイベント発生後所定時間（たとえば５０ｍｓｅｃ）経過したときに、キーオフと判定して当該鍵スイッチに対応するキーオフ処理を行うようにしたので、簡単な処理でチャタリングを吸収することができる。
【００７７】
なお、本実施の形態では、主として汎用コンピュータを用いて鍵リバウンド信号除去装置を構成したが、これに限らず、専用の機器により構成してもよい。
【００７８】
また、上述した各実施の形態の機能を実現するソフトウェアのプログラムを記録した記憶媒体を、システムまたは装置に供給し、そのシステムまたは装置のコンピュータ（またはＣＰＵ５やＭＰＵ）が記憶媒体に格納されたプログラムを読出し実行することによっても、本発明の目的が達成されることは云うまでもない。
【００７９】
この場合、記憶媒体から読出されたプログラム自体が本発明の新規な機能を実現することになり、そのプログラムを記憶した記憶媒体は本発明を構成することになる。
【００８０】
プログラムを供給するための記憶媒体としては、たとえば、前記ＨＤＤ１１のハードディスク、ＣＤ−ＲＯＭ２１，ＭＯ，ＭＤ，フロッピーディスク２０、ＣＤ−Ｒ（CD- Recordable）、磁気テープ、不揮発性のメモリカード、ＲＯＭ６などを用いることができる。また、他のＭＩＤＩ機器１００や通信ネットワーク１０１を介してサーバコンピュータ１０２からプログラムが供給されるようにしてもよい。
【００８１】
また、コンピュータが読出したプログラムを実行することにより、上述した各実施の形態の機能が実現されるだけでなく、そのプログラムの指示に基づき、コンピュータ上で稼働しているＯＳなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは云うまでもない。
【００８２】
さらに、記憶媒体から読出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ５などが実際の処理の一部または全部を行い、その処理によって上述した各実施の形態の機能が実現される場合も含まれることは云うまでもない。
【００８３】
【発明の効果】
以上説明したように、本発明に依れば、鍵の押鍵状態が、ユーザが押鍵操作を行うことによって発生したものと決定された後、当該鍵の離鍵状態が検出されたときからカウントが開始され、そのカウント値が１つ以上の所定値に一致する毎に、当該鍵が押鍵状態であるかまたは離鍵状態であるかが検出され、この検出された状態に基づいて、当該鍵の離鍵状態が、ユーザが離鍵操作を行うことによって発生したものであるか、または鍵リバウンドによって発生したものであるかが決定されるので、製造コストの増大化を抑制しつつ簡単な方法でリバウンド信号を除去することが可能となる効果を奏する。
【００８４】
また、好ましくは、当該鍵が押鍵状態であることが検出されたときに、前記第２のカウントが停止されて、その値が初期値にリセットされるとともに、当該鍵が離鍵状態であることが検出され、かつ前記カウント値が所定値以上であるときに、当該鍵の離鍵状態は、ユーザが離鍵操作を行うことによって発生したものであると決定されるので、リバウンド信号をさらに精度よく除去することができる。
【図面の簡単な説明】
【図１】本発明の実施の一形態に係る鍵リバウンド信号除去装置の概略構成を示すブロック図である。
【図２】図１のＲＡＭの所定位置に確保されたキーオンイベントバッファおよびキーオフイベントバッファの構成を示す図である。
【図３】図１の鍵リバウンド信号除去装置、特にＣＰＵが実行するメインルーチンの手順を示すフローチャートである。
【図４】所定時間毎に発生するタイマ割り込みに応じて実行される割り込み処理I の手順を示すフローチャートである。
【図５】所定時間毎に発生するタイマ割り込みに応じて実行される割り込み処理IIの手順を示すフローチャートである。
【図６】図３の発音／消音処理サブルーチンの詳細な手順を示すフローチャートである。
【図７】図３の発音／消音処理サブルーチンの詳細な手順を示すフローチャートである。
【図８】図４のキースイッチイベント処理サブルーチンの詳細な手順を示すフローチャートである。
【図９】図４のキースイッチイベント処理サブルーチンの詳細な手順を示すフローチャートである。
【図１０】図１の鍵リバウンド信号除去装置が鍵リバウンド信号の除去を行うタイミングを示すタイムチャートである。
【符号の説明】
３  押鍵検出回路（鍵操作状態検出手段）
５  ＣＰＵ（鍵操作状態検出手段、第１のカウント手段、第２のカウント手段、鍵操作状態確認手段、第１の決定手段、第２の決定手段、リセット手段）
【図１】
0003799789.tif 000002
【図２】
0003799789.tif 000003
【図３】
0003799789.tif 000004
【図４】
0003799789.tif 000005
【図５】
0003799789.tif 000006
【図６】
0003799789.tif 000007
【図７】
0003799789.tif 000008
【図８】
0003799789.tif 000009
【図９】
0003799789.tif 000010
【図１０】
0003799789.tif 000011