(57)【要約】【課題】ユーザが評価対象の曲を演奏してその評価を受ける際に、ユーザの技量を正しく評価することにより、演奏技術の向上を効率的に図ることができるようにする。【解決手段】ＣＰＵ１は、指示した発音期間の範囲内に演奏開始タイミングが検出された場合又は検出された演奏開始タイミングから所定時間以内に発音開始タイミングが指示された場合をタイミングの一致と判定し他の場合をタイミングの不一致と判定し、音高の一致と判定し且つタイミングの一致と判定した場合には加点の演奏評価を行い、音高の不一致と判定した場合又はタイミングの不一致と判定した場合には減点の演奏評価を行う。【選択図】        図１
2004309600.tif 000002
【特許請求の範囲】
【請求項１】
曲データの発音イベントにおける音高と発音開始タイミングおよび発音終了タイミングによる発音期間とを指示する演奏指示手段と、
演奏された音高および演奏開始タイミングを検出する演奏検出手段と、
前記演奏検出手段によって検出された音高と前記演奏指示手段によって指示された音高との一致又は不一致を判定する音高判定手段と、
前記演奏指示手段によって指示された発音期間の範囲内に前記演奏検出手段によって演奏開始タイミングが検出された場合又は前記演奏検出手段によって検出された演奏開始タイミングから所定時間以内に前記演奏指示手段によって発音開始タイミングが指示された場合をタイミングの一致と判定し他の場合をタイミングの不一致と判定するタイミング判定手段と、
前記音高判定手段によって音高の一致と判定され且つ前記タイミング判定手段によってタイミングの一致と判定された場合には加点の演奏評価を行い、前記音高判定手段によって音高の不一致と判定された場合又は前記タイミング判定手段によってタイミングの不一致と判定された場合には減点の演奏評価を行う演奏評価手段と、
を備えたことを特徴とする演奏評価装置。
【請求項２】
前記タイミング判定手段は、前記演奏指示手段によって複数の音高の発音イベントにおける音高と発音開始タイミングおよび発音終了タイミングによる発音期間とが指示された場合には、各音高ごとにタイミングの一致又は不一致を判定することを特徴とする請求項１記載の演奏評価装置。
【請求項３】
設定操作に応じて所定時間を設定する時間設定手段をさらに備え、前記タイミング判定手段は、前記時間設定手段によって設定された所定時間以内に前記演奏指示手段によって発音開始タイミングが指示された場合をタイミングの一致と判定することを特徴とする請求項１記載の演奏評価装置。
【請求項４】
曲データの発音イベントにおける音高と発音開始タイミングおよび発音終了タイミングによる発音期間とを指示する第１のステップと、
演奏された音高および演奏開始タイミングを検出する第２のステップと、
前記第２のステップによって検出された音高と前記第１のステップによって指示された音高との一致又は不一致を判定する第３のステップと、
前記第１のステップによって指示された発音期間の範囲内に前記第２のステップによって演奏開始タイミングが検出された場合又は前記第２のステップによって検出された演奏開始タイミングから所定時間以内に前記第１のステップによって発音開始タイミングが指示された場合をタイミングの一致と判定し他の場合をタイミングの不一致と判定する第４のステップと、
前記第３のステップによって音高の一致と判定され且つ前記第４のステップによってタイミングの一致と判定された場合には加点の演奏評価を行い、前記第３のステップによって音高の不一致と判定された場合又は前記第４のステップによってタイミングの不一致と判定された場合には減点の演奏評価を行う第５のステップと、
を実行することを特徴とする演奏評価プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演奏教習において演奏を評価するための演奏評価装置および演奏評価プログラムに関する。
【０００２】
【従来の技術】
演奏教習の分野ではないが、演奏を評価する観点から類似する従来技術として、カラオケ歌唱を採点する採点機能を備えたカラオケ装置が提案されている。この提案によれば、カラオケ曲の演奏に合わせて歌唱された歌唱音声信号を入力して、この歌唱音声信号を分析して周波数・音量などを割り出し、これをリアルタイムに採点する構成になっている。採点は、カラオケ曲のガイドメロディデータと前記周波数データ・音量データとを比較して、その一致度・相違度に基づいて行なう（特許文献１参照）。
【０００３】
【特許文献１】
特開平１０−１６１６７３号公報（段落番号「０００７」）
【０００４】
【発明が解決しようとする課題】
しかしながら、上記従来の技術においては、カラオケ曲のガイドメロディデータの開始タイミングに合わせて歌うことは初心者でなくとも困難である。ガイドメロディデータの開始タイミングより発声が遅れたり早くなったりするのが普通である。発声の遅れが僅かな時間であれば、ある程度の高い評価を受けるが、発声が早い場合にはその時間が僅かであっても、低い評価を受けることになる。
【０００５】
このことは、カラオケ曲の歌唱に限らず楽器の演奏においても同様である。例えば、曲データの発音イベントにおける音高と発音開始タイミングおよび発音終了タイミングによる発音期間とを指示する場合において、指示される発音開始タイミングより前に演奏がされた場合には、その時間差にかかわらず減点の対象になってしまう。このため、曲データの楽譜を見ながら発音期間の指示に従って演奏する場合には、指示された発音開始タイミングと演奏開始タイミングとがほぼ一致しても、発音開始タイミングより僅か前に演奏がされた場合には減点の対象になってしまうので、ユーザの技量を正しく評価することができず、演奏技術の向上を図る上で好ましくない。
【０００６】
本発明は、ユーザが評価対象の曲を演奏してその評価を受ける際に、ユーザの技量を正しく評価することにより、演奏技術の向上を効率的に図ることができる演奏評価装置および演奏評価プログラムを提供することを目的とする。
【０００７】
【課題を解決するための手段】
請求項１に記載の演奏評価装置は、曲データの発音イベントにおける音高と発音開始タイミングおよび発音終了タイミングによる発音期間とを指示する演奏指示手段（実施形態においては、図１のＣＰＵ１に相当する）と、演奏された音高および演奏開始タイミングを検出する演奏検出手段（実施形態においては、図１のＣＰＵ１に相当する）と、演奏検出手段によって検出された音高と演奏指示手段によって指示された音高との一致又は不一致を判定する音高判定手段（実施形態においては、図１のＣＰＵ１に相当する）と、演奏指示手段によって指示された発音期間の範囲内に演奏検出手段によって演奏開始タイミングが検出された場合又は演奏検出手段によって検出された演奏開始タイミングから所定時間（実施形態においては、ガイド待ち許容時間ｔｂに相当する）以内に演奏指示手段によって発音開始タイミングが指示された場合をタイミングの一致と判定し他の場合をタイミングの不一致と判定するタイミング判定手段（実施形態においては、図１のＣＰＵ１に相当する）と、音高判定手段によって音高の一致と判定され且つタイミング判定手段によってタイミングの一致と判定された場合には加点の演奏評価を行い、音高判定手段によって音高の不一致と判定された場合又はタイミング判定手段によってタイミングの不一致と判定された場合には減点の演奏評価を行う演奏評価手段（実施形態においては、図１のＣＰＵ１に相当する）とを備えた構成になっている。
【０００８】
この場合において、タイミング判定手段は、演奏指示手段によって複数の音高の発音イベントにおける音高と発音開始タイミングおよび発音終了タイミングによる発音期間とが指示された場合には、各音高ごとにタイミングの一致又は不一致を判定するように構成してもよい。
【０００９】
また、この場合において、設定操作に応じて所定時間を設定する時間設定手段（実施形態においては、図１のスイッチ部７およびＣＰＵ１に相当する）をさらに備え、タイミング判定手段は、時間設定手段によって設定された所定時間以内に演奏指示手段によって発音開始タイミングが指示された場合をタイミングの一致と判定するように構成してもよい。
【００１０】
請求項８に記載の演奏評価プログラムは、曲データの発音イベントにおける音高と発音開始タイミングおよび発音終了タイミングによる発音期間とを指示する第１のステップと、演奏された音高および演奏開始タイミングを検出する第２のステップと、第２のステップによって検出された音高と第１のステップによって指示された音高との一致又は不一致を判定する第３のステップと、第１のステップによって指示された発音期間の範囲内に第２のステップによって演奏開始タイミングが検出された場合又は第２のステップによって検出された演奏開始タイミングから所定時間（実施形態においては、ガイド待ち許容時間ｔｂに相当する）以内に第１のステップによって発音開始タイミングが指示された場合をタイミングの一致と判定し他の場合をタイミングの不一致と判定する第４のステップと、第３のステップによって音高の一致と判定され且つ第４のステップによってタイミングの一致と判定された場合には加点の演奏評価を行い、第３のステップによって音高の不一致と判定された場合又は第４のステップによってタイミングの不一致と判定された場合には減点の演奏評価を行う第５のステップととを実行する。上記各ステップは、図１のＣＰＵ１によって実行されるフローチャートの処理機能に相当する。
【００１１】
【発明の実施の形態】
以下、本発明による演奏評価装置の実施形態について、図を参照して説明する。
図１は、実施形態における演奏評価装置のシステムの構成を示すブロック図である。この図において、ＣＰＵ１は、システムバス２を介して、プログラムＲＯＭ３、ワークＲＡＭ４、曲メモリ５、鍵盤６、スイッチ部７、表示部８、および音源９に接続され、これら各部との間で、コマンドおよびデータを授受しながら、この装置全体を制御する。
【００１２】
プログラムＲＯＭ３は、ＣＰＵ１によって実行される制御プログラム、演奏評価プログラムなどのアプリケーションプログラム、起動時のイニシャライズにおける初期データなどをあらかじめ記憶している。ワークＲＡＭ４は、プログラムの実行に必要な各種のレジスタやフラグのエリアを持っている。曲メモリ５は、演奏の評価対象である複数の自動演奏曲の曲データを記憶している。鍵盤６は、演奏操作に応じてノートおよびベロシティをＣＰＵ１に入力する。スイッチ部７は、曲メモリ５に記憶されている曲を選択するスイッチ、自動演奏を開始又は停止するスタート／ストップスイッチなどで構成されている。
表示部８は、自動演奏曲すなわち評価対象の曲の楽譜や評価結果などを表示する。音源９は、最大Ｎ個の発音チャンネルによってポリ演奏が可能であり、ＣＰＵ１の発音指示（ノートオンコマンド）や消音指示（ノートオフコマンド）に応じて、楽音信号を発生して発音回路１０に出力し又は出力を停止する。発音回路１０は、Ｄ／Ａ変換回路、フィルタ回路、増幅回路、スピーカなどで構成され、音源９から出力される楽音信号に応じて楽音を発生する。
なお、図には示していないが、ＣＰＵ１の演奏指示に応じて点灯してガイド表示を行なうＬＥＤが各鍵ごとに設けられている。
【００１３】
次に、実施形態における動作について、図２ないし図１６に示すＣＰＵ１のフローチャート、および図１７ないし図１９に示す図を参照して説明する。
図２は、ＣＰＵ１の演奏評価処理のメインフローチャートである。まず、イニシャライズを行なって（ステップＡ１）、ワークＲＡＭ４の各種のレジスタをクリアし、各種のフラグを「０」にリセットし、タイマインタラプトを禁止する。イニシャライズの後は、スイッチ部７の各スイッチのオンおよびオフを検出するスイッチ処理（ステップＡ２）、曲メモリ５から選択された評価対象の曲の曲データを読み出して演奏指示を行う自動演奏処理（ステップＡ３）、鍵盤６を走査して演奏すなわち押鍵および離鍵の鍵変化を検出する鍵盤処理（ステップＡ４）、評価対象の曲の演奏結果を評価する評価処理（ステップＡ５）、およびその他の処理（ステップＡ６）を繰り返し実行する。
このメインフローチャートにおいて、一定時間ごとのタイマインタラプトが入ると、タイマインタラプト処理を実行するが、このタイマインタラプトの処理については後述する。
【００１４】
図３は、メインフローにおけるステップＡ２のスイッチ処理のフローチャートである。まず、曲選択処理を実行し（ステップＢ１）、次に、スタート／ストップスイッチ処理を実行する（ステップＢ２）。次に、その他のスイッチ処理を行い（ステップＢ３）、メインフローに戻る。
図４は、スイッチ処理におけるステップＢ１の曲選択スイッチ処理のフローチャートである。スタートフラグＳＴＦが「０（演奏停止）」であるか否かを判別し（ステップＣ１）、このフラグが「１（自動演奏）」である場合にはこのフローを終了するが、このフラグが「０」である場合には、曲選択のスイッチが操作されたか否かを判別する（ステップＣ２）。スイッチの操作がない場合にはこのフローを終了するが、スイッチが操作されたときは、そのスイッチによって指定された選択曲の番号をレジスタＭにストアする（ステップＣ３）。そして、このフローを終了する。
【００１５】
図５は、図３におけるステップＢ３のスタート／ストップスイッチ処理のフローチャートである。スタート／ストップスイッチがオンされたか否かを判別し（ステップＤ１）、オンされない場合にはこのフローを終了するが、オンされたときはフラグＳＴＦの値を反転する（ステップＤ２）。そして、ＳＴＦの値が「１」であるか否かを判別する（ステップＤ３）。ＳＴＦの値が「１」である場合には自動演奏を開始して、レジスタＭの選択曲の番号で指定される曲（Ｍ）の先頭アドレスをレジスタＡＤにストアする（ステップＤ４）。また、曲（Ｍ）のテンポをレジスタＴＥＭＰＯにストアする（ステップＤ５）。
【００１６】
次に、ＡＤにより指定される先頭アドレスの曲データのタイムを読出し（ステップＤ６）、そのタイムをレジスタＴＩＭＥにストアする（ステップＤ７）。そして、ＴＥＭＰＯに基づくタイマインタラプトの周期を設定する（ステップＤ８）。次に、曲の進行に応じて曲開始からの音符をカウントするレジスタＮを「０」にクリアし（ステップＤ９）、演奏結果を評価するための所定数の音符をカウントするレジスタＴを「０」にクリアする（ステップＤ１０）。次に、タイマインタラプトの禁止を解除する（ステップＤ１１）。したがって、ＴＥＭＰＯに基づく周期ごとにＴＩＭＥの値がデクリメントされる。
ステップＤ３において、ＳＴＦが「１」から「０」に反転したときは、自動演奏の停止であるので、タイマインタラプトを禁止して（ステップＤ１２）、鍵盤６のガイド表示をすべて消灯する（ステップＤ１３）。そして、メインフローに戻る。
【００１７】
図６ないし図９は、メインフローにおけるステップＡ３の自動演奏処理のフローチャートである。ＳＴＦが「１」であるか否かを判別し（ステップＥ１）、ＳＴＦが「１」で自動演奏状態である場合には、タイマインタラプトごとにデクリメントされるＴＩＭＥの値が「０」に達したか否かを判別する（ステップＥ２）。ＳＴＦが「０」である場合、又は、ＴＩＭＥの値が「０」に達していない場合には、このフローを終了するが、ＴＩＭＥの値が「０」に達したときは、次の曲データを読み出すために、ＡＤのアドレスを進める（ステップＥ３）。そして、ＡＤのアドレスによる曲データの読出しを行なう（ステップＥ４）。
【００１８】
次に、読出した曲データがＥＮＤすなわち曲の終了であるか否かを判別する（ステップＥ５）。読み出したデータがＥＮＤである場合には、ＳＴＦを「０」にリセットして（ステップＥ６）、鍵盤６のガイド表示をすべて消灯する（ステップＥ７）。また、タイマインタラプトを禁止する（ステップＥ８）。そして、このフローを終了してメインフローに戻る。
一方、読み出したデータがＥＮＤでない場合には、図７のフローチャートにおいて、そのデータがノートオフのイベントであるか否かを判別する（ステップＥ９）。そのデータがノートオフのイベントであると判別した場合には、イベントのデータをレジスタＮＯＴＥにストアし（ステップＥ１０）、ＮＯＴＥに対応する鍵のガイド表示を消灯する（ステップＥ１１）。
【００１９】
次に、音源９による最大Ｎ個の発音チャンネルのポリ演奏で、最大Ｎ個のノートをストアできる演奏ガイドの配列レジスタにおいて、配列を指定するポインタｉを初期値「０」にセットして（ステップＥ１２）、ｉの値をインクリメントしながら、ノートオフのイベントに該当するノートを捜す。すなわち、ＮＯＴＥ（ｉ）のノートとＮＯＴＥのノートとが一致するか否かを判別し（ステップＥ１３）、一致しない場合には、ｉの値をインクリメントする（ステップＥ１４）。そして、ｉの値がＮの値を超えたか否かを判別する（ステップＥ１５）。Ｎの値を超えていない場合には、ステップＥ１３においてＮＯＴＥ（ｉ）およびＮＯＴＥのノートとの一致を判別する。
【００２０】
ステップＥ１３において、ＮＯＴＥ（ｉ）のノートとＮＯＴＥのノートとが一致したと判別したときは、ＮＯＴＥ（ｉ）、タイムレジスタＮＯＴＥＴＩＭＥ（ｉ）、フラグＮＯＴＥＦ（ｉ）に空き状態を示すデータＮＵＬＬをストアする（ステップＥ１６）。ＮＯＴＥＴＩＭＥ（ｉ）は、ガイド表示の点灯開始タイミングすなわちイベントの発音開始タイミングから演奏開始タイミングまでの押鍵待ち許容時間をストアするレジスタである。また、ＮＯＴＥＦ（ｉ）は、ＮＯＴＥ（ｉ）のノートが発音中で「１」消音中でＮＵＬＬとなるフラグである。
【００２１】
ＮＯＴＥ（ｉ）、ＮＯＴＥＴＩＭＥ（ｉ）、ＮＯＴＥＦ（ｉ）にＮＵＬＬをストアした後は、フラグＭＦを「０」にリセットする（ステップＥ１７）。ＭＦは配列レジスタにおいて最大Ｎ個のノートがすべて発音中の場合に「１」にセットされるフラグである。したがって、ステップＥ１６においてＮＯＴＥ（ｉ）にＮＵＬＬをストアした後は、配列レジスタの少なくとも１個が空き状態になるので、ＭＦを「０」にリセットする。そして、評価を行なう所定期間の１つの音符に対する処理が終わったので、音符数すなわちイベント数をカウントするレジスタＴの値をインクリメントする（ステップＥ１８）。
【００２２】
ステップＥ９において、データがノートオフでない場合には、図８のフローチャートにおいて、データがタイムか否かを判別する（ステップＥ１９）。タイムである場合には、レジスタＴＩＭＥにタイムの値をストアして（ステップＥ２０）、メインフローに戻る。
データがタイムでない場合には、データがノートオンであるか否かを判別する（ステップＥ２１）。データがノートオンのイベントでないと判別した場合には、その他のイベント処理を行なう（ステップＥ２２）。そして、図６のフローチャートのステップＥ３に移行して、ＡＤのアドレスを進める。
【００２３】
図８のステップＥ２１において、データがノートオンであると判別した場合には、イベントのノートをレジスタＮＯＴＥにストアする（ステップＥ２３）。次に、音源９による最大Ｎ個の発音チャンネルのポリ演奏で、最大Ｎ個のノートをストアできる配列レジスタにおいて、配列レジスタを指定するポインタｉを初期値「０」にセットして（ステップＥ２４）、ｉの値をインクリメントしながら、ノートオンのイベントをストアする空き状態のエリアを捜す。すなわち、ＮＯＴＥ（ｉ）がＮＵＬＬであるか否かを判別し（ステップＥ２５）、ＮＵＬＬでない場合には、ｉの値をインクリメントする（ステップＥ２６）。そして、ｉの値がＮの値を超えたか否かを判別する（ステップＥ２７）。Ｎの値を超えた場合、すなわち、空き状態の配列がない場合には、フラグＭＦを「１」にセットする（ステップＥ２８）。この場合には、ＮＯＴＥのイベントは無効になり、図６のフローチャートのステップＥ３に移行して、ＡＤのアドレスを進める。
【００２４】
一方、図８のステップＥ２５において、ＮＯＴＥ（ｉ）がＮＵＬＬである場合には、ＮＯＴＥのノートをＮＯＴＥ（ｉ）にストアし（ステップＥ２９）、ＮＯＴＥに対応するガイド表示を行う（ステップＥ３０）。ガイド表示を行った後は、図９のフローチャートにおいて、鍵盤６のノートをストアする鍵変化の配列レジスタを指定するポインタｊを初期値「０」にセットして（ステップＥ３１）、ｊの値をインクリメントしながら、配列ＫＥＹ（ｊ）の中でＮＯＴＥのノートに一致するエリアを捜す。
【００２５】
すなわち、ポインタで指定する配列ＫＥＹ（ｉ）がＮＵＬＬ（空き状態）でないか否かを判別し（ステップＥ３２）、ＮＵＬＬでない場合にはＮＯＴＥのノートとＫＥＹ（ｉ）のノートとが一致するか否かを判別する（ステップＥ３３）。ＫＥＹ（ｉ）がＮＵＬＬである場合、又は、ＮＯＴＥのノートとＫＥＹ（ｉ）のノートとが一致しない場合には、ｊの値をインクリメントする（ステップＥ３４）。そして、ｊの値が最大数Ｎを超えたか否かを判別する（ステップＥ３５）。ｊの値がＮを超えた場合には、フラグＭＦが「０」であるか否かを判別する（ステップＥ３６）。すなわち、ＮＯＴＥのノートに一致するノートが配列ＫＥＹ（０）〜（Ｎ）の中にない場合には、配列ＮＯＴＥ（０）〜（Ｎ）に空きがある（ＭＦが「０」）か否かを判別する。
【００２６】
ＭＦが「０」で配列ＮＯＴＥ（０）〜（Ｎ）に空きがある場合には、押鍵をガイドするノートオンのイベントが有効であり、ＮＯＴＥのノートに一致するノートがこの時点ではないことを示している。この場合には、ＮＯＴＥＦ（ｉ）を「１」にセットし（ステップＥ３７）、ＮＯＴＥＴＩＭＥ（ｉ）に押鍵待ち許容時間ｔａをストアする（ステップＥ３８）。また、ＮＯＴＥのノートに一致するノートがＫＥＹ（０）〜（Ｎ）の中にないので、評価ポイントをカウントするＰｏｉｎｔの値からαを減算するポイントダウンを行う（ステップＥ３９）。そして、評価フラグＨＹＯＫＡＦを「１（評価実行）」にセットする（ステップＥ４０）。
【００２７】
ステップＥ３５において、ｊの値がＮを超えていない場合には、ステップＥ３２およびステップＥ３３において、ＮＵＬＬでないＫＥＹ（ｊ）でＮＯＴＥのノートと一致するノートの有無を判別する。ＮＯＴＥのノートとＫＥＹ（ｊ）のノートとが一致する場合には、ＫＥＹ（ｊ）のノートが押鍵状態であるか離鍵状態であるかを示すフラグＫＥＹＦ（ｊ）が「１（押鍵状態）」であるか又はＮＵＬＬ（離鍵状態）であるかを判別する（ステップＥ４１）。ＫＥＹＦ（ｊ）が「１」である場合には、ＫＥＹＦ（ｊ）をＮＵＬＬにセットする（ステップＥ４２）。
【００２８】
さらに、タイムレジスタＫＥＹＴＩＭＥ（ｊ）にＮＵＬＬをストアする（ステップＥ４３）。ＫＥＹＴＩＭＥ（ｊ）は、演奏開始タイミングからノートオンのイベントの発音開始タイミングまでのガイド待ち許容時間をストアするレジスタである。次に、評価ポイントＰｏｉｎｔの値にαを加点する（ステップＥ４４）。ＫＥＹＦ（ｊ）が「１」である場合には、ＮＯＴＥのノートに対応するガイド表示に対応するノートがすでに押鍵されており、ガイド待ち許容時間以内に押鍵ガイドがなされた場合である。したがって、ステップＥ３９において減点したＰｏｉｎｔを解消（補正）するために、Ｐｏｉｎｔにαを加点する（ステップＥ４４）。次に、ＮＯＴＥのノートとＫＥＹ（ｊ）のノートが一致していることによる加点を行うために、Ｐｏｉｎｔにαを加点する（ステップＥ４５）。そして、ＨＹＯＫＡＦに「１」をセットする（ステップＥ４０）。
一方、ステップＥ４１において、ＫＥＹＦ（ｊ）が「０」である場合には、ＮＯＴＥのノートによる発音開始タイミングに応じて押鍵がなされた場合であるので、Ｐｏｉｎｔにαを加点する（ステップＥ４５）。そして、ＨＹＯＫＡＦに「１」をセットする（ステップＥ４０）。
ＨＹＯＫＡＦに「１」をセットした後、又は、ステップＥ３６においてＭＦが「１」である場合には、図６のステップＥ３に移行してＡＤのアドレスを進める。
【００２９】
図７のステップＥ１８においてＴの値をインクリメントした後、又は、ステップＥ１５において、演奏ガイドの配列レジスタを指定するポインタｉの値が最大値Ｎを超えた場合には、図１０のフローチャートにおいて、演奏したノート数が基準ノート数を超えたか否かを判別する（ステップＥ４６）。Ｔのノート数が基準ノート数に達したときは、表示や音声などでユーザに対して支援するか否かを示すフラグＳＨＩＥＮＦを「１（支援）」にセットする（ステップＥ４７）。そして、Ｔのノート数を「０」にクリアする（ステップＥ４８）。Ｔをクリアした後、又は、ステップＥ４６においてＴのノート数が基準ノート数に達しない場合には、ＨＹＯＫＡＦが「０」であるか否かを判別し（ステップＥ４９）、「０」である場合には「１」にセットする（ステップＥ５０）。ＨＹＯＫＡＦを「１」にセットした後、又は、ＨＹＯＫＡＦが「１」である場合には、曲の最初からのノート数をストアするレジスタＮのノート数をインクリメントする（ステップＥ５１）。そして、図６のステップＥ３に移行してＡＤのアドレスを進める。
【００３０】
図１１ないし図１３は、メインフローにおけるステップＡ４の鍵盤処理のフローチャートである。図１１において、まず、鍵走査を行なって（ステップＦ１）、鍵変化があるか否かを判別する（ステップＦ２）。鍵変化がない場合には、このフローを終了してメインフローに戻る。鍵変化がオンからオフに変化した場合、すなわち、離鍵がされた場合には、その離鍵のノートをＫＥＹにストアする（ステップＦ３）。そして、ＫＥＹのノートを元にノートオンコマンドを作成し（ステップＦ４）、そのノートオフコマンドを音源９に送出する（ステップＦ５）。
【００３１】
次に、鍵変化の配列レジスタを指定するポインタｊを初期値「０」にセットして（ステップＦ６）、ｊの値をインクリメントしながら、離鍵のノートのエリアを捜す。すなわち、ＫＥＹ（ｊ）がＮＵＬＬでないか否かを判別し（ステップＦ７）、ＮＵＬＬでない場合、すなわち空き状態でない場合には、ＫＥＹ（ｊ）のノートとＫＥＹのノートとが一致するか否かを判別する（ステップＦ８）。ＫＥＹ（ｊ）がＮＵＬＬである場合、又は、ＫＥＹ（ｊ）のノートとＫＥＹのノートとが一致しない場合には、ｊの値をインクリメントする（ステップＦ９）。そして、ｊの値が配列の最大値Ｎを超えたか否かを判別する（ステップＦ１０）。ｊの値が最大値Ｎを超えていない場合には、ステップＦ７およびステップＦ８において、ＮＵＬＬでないＫＥＹ（ｊ）において、ＫＥＹ（ｊ）のノートとＫＥＹのノートとが一致するか否かを判別する。
【００３２】
ＫＥＹ（ｊ）のノートとＫＥＹのノートとが一致する場合には、ＫＥＹ（ｊ）、ＫＥＹＴＩＭＥ（ｊ）、ＫＥＹＦ（ｊ）にＮＵＬＬをストアする（ステップＦ１１）。そして、鍵変化の配列レジスタが空き無し又は空き有りを示すフラグＦＦを「０（空き有り）」にセットする（ステップＦ１２）。この後、又はステップＦ１０において、ｊの値が最大値Ｎを超えた場合には、メインフローに戻る。
【００３３】
ステップＦ２において、鍵変化がオフからオンに変化した場合、すなわち押鍵がされた場合には、図１２のフローチャートにおいて、その押鍵のノートをレジスタＫＥＹにストアする（ステップＦ１３）。そして、ＫＥＹのノートを元にノートオンコマンドを作成し（ステップＦ１４）、そのノートオンコマンドを音源９に送出する（ステップＦ１５）。次に、鍵変化の配列レジスタを指定するポインタｊを初期値「０」にセットして（ステップＦ１６）、押鍵されたノートをストアするエリアを捜す。
【００３４】
すなわち、ＫＥＹ（ｊ）がＮＵＬＬ（空き状態）であるか否かを判別し（ステップＦ１７）、ＮＵＬＬでない場合には、ｊの値をインクリメントする（ステップＦ１８）。そして、ｊの値が最大値Ｎを超えたか否かを判別する（ステップＦ１９）。ｊの値が最大値Ｎを超えた場合には、フラグＦＦを「１（空き無し）」にセットする（ステップＦ２０）。ｊの値が最大値Ｎを超えていない場合には、ステップＦ１７において、ＫＥＹ（ｊ）がＮＵＬＬであるか否かを判別する。
【００３５】
ＫＥＹ（ｊ）がＮＵＬＬである場合、又は、ＦＦが「１」である場合には、演奏ガイドの配列を指定するポインタｉを初期値「０」にセットして（ステップＦ２２）、ｉの値をインクリメントしながら、配列ＮＯＴＥ（ｉ）の内容を検索する。すなわち、ＮＯＴＥ（ｉ）がＮＵＬＬでないか否かを判別し（ステップＦ２３）、ＮＯＴＥ（ｉ）がＮＵＬＬでない場合には、ＮＯＴＥ（ｉ）のノートとＫＥＹのノートとが一致するか否かを判別する（ステップＦ２４）。
【００３６】
ステップＦ２３において、ＮＯＴＥ（ｉ）がＮＵＬＬである場合、又は、ステップＦ２４において、ＮＯＴＥ（ｉ）のノートとＫＥＹのノートとが一致しない場合には、図１３のフローチャートにおいて、ｉの値をインクリメントする（ステップＦ３０）。そして、ｉの値が演奏ガイドの配列の最大値Ｎを超えたか否かを判別する（ステップＦ３１）。ｉの値がＮの値を超えていない場合には、図１２のステップＦ２３において、ＮＯＴＥ（ｉ）がＮＵＬＬであるか否かを判別する。
【００３７】
ステップＦ３１において、ｉの値がＮの値を超えた場合には、フラグＦＦが「０（空き有り）」であるか否かを判別する（ステップＦ３２）。ＦＦが「１」である場合には、鍵変化の配列に空きがない状態である。この場合にはメインフローに戻る。一方、ＦＦが「０」である場合には、押鍵したノートが有効であり、まだガイドされていない状態である。この場合には、Ｐｏｉｎｔからαを減点する（ステップＦ３３）。そして、ＫＥＹＦ（ｊ）を「１」にセットし（ステップＦ３４）、ＫＥＹＴＩＭＥ（ｊ）にガイド待ち許容時間ｔｂをストアする（ステップＦ３５）。次に、ＨＹＯＫＡＦを「１（評価実行）」にセットする（ステップＦ３６）。
【００３８】
図１２のステップＦ２４において、ＮＯＴＥ（ｉ）のノートとＫＥＹのノートＰとが一致する場合には、ＮＯＴＥＦ（ｉ）が「１」であるか否かを判別する（ステップＦ２５）。ＮＯＴＥＦ（ｉ）が「１」である場合、すなわち、ガイド待ち許容時間ｔａ内に、演奏をガイドした鍵が押鍵された場合には、評価ポイントのレジスタＰｏｉｎｔにαを加点する（ステップＦ２６）。すなわち、図１３のステップＦ３３において減点したＰｏｉｎｔの値を解消する。
【００３９】
次に、ＮＯＴＥ（ｉ）にＮＵＬＬ（空き状態）をストアし（ステップＦ２７）、図１３において、ＮＯＴＥＴＩＭＥ（ｉ）にＮＵＬＬをストアする（ステップＦ２８）。そして、評価ポイントのレジスタＰｏｉｎｔにαを加点する（ステップＦ２９）。すなわち、演奏ガイドのノートに一致した押鍵によって、改めて評価ポイントを加点する。次に、ＨＹＯＫＡＦを「１（評価実行）」にセットする（ステップＦ３６）。
図１２のステップＦ２５において、ＮＯＴＥＦ（ｉ）がＮＵＬＬである場合には、押鍵ガイドのノートに応じて押鍵されたノートが一致したので、図１３のステップＦ２９において、評価ポイントのレジスタＰｏｉｎｔにαを加点する。次に、ＨＹＯＫＡＦを「１（評価実行）」にセットする（ステップＦ３６）。そして、メインフローに戻る。
【００４０】
図１４は、タイマインタラプトのフローチャートである。一定時間ごとのタイマインタラプトに応じて、レジスタＴＩＭＥの値をデクリメントする（ステップＧ１）。そして、演奏ガイドの配列レジスタを指定するポインタｉを初期値「０」にセットして（ステップＧ２）、ｉの値をインクリメントしながら、ステップＧ３からステップＧ９までのループ処理を繰り返す。
【００４１】
そのループ処理では、まず、ＮＯＴＥＴＩＭＥ（ｉ）がＮＵＬＬでないか否かを判別し（ステップＧ３）、ＮＵＬＬでない場合には、ＮＯＴＥＴＩＭＥ（ｉ）の値（初期値はｔａ）をデクリメントする（ステップＧ４）。そして、ＮＯＴＥＴＩＭＥ（ｉ）の値が「０」に達したか否かを判別する（ステップＧ５）。すなわち、押鍵待ち許容時間ｔａが経過しても押鍵がなかったか否かを判別する。ＮＯＴＥＴＩＭＥ（ｉ）の値が「０」に達したときは、ＮＯＴＥＴＩＭＥ（ｉ）にＮＵＬＬをストアし（ステップＧ６）、ＮＯＴＥＦ（ｉ）にＮＵＬＬをストアする（ステップＧ７）。この場合には、ノートオンのイベントの発音開始タイミングよりも後に押鍵した演奏開始タイミングが遅すぎるので、押鍵待ちを解消するのである。
【００４２】
ステップＧ７において、ＮＯＴＥＦ（ｉ）にＮＵＬＬをストアした後、又は、ステップＧ３において、ＮＯＴＥＴＩＭＥ（ｉ）がＮＵＬＬである場合、若しくは、ステップＧ５において、ＮＯＴＥＴＩＭＥ（ｉ）の値が「０」に達していない場合には、ｉの値をインクリメントして（ステップＧ８）、ｉの値が配列の最大値Ｎを超えたか否かを判別する（ステップＧ９）。ｉの値がＮの値を超えていない場合には、ステップＧ３に移行して、ループ処理を繰り返す。
ステップＧ９において、ｉの値がＮの値を超えたときは、上記ループ処理を終了し、鍵変化の配列レジスタを指定するポインタｊ初期値「０」にセットして（ステップＧ１０）、ｊの値をインクリメントしながら、ステップＧ１１からステップＧ１７までのループ処理を繰り返す。
【００４３】
そのループ処理では、まず、ＫＥＹＴＩＭＥ（ｊ）がＮＵＬＬでないか否かを判別し（ステップＧ１１）、ＮＵＬＬでない場合には、ＫＥＹＴＩＭＥ（ｊ）の値（初期値はｔｂ）をデクリメントする（ステップＧ１２）。そして、ＫＥＹＴＩＭＥ（ｊ）の値が「０」に達したか否かを判別する（ステップＧ１３）。すなわち、ガイド待ち許容時間ｔｂが経過してもガイドがなかったか否かを判別する。ＫＥＹＴＩＭＥ（ｊ）の値が「０」に達したときは、ＫＥＹＴＩＭＥ（ｊ）にＮＵＬＬをストアし（ステップＧ１４）、ＫＥＹＦ（ｊ）にＮＵＬＬをストアする（ステップＧ１５）。すなわち、ノートオンのイベントの発音開始タイミングよりも前に押鍵した演奏開始タイミングが早過ぎたので、ガイド待ちを解消するのである。
【００４４】
ステップＧ１５において、ＫＥＹＦ（ｊ）にＮＵＬＬをストアした後、又は、ステップＧ１１において、ＫＥＹＴＩＭＥ（ｊ）がＮＵＬＬである場合、若しくは、ステップＧ１３において、ＫＥＹＴＩＭＥ（ｊ）の値が「０」に達していない場合には、ｊの値をインクリメントして（ステップＧ１６）、ｊの値が配列の最大値Ｎを超えたか否かを判別する（ステップＧ１７）。Ｎの値を超えていない場合には、ステップＧ１１に移行して、ループ処理を繰り返す。ｊの値がＮの値を超えたときは、上記ループ処理を終了してメインフローに戻る。
【００４５】
なお、押鍵待ち許容時間ｔａおよびガイド待ち許容時間ｔｂは、ユーザの設定に応じて変更するようにしてもよい。また、押鍵待ち許容時間ｔａを設けずに、ノートオンからノートオフまでの発音期間に押鍵がされた場合にタイミング一致と見なして加点するように構成してもよい。
【００４６】
図１５および図１６は、メインフローにおけるステップＡ５の評価処理のフローチャートである。図１５のフローにおいて、まず、ＨＹＯＫＡＦが「１」であるか否かを判別する（ステップＨ１）。このフラグが「１」である場合にはこれを「０」にリセットする（ステップＨ２）。次に、評価すべき所定期間の配列Ｐ（ｎ）を指定するポインタｎを「０」にセットして（ステップＨ３）、Ｐ（ｎ）にＰ（ｎ＋１）を代入して（ステップＨ４）、ｎの値をインクリメントする（ステップＨ５）。そして、ｎ＋１の値が評価ノート数になったか否かを判別する（ステップＨ６）。評価ノート数になっていない場合には、ステップＨ４に移行して、ステップＨ６までの処理を繰り返す。
【００４７】
ステップＨ６において、ｎ＋１の値が評価ノート数になった場合には、ＰＯＩＮＴの値をＰ（ｎ）にストアする（ステップＨ７）。ＰＯＩＮＴの値をＰ（ｎ）にストアした後は、フラグＳＨＩＥＮＦが「１」であるか否かを判別し（ステップＨ８）、ＳＨＩＥＮＦが「０」である場合にはこのフローを終了するが、ＳＨＩＥＮＦが「１」である場合には、これをリセットする（ステップＨ９）。
【００４８】
次に、Ｎにストアした曲の最初からの音符数が、あらかじめ設定されている２つの音符数であるＤ１より大きくＤ２より小さい期間にあるか否かを判別する（ステップＨ１０）。すなわち、曲の最初の音符からＤ１までの音符、および、Ｄ２の音符から曲の終了までの範囲を除く期間（評価対象期間）にＮの音符数があるか否かを判別する。Ｎにストアした音符数がこの期間にない場合には、このフローを終了する。
【００４９】
Ｎにストアした音符数がＤ１より大きくＤ２より小さい期間にある場合には、図１１のフローにおいて、配列Ｐ（ｎ）の評価ノート数を指定するポインタｎを「０」にセットする（ステップＨ１１）。次に、評価用レジスタＨＹＯＫＡを「０」にクリアする（ステップＨ１２）。そして、ＨＹＯＫＡにＰ（ｎ）の値を加算する（ステップＨ１３）。次に、ｎの値をインクリメントして（ステップＨ１４）、ｎの値が評価ノート数になったか否かを判別する（ステップＨ１５）。評価ノート数になっていない場合には、ステップＨ１３に移行して、ステップＨ１５までの処理を繰り返す。
【００５０】
ｎの値が評価ノート数になった場合には、前回の所定期間における評価データをストアするＦＨＹＯＫＡに評価データがあるか否かを判別する（ステップＨ１６）。ＦＨＹＯＫＡに評価データがある場合には、今回の所定期間の評価データをストアしたＨＹＯＫＡの値がＦＨＹＯＫＡの値以下であるか、又は、ＨＹＯＫＡの値がＦＨＹＯＫＡの値より大きいか否かを判別する（ステップＨ１７）。すなわち、今回の所定期間の評価が前回より低い若しくは同じか、又は、前回より高いかを判別する。
【００５１】
ＨＹＯＫＡの値がＦＨＹＯＫＡの値より大きい場合、又は、ＦＨＹＯＫＡに評価データがない場合には、前回より高い評価であるＬＡＮＫＵＰ（ＨＹＯＫＡ）のデータをレジスタＬＡＮＫにストアする（ステップＨ１８）。一方、ＨＹＯＫＡの値（今回の評価）がＦＨＹＯＫＡの値（前回の評価）以下である場合には、前回より低いか又は同じ評価であるＬＡＮＫＤＯＷＮ（ＨＹＯＫＡ）のデータをレジスタＬＡＮＫにストアする（ステップＨ１９）。ＬＡＮＫにいずれかのデータをストアした後は、ＬＡＮＫのデータに基づく評価結果を表示部８に表示する（ステップＨ２０）。次に、ＨＹＯＫＡの値をＦＨＹＯＫＡにストアして更新し（ステップＨ２１）、次の所定期間の評価に備える。そして、このフローを終了してメインフローに戻る。
【００５２】
次に、実施形態における具体的な動作について、図１７ないし図１９を参照して説明する。
図１７は、和音の演奏ガイドに対する押鍵例を示す図である。図１７（１）は、同一の発音開始タイミングからなる４つの和音（Ｃ３，Ｄ３，Ｅ３，Ｆ３）のガイドノートを示している。図１７（２）は、このガイドノートに対する押鍵例であり、発音開始タイミングより後の時間に各ノートに対する演奏開始タイミングで押鍵がなされている。この場合には、各ノートの発音期間内に押鍵がなされているので、各押鍵に対してすべてＰｏｉｎｔにαを加点するポイントアップ処理（ＵＰ）となる。図１７（３）は、他の押鍵例であり、発音開始タイミングより前の時間に各ノートに対する演奏開始タイミングで押鍵がなされている。この場合には、ガイドノートの発音開始タイミングの時点において、各押鍵に対してすべてＰｏｉｎｔにαを加点するポイントアップ処理となる。
【００５３】
図１８は、発音開始タイミングが異なる複数のノートの演奏ガイドに対する押鍵例を示す図である。
図１８（１）は、異なる発音開始タイミングからなる４つのノート（Ｃ３，Ｄ３，Ｅ３，Ｆ３）のガイドノートを示している。図１８（２）は、ガイド待ち許容時間ｔｂを設けない場合の押鍵例である。まず、Ｄ３のノートの演奏開始タイミングで押鍵があり、次にＣ３のノートの発音開始タイミングでガイドがなされている。すなわち、ガイドノートと押鍵ノートが一致しないと判断され、この時点でＰｏｉｎｔからαを減点するポイントダウン処理（ＤＯＷＮ）となる。その後、Ｄ３のノートの発音開始タイミングでガイドがなされた時点で、ポイントアップ処理となる。また、Ｅ３のノートの演奏開始タイミングで押鍵があった時点では、Ｃ３およびＤ３のノートでガイドがなされている。この場合にも、Ｐｏｉｎｔからαを減点するポイントダウン処理となる。その後、Ｅ３のノートの発音開始タイミングでガイドがなされた時点で、ポイントアップ処理となる。また、Ｆ３のノートの演奏開始タイミングで押鍵があった時点では、Ｃ３，Ｄ３，Ｅ３のノートでガイドがなされている。この場合にも、Ｐｏｉｎｔからαを減点するポイントダウン処理となる。その後、Ｆ３のノートの発音開始タイミングでガイドがなされた時点で、ポイントアップ処理となる。
【００５４】
このように、ガイド待ち許容時間ｔｂを設けない場合には、３回のポイントダウンと４回のポイントアップの結果、１回のポイントアップになり、ガイドノートの発音開始タイミングから僅か前の時間にそのノートに対する押鍵がされた場合でも、ポイントダウンになり、その後のポイントアップが相殺される結果となる。このため、ユーザの技量が正しく評価されない。
【００５５】
図１８（３）は、ガイド待ち許容時間ｔｂを設けた場合の押鍵例である。Ｄ３のノートの演奏開始タイミングで押鍵があったときは、Ｄ３のガイドノートがない場合でもポイントダウン処理をｔｂの時間だけ待つ。そして、ｔ１（ｔ１＜ｔｂ）の時間経過した時点で、Ｄ３のノートの発音開始タイミングがあると、ポイントアップ処理を行う。同様に、Ｅ３のノートの演奏開始タイミングで押鍵があったときは、Ｅ３のガイドノートがない場合でもポイントダウン処理をｔｂの時間だけ待つ。そして、ｔ２（ｔ２＜ｔｂ）の時間経過した時点で、Ｅ３のノートの発音開始タイミングがあると、ポイントアップ処理を行う。また、Ｆ３のノートの演奏開始タイミングで押鍵があったときは、Ｆ３のガイドノートがない場合でもポイントダウン処理をｔｂの時間だけ待つ。そして、ｔ３（ｔ３＜ｔｂ）の時間経過した時点で、Ｆ３のノートの発音開始タイミングがあると、ポイントアップ処理を行う。
【００５６】
図１９は、発音開始タイミングが異なる複数のノートの演奏ガイドに対してすべての押鍵がされない場合の押鍵例を示す図である。
図１９（１）は、異なる発音開始タイミングからなる３つのノート（Ｃ３，Ｄ３，Ｅ３）のガイドノートを示している。図１９（２）は、ガイド待ち許容時間ｔｂを設けない場合の押鍵例である。まず、Ｄ３のノートの演奏開始タイミングで押鍵があった時点では、Ｃ３のガイドノートで押鍵ガイドがなされている。このため、Ｃ３のガイドノートに対してＤ３の押鍵がなされたと解釈され、Ｐｏｉｎｔからαを減点するポイントダウン処理となる。その後、Ｄ３のガイドノートの発音開始タイミングの時点で、ポイントアップ処理となる。このように、ガイド待ち許容時間ｔｂを設けない場合には、ガイドノートの発音開始タイミングから僅か前の時間にそのノートに対する押鍵がされた場合でも、ポイントダウンになり、その後のポイントアップが相殺される結果となる。このため、ユーザの技量が正しく評価されない。
【００５７】
図１９（３）は、ガイド待ち許容時間ｔｂを設けた場合の押鍵例である。Ｄ３のノートの演奏開始タイミングで押鍵があったときは、Ｄ３のガイドノートがない場合でもポイントダウン処理をｔｂの時間だけ待つ。そして、ｔ４（ｔ４＜ｔｂ）の時間経過した時点で、Ｄ３のノートの発音開始タイミングがあると、ポイントアップ処理を行う。
【００５８】
以上のように、この実施形態によれば、ＣＰＵ１は、曲データの発音イベントにおける音高と発音開始タイミングおよび発音終了タイミングによる発音期間とを指示し、演奏された音高および演奏開始タイミングを検出する。そして、検出した音高と指示した音高との一致又は不一致を判定するとともに、指示した発音期間の範囲内に演奏開始タイミングが検出された場合又は検出された演奏開始タイミングから所定時間以内に発音開始タイミングが指示された場合をタイミングの一致と判定し他の場合をタイミングの不一致と判定する。これらの判定により、音高の一致と判定し且つタイミングの一致と判定した場合には加点の演奏評価を行い、音高の不一致と判定した場合又はタイミングの不一致と判定した場合には減点の演奏評価を行う。
したがって、ユーザが評価対象の曲を演奏してその評価を受ける際に、ユーザの技量を正しく評価することにより、演奏技術の向上を効率的に図ることができる。
【００５９】
なお、上記各実施形態においては、図１のプログラムＲＯＭ３に予め記憶されている演奏評価プログラムをＣＰＵ１によって実行する演奏評価装置について説明したが、ＦＤ（フレキシブルディスク）、ＣＤ−ＲＯＭなどの外部記憶媒体に記憶されている演奏評価プログラムや、インターネットなどの通信網を介してダウンロードされる演奏評価プログラムを、パソコンなどの汎用の情報処理装置にインストールして実行することも可能である。この場合には、プログラムの発明を構成する。
【００６０】
すなわち、本発明による演奏評価プログラムは、曲データの発音イベントにおける音高と発音開始タイミングおよび発音終了タイミングによる発音期間とを指示する第１のステップと、演奏された音高および演奏開始タイミングを検出する第２のステップと、第２のステップによって検出された音高と第１のステップによって指示された音高との一致又は不一致を判定する第３のステップと、第１のステップによって指示された発音期間の範囲内に第２のステップによって演奏開始タイミングが検出された場合又は第２のステップによって検出された演奏開始タイミングから所定時間以内に第１のステップによって発音開始タイミングが指示された場合をタイミングの一致と判定し他の場合をタイミングの不一致と判定する第４のステップと、第３のステップによって音高の一致と判定され且つ第４のステップによってタイミングの一致と判定された場合には加点の演奏評価を行い、第３のステップによって音高の不一致と判定された場合又は第４のステップによってタイミングの不一致と判定された場合には減点の演奏評価を行う第５のステップととを実行する。
【００６１】
【発明の効果】
本発明によれば、検出された演奏開始タイミングから所定時間以内に発音開始タイミングが指示された場合にはタイミングの一致と判定するので、ユーザが評価対象の曲を演奏してその評価を受ける際に、ユーザの技量を正しく評価することにより、演奏技術の向上を効率的に図ることができるという効果が得られる。
【図面の簡単な説明】
【図１】本発明の実施形態における演奏評価装置の構成を示すブロック図。
【図２】実施形態におけるＣＰＵの演奏評価処理のメインフローチャート。
【図３】図２におけるスイッチ処理のフローチャート。
【図４】図３における曲選択スイッチ処理のフローチャート。
【図５】図３におけるスタート／ストップスイッチ処理のフローチャート。
【図６】図２における自動演奏処理のフローチャート。
【図７】図６に続く自動演奏処理のフローチャート。
【図８】図７に続く自動演奏処理のフローチャート。
【図９】図８に続く自動演奏処理のフローチャート。
【図１０】図７に続く自動演奏処理のフローチャート。
【図１１】図２における鍵盤処理のフローチャート。
【図１２】図１１に続く鍵盤処理のフローチャート。
【図１３】図１２に続く鍵盤処理のフローチャート。
【図１４】タイマインタラプトのフローチャート。
【図１５】図２における評価処理のフローチャート。
【図１６】図１５に続く評価処理のフローチャート。
【図１７】和音の演奏ガイドに対する押鍵例を示す図。
【図１８】発音開始タイミングが異なる複数のノートの演奏ガイドに対する押鍵例を示す図。
【図１９】発音開始タイミングが異なる複数のノートの演奏ガイドに対してすべての押鍵がされない場合の押鍵例を示す図。
【符号の説明】
１  ＣＰＵ
３  プログラムＲＯＭ
４  ワークＲＡＭ
５  曲メモリ
６  鍵盤
７  スイッチ部
８  表示部
９  音源
１０  発音回路
【図１】
2004309600.tif 000003
【図２】
2004309600.tif 000004
【図３】
2004309600.tif 000005
【図４】
2004309600.tif 000006
【図５】
2004309600.tif 000007
【図６】
2004309600.tif 000008
【図７】
2004309600.tif 000009
【図８】
2004309600.tif 000010
【図９】
2004309600.tif 000011
【図１０】
2004309600.tif 000012
【図１１】
2004309600.tif 000013
【図１２】
2004309600.tif 000014
【図１３】
2004309600.tif 000015
【図１４】
2004309600.tif 000016
【図１５】
2004309600.tif 000017
【図１６】
2004309600.tif 000018
【図１７】
2004309600.tif 000019
【図１８】
2004309600.tif 000020
【図１９】
2004309600.tif 000021