(57)【特許請求の範囲】
【請求項１】
演奏装置と演奏制御装置との間で通信を行って演奏の教習を行う演奏教習装置において、
前記演奏装置は、
曲の演奏を行うための複数の操作子と、
各操作子に対応して設けられ点灯信号に応じて発光し消灯信号に応じて発光を停止して演奏をガイドする発光手段と、
前記演奏制御装置から、操作すべき操作子を示す音高データ、発音開始タイミングを示す時間データからなるイベントデータを含む曲データを受信する第１の受信手段と、
この第１の受信手段が発音のイベントデータを受信したときは前記点灯信号を発生させ、消音のイベントデータを受信したときは前記消灯信号を発生させて、当該イベントデータの操作に係る操作子に対応する発光手段に与える信号発生手段と、
前記操作子の操作結果を示す操作結果情報を前記演奏制御装置に送信する第１の送信手段と、を備え、
前記演奏制御装置は、
前記演奏装置に送信する前記曲データを記憶する記憶手段と、
この記憶手段に記憶されているイベントデータを読み出すデータ読出手段と、
前記データ読出手段によって読み出された発音のイベントデータ又は消音のイベントデータを前記演奏装置に送信する第２の送信手段と、
前記演奏装置から送信された前記操作結果情報を受信する第２の受信手段と、
前記発音のイベントデータを消音のイベントデータに変更するデータ変更手段と、
前記第２の送信手段によって前記演奏装置に送信した発音のイベントデータの発音開始タイミングを経過した後も当該発音のイベントデータに対応する操作子を操作した旨の操作結果情報を前記第２の受信手段が受信しないときは、前記発光手段を点滅させるために当該発音のイベントデータと前記データ変更手段によって当該発音のイベントデータを変更させた消音のイベントデータとを交互に前記第２の送信手段により前記演奏装置に送信させる発光制御手段と、
を備えたことを特徴とする演奏教習装置。
【請求項２】
前記演奏制御装置は、通信回線を介して外部装置と接続し、前記曲データを前記外部装置から受信して前記記憶手段に記憶する通信制御手段をさらに備えたことを特徴とする請求項１に記載の演奏教習装置。
【請求項３】
曲の演奏を行うための複数の操作子と、
各操作子に対応して設けられ点灯信号に応じて発光し消灯信号に応じて発光を停止して演奏をガイドする発光手段と、
操作すべき操作子を示す音高データ、発音開始タイミングを示す時間データからなるイベントデータを含む曲データを受信する受信手段と、
この受信手段が発音のイベントデータを受信したときは前記点灯信号を発生させ、消音のイベントデータを受信したときは前記消灯信号を発生させて、当該イベントデータの操作に係る操作子に対応する発光手段に与えて点滅させる信号発生手段と、
前記操作子の操作結果を示す操作結果情報を送信する送信手段と、
を備えた演奏装置との間で通信を行う演奏制御装置によって実行されるプログラムを記録した記録媒体であって、
所定の記憶手段に記憶されているイベントデータを読み出すデータ読出手順と、
前記データ読出手順によって読み出された発音のイベントデータ又は消音のイベントデータを前記演奏装置に送信する送信手順と、
前記演奏装置から送信された前記操作結果情報を受信する受信手順と、
前記発音のイベントデータを消音のイベントデータに変更するデータ変更手順と、
前記送信手順によって前記演奏装置に送信した発音のイベントデータの発音開始タイミングを経過した後も当該発音のイベントデータに対応する操作子を操作した旨の操作結果情報を前記受信手順によって受信しないときは、前記発光手段を点滅させるために当該発音のイベントデータと前記データ変更手順によって当該発音のイベントデータを変更させた消音のイベントデータとを交互に前記送信手順により前記演奏装置に送信させる発光制御手順と、
を有する演奏教習処理プログラムを記録した記録媒体。
【請求項４】
前記演奏教習処理プログラムにおいて、通信回線を介して外部装置と接続し、前記曲データを前記外部装置から受信して前記所定の記憶手段に記憶する通信制御手順をさらに有することを特徴とする請求項３に記載の記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演奏教習装置及び演奏教習処理プログラムを記録した記録媒体に関する。
【０００２】
【従来の技術】
従来より演奏をガイドする光ナビゲーション機能をもった演奏教習装置がある。例えば、光ナビゲーション機能をもつ鍵盤電子楽器においては、鍵盤の各鍵内にＬＥＤ（発光ダイオード）等の発光手段を設けて、演奏する曲データの進行に伴って、押鍵すべき鍵を発光させて、演奏をガイドする構成になっている。
【０００３】
【発明が解決しようとする課題】
しかしながら、従来のナビゲーション機能をもつ鍵盤装置においては、押鍵すべき鍵を発光手段の発光によって認識することはできるものの、実際の押鍵が発音開始タイミングより遅れているか否かを認識することができず、押鍵タイミングの教習が不十分であった。この対策として、異なる発光色の発光素子をもつ発光手段を使って、曲データの中に発光色を変化させるデータを組み込む編集を行うことが考えられるが、その編集作業が煩雑になるという新たな問題が発生する。また、曲データを外部装置から受信する場合には、曲データの編集を行うことはできない。
【０００４】
本発明の課題は、演奏操作をガイドするナビゲーション機能において、発音開始タイミングに対する押鍵タイミングの教習を、曲データの編集を行うことなく容易に実現することである。
【０００５】
【課題を解決するための手段】
請求項１に記載の演奏教習装置は、演奏装置と演奏制御装置との間で通信を行って演奏の教習を行う演奏教習装置において、
前記演奏装置は、曲の演奏を行うための複数の操作子と、各操作子に対応して設けられ点灯信号に応じて発光し消灯信号に応じて発光を停止して演奏をガイドする発光手段と、前記演奏制御装置から、操作すべき操作子を示す音高データ、発音開始タイミングを示す時間データからなるイベントデータを含む曲データを受信する第１の受信手段と、この第１の受信手段が発音のイベントデータを受信したときは前記点灯信号を発生させ、消音のイベントデータを受信したときは前記消灯信号を発生させて、当該イベントデータの操作に係る操作子に対応する発光手段に与えて点滅させる信号発生手段と、前記操作子の操作結果を示す操作結果情報を前記演奏制御装置に送信する第１の送信手段と、を備え、
前記演奏制御装置は、前記演奏装置に送信する前記曲データを記憶する記憶手段と、この記憶手段に記憶されているイベントデータを読み出すデータ読出手段と、前記データ読出手段によって読み出された発音のイベントデータ又は消音のイベントデータを前記演奏装置に送信する第２の送信手段と、前記演奏装置から送信された前記操作結果情報を受信する第２の受信手段と、前記発音のイベントデータを消音のイベントデータに変更するデータ変更手段と、前記第２の送信手段によって前記演奏装置に送信した発音のイベントデータの発音開始タイミングを経過した後も当該発音のイベントデータに対応する操作子を操作した旨の操作結果情報を前記第２の受信手段が受信しないときは、当該発音のイベントデータと前記データ変更手段によって当該発音のイベントデータを変更させた消音のイベントデータとを交互に前記第２の送信手段により前記演奏装置に送信させる発光制御手段と、を備えた構成になっている。
【０００６】
請求項３に記載の記録媒体は、曲の演奏を行うための複数の操作子と、
各操作子に対応して設けられ点灯信号に応じて発光し消灯信号に応じて発光を停止して演奏をガイドする発光手段と、操作すべき操作子を示す音高データ、発音開始タイミングを示す時間データからなるイベントデータを含む曲データを受信する受信手段と、この受信手段が発音のイベントデータを受信したときは前記点灯信号を発生させ、消音のイベントデータを受信したときは前記消灯信号を発生させて、当該イベントデータの操作に係る操作子に対応する発光手段に与えて点滅させる信号発生手段と、前記操作子の操作結果を示す操作結果情報を送信する送信手段と、を備えた演奏装置との間で通信を行う演奏制御装置によって実行されるプログラムを記録した記録媒体であって、
所定の記憶手段に記憶されているイベントデータを読み出すデータ読出手順と、前記データ読出手順によって読み出された発音のイベントデータ又は消音のイベントデータを前記演奏装置に送信する送信手順と、前記演奏装置から送信された前記操作結果情報を受信する受信手順と、前記発音のイベントデータを消音のイベントデータに変更するデータ変更手順と、前記送信手順によって前記演奏装置に送信した発音のイベントデータの発音開始タイミングを経過した後も当該発音のイベントデータに対応する操作子を操作した旨の操作結果情報を前記受信手順によって受信しないときは、当該発音のイベントデータと前記データ変更手順によって当該発音のイベントデータを変更させた消音のイベントデータとを交互に前記送信手順により前記演奏装置に送信させる発光制御手順と、を有する演奏教習処理プログラムを記録している。
【０００９】
本発明によれば、発音のイベントデータの発音開始タイミングを経過した後も演奏すべき操作子が操作されない場合には、その都度、発音のイベントデータを変更して消音のイベントデータを生成し、発音のイベントデータ及び変更した消音のイベントデータによって、操作すべき操作子に対応する発光手段を点滅させる。
【００１０】
【発明の実施の形態】
以下、本発明における演奏教習装置の第１及び第２実施形態について図を参照して説明する。図１は、第１実施形態における鍵盤装置を適用したシステム構成を示している。鍵盤装置１は、曲データを記憶する記憶手段であるフロッピーディスク（ＦＤ）２を駆動して、ＭＩＤＩデータをＭＩＤＩ音源３に出力する。この曲データは、インターネット等のネットワーク（通信回線）４を介して接続する曲データサーバー５から受信する。曲データサーバー５には、操作すべき操作子すなわち鍵を示す音高データ、発音開始タイミングを示す時間データ、及び発音の強弱又は消音を示すベロシティデータからなるイベントデータを含む曲データが複数記憶されている。
【００１１】
図２に、鍵盤装置１の内部ブロック図を示す。ＣＰＵ１１は、システムバスを介して、ＲＯＭ１２、ＲＡＭ１３、キースキャンインターフェース１４、ＬＥＤＣ（ＬＥＤコントローラ）１５、ＦＤＤＣ（フロッピーディスク・ドライブ・コントローラ）１６、ＭＯＤＥＭ（モデム）１７、ＭＩＤＩインターフェース１８に接続されている。ＲＯＭ１２は、ＣＰＵ１１によって実行される演奏教習処理プログラムを記憶している。
【００１２】
ＲＡＭ１３は、ＣＰＵ１１によって処理される各種データを一時的に記憶する。キースキャンインターフェース１４は、複数の操作子からなる光鍵盤及びスイッチ群を備えたキーボード１９に接続され、その操作状態をスキャンしてＣＰＵ１１に入力する。ＬＥＤＣ１５は、各鍵内に設けられた発光手段であるＬＥＤ２０の発光及び消灯を制御する。ＬＥＤ２０は、赤色の発光素子及び緑色の発光素子で構成された、２色発光の発光ダイオードである。ＦＤＤＣ１６は、ＦＤＤ（フロッピーディスク駆動装置）２１を制御する。
【００１３】
通信制御手段であるＭＯＤＥＭ１７は、通信回線すなわちネットワーク４に接続するための回線接続装置（ＮＣＵ）等を備え、ＣＰＵ１１の受信指令に応じて、曲データサーバー５から曲データを受信して復調する。受信された曲データは、ＦＤＤＣ１６及びＦＤＤ２１によってフロッピーディスク２に記録される。すなわち、フロッピーディスクは、曲サーバー５から受信した曲データを記憶する記憶手段を構成する。ＭＩＤＩインターフェース１８は、ＣＰＵ１１によって作成されたＭＩＤＩデータをＭＩＤＩ音源３に出力する。
【００１４】
図３に、ＭＩＤＩデータのデータフォーマットを示す。ＭＩＤＩデータは、図３（１）に示すように、１バイト構成のステータスバイト（先頭ビット＝１）、及び１バイト又は２バイト構成のデータバイト（先頭ビット＝０）で構成されている。このＭＩＤＩデータは、使用目的に応じてチャンネルメッセージ及びシステムメッセージに区別される。チャンネルメッセージは、３ビットからなるメッセージの種類、４ビットからなるチャンネル番号ｎで構成されている。例えば、「０００」はノートオフ、「００１」はノートオン、「１００」は音色等を変更するプログラムチェンジを表わしている。
【００１５】
また、各チャンネルごとに曲データの複数のパートが指定されている。例えば、図３（２）に示すように、メロディパート、ドラムパート、ベースパート、及び３系統のコードパートに指定されている。ナビゲーション機能においては、通常はメロディパートが演奏ガイドのパートとして、ユーザーによってそのチャンネルが指定される。
【００１６】
メロディパートは、図４に示すように、時間データ及びイベントデータで構成されている。イベントデータの中のノートイベントは、ノートオン又はノートオフ、チャンネル番号、及びノートデータからなる１バイトのステータスバイトと、２バイトのベロシティデータとで構成されている。イベントデータの中のボリュームイベントは、ボリュームデータであることを示すボリュームステータス及びチャンネル番号からなる１バイトのステータスバイトと、２バイトのボリュームデータで構成されている。そして、各バイト単位のＭＩＤＩデータは、アドレスＡＤによって指定される。なお、終了アドレスには、ＥＮＤデータが格納されている。
【００１７】
次に、第１実施形態における演奏教習装置の動作について、ＣＰＵ１１が実行するプログラムのフローチャートに基づいて説明する。
【００１８】
図５は、メインフローである。所定のイニシャライズ処理（ステップＡ１）の後は、スイッチ処理（ステップＡ２）、鍵ガイド処理（ステップＡ３）、押鍵処理（ステップＡ４）、時刻計時処理（ステップＡ５）、出力処理（ステップＡ６）、受信処理（ステップＡ７）、その他の処理（ステップＡ８）のループ処理を繰り返し実行する。
【００１９】
図６は、メインフローにおけるステップＡ２のスイッチ処理のフローである。この処理では、図２に示したスイッチ群をスキャンして、モード選択スイッチ処理（ステップＢ１）、スタートスイッチ処理（ステップＢ２）、受信スイッチ処理（ステップＢ３）、チャンネル設定スイッチ処理（ステップＢ４）、ベロシティ設定スイッチ処理（ステップＢ５）、その他のスイッチ処理（ステップＢ６）を実行してメインフローに戻る。
【００２０】
図７は、図６のステップＢ１におけるモード選択スイッチ処理のフローである。この処理では、モード選択スイッチがオンされたか否かを判別し（ステップＣ１）、オンされない場合にはこのフローを終了するが、オンされたときは、そのモードスイッチに応じた処理を行う。モードスイッチには、ノーマルスイッチ、レッスン１スイッチ、レッスン２スイッチ、レッスン３スイッチがある。
【００２１】
ノーマルスイッチがオンされたか否かを判別し（ステップＣ２）、このスイッチがオンされた場合には、モードレジスタＭＯＤＥを「０」にセットする（ステップＣ３）。レッスン１スイッチがオンされたか否かを判別し（ステップＣ４）、このスイッチがオンされた場合には、ＭＯＤＥに「１」をセットする（ステップＣ５）。レッスン２スイッチがオンされたか否かを判別し（ステップＣ６）、このスイッチがオンされた場合には、ＭＯＤＥに「２」をセットする（ステップＣ７）。レッスン３スイッチがオンされたか否かを判別し（ステップＣ８）、このスイッチがオンされた場合には、ＭＯＤＥに「３」をセットする（ステップＣ９）。
【００２２】
ＭＯＤＥが「０」の場合には、鍵盤の演奏によってのみ発音する通常のノーマル演奏モードとなる。ＭＯＤＥが「１」〜「３」の場合は、フロッピーディスクの曲データをガイドするナビゲーション機能の演奏モードである。ＭＯＤＥが「１」の場合には、曲データのノートデータ（音高）にかかわらず、どの鍵を押鍵しても発音を行う演奏モードとなる。ＭＯＤＥが「２」の場合には、曲データのノートデータに対応する鍵（発光している鍵）が正しく押鍵されたときに発音を行う演奏モードとなる。ＭＯＤＥが「３」の場合には、演奏にかかわらず曲データを自動的に読み出すモードとなるが、ガイドする鍵が押鍵されたときに発音する。モードスイッチに応じた値をＭＯＤＥに設定した後は、このフローを終了して図６のスイッチ処理に戻る。
【００２３】
図８は、図６のスイッチ処理におけるステップＢ２のスタートスイッチ処理のフローである。この処理では、スタートスイッチがオンされたか否かを判別し（ステップＤ１）、オンされない場合にはこのフローを終了するが、オンされたときは、スタートフラグＳＴＦを反転する（ステップＤ２）。そして、ＳＴＦが「１」であるか否かを判別する（ステップＤ３）。
【００２４】
ＳＴＦが「１」である場合には、アドレスレジスタＡＤを「０」すなわち曲データの先頭アドレスにセットし、レジスタＳＴＡＴＵＳに「１」をセットする（ステップＤ４）。ＳＴＡＴＵＳは、後述する押鍵処理において設定される値である。ＳＴＡＴＵＳが「１」の場合は、曲データの発音開始タイミングに押鍵のタイミングが合っている状態である。ＳＴＡＴＵＳが「２」の場合は、曲データの発音開始タイミングを経過した後も鍵が操作されない状態、すなわち押鍵のタイミングが遅れている状態である。ＳＴＡＴＵＳが「３」の場合は、曲データの発音開始タイミングに到る前に鍵が操作された状態、すなわち押鍵のタイミングが早すぎる状態である。
【００２５】
ステップＤ４の処理の後、レジスタＳＴに現在時刻をストアし（ステップＤ５）、タイムレジスタＴを「０」にセットする（ステップＤ６）。次に、曲データの記憶エリアのアドレスＡＤ（＝０）のデータＭＥＭ［ＡＤ］がイベントデータであるか否かを判別する（ステップＤ７）。すなわち、曲データの最初がイベントデータであるか又は時間データであるか否かを判別する。イベントデータである場合には、レジスタΔＴに最小時間をセットし（ステップＤ８）、ＡＤを「１」だけデクリメントして（ステップＤ９）、アドレスを１つ戻す。このデクリメント処理は、後述する鍵ガイド処理のために必要な処理である。
【００２６】
ステップＤ７において、曲データの最初がイベントデータでなく時間データである場合には、その時間データをΔＴにセットする（ステップＤ１０）。ステップＤ９においてＡＤをデクリメントした後、又はステップＤ１０においてΔＴに時間データをセットした後は、Ｔの値にΔＴの値を加算して更新する（ステップＤ１１）。ステップＤ３において、ＳＴＦが「０」である場合には、消音指示を行う（ステップＤ１２）。ステップＤ１１においてＴの値にΔＴの値を加算して更新した後、ステップＤ１２において消音指示を行った後は、このフローを終了して図６のスイッチ処理に戻る。
【００２７】
図９は、スイッチ処理におけるステップＢ３の受信スイッチ処理のフローである。この処理では、受信スイッチがオンされたか否かを判別し（ステップＥ１）、オンされない場合にはこのフローを終了するが、オンされたときは受信フラグＺＦを「１」にセットする（ステップＥ２）。そして、このフローを終了して図６のスイッチ処理に戻る。
【００２８】
図１０は、スイッチ処理におけるステップＢ４のチャンネル設定スイッチ処理のフローである。この処理では、押鍵ガイド用として指定するチャンネル（例えば、メロディチャンネル）を設定する。すなわち、チャンネル設定スイッチ及びチャンネル番号のスイッチがオンされたか否かを判別し（ステップＦ１）、オンされたときはチャンネルセットレジスタＣＨＳＥＴに設定チャンネルのチャンネル番号をストアする（ステップＦ２）。ＣＨＳＥＴにストアした後、又は、ステップＦ１においてスイッチがオンされない場合には、このフローを終了して図６のスイッチ処理のフローに戻る。
【００２９】
図１１は、スイッチ処理におけるステップＢ５のフローである。この処理では、後述するガイドＡ処理において、押鍵すべき鍵に対応するＬＥＤの発光色の条件を設定する。ベロシティ設定スイッチ及び設定ベロシティ値のスイッチがオンされたか否かを判別し（ステップＧ１）、オンされたときは設定ベロシティ値を設定ベロシティレジスタＶＳＥＴにストアする（ステップＧ２）。ＶＳＥＴにストアした後、又は、ステップＧ１においてスイッチがオンされない場合には、このフローを終了して図６のスイッチ処理のフローに戻る。
【００３０】
図１２は、図５のメインフローにおけるステップＡ３の鍵ガイド処理のフローである。この処理では、モードレジスタＭＯＤＥの値に応じた鍵ガイド処理を行う。すなわち、ＭＯＤＥの値が「１」又は「２」であるか否かを判別し（ステップＨ１）、「１」又は「２」である場合にはガイドＡ処理を実行する（ステップＨ２）。ＭＯＤＥの値が「１」及び「２」のいずれでもない場合には、ＭＯＤＥの値が「３」であるか否かを判別し（ステップＨ３）、「３」である場合にはガイドＢ処理を実行する（ステップＨ４）。ガイドＡ処理又はガイドＢ処理を行った後は、このフローを終了して図５のメインフローに戻る。
【００３１】
図１３〜図１６は、図１２におけるステップＨ２のガイドＡ処理のフローである。この処理では、スタートフラグＳＴＦが「１」であるか否かを判別し（ステップＪ１）、ＳＴＦが「０」である場合には、演奏停止状態であるので、このフローを終了する。ＳＴＦが「１（演奏開始）」である場合にはＳＴＡＴＵＳの値が「２」でないか否かを判別する（ステップＪ２）。
【００３２】
ＳＴＡＴＵＳの値が「２」でない場合には、レジスタＳＴの時間の値とレジスタＴの時間の値を加算した値と現在時刻とを比較する（ステップＪ３）。すなわち発音開始タイミングの時間と現在時刻とを比較する。現在時刻が発音開始タイミングの時間に達していない場合には、このフローを終了して図５のメインフローに戻る。
【００３３】
現在時刻が発音開始タイミングの時間に達している場合には、レジスタＡＤをインクリメントする（ステップＪ４）。そして、アドレスＡＤがＥＮＤでないか否かを判別する（ステップＪ５）。ＥＮＤでない場合には、ＭＥＭ［ＡＤ］のＭＩＤＩデータが時間データであるか否かを判別する（ステップＪ６）。時間データである場合には、ＳＴＡＴＵＳの値が「３」すなわち押鍵タイミングが発音開始タイミングより早すぎる場合であるか否かを判別する（ステップＪ７）。
【００３４】
ＳＴＡＴＵＳの値が「３」である場合には、ＭＩＤＩデータを早送りするために、ΔＴに最小時間をセットする（ステップＪ８）。ＳＴＡＴＵＳの値が「３」でなく「１」である場合すなわち押鍵タイミングが発音開始タイミングに合っている場合には、ΔＴにＭＥＭ［ＡＤ］の正規の時間データの値をセットする（ステップＪ９）。ステップＪ８又はステップＪ９において、ΔＴに値をセットした後は、Ｔの値にΔＴの値を加算して、このフローを終了して図１２の鍵ガイド処理に戻る。
【００３５】
ステップＪ５において、ＭＥＭ［ＡＤ］がＥＮＤである場合には、曲データが終了したので、ＳＴＦを「０」にリセットする（ステップＪ１１）。そして、このフローを終了して図１２の鍵ガイド処理に戻る。
【００３６】
ステップＪ６において、ＭＥＭ［ＡＤ］が時間データでない場合には、図１４のフローにおいて、ＭＥＭ［ＡＤ］がイベントデータであるか否かを判別する（ステップＪ１２）。イベントデータである場合には、そのイベントデータがノートイベントであるか否かを判別する（ステップＪ１３）。ノートイベントである場合には、そのイベントデータのチャンネルがＣＨＳＥＴの押鍵ガイド用のチャンネルと同一であるか否かを判別する（ステップＪ１４）。チャンネルが同一である場合には、イベントデータのノートデータをレジスタＮＯＴＥにセットする（ステップＪ１５）。
【００３７】
次に、ＡＤをインクリメントして、ベロシティデータをレジスタＶＥＬにストアする（ステップＪ１６）。そして、ＶＥＬが「０」でないか否かを判別する（ステップＪ１７）。ＶＥＬが「０」でない場合、すなわちＮＯＴＥにストアしたノートデータがノートオンである場合には、ＶＥＬのベロシティデータにＶＳＥＴのデータを乗算して「１」を加算する演算を行う（ステップＪ１８）。ＶＳＥＴのデータは、図１１のＶＥＬ設定スイッチ処理においてユーザーによって所望の値に設定されている。あるいは、デフォルトの値に設定されている。ユーザーが設定する場合には、ＶＳＥＴのデータを「０」にすることも考えられる。この場合には、上記演算の結果、ＶＥＬのデータが「０」になり、ノートオフになってしまう。このような状態を回避するために、「１」を加算してＶＥＬのベロシティデータの最小値を「１」に設定する。
【００３８】
そして、ＶＥＬのベロシティデータが所定値より大きいか否かを判別する（ステップＪ１９）。ＶＥＬのベロシティデータが所定値より大きい場合には、ＮＯＴＥに対する鍵内の赤色発光のＬＥＤを点灯する処理を行う（ステップＪ２０）。一方、ＶＥＬのベロシティデータが所定値以下である場合には、ＮＯＴＥに対する鍵内の緑色発光のＬＥＤを点灯する処理を行う（ステップＪ２１）。ＬＥＤの点灯処理を行った後は、ＳＴＡＴＵＳの値が「３」であるか否かを判別する（ステップＪ２２）。ＳＴＡＴＵＳの値が「３」である場合には、ＳＴＡＴＵＳの値を「１」に変更する（ステップＪ２３）。次に、ＣＨＳＥＴ、ＶＯＬＵＭＥの値に基づいてＭＩＤＩデータを作成する（ステップＪ２４）。
【００３９】
ステップＪ１７においてＶＥＬのベロシティデータが「０」である場合、すなわちＮＯＴＥにストアしたノートデータがノートオフである場合には、ＮＯＴＥに対する鍵内のＬＥＤを消灯する処理を行う（ステップＪ２５）。ＬＥＤの消灯処理を行った後、又はステップＪ１２においてＭＥＭ［ＡＤ］がイベントデータでない場合には、図１３のステップＪ４に移行してアドレスＡＤをインクリメントする。
【００４０】
図１４のステップＪ１３において、イベントデータがノートイベントでない場合には、図１５のフローにおいて、イベントデータがボリュームイベントであるか否かを判別する（ステップＪ２６）。ボリュームイベントである場合には、アドレスＡＤをインクリメントして、ボリュームデータをレジスタＶＯＬＵＭＥにストアする（ステップＪ２７）。
【００４１】
次に、ＳＴＡＴＵＳが「３」であるか否かを判別し（ステップＪ２８）、「３」である場合には、押鍵タイミングが発音開始タイミングより早すぎる場合である。この場合には、ＭＩＤＩデータのボリューム値を最小の値に変更する（ステップＪ２９）。ボリューム値を変更した後、若しくはステップＪ２８においてＳＴＡＴＵＳが「３」でない場合、又は、図１４のステップＪ１４においてイベントデータのチャンネルとＣＨＳＥＴのチャンネルとが同一でない場合には、ＭＩＤＩＯＵＴバッファのポインタｎを「０」にセットして（ステップＪ３０）、ｎをインクリメントしながら、以下のループ処理を行う。
【００４２】
ＭＩＤＩＯＵＴバッファ（ｎ）が空きであるか否かを判別し（ステップＪ３１）、空きでない場合にはｎをインクリメントする（ステップＪ３２）。そして、ｎが所定数を超えたか否かを判別する（ステップＪ３３）。所定数を超えていない場合には、ステップＪ３１においてＭＩＤＩＯＵＴバッファ（ｎ）の空きを捜す。空きがあったときは、そのＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする（ステップＪ３４）。次に、現在時刻をレジスタＷＴＩＭＥにストアする（ステップＪ３５）。そして、ＷＴＩＭＥの現在時刻をＭＩＤＩＯＵＴバッファ（ｎ）にストアする（ステップＪ３６）。現在時刻をストアした後、又はステップＪ３３においてｎが所定数を超えたときは、図１３のステップＪ４に移行してアドレスＡＤをインクリメントする。
【００４３】
図１４のステップＪ２２において、ＳＴＡＴＵＳが「３」でなく「１」である場合には、図１６のフローにおいて、ＳＴＡＴＵＳを「２」に変更する（ステップＪ３８）。すなわち、図１４のステップＪ２０又はステップＪ２１において、ＮＯＴＥに対する鍵内のＬＥＤを点灯して押鍵をガイドした後は、ＳＴＡＴＵＳを「１」から「２」に変更して押鍵されるまで曲データの読み出しを停止する状態に移行する。
【００４４】
次に、ＭＩＤＩデータをレジスタＮＶＯＮにストアする（ステップＪ３８）。さらに、ＮＶＯＮのＭＩＤＩデータのＣＨＳＥＴ及びＮＯＴＥと、値を「０」に変更したベロシティデータとに基づいてＭＩＤＩデータを作成する（ステップＪ３９）。そして、作成したＭＩＤＩデータをレジスタＮＶＯＦＦにストアする（ステップＪ４０）。次に、ＮＶＯＮからＭＩＤＩデータを取り出す（ステップＪ４１）。そして、ＭＩＤＩＯＵＴバッファのポインタｎを「０」にセットして（ステップＪ４２）、ｎをインクリメントしながら、以下のループ処理を行う。
【００４５】
ＭＩＤＩＯＵＴバッファ（ｎ）が空きであるか否かを判別し（ステップＪ４３）、空きでない場合にはｎをインクリメントする（ステップＪ４４）。そして、ｎが所定数を超えたか否かを判別する（ステップＪ４５）。所定数を超えていない場合には、ステップＪ４３においてＭＩＤＩＯＵＴバッファ（ｎ）の空きを捜す。空きがあったときは、そのＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする（ステップＪ４６）。次に、現在時刻をレジスタＷＴＩＭＥにストアする（ステップＪ４７）。そして、ＷＴＩＭＥの現在時刻をＭＩＤＩＯＵＴバッファ（ｎ）にストアする（ステップＪ４８）。
【００４６】
図１３のステップＪ２においてＳＴＡＴＵＳが「２」である場合、すなわち読み出したＭＩＤＩデータの発音開始タイミングになっても押鍵がされない場合には、図１６のフローにおいて、現在時刻がＳＴＰの時間データ及びＰの時間データを加算した値以上になったか否かを判別する（ステップＪ４９）。すなわち、ステップＪ４６においてＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアした時から、所定時間（Ｐの所定値）が経過したか否かを判別する。ＭＩＤＩデータをストアした後すぐにＬＥＤの点灯処理又は消灯処理を行うので、ステップＪ４９においては、点灯処理又は消灯処理を行った時から所定時間が経過したか否かを判別する。
【００４７】
現在時刻がＳＴＰ及びＰの加算した値に達しない場合には図１２の鍵ガイド処理のフローに戻るが、現在時刻がＳＴＰ及びＰの加算した値以上になったときは、ＣＦを反転する（ステップＪ５０）。そして、ＣＦが「０」であるか否かを判別する（ステップＪ５１）。ＣＦが「０」である場合には、ＮＶＯＦＦからベロシティデータが「０」のＭＩＤＩデータを取り出す（ステップＪ５２）。一方、ＣＦが「１」である場合には、ＮＶＯＮから実際のベロシティデータのＭＩＤＩデータを取り出す（ステップＪ４１）。したがって、ＣＦの値に応じて、実際のベロシティデータの発音イベントデータ又はベロシティデータが「０」の消音のイベントデータのいずれか一方を、ステップＪ４６においてＭＩＤＩＯＵＴバッファ（ｎ）にストアする。
【００４８】
すなわち、読み出した発音のイベントデータの発音開始タイミングになっても押鍵がされない場合には、その発音のイベントデータのベロシティデータを「０」に変更して消音のイベントデータを生成し、発音のイベントデータと変更した消音のイベントデータとを、Ｐにストアした所定時間が経過するごとに、交互にＭＩＤＩＯＵＴバッファにストアする。
【００４９】
次に、図１７のフローにおいて、ＭＩＤＩデータのベロシティデータをレジスタＶＥＬにストアする（ステップＪ５３）。そして、ＶＥＬが「０」でないか否かを判別する（ステップＪ５４）。ＶＥＬが「０」でない場合、すなわちＮＯＴＥにストアしたノートがノートオンである場合には、ＶＥＬのベロシティデータにＶＳＥＴのデータを乗算して最小値「１」を加算する演算を行う（ステップＪ５５）。
【００５０】
そして、ＶＥＬのベロシティデータが所定値より大きいか否かを判別する（ステップＪ５６）。ＶＥＬのベロシティデータが所定値より大きい場合には、ＮＯＴＥに対する鍵内の赤色発光のＬＥＤを点灯する処理を行う（ステップＪ５７）。一方、ＶＥＬのベロシティデータが所定値以下である場合には、ＮＯＴＥに対する鍵内の緑色発光のＬＥＤを点灯する処理を行う（ステップＪ５８）。ステップＪ５４においてＶＥＬのベロシティデータが「０」である場合、すなわちＮＯＴＥにストアしたノートが消音のイベントデータである場合には、ＮＯＴＥに対する鍵内のＬＥＤを消灯する処理を行う（ステップＪ５９）。
【００５１】
ＬＥＤの点灯処理又は消灯処理を行った後は、フラグＣＦを「０」にリセットし（ステップＪ６０）、レジスタＳＴＰに現在時刻をストアし（ステップＪ６１）、レジスタＰに所定値をストアする（ステップＪ６２）。そして、このフローを終了して図１２の鍵ガイド処理のフローに戻る。したがって、発音開始タイミングを経過した後は、Ｐにストアされている時間が経過するごとに、発音イベントデータに応じた点灯信号、及び、消音イベントデータに応じた消灯信号をＬＥＤに交互に送出するので、ＬＥＤが点滅する。
【００５２】
図１８〜図２０は、図１２の鍵ガイド処理におけるステップＨ４のガイドＢ処理のフローである。この処理では、スタートフラグＳＴＦが「１」であるか否かを判別し（ステップＫ１）、ＳＴＦが「０」である場合には、演奏停止状態であるので、このフローを終了する。ＳＴＦが「１」である場合には、レジスタＳＴの時間データとレジスタＴの時間データを加算した値、すなわち発音開始タイミングの時間と現在時刻とが一致しているか否かを判別する（ステップＫ２）。現在時刻が発音開始タイミングに一致していない場合には、このフローを終了する。
【００５３】
現在時刻が発音開始タイミングの時間に一致したときは、レジスタＡＤのアドレスをインクリメントする（ステップＫ３）。そして、アドレスＡＤがＥＮＤでないか否かを判別する（ステップＫ４）。ＥＮＤでない場合には、ＭＥＭ［ＡＤ］のデータが時間データであるか否かを判別する（ステップＫ５）。時間データである場合には、ΔＴにＭＥＭ［ＡＤ］の時間データの値をセットする（ステップＫ６）。次に、Ｔの値にΔＴの値を加算し（ステップＫ７）、このフローを終了して図１２の鍵ガイド処理に戻る。ステップＫ４において、ＡＤがＥＮＤである場合には、フラグＳＴＦを「０」にリセットする（ステップＫ８）。そして、このフローを終了して図１２の鍵ガイド処理に戻る。
【００５４】
ステップＫ５において、ＭＥＭ［ＡＤ］が時間データでない場合には、図１９のフローにおいて、ＭＥＭ［ＡＤ］のデータがイベントデータであるか否かを判別する（ステップＫ９）。イベントデータでない場合には、図１８のステップＫ３に移行してＡＤをインクリメントするが、イベントデータである場合には、そのイベントデータがノートイベントであるか否かを判別する（ステップＫ１０）。ノートイベントである場合には、ＭＩＤＩデータのチャンネルとＣＨＳＥＴの押鍵ガイド用のチャンネルとが同一であるか否かを判別する（ステップＫ１１）。
【００５５】
チャンネルが同一である場合には、ＡＤをインクリメントして、ベロシティデータをレジスタＶＥＬにストアする（ステップＫ１２）。そして、ＶＥＬのベロシティデータが「０」でないか否かを判別する（ステップＫ１３）。ＶＥＬのベロシティデータが「０」でない場合には、ＶＥＬのベロシティデータを「１」に変更する（ステップＫ１４）。そして、ＭＩＤＩデータのベロシティデータをＶＥＬのベロシティデータの値に変更する（ステップＫ１５）。次に、ＭＩＤＩデータのノートデータに対する鍵内の赤色発光のＬＥＤを点灯する処理を行う（ステップＫ１６）。ステップＫ１３においてＶＥＬのベロシティデータの値が「０」である場合には、ＭＩＤＩデータのノートデータに対する鍵内の赤色発光のＬＥＤを消灯する処理を行う（ステップＫ１７）。
【００５６】
ＬＥＤの点灯処理若しくは消灯処理を行った後、又はステップＫ１０においてイベントデータがノートイベントでない場合、若しくはステップＫ１１においてＭＩＤＩデータとＣＨＳＥＴのチャンネルが同一でない場合には、図２０のフローにおいて、ＭＩＤＩＯＵＴバッファのエリアを指定するポインタｎを「０」にセットして（ステップＫ１８）、ｎをインクリメントしながら、以下のループ処理を行う。
【００５７】
ＭＩＤＩＯＵＴバッファ（ｎ）が空きであるか否かを判別し（ステップＫ１９）、空きでない場合にはｎをインクリメントする（ステップＫ２０）。そして、ｎが所定数を超えたか否かを判別する（ステップＫ２１）。所定数を超えていない場合には、ステップＫ１９においてＭＩＤＩＯＵＴバッファ（ｎ）の空きを捜す。空きがあったときは、そのＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする（ステップＫ２２）。次に、現在時刻をレジスタＷＴＩＭＥにストアする（ステップＫ２３）。そして、図１８のステップＫ３に移行してＡＤをインクリメントする。
【００５８】
図２１及び図２２は、図５のメインフローにおけるステップＡ４の押鍵処理のフローである。まず、鍵変化があるか否かを判別し（ステップＬ１）、鍵変化がない場合にはメインフローに戻る。オフからオンに鍵変化があったとき、すなわち押鍵操作がされたときは、レジスタＫＥＹにノートデータ（音高データ）をストアし（ステップＬ２）、レジスタＶＥＬＯＣＩＴＹに押鍵のベロシティデータをストアする（ステップＬ３）。
【００５９】
次に、ＭＯＤＥの値が「１」又は「２」のいずれかであるかを判別する（ステップＬ４）。すなわち、押鍵を待つモードであるか否かを判別する。ＭＯＤＥの値が「１」又は「２」である場合には、ＭＯＤＥの値が「２」であるか否かを判別する（ステップＬ５）。ＭＯＤＥの値が「２」である場合には、ＫＥＹの値である押鍵のキー番号とＮＯＴＥの値であるＭＩＤＩデータのノートデータとが一致するか否かを判別する（ステップＬ６）。
【００６０】
ＫＥＹの値とＮＯＴＥの値が一致した場合、又はステップＬ５においてＭＯＤＥの値が「１」で、どの鍵を押鍵しても発音する演奏モードである場合には、現在時刻がＳＴの時間データとＴの時間データを加算した値に達しているか否かを判別する（ステップＬ７）。すなわち、現在時刻が発音開始タイミングの時間に達しているか否かを判別する。
【００６１】
現在時刻がＳＴの時間データとＴの時間データを加算した値に達している場合には、ＳＴＡＴＵＳの値に「１」をセットして（ステップＬ８）、現在時刻からＳＴの時間データとＴの時間データを加算した値を減算して、その減算値を差分レジスタＳにストアする（ステップＬ９）。そして、ＳＴの時間データにＳの値を加算する（ステップＬ１０）。すなわち、時間の経過に応じてＳＴの値を更新する。次に、ＣＨＳＥＴ、ＫＥＹ、ＶＥＬＯＣＩＴＹのデータに基づいてＭＩＤＩデータを作成する（ステップＬ１１）。
【００６２】
ステップＬ７において、現在時刻がＳＴの時間データとＴの時間データを加算した値に達していない場合には、ＭＯＤＥが「１」であるか否かを判別する（ステップＬ１２）。すなわち、どの鍵を押鍵しても発音する演奏モードであるか否かを判別する。ＭＯＤＥが「１」である場合には、ＳＴＡＴＵＳの値を「３」にセットする（ステップＬ１３）。すなわち、発音開始タイミングに到る前に鍵が操作された場合には、発音開始タイミングまで曲データを早送りする状態に設定する。そして、押鍵用チャンネル、ＫＥＹ、ＶＥＬＯＣＩＴＹのデータに基づいてＭＩＤＩデータを作成する（ステップＬ１１）。
【００６３】
ステップＬ１において、鍵変化がオンからオフである場合、すなわち離鍵操作がされたときは、ＫＥＹに離鍵のノートデータをストアし（ステップＬ１４）、ＶＥＬＯＣＩＴＹの値を「０」にセットする（ステップＬ１５）。そして、ＣＨＳＥＴ、ＫＥＹ、ＶＥＬＯＣＩＴＹのデータに基づいてＭＩＤＩデータを作成する（ステップＬ１１）。
【００６４】
ステップＬ４において、ＭＯＤＥの値が「１」及び「２」でなく「３」である場合、ステップＬ６においてＫＥＹの値とＮＯＴＥの値が一致しない場合、すなわちガイドした鍵とは異なる鍵が押鍵操作された場合、又はステップＬ１２においてＭＯＤＥの値が「１」でない場合には、いずれも押鍵用チャンネル、ＫＥＹ、ＶＥＬＯＣＩＴＹのデータに基づいてＭＩＤＩデータを作成する（ステップＬ１１）。
【００６５】
ＭＩＤＩデータを作成した後は、図２２において、押鍵用のＭＩＤＩＯＵＴバッファを指定するポインタｎを「０」にセットして（ステップＬ１６）、ｎをインクリメントしながらＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをセットする。すなわち、ＭＩＤＩＯＵＴバッファ（ｎ）が空きであるか否かを判別し（ステップＬ１７）、空きでない場合にはｎをインクリメントする（ステップＬ１８）。そして、ｎが所定数を超えたか否かを判別する（ステップＬ１９）。ｎが所定数以下である場合には、ステップＬ１７に移行してＭＩＤＩＯＵＴバッファ（ｎ）の空きを捜す。
【００６６】
ＭＩＤＩＯＵＴバッファ（ｎ）が空きである場合には、ＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする（ステップＬ２０）。また、レジスタＷＴＩＭＥに現在時刻をストアし（ステップＬ２１）、ＭＩＤＩＯＵＴバッファ（ｎ）にＷＴＩＭＥの時間データ（現在時刻）をストアする（ステップＬ２２）。時間データをストアした後、又は、ステップＬ１９においてｎが所定数を超えた場合には、このフローを終了して図５のメインフローに戻る。
【００６７】
図２３は、メインフローにおけるステップＡ６の出力処理のフローである。この処理では、ＭＩＤＩＯＵＴバッファを指定するポインタｎを「０」にセットして（ステップＭ１）、ｎをインクリメントしながら、以下の出力処理を実行する。すなわち、ｎで指定したＭＩＤＩＯＵＴバッファ（ｎ）が空きでないか否かを判別し（ステップＭ２）、空きでない場合にはＭＩＤＩＯＵＴバッファ（ｎ）からＭＩＤＩデータとＷＴＩＭＥを読み出す（ステップＭ３）。そして、読み出したＭＩＤＩデータが押鍵用のＭＩＤＩＯＵＴバッファからでないか否かを判別する（ステップＭ４）。すなわち、演奏によって作成されたＭＩＤＩデータでなく、ＭＥＭ（フロッピーディスク）から読み出したＭＩＤＩデータであるか否かを判別する。ＭＥＭのＭＩＤＩデータである場合には、現在時刻からＷＴＩＭＥの時間データを差し引いた値をレジスタＤにストアする（ステップＭ５）。
【００６８】
次に、Ｄの値が所定時間以上であるか否かを判別する（ステップＭ６）。Ｄの値が所定時間以上である場合には、ＭＩＤＩデータを音源（図１のＭＩＤＩ音源３）に出力する（ステップＭ７）。一方、演奏によって作成されたＭＩＤＩデータである場合には、直ちにＭＩＤＩデータを音源に出力する（ステップＭ７）。そして、ＭＩＤＩＯＵＴバッファ（ｎ）を空きにする（ステップＭ８）。バッファをクリアにした後、ステップＭ５においてＤが所定値より小さい場合、又は、ステップＭ２においてＭＩＤＩバッファ（ｎ）が空きでＭＩＤＩデータがない場合には、ｎをインクリメントする（ステップＭ９）。そして、ｎが所定数を超えたか否かを判別し（ステップＭ１０）、所定数を超えていない場合には、ステップＭ２に移行して、ステップＭ１０までのループ処理を繰り返す。ｎが所定数を超えたときは、このフローを終了して図５のメインフローに戻る。
【００６９】
このように、鍵盤装置１からＭＩＤＩ音源３に出力するＭＩＤＩデータを所定時間だけ遅らせて出力する。すなわち、ＣＨＳＥＴに設定したチャンネルのＭＩＤＩデータが押鍵ガイドのために、ＭＩＤＩ音源３に出力するのが他のチャンネルより遅れてしまうので、他のチャンネルも同じ時間だけ遅らせてＭＩＤＩ音源３に出力するのである。したがって、押鍵ガイドに指定されたチャンネルのＭＩＤＩデータだけが、他のチャンネルより遅れてＭＩＤＩ音源３に出力されるという不具合がなくなる。
【００７０】
図２４は、メインフローにおけるステップＡ７の受信処理のフローである。この処理では、受信フラグＺＦが「１」であるか否かを判別し（ステップＮ１）、ＺＦが「０」である場合にはこのフローを終了するが、ＺＦが「１」で曲データサーバーへのアクセス要求である場合には、ＭＥＭのアドレスＡＤを「０」にセットして（ステップＮ２）、ＡＤをインクリメントしながら以下のループ処理を実行する。
【００７１】
すなわち、ＭＯＤＥＭを介してＭＩＤＩデータの受信があるか否かを判別し（ステップＮ３）、受信があったときはそのＭＩＤＩデータをＡＤで指定するフロッピーディスクの記憶エリアＭＥＭ［ＡＤ］にストアする（ステップＮ４）。そして、ＡＤをインクリメントして次のエリアを指定する（ステップＮ５）。この後、受信が終了したか否かを判別し（ステップＮ６）、終了していない場合には、ステップＮ３に移行してＭＩＤＩデータの受信があるか否かを判別する。受信したＭＩＤＩデータをＡＤで示すフロッピーディスクの記憶エリアにストアし、受信が終了した場合には、レジスタＥＮＤにＡＤのアドレスをセットする（ステップＮ７）。そして、ＺＦを「０」にリセットして（ステップＮ８）、図５のメインフローに戻る。
【００７２】
このように上記第１実施形態においては、鍵盤装置のＣＰＵ１１は、フロッピーディスク２からイベントデータを読み出すデータ読出手段を構成し、読み出した発音のイベントデータ又は消音のイベントデータに応じて、点灯信号又は消灯信号を発生する信号発生手段を構成する。また、発音のイベントデータを消音のイベントデータに変更するデータ変更手段を構成する。さらに、発音のイベントデータの発音開始タイミングが経過しても操作すべき鍵が押鍵されない場合には、その発音のイベントデータに応じた点灯信号と、その発音のイベントデータを変更した消音のイベントデータに応じた消音信号とを、ＬＥＤ２０に交互に送出して点滅させる発光制御手段を構成する。
【００７３】
したがって、演奏操作をガイドするナビゲーション機能において、発音開始タイミングに対する押鍵タイミングの教習を、曲データの編集を行うことなく容易に実現できる。
【００７４】
またこの場合において、ＣＰＵ１１は、ＭＯＤＥＭ１７とともに、通信回線（ネットワーク４）を介して外部装置である曲データサーバー５と接続し、曲データを曲データサーバー５から受信する通信制御手段を構成する。したがって、通信回線を介して外部装置から受信する曲データで編集を行うことができない場合でも、発音開始タイミングに対する押鍵タイミングの教習を実現できる。
【００７５】
さらに、各鍵内に設けられたＬＥＤ２０は、赤色及び緑色の異なる発光色で発光するので、読み出されたイベントデータのベロシティデータが所定値以上であるか否かを判別し、その判別結果に応じた発光色でを発光させる。したがって、押鍵タイミングだけでなく、押鍵の強弱をガイドすることができる。
【００７６】
次に、本発明における演奏教習装置の第２実施形態について説明する。図２５及び図２６は、第２実施形態におけるシステム構成を示している。図２５において、鍵盤装置（演奏装置）１０１は、ＲＳ−２３２Ｃ等のシリアルインターフェース１０２を介してＦＤプレーヤ（演奏制御装置）１０３に接続されている。ＦＤプレーヤ１０３は、通信制御手段であるＭＯＤＥＭを備えており、インターネット等のネットワーク（通信回線）４を介して曲データサーバー５に接続して、曲データサーバー５から曲データを受信して、記憶手段であるフロッピーディスク（ＦＤ）２に記憶する。
【００７７】
すなわち、上記構成における演奏教習装置は、鍵盤装置１０１とＦＤプレーヤ１０３との間で通信を行って演奏の教習を行う。このため、鍵盤装置１０１には、曲データをＭＩＤＩデータ形式でＦＤプレーヤ１０３から受信する手段（第１の受信手段）と、操作結果を示す操作結果情報をＭＩＤＩデータ形式でＦＤプレーヤ１０３に送信する手段（第１の送信手段）を備えている。また、ＦＤプレーヤ１０３は、曲データを記憶する記憶手段であるフロッピーディスク２を駆動して、読み出したＭＩＤＩデータ形式の曲データを鍵盤装置１０１に送信する手段（第２の送信手段）と、ＭＩＤＩデータ形式の操作結果情報を鍵盤装置１０１から受信する手段（第２の受信手段）を備えている。
【００７８】
また、図２６において、鍵盤装置（演奏装置）１０１は、ＲＳ−２３２Ｃ等のシリアルインターフェース１０２を介して汎用のパソコン（演奏制御装置）１０４に接続されている。パソコン１０４は、通信制御手段であるＭＯＤＥＭを備えており、インターネット等のネットワーク（通信回線）４を介して曲データサーバー５に接続して、曲データサーバー５から曲データを受信して、記憶手段であるフロッピーディスク２に記憶する。
【００７９】
すなわち、上記構成における演奏教習装置は、鍵盤装置１０１とパソコン１０４との間で通信を行って演奏の教習を行う。このため、鍵盤装置１０１には、図２５の構成と同様に、曲データをＭＩＤＩデータ形式でパソコン１０４から受信する手段（第１の受信手段）と、操作結果を示す操作結果情報をＭＩＤＩデータ形式でパソコン１０４に送信する手段（第１の送信手段）を備えている。また、パソコン１０４は、曲データを記憶する記憶手段であるフロッピーディスク２を駆動して、読み出したＭＩＤＩデータ形式の曲データを鍵盤装置１０１に送信する手段（第２の送信手段）と、ＭＩＤＩデータ形式の操作結果情報を鍵盤装置１０１から受信する手段（第２の受信手段）を備えている。
【００８０】
このように、図２５に示すＦＤプレーヤ１０３は、図２６に示す汎用のパソコン１０４を演奏制御装置の専用装置として特化した構成であり、演奏教習処理プログラムを格納したプログラムＲＯＭ、及び、後述するモード選択スイッチ、スタートスイッチ等の必要なスイッチ、その他演奏教習に必要な構成要素を備えている。すなわち、演奏教習装置としては、図２５の構成と図２６の構成は全く同じ構成である。
【００８１】
したがって、図２５及び図２６に示すフロッピーディスク２に記憶される曲データも同じＭＩＤＩデータ形式であり、操作すべき操作子すなわち鍵を示す音高データ、発音開始タイミングを示す時間データ、及び発音の強弱又は消音を示すベロシティデータからなるイベントデータで構成されている。なお、このＭＩＤＩデータの構成は、図３及び図４に示した第１実施形態の構成と同じである。
【００８２】
図２７に、鍵盤装置１０１の内部ブロック図を示す。ＣＰＵ１１は、システムバスを介して、ＲＯＭ１２、ＲＡＭ１３、キースキャンインターフェース１４、ＬＥＤＣ（ＬＥＤコントローラ）１５、ＭＩＤＩインターフェース１８に接続されている。
【００８３】
ＲＯＭ１２は、ＣＰＵ１１によって実行される演奏教習処理プログラムを記憶している。ＲＡＭ１３は、ＣＰＵ１１によって処理される各種データを一時的に記憶する。キースキャンインターフェース１４は、複数の操作子である光鍵盤及びスイッチ群からなるキーボード１９に接続され、その操作状態をスキャンしてＣＰＵ１１に入力する。ＬＥＤＣ１５は、各鍵内に設けられた発光手段であるＬＥＤ２０の発光及び消灯を制御する。ＬＥＤ２０は、赤色の発光素子及び緑色の発光素子で構成された、２色発光の発光ダイオードである。ＭＩＤＩインターフェース１８は、シリアルインターフェース１０２を介して、パソコン１０４との間でＭＩＤＩデータを送受信する。
【００８４】
次に、第２実施形態における演奏教習装置の動作について、図２６のシステム構成を例に採って、パソコン１０４が実行するプログラムのフローチャート、及び、鍵盤装置１０１のＣＰＵ１１の動作フローチャートに基づいて説明する。パソコン１０４は、サーバー５の曲データをＭＩＤＩデータの形式で受信してフロッピーディスク２に記憶し、鍵盤装置１０１に送信する。そして、鍵盤装置１０１の鍵盤の操作結果を示す操作結果情報のＭＩＤＩデータを入力し、その内容に応じて次のＭＩＤＩデータを順次出力する。
【００８５】
図２８は、演奏制御装置としてのパソコン（ＰＣ）１０４側のメインフローである。このメインフローでは、時刻計時処理（ステップＡ１）、スイッチ処理（ステップＡ２）、受信処理（ステップＡ３）、ＭＩＤＩ処理（ステップＡ４）、ガイド信号生成処理（ステップＡ５）、その他の処理（ステップＡ６）のループ処理を繰り返し実行する。
【００８６】
図２９は、図２８のメインフローにおけるステップＡ２のスイッチ処理のフローである。この処理では、パソコンのキーボードをスキャンして、モード選択スイッチ処理（ステップＢ１）、スタートスイッチ処理（ステップＢ２）、受信スイッチ処理（ステップＢ３）、設定スイッチ処理（ステップＢ４）、その他のスイッチ処理（ステップＢ５）を実行してメインフローに戻る。
【００８７】
図３０は、図２９のスイッチ処理におけるステップＢ１のモード選択スイッチ処理のフローである。この処理では、モード選択スイッチがオンされたか否かを判別し（ステップＣ１）、オンされない場合にはこのフローを終了するが、オンされたときは、そのモードスイッチに応じた処理を行う。モードスイッチには、レッスン１スイッチ、レッスン２スイッチ、レッスン３スイッチがある。
【００８８】
レッスン１スイッチがオンされたか否かを判別し（ステップＣ２）、このスイッチがオンされた場合には、ＭＯＤＥに「１」をセットする（ステップＣ３）。レッスン２スイッチがオンされたか否かを判別し（ステップＣ４）、このスイッチがオンされた場合には、ＭＯＤＥに「２」をセットする（ステップＣ５）。レッスン３スイッチがオンされたか否かを判別し（ステップＣ６）、このスイッチがオンされた場合には、ＭＯＤＥに「３」をセットする（ステップＣ７）。
【００８９】
ＭＯＤＥが「１」の場合には、曲データのノートデータ（音高）にかかわらず、どの鍵を押鍵しても発音を行う演奏モードとなる。ＭＯＤＥが「２」の場合には、曲データのノートデータに対応する鍵（発光している鍵）が正しく押鍵されたときに発音を行う演奏モードとなる。ＭＯＤＥが「３」の場合には、演奏にかかわらず曲データを自動的に読み出すモードとなるが、ガイドする鍵が押鍵されたときに発音する。モードスイッチに応じた値をＭＯＤＥに設定した後は、このフローを終了して図２９のスイッチ処理に戻る。
【００９０】
図３１は、図２９のスイッチ処理におけるステップＢ２のスタートスイッチ処理のフローである。この処理では、スタートスイッチがオンされたか否かを判別し（ステップＤ１）、オンされない場合にはこのフローを終了するが、オンされたときは、スタートフラグＳＴＦを反転する（ステップＤ２）。そして、ＳＴＦが「１」であるか否かを判別する（ステップＤ３）。
【００９１】
ＳＴＦが「１」である場合には、アドレスレジスタＡＤを「０」すなわち曲データの先頭アドレスにセットし、レジスタＳＴＡＴＵＳに「１」をセットする（ステップＤ４）。ＳＴＡＴＵＳは、鍵盤装置側において後述するＭＩＤＩＩＮ処理及びガイドＡ処理で設定される値である。ＳＴＡＴＵＳが「１」の場合は、曲データの発音開始タイミングに押鍵のタイミングが合っている状態である。ＳＴＡＴＵＳが「２」の場合は、曲データの発音開始タイミングを経過した後も鍵が操作されない状態、すなわち押鍵のタイミングが遅れている状態である。ＳＴＡＴＵＳが「３」の場合は、曲データの発音開始タイミングに到る前に鍵が操作された状態、すなわち押鍵のタイミングが早すぎる状態である。
【００９２】
ステップＤ４の処理の後、レジスタＳＴに現在時刻をストアし（ステップＤ５）、タイムレジスタＴを「０」にセットする（ステップＤ６）。次に、曲データの記憶エリアのアドレスＡＤ（＝０）のデータＭＥＭ［ＡＤ］が時間データであるか否かを判別する（ステップＤ７）。すなわち、曲データの最初がイベントデータであるか又は時間データであるか否かを判別する。最初がイベントデータである場合には、レジスタΔＴに最小時間をセットし（ステップＤ８）、ＡＤをデクリメントして（ステップＤ９）、アドレスを１つ戻す。したがって、ＡＤの値は「−１」となる。このデクリメント処理は、後述する鍵ガイド処理のために必要な処理である。
【００９３】
ステップＤ７において、曲データの最初がイベントデータでなく時間データである場合には、その時間データをΔＴにセットする（ステップＤ１０）。ステップＤ９においてＡＤをデクリメントした後、又はステップＤ１０においてΔＴに時間データをセットした後は、Ｔの値にΔＴの値を加算して更新する（ステップＤ１１）。そして、このフローを終了して図２９のスイッチ処理に戻る。ステップＤ３において、ＳＴＦが「０」である場合には演奏停止状態であるので、このフローを終了して図２９のスイッチ処理に戻る。
【００９４】
図３２は、スイッチ処理におけるステップＢ３の受信スイッチ処理のフローである。この処理では、受信スイッチがオンされたか否かを判別し（ステップＥ１）、オンされない場合にはこのフローを終了するが、オンされたときは受信フラグＺＦを「１」にセットする（ステップＥ２）。そして、このフローを終了して図２９のスイッチ処理に戻る。
【００９５】
図３３は、図２９のスイッチ処理におけるステップＢ４の設定スイッチ処理のフローである。この処理では、鍵ガイドとして指定するチャンネル（例えば、メロディチャンネル）を設定する。すなわち、チャンネル設定スイッチ及びチャンネル番号のスイッチがオンされたか否かを判別し（ステップＦ１）、オンされたときはＳＴＦが「０」であるか否かを判別する（ステップＦ２）。ＳＴＦが「０」である場合には、チャンネルセットレジスタＣＨＳＥＴに押鍵ガイド用として指定するチャンネルのチャンネル番号をストアする（ステップＦ３）。ＣＨＳＥＴにチャンネル番号をストアした後、又は、ステップＦ１においてスイッチがオンされない場合、若しくはステップＦ２においてＳＴＦが「１」である場合には、このフローを終了して図２９のスイッチ処理のフローに戻る。
【００９６】
図３４は、図２８のメインフローにおけるステップＡ３の受信処理のフローである。この処理では、受信フラグＺＦが「１」であるか否かを判別する（ステップＧ１）。ＺＦが「０」である場合にはこのフローを終了するが、ＺＦが「１」である場合には、サーバーにアクセスしてＭＩＤＩデータを要求する。そして、曲データを記憶するフロッピーディスクの記憶エリアＭＥＭのアドレスＡＤを「０（先頭アドレス）」にセットする（ステップＧ２）。次に、ＭＩＤＩデータを受信したか否かを判別し（ステップＧ３）、受信したときはその受信データをＭＥＭ［ＡＤ］にストアする（ステップＧ４）。そして、ＡＤをインクリメントする（ステップＧ５）。
【００９７】
ＡＤをインクリメントした後、又はステップＧ３においてＭＩＤＩデータを受信しない場合には、受信終了か否かを判別する（ステップＧ６）。受信終了でない場合には、ステップＧ３に移行してＭＩＤＩデータの受信を待つ。そして、ＭＩＤＩデータを受信するたびに、その受信データをＭＥＭ［ＡＤ］に逐次ストアするとともに、ＡＤをインクリメントしていく。ステップＧ６において受信終了になったときは、そのときのＡＤのアドレスをエンドレジスタＥＮＤにストアし（ステップＧ７）、ＺＦを「０」にリセットする（ステップＧ８）。そして、このフローを終了して図２８のメインフローに戻る。
【００９８】
図３５は、メインフローにおけるステップＡ４のＭＩＤＩ処理のフローである。この処理では、ＭＩＤＩデータを入力するＭＩＤＩＩＮ処理（ステップＨ１）、ＭＩＤＩデータを出力するＭＩＤＩＯＵＴ処理（ステップＨ２）を実行して、メインフローに戻る。
【００９９】
図３６は、ＭＩＤＩＩＮ処理のフローである。このフローでは、後述するＭＩＤＩＯＵＴ処理で鍵盤装置に出力したＭＩＤＩデータに対する鍵盤装置の操作結果をＭＩＤＩデータとして入力し、その入力したＭＩＤＩデータ及び設定されたモードに応じた処理を行う。まず、ＭＯＤＥが「３」でないか否かを判別する（ステップＪ１）。ＭＯＤＥが「３」である場合には、操作結果にかかわらずフロッピーディスクから曲データを自動的に読み出すので、ＭＩＤＩＩＮ処理を行うことなく、このフローを終了する。
【０１００】
ＭＯＤＥが「３」でない場合には、ＭＩＤＩＩＮであるか否かを判別する（ステップＪ２）。すなわち鍵盤装置からＭＩＤＩデータの入力があったか否かを判別する。ＭＩＤＩデータの入力があったときは、そのＭＩＤＩデータがノートイベントであるか否かを判別する（ステップＪ３）。ノートイベントである場合には、そのＭＩＤＩデータのチャンネルが押鍵ガイド用としてＣＨＳＥＴに設定されたチャンネルと同一であるか否かを判別する（ステップＪ４）。
【０１０１】
チャンネルが同一である場合には、ＭＩＤＩデータのベロシティデータが「０」でないか否かを判別する（ステップＪ５）。「０」でない場合には、ＭＯＤＥが「２」であるか否かを判別する（ステップＪ６）。ＭＯＤＥが「２」である場合、すなわち正しい押鍵のときに発音する演奏モードである場合には、ＭＩＤＩデータのノートデータをキーレジスタＫＥＹにストアする（ステップＪ７）。そして、ＫＥＹのノートデータが押鍵ガイドのノートデータをストアしたレジスタＮＯＴＥのノートデータと一致するか否かを判別する（ステップＪ８）。すなわち、押鍵をガイドした鍵が正しく操作されたか否かを判別する。
【０１０２】
ＫＥＹ及びＮＯＴＥのノートデータが同じである場合、又はステップＪ６においてＭＯＤＥが「１」である場合、すなわち、どの鍵を押鍵しても次のＭＩＤＩデータを出力する演奏モードである場合には、現在時刻がＳＴの時間データ及びＴの時間データを加算した時間に達したか否かを判別する（ステップＪ９）。すなわち、現在時刻が発音開始タイミングに達しているか否かを判別する。
【０１０３】
現在時刻がＳＴ及びＴの時間データを加算した値より小さくて、まだ発音開始タイミングに達していない場合には、ＭＯＤＥが「１」であるか否かを判別する（ステップＪ１０）。ＭＯＤＥが「１」である場合には、ＳＴＡＴＵＳを「３」にセットする（ステップＪ１１）。すなわち、発音開始タイミングに到る前に鍵が操作された場合には、ＳＴＡＴＵＳを「３」に設定する。この状態では、発音開始タイミングに到るまでのＭＩＤＩデータを早送りすることになる。ＳＴＡＴＵＳを「３」にセットした後は、このフローを終了して図３５のフローに戻る。
【０１０４】
ステップＪ９において、現在時刻がＳＴ及びＴの時間データを加算した値になって、発音開始タイミングに達したときは、ＳＴＡＴＵＳに「１」をセットする（ステップＪ１２）。次に、現在時刻からＳＴ及びＴの時間データを加算した値を減算し、その差分の時間データをレジスタＳにストアする（ステップＪ１３）。そして、ＳＴの時間データにＳの時間データを加算する（ステップＪ１４）。すなわち、時間の経過にしたがってＳＴの値を更新する。そして、このフローを終了して図３５のフローに戻る。
【０１０５】
ステップＪ２においてＭＩＤＩＩＮでない場合、ステップＪ３においてＭＩＤＩデータがノートイベントでない場合、ステップＪ４においてＭＩＤＩデータのチャンネルとＣＨＳＥＴに設定した押鍵ガイド用のチャンネルとが異なる場合、ステップＪ５においてＭＩＤＩデータのベロシティデータが「０」である場合、ステップＪ８においてＫＥＹのノートデータとＮＯＴＥのノートデータとが異なる場合、又は、ステップＪ１０においてＭＯＤＥが「２」である場合には、いずれもこのフローを終了して図３５のフローに戻る。
【０１０６】
図３７は、図３５のフローにおけるステップＨ２のＭＩＤＩＯＵＴ処理のフローである。この処理では、ＭＩＤＩＯＵＴバッファを指定するポインタｎを「０」にセットして（ステップＫ１）、ｎをインクリメントしながら、以下のループ処理を実行する。ＭＩＤＩＯＵＴバッファ（ｎ）が空きでないか否かを判別し（ステップＫ２）、空きでない場合には、ＭＩＤＩＯＵＴバッファ（ｎ）からＭＩＤＩデータ及びＷＴＩＭＥの時間データを読み出す（ステップＫ３）。
【０１０７】
次に、読み出したＭＩＤＩデータのチャンネルとＣＨＳＥＴに設定した押鍵ガイド用のチャンネルとが同一でないか否かを判別する（ステップＫ４）。チャンネルが同一でない場合、すなわち読み出したＭＩＤＩデータが押鍵ガイド用のチャンネルでない場合には、現在時刻からＷＴＩＭＥの時間データを減算し、その差分の時間データをレジスタＤにストアする（ステップＫ５）。そして、Ｄの時間データが所定時間に達したか否かを判別する（ステップＫ６）。
【０１０８】
所定時間に達したときは、ＭＩＤＩデータを鍵盤装置に出力する（ステップＫ７）。ステップＫ４において、読み出したＭＩＤＩデータのチャンネルとＣＨＳＥＴに設定した押鍵ガイド用のチャンネルとが同一である場合には、直ちにそのＭＩＤＩデータを鍵盤装置に出力する。ステップＫ６における所定時間は、押鍵ガイド用のチャンネルのＭＩＤＩデータによって、鍵盤装置の対応する鍵内のＬＥＤを発音開始タイミングに先立って発光させて押鍵をガイドするための所要時間である。したがって、押鍵ガイド用のチャンネルのＭＩＤＩデータは、この所要時間だけ他のチャンネルのＭＩＤＩデータより早く出力する必要がある。
【０１０９】
ところが、特定のチャンネルを実際の時間よりも早くすることはできないので、その代わりに他のチャンネルのＭＩＤＩデータをこの所要時間だけ遅らせて、相対的に押鍵ガイド用のチャンネルのＭＩＤＩデータの出力を早める処理をステップＫ４〜ステップＫ７の処理で行っている。したがって、押鍵ガイド用のチャンネルの発音が、押鍵ガイドに要する時間のために他のチャンネルの発音よりも遅れるという不具合がなくなる。
【０１１０】
ステップＫ７においてＭＩＤＩデータを出力した後は、ＭＩＤＩＯＵＴバッファ（ｎ）のエリアをクリアする（ステップＫ８）。そして、ｎをインクリメントして次のＭＩＤＩＯＵＴバッファのエリアを指定する（ステップＫ９）。ステップＫ２において指定したＭＩＤＩＯＵＴバッファ（ｎ）のエリアが空きで、そのエリアにＭＩＤＩデータがない場合、又は、ステップＫ６においてＤの時間データが所定時間に達していない場合にも、ステップＫ９においてｎをインクリメントして次のＭＩＤＩＯＵＴバッファのエリアを指定する。
【０１１１】
そして、ｎがＭＩＤＩＯＵＴバッファの全エリアである所定数を超えたか否かを判別する（ステップＫ１０）。ｎが所定数以下である場合には、ステップＫ２に移行して、ＭＩＤＩＯＵＴバッファ（ｎ）が空きであるか否かを判別する。そして、ＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータがある限り、そのＭＩＤＩデータを読み出して、そのＭＩＤＩデータのチャンネルに応じた処理を行いながら鍵盤装置に出力する。そして、ｎが所定数を超えたときは、このフローを終了して図３５のフローに戻る。
【０１１２】
図３８は、図２８のメインフローにおけるステップＡ５のガイド信号生成処理のフローである。この処理では、モードレジスタＭＯＤＥの値に応じた鍵ガイド処理を行う。すなわち、ＭＯＤＥの値が「１」又は「２」であるか否かを判別し（ステップＬ１）、「１」又は「２」である場合にはガイドＡ処理を実行する（ステップＬ２）。ＭＯＤＥの値が「１」及び「２」のいずれでもない場合には、ＭＯＤＥの値が「３」であるか否かを判別し（ステップＬ３）、「３」である場合にはガイドＢ処理を実行する（ステップＬ４）。ガイドＡ処理又はガイドＢ処理の後、図２８のメインフローに戻る。
【０１１３】
図３９〜図４３は、図３８におけるステップＬ２のガイドＡ処理のフローである。この処理では、スタートフラグＳＴＦが「１」であるか否かを判別し（ステップＭ１）、ＳＴＦが「０」である場合には、演奏停止状態であるので、このフローを終了する。ＳＴＦが「１（演奏開始）」である場合にはＳＴＡＴＵＳの値が「２」でないか否かを判別する（ステップＭ２）。
【０１１４】
ＳＴＡＴＵＳの値が「２」でない場合には、レジスタＳＴの時間データとレジスタＴの時間データを加算した値と現在時刻とを比較する（ステップＭ３）。すなわち、発音開始タイミングの時間と現在時間とを比較する。現在時刻が発音開始タイミングの時間に達していない場合には、このフローを終了して図２８のメインフローに戻る。
【０１１５】
現在時間が発音開始タイミングの時間に達している場合には、レジスタＡＤをインクリメントする（ステップＭ４）。そして、アドレスＡＤがＥＮＤでないか否かを判別する（ステップＭ５）。ＥＮＤでない場合には、ＭＥＭ［ＡＤ］のＭＩＤＩデータが時間データであるか否かを判別する（ステップＭ６）。時間データである場合には、ＳＴＡＴＵＳの値が「３」すなわち押鍵タイミングが発音開始タイミングより早すぎる場合であるか否かを判別する（ステップＭ７）。
【０１１６】
ＳＴＡＴＵＳの値が「３」である場合には、ＭＩＤＩデータを早送りするために、ΔＴに最小時間をセットする（ステップＭ８）。ＳＴＡＴＵＳの値が「３」でなく「１」である場合すなわち押鍵タイミングが発音開始タイミングに合っている場合には、ΔＴにＭＥＭ［ＡＤ］の正規の時間データの値をセットする（ステップＭ９）。ステップＭ８又はステップＭ９において、ΔＴに値をセットした後は、Ｔの値にΔＴの値を加算して、このフローを終了して図２８のメインフローに戻る。
【０１１７】
ステップＭ５において、ＭＥＭ［ＡＤ］がＥＮＤである場合には、曲データが終了したので、ＳＴＦを「０」にリセットする（ステップＭ１１）。そして、このフローを終了して図２８のメインフローに戻る。
【０１１８】
ステップＭ６において、ＭＥＭ［ＡＤ］が時間データでない場合には、図４０のフローにおいて、ＭＥＭ［ＡＤ］がイベントデータであるか否かを判別する（ステップＭ１２）。イベントデータである場合には、そのイベントデータのチャンネルがＣＨＳＥＴの押鍵ガイド用のチャンネルと同一であるか否かを判別する（ステップＭ１３）。同一のチャンネルである場合には、そのイベントデータがノートイベントであるか否かを判別する（ステップＭ１４）。
【０１１９】
ノートイベントである場合には、ＡＤをインクリメントして、ベロシティデータをレジスタＶＥＬにストアする（ステップＭ１５）。そして、ＶＥＬのベロシティデータが「０」でないか否かを判別する（ステップＭ１６）。ＶＥＬが「０」でない場合、すなわちノートデータがノートオンである場合には、ＭＩＤＩデータのノートデータをレジスタＮＯＴＥにストアする（ステップＭ１７）。次に、ＭＩＤＩＯＵＴバッファを指定するｎを「０」にセットして（ステップＭ１８）、ｎをインクリメントしながらＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする。すなわち、ＭＩＤＩＯＵＴバッファ（ｎ）が空きであるか否かを判別し（ステップＭ１９）、空きでない場合にはｎをインクリメントする（ステップＭ２０）。そして、ｎが所定数を超えたか否かを判別する（ステップＭ２１）。ｎが所定数以下である場合には、ステップＭ１９に移行してＭＩＤＩＯＵＴバッファ（ｎ）の空きを捜す。
【０１２０】
ＭＩＤＩＯＵＴバッファ（ｎ）が空きである場合には、ＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする（ステップＭ２２）。また、レジスタＷＴＩＭＥに現在時刻をストアし（ステップＭ２３）、ＭＩＤＩＯＵＴバッファ（ｎ）にＷＴＩＭＥの時間データ（現在時刻）をストアする（ステップＭ２４）。時間データをストアした後、又は、ステップＭ２１においてｎが所定数を超えた場合には、図４１のフローにおいて、ＳＴＡＴＵＳが「３」であるか否かを判別する（ステップＭ２５）。ＳＴＡＴＵＳが「３」である場合には、ＳＴＡＴＵＳを「１」に変更する（ステップＭ２６）。そして、ＣＨＳＥＴ、ＶＯＬＵＭＥの値に基づきボリュームイベントのＭＩＤＩデータを作成する（ステップＭ２７）。
【０１２１】
図４０のステップＭ１４において、ＭＩＤＩデータがノートイベントでない場合には、図４１のフローにおいて、そのＭＩＤＩデータがボリュームイベントであるか否かを判別する（ステップＭ２８）。ボリュームイベントである場合には、ＡＤをインクリメントして、そのボリュームデータをレジスタＶＯＬＵＭＥに取り込んでストアする（ステップＭ２９）。次に、ＳＴＡＴＵＳが「３」であるか否かを判別する（ステップＭ３０）。ＳＴＡＴＵＳが「３」で、ＭＩＤＩデータを早送りする場合には、ＭＩＤＩデータのボリューム値を最小値に変更する（ステップＭ３１）。すなわち、早送りする間においては発音をミュートする。
【０１２２】
ボリューム値を最小値に変更した後、ステップＭ２７においてボリュームイベントのＭＩＤＩデータを作成した後、ステップＭ２８においてＭＩＤＩデータがボリュームイベントでない場合、ステップＭ３０においてＳＴＡＴＵＳが「３」でない場合、図４０のステップＭ１３においてＭＩＤＩデータのチャンネルが押鍵ガイド用のチャンネルでない場合、又は、ステップＭ１６においてＭＩＤＩデータのＶＥＬが「０」すなわちノートオフイベントである場合には、いずれも、図４１のステップＭ３２においてＭＩＤＩＯＵＴバッファを指定するｎを「０」にセットして、ｎをインクリメントしながらＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする。
【０１２３】
すなわち、ＭＩＤＩＯＵＴバッファ（ｎ）が空きであるか否かを判別し（ステップＭ３３）、空きでない場合にはｎをインクリメントする（ステップＭ３４）。そして、ｎが所定数を超えたか否かを判別する（ステップＭ３５）。ｎが所定数以下である場合には、ステップＭ３３に移行してＭＩＤＩＯＵＴバッファ（ｎ）の空きを捜す。ＭＩＤＩＯＵＴバッファ（ｎ）が空きである場合には、ＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする（ステップＭ３６）。また、レジスタＷＴＩＭＥに現在時刻をストアし（ステップＭ３７）、ＭＩＤＩＯＵＴバッファ（ｎ）にＷＴＩＭＥの時間データ（現在時刻）をストアする（ステップＭ３８）。そして、図３９のステップＭ４に移行してＡＤをインクリメントする。
【０１２４】
図４１のステップＭ２５において、ＳＴＡＴＵＳが「３」でなく「１」である場合には、図４２のフローにおいて、ＳＴＡＴＵＳを「２」に変更する（ステップＭ３９）。すなわち、図４０のステップＭ２２において、押鍵ガイド用のＭＩＤＩデータをＭＩＤＩＯＵＴバッファにストアした後は、ＳＴＡＴＵＳを「１」から「２」に変更して押鍵されるまで曲データの読み出しを停止する状態に移行する。
【０１２５】
次に、ＭＩＤＩデータをレジスタＮＶＯＮにストアする（ステップＭ４０）。さらに、ＮＶＯＮのＭＩＤＩデータのＣＨＳＥＴ及びＮＯＴＥ、及び、値を「０」に変更したベロシティデータに基づいて、ＭＩＤＩデータを作成する（ステップＭ４１）。そして、作成したＭＩＤＩデータをレジスタＮＶＯＦＦにストアする（ステップＭ４２）。次に、ＮＶＯＮからＭＩＤＩデータを取り出す（ステップＭ４３）。そして、ＭＩＤＩＯＵＴバッファのポインタｎを「０」にセットして（ステップＭ４４）、ｎをインクリメントしながら、以下のループ処理を行う。
【０１２６】
ＭＩＤＩＯＵＴバッファ（ｎ）が空きであるか否かを判別し（ステップＭ４５）、空きでない場合にはｎをインクリメントする（ステップＭ４６）。そして、ｎが所定数を超えたか否かを判別する（ステップＭ４７）。所定数を超えていない場合には、ステップＭ４５においてＭＩＤＩＯＵＴバッファ（ｎ）の空きを捜す。空きがあったときは、そのＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする（ステップＭ４８）。次に、現在時刻をレジスタＷＴＩＭＥにストアする（ステップＭ４９）。そして、ＷＴＩＭＥの現在時刻をＭＩＤＩＯＵＴバッファ（ｎ）にストアする（ステップＭ５０）。
【０１２７】
ＷＴＩＭＥの現在時刻をストアした後、又は、ステップＭ４７においてｎが所定数を超えた場合には、フラグＣＦを「０」にリセットする（ステップＭ５１）。次に、レジスタＳＴＰに現在時刻をストアし（ステップＭ５２）、レジスタＰに所定値をストアする（ステップＭ５３）。そして、このフローを終了して図２８のメインフローに戻る。
【０１２８】
図３９のステップＭ２において、ＳＴＡＴＵＳが「２」である場合には、発音開始タイミングが経過しても鍵盤装置において押鍵がされていない状態であるので、鍵盤装置の操作すべき鍵内のＬＥＤを点滅させる処理を行う。すなわち、図４３のフローにおいて、現在時刻がＳＴＰの時間データとＰの時間データを加算した値に達したか否かを判別する（ステップＭ５４）。現在時刻がこの加算した値に達していない場合にはこのフローを終了するが、現在時刻がこの加算した値に達したときは、ＣＦの値を反転する（ステップＭ５５）。そして、ＣＦが「０」であるか又は「１」であるかを判別する（ステップＭ５６）。
【０１２９】
ＣＦが「０」である場合には、ＮＶＯＦＦからベロシティデータが「０」のＭＩＤＩデータを取り出す（ステップＭ５７）。ＣＦが「１」である場合には、ＮＶＯＮからベロシティデータが「０」でないＭＩＤＩデータを取り出す（ステップＭ５８）。ステップＭ５７又はステップＭ５８においてＭＩＤＩデータを取り出した後は、図４２のステップＭ４４に移行する。そして、ＭＩＤＩＯＵＴバッファの空きエリアに取り出したＭＩＤＩデータをストアする。
【０１３０】
すなわち、ＳＴＡＴＵＳが「２」で、イベントデータの発音開始タイミングを経過した後も鍵盤装置において操作すべき鍵が操作されてない場合には、発音のイベントデータを変更して、ベロシティデータが「０」の消音のイベントデータを作成してＮＶＯＦＦにストアし、ＮＶＯＮにストアした発音のイベントデータと、ＮＶＯＦＦにストアした消音のイベントデータとを、Ｐの所定時間が経過するたびに交互にＭＩＤＩＯＵＴバッファにストアする。
【０１３１】
図４４及び図４５は、図３８のガイド信号作成処理におけるステップＬ４のガイドＢ処理のフローである。この処理では、スタートフラグＳＴＦが「１」であるか否かを判別し（ステップＮ１）、ＳＴＦが「０」である場合には、演奏停止状態であるので、このフローを終了する。ＳＴＦが「１」である場合には、現在時刻がレジスタＳＴの時間データとレジスタＴの時間データを加算した値になっているか否かを判別する（ステップＮ２）。すなわち現在時刻が発音開始タイミングの時間であるか否かを判別する。現在時刻が発音開始タイミングに達していない場合には、このフローを終了する。
【０１３２】
現在時刻が発音開始タイミングの時間に一致したときは、レジスタＡＤのアドレスをインクリメントする（ステップＮ３）。そして、アドレスＡＤがＥＮＤでないか否かを判別する（ステップＮ４）。ＥＮＤでない場合には、ＭＥＭ［ＡＤ］のデータが時間データであるか否かを判別する（ステップＮ５）。時間データである場合には、ΔＴにＭＥＭ［ＡＤ］の時間データの値をセットする（ステップＮ６）。次に、Ｔの値にΔＴの値を加算し（ステップＮ７）、このフローを終了して図２８のメインフローに戻る。ステップＮ４において、ＡＤがＥＮＤである場合には、曲データが終了したのでフラグＳＴＦを「０」にリセットする（ステップＮ８）。そして、このフローを終了してメインフローに戻る。
【０１３３】
ステップＮ５において、ＭＥＭ［ＡＤ］が時間データでない場合には、図４５のフローにおいて、ＭＥＭ［ＡＤ］のデータがイベントデータであるか否かを判別する（ステップＮ９）。イベントデータでない場合には、図４４のステップＮ３に移行してＡＤをインクリメントするが、イベントデータである場合には、そのイベントデータのチャンネルとＣＨＳＥＴの押鍵ガイド用のチャンネルとが同一であるか否かを判別する（ステップＮ１０）。チャンネルが同一である場合には、そのイベントデータがノートイベントであるか否かを判別する（ステップＮ１１）。
【０１３４】
ノートイベントである場合には、ＡＤをインクリメントして、ベロシティデータをレジスタＶＥＬにストアする（ステップＮ１２）。そして、ＶＥＬのベロシティデータが「０」でないか否かを判別する（ステップＮ１３）。ＶＥＬのベロシティデータが「０」でない場合には、ＶＥＬのベロシティデータを最小値「１」に変更する（ステップＮ１４）。そして、ＭＩＤＩデータのベロシティデータをＶＥＬのベロシティデータの値に変更する（ステップＮ１５）。次に、ＭＩＤＩＯＵＴバッファのポインタｎを「０」にセットして（ステップＮ１６）、ｎをインクリメントしながら、以下のループ処理を行う。
【０１３５】
ＭＩＤＩＯＵＴバッファ（ｎ）が空きであるか否かを判別し（ステップＮ１７）、空きでない場合にはｎをインクリメントする（ステップＮ１８）。そして、ｎが所定数を超えたか否かを判別する（ステップＮ１９）。所定数を超えていない場合には、ステップＮ１７においてＭＩＤＩＯＵＴバッファ（ｎ）の空きを捜す。空きがあったときは、そのＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする（ステップＮ２０）。次に、現在時刻をレジスタＷＴＩＭＥにストアする（ステップＮ２１）。そして、図４４のステップＮ３に移行してＡＤをインクリメントする。
【０１３６】
図４６は、鍵盤装置１０１（演奏装置）側のメインフローである。所定のイニシャライズ処理（ステップＰ１）の後、スイッチ処理（ステップＰ２）、ＭＩＤＩ処理（ステップＰ３）、鍵ガイド処理（ステップＰ４）、押鍵処理（ステップＰ５）、発音指示処理（ステップＰ６）、その他の処理（ステップＰ７）のループ処理を繰り返し実行する。
【０１３７】
図４７は、図４６のメインフローにおけるステップＰ２のスイッチ処理のフローである。この処理では、ガイド用チャンネル設定スイッチ処理（ステップＱ１）、ベロシティ設定スイッチ処理（ステップＱ２）、その他のスイッチ処理（ステップＱ３）を実行して、このフローを終了して図４６のメインフローに戻る。
【０１３８】
図４８は、図４７のスイッチ処理におけるステップＱ１のガイド用チャンネル設定スイッチ処理のフローである。ガイド用チャンネル設定スイッチ及びチャンネル番号スイッチがオンされたか否かを判別し（ステップＲ１）、オンされたときはチャンネルレジスタＣＨＳＥＴにそのチャンネル番号をストアする（ステップＲ２）。チャンネル番号をストアした後、又はステップＲ１においてスイッチがオンされない場合には、このフローを終了して図４７のフローに戻る。
【０１３９】
図４９は、図４７のスイッチ処理におけるステップＱ２のベロシティ設定スイッチ処理のフローである。ベロシティ設定スイッチ及びベロシティ値のスイッチがオンされたか否かを判別し（ステップＳ１）、オンされたときはレジスタＶＳＥＴにそのベロシティ値のデータをストアする（ステップＳ２）。ベロシティ値のデータをストアした後、又はステップＳ１においてスイッチがオンされない場合には、このフローを終了して図４７のフローに戻る。
【０１４０】
図５０は、図４６のメインフローにおけるステップＰ３のＭＩＤＩ処理のフローである。この処理では、パソコンとの間で、シリアルインターフェースを介して通信を行い、パソコンからＭＩＤＩデータを受信するＭＩＤＩＩＮ処理（ステップＴ１）、パソコンに対して演奏操作の結果であるＭＩＤＩデータを送信するＭＩＤＩＯＵＴ処理（ステップＴ２）を実行して、メインフローに戻る。
【０１４１】
図５１は、図５０のステップＴ１のＭＩＤＩＩＮ処理のフローである。この処理では、ＭＩＤＩＩＮ（ＭＩＤＩデータ受信）であるか否かを判別し（ステップＵ１）、ＭＩＤＩＩＮである場合には、ＭＩＤＩＩＮバッファを指定するポインタｎを「０」にセットして（ステップＵ２）、ｎをインクリメントしながら以下の処理を行う。
【０１４２】
すなわち、ＭＩＤＩＩＮバッファ（ｎ）が空きであるか否かを判別し（ステップＵ３）、空きでない場合にはｎをインクリメントする（ステップＵ４）。そして、ｎがＭＩＤＩＩＮバッファのエリア数である所定数を超えたか否かを判別する（ステップＵ５）。ｎが所定数以下である場合には、ステップＵ３に移行してＭＩＤＩＩＮバッファ（ｎ）の空きを捜す。ＭＩＤＩＩＮバッファ（ｎ）が空きである場合には、ＭＩＤＩデータをストアする（ステップＵ６）。そして、ステップＵ１に移行して、ＭＩＤＩＩＮであるか否かを判別する。ＭＩＤＩＩＮである場合には上記処理を繰り返す。ＭＩＤＩＩＮでない場合、又はステップＵ５においてｎが所定数を超えた場合には、このフローを終了して図５０のフローに戻る。
【０１４３】
図５２は、図５０のＭＩＤＩ処理におけるステップＴ２のＭＩＤＩＯＵＴ処理のフローである。この処理では、ＭＩＤＩＯＵＴバッファを指定するポインタｎを「０」にセットして（ステップＶ１）、ｎをインクリメントしながら以下の処理を行う。すなわち、ＭＩＤＩＯＵＴバッファ（ｎ）が空きでないか否かを判別し（ステップＶ２）、空きでない場合にはＭＩＤＩＯＵＴバッファ（ｎ）のエリアのＭＩＤＩデータをパソコンに出力する（ステップＶ３）。そして、ＭＩＤＩＯＵＴバッファ（ｎ）のエリアをクリアする（ステップＶ４）。
【０１４４】
エリアをクリアした後、又はステップＶ２においてＭＩＤＩＯＵＴバッファ（ｎ）が空きである場合には、ｎをインクリメントする（ステップＶ５）。そして、ｎがＭＩＤＩＯＵＴバッファのエリア数である所定数を超えたか否かを判別する（ステップＶ６）。ｎが所定数以下である場合には、ステップＶ２に移行してＭＩＤＩＯＵＴバッファ（ｎ）が空きでないか否かを判別する。ステップＶ６においてｎが所定数を超えた場合には、このフローを終了して図４６のメインフローに戻る。
【０１４５】
図５３は、図４６のメインフローにおけるステップＰ４の鍵ガイド処理のフローである。この処理では、ＭＩＤＩＩＮバッファを指定するポインタｎを「０」にセットして（ステップＸ１）、ｎをインクリメントしながら以下の処理を行う。すなわち、ＭＩＤＩＩＮバッファ（ｎ）が空きでないか否かを判別し（ステップＸ２）、空きでなくＭＩＤＩデータがある場合には、そのＭＩＤＩデータがノートイベントであるか否かを判別する（ステップＸ３）。ノートイベントである場合には、そのイベントデータのチャンネルがＣＨＳＥＴで指定されている押鍵ガイド用のチャンネルと同一であるか否かを判別する（ステップＸ４）。
【０１４６】
チャンネルが同一である場合には、ＭＩＤＩデータのベロシティデータが「０」でないか否かを判別する（ステップＸ５）。「０」でない場合には、そのベロシティデータをレジスタＶＥＬにストアする（ステップＸ６）。そして、ＶＥＬのベロシティデータにＶＳＥＴのデータを乗算して「１」を加算する演算を行う（ステップＸ７）。ＶＳＥＴのデータは、図４９のＶＥＬ設定スイッチ処理においてユーザーによって所望の値に設定されている。あるいは、デフォルトの値に設定されている。ユーザーが設定する場合には、ＶＳＥＴのデータを「０」に設定して、誤ってノートオフイベントになるのを回避するために、最小値「１」を加算する。
【０１４７】
次に、ＭＩＤＩデータのベロシティデータをＶＥＬの値に変更する（ステップＸ８）。そして、ＶＥＬの値が所定値より大きいか否かを判別する（ステップＸ９）。ＶＥＬの値が所定値より大きい場合には、ＭＩＤＩデータのノートデータに対する鍵内の赤色発光のＬＥＤを点灯する処理を行う（ステップＸ１０）。一方、ＶＥＬの値が所定値以下である場合には、ＭＩＤＩデータのノートデータに対する鍵内の緑色発光のＬＥＤを点灯する処理を行う（ステップＸ１１）。ステップＸ５においてＶＥＬの値が「０」である場合には、ＭＩＤＩデータのノートデータに対する鍵内のＬＥＤを消灯する処理を行う（ステップＸ１２）。
【０１４８】
ステップＸ１０若しくはステップＸ１１においてＬＥＤの点灯処理を行った後、又は、ステップＸ１２においてＬＥＤの消灯処理を行った後は、ｎをインクリメントしてＭＩＤＩＩＮバッファの次のエリアを指定する。また、ステップＸ２においてＭＩＤＩＩＮバッファ（ｎ）が空きである場合、ステップＸ３においてＭＩＤＩデータがノートイベントでない場合、又は、ステップＸ４においてＭＩＤＩデータのチャンネルが押鍵ガイド用のチャンネルでない場合には、いずれもｎをインクリメントしてＭＩＤＩＩＮバッファの次のエリアを指定する。
【０１４９】
そして、ｎがＭＩＤＩＩＮバッファのエリア数である所定値を超えたか否かを判別する（ステップＸ１４）。ｎが所定値以下である場合には、ステップＸ２に移行して上記各処理を繰り返す。ｎが所定値を超えたときは、このフローを終了して図４６のメインフローに戻る。
【０１５０】
図５４は、図４６のメインフローにおけるステップＰ５の押鍵処理のフローである。この処理では、鍵盤を走査して（ステップＹ１）、鍵変化があるか否かを判別し（ステップＹ２）、鍵変化がない場合にはメインフローに戻る。オフからオンに鍵変化があったとき、すなわち押鍵操作がされたときは、ＣＨＳＥＴ、押鍵のノートデータ、ベロシティデータでＭＩＤＩデータを作成する（ステップＹ３）。オンからオフに鍵変化があったとき、すなわち離鍵操作がされたときは、ＣＨＳＥＴ、離鍵のノートデータ、値が「０」のベロシティデータでＭＩＤＩデータを作成する（ステップＹ４）。
【０１５１】
ステップＹ３又はステップＹ４においてＭＩＤＩデータを作成した後は、ＭＩＤＩＯＵＴバッファを指定するｎを「０」にセットして（ステップＹ５）、ｎをインクリメントしながらＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする。すなわち、ＭＩＤＩＯＵＴバッファ（ｎ）が空きであるか否かを判別し（ステップＹ６）、空きでない場合にはｎをインクリメントする（ステップＹ７）。そして、ｎが所定数を超えたか否かを判別する（ステップＹ８）。ｎが所定数以下である場合には、ステップＹ６に移行してＭＩＤＩＯＵＴバッファ（ｎ）の空きを捜す。
【０１５２】
ＭＩＤＩＯＵＴバッファ（ｎ）が空きである場合には、ＭＩＤＩＯＵＴバッファ（ｎ）にＭＩＤＩデータをストアする（ステップＹ９）。そして、走査が終了したか否かを判別し（ステップＹ１０）、終了していない場合にはステップＹ１に移行して鍵盤の走査を続行する。走査が終了したときは、このフローを終了して図４６のメインフローに戻る。
【０１５３】
図５５は、図４６のメインフローにおけるステップＰ６の発音指示処理のフローである。この処理では、ＭＩＤＩＩＮバッファ及びＭＩＤＩＯＵＴバッファのエリアを指定するポインタｎを「０」にセットし（ステップＺ１）、ｎをインクリメントしながら、ＭＩＤＩＩＮバッファの押鍵ガイド用のチャンネル以外のチャンネルのＭＩＤＩデータ、及び、ＭＩＤＩＯＵＴバッファの押鍵ガイド用のチャンネルの操作結果であるＭＩＤＩデータを音源に送付する処理を行う。
【０１５４】
ＭＩＤＩＩＮバッファ（ｎ）のエリアが空きでないか否かを判別し（ステップＺ２）、空きでない場合には、そのＭＩＤＩデータを音源へ送付する（ステップＺ３）。そして、ＭＩＤＩＩＮバッファのそのエリアをクリアする（ステップＺ４）。エリアをクリアした後、又は、ステップＺ２においてＭＩＤＩＩＮバッファ（ｎ）のエリアが空きである場合には、ＭＩＤＩＯＵＴバッファ（ｎ）が空きでないか否かを判別し（ステップＺ５）、空きでない場合にはＭＩＤＩＯＵＴバッファ（ｎ）のＭＩＤＩデータを音源へ送付する（ステップＺ６）。そして、ＭＩＤＩＯＵＴバッファのそのエリアをクリアする（ステップＺ７）。
【０１５５】
エリアをクリアした後、又は、ステップＺ５においてＭＩＤＩＯＵＴバッファ（ｎ）のエリアが空きである場合には、ｎをインクリメントする（ステップＺ８）。そして、ｎが所定数を超えたか否かを判別し（ステップＺ９）、ｎが所定数以下である場合には、ステップＺ２に移行して上記処理を繰り返し、ＭＩＤＩデータを音源へ送付する。そして、ｎが所定値を超えたときは、このフローを終了して図４６のメインフローに戻る。
【０１５６】
このように上記第２実施形態における演奏教習装置は、パソコン１０４（及びＦＤプレーヤ１０３）は、フロッピーディスク２からイベントデータを読み出すデータ読出手段を構成し、読み出した発音のイベントデータ又は消音のイベントデータを鍵盤装置１０１に送信する。鍵盤装置１０１は、この発音のイベントデータ又は消音のイベントデータに応じて、ＬＥＤ２０を点灯させる点灯信号又は消灯させる消灯信号を発生する信号発生手段を構成する。
【０１５７】
パソコン１０４はまた、発音のイベントデータを消音のイベントデータに変更するデータ変更手段を構成し、鍵盤装置１０１に送信した発音のイベントデータの発音開始タイミングが経過しても、操作すべき鍵が押鍵されない旨を示す操作結果情報を受信しない場合には、その発音のイベントデータ及びその発音のイベントデータを変更した消音のイベントデータを、鍵盤装置１０１に交互に送信して、鍵盤装置１０１のＬＥＤ２０を点滅させる発光制御手段を構成する。
【０１５８】
したがって、演奏操作をガイドするナビゲーション機能をもつ鍵盤装置を制御する場合に、発音開始タイミングに対する押鍵タイミングの教習を、曲データの編集を行うことなく容易に実現できる。
【０１５９】
またこの場合において、パソコン１０４は、通信回線（ネットワーク４）を介して外部装置である曲データサーバー５と接続し、曲データを曲データサーバー５から受信する通信制御手段を構成する。したがって、通信回線を介して外部装置から受信する曲データで編集を行うことができない場合でも、発音開始タイミングに対する押鍵タイミングの教習を実現できる。
【０１６０】
さらに、鍵盤装置１０１の各鍵内に設けられたＬＥＤ２０は、赤色及び緑色の異なる発光色で発光するので、パソコン１０４は、フロッピーディスク２から読み出したイベントデータのベロシティデータが所定値以上であるか否かを判別し、その判別結果に応じた発光色で、鍵盤装置１０１のＬＥＤ２０を発光させる。したがって、押鍵タイミングだけでなく、押鍵の強弱をガイドすることができる。
【０１６１】
なお、上記第１実施形態及び第２実施形態においては、ＲＯＭ等のメモリに格納された演奏教習処理プログラムを実行する装置について説明したが、フロッピーディスクやＣＤ等の記録媒体に、各実施形態においてフローチャートによって示した演奏教習処理プログラムを記録し、この記録媒体から演奏教習処理プログラムを読み出して実行させる構成にしてもよい。
【０１６２】
例えば、第１実施形態における鍵盤装置１で駆動する曲データを記憶するフロッピーディスク２に、演奏教習処理プログラムをあらかじめ記録しておき、鍵盤装置１によってこのプログラムを読み出して実行させる。また、第２実施形態においては、曲データを記憶するフロッピーディスク２に、演奏教習処理プログラムをあらかじめ記録しておき、ＦＤプレーヤ１０３やパソコン１０４によってこのプログラムを読み出して実行させる。
【０１６３】
【発明の効果】
本発明によれば、発音のイベントデータの発音開始タイミングを経過した後も演奏すべき操作子が操作されない場合には、その都度、発音のイベントデータを変更してベロシティデータを「０」にした消音のイベントデータを生成し、発音のイベントデータに応じた点灯信号、及び、変更した消音のイベントデータに応じた消灯信号を、操作すべき操作子に対応する発光手段に交互に送出して点滅させる。したがって、演奏操作をガイドするナビゲーション機能において、発音開始タイミングに対する押鍵タイミングの教習を、曲データの編集を行うことなく容易に実現できる。
【図面の簡単な説明】
【図１】本発明の第１実施形態におけるシステム構成を示す図。
【図２】図１における鍵盤装置の構成を示すブロック図。
【図３】ＭＩＤＩデータのフォーマットを示す図。
【図４】ＭＩＤＩデータにおけるメロディデータのフォーマットを示す図。
【図５】図２のＣＰＵが実行するプログラムのメインフローチャート。
【図６】図５におけるスイッチ処理のフローチャート。
【図７】図６におけるモード選択スイッチ処理のフローチャート。
【図８】図６におけるスタートスイッチ処理のフローチャート。
【図９】図６における受信スイッチ処理のフローチャート。
【図１０】図６におけるチャンネル設定スイッチ処理のフローチャート。
【図１１】図６におけるベロシティ設定処理のフローチャート。
【図１２】図５における鍵ガイド処理のフローチャート。
【図１３】図１２におけるガイドＡ処理のフローチャート。
【図１４】図１３に続くガイドＡ処理のフローチャート。
【図１５】図１４に続くガイドＡ処理のフローチャート。
【図１６】図１３及び図１４に続くガイドＡ処理のフローチャート。
【図１７】図１６に続くガイドＡ処理のフローチャート。
【図１８】図１２におけるガイドＢ処理のフローチャート。
【図１９】図１８に続くガイドＢ処理のフローチャート。
【図２０】図１９に続くガイドＢ処理のフローチャート。
【図２１】図５における押鍵処理のフローチャート。
【図２２】図２１に続く押鍵処理のフローチャート。
【図２３】図５における出力処理のフローチャート。
【図２４】図５における受信処理のフローチャート。
【図２５】本発明の第２実施形態におけるＦＤプレーヤを用いたシステム構成を示す図。
【図２６】第２実施形態におけるパソコンを用いたシステム構成を示す図。
【図２７】図２５及び図２６の鍵盤装置の内部の構成を示すブロック図。
【図２８】図２６におけるパソコンの動作を示すメインフローチャート。
【図２９】図２８におけるスイッチ処理のフローチャート。
【図３０】図２９におけるモード選択スイッチ処理のフローチャート。
【図３１】図２９におけるスタートスイッチ処理のフローチャート。
【図３２】図２９における受信スイッチ処理のフローチャート。
【図３３】図２９における設定スイッチ処理のフローチャート。
【図３４】図２８における受信処理のフローチャート。
【図３５】図２８におけるＭＩＤＩ処理のフローチャート。
【図３６】図３５におけるＭＩＤＩＩＮ処理のフローチャート。
【図３７】図３５におけるＭＩＤＩＯＵＴ処理のフローチャート。
【図３８】図２８におけるガイド信号生成処理のフローチャート。
【図３９】図３８におけるガイドＡ処理のフローチャート。
【図４０】図３９に続くガイドＡ処理のフローチャート。
【図４１】図４０に続くガイドＡ処理のフローチャート。
【図４２】図４１に続くガイドＡ処理のフローチャート。
【図４３】図３９に続くガイドＡ処理のフローチャート。
【図４４】図３８におけるガイドＢ処理のフローチャート。
【図４５】図４４に続くガイドＢ処理のフローチャート。
【図４６】第２実施形態における鍵盤装置のメインフローチャート。
【図４７】図４６におけるスイッチ処理のフローチャート。
【図４８】図４７におけるガイド用チャンネル設定スイッチ処理のフローチャート。
【図４９】図４７におけるベロシティ設定スイッチ処理のフローチャート。
【図５０】図４６におけるＭＩＤＩ処理のフローチャート。
【図５１】図５０におけるＭＩＤＩＩＮ処理のフローチャート。
【図５２】図５０におけるＭＩＤＩＯＵＴ処理のフローチャート。
【図５３】図４６における鍵ガイド処理のフローチャート。
【図５４】図４６における押鍵処理のフローチャート。
【図５５】図４６における発音指示処理のフローチャート。
【符号の説明】
１１  ＣＰＵ
１９  キーボード
２０  ＬＥＤ
２１  ＦＤＤ
【図１】
0003695208.tif 000002
【図２】
0003695208.tif 000003
【図３】
0003695208.tif 000004
【図４】
0003695208.tif 000005
【図５】
0003695208.tif 000006
【図６】
0003695208.tif 000007
【図７】
0003695208.tif 000008
【図８】
0003695208.tif 000009
【図９】
0003695208.tif 000010
【図１０】
0003695208.tif 000011
【図１１】
0003695208.tif 000012
【図１２】
0003695208.tif 000013
【図１３】
0003695208.tif 000014
【図１４】
0003695208.tif 000015
【図１５】
0003695208.tif 000016
【図１６】
0003695208.tif 000017
【図１７】
0003695208.tif 000018
【図１８】
0003695208.tif 000019
【図１９】
0003695208.tif 000020
【図２０】
0003695208.tif 000021
【図２１】
0003695208.tif 000022
【図２２】
0003695208.tif 000023
【図２３】
0003695208.tif 000024
【図２４】
0003695208.tif 000025
【図２５】
0003695208.tif 000026
【図２６】
0003695208.tif 000027
【図２７】
0003695208.tif 000028
【図２８】
0003695208.tif 000029
【図２９】
0003695208.tif 000030
【図３０】
0003695208.tif 000031
【図３１】
0003695208.tif 000032
【図３２】
0003695208.tif 000033
【図３３】
0003695208.tif 000034
【図３４】
0003695208.tif 000035
【図３５】
0003695208.tif 000036
【図３６】
0003695208.tif 000037
【図３７】
0003695208.tif 000038
【図３８】
0003695208.tif 000039
【図３９】
0003695208.tif 000040
【図４０】
0003695208.tif 000041
【図４１】
0003695208.tif 000042
【図４２】
0003695208.tif 000043
【図４３】
0003695208.tif 000044
【図４４】
0003695208.tif 000045
【図４５】
0003695208.tif 000046
【図４６】
0003695208.tif 000047
【図４７】
0003695208.tif 000048
【図４８】
0003695208.tif 000049
【図４９】
0003695208.tif 000050
【図５０】
0003695208.tif 000051
【図５１】
0003695208.tif 000052
【図５２】
0003695208.tif 000053
【図５３】
0003695208.tif 000054
【図５４】
0003695208.tif 000055
【図５５】
0003695208.tif 000056