(57)【特許請求の範囲】
【請求項１】
曲を構成する各パートの各音を表す曲データを記憶する曲データ記憶手段と、
前記曲データ記憶手段に記憶される曲データの再生に伴って行われるユーザの演奏操作に応じて発生する演奏データと再生中の曲データとを比較して演奏操作の合否を判定する判定手段と、
曲データを再生し終えた後に、レッスン範囲を選択する選択手段と、
前記判定手段により判定された演奏操作の合否判定結果の内、前記選択手段により選択されたレッスン範囲で指定される曲データの区間およびパートに対応する合否判定結果から演奏練習の進度を評価する評価手段と
を具備することを特徴とする演奏教習装置。
【請求項２】
曲を構成する各パートの各音を表す曲データの再生に伴って行われるユーザの演奏操作に応じて発生する演奏データと再生中の曲データとを比較して演奏操作の合否を判定する判定処理と、
曲データを再生し終えた後に、レッスン範囲を選択する選択処理と、
前記判定処理により判定された演奏操作の合否判定結果の内、前記選択処理により選択されたレッスン範囲で指定される曲データの区間およびパートに対応する合否判定結果から演奏練習の進度を評価する評価処理と
をコンピュータで実行させることを特徴とする演奏教習処理のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演奏教習装置及び演奏教習処理のプログラムに関する。
【０００２】
【従来の技術】
従来の演奏教習装置及び演奏教習処理のプログラムにおいては、ユーザが与えられる課題曲に対して鍵盤装置等の電子楽器を演奏すると、その曲全体を演奏した後にその演奏を評価し、その評価結果をユーザに通知して演奏教習を行う構成になっていた。
【０００３】
【発明が解決しようとする課題】
しかしながら、上記従来の技術においては、ユーザの演奏技量は演奏した課題曲について全体的な評価しか知ることができないので、例えば、演奏技量が課題曲のどの区間で低くどの区間で高いのか、あるいは右手パート、左手パート、さらには両手による演奏のいずれの技量が高いのか低いのかを具体的に把握することができなかった。このため、全体的な評価が低い場合には、たとえ部分的に合格基準に達している区間又はパートがあったとしても、演奏技量の低い区間又はパートを集中的に練習するのではなく常に曲全体を練習することになり、極めて効率の悪い演奏教習を受けざるを得ないという問題があった。
【０００４】
本発明の課題は、ユーザが課題曲の演奏を行う場合に、演奏後に演奏の全体的な評価だけでなく、曲の所定の区間あるいはパートなど部分的なきめ細かい評価を受けることで、演奏技量の低い部分の集中的な練習を行うことにより、効率的な演奏教習ができるようにすることである。
【０００５】
【課題を解決するための手段】
請求項１に記載の演奏教習装置は、曲を構成する各パートの各音を表す曲データを記憶する曲データ記憶手段と、前記曲データ記憶手段に記憶される曲データの再生に伴って行われるユーザの演奏操作に応じて発生する演奏データと再生中の曲データとを比較して演奏操作の合否を判定する判定手段と、曲データを再生し終えた後に、レッスン範囲を選択する選択手段と、前記判定手段により判定された演奏操作の合否判定結果の内、前記選択手段により選択されたレッスン範囲で指定される曲データの区間およびパートに対応する合否判定結果から演奏練習の進度を評価する評価手段とを具備することを特徴とする。
請求項２に記載の演奏教習処理のプログラムは、曲を構成する各パートの各音を表す曲データの再生に伴って行われるユーザの演奏操作に応じて発生する演奏データと再生中の曲データとを比較して演奏操作の合否を判定する判定処理と、曲データを再生し終えた後に、レッスン範囲を選択する選択処理と、前記判定処理により判定された演奏操作の合否判定結果の内、前記選択処理により選択されたレッスン範囲で指定される曲データの区間およびパートに対応する合否判定結果から演奏練習の進度を評価する評価処理とをコンピュータで実行させることを特徴とする。
【０００９】
本発明では、曲を構成する各パートの各音を表す曲データの再生に伴って行われるユーザの演奏操作に応じて発生する演奏データと再生中の曲データとを比較して演奏操作の合否を判定し、曲データを再生し終えた後にレッスン範囲を選択すると、判定された演奏操作の合否判定結果の内、選択されたレッスン範囲で指定される曲データの区間およびパートに対応する合否判定結果から演奏練習の進度を評価するので、曲の所定の区間あるいはパートなど部分的なきめ細かい評価を受けることで効率的な演奏教習ができる。
【００１０】
【発明の実施の形態】
以下、本発明による実施形態について、図を参照して説明する。
図１は、本発明による演奏教習装置の実施形態の構成を示し、（１）は演奏教習装置としてのパソコン１に接続された鍵盤装置等の電子楽器２からなるシステム図であり、（２）はパソコン１の内部構成を示すブロック図である。
図１（１）において、パソコン１は、ＯＳ（オペレーションシステム）上でアプリケーション（この実施形態においては、演奏教習処理のプログラム）を起動させて、電子楽器２の演奏操作を検出し、その演奏操作の状態を判定するとともに演奏後の評価を行う。
【００１１】
図１（２）において、ＣＰＵ１１はシステムバス１２を介して、プログラムＲＯＭ１３、ワークＲＡＭ１４、曲ＲＯＭ１５、マウス等からなる操作部１６、表示部１７、及びＩ／Ｏインターフェース１８に接続されている。
プログラムＲＯＭ１３には、ファイル（データ）の管理、メモリの管理、入出力の管理、ユーザインターフェースの提供等を行うＯＳのソフトウェアが格納されている。ワークＲＡＭ１４は、演奏教習処理やその他の処理に必要なデータを一時的に記憶するＣＰＵ１１のワークエリアであり、各種のレジスタやフラグが設けられている。このレジスタ等においては後述する。
曲ＲＯＭ１５には、演奏教習に必要な複数の曲データが記憶されている。この曲ＲＯＭ１５は、例えばフラッシュＲＯＭ等の書き換え可能な不揮発性メモリで構成され、ユーザの希望に応じて記憶する曲データを書き変えることもできる。また、図には示していないが、インターネット等の通信回線を介して所定のサーバからＭＩＤＩ形式等からなる曲データを受信して、この曲ＲＯＭ１５に記憶することも可能である。
【００１２】
操作部１６はキーボードやマウスで構成され、操作に応じて曲の選択、レッスンの選択等を行うことができる。表示部１７には、ＣＰＵ１１の表示コマンド及び画像データに応じて、図２に示す演奏教習の曲リスト及び演奏教習の内容や、図３に示すように、楽音データのノートイベントを表す楽譜が表示される。また、マウスのクリックによってオン・オフするアイコンスイッチが表示される。
Ｉ／Ｏインターフェース１８は、電子楽器２で演奏された演奏データを入力してＣＰＵ１１に受け渡す。
なお、図２の表示は、曲リストの中から「グリーンスリーブス」の曲が選択され、そのレッスン範囲「１」〜「８」及び練習の進度を示している。また、図３の表示は、選択された曲の選択されたレッスン範囲における再生中の状態を示している。
【００１３】
図４は、メインフローチャートである。まず、ワークＲＡＭ１４のレジスタ等の変数を初期化する（ステップＡ１）。そして、以下のループを繰り返し実行する。
ループの最初は操作部１６のキー入力待ち（ステップＡ２）となる。このキー入力待ちでは、キーボード又はマウスの指定に応じた処理を実行する。再生が指定された否かを判別し（ステップＡ３）、再生が指定されたときは再生フラグＳＴＦを「１（再生）」にセットして再生開始を設定する（ステップＡ４）。再生状態において再生停止が指定されたか否かを判別し（ステップＡ５）、再生停止が指定されたときは、ＳＴＦを「０（再生停止）」にセットして再生を停止する（ステップＡ６）。
【００１４】
再生タイプとしては、通常の再生モード、たとえ間違った演奏であっても曲を進めるモード、正しい演奏のときに曲を進めるステップレッスンのモードを選択することができる。したがって、再生タイプ切り替えが指定されたか否かを判別し（ステップＡ７）、これが指定されたときは、モードフラグを反転して再生タイプ変数を更新する（ステップＡ８）。なお、この実施形態においては、正しい演奏のときに曲を進めるステップレッスンで、且つ両手モードが選択されている場合である。当然、右手パートあるいは左手パートが選択された場合は、その選択されたパートに含まれるイベントデータのみが再生の対象となり、イベントを指定するポインタも再生対象のイベントのみを指定するようになる。
また、その他の処理が指定されたか否かを判別し（ステップＡ９）、指定されたときはその他の処理を実行する（ステップＡ１０）。
【００１５】
図５は、ワークＲＡＭ１４のエリアにおける各種のレジスタやフラグからなる変数を示している。各レジスタ及びフラグについては、以下に示すアプリケーションすなわち演奏教習処理の動作においてその都度説明する。
図６は再生処理のフローチャートである。最初に変数初期化を行い（ステップＢ１）、次に開始位置用のポインタを初期化する（ステップＢ２）。この後、再生フラグＳＴＦの値を判定して、再生を続けるか否かを判別する（ステップＢ３）。再生を続ける場合には時間計算を行う（ステップＢ４）。すなわち、時間経過によって次のノートイベントの発音開始時間に達したか否かを計算する。次のノートイベントの発音開始時間に達したときは、ノートイベントを指定するポインタを移動する（ステップＢ５）。
【００１６】
図５のＣＮＰは、現在指定中のノートイベントのノートポインタであり、時間経過によって次のノートイベントの発音開始時間に達したときはインクリメントされる。このインクリメントに応じて、図３に示すように、ノートポインタのマーク（矢印）ＣＮＰが現在指定している音符の位置から次の音符の位置に移動する。このマークによってユーザは演奏すべき音符すなわちノートイベントを認識できる。次に、図５におけるフラグＷＦの値が「１」であるか否かを判別する（ステップＢ６）。ＷＦは押鍵待ちフラグであり、ＣＮＰによって現在指定されているノートオンイベント（すなわちマークＣＮＰによって指定されている音符）の発音開始時間に達しても押鍵がない場合に「１」にセットされる。
【００１７】
ＷＦの値が「１」でない場合には、テンポの変更のイベントがあるか否かを判別する（ステップＢ７）。テンポの変更がある場合にはテンポ変更イベント処理を行う（ステップＢ８）。次に、曲の部分再生を行っている場合で指定区間の再生が終了した場合時の自動停止処理を行う（ステップＢ９）。この後、発音時間が終了したノートオフイベントに対するノートオフ処理（ステップＢ１０）、発音開始時間に達したノートオンイベントに対するノートオン処理（ステップＢ１１）を実行する。
【００１８】
ステップＢ６においてＷＦの値が「１」である場合、又はステップＢ１１におけるノートオン処理が終了した後は、押鍵ありか否かを判別する（ステップＢ１２）。押鍵操作があったときは、操作された鍵（ＫＥＹ）の音高を図５のＰＩＴＣＨ（ＫＥＹ）にストアし、同時に図５の押鍵フラグＫＦを「１（押鍵あり）」にセットする（ステップＢ１３）。そして、イベントノートのＭＩＤＩ出力を行う（ステップＢ１４）。次にステップレッスン処理（ステップＢ１５）、リアルタイムチェック処理（ステップＢ１６）を実行する。
ステップＢ１２において押鍵がない場合、又はステップＢ１６のリアルタイムチェック処理の後は、ステップＢ３に移行して、ＳＴＦの値を見て再生を続けるか否かを判別する。ＳＴＦの値が「１」で再生を続ける場合には、上記各ステップを実行する。
一方、ＳＴＦの値が「０（再生停止）」の場合は、再生音のオールノートオフ処理を実行し（ステップＢ１７）、演奏結果に対する評価処理を実行する（ステップＢ１８）。そして、メインフローに戻る。
【００１９】
図７は、図６の再生処理におけるステップＢ１１のノートオン処理のフローチャートである。ポインタＣＮＴの位置がノートオンイベントか否かを判別し（ステップＣ１）、ノートオンイベントの位置である場合には、後述する再生フラグの状態を見て、ノートオン処理を続けるか否かを判別する（ステップＣ２）。ノートオン処理を続ける場合には、通常の再生モードであるか否かを判別する（ステップＣ３）。
【００２０】
通常の再生モードではなく、ステップレッスンのモードである場合には、ＷＦの値が「０」であるか否かを判別する（ステップＣ４）。この値が「０」である場合には、押鍵フラグＫＦの値が「１」であるか否かを判別する（ステップＣ５）。この値が「１（押鍵）」である場合には、ＣＮＴで指定されたノートオンイベントに対して速やかに押鍵操作されたので、ＫＦの値を「０」に戻す（ステップＣ６）。一方、ＫＦの値が「０」で押鍵がない場合には、ＷＦの値を「１（押鍵待ち）」にセットする（ステップＣ７）。
ステップＣ４においてＷＦの値が「１」である場合、ステップＣ６においてＫＦの値を「０」に戻した場合、又はステップＣ７においてＷＦの値を「１」にセットした場合には、次のノートオンイベントを指定する（ステップＣ８）。そして、もし次のノートがなければ前述のステップＣ２で判断される再生フラグを再生終了状態にする。そして、ステップＣ２に移行してノートオン処理を続けるか否かを判別する。
【００２１】
ステップＣ３において再生モードが通常再生モードである場合には、ＭＩＤＩ出力の発音処理を行う（ステップＣ９）。この発音処理の後、又は、ステップＣ１においてポインタＣＮＰの位置がノートオンイベントでない場合、若しくはステップＣ２においてノートオン処理を続けない場合には、このフローを終了して図６の再生処理のフローに戻る。
【００２２】
図８は、図６の再生処理におけるステップレッスン処理のフローチャートである。このフローではユーザの演奏操作すなわち押鍵に応じた処理を行う。ポインタＣＮＰで指定するイベントがノートオンイベントであるか否かを判別し（ステップＤ１）、指定がノートオンイベントである場合には、ＫＦの値が「１」か否か、すなわち押鍵がされたか否かを判別する（ステップＤ２）。この値が「１」である場合には、さらにＷＦの値が「１」であるか否かを判別する（ステップＤ３）。この値が「１」すなわち押鍵待ちのポーズ状態である場合には、押鍵によってそのポーズを解除してＷＦの値を「０」に戻す（ステップＤ４）。次に、時間調整値を算出する（ステップＤ５）。すなわち、ポーズ状態の間に曲データの時間が経過しているので、時間戻しの調整のための時間差を算出する。
【００２３】
ステップＤ３において、ＷＦの値が「０」である場合、すなわちノートオンイベントの発音開始時間に対して押鍵操作が早過ぎる場合には、ポインタＣＮＰを早送りする（ステップＤ６）。また、時間調整値を算出する（ステップＤ７）。すなわち、早送りした分だけ時間進め処理のための時間差を算出する。
ステップＤ５若しくはステップＤ７における時間調整値算出の後、又は、ステップＤ１においてＣＮＰで指定するイベントがノートオンイベントでない場合、若しくはステップＤ２においてＫＦの値が「０」すなわち押鍵がない場合には、このフローを終了して図６の再生処理に戻る。
【００２４】
図９及び図１０は、図６の再生処理におけるステップＢ１６のリアルタイムチェック処理のアルゴリズムを示すフローチャートである。このフローでは、ユーザの演奏操作の進行に伴って、リアルタイムで押鍵操作の良否をチェックする。図３に示した画面のマークＣＮＰによってユーザが演奏操作をしても、その演奏操作がマークで指定した音符であるとは限らない。したがって、マーク位置の前方向及び後方向をサーチして演奏操作に対応する音符を検索する必要がある。図５のＦＳＰ及びＢＳＰは、それぞれ、前方向サーチ用ポインタ及び後方向サーチ用ポインタである。
【００２５】
図９において、ＦＳＰにＣＮＰで現在指定しているノートオンイベントの次のノートオンイベントをセットする（ステップＥ１）。また、ＢＳＰにＣＮＰで現在指定しているノートオンイベントをセットする（ステップＥ２）。すなわち、押鍵タイミングの時間の直前及び直後のノートオンイベントを指定する。次に、図５に示す３つのフラグＦＭＦ、ＢＭＦ、及びＬＡＧＦを全て「０」にセットする（ステップＥ３）。ＦＭＦは、前方向のノートオンイベントと押鍵による音高とが一致したときに「１」にセットするフラグである。ＢＭＦは、後方向のノートオンイベントと押鍵による音高とが一致したときに「１」にセットするフラグである。ＬＡＧＦは、指定しているノートオンイベントの発音開始時間よりも押鍵操作のタイミングが遅れたときに「１」にセットするフラグである。
次に、レジスタＦＭＩＮに「−１０００」をセットし、レジスタＢＭＩＮに「１０００」をセットする（ステップＥ４）。
図５に示すように、ＦＭＩＮは前方向最小時間をストアするレジスタであり、ＢＭＩＮは前方向最小時間をストアするレジスタである。ステップＥ４においては、ＦＭＩＮに負の最大値をストアし、ＢＭＩＮに正の最大値をストアする。なお、ＦＭＩＮ及び後述するＢＭＩＮにストアする数値は、４分音符のテンポを１００としたときの値である。したがって、ＦＭＩＮには４分音符の１０個分だけ後方向の時間がストアされる。
【００２６】
図５に示すように、ＮＯＷは曲再生の現在時間をストアするレジスタであり、ＰＯＳはＮＯＷの現在時間を保持する時間保持のレジスタである。図９のステップＥ５において、ＮＯＷの現在時間をＰＯＳにストアする。すなわち、押鍵操作がされた時間である押鍵タイミングをＰＯＳに保持する。そして、ポインタＣＮＴに「０」をセットしてクリアし（ステップＥ６）、ＣＮＴの値をインクリメントしながら以下のループを繰り返す。
ＣＮＴの値が「３」未満であるか否かを判別し（ステップＥ７）、この値が「３」未満である場合には、図５の２つのレジスタＰＩＴＣＨ（ＦＳＰ）の値とＰＩＴＣＨ（ＫＥＹ）の値とが等しいか否かを判別する（ステップＥ８）。ＰＩＴＣＨ（ＦＳＰ）は、ＦＳＰのノートの音高をストアするレジスタであり、ＰＩＴＣＨ（ＫＥＹ）はすでに記載したように、押鍵された鍵の音高をストアするレジスタである。ＰＩＴＣＨ（ＦＳＰ）の値とＰＩＴＣＨ（ＫＥＹ）の値とが等しい場合、すなわち、前方向にサーチしたノートオンイベントの音高と押鍵操作の音高とが一致した場合には、さらに、ＭＡＴ（ＦＳＰ）の値が「１」より小さいか否かを判別する（ステップＥ９）。
【００２７】
図５に示すレジスタＭＡＴ（ＦＳＰ）は、ＦＳＰのノートオンイベントの判定値をストアするレジスタであり、その初期値は「−１」である。ノートオンイベントに対して押鍵操作がされて、その押鍵操作の良否が判定された場合には、ＭＡＴ（ＦＳＰ）には「１」、「２」又は「３」の値がストアされる。したがって、ＭＡＴ（ＦＳＰ）の値が「１」より小さい場合には、そのノートオンイベントがまだ判定されていないデータである。この場合には、ＰＯＳの値からＴＩＭＥ（ＦＳＰ）の値が減算され、その減算結果の値がＦＤＩＦにストアされる（ステップＥ１０）。
【００２８】
図５のレジスタＴＩＭＥ（ＦＳＰ）には、ＦＳＰで指定したノートオンイベントの発音開始時間がストアされる。したがって、図５のレジスタＦＤＩＦには、ステップＥ１０の演算によって押鍵時間と前方向のノートオンイベントの発音開始時間との時間差がストアされる。この場合、ＰＯＳにストアされた押鍵時間から前方向のノートオンイベントの発音開始時間を減算するので、その時間差は負の値となる。次に、ＦＭＩＮのデータとＦＤＩＦのデータとを比較して、ＦＭＩＮのデータの値がＦＤＩＦのデータの値よりも小さいか否かを判別する（ステップＥ１１）。
【００２９】
いま、ＦＭＩＮには「−１０００」の値がストアされている。すなわち、押鍵タイミングの時間から４分音符１０個分だけ後方向の時間がストアされているので、ＦＭＩＮの時間のほうがＦＤＩＦの負の時間差よりも小さい。したがって、ステップＥ１２において、ＦＭＩＮの値「−１０００」をＦＤＩＦの時間差の値に置き換え、図５のレジスタＦＮＯＭＩにＦＳＰの値をストアする。ＦＮＯＭＩは、押鍵に対応する前方向の候補対象となるノートオンイベントをストアするレジスタである。
例えば、ＦＤＩＦの時間差が４分音符１個分である場合には、ＦＭＩＮには「−１００」の値がストアされる。そして、ＦＳＰで指定したノートオンイベントを前方向における押鍵操作の候補ノートオンイベントとして、ＦＮＯＭＩにストアする。次に、フラグＦＭＦに「１」をセットする（ステップＥ１３）。すなわち、前方向に押鍵操作の音高と一致する音高のノートオンイベントが存在することを示すフラグを「１」にセットする。
【００３０】
ステップＥ１３の後、又は、ステップＥ８においてＰＩＴＣＨ（ＦＳＰ）の値とＰＩＴＣＨ（ＫＥＹ）の値とが異なり、前方向にサーチしたノートオンイベントの音高と押鍵操作の音高とが一致しない場合、若しくはステップＥ９においてＭＡＴ（ＦＳＰ）の値が「１」以上で、すでにＦＳＰで指定するノートオンイベントが判定済みになっている場合には、ステップＥ１４においてＦＳＰの値をインクリメントする。すなわち、さらに前方向のノートオンイベントを指定する。なお、前方向に押鍵操作の候補対象となるノートオンイベントが検出された後は、さらに前方向のノートオンイベントを指定する必要はないが、処理の高速化及びフローの単純化を図るために、さらに前方向のノートオンイベントを指定する。したがって、ステップＥ１１においてＦＭＩＮの値がＦＤＩＦの値よりも大きい場合でも、ステップＥ１４においてＦＳＰの値をインクリメントする。
【００３１】
この後は、図１０のフローにおいて、図５の２つのレジスタＰＩＴＣＨ（ＢＳＰ）の値とＰＩＴＣＨ（ＫＥＹ）の値とが等しいか否かを判別する（ステップＥ１５）。ＰＩＴＣＨ（ＢＳＰ）は、ＢＳＰのノートの音高をストアするレジスタであり、ＰＩＴＣＨ（ＫＥＹ）はすでに記載したように、押鍵された鍵の音高をストアするレジスタである。ＰＩＴＣＨ（ＢＳＰ）の値とＰＩＴＣＨ（ＫＥＹ）の値とが等しい場合、すなわち、後向にサーチしたノートオンイベントの音高と押鍵操作の音高とが一致した場合には、さらに、ＭＡＴ（ＢＳＰ）の値が「１」より小さいか否かを判別する（ステップＥ９）。
【００３２】
図５に示すレジスタＭＡＴ（ＢＳＰ）は、ＢＳＰのノートオンイベントの判定値をストアするレジスタであり、その初期値は「−１」である。ノートオンイベントに対して押鍵操作がされて、その押鍵操作の良否が判定された場合には、ＭＡＴ（ＢＳＰ）には「１」、「２」又は「３」の値がストアされる。したがって、ＭＡＴ（ＢＳＰ）の値が「１」より小さい場合には、そのノートオンイベントがまだ判定されていないデータである。この場合には、ＰＯＳの値からＴＩＭＥ（ＢＳＰ）の値が減算され、その減算結果の値がＢＤＩＦにストアされる（ステップＥ１０）。
【００３３】
図５のレジスタＴＩＭＥ（ＢＳＰ）には、ＢＳＰで指定したノートオンイベントの発音開始時間がストアされる。したがって、図５のレジスタＢＤＩＦには、ステップＥ１７の演算によって押鍵時間と後方向のノートオンイベントの発音開始時間との時間差がストアされる。この場合、ＰＯＳにストアされた押鍵タイミングの時間から後方向のノートオンイベントの発音開始時間を減算するので、その時間差は正の値となる。次に、ＢＭＩＮのデータとＢＤＩＦのデータとを比較して、ＢＭＩＮのデータの値がＢＤＩＦのデータの値よりも大きいか否かを判別する（ステップＥ１８）。
【００３４】
いま、ＢＭＩＮには「１０００」の値がストアされている。すなわち、押鍵タイミングの時間から４分音符１０個分だけ前方向の時間がストアされているので、ＢＭＩＮの時間のほうがＢＤＩＦの時間差よりも大きい。したがって、ステップＥ１９において、ＢＭＩＮの値「１０００」をＢＤＩＦの時間差の値に置き換え、図５のレジスタＢＮＯＭＩにＢＳＰの値をストアする。ＢＮＯＭＩは、押鍵に対応する後方向の候補対象のノートオンイベントをストアするレジスタである。
例えば、ＢＤＩＦの時間差が４分音符２個分である場合には、ＢＭＩＮには「２００」の値がストアされる。そして、ＢＳＰで指定したノートオンイベントを後方向における押鍵操作の候補ノートオンイベントとして、ＢＮＯＭＩにストアする。次に、フラグＢＭＦに「１」をセットし（ステップＥ２０）、フラグＬＡＧＦに「１」をセットする（ステップＥ２１）。すなわち、後方向に押鍵操作の音高と一致する音高のノートオンイベントが存在することを示すフラグを「１」にセットし、そのノートオンイベントの発音開始時間から押鍵タイミングが遅れていることを示すフラグを「１」にセットする。
この後、ＢＳＰの値をデクリメントする（ステップＥ２２）。すなわち、さらに後方向のノートオンイベントを指定する。
【００３５】
ステップＥ２１の後、又は、ステップＥ１５においてＰＩＴＣＨ（ＢＳＰ）の値とＰＩＴＣＨ（ＫＥＹ）の値とが異なり、後方向にサーチしたノートオンイベントの音高と押鍵操作の音高とが一致しない場合、若しくはステップＥ１６においてＭＡＴ（ＢＳＰ）の値が「１」以上で、すでにＢＳＰで指定するノートオンイベントが判定済みになっている場合には、ステップＥ２２においてＢＳＰの値をデクリメントする。すなわち、さらに後方向のノートオンイベントを指定する。
【００３６】
なお、前方向サーチの場合と同様に、後方向に押鍵操作の候補対象となるノートオンイベントが検出された後は、さらに後方向のノートオンイベントを指定する必要はないが、処理の高速化及びフローの単純化を図るために、さらに後方向のノートオンイベントを指定する。したがって、ステップＥ１８においてＢＭＩＮの値がＢＦＤＩＦの値よりも大きい場合でも、ステップＥ２２においてＢＦＳＰの値をデクリメントする。
【００３７】
次に、ＣＮＴの値をインクリメントする（ステップＥ２３）。そして、図９のステップＥ９のステップＥ７に移行し、ＣＮＴの値が「３」未満であるか否かを判別する。ＣＮＴの値が「３」未満である場合には、ステップＥ８〜ステップ２３までのループを繰り返す。ステップＥ７において、ＣＮＴの値が「３」以上になった場合には、ステップＥ２４に移行して判定処理を実行し、図６の再生処理に戻る。すなわち、押鍵操作があったときは、その押鍵操作タイミングの時間を基準として、前方向及び後方向にそれぞれ３つのノートオンイベントをサーチして、押鍵操作の候補対象を検出する。
【００３８】
図１１及び図１２は、図９のステップＥ２４の判定処理のフローチャートである。このフローでは、ユーザの押鍵操作の良否すなわち演奏操作の状態を判定する。図１１において、ＦＭＦ又はＢＭＦの少なくとも一方の値が「１」であるか否かを判別する（ステップＦ１）。ＦＭＦ又はＢＭＦのいずれも「１」でない場合には、押鍵操作タイミングの時間を基準として、その前方向及び後方向の所定範囲において、押鍵操作の候補対象が検出されなかった場合である。この場合には、ＭＡＴ（ＣＮＰ）に「−１」をセットする（ステップＦ２）。
【００３９】
ＦＭＦ又はＢＭＦの少なくとも一方が「１」である場合には、ＦＭＦ及びＢＭＦの値が共に「１」であるか否かを判別する（ステップＦ３）。共に「１」である場合には、押鍵操作タイミングの時間を基準として、その前方向及び後方向の両方において、押鍵操作の２つの候補対象が検出された場合である。この場合には、より押鍵操作タイミングの時間に近い方を確定候補とする。このため、ＦＭＩＮの負の値とＢＭＩＮの正の値を加算した結果が「０」より大きい（加算結果が正である）か否かを判別する（ステップＦ４）。
【００４０】
加算した結果が「０」より大きい場合には、ＢＭＩＮの値の方がＦＭＩＮの絶対値より大きい場合であるので、ＦＳＰで指定したノートオンイベントの方が、ＢＳＰで指定したノートオンイベントよりも押鍵操作タイミングの時間に近い。したがってこの場合には、ＦＭＩＮの時間データを図５のレジスタＤＩＦにストアする（ステップＦ５）。ＤＩＦは確定時間差をストアするレジスタである。また、ＦＮＯＭＩにストアされている候補対象のノートオンイベントを図５のレジスタＮＯＭＩにストアする（ステップＦ６）。ＮＯＭＩは確定候補のノートオンイベントを記憶するレジスタである。
【００４１】
ステップＦ４において、加算した結果が「０」より小さい場合には、ＦＭＩＮの絶対値の方がＢＭＩＮの値より大きい場合であるので、ＢＳＰで指定したノートオンイベントの方が、ＦＳＰで指定したノートオンイベントよりも押鍵操作タイミングの時間に近い。したがってこの場合には、ＢＭＩＮの時間データを図５のレジスタＤＩＦにストアする（ステップＦ７）。また、ＢＮＯＭＩにストアされている候補対象のノートオンイベントを確定候補としてレジスタＮＯＭＩにストアする（ステップＦ８）。
【００４２】
ステップＦ３において、ＦＭＦ及びＢＭＦの値が共に「１」ではなく、いずれか一方のみが「１」である場合には、押鍵操作タイミングの時間を基準として、その前方向又は後方向の一方のみにおいて、押鍵操作の候補対象が検出された場合である。この場合には、ＦＭＦの値が「１」であるか否かを判別し（ステップＦ９）、この値が「１」である場合には、ＦＭＩＮの時間データをレジスタＤＩＦにストアし（ステップＦ１０）、ＦＮＯＭＩにストアされている候補ノートオンイベントを確定候補としてレジスタＮＯＭＩにストアする（ステップＦ１１）。
ステップＦ９において、ＦＭＦの値が「０」である場合、すなわちＢＭＦの値が「１」である場合には、ＢＭＩＮの時間データをレジスタＤＩＦにストアし（ステップＦ１２）、ＢＮＯＭＩにストアされている候補ノートオンイベントを確定候補としてレジスタＮＯＭＩにストアする（ステップＦ１３）。
【００４３】
ステップＦ６、ステップＦ８、ステップＦ１１、又はステップＦ１３において、レジスタＮＯＭＩに確定候補のノートオンイベントをストアした後は、ＤＩＦの値をＲＥＦの値で除算してその除算値に「１００」を乗算した値を算出し、その算出値の絶対値をレジスタＧＡＰにストアする（ステップＦ１４）。図５に示すＲＥＦは基準時間がストアされたレジスタであり、この場合の基準時間は４分音符の拍数値「１００」である。また、図５に示すＧＡＰはタイミング差がストアされるレジスタである。すなわち、ステップＦ１４の演算によれば、ＤＩＦにストアされた押鍵タイミングと確定候補のノートオンイベントの発音開始時間との確定時間差が基準時間に比べてどの程度であるかをパーセンテージで算出し、その算出結果をＧＡＰにストアする。
【００４４】
次に、図１２のフローにおいて、ＧＡＰの値が「５０」より大きいか否かを判別する（ステップＦ１５）。すなわち、押鍵タイミングと確定候補のノートオンイベントの発音開始時間との確定時間差が、８分音符の拍数値「５０」よりも大きいか否かを判別する。ＧＡＰの値が「５０」より大きい場合には、その確定時間差を許容できないものとし、押鍵操作タイミングが遅過ぎるか又は早過ぎるとして演奏ミスと判定する。この場合には、図５のカウンタＭＩＳＳの値をインクリメントする（ステップＦ２１）。ＭＩＳＳは演奏ミスの回数を累算するカウンタであり、その初期値は「０」である。
次に、ＬＡＧＦの値が「１」であるか否かを判別する（ステップＦ１７）。この値が「１」である場合には、ノートオンイベントの発音開始時間に比べて押鍵操作タイミングが遅過ぎる場合であるので、ＭＡＴ（ＣＮＰ）に「３」をストアする（ステップＦ１８）。一方、ＬＡＧＦの値が「０」である場合には、ノートオンイベントの発音開始時間に比べて押鍵操作タイミングが早過ぎる場合であるので、ＭＡＴ（ＣＮＰ）に「２」をストアする（ステップＦ１９）。
【００４５】
ステップＦ１５において、ＧＡＰの値が「５０」以下である場合には、ＷＦの値が「１」であるか否かを判別する（ステップＦ２０）。この値が「１」である場合には、押鍵待ちでポーズ状態の後に押鍵操作がされた場合であるので、実際の押鍵遅れ時間はＧＡＰの値「５０」よりも大きい。したがってこの場合には、ノートオンイベントの発音開始時間に比べて押鍵操作タイミングが遅過ぎる場合であるので、ＭＩＳＳの値をインクリメントして（ステップＦ２１）、ＭＡＴ（ＣＮＰ）に「３」をストアする（ステップＦ２２）。
ステップＦ２０において、ＷＦの値が「０」で押鍵待ちの状態でない場合には、ノートオンイベントの発音開始時間に対して許容できる押鍵操作タイミングであるとして、図５のレジスタＯＫの値をインクリメントする（ステップＦ２３）。ＯＫは演奏合格回数を累算するレジスタであり、その初期値は「０」である。そして、レジスタＭＡＴ（ＣＮＰ）に「１」すなわち演奏合格を示す値をストアする（ステップＦ２４）。
【００４６】
図１１のステップＦ２、図１２のステップＦ１８、ステップＦ１９、ステップＦ２２、又はステップＦ２４において、ＭＡＴ（ＣＮＰ）に値をストアした後は、そのＭＡＴ（ＣＮＰ）の値に応じた評価画像を表す画像データを表示部１７に送出して表示する（ステップＦ２５）。
例えば、図３に示すように、音符の画像の下に「○」、「×」、「→」、「←」からなる評価画像を表示する。「○」、「×」、「→」、「←」の評価画像は、それぞれ、ＭＡＴ（ＣＮＰ）に値「１」、「−１」、「２」、「３」に対応している。
なお、この評価画像は「○」、「×」、「→」、「←」に限らず、他の形状でもよい。他の実施形態として、対応する音符の画像そのものを判定結果に応じてアレンジしてもよい。例えば、音符の符頭に人間の顔を表示させて、顔の表情（笑い顔、泣き顔）で判定を表示するようにしてもよい。要は、ユーザが自分の演奏結果を容易に認識できるような評価画像を表示部１７に表示できる形状であればよい。
ステップＦ２５において画像データを送出した後は、図６の再生処理に戻る。
【００４７】
図１３は、図６の再生処理におけるステップＢ１８の評価処理のフローチャートである。このフローでは、ユーザが演奏教習曲の演奏練習が終了した後に、その練習の進度を評価する。
まず、演奏すべきノートオンイベントを指定するポインタＣＮＴを「０」にセットし（ステップＧ１）、曲のノートオンイベントを指定するポインタＣＮＰを「０」すなわち先頭のノートオンイベントにセット（ステップＧ２）した後、ＣＮＴの値をインクリメントしながら以下のループ処理を繰り返す。ステップＧ３において、後述する継続フラグの状態を見てループ処理を続けるか否かを判別する。このフラグの状態が終了を示す状態にある場合にはループ処理は終了する。
【００４８】
評価処理を続ける場合には、ＣＮＰで指定するノートオンイベントの発音開始時間をストアしているＴＩＭＥ（ＣＮＰ）の値からＳＴＡＲＴ（ＬＮＯ）の値を減算し、その減算結果をレジスタａにストアする（ステップＧ４）。ここでＬＮＯはレッスン範囲（曲の区間及び再生パート）を指定するレジスタである。図２の表示画面において、手順のレッスン「１」〜「８」のうちいずれか１つをマウスによって選択すると、図５に示すＬＮＯに選択されたレッスン範囲の番号がストアされる。また、レッスン範囲が選択されたときに、図５のＳＴＡＲＴ（ＬＮＯ）及びＥＮＤ（ＬＮＯ）に、そのレッスン範囲であるＬＮＯの開始時間及び終了時間がストアされる。
【００４９】
したがって、ステップＧ４においては、ＣＮＰで指定するノートオンイベントの発音開始時間から選択されたレッスン範囲の開始時間を差し引いた時間差がレジスタａにストアされる。次のステップＧ５においては、ＥＮＤ（ＬＮＯ）の値からＴＩＭＥ（ＣＮＰ）の値を減算した減算結果をレジスタｂにストアする。すなわち、選択されたレッスン範囲の終了時間からＣＮＰで指定するノートオンイベントの発音開始時間を差し引いた時間差がレジスタｂにストアされる。
次に、ａ及びｂの値が共に「０」より大きいか否かを判別する（ステップＧ６）。すなわち、ＣＮＰで指定したノートオンイベントが選択されたレッスン範囲内のノートオンイベントであるか否かを判別する。ａ及びｂの値が共に「０」より大きい場合、すなわち、指定したノートオンイベントがレッスン範囲内にある場合には、そのノートオンイベントは演奏すべきイベントであるので、ＣＮＴの値をインクリメントする（ステップＧ７）。しかし、ａ又はｂのいずれかの値が「１」以上である場合には、指定したノートオンイベントがレッスン範囲の外にあるので、ＣＮＴの値はインクリメントしない。
【００５０】
ステップＧ７においてＣＮＴの値をインクリメントした後、又は、ステップＧ６においてａ又はｂの少なくとも一方の値が「１」以上である場合には、次のノートオンイベントを指定する（ステップＧ８）。もし次のデータがない場合は、継続フラグの状態を終了を示す状態にする。そして、ステップＧ３に移行して、このフラグの状態をもとにループ処理を続けるか否かを判別する。続ける場合には、ステップＧ８までの処理を繰り返す。次のノートオンイベントがない場合には、ＣＮＴの値をレジスタＯＲＧにストアする（ステップＧ９）。図５に示すように、ＯＲＧはノートオンイベント数を累算するカウンタであり、ステップＧ９においてレッスン範囲内にあるノートオンイベントの数がストアされる。
【００５１】
次に、ＯＫの値をＯＲＧの値で除算し、その除算結果に「１００」を乗算した結果をレジスタＬＥＶにストアする（ステップＧ１０）。図５に示すように、ＬＥＶは演奏レベル（ユーザの演奏結果のレベル）をストアするレジスタである。すなわち、ステップＧ１０においては、レッスン範囲内にあるノートオンイベントの数の中で、演奏合格回数がどれだけあるかのパーセンテージのデータをＬＥＶにストアする。次に、ＬＥＶの値をＥＶＥ（ＬＮＯ）にストアする（ステップＧ１１）。図５に示すように、ＥＶＥ（ＬＮＯ）はＬＮＯすなわちレッスン範囲における進度をストアするレジスタである。
ステップＧ１１の処理は、ＬＥＶにストアされた演奏合格回数がどれだけあるかのパーセンテージのデータを、数値データや画像データに変換するテーブルを参照して、変換された数値データや画像データをＥＶＥ（ＬＮＯ）にストアする処理である。この実施形態においては、ＥＶＥ（ＬＮＯ）にストアする数値データ及び画像データは、進度を示すパーセンテージの値及び進度を色の濃さ（色の彩度）で表す色指定データである。そして、ステップＧ１２において、ＥＶＥ（ＬＮＯ）にストアした進度を表すデータを表示部１７に送出して表示する。
【００５２】
この結果、図２に示すように、レッスン範囲ごとに進度を示すパーセンテージの値が表示される。また、図３に示すように、レッスン範囲ごとに進度を表す画像（図ではハッチングであるが、実際は色の濃さ）が表示される。なお、現在練習中のレッスン範囲については、進度を表す画像とは異なる画像（進度を表す色とは異なる色）が表示される。
なお、進度を表す画像としては色や数値に限定されない。例えば、円グラフや棒グラフの画像で表してもよい。
【００５３】
以上のように、上記実施形態によれば、演奏データと選択された範囲における曲データの演奏指示データとを比較して、選択された範囲における演奏操作の結果を評価し、評価結果に対応する評価画像の画像データを表示する。したがって、ユーザが課題曲の演奏を行う場合に、演奏後に演奏の全体的な評価だけでなく部分的なきめ細かい評価を受けることで、演奏技量の低い部分の集中的な練習を行うことにより、効率的な演奏教習ができる。
【００５４】
なお、上記実施形態においては、電子楽器として鍵盤装置を例に採ったが、電子管楽器や電子打楽器に対する演奏教習においても、本発明を適用できることは明らかである。
【００５５】
また、上記実施形態においては、物の発明としての演奏教習装置について説明したが、上記実施形態におけるフローチャートに示すように、演奏教習処理を実行するプログラムの発明を実現できる。
すなわち、そのプログラムは、所定の表示手段に表示された曲データに対して所定の演奏手段で演奏された演奏操作を検出して演奏データを入力する第１のステップと、曲データの任意の範囲を所定の操作手段の操作に応じて選択する第２のステップと、第１のステップによって入力された演奏データと第２のステップによって選択された範囲における曲データの演奏指示データとを比較して選択された範囲における演奏操作の結果を評価する第３のステップと、第３のステップによって評価された結果に対応する評価画像の画像データを表示手段に出力して評価画像を表示させる第４のステップとを実行するものである。
また、上記演奏教習処理のプログラムをインターネット等の通信手段を介して、外部のサーバ等から受信する構成も可能である。
【００５６】
【発明の効果】
本発明によれば、曲を構成する各パートの各音を表す曲データの再生に伴って行われるユーザの演奏操作に応じて発生する演奏データと再生中の曲データとを比較して演奏操作の合否を判定し、曲データを再生し終えた後にレッスン範囲を選択すると、判定された演奏操作の合否判定結果の内、選択されたレッスン範囲で指定される曲データの区間およびパートに対応する合否判定結果から演奏練習の進度を評価するので、曲の所定の区間あるいはパートなど部分的なきめ細かい評価を受けることで効率的な演奏教習ができる。
【図面の簡単な説明】
【図１】本発明の演奏教習装置の構成を示し、（１）はそのシステム図、（２）は図１（１）のパソコンの内部構成を示すブロック図。
【図２】図１（１）の表示部の画面に表示された演奏教習の曲リスト等を示す図。
【図３】図１（１）の表示部の画面に表示された演奏教習の楽譜並びに評価画像及び進度を示す図。
【図４】図１（１）のＣＰＵによって実行されるメインフローチャート。
【図５】図１（１）のワークＲＡＭにおける各種のレジスタ等を示す図。
【図６】図４における再生処理のフローチャート。
【図７】図６におけるノートオン処理のフローチャート。
【図８】図６におけるステップレッスン処理のフローチャート。
【図９】図６におけるリアルタイムチェックのフローチャート。
【図１０】図９に続くリアルタイムチェックのフローチャート。
【図１１】図９における判定処理のフローチャート。
【図１２】図１１に続く判定処理のフローチャート。
【図１３】図６における評価処理のフローチャート。
【符号の説明】
１  パソコン
２  電子楽器
１１  ＣＰＵ
１３  プログラムＲＯＭ
１４  ワークＲＡＭ
１５  曲ＲＯＭ
１６  操作部
１７  表示部
１８  Ｉ／Ｏインターフェース
【図１】
0003915452.tif 000002
【図２】
0003915452.tif 000003
【図３】
0003915452.tif 000004
【図４】
0003915452.tif 000005
【図５】
0003915452.tif 000006
【図６】
0003915452.tif 000007
【図７】
0003915452.tif 000008
【図８】
0003915452.tif 000009
【図９】
0003915452.tif 000010
【図１０】
0003915452.tif 000011
【図１１】
0003915452.tif 000012
【図１２】
0003915452.tif 000013
【図１３】
0003915452.tif 000014