(57)【特許請求の範囲】
【請求項１】
演奏データ中から複数のビットで構成される第１のデータを検出する検出手段と、
前記第１のデータを演奏情報として解釈し処理する第１の処理手段と、
前記第１のデータの下位２ビットの４つの値をそれぞれ親指、人差し指、中指、及び薬指又は小指を指示する運指情報として解釈し、前記運指情報に基づき指を表す情報を表示する第２の処理手段と
を有する演奏練習装置。
【請求項２】
演奏データを順次読み出す読み出し手段と、
前記読み出し手段が演奏データ中からノートオンイベントを読み出すのに応じて、該ノートオンイベントに対応するノートオフイベント中のノートオフベロシティをサーチするサーチ手段と、
前記サーチ手段がサーチしたノートオフベロシティを演奏練習情報として処理する演奏練習処理手段と
を有する演奏練習装置。
【請求項３】
ノートオンイベントとノートオフイベントを含む演奏データを変換し新たな演奏データを生成する手段であって、演奏データにおいてノートオフイベント中のノートオフベロシティに対応する演奏練習情報を、該ノートオフイベントに対応するノートオンイベントに関連付けて記憶する形式の演奏データを生成する演奏データ変換手段と、
前記演奏データ変換手段が生成する演奏データを順次読み出す読み出し手段と、
前記読み出し手段が演奏データ中からノートオンイベントを読み出すと、該ノートオンイベントに関連付けられた演奏練習情報を基に演奏練習の処理を行う演奏練習処理手段と
を有する演奏練習装置。
【請求項４】
（ａ）演奏データ中から複数のビットで構成される第１のデータを検出する手順と、
（ｂ）前記第１のデータを演奏情報として解釈し処理する手順と、
（ｃ）前記第１のデータの下位２ビットの４つの値をそれぞれ親指、人差し指、中指、及び薬指又は小指を指示する運指情報として解釈し、前記運指情報に基づき指を表す情報を表示する処理手順と
をコンピュータに実行させるためのプログラムを記録した媒体。
【請求項５】
（ａ）演奏データを順次読み出す手順と、
（ｂ）前記手順（ａ）で演奏データ中からノートオンイベントを読み出すのに応じて、該ノートオンイベントに対応するノートオフイベント中のノートオフベロシティをサーチする手順と、
（ｃ）前記サーチしたノートオフベロシティを演奏練習情報として処理する手順と
をコンピュータに実行させるためのプログラムを記録した媒体。
【請求項６】
（ａ）ノートオンイベントとノートオフイベントを含む演奏データを変換し新たな演奏データを生成する手順であって、演奏データにおいてノートオフイベント中のノートオフベロシティに対応する演奏練習情報を、該ノートオフイベントに対応するノートオンイベントに関連付けて記憶する形式の演奏データを生成する手順と、
（ｂ）前記手順（ａ）で生成された演奏データを順次読み出す手順と、
（ｃ）前記手順（ｂ）で演奏データ中からノートオンイベントを読み出すと、該ノートオンイベントに関連付けられた演奏練習情報を基に演奏練習の処理を行う手順と
をコンピュータに実行させるためのプログラムを記録した媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、電子鍵盤楽器等の演奏練習に用いる演奏練習装置及びプログラムを記録した媒体に関する。
【０００２】
【従来の技術】
演奏練習装置の一つとして、演奏者による押鍵操作と予め記憶されている同一曲の演奏データとを比較し、その比較結果に応じて曲の進行を制御するものがある。演奏者の押鍵操作が演奏データに一致しているときには曲の進行を続け、一致しないときには一致するまで曲の進行を中断する。
【０００３】
一致の比較対象である演奏データは、ガイドトラックと呼ばれるトラックに記憶されている。ユーザは、上記の一致進行制御を行うか否かを選択することができる。
【０００４】
一致進行制御を行う場合には、ガイドトラックに記憶されている演奏データ中の全ての音符（ノート）について一致進行制御を行う。一致進行制御を行わない場合には、全ての音符について一致進行制御を行わない。この場合、曲が中断されることはない。
【０００５】
初心者が、装飾音や和音等を含む難しい曲について演奏練習を行うと、誤った押鍵操作が多くなったり、または演奏速度が遅くなったりする。その結果、曲が中々先に進まない。初心者は、簡単なフレーズの部分については、スムーズに演奏練習を行うことができるが、難しいフレーズの部分については演奏が滞る。演奏練習を行う曲の中に難しいフレーズがあり、曲が中々進行しないときには、演奏者は演奏練習が嫌になり、途中で練習を諦める場合が多い。
【０００６】
また、上記の問題を解決するため、曲をアレンジし簡単なものにしてしまう手段が考えられる。この手段だと、初心者には都合が良いものとなるが、中級者または上級者には簡単すぎて、練習にならなくなってしまうという欠点がある。
【０００７】
そこで、必ずしも曲の全部の音符について一致進行制御を行うのではなく、個々の音符について一致進行制御を行うか否かを決める方法が、特開平２−１８９５７２号公報に示されている。
【０００８】
当該公報は、個々の音符に一致進行制御を行うか否かを決めるためのキューフラグを持たせる技術を開示している。しかし、キューフラグは、演奏データ中の各音符に付加されるので、データ量が増加してしまう。特に、音符の数が多い、すなわち長い曲については、データ量が大きく増加してしまう。
【０００９】
また、キューフラグは、演奏データ中の各音符に付加されるものであるので、演奏データが特殊フォーマットを形成することになり、データの汎用性がなくなってしまう。演奏データは、通常、自動演奏用の演奏データを用いる。汎用性のある演奏データであれば、一般的な自動演奏装置を用いて再生することができる。ところが、キューフラグを付加し、演奏データの汎用性がなくなってしまうと、一般的な自動演奏装置では再生できなくなってしまう。
【００１０】
【発明が解決しようとする課題】
演奏練習装置としての機能を充実させるため、個々の音符にキューフラグを付加すると、演奏データのデータ量が増加してしまう。また、キューフラグを付加すると、演奏データのフォーマットが専用になってしまうため、演奏データの汎用性がなくなってしまう。
【００１１】
本発明の目的は、演奏データのデータ量を増加させず、かつ演奏データの汎用性を維持しつつ、充実した機能を有する演奏練習装置又はプログラムを記録した媒体を提供することである。
【００１２】
【課題を解決するための手段】
本発明の一観点によれば、演奏練習装置は、演奏データ中から複数のビットで構成される第１のデータを検出する検出手段と、前記第１のデータを演奏情報として解釈し処理する第１の処理手段と、前記第１のデータの下位２ビットの４つの値をそれぞれ親指、人差し指、中指、及び薬指又は小指を指示する運指情報として解釈し、前記運指情報に基づき指を表す情報を表示する第２の処理手段とを有する。
【００１３】
演奏データ中の第１のデータは、複数のビットで構成される。第１のデータの全ビットを演奏情報として解釈することができる。ただし、第１のデータの下位ビットは、形式的には演奏情報データの一部であっても、内容的には演奏情報としての意義を失っている。第１のデータの下位ビットは演奏練習情報として用いることができる。第１のデータの下位ビットは、演奏情報と演奏練習情報の２つの役割を兼ねている。第１のデータが２つの情報を兼ね備えることにより、２つの情報を別のデータ領域に格納する場合に比べ、演奏データのデータ量は少ない。また、第１のデータは、演奏情報としての汎用性を維持している。
【００１４】
また、本発明の演奏練習装置は、演奏データを順次読み出す読み出し手段と、前記読み出し手段が演奏データ中からノートオンイベントを読み出すのに応じて、該ノートオンイベントに対応するノートオフイベント中のノートオフベロシティをサーチするサーチ手段と、前記サーチ手段がサーチしたノートオフベロシティを演奏練習情報として処理する演奏練習処理手段とを有する。
【００１５】
ノートオフベロシティは、内容的にはベロシティデータとしての意義を失い、演奏練習情報としての意義を有する。ただし、ノートオフベロシティは、ベロシティデータとしての形式を維持しているので、演奏データとしての汎用性を維持している。演奏データは、演奏練習情報を有するので、演奏練習機能を付加することができる。ノートオンイベントを読み出すとき、対応するノートオフベロシティをサーチし、当該ノートオフベロシティを演奏練習情報として得ることができる。
【００１６】
さらに、本発明の演奏練習装置は、ノートオンイベントとノートオフイベントを含む演奏データを変換し新たな演奏データを生成する手段であって、演奏データにおいてノートオフイベント中のノートオフベロシティに対応する演奏練習情報を、該ノートオフイベントに対応するノートオンイベントに関連付けて記憶する形式の演奏データを生成する演奏データ変換手段と、前記演奏データ変換手段が生成する演奏データを順次読み出す読み出し手段と、前記読み出し手段が演奏データ中からノートオンイベントを読み出すと、該ノートオンイベントに関連付けられた演奏練習情報を基に演奏練習の処理を行う演奏練習処理手段とを有する。
【００１７】
ノートオフベロシティは、形式的にはベロシティデータであるが、内容的には演奏練習情報としての意義を有する。ノートオンイベントとそれに対応するノートオフベロシティは演奏データ中において離れた位置にあるので、まず前処理として演奏データの変換を行い、演奏データとしての意義を有するノートオフベロシティを対応するノートオンイベントに関連付けて記憶しておく。その後、演奏データを順次読み出し、ノートオンイベントを読み出したときには、関連付けられた演奏練習情報を容易に取得し、演奏練習のための処理を行うことができる。
【００１８】
【発明の実施の形態】
図２は、本発明の実施例による演奏練習装置に用いる演奏データのフォーマット例を示す。このフォーマットは、スタンダードＭＩＤＩファイルと呼ばれているものであり、演奏データとしては汎用的なフォーマットである。
【００１９】
演奏データ１０は、ノートイベント１、タイミングデータ２、ノートイベント３、タイミングデータ４、エンドデータ５を有する。演奏データ１０は、その他、コントロールチェンジまたはプログラムチェンジ等を含むことができる。
【００２０】
ノートイベント１は、ノートオンイベントである。タイミングデータ２は、ノートイベント１とその次のノートイベント３との間の時間間隔を示す。ノートイベント３は、ノートオフイベントである。タイミングデータ４は、ノートイベント３とその次のノートイベント（図示せず）との間の時間間隔を示す。エンドデータ５は、演奏データ１０の終了を示す。
【００２１】
ノートイベント１と３は、共にＭＩＤＩ形式のデータであり、３バイトのデータである。ノートオンイベント１は、第１バイトがノートオン１ａであり、第２バイトがノートナンバ１ｂであり、第３バイトがベロシティ１ｃである。ノートオフイベント３は、第１バイトがノートオフ３ａであり、第２バイトがノートナンバ３ｂであり、第３バイトがベロシティ３ｃである。
【００２２】
本実施例では、ノートオンベロシティ１ｃまたはノートオフベロシティ３ｃの中に演奏練習フラグを埋め込む。演奏練習フラグは、演奏練習装置に演奏練習機能を付加するためのフラグである。
【００２３】
図１（Ａ）は、ＭＩＤＩ規格によるノートオンベロシティ１ｃの構成を示す。本実施例では、まず、同図のように、ＭＩＤＩ規格のノートオンベロシティ１ｃを準備する。なお、ノートオフベロシティ３ｃも同様の構成である。
【００２４】
ノートオンベロシティ１ｃは、１バイト（８ビット）からなり、その最上位ビットは、必ず０である。これは、ＭＩＤＩ規格で決められているデータフォーマットである。下位７ビットのデータ６が実際のベロシティのデータである。ベロシティデータ６は、７ビットであり、０〜１２７の範囲の数値で示される。ベロシティデータ６は、通常、音量を表すものとして用いられる。ノートオンベロシティ１ｃは、市販されているソフトウエアから読み出したものでも電子楽器を用いて作成したものでもよい。
【００２５】
図１（Ｂ）は、図１（Ａ）のノートオンベロシティ１ｃに演奏練習フラグ７を埋め込んだ図である。演奏データ提供者は、図１（Ａ）に示すノートオンベロシティ１ｃを準備した後、ノートオンベロシティ１ｃの下位２ビットを演奏練習フラグ７に書き換える。演奏練習フラグ７は、演奏者が設定または変更するようにしてもよい。
【００２６】
ノートオンベロシティ１ｃは、２通りに用いることができる。１つは、通常のＭＩＤＩ規格に従って下位７ビットまたは全ビットがベロシティデータ６として用いられる。もう１つは、下位２ビットが演奏練習フラグ７として用いられる。すなわち、ノートオンベロシティ１ｃの下位２ビットは、ベロシティデータ６の一部として使われると共に、演奏練習フラグ７としても使われる。演奏練習フラグ７は、下位２ビットに限定されず、下位１または３ビットでもよい。
【００２７】
ベロシティデータ６は、一部のビットが演奏練習フラグ７に書き換えられてしまうので、ベロシティデータ６としての値にはわずかな誤差を含むことになる。演奏練習フラグ７を設定する前のベロシティデータ６（図１（Ａ））は７ビットの精度を有するが、演奏練習フラグ７を設定した後のベロシティデータ６（図１（Ｂ））は上位５ビットの精度を有することになる。
【００２８】
ただし、ベロシティ１ｃの下位ビットに演奏練習フラグ７を設定するので、ベロシティデータ６としての精度はわずかに悪くなるものの、ベロシティデータ６が全く別の値に変わってしまうことはない。ベロシティデータ６の下位の１または２ビットを演奏練習フラグ７として用いる程度であれば、聴覚上許容できる範囲である。
【００２９】
ベロシティ１ｃの下位ビットに演奏練習フラグ７を設定すれば、データ量を増加させずに、演奏練習フラグ７を付加したのと同様の効果が得られる。また、ベロシティデータ６は、汎用性のある自動演奏装置においてもベロシティの値として用いることができるので汎用性が維持される。
【００３０】
ノートオフベロシティ３ｃの下位ビットに演奏練習フラグを埋め込んでもよい。一般的に、ノートオフベロシティを利用しない（無視する）音源装置が多く、ノートオフベロシティは、ノートオンベロシティよりも重要性が低いので、さらに多くの下位ビット、極端な場合はベロシティデータの全ビット、を演奏練習フラグに書き換えてもよい。
【００３１】
次に、演奏練習フラグ７の具体例を説明する。
（１）キューフラグ
ノートオンベロシティの下位１ビットを、キューフラグに用いる。キューフラグは、例えば演奏者による押鍵操作と演奏データとを比較し、曲の進行を制御するためのフラグである。
【００３２】
キューフラグが１であるときには、そのノートオンに対応する音符（ノート）が押鍵一致進行のための判断を行う音符であることを示す。逆に、キューフラグが０であるときは、そのノートオンに対応する音符が押鍵一致進行のための判断を行わない音符であることを示す。
【００３３】
キューフラグは、ノートオンの一致に応じて曲の進行を制御するものであり、鍵盤に限らず、ノートオンを生成することができる楽器であれば適用できる。
【００３４】
（２）運指情報
ノートオンベロシティの下位２ビット（数値０〜３）、ないし３ビット（数値０〜７）を、運指情報に用いる。運指情報（３ビットの場合）は、例えば演奏者が押鍵すべき指を示し、０が親指、１が人差し指、２が中指、３が薬指、４が小指である。運指情報を表示器に表示させれば、演奏者は、適切な指遣いを練習することができる。３ビットの場合、さらに３種類の情報を識別することができるので、グリッサンド（手のひら、指）の情報などを含ませてもよい。
【００３５】
なお、下位３ビットを運指情報に用いると、ノートオンベロシティの精度が悪くなってしまうので、下位２ビット（数値０〜３）を運指情報に用いるようにしてもよい。その場合、運指情報は、０が親指、１が人差し指、２が中指、３が薬指または小指とする。薬指と小指の区別はなくなるが、この区別はそれほど重要ではなく、それよりもノートオンベロシティの精度をそれほど低下させないことの利点は大きい。
【００３６】
（３）右手／左手情報
ノートオンベロシティの下位１ビットを、右手／左手情報に用いる。右手／左手情報は、例えば演奏者が押鍵操作すべき手の情報であり、０が右手、１が左手である。右手と左手の別を曲の進行に合わせて表示すれば、演奏者は、右手と左手を適切に使い分ける練習を行うことができる。
【００３７】
通常の演奏データは、右手のパートと左下のパートとを別のトラックに記録してあるので、左手のパートのみまたは右手のパートのみを再生することができる。しかし、右手用と左手用の２つのトラックが必要になる。
【００３８】
右手／左手情報を設定すれば、１つのトラックに右手のパートと左手のパートの両方を記録することができる。右手のパートのみを再生したい場合には、右手情報が設定されている音符（ノート）のみを再生すればよい。右手／左手情報を設定することにより、使用するトラックの数を減らすことができる。例えば、トラック数の少ない再生または録音装置（例えば４または８トラック）においては、使用するトラックを減らすことができる効果は大きい。
【００３９】
（４）音名情報（♯または♭）
ノートオンベロシティの下位１ビットを、音名情報に用いる。１つの黒鍵には、２通りの音名表現がある。例えば、Ｃ♯とＤ♭は、同じ黒鍵を表す。音名情報は、黒鍵を♯または♭のいずれで表すかを区別する。例えば、０が♯であり、１が♭である。演奏者は、その音名を♯または♭のいずれで表現するのが音楽的に正しいのかを学習することができる。
【００４０】
（５）演奏補助情報
ノートオンベロシティの下位２ビットまたは３ビットを、演奏補助情報に用いる。演奏補助情報は、例えば、スタッカート、レガート、クレッシェンド、デクレッシェンド、ｐｐ、ｐ、ｍｐ、ｍｆ、ｆ、ｆｆである。
【００４１】
以上、５つの演奏練習フラグの例を示した。演奏練習フラグは、ノートオンベロシティ１ｃに設定する場合に限定されず、ノートオフベロシティ３ｃ（図２）に設定するようにしてもよい。ノートオンベロシティは、通常、音量として用いられるが、ノートオフベロシティは、通常、使用されないことが多い。したがって、ノートオフベロシティに演奏練習フラグを設定する場合には、全てのビットを演奏練習フラグに用いてもよい。
【００４２】
ただし、演奏練習フラグをノートオフベロシティに設定する場合は、以下の工夫を要する。演奏練習フラグをノートオンベロシティに設定するのであれば、発音開始を指示するためのノートオンに対応して、容易に演奏練習フラグの処理を行うことができる。それに対し、演奏練習フラグをノートオンベロシティ１ｃ（図２）に設定するのではなく、その後に出現するノートオフベロシティ３ｃ（図２）に設定する場合には、発音開始を指示するためのノートオンに対応させることが困難である。これは、ノートオンイベント１とノートオフイベント３（図２）の間に種々のデータが入る可能性があるからである。このような不都合を解消するためには、ある工夫が必要になる。この点については、後にフローチャートを参照しながら説明する。
【００４３】
さらに、演奏練習フラグは、ノートオンベロシティまたはノートオフベロシティに限定されず、例えば、ボリュームやエフェクト等の他の制御情報の中に設定してもよい。
【００４４】
図３は、本実施例による演奏練習装置の構成を示すブロック図である。
押鍵検出回路１８は、鍵盤１７における鍵操作およびその操作速度を検出し、ノートオンまたはノートオフ信号等を生成する。これらノートオンまたはノートオフ信号には鍵の押鍵速度または離鍵速度を示すベロシティ情報が含まれる。スイッチ検出回路２０は、スイッチ１９におけるスイッチ操作を検出し、スイッチ信号を生成する。
【００４５】
バス２５には、押鍵検出回路１８およびスイッチ検出回路２０の他、表示回路２１、音源回路２２、効果回路２３、ＲＯＭ１１、ＲＡＭ１２、ＣＰＵ１３、タイマ１４、ＭＩＤＩインターフェース１５、フロッピディスク駆動装置１６が接続されている。これらの他、ＣＤ−ＲＯＭドライブや各種ネットワーク等を介して他のコンピュータ等とやりとりをするための通信インターフェースなどを備えてもよい。
【００４６】
ＲＡＭ１２は、フラグまたはバッファ等を記憶するＣＰＵ１３用のワーキングエリアを有する。ＲＯＭ１１は、各種パラメータまたはコンピュータプログラムを記憶する。ＣＰＵ１３は、ＲＯＭ１１に記憶されているコンピュータプログラムに従い、演算または制御を行う。なお、ＲＯＭ１１に記憶されているコンピュータプログラムに代えて、フロッピディスク、ＣＤ−ＲＯＭ、他のコンピュータ等からプログラムを本装置にインストールし、該プログラムに基づいて演算または制御を行うようにしてもよい。
【００４７】
タイマ１４は、ＣＰＵ１３に接続される。ＣＰＵ１３は、タイマ１４から供給される時間情報に応じて、所定の時間間隔でタイマ割り込み処理を行う。ＭＩＤＩインターフェース１５は、外部に対してＭＩＤＩデータを入出力することができる。
【００４８】
図２に示した演奏データは、フロッピディスク駆動装置１６またはＲＯＭ１１に記憶される。フロッピディスク駆動装置１６に演奏データが記憶されている場合には、フロッピディスク駆動装置１６からＲＡＭ１２に演奏データがロードされてから、演奏データの再生処理が行われる。
【００４９】
ＣＰＵ１３は、ＲＡＭ１２またはＲＯＭ１１に記憶されている演奏データを読み出し、楽音パラメータおよび効果パラメータをそれぞれ音源回路２２および効果回路２３に供給する。また、ＣＰＵ１３は、押鍵検出回路１８で生成されるノートオン信号等やスイッチ検出回路２０で生成されるスイッチ信号に応じて、楽音パラメータおよび効果パラメータを生成し、それぞれ音源回路２２および効果回路２３に供給する。
【００５０】
音源回路２２は、供給される楽音パラメータに応じて楽音信号を生成する。効果回路２３は、供給される効果パラメータに応じて、音源回路２２で生成される楽音信号に、例えばディレイやリバーブ等の効果を付与し、サウンドシステム２４に供給する。サウンドシステム２４は、Ｄ／Ａ変換器およびスピーカを含み、供給されるデジタル形式の楽音信号をアナログ形式に変換し、発音する。
【００５１】
なお、音源回路２２は、波形メモリ方式、ＦＭ方式、物理モデル方式、高調波合成方式、フォルマント合成方式、ＶＣＯ＋ＶＣＦ＋ＶＣＡのアナログシンセサイザ方式等、どのような方式であってもよい。
【００５２】
また、音源回路２２は、専用のハードを用いて構成するものに限らず、ＤＳＰ＋マイクロプログラムを用いて構成してもよいし、ＣＰＵ＋ソフトウェアのプログラムで構成するようにしてもよい。
【００５３】
さらに、１つの音源回路を時分割で使用することにより複数の発音チャンネルを形成するようにしてもよいし、１つの発音チャンネルにつき１つの音源回路で複数の発音チャンネルを構成するようにしてもよい。
【００５４】
次に、演奏練習フラグの説明を行う。例えば、演奏データ中において、ノートオンベロシティの下位のビットに演奏練習フラグを設定する。演奏練習フラグとしてキューフラグを用いた場合、ＣＰＵ１３は、ＲＡＭ１２またはＲＯＭ１１に記憶されている演奏データと鍵盤１７における押鍵操作とを比較し、一致する場合には曲を進行し、一致しない場合には曲の進行を中断する。
【００５５】
演奏練習フラグとして、運指情報、右手／左手情報、音名情報、演奏補助情報等を用いる場合には、それらの情報を表示回路２１に表示し、演奏者の演奏練習を補助する。
【００５６】
演奏練習フラグは、演奏データ中に予め設定しておくことができる。また、演奏者が演奏練習フラグを設定または変更することができる。その場合は、表示回路２１に表示されるエディット画面を用いて、個々のノートについて設定または変更を行うことができる。当該エディット画面は、シーケンサ用のエディット画面を用いることができる。
【００５７】
また、人間の手作業により演奏練習フラグを設定する他、演奏データを所定のアルゴリズムによって解析することで演奏練習フラグを設定してもよいし、演奏者の各指にセンサを装着した状態で演奏を収録し、どの指、どちらの手で演奏したかを検出することができるようにして演奏練習フラグを設定してもよい。
【００５８】
次に、ノートオンベロシティの一部に、キューフラグ、運指情報、右手／左手情報、音名情報をそれぞれ設定した場合についての処理を説明する。
【００５９】
図４は、ノートオンベロシティの一部をキュー（一致進行）フラグとして使用した場合のメインルーチンのフローチャートである。
【００６０】
ステップＳＡ１では、フラグまたはレジスタ等のイニシャライズを行う。
ステップＳＡ２では、一致進行処理を行う。一致進行処理は、演奏データの次の音に対応する鍵を所定時間経過しても演奏者が押鍵しないときに曲の進行を中断する処理である。詳細な処理は、後に図９を参照しながら説明する。
【００６１】
ステップＳＡ３では、演奏データ読み出し処理を行う。演奏データ読み出し処理は、ＲＡＭまたはＲＯＭに記憶されている演奏データを読み出し、読み出した演奏データの音に対応する鍵のＬＥＤ等を点灯する処理である。詳細な処理は、後に図５、図７を参照しながら説明する。
【００６２】
ステップＳＡ４では、押鍵処理を行う。押鍵処理は、鍵盤における押鍵操作等を検出して、当該操作に応じた処理を行う。ノートオンを検出したときには、発音処理を行い、ノートオフを検出したときには消音処理を行う。演奏者が正しい押鍵操作を行わないために曲の進行が中断しているときにノートオンが検出されかつそのノートオンが演奏データの音に一致しているときには、曲の進行を再開する。詳細な処理は、後に図１０を参照しながら説明する。
【００６３】
ステップＳＡ５では、その他処理を行う。その他処理は、例えば演奏練習のスタートを指示するための処理、テンポや音量の変更、各種モードの設定を行う。その後、ステップＳＡ２へ戻り、上記の処理を繰り返す。
【００６４】
演奏者による押鍵操作が演奏データと一致すれば曲が進行し、一致しなければ曲が停止する。
【００６５】
図５は、図４のステップＳＡ３における演奏データ読み出し処理の詳細を示すフローチャートである
ステップＳＢ１では、再生タイマが０以下であるか否かをチェックする。再生タイマが０以下であることは、次のイベントのタイミングに達していることを意味する。再生タイマは、タイミング情報によって設定され、次に示す再生タイマ割り込み処理によりカウントが行われる。
【００６６】
図６（Ａ）は、再生タイマ割り込み処理を示すフローチャートである。この割り込み処理は、例えば１０ｍｓの所定時間間隔で行われる。ステップＳＣ１では、再生タイマの値をデクリメントする。その後、割り込み前の処理に戻る。再生タイマは、演奏練習のスタートが指示されると０に初期設定され、その後例えば１０ｍｓ毎にデクリメントされる。
【００６７】
図５に戻り、ステップＳＢ１において、再生タイマが０以下であると判断されたときには、ステップＳＢ２へ進む。ステップＳＢ２では、ＲＡＭまたはＲＯＭに記憶されている演奏データからイベントを読み出す。１イベントとは、例えば図２に示すノートイベント１またはタイミングデータ２である。
【００６８】
ステップＳＢ３では、読み出したイベントがノートイベントであるか否かをチェックする。ノートイベントとは、ノートオン、ノートオフ等のイベントであり、例えば図２に示すノートイベント１または３である。ノートイベントであるときには、ステップＳＢ４へ進み、ノートイベント処理を行う。ノートイベント処理は、ノートオンベロシティの一部に設定されているキューフラグの処理等を含む。詳細な処理は、後に図７を参照しながら説明する。その後、図４のメインルーチンの処理へ戻る。
【００６９】
ステップＳＢ３において、読み出したイベントがノートイベントでないと判断されたときには、ステップＳＢ５へ進む。ステップＳＢ５では、読み出したイベントがタイミングデータであるか否かをチェックする。タイミングデータとは、ノートイベントと次のノートイベントとの間の時間間隔を示し、例えば図２に示すタイミングデータ２または４である。読み出したイベントがタイミングデータであるときには、ステップＳＢ６へ進む。
【００７０】
ステップＳＢ６では、該タイミングデータ×テンポ係数の値を、再生タイマに加算する。再生タイマは、図６（Ａ）の割り込み処理により１０ｍｓ単位でデクリメントされている。テンポ係数は、タイミングデータの単位を再生タイマの単位（１０ｍｓ）に変換するための係数である。このようにして次のノートイベントまでの時間が再生タイマに設定される。その後、図４のメインルーチンの処理へ戻る。
【００７１】
再生タイマに上記の値が加算されると、その後１０ｍｓ間隔で再生タイマの値がデクリメントされる。ステップＳＢ１では、再生タイマが０よりも大きい間は、演奏データのイベントを読み出さずに、図４のメインルーチンの処理へ戻る。再生タイマの値が０以下になったときには、次のイベントの読み出しタイミングがきたことを意味するので、ステップＳＢ２へ進み、次のイベントを読み出し、上記と同様の処理を繰り返す。
【００７２】
なお、ステップＳＢ６において、再生タイマに所定の値を設定するのではなく、所定の値を加算している点に注意する必要がある。図５に示す演奏データ読み出し処理は、タイマ割り込み処理ではないので、通常一定時間間隔では行われない。つまり、ステップＳＢ１において毎回再生タイマが０の時点でステップＳＢ２へ進むのであれば、ステップＳＢ６において再生タイマを所定の値に更新するようにしてもよいが、ステップＳＢ１において再生タイマの値が負の時にステップＳＢ２へ進む場合もあるので、ステップＳＢ６においては再生タイマに所定の値を加算する必要がある。
【００７３】
読み出したイベントが、ステップＳＢ３においてノートイベントではないと判断され、かつステップＳＢ５においてタイミングデータでないと判断されたときには、その他イベントであるので、ステップＳＢ７へ進む。その他イベントは、例えばプログラムチェンジまたはコントロールチェンジ等である。
【００７４】
ステップＳＢ７では、その他イベントの処理を行う。例えば、その他イベントがプログラムチェンジである場合は、音色変更の処理を行う。その後、図４のメインルーチンの処理へ戻る。
【００７５】
図７は、図５のステップＳＢ４におけるノートイベント処理の詳細を示すフローチャートである。
【００７６】
ステップＳＤ１では、読み出したノートイベントがノートオンイベントであるか否かをチェックする。ノートオンイベントであるときには、ステップＳＤ１１へ進み、発音処理を行う。発音処理は、ノートオンイベントに含まれるノートナンバ（音高）およびノートオンベロシティ（音量）に応じた楽音パラメータを音源回路に供給し、サウンドシステムにおいて発音させる。
【００７７】
ノートオンベロシティは、ベロシティデータ（音量）として解釈され処理される。ただし、ノートオンベロシティは、下位ビットにキュー（一致進行）フラグが設定されているので、ベロシティデータとしての精度は少し落ちる。なお、この発音処理は、演奏者の押鍵処理により発音される音と区別するため、小さい音量で発音させたり、異なる音色で発音させることができる。その後、ステップＳＤ２へ進み、ガイドランプを点灯する。
【００７８】
図１５（Ａ）に、ガイドランプの例を示す。鍵盤は、複数の鍵４４を有する。複数の鍵４４のそれぞれに一つずつガイドランプ４２が設けられている。ガイドランプ４２は、例えばＬＥＤである。ノートオンイベントが読み出されると、それに対応するノートナンバのガイドランプ４３が点灯する。ガイドランプ４３を点灯することにより、次に押鍵すべき鍵を演奏者に知らせることができる。これは、演奏者のマニュアル演奏を助ける。
【００７９】
ステップＳＤ３は、キュー（一致進行）フラグをノートオフベロシティの下位ビットに設定した場合の処理である。この処理の説明は、後に行う。キューフラグをノートオンベロシティの下位ビットに設定した場合には、ステップＳＤ３の処理を飛び越し、ステップＳＤ４へ進む。
【００８０】
ステップＳＤ４では、ノートオンベロシティが奇数であるか偶数であるかをチェックする。ノートオンベロシティが奇数であることは、ノートオンベロシティの下位１ビットが１であることを示す。つまり、キューフラグが１であることを示す。その場合は、当該音符が一致進行のための判断をする音符であることを意味するので、ステップＳＤ５へ進む。
【００８１】
ステップＳＤ５では、図８（Ａ）に示す再生一致進行バッファにイベントを格納し、該イベントのタイマ値を０に設定する。例えば再生一致進行バッファに、読み出した演奏データのノートオンイベント１（図２）中のノートナンバ１ｂ（例えばＣ４またはＧ４）を格納し、タイマ値を０に設定する。このタイマ値は、先の再生タイマ（図６（Ａ））とは無関係であり、再生一致進行バッファに当該イベントが格納されてからの時間を表す。その後、図５（図４）のフローチャートの処理に戻る。
【００８２】
ステップＳＤ４において、ノートオンベロシティが偶数であると判断されたときには、ノートオンベロシティの下位１ビットが０であることを示す。つまり、キューフラグが０であることを示す。その場合は、当該音符が一致進行対象外の音符であることを意味するので、ステップＳＤ６へ進む。
【００８３】
ステップＳＤ６では、一致進行モードが１であるか２であるかをチェックする。一致進行モードが１のときは上級者向けのモードであり、一致進行制御を全ての音符について行う。一致進行モードが２のときは初級者向けのモードであり、キューフラグに応じた所定の音符のみについて一致進行制御を行う。この一致進行制御モードは、図４のステップＳＡ５におけるその他処理で設定される。
【００８４】
一致進行モードが１であるときには、キューフラグの値にかかわらず、全ての音符について一致進行制御を行うので、ステップＳＤ５へ進み、上記と同様に、再生一致進行バッファにイベントを格納し、タイマ値を０に設定する。
【００８５】
すなわち、一致進行モードが１のときは、キューフラグが０であっても１であっても、必ずイベントを再生一致進行バッファに格納する。その後、図５（図４）のフローチャートの処理へ戻る。
【００８６】
一致進行モードが２であるときには、キューフラグに応じて一致進行のための判断を行うか否かを決めるので、ノートオンベロシティが偶数、すなわちキューフラグが０のものについては、イベントを再生一致進行バッファに格納せずに、ステップＳＤ６から図５（図４）のフローチャートの処理へ戻る。
【００８７】
ステップＳＤ１において、読み出したイベントがノートオンイベントでないと判断されたときには、ノートオフイベントであることを意味するので、ステップＳＤ１２へ進み、当該ノートオフイベントに対応する音の消音処理を行う。その後、ステップＳＤ７へ進む。
【００８８】
ステップＳＤ７では、当該ノートオフイベントに対応するノートオンイベント読み出し時にステップＳＤ２で点灯したガイドランプを消灯する。その後、図５（図４）のフローチャートの処理へ戻る。
【００８９】
なお、キューフラグをノートオンベロシティの下位ビットではなく、ノートオフベロシティの下位ビットに設定する場合には、ステップＳＤ３の処理を行う。ステップＳＤ３は、ステップＳＤ２においてガイドランプを点灯した後に行われる。
【００９０】
ステップＳＤ３では、上記で読み出したノートオンイベントに対応するノートオフイベントをサーチし、当該ノートオフイベント中のノートオフベロシティを得る。ステップＳＤ４では、ノートオフベロシティが奇数であるか偶数であるかをチェックし、後は上記と同様な処理を行う。
【００９１】
図９は、図４のステップＳＡ２における一致進行処理の詳細を示すフローチャートである。
【００９２】
ステップＳＥ１では、一致進行タイマが０より大きいか否かをチェックする。一致進行タイマは、次に示す一致進行タイマ割り込み処理によりカウントが行われる。
【００９３】
図６（Ｂ）は、一致進行タイマ割り込み処理を示すフローチャートである。この割り込み処理は、例えば１０ｍｓの所定時間間隔で行われる。ステップＳＣ２では、一致進行タイマの値をインクリメントする。その後、割り込み前の処理に戻る。一致進行タイマは、演奏練習のスタートが指示されると０に初期設定され、その後例えば１０ｍｓ毎にインクリメントされる。
【００９４】
図９に戻り、ステップＳＥ１において、一致進行タイマが０より大きいと判断されたときには、一致進行制御を行うため、ステップＳＥ２へ進む。一致進行タイマが０であるときには、一致進行処理を行わずに、図４のメインルーチンの処理へ戻る。このように、一致進行タイマを用いて一致進行制御のための負荷を軽減し、かつほぼ一定時間毎に一致進行制御を行わせる。
【００９５】
ステップＳＥ２では、一致進行タイマを０にリセットする。一致進行タイマは、次のインクリメント（図６（Ｂ））まで０となる。ステップＳＥ２の処理は、後により詳しく説明するように、平均して一致進行タイマの単位時間（例えば１０ｍｓ）間隔で通過することになる。
【００９６】
ステップＳＥ３では、ステップＳＥ１およびＳＥ２で述べた一致進行タイマとは別に、再生一致進行バッファ（図８（Ａ））と手弾き一致進行バッファ（図８（Ｂ））の両方の全てのイベントについてのタイマ値をインクリメントする。
【００９７】
既に述べたように、演奏データのイベントを格納するための再生一致進行バッファは、図７のステップＳＤ５においてイベントを格納する。後に説明するが、手弾き一致進行バッファは、鍵盤における押鍵操作によるイベントを格納するバッファである。
【００９８】
両バッファのタイマ値は、共に平均して１０ｍｓ間隔でインクリメントされる。
【００９９】
ステップＳＥ４では、ポーズ判定を行い、ポーズ条件を満たしているか否かをチェックする。再生一致進行バッファ（図８（Ａ））の中のイベントにおいて、タイマ値が所定値以上のものがあるときにはポーズ条件を満たすと判断する。
【０１００】
バッファのタイマ値はステップＳＥ３において約１０ｍｓ毎にインクリメントされるので、タイマ値の１は１０ｍｓに相当する。所定値が例えば５０である場合は、５００ｍｓ経過したイベントがバッファに残っているときにポーズ条件を満たすことになる。演奏者が、演奏データに対応する適切な鍵を５００ｍｓ経過しても押鍵しないときには、ポーズ条件を満たし、ステップＳＥ５へ進む。
【０１０１】
ステップＳＥ５では、ポーズ設定を行う。具体的には、ポーズフラグを１にセットし、図６（Ａ）に示す割り込み処理による再生タイマのデクリメントを停止する。その後、図４のメインルーチンの処理へ戻る。再生タイマのデクリメントを停止すれば、図５のステップＳＢ１において、再生タイマが０以下にならないので、ステップＳＢ２における演奏データの次のイベントの読み出しが停止され、曲の進行が停止する。
【０１０２】
すなわち、演奏データが読み出されてから例えば５００ｍｓ経過しても、演奏者が当該演奏データに対応する鍵を押鍵しないときには、ポーズ設定により曲の進行が中断し、演奏者の適正な押鍵操作を待つ。
【０１０３】
ステップＳＥ４において、ポーズ条件を満たさないと判断されたときには、ポーズ設定を行わずに、図４のフローチャートの処理へ戻る。
【０１０４】
次に、ステップＳＥ１において平均して１０ｍｓ毎にＹＥＳ（ステップＳＥ２）へ進む理由を説明する。一致進行タイマ（図６（Ｂ））は、例えば１０ｍｓ毎にインクリメントされる。
【０１０５】
図９の一致進行処理は、タイマ割り込み処理ではないので、一定時間間隔では行われないが、平均して１ｍｓ間隔でステップＳＥ１の判断が行われる場合を考える。その場合、一致進行タイマが１にインクリメントした後、次のインクリメントまで平均１０回ステップＳＥ１を通る。最初のステップＳＥ１では、一致進行タイマが１なので、ＹＥＳ（ステップＳＥ３〜ＳＥ５）へ進む。残り９回のステップＳＥ１では、一致進行タイマが０にリセットされているため一致進行処理はスルーする。このようにして、ステップＳＥ２〜ＳＥ５の処理は、約１０ｍｓに１回行われることになる。
【０１０６】
図１０は、図４のステップＳＡ４における押鍵処理の詳細を示すフローチャートである。
【０１０７】
ステップＳＦ１では、鍵盤上における鍵操作により生じたキーイベントがあるか否かをチェックする。キーイベントがあるときには、キーイベントの処理を行うため、ステップＳＦ２へ進む。キーイベントがないときには、キーイベントの処理を行わずに、図４のメインルーチンへ戻る。
【０１０８】
ステップＳＦ２では、上記のキーイベントがキーオンイベントであるか否かをチェックする。キーオンイベントであるときには、ステップＳＦ１１へ進む。
【０１０９】
ステップＳＦ１１では、当該キーオンイベントの発音処理を行う。発音処理は、キーオンイベントおよびそれに対応するパラメータを音源回路２２および効果回路２３（図３）に供給する処理である。サウンドシステム２４では、当該キーオンイベントに応じて発音される。その後、ステップＳＦ３へ進む。
【０１１０】
ステップＳＦ３では、図８（Ｂ）に示す手弾き一致進行バッファに上記のイベントを格納し、該イベントのタイマ値を０に設定する。手弾き一致進行バッファには、ノートナンバとして例えばＡ３を格納し、タイマ値を０に設定する。このタイマ値は、当該バッファにイベントが格納されてからの時間を表すものであり、その後、図９のステップＳＥ３においてインクリメントされる。
【０１１１】
ステップＳＦ４では、再生一致進行バッファ（図８（Ａ））と手弾き一致進行バッファ（図８（Ｂ））のイベントを比較する。再生一致進行バッファには、演奏データのイベントが格納され、手弾き一致進行バッファには演奏者の鍵盤操作によるイベントが格納される。
【０１１２】
ステップＳＦ５では、両バッファに一致するイベントがあるか否か、すなわち同じノートナンバのイベントがあるか否かをチェックする。一致するイベントがないときには、図４のメインルーチンの処理へ戻る。一致するイベントがあるときには、演奏者が正しい鍵を押鍵したことを意味するので、ステップＳＦ６へ進み、一致するイベントを両バッファから削除する。
【０１１３】
ステップＳＦ７では、現在ポーズ中であるか否かをチェックする。ポーズ中でないときには、図４のメインルーチンの処理へ戻る。ポーズ設定は、図９のステップＳＥ５において行われる。ポーズフラグが１にセットされているときには、ポーズ中であると判断する。ポーズ中に正しいキーオンがなされたときはポーズを解除するため、ステップＳＦ８へ進む。
【０１１４】
ステップＳＦ８では、ポーズ解除を行う。具体的には、ポーズフラグを０にリセットする。そして、図９のステップＳＥ５で停止された再生タイマのデクリメントを再開する。再生タイマのデクリメントを再開すれば、再び演奏データの読み出しが再開し（図５のステップＳＢ２）、曲が進行する。その後、図４のメインルーチンの処理へ戻る。
【０１１５】
ステップＳＦ２においてキーオフイベントが検出されたときには、ステップＳＦ１２へ進む。ステップＳＦ１２では、当該キーオフイベントに対応する音の消音処理を行う。その後、ステップＳＦ９へ進む。
【０１１６】
ステップＳＦ９では、手弾き一致進行バッファ（図８（Ｂ））から当該キーオフイベントに対応するキーオンイベントを削除する。なお、演奏者が正しい押鍵をしたときには、ステップＳＦ６において当該イベントが手弾き進行バッファおよび再生一致進行バッファから削除される。演奏者が誤った押鍵をしたときには、ステップＳＦ９において当該イベントが手弾き進行バッファから削除される。その後、図４のメインルーチンの処理へ戻る。
【０１１７】
なお、キューフラグに応じてノートナンバ用一致進行バッファを用いて一致進行を制御する場合を説明したが、その際、ノートナンバが一致するか否かにより進行を制御すると共に進行速度を制御してもよい。
【０１１８】
以上は、演奏練習フラグ（例えばキューフラグ）をノートオンベロシティまたはノートオフベロシティの一部に設定する場合について説明した。演奏練習フラグをノートオフベロシティの一部に設定する場合には、ノートオンイベントが検出された時点で、対応するノートオフイベントのベロシティをサーチし、ノートオフベロシティ中の演奏フラグの判断を行った。
【０１１９】
次に、演奏練習フラグをノートオフベロシティに設定した場合の他の例を示す。演奏練習の処理を行う前に、前処理として、ノートオフベロシティに含まれている演奏練習フラグを読み出して、当該ノートオフに対応するノートオンの後に格納する処理を行う。
【０１２０】
図１１は、処理前の演奏データ１０と処理後の演奏データ３０を示す。
処理前の演奏データ１０は、図２と同じスタンダードＭＩＤＩファイルの形式であり、ノートオンイベント１とそれに対応するタイミングデータ２とノートオフイベント３とそれに対応するタイミングデータ４を有する。ノートオフイベント３は、ノートオンイベント１によるノートオンをノートオフするためのイベントである。
【０１２１】
演奏練習フラグは、ノートオフベロシティ３ｃの一部に設定されている。通常、ノートオフベロシティ３ｃの値は演奏データとして用いられないことが多いので、ノートオフベロシティ３ｃの全ビットを演奏練習フラグに用いてもよい。
【０１２２】
処理後の演奏データ３０は、演奏データ１０に演奏練習フラグ３１を付加したものである。処理前において、演奏データ１０は、ノートオフベロシティ３ｃ中に演奏練習フラグを有する。処理後において、演奏データ３０は、ノートオンイベント１とそのタイミングデータ２との間に演奏練習フラグ３１を有する。
【０１２３】
演奏練習フラグ３１をノートオンイベント１の直後に設けることにより、ノートオンイベント１を読み出した時点で、直ちに演奏練習フラグ３１を判断することができる。
【０１２４】
図１２は、演奏データ１０から演奏データ３０へのデータ変換の処理を示すフローチャートである。
【０１２５】
ステップＳＧ１では、演奏データ１０からイベントを読み出す。例えば、ノートオンイベント、ノートオフイベントまたはタイミングデータである。
【０１２６】
ステップＳＧ２では、読み出したイベントがノートオンイベントであるか否かをチェックする。ノートオンイベントであるときには、ステップＳＧ３で演奏データ３０を生成するためのバッファにノートオンイベントを転送する。
【０１２７】
ステップＳＧ４では、上記の演奏データ３０用のバッファにおいてノートオンイベントの後に１バイトの空白バイトを作成する。その後、ステップＳＧ１へ戻り、演奏データ１０から次のイベントを読み出す。
【０１２８】
ステップＳＧ２において読み出したイベントがノートオンイベントでないと判断されたときには、ステップＳＧ５へ進む。ステップＳＧ５では、読み出したイベントがノートオフイベントであるか否かをチェックする。ノートオフイベントであるときには、ステップＳＧ６へ進む。
【０１２９】
ステップＳＧ６では、当該ノートオフイベントに含まれるノートオフベロシティ中の演奏練習フラグを演奏データ１０から読み出す。ステップＳＧ７では、当該演奏練習フラグを対応ノートオンの空白バイトに書き込む。空白バイトは、ステップＳＧ４においてノートオンイベントの後に既に生成されている。
【０１３０】
ステップＳＧ８では、当該ノートオフイベントを演奏データ３０用のバッファに転送する。その後、ステップＳＧ１へ戻り、次のイベントについて処理を繰り返す。
【０１３１】
ステップＳＧ５において読み出したイベントがノートオフイベントでないと判断されたときには、タイミングデータ、エンドデータまたはコントロールチェンジ等であるので、ステップＳＧ９へ進み、当該イベントを演奏データ３０用のバッファに転送する。
【０１３２】
ステップＳＧ１０では、当該イベントがエンドデータであるか否かをチェックする。エンドデータでないときには、ステップＳＧ１へ戻り、次のイベントについて処理を繰り返す。エンドデータであるときには、演奏データの終了を意味するので、処理を終了する。
【０１３３】
このフローチャート全体の処理は、図４のメインルーチンのステップＳＡ５におけるその他処理において行われる。具体的には、演奏者が演奏練習のスタートスイッチを押した後に行われ、その後、前述の演奏練習の処理が行われる。演奏練習の処理は、前述の通り、ノートオンベロシティ中に演奏練習フラグが設定されている場合と同様の処理である。
【０１３４】
上記の方法により、データ変換を行った場合は、元来ノートオフベロシティに演奏練習フラグが設定されているが、変換後のデータについてはノートオンベロシティに演奏練習フラグが設定されているものとして扱うことができる。しかも、ノートオンベロシティ自体にはフラグが設定されていないので、ノートオンベロシティの精度が低下しない。
【０１３５】
なお、ノートオフベロシティをノートオンイベントと対応させて記憶する方法は上述した方法に限られるものではない。例えば、次のような方法も可能である。
【０１３６】
まず、予めノートナンバとノートオフベロシティを、ノートオンイベントの出現順に記憶させる配列を用意する。この配列は、１曲全体のノートナンバとノートオフベロシティを記憶させるだけの容量を用意してもよいし、所定数（例えば１６個）のノートナンバとノートオフベロシティのみを記憶させるだけの容量を用意し、演奏練習の進行とともに、使用済みの領域を新たなデータの記憶に利用するリングバッファ形式としてもよい。
【０１３７】
そして、前処理として、演奏練習の開始前に、演奏データを読み出し、ノートオンイベントを見つけたら、該ノートオンイベントに含まれるノートナンバを配列中のノートナンバ領域に記憶させ、ノートオフイベントを見つけたら、該ノートオフイベントに含まれるノートオフベロシティの値を、該ノートオフイベントに含まれるノートナンバと同一ノートナンバを直前に記憶させた配列中の位置に対応するノートオフベロシティ領域に書き込む。
【０１３８】
このような処理により、ノートオンイベントの出現順に、ノートナンバ、ノートオフベロシティを記憶させた配列ができあがる。そして、演奏練習の際、ノートオンイベントが読み出されたときにこの配列を参照し、順番に対応するノートオフベロシティを読み出すようにすればよい。
【０１３９】
なお、配列の数を所定数に限定した場合は、演奏練習の進行とともに、配列中の使用済みとなった領域に、新たにノートナンバとノートオフベロシティを記憶させる処理を適宜並行して行えばよい。また、ノートオンイベントの出現順にノートナンバとノートオフベロシティを記憶させるようにしたが、ノートオンイベントの出現順にノートオフイベントが並んでいることになるので、ノートナンバをあえて記憶させなくてもよい。この場合、ノートオフイベントを記憶させる配列を作成する際に、ノートオンイベントの出現順にノートオフベロシティが記憶されるように、適宜記憶順序を管理しながら配列作成処理を行うようにすればよい。
【０１４０】
以上は、演奏練習フラグの一例としてキューフラグを用いる場合を説明した。次に、演奏練習フラグの他の例として、運指識別フラグ（運指情報）を用いる場合を説明する。
【０１４１】
図１３は、運指識別フラグを用いる場合のメインルーチンの処理を示すフローチャートである。このメインルーチンは、図４のメインルーチンと一部重複している。
【０１４２】
ステップＳＡ１では、フラグまたはレジスタ等のイニシャライズを行う。ステップＳＡ３では、演奏データ読み出し処理を行う。ステップＳＡ５では、その他処理を行う。その後、ステップＳＡ３へ戻り、処理を繰り返す。
【０１４３】
なお、図４におけるステップＳＡ２の一致進行処理を省略しているが、同様な処理を行ってもよい。また、図４のステップＳＡ４に対応する押鍵処理は、図１３のステップＳＡ５のその他処理で行われる。
【０１４４】
図１３のステップＳＡ３における演奏データ読み出し処理は、具体的には、先に示した図５のフローチャートの処理である。ただし、図５のステップＳＢ４のノートイベント処理は、キューフラグの場合と異なり、図１４に示す通りである。
【０１４５】
図１４は、運指識別フラグを用いた場合のノートイベント処理の詳細を示すフローチャートである。運指識別フラグが２ビットである場合を説明する。
【０１４６】
ステップＳＩ１では、先に読み出したイベントがノートオンイベントであるか否かをチェックする。ノートオンイベントであるときには、ステップＳＩ１１へ進み、発音処理を行う。発音処理は、ノートオンイベントに含まれるノートナンバ（音高）およびノートオンベロシティ（音量）に応じた楽音パラメータを音源回路に供給し、サウンドシステムにおいて発音させる。
【０１４７】
ノートオンベロシティは、ベロシティデータ（音量）として解釈され処理される。ただし、ノートオンベロシティは、下位ビットに運指識別フラグが設定されているので、ベロシティデータとしての精度は少し落ちる。その後、ステップＳＩ２へ進み、当該ノートオンイベント中のノートナンバ１ｂ（図２）に対応する鍵のガイドランプを点灯する。
【０１４８】
図１５（Ａ）は、ガイドランプの点灯例を示す。鍵盤は、複数の鍵４４を有する。ガイドランプ４２は、例えばＬＥＤであり、複数の各鍵４４のそれぞれに一つずつ設けられる。ノートオンイベントが読み出されると、ノートオンイベント中のノートナンバに対応するガイドランプ４３が点灯する。ガイドランプ４２は、演奏者が次に押鍵すべき鍵を知らせる。液晶表示器（ＬＣＤ）４１は、後に示す処理により、演奏者が押鍵すべき指の番号を表示する。なお、ＬＣＤ４１は、全鍵について１つ設けてもよいし、各鍵に１つずつ設けてもよい。
【０１４９】
図１４のフローチャートに戻り、運指識別フラグをノートオンベロシティの下位２ビットに設定するか、またはノートオフベロシティの下位２ビットに設定するかにより処理は異なる。
【０１５０】
ノートオンベロシティに設定した場合には、ステップＳＩ３の処理を飛び越し、ステップＳＩ４へ進む。ノートオフベロシティに設定した場合には、ステップＳＩ３の処理を行ってから、ステップＳＩ４へ進む。
【０１５１】
ステップＳＩ３では、上記で読み出したノートオンイベントに対応するノートオフイベントをサーチし、当該ノートオフイベント中のノートオフベロシティを得る。
【０１５２】
ステップＳＩ４では、ノートオンベロシティまたはノートオフベロシティの下位２ビットである運指識別フラグの値をチェックする。
【０１５３】
下位２ビットの値が０であるときには、ステップＳＩ５へ進み、親指を意味する「１」をＬＣＤ４１（図１５（Ａ））に表示し、図５の処理へ戻る。
【０１５４】
下位２ビットの値が１であるときには、ステップＳＩ６へ進み、人差し指を意味する「２」をＬＣＤ４１（図１５（Ａ））に表示し、図５の処理へ戻る。
【０１５５】
下位２ビットの値が２であるときには、ステップＳＩ７へ進み、中指を意味する「３」をＬＣＤ４１（図１５（Ａ））に表示し、図５の処理へ戻る。
【０１５６】
下位２ビットの値が３であるときには、ステップＳＩ８へ進み、薬指または小指を意味する「４または５」をＬＣＤ４１（図１５（Ａ））に表示し、図５の処理へ戻る。
【０１５７】
運指識別フラグは、２ビットに限定されず３ビットでもよい。運指識別フラグを２ビットにした場合には、薬指と小指の識別をすることができないが、運指識別フラグを３ビットにした場合には、薬指と小指を識別、すなわち５本の指を識別することができる。
【０１５８】
ステップＳＩ１において読み出したノートイベントがノートオンイベントでないと判断されたときには、ノートオフイベントであることを意味するので、ステップＳＩ１２へ進み、当該ノートオフイベントに対応する音の消音処理を行う。その後、ステップＳＩ９へ進む。
【０１５９】
ステップＳＩ９では、ノートオフイベントに対応するガイドランプ４３（図１５（Ａ））を消灯する。その後、図５の処理へ戻る。
【０１６０】
図１５（Ｂ）は、図１５（Ａ）とは異なる、他の表示例を示す。
表示器は、例えばパソコンに接続された表示器、または鍵盤上に設けられた大きなＬＣＤである。表示器には、複数の鍵４６とロール譜４５が表示される。ロール譜４５は、いわゆるピアノロール譜を縦に表示したものであり、演奏データのノートオン情報および運指情報を表す。
【０１６１】
ロール譜４５は、時間の経過と共に矢印ＡＲの方向（図の下方向）にスクロール表示される。複数の鍵４６は、スクロールせず、固定された位置に表示される。ロール譜４５において、時間ｔ０は現在のノートオン情報等を指示する。時間軸は、図の上方向に向いており、時間ｔ０，ｔ１，ｔ２の順に時間は経過する。
【０１６２】
表示５０は、Ｆ♯の音が時刻ｔ１でノートオンし、時刻ｔ２でノートオフすることを意味する。表示５０の下の表示「２」は、運指情報であり、人差し指で押鍵すべきことを示唆する。
【０１６３】
表示４９は、Ｄ♯の音のノートオン情報を表す。表示４９の下の表示「１」は、運指情報であり、親指で押鍵すべきことを示唆する。
【０１６４】
表示４８は、Ｃ♯の音のノートオン情報を表す。Ｃ♯の音は、現在の時刻ｔ０においてノートオン中であることを示す。当該ノートオンに対応する鍵４７は色付け等される。鍵４７は、演奏者が現在押鍵すべき鍵である。
【０１６５】
なお、運指情報は、指番号で表示する利用形態に限定されない。例えば、手の形の表示、手を置く位置の表示、フレーズ分割等に利用してもよい。手の形は、運指情報に基づく鍵の押さえ方により変化する。手を置く位置は、運指情報に基づき、手をどの辺りに置けば押鍵しやすいかを示す。フレーズ分割は、運指情報をフレーズ分割のための条件の１つとしてメロディを所定フレーズに分割するものであり、分割したフレーズは繰り返し演奏や和音検出の区間に使用される。
【０１６６】
次に、演奏練習フラグの例として、左右手識別フラグ（右手／左手情報）を用いる場合を説明する。図１３のメインルーチンの処理と図５の演奏データ読み出し処理は、そのまま適用することができる。図５のステップＳＢ４のノートイベント処理は、上記の場合と異なり、図１６に示す通りである。
【０１６７】
図１６は、左右手識別フラグを用いた場合のノートイベント処理の詳細を示すフローチャートである。
【０１６８】
ステップＳＪ１では、先に読み出したイベントがノートオンイベントであるか否かをチェックする。ノートオンイベントであるときには、ステップＳＪ１１へ進み、発音処理を行う。発音処理は、ノートオンイベントに含まれるノートナンバ（音高）およびノートオンベロシティ（音量）に応じた楽音パラメータを音源回路に供給し、サウンドシステムにおいて発音させる。
【０１６９】
ノートオンベロシティは、ベロシティデータ（音量）として解釈され処理される。ただし、ノートオンベロシティは、下位ビットに左右手識別フラグが設定されている場合は、ベロシティデータとしての精度は少し落ちる。その後、以下の条件に応じて、ステップＳＪ２またはステップＳＪ３へ進む。
【０１７０】
左右手識別フラグをノートオンベロシティに設定した場合には、ステップＳＪ２の処理を飛び越し、ステップＳＪ３へ進む。左右手識別フラグをノートオフベロシティに設定した場合には、ステップＳＪ２の処理を行ってから、ステップＳＪ３へ進む。
【０１７１】
ステップＳＪ２では、上記で読み出したノートオンイベントに対応するノートオフイベントをサーチし、当該ノートオフイベント中のノートオフベロシティを得る。
【０１７２】
ステップＳＪ３では、ベロシティが奇数か否かをチェックする。すなわち、ベロシティの下位１ビットに設定されている左右手識別フラグが１か否かをチェックする。左右手識別フラグは、ノートオンベロシティまたはノートオフベロシティの下位１ビットである。
【０１７３】
ベロシティが奇数であるときには、左手を意味するので、ステップＳＪ４へ進み、表示器に「左手」を表示する。その後、図５の処理へ戻る。ベロシティが偶数であるときには、右手を意味するので、ステップＳＪ５へ進み、表示器に「右手」を表示する。その後、図５の処理へ戻る。
【０１７４】
図１７は、左手または右手の表示例を示す。鍵盤は、複数の鍵５６を有する。複数の鍵５６のそれぞれに対応して、一つずつ表示器５５が設けられる。表示器５２に「Ｌ」が表示されれば、表示器５２に対応する鍵５１を左手で押鍵すべきことを演奏者に示唆する。表示器５４に「Ｒ」が表示されれば、表示器５４に対応する鍵５３を右手で押鍵すべきことを演奏者に示唆する。
【０１７５】
なお、図１５（Ｂ）の表示と同様な表示を行ってもよい。例えば、表示４９の下の表示「１」の代わりに「Ｌ１」を表示し、左手（Ｌ）の親指（１）で押鍵すべきことを演奏者に示唆する。
【０１７６】
図１６のフローチャートに戻り、ステップＳＪ１において読み出したイベントがノートオンイベントでないと判断されたときには、ノートオフイベントであることを意味するので、ステップＳＪ１２へ進み、当該ノートオフイベントに対応する音の消音処理を行う。その後、ステップＳＪ６へ進む。
【０１７７】
ステップＳＪ６では、表示器の当該ノートオフイベントに対応する表示を消灯する。その後、図５の処理へ戻る。
【０１７８】
次に、演奏練習フラグの他の例として、音名識別フラグ（音名情報）を用いる場合を説明する。音名識別フラグは、黒鍵の音名を♯または♭のいずれで表現するのかを示す。図１３のメインルーチンの処理と図５の演奏データ読み出し処理は、そのまま適用することができる。図５のステップＳＢ４のノートイベント処理は、上記の場合と異なり、図１８に示す通りである。
【０１７９】
図１８は、音名識別フラグを用いた場合のノートイベント処理の詳細を示すフローチャートである。
【０１８０】
ステップＳＫ１では、先に読み出したイベントがノートオンイベントであるか否かをチェックする。ノートオンイベントであるときには、ステップＳＫ１１へ進み、発音処理を行う。発音処理は、ノートオンイベントに含まれるノートナンバ（音高）およびノートオンベロシティ（音量）に応じた楽音パラメータを音源回路に供給し、サウンドシステムにおいて発音させる。
【０１８１】
ノートオンベロシティは、ベロシティデータ（音量）として解釈され処理される。ただし、ノートオンベロシティは、下位ビットに音名識別フラグが設定されている場合は、ベロシティデータとしての精度は少し落ちる。その後、以下の条件により、ステップＳＫ２またはステップＳＫ３へ進む。
【０１８２】
音名識別フラグをノートオンベロシティに設定した場合には、ステップＳＫ２の処理を飛び越し、ステップＳＫ３へ進む。音名識別フラグをノートオフベロシティに設定した場合には、ステップＳＫ２の処理を行ってから、ステップＳＫ３へ進む。
【０１８３】
ステップＳＫ２では、上記で読み出したノートオンイベントに対応するノートオフイベントをサーチし、当該ノートオフイベント中のノートオフベロシティを得る。
【０１８４】
ステップＳＫ３では、上記で読み出したノートオンイベント中のノートナンバ１ｂ（図２）が黒鍵または白鍵のいずれを示すものであるのかをチェックする。黒鍵の場合は、その音名を♯または♭のいずれで表現すべきかを決めるため、ステップＳＫ５へ進む。
【０１８５】
ステップＳＫ５では、ベロシティが奇数か否かをチェックする。すなわち、ノートオンベロシティまたはノートオフベロシティの下位１ビットである音名識別フラグが１か否かをチェックする。
【０１８６】
ベロシティが奇数であるときには、♭を意味するので、ステップＳＫ６へ進み、表示器に音名を♭で表示または発音する。表示する場合は、例えば「Ｄ♭」と表示する。発音する場合は、例えば「ディー・フラット」と発音する。その後、図５の処理へ戻る。
【０１８７】
ベロシティが偶数であるときには、♯を意味するので、ステップＳＫ７へ進み、表示器に音名を♯で表示または発音する。表示する場合は、例えば「Ｃ♯」と表示する。発音する場合は、例えば「シー・シャープ」と発音する。その後、図５の処理へ戻る。
【０１８８】
ステップＳＫ３においてノートオンイベントに対応する鍵が白鍵であると判断される場合には、♭も♯も付かないので、ステップＳＫ４へ進む。ステップＳＫ４では、表示器に音名を表示または発音する。表示する場合は、例えば「Ｃ」と表示する。発音する場合は、例えば「シー」と発音する。その後、図５の処理へ戻る。
【０１８９】
ステップＳＫ１において読み出したイベントがノートオンイベントでないと判断されたときには、ノートオフイベントであることを意味するので、ステップＳＫ１２へ進み、当該ノートオフイベントに対応する音の消音処理を行う。その後、ステップＳＫ８へ進む。
【０１９０】
ステップＳＫ８では、表示器の当該ノートオフイベントに対応する表示を消灯する。その後、図５の処理へ戻る。
【０１９１】
図１９は、音名を表示する例を示す。鍵盤は、複数の鍵６１を有する。複数の鍵６１のそれぞれには、一つずつ表示器６２が設けられる。表示器６４は、黒鍵６３に対応するものであり、音名識別フラグに応じて、「Ｄ♭」または「Ｃ♯」と表示される。
【０１９２】
ノートオンベロシティ等にキューフラグを設定する例と、ノートオンベロシティ等に運指情報の設定する例等とを別々に示したが、キューフラグや運指情報等の複数種類の演奏練習フラグを１つのノートオンベロシティ等に設定してもよい。
【０１９３】
ノートオンベロシティに演奏練習フラグを設定する場合には、ノートオンベロシティデータの精度を考慮し下位１〜３ビットに設定するのが好ましい。より好ましくは、ノートオンベロシティの下位１または２ビットに演奏練習フラグを設定するのがよい。
【０１９４】
ノートオフベロシティに演奏練習フラグを設定する場合には、全ビット（７ビット）に演奏練習フラグを設定することができる。
【０１９５】
ノートオンベロシティ、ノートオフベロシティの他、ボリュームやエフェクトの制御情報等にも演奏練習フラグを設定することができる。
【０１９６】
上記複数の実施例では、演奏データ中に演奏練習フラグ独自のデータ領域を新たに設けるのではなく、ノートオンベロシティまたはノートオフベロシティ等の一部または全部に設定することにより、演奏データのデータ量を増加させることなく、演奏練習機能を付加することができる。
【０１９７】
また、演奏練習フラグをノートオンベロシティ等の一部に設定するので、汎用の演奏データのフォーマットを崩さず、演奏データに演奏練習フラグを付加することができる。
【０１９８】
演奏データは、汎用の演奏データ（例えばスタンダードＭＩＤＩファイル）との互換性を保っているので、演奏練習機能を有しない一般の自動演奏装置にも広く活用することができる。本実施例による演奏練習装置を用いた場合には、自動演奏の他、さらに音符毎に一致進行制御をしたり、運指識別、左右手の識別、黒鍵の♯または♭の識別等の演奏練習機能を付加することができる。
【０１９９】
なお、上記複数の実施例では、音符毎に演奏練習フラグを設定する場合について説明したが、フレーズまたは小節毎に演奏練習フラグを設定してもよい。その場合、フレーズの先頭に演奏練習フラグを設定、あるいは小節の最初の音符（ノート）に演奏練習フラグを設定することができる。フレーズ分割装置等を用いれば、演奏練習フラグを所定の位置に自動的に設定することも可能である。
【０２００】
また、ノートオンベロシティまたはノートオフベロシティ等は、全ビットをベロシティデータ（演奏情報）等として解釈する場合に限定されず、下位ビットの演奏練習フラグを除いた上位ビットのみをベロシティデータ（演奏情報）等として解釈してもよい。ただし、汎用性のある自動演奏装置との互換性を考慮すれば、全ビットを演奏情報に用いることが好ましい。
【０２０１】
また、ノートオンベロシティとノートオフベロシティのどちらに演奏練習フラグを設定したか、あるいは設定したフラグの種類は何かを示す情報を演奏データの一部（例えば、ヘッダ部等）に記憶させてもよい。このようにすると、フラグを誤って解釈するおそれがなくなる。
【０２０２】
演奏練習装置は、電子楽器の形態に限らず、パソコンとアプリケーションソフトウエアとによる形態でもよい。また、演奏練習装置は、音源装置や自動演奏装置等と共に電子楽器に内蔵されている場合に限らず、それぞれが別体の装置であり、ＭＩＤＩや各種ネットワーク等の通信手段を用いて各装置を接続するようなものであってもよい。さらに、自動演奏ピアノに適用することもできる。
【０２０３】
演奏データのフォーマットは、スタンダードＭＩＤＩファイルの他、「イベント＋相対時間」、「イベント＋絶対時間」、「音高＋符長」、「ベタ方式」等の形式でもよい。
【０２０４】
自動演奏のテンポを変更する方法は、テンポクロックの周期を変更するものや、テンポクロックの周期をそのままにしてタイミングデータの値を修正するものや、１回の処理においてタイミングデータをカウントする値を変更するものであってもよい。
【０２０５】
自動演奏データは、複数のチャンネルのデータが混在した形式であってもよいし、各チャンネルのデータがトラック毎に別れているような形式であってもよい。
【０２０６】
以上実施例に沿って本発明を説明したが、本発明はこれらに制限されるものではない。例えば、種々の変更、改良、組み合わせ等が可能なことは当業者に自明であろう。
【０２０７】
【発明の効果】
以上説明したように、本発明によれば、演奏データ中のデータの下位ビットを演奏練習情報に書き換えるので、演奏データとしての汎用性は維持される。また、演奏練習情報のための特別なデータ領域を確保する必要がないので、演奏データのデータ量を増加させずに演奏データに演奏練習情報を付加することができる。演奏練習情報は、演奏練習装置に演奏練習機能を付加することができる。
【図面の簡単な説明】
【図１】図１（Ａ）はＭＩＤＩ規格のノートオンベロシティの構成を示す図であり、図１（Ｂ）は本発明の実施例による演奏練習フラグを埋め込んだノートオンベロシティの構成を示す図である。
【図２】本実施例による演奏練習装置に用いる演奏データのフォーマット例を示す図である。
【図３】本実施例による演奏練習装置の構成を示すブロック図である。
【図４】ノートオンベロシティの一部をキュー（一致進行）フラグとして使用する場合のメインルーチンのフローチャートである。
【図５】図４のステップＳＡ３における演奏データ読み出し処理の詳細を示すフローチャートである
【図６】図６（Ａ）は再生タイマ割り込み処理を示すフローチャートであり、図６（Ｂ）は一致進行タイマ割り込み処理を示すフローチャートである。
【図７】図５のステップＳＢ４におけるノートイベント処理の詳細を示すフローチャートである。
【図８】図８（Ａ）は再生一致進行バッファの構成を示す図であり、図８（Ｂ）は手弾き一致進行バッファの構成を示す図である。
【図９】図４のステップＳＡ２における一致進行処理の詳細を示すフローチャートである。
【図１０】図４のステップＳＡ４における押鍵処理の詳細を示すフローチャートである。
【図１１】ノートオフベロシティの一部に演奏練習フラグを設定する例を示す図である。
【図１２】演奏データのデータ変換処理を示すフローチャートである。
【図１３】運指識別フラグを用いる場合のメインルーチンの処理を示すフローチャートである。
【図１４】運指識別フラグを用いた場合のノートイベント処理の詳細を示すフローチャートである。
【図１５】図１５（Ａ）と図１５（Ｂ）は運指情報の表示例を示す図である。
【図１６】左右手識別フラグを用いた場合のノートイベント処理の詳細を示すフローチャートである。
【図１７】左右手情報の表示例を示す図である。
【図１８】音名識別フラグを用いた場合のノートイベント処理の詳細を示すフローチャートである。
【図１９】音名情報の表示例を示す図である。
【符号の説明】
１  ノートオンイベント、    ２，４  タイミングデータ、    ３  ノートオフイベント、    ５  エンドデータ、    ６  ベロシティデータ、    ７  演奏練習フラグ、    １０  演奏データ、    １１  ＲＯＭ、    １２  ＲＡＭ、  １３  ＣＰＵ、    １４  タイマ、    １５  ＭＩＤＩインターフェース、  １６  フロッピディスク駆動装置、    １７  鍵盤、    １８  鍵盤検出回路、    １９  スイッチ、    ２０  スイッチ検出回路、    ２１  表示回路、  ２２  音源回路、    ２３  効果回路、    ２４  サウンドシステム、    ２５  バス、    ３０  演奏データ、    ３１  演奏練習フラグ、    ４１  液晶表示器（ＬＣＤ）、    ４２  ＬＥＤ
【図１】
0003613935.tif 000002
【図２】
0003613935.tif 000003
【図３】
0003613935.tif 000004
【図４】
0003613935.tif 000005
【図５】
0003613935.tif 000006
【図６】
0003613935.tif 000007
【図７】
0003613935.tif 000008
【図８】
0003613935.tif 000009
【図９】
0003613935.tif 000010
【図１０】
0003613935.tif 000011
【図１１】
0003613935.tif 000012
【図１２】
0003613935.tif 000013
【図１３】
0003613935.tif 000014
【図１４】
0003613935.tif 000015
【図１５】
0003613935.tif 000016
【図１６】
0003613935.tif 000017
【図１７】
0003613935.tif 000018
【図１８】
0003613935.tif 000019
【図１９】
0003613935.tif 000020