(57)【要約】【課題】  演奏するたびに演奏結果が大きく変動するような場合でも、その演奏結果を正しく評価して、苦手なフレーズを重点的に練習できるようにする。【解決手段】  ＣＰＵ３は、演奏された曲を評価するためにフレーズごとに所定回数の演奏結果の平均得点を算出し、その算出した最も低い平均得点のフレーズのイベントデータを読み出してガイドする。【選択図】  図１
2006284638.tif 000002
【特許請求の範囲】
【請求項１】
演奏された曲を評価するために一定の期間ごとに所定回数の演奏結果の平均得点を算出する平均算出手段と、
前記平均算出手段によって算出された最も低い平均得点の期間のイベントデータを読み出してガイドする練習ガイド手段と、
を備えた演奏教習装置。
【請求項２】
前記練習ガイド手段は、前記平均算出手段によって算出された平均得点が基準値より低い１つ以上の期間を練習対象として選択し、当該練習対象の中から所定の操作手段によって指定された期間のイベントデータを読み出してガイドすることを特徴とする請求項１に記載の演奏教習装置。
【請求項３】
前記練習ガイド手段は、前記平均算出手段によって算出された平均得点が基準値より低い１つ以上の期間を練習対象として選択し、当該練習対象の中で最も低い平均得点の期間のイベントデータを読み出してガイドした結果、前記平均算出手段によって算出された当該期間の平均得点が基準値に達したときは、当該期間を除いた練習対象の中で平均得点が最も低い期間のイベントデータを読み出してガイドすることを特徴とする請求項１に記載の演奏教習装置。
【請求項４】
コンピュータに、
演奏された曲を評価するために一定の期間ごとに所定回数の演奏結果の平均得点を算出するステップＡと、
前記ステップＡによって算出された最も低い平均得点の期間のイベントデータを読み出してガイドするステップＢと、
を実行させる演奏教習処理のプログラム。
【請求項５】
前記ステップＢは、前記ステップＡによって算出された平均得点が基準値より低い１つ以上の期間を練習対象として選択し、当該練習対象の中から所定の操作手段によって指定された期間のイベントデータを読み出してガイドすることを特徴とする請求項４に記載の演奏教習処理のプログラム。
【請求項６】
前記ステップＢは、前記ステップＡによって算出された平均得点が基準値より低い１つ以上の期間を練習対象として選択し、当該練習対象の中で最も低い平均得点の期間のイベントデータを読み出してガイドした結果、前記ステップＡによって算出された当該期間の平均得点が基準値に達したときは、当該期間を除いた練習対象の中で平均得点が最も低い期間のイベントデータを読み出してガイドすることを特徴とする請求項４に記載の演奏教習処理のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演奏をガイドする演奏教習装置および演奏教習処理のプログラムに関し、特に、苦手なフレーズを重点的に練習できる演奏教習装置および演奏教習処理のプログラムに関するものである。
【背景技術】
【０００２】
電子ピアノや電子オルガンようのな電子楽器の中には、ＬＥＤ（発光ダイオード）等の発光素子によって演奏する鍵盤の位置をガイドする機能を具備したものがある。そして、ガイドした演奏を評価して、苦手なフレーズを重点的に練習するように構成されている製品もある。
ある提案の電子楽器は、メモリから読み出した楽曲を演奏する際に、１小節ごとに各楽音の自動演奏を行った後に、演奏者である生徒がその１小節の練習演奏を行って、各楽音の全ての演奏が正しい場合には次の１小節に進み、１つの楽音でも演奏が間違っている場合には、その同じ１小節を反復して練習演奏を行う構成になっている。（特許文献１参照）
別の提案の演奏指示装置は、予め記憶された押鍵指示データを供給して、操作されるべき鍵盤の位置を視覚又は聴覚に訴えて報知し、押鍵指示データと演奏データとを比較判定し、不一致だと判定した場合には、不一致と判定した箇所から所定期間までの押鍵指示データの供給を繰り返す構成になっている。（特許文献２参照）
別の提案の自動演奏装置は、メモリから読み出した曲データに合わせて鍵盤を演奏する自動演奏進行中に、リピートスイッチをオン操作してリピート再生実行を指示すると、その指示時点の小節から２小節分遡って４小節分の曲データを繰り返し再生する構成になっている。（特許文献３参照）
別の提案の演奏練習装置は、フレーズ単位で構成される曲データに基づき押鍵案内する自動演奏を行いながら、演奏者が押鍵案内される鍵を弾く演奏練習を行うと、適正タイミング域内で押鍵案内された鍵が押鍵されなかった場合に演奏ミスが生じたとして、演奏ミスが生じたフレーズの採点データを減点する。曲データの全フレーズについて採点し終えたときに、一番採点結果の悪いフレーズの先頭から演奏練習を再開させる構成になっている。（特許文献４参照）
【特許文献１】特開昭５８−３５５８３号公報
【特許文献２】特開平８−２４８９５６号公報
【特許文献３】特開２００２−２５１１８５号公報
【特許文献４】特開２００４−２０５９０６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上記特許文献１および特許文献２の場合には、１小節中の全ての楽音が正しく演奏されない限り次の小節に進むことができない。このため、将来プロの演奏者を目指している人の場合は別であるが、趣味で演奏を行うことを目指している人にとっては、一切の演奏ミスを許さない厳格な先生の指導を受けている生徒と同じように、精神的に大きな苦痛を感じることになり、却って練習意欲を喪失することにもなる。
また、特許文献３の場合には、客観的な演奏評価に基づくものでなく、演奏者が自らの判断でリピート再生の操作を行うので、特に初心者に対しては、合理的な演奏練習を期待できない。
また、特許文献４の場合には、あるフレーズで演奏ミスが生じても、とりあえず最後まで自動演奏を続行するので、特に、異なる演奏パターンの複数のフレーズで演奏ミスが生じたような場合には、プロの演奏者と違って、初心者の場合には演奏ミスをしたフレーズの印象が薄れてしまうことになる。
さらに、上記特許文献１ないし特許文献４においては、１回演奏した結果に基づいて演奏結果が悪いフレーズを抽出し、その部分を重点的に練習するようになっているが、ＬＥＤ等の発光素子によって鍵盤演奏のガイドを受けるような初心者は、演奏するたびに演奏結果が大きく変動することが多い。例えば、あるフレーズが上手く演奏できたとしても、次に演奏したときには、そのフレーズが上手く演奏できない場合もある。
要するに、初心者がプロの演奏者や熟練したアマチュアの演奏者と異なる第１の特徴は、同じ曲を安定して演奏することができないことである。また、初心者がプロの演奏者等と異なる第２の特徴は、自由度が少ない厳格な練習方法に対して、精神的に大きな苦痛を感じることである。さらに、初心者がプロの演奏者等と異なる第３の特徴は、上手く演奏できなかったフレーズをすぐに忘れ易いことである。
このため、上記特許文献を含めて、従来の演奏練習の方法では初心者に対して適切で効率的な演奏教習ができないという問題があった。
【０００４】
本発明は、このような従来の課題を解決するためのものであり、演奏するたびに演奏結果が大きく変動するような場合でも、その演奏結果を正しく評価して、演奏結果に基づいて苦手なフレーズを重点的に練習できるようにすることを目的とする。
また、本発明は、演奏練習の際に、ある程度の自由度を持たせて、演奏者に精神的な苦痛を感じさせないようにすることを目的とする。
また、本発明は、上手く演奏できなかったフレーズを演奏者が忘れないうちに、反復した練習を行うことで、苦手なフレーズを効率的に克服できるようすることを目的とする。
【課題を解決するための手段】
【０００５】
請求項１に記載の演奏教習装置は、演奏された曲を評価するために一定の期間（実施形態においては、フレーズに相当する）ごとに所定回数（実施形態においては、５回に相当する）の演奏結果の平均得点を算出する平均算出手段（実施形態においては、図１のＣＰＵ３の機能に相当する）と、平均算出手段によって算出された最も低い平均得点の期間（実施形態においては、フレーズ５に相当する）のイベントデータを読み出してガイドする練習ガイド手段（実施形態においては、図１のＣＰＵ３の機能に相当する）と、を備えた構成になっている。
【０００６】
請求項１の演奏教習装置において、請求項２に記載したように、練習ガイド手段は、平均算出手段によって算出された平均得点が基準値（実施形態においては、１００点に相当する）より低い１つ以上の期間を練習対象（実施形態においては、全てのフレーズ０〜５に相当する）として選択し、当該練習対象の中から所定の操作手段（実施形態においては、図１のスイッチ群２のアップスイッチおよびダウンスイッチに相当する）によって指定された期間のイベントデータを読み出してガイドするような構成にしてもよい。
【０００７】
請求項１の演奏教習装置において、請求項３に記載したように、練習ガイド手段は、平均算出手段によって算出された平均得点が基準値（実施形態の変形例においては、９０点に相当する）より低い１つ以上の期間を練習対象（変形例においては、フレーズ１、３、および５に相当する）として選択し、当該練習対象の中で最も低い平均得点の期間（変形例においては、フレーズ５に相当する）のイベントデータを読み出してガイドした結果、平均算出手段によって算出された当該期間の平均得点が基準値に達したときは、当該期間を除いた練習対象の中で平均得点が最も低い期間（変形例においては、フレーズ１に相当する）のイベントデータを読み出してガイドするような構成にしてもよい。
【０００８】
請求項４に記載の演奏教習処理のプログラムは、コンピュータに、演奏された曲を評価するために一定の期間（実施形態においては、フレーズに相当する）ごとに所定回数（実施形態においては、５回に相当する）の演奏結果の平均得点を算出するステップＡと、ステップＡによって算出された最も低い平均得点の期間（実施形態においては、フレーズ５に相当する）のイベントデータを読み出してガイドするステップＢと、を実行させる。
ステップＡおよびステップＢは、実施形態においては、図１のＣＰＵ３の処理に相当する。
【０００９】
請求項４の演奏教習処理のプログラムにおいて、請求項５に記載したように、ステップＢは、ステップＡによって算出された平均得点が基準値（実施形態においては、１００点に相当する）より低い１つ以上の期間を練習対象（実施形態においては、全てのフレーズ０〜５に相当する）として選択し、当該練習対象の中から所定の操作手段（実施形態においては、図１のスイッチ群２のアップスイッチおよびダウンスイッチに相当する）によって指定された期間のイベントデータを読み出してガイドするような構成にしてもよい。
【００１０】
請求項４の演奏教習処理のプログラムにおいて、請求項６に記載したように、ステップＢは、ステップＡによって算出された平均得点が基準値（実施形態の変形例においては、９０点に相当する）より低い１つ以上の期間を練習対象（変形例においては、フレーズ１、３、および５に相当する）として選択し、当該練習対象の中で最も低い平均得点の期間（変形例においては、フレーズ５に相当する）のイベントデータを読み出してガイドした結果、ステップＡによって算出された当該期間の平均得点が基準値に達したときは、当該期間を除いた練習対象の中で平均得点が最も低い期間（変形例においては、フレーズ１に相当する）のイベントデータを読み出してガイドするような構成にしてもよい。
【発明の効果】
【００１１】
本発明の演奏教習装置および演奏教習処理のプログラムによれば、演奏するたびに演奏結果が大きく変動するような場合でも、その演奏結果を正しく評価して、演奏結果に基づいて苦手なフレーズを重点的に練習できるという効果、演奏練習の際に、ある程度の自由度を持たせて、演奏者に精神的な苦痛を感じさせないようにするという効果、および、上手く演奏できなかったフレーズを演奏者が忘れないうちに、反復した練習を行うことで、苦手なフレーズを効率的に克服できるという効果が得られる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明による演奏教習装置の実施形態について、電子鍵盤楽器を例に採って、図１ないし図２３を参照して説明する。
図１は、実施形態における電子鍵盤楽器の構成を示すブロック図である。鍵盤部１は、押鍵操作に応じて音高やベロシティなどの演奏データを発生する。スイッチ群２は、パワーオン／オフスイッチ、曲セレクトスイッチ、スタート／ストップスイッチ、練習フレーズスイッチ、フレーズを選択するためのアップスイッチおよびダウンスイッチ、演奏モードスイッチ、番号スイッチなどのスイッチで構成され、操作に応じてコマンドやデータを発生する。ＣＰＵ３は、システムバス４を介して、ＬＥＤ群５、押鍵検出回路６、スイッチ検出回路７、プログラムＲＯＭ８、ワークＲＡＭ９、演奏データメモリ１０、表示部１１、割り込みコントローラ１２、タイマ１３、および楽音発生回路１４に接続されている。
【００１３】
ＬＥＤ群５は、鍵盤部１の各鍵に対応して設けられ、点灯によって押鍵すべき鍵をガイドする。押鍵検出回路６は、鍵盤部１で発生した音高やベロシティなどの演奏データを検出してＣＰＵ３に入力する。スイッチ検出回路７は、スイッチ群２の各スイッチの状態を検出してＣＰＵ３に入力する。プログラムＲＯＭ８は、ＣＰＵ３によって実行される演奏教習処理のプログラム、および、デフォルトの初期データなどを記憶している。ワークＲＡＭ９は、ＣＰＵ３によって処理される各種のデータを一時的に記憶する。
【００１４】
演奏データメモリ１０は、演奏教習用の複数の曲のイベントデータを記憶している。曲のイベントデータは、図１７に示すように、イベントの種類および次のイベントまでの時間で構成されている。イベントの種類には、ノートオン、ノートオフのほか、プログラムチェンジなどの制御データ、１小節又は２小節以上のフレーズの区切りであるフレーズマーク、曲の終了であるエンドマークなどがある。なお、この実施形態においては、練習曲は６個のフレーズ（フレーズ番号０〜５）で構成されている。
【００１５】
表示部１１は、ＬＣＤ（液晶表示デバイス）で構成され、演奏教習用の曲名および曲番号のリスト、セレクトされた曲の楽譜、その曲の演奏上の注意事項などが適宜表示される。タイマ１３は、一定時間ごとに割り込み信号を発生する。割り込みコントローラ１２は、外部からの割り込み信号やタイマ１３からの割り込み信号を優先順位に基づいて制御する。
楽音発生回路１４は、ディジタル／アナログ変換回路（ＤＡＣ）１５、増幅回路１６を介してスピーカ１７に接続され、ＣＰＵ３の発音処理および楽音データに応じて楽音波形データを生成してスピーカ１７から発音させ、ＣＰＵ３の消音処理に応じて発音を停止する。
【００１６】
次に、図１の電子鍵盤楽器における演奏処理の動作について、ＣＰＵ３によって実行されるフローチャート、および、演奏データメモリ１０の曲のイベントデータ（図１７）、ワークＲＡＭ９のデータ（図１８〜図２３）に基づいて説明する。図１８は、ワークＲＡＭ９のレジスタおよびフラグの内容を示す図である。演奏データメモリ１０の曲は、メロディパート、リズムパート、ベースパートなどの複数のパートで構成されている。すなわち、図１９に示すように、曲番号（曲０、曲１、…）ごとにパート０、パート１、…パートＮおよび曲のテンポで構成されている。
したがって、図１８に示すようにワークＲＡＭ９には以下のエリアが設けられている。各パートの現在アドレス、次のイベントまでの時間、経過時間をストアするレジスタがある。また、演奏練習用に選択されている現在の曲番号、現在のテンポ、テンポカウンタのレジスタがある。また、ガイド中のパート番号、ガイド中のパートのアドレス、ガイド中のパート以外のアドレスを退避するためのレジスタがある。また、次のイベントのセットを要求するフラグであるＮＥＸＴノートセットＲＥＱ、フレーズ練習を要求するフラグであるフレーズ練習ＲＥＱ、フレーズ練習中であることを示すフラグであるフレーズ練習中ＦＬＧがある。また、図２０に示すように、和音を考慮して、最大４個までのＮＥＸＴノート［０］〜［３］および現在ノート［０］〜［３］のレジスタがある。また、１曲を通してストアするレジスタのデータとして、ガイドパートのノートオンイベントをカウントする１曲通しノートカウント、ガイドパートの演奏ミスをカウントする１曲通しミスカウント、演奏ごとの評価を累計する１曲通し累計得点および平均する１曲通し平均得点がある。また、各フレーズごとにストアするレジスタのデータとして、現在フレーズノートカウント、現在フレーズミスカウント、現在フレーズ累計得点、現在フレーズ平均得点がある。また、一定時間ごとのタイマ割り込み信号に応じてインクリメントされるＮＥＸＴノートタイマ、現在ノートタイマがある。その他各種フラグがワークＲＡＭ９に設けられている。これらのレジスタおよびフラグの詳細な用途については以下の動作説明の中で順次述べる。
【００１７】
図２は、メインルーチンのフローチャートである。まず、ワークＲＡＭ９のレジスタやフラグ、割り込みコントローラ１２、タイマ１３、表示部１１、その他の各種初期化を行って（ステップＳＡ１）、スイッチ検出回路５によりスイッチ群２の状態を検出する（ステップＳＡ２）。そして、スイッチ群２の中のパワーオフスイッチが操作されたか否かを判別し（ステップＳＡ３）、このスイッチが操作されない場合には、他のスイッチ処理（ステップＳＡ４）、曲データ処理（ステップＳＡ５）、鍵盤処理（ステップＳＡ６）、ＮＥＸＴノートセット処理（ステップＳＡ７）を実行し、ステップＳＡ２に移行してスイッチ群２の状態を検出する処理を繰り返す。ステップＳＡ３においてパワーオフスイッチの操作を検出したときは、ＬＥＤ消灯や表示消去などのパワーオフ処理を行って（ステップＳＡ８）、動作を終了する。
【００１８】
タイマ１３からは一定時間、例えば、９６分音符の時間長ごとのタイマ割り込み信号が出力される。図３は、そのタイマインタラプトのフローチャートである。演奏が停止中であるか否かを判別し（ステップＳＢ１）、演奏停止中の場合はメインルーチンに戻るが、演奏中である場合には、テンポカウンタをインクリメントする（ステップＳＢ２）。そして、テンポカウントが曲のテンポに対応した値に達したか否かを判別する（ステップＳＢ３）。この値に達しない場合にはメインルーチンに戻るが、この値に達したときは、テンポカウントを０にクリアする（ステップＳＢ４）。
【００１９】
次に、現在の演奏モードがガイドモードであるか否かを判別する（ステップＳＢ５）。ガイドモードである場合には、ＮＥＸＴノートタイマの値が曲の終了を示す最大値（７ｆｆｆ）であるか否かを判別し（ステップＳＢ６）、最大値でない場合にはＮＥＸＴノートタイマの値をインクリメントする（ステップＳＢ７）。また、現在ノートタイマの値が最大値（７ｆｆｆ）であるか否かを判別し（ステップＳＢ８）、最大値でない場合には現在ノートタイマの値をインクリメントする（ステップＳＢ９）。
ＮＥＸＴノートタイマおよび現在ノートタイマの値をインクリメントした後、又は、ステップＳＢ５において演奏モードがガイドモードでない場合には、各パートの経過時間をインクリメントする（ステップＳＢ１０）。そして、メインルーチンに戻る。
【００２０】
図４は、メインルーチンにおけるスイッチ処理のフローチャートである。このフローチャートでは、オンされたスイッチに対応する処理を行う。曲セレクトスイッチがオンされたか否かを判別し（ステップＳＣ１）、このスイッチがオンされたときは曲セレクト処理を実行する（ステップＳＣ２）。スタートスイッチがオンされたか否かを判別し（ステップＳＣ３）、このスイッチがオンされたときは曲スタート処理を実行する（ステップＳＣ４）。練習フレーズスイッチがオンされたか否かを判別し（ステップＳＣ５）、このスイッチがオンされたときは練習フレーズ処理を実行する（ステップＳＣ６）。他のスイッチがオンされたか否かを判別し（ステップＳＣ７）、他のスイッチがオンされたときは、そのスイッチに対応する処理を実行する（ステップＳＣ８）。オンされたスイッチに対応する処理を実行した後は、メインルーチンに戻る。
【００２１】
図５は、図４のスイッチ処理における曲セレクト処理のフローチャートである。また、図２３は、フレーズ平均得点からフレーズ順位を作成する過程を示す図である。曲セレクトスイッチのオン操作に続いて番号スイッチがオンされると、その曲番号を現在曲番号のレジスタにセットし（ステップＳＤ１）、曲のテンポを現在テンポのレジスタにセットする（ステップＳＤ２）。また、各パートのアドレスをセットする（ステップＳＤ３）。このときのアドレスのセットは、曲スタートに備えて各パートのアドレスを指定するものである。次に、図１８の練習回数番号のレジスタに初期値（−１）をセットし（ステップＳＤ４）、図２３に示すフレーズ得点ＢＵＦ（バッファ）の全てに、ｆｆ（ｈ）＝２５５をセットするオールクリア処理を行う（ステップＳＤ５）。次に、図１８のフレーズ順位番号のレジスタに０をセットする（ステップＳＤ６）。そして、図４のスイッチ処理に戻る。
【００２２】
なお、フレーズ得点ＢＵＦは、図２３に示すように、フレーズ練習番号（０〜４）およびフレーズ番号（０〜７）の配列で構成されている。フレーズ得点は１００点満点であり、図２３では、演奏練習の結果として１００点以下の得点がストアされているが、上記したように、演奏練習が開始する前においては、図５の曲セレクト処理のステップＳＤ５の初期設定で、全てのフレーズ得点ＢＵＦに２５５がストアされる。この場合において、上記したように、練習曲は６個のフレーズ（フレーズ番号０〜５）で構成されているので、図２３においても、フレーズｍａｘ番号＝５を超えたフレーズ番号６、７の配列には、初期値である２５５の値がそのまま残っている。
【００２３】
図６は、スイッチ処理における曲スタート処理のフローチャートである。この処理では、図１８に示したワークＲＡＭの各レジスタに値をセットする。テンポカウンタを０にクリアし（ステップＳＥ１）、各パートの現在アドレスに各パートの先頭アドレスをストアする（ステップＳＥ２）。また、各パートの次のイベントまでの時間を０にクリアし（ステップＳＥ３）、各パートの経過時間を０にクリアする（ステップＳＥ４）。次に、演奏モードがガイドモードであるか否かを判別する（ステップＳＥ５）。ガイドモードでない場合、例えば、マニュアル演奏や模範の自動演奏の場合には図４のスイッチ処理に戻る。
【００２４】
演奏モードがガイドモードである場合には、練習回数番号が４であるか否かを判別する（ステップＳＥ６）。練習回数番号の初期値は図５のステップＳＤ４で（−１）にセットされているので、最初はステップＳＥ６からステップＳＥ７に移行して、練習回数番号を１だけインクリメントして０にセットする。次に、現在フレーズ番号を０にセットする（ステップＳＥ８）。すなわち、曲の最初のフレーズを指定する。次に、１曲通し累計得点を０にクリアし（ステップＳＥ９）、１曲通し平均得点を０にクリアし（ステップＳＥ１０）、１曲通しノートカウントを０にクリアし（ステップＳＥ１１）、１曲通しミスカウントを０にクリアする（ステップＳＥ１２）。さらに、現在フレーズの累計得点を０にクリアし（ステップＳＥ１３）、現在フレーズの平均得点を０にクリアし（ステップＳＥ１４）、現在フレーズのノートカウントを０にクリアし（ステップＳＥ１５）、現在フレーズのミスカウントを０にクリアする（ステップＳＥ１６）。さらに、ＮＥＸＴノート［０］〜［３］を最大値（ｆｆ＝２５５）にセットし（ステップＳＥ１７）、ＮＥＸＴノートセットＲＥＱをオンにして（ステップＳＥ１８）、フレーズ練習中ＦＬＧをオンにする（ステップＳＥ１６）。そして、メインルーチンに戻る。
【００２５】
図２３に示すように、フレーズ得点ＢＵＦのレジスタは、練習回数番号（０〜４）とフレーズ番号（Ｆ＝０〜５）に対応した配列になっている。
フレーズ得点ＢＵＦ［０］［０〜５］
フレーズ得点ＢＵＦ［１］［０〜５］
フレーズ得点ＢＵＦ［２］［０〜５］
フレーズ得点ＢＵＦ［３］［０〜５］
フレーズ得点ＢＵＦ［４］［０〜５］
したがって、練習が開始した後に１回の練習（練習回数番号＝０）、２回の練習（練習回数番号＝１）、……のように、練習ごとに対応するレジスタに得点がストアされ、練習回数が５回（練習回数番号＝４）になると、全てのレジスタに得点がストアされる。このため、図６のステップＳＥ６において、練習回数番号が４になったときは、次の練習のために、最も古いレジスタであるフレーズ得点ＢＵＦ［０］［０〜５］の得点を消去して、最新のレジスタであるフレーズ得点ＢＵＦ［４］［０〜５］のレジスタを空ける。
【００２６】
すなわち、フレーズ得点ＢＵＦ［１］［０〜５］のデータをフレーズ得点ＢＵＦ［０］［０〜５］に移動し（ステップＳＥ２０）、フレーズ得点ＢＵＦ［２］［０〜５］のデータをフレーズ得点ＢＵＦ［１］［０〜５］に移動し（ステップＳＥ２１）、フレーズ得点ＢＵＦ［３］［０〜５］のデータをフレーズ得点ＢＵＦ［２］［０〜５］に移動し（ステップＳＥ２２）、フレーズ得点ＢＵＦ［４］［０〜５］のデータをフレーズ得点ＢＵＦ［３］［０〜５］に移動する（ステップＳＥ２３）。この後は、ステップＳＥ９に移行して、ステップＳＥ１９までの処理を実行する。
【００２７】
図７は、スイッチ処理における練習フレーズ処理のフローチャートである。この処理では、５回の演奏を行った結果、その平均得点が最も低いフレーズ、すなわち、フレーズ順位＝０のフレーズを練習する。しかし、平均得点が最も低いフレーズを練習しても、その平均得点がよくならず、練習後も相変わらず最低の平均得点である場合には、演奏者は何回も何回もそのフレーズだけを練習することになる。この結果、演奏者は精神的に大きな苦痛を感じるようになってしまう。そこで、この実施形態においては、演奏者にある程度の自由度を持たせて、演奏者に精神的な苦痛を感じさせないような構成になっている。
【００２８】
まず、フレーズ練習中ＦＬＧをオンにする（ステップＳＦ１）。この後に、フレーズを変更するアップスイッチ又はダウンスイッチがオンされたか否かを判別する。アップスイッチがオンされたか否かを判別し（ステップＳＦ２）、このスイッチがオンされたときは、フレーズ練習中ＦＬＧがオンであるか否かを判別する（ステップＳＦ３）。このフラグがオンである場合には、フレーズ順位番号がｍａｘよりも小さいか否かを判別する（ステップＳＦ４）。フレーズ順位番号がｍａｘよりも小さい場合には、フレーズ順位番号をインクリメントする（ステップＳＦ５）。フレーズ順位番号がｍａｘである場合には、それより大きいフレーズ順位番号がないのでインクリメントはしない。
一方、ダウンスイッチがオンされたか否かを判別し（ステップＳＦ６）、このスイッチがオンされたときは、フレーズ練習中ＦＬＧがオンであるか否かを判別する（ステップＳＦ７）。このフラグがオンである場合には、フレーズ順位番号が０よりも大きいか否かを判別する（ステップＳＦ８）。フレーズ順位番号が０よりも大きい場合には、フレーズ順位番号をデクリメントする（ステップＳＦ９）。フレーズ番号が０である場合には、それより小さいフレーズ順位番号がないのでデクリメントはしない。
【００２９】
フレーズ順位番号をインクリメント若しくはデクリメントした後、又は、フレーズ順位番号が０で最も低い平均得点のフレーズ順位番号である場合には、確定スイッチがオンされたか否かを判別する（ステップＳＦ１０）。確定スイッチがオンでない場合には、ステップＳＦ２に移行して、アップスイッチ又はダウンスイッチのオンを判別する。なお、アップスイッチ又はダウンスイッチがオンされた場合でも、その間にフレーズＦＬＧがオフにされた場合には、他の処理を行う（ステップＳＦ１１）。例えば、曲番号やテンポ値などを変更する。
【００３０】
確定スイッチがオンされたときは、そのときに指定されているフレーズ順位ＢＵＦのフレーズ番号を、現在フレーズ番号にセットする（ステップＳＦ１２）。次に、テンポカウンタを０にクリアし（ステップＳＦ１３）、各パートの現在アドレスに現在フレーズ番号の各パートの先頭アドレスをセットする（ステップＳＦ１４）。また、次イベントまでの時間を０にセットし（ステップＳＦ１５）、各パートの経過時間を０にセットし（ステップＳＦ１６）、現在フレーズの累計得点を０にクリアし（ステップＳＦ１７）、現在フレーズの平均得点を０にクリアする（ステップＳＦ１８）。さらに、現在フレーズのノートカウントを０にクリアし（ステップＳＦ１９）、現在フレーズのミスカウントを０にクリアし（ステップＳＦ２０）、ＮＥＸＴノート［０］〜［３］にｆｆ（＝２５５）をセットし（ステップＳＦ２１）、ＮＥＸＴノートＲＥＱをオンにセットする（ステップＳＦ２２）。そして、図４のスイッチ処理に戻る。
【００３１】
図８は、メインルーチンにおける曲データ処理のフローチャートである。最初にパート番号０を指定する（ステップＳＧ１）。そして、パート番号を順に指定しながら各パートの処理を実行する。全部のパートが終了したか否かを判別し（ステップＳＧ２）、全部のパートが終了していない場合には、指定パートのアドレスを読み込み（ステップＳＧ３）、経過時間が次のイベントまでの時間に達したか否かを判別する（ステップＳＧ４）。その時間に達していない場合には、経過時間から次のイベントまでの時間を減算した時間を経過時間として更新する（ステップＳＧ５）。そして、イベント処理を実行する（ステップＳＧ６）。
【００３２】
図９ないし図１２は、イベント処理のフローチャートである。図８のステップＳＧ３において読み込んだパートアドレスのイベントが曲の最後のエンドマークであるか否かを判別し（ステップＳＨ１）、エンドマークでない場合には、イベントがノートオンであるか否かを判別する（ステップＳＨ２）。ノートオンである場合には、指定しているパートがガイド中のパートであるか否かを判別する（ステップＳＨ３）。ガイド中のパートである場合には、現在の演奏モードがガイドモードであるか否かを判別する（ステップＳＨ４）。ガイドモードである場合には、ＮＥＸＴノートセットＲＥＱをオンにして（ステップＳＨ５）、ノートオンをセットし、ＬＣＤにノートオンイベントを表示し、ノートに対応する鍵盤の位置のＬＥＤを点灯する（ステップＳＨ６）。
【００３３】
一方、現在のモードがガイドモードでない場合には、ＮＥＸＴノートセットＲＥＱをオフの状態で、ノートオンをセットし、ＬＣＤにノートオンイベントを表示し、ノートに対応する鍵盤の位置のＬＥＤを点灯する（ステップＳＨ７）。この場合には、演奏データメモリ１０から読み出したノートオンイベントに対して押鍵すべき鍵をＬＥＤの点灯でガイドするが、演奏に対する評価は行わない。この後、又は、ステップＳＨ３において、指定しているパートがガイド中のパートでない場合には、発音処理を行う（ステップＳＨ８）。
【００３４】
ステップＳＨ２において、読み込んだパートアドレスのイベントがノートオンでない場合には、そのイベントがノートオフであるか否かを判別する（ステップＳＨ９）。ノートオフである場合には、指定しているパートがガイド中のパートであるか否かを判別する（ステップＳＨ１０）。ガイド中のパートである場合には、現在の演奏モードがガイドモードであるか否かを判別する（ステップＳＨ１１）。ガイドモードである場合には、ノートオフをセットし、ＬＣＤにノートオフイベントを表示し、ノートに対応する鍵盤の位置のＬＥＤを消灯する（ステップＳＨ１２）。
【００３５】
一方、現在のモードがガイドモードでない場合には、ノートオフをセットし、ＬＣＤにノートオフイベントを表示し、ノートに対応する鍵盤の位置のＬＥＤを消灯する（ステップＳＨ１３）。この後、又は、ステップＳＨ１０において、指定しているパートがガイド中のパートでない場合には、消音処理を行う（ステップＳＨ１４）。
【００３６】
ステップＳＨ９において、イベントがノートオフでない場合には、図１０のフローチャートにおいて、そのイベントがフレーズマークであるか否かを判別する（ステップＳＨ１５）。フレーズマークである場合には、フレーズ練習中ＦＬＧがオンであるか否かを判別し（ステップＳＨ１６）、フレーズ練習中ＦＬＧがオフである場合には、フレーズ得点ＢＵＦ［練習回数番号］［現在フレーズ番号］に現在フレーズの平均得点をストア判別する（ステップＳＨ１７）。そして、現在フレーズ番号をインクリメントする（ステップＳＨ１８）。この後、現在フレーズの累計得点を０にクリアし（ステップＳＨ１９）、現在フレーズの平均得点を０にクリアし（ステップＳＨ２０）、現在フレーズのノートカウントを０にクリアし（ステップＳＨ２１）、現在フレーズのミスカウントを０にクリアし（ステップＳＨ２２）、ＮＥＸＴノート［０］〜［３］を最大値（ｆｆ＝２５５）にセットする（ステップＳＨ２３）。
一方、ステップＳＨ１５において、イベントがフレーズマークでない場合には、その他のイベント処理を行う（ステップＳＨ２４）。例えば、休符の処理やコントロールチェンジ処理などを行う。ステップＳＨ２４における処理、又は、ステップＳＨ２３においてＮＥＸＴノート［０］〜［３］をｆｆにセットした後は、曲データ処理に戻る。
【００３７】
図９のステップＳＨ１において、イベントデータがエンドマークである場合、すなわち、曲の最後に達したときは、図１１のフローチャートにおいて、フレーズ練習中ＦＬＧがオンであるか否かを判別する（ステップＳＨ２５）。フレーズ練習中ＦＬＧがオフである場合には、該当するパートの終了処理を行う（ステップＳＨ２６）。そして、ノータッチ調査を実行する（ステップＳＨ２７）。ノータッチ調査については、後で詳細に説明する。次に、各フレーズの平均得点を計算して、計算結果を表示する（ステップＳＨ２８）。また、フレーズ数情報として、フレーズｍａｘ番号に現在フレーズ番号をセットする（ステップＳＨ２９）。すなわち、この実施形態においては、曲が６個のフレーズ（フレーズ０〜５）になっているので、図２３に示すように、フレーズｍａｘ番号＝５とする。次に、練習回数番号０〜４までの５回のフレーズ練習の平均得点を算出して、フレーズ平均得点ＢＵＦ［フレーズ番号］にストアする（ステップＳＨ３０）。すなわち、図２３において、フレーズ得点ＢＵＦの各フレーズ番号の得点を平均して、フレーズ平均得点ＢＵＦに各フレーズ番号の平均得点をストアする。
【００３８】
一方、ステップＳＨ２５において、フレーズ練習中ＦＬＧがオンである場合、又は、図１０のステップＳＨ１６において、フレーズ練習中ＦＬＧがオンである場合には、ノータッチ調査を実行する（ステップＳＨ３１）。次に、平均得点を計算して表示し（ステップＳＨ３２）、全てのノートをオフにし、ＬＣＤに現在フレーズを表示し、ＬＥＤを消灯する（ステップＳＨ３３）。そして、現在フレーズの平均得点が所定値以上であるか否かを判別する（ステップＳＨ３４）。現在フレーズの平均得点が所定値に達しない場合には、図８の曲データ処理に戻る。
【００３９】
図１１のステップＳＨ３４において、現在フレーズの平均得点が所定値以上である場合には、フレーズ順位番号を上げるために、フレーズ順位番号がフレーズｍａｘ番号よりも小さいか否かを判別する（ステップＳＨ３５）。フレーズ順位番号がフレーズｍａｘ番号よりも小さい場合には、フレーズ順位番号をインクリメントする（ステップＳＨ３６）。次に、フレーズ順位ＢＵＦ［フレーズ順位番号］のフレーズを現在フレーズ番号にセットする（ステップＳＨ３７）。また、各パートの現在アドレスにフレーズの先頭アドレスをセットする（ステップＳＨ３８）。さらに、ＮＥＸＴノートセットＲＥＱをオンにする（ステップＳＨ３９）。ステップＳＨ３５において、フレーズ順位番号がフレーズｍａｘ番号で最高の順位である場合には、それ以上に上げることはできないので、該当するパートの終了処理を行う（ステップＳＨ４０）。この処理の後、又は、ステップＳＨ３９においてＮＥＸＴノートセットＲＥＱをオンにした後は、図８の曲データ処理に戻る。
【００４０】
図１１のステップＳＨ３０において、フレーズ平均得点ＢＵＦに平均得点をストアした後は、図１２のフローチャートにおいて、ｕｓｅｄｉｎｄｅｘｂｕｆに０をセットする（ステップＳＨ４１）。ｕｓｅｄｉｎｄｅｘｂｕｆは、図２３に示す８ビット構成のバッファである。各ビットはフレーズ番号に対応している。すなわち、最下位ビットはフレーズ番号０に対応し、最上位ビットはフレーズ番号７に対応している。ただし、この実施形態においては、曲は６個のフレーズ構成になっているので、フレーズ番号は０〜５であり、ｕｓｅｄｉｎｄｅｘｂｕｆの下位６ビットを使用する。すなわち、図２３の上の図におけるフレーズ平均得点ＢＵＦにストアした各フレーズ番号の平均得点に基づいて、図２３の下の図に示すフレーズ順位ＢＵＦにフレーズ順位をストアするためのフレーズ順位生成過程を実行する。
【００４１】
このフレーズ順位生成過程では、フレーズ順位番号を初期値である０にセットして（ステップＳＨ４２）、フレーズ順位番号をインクリメントしながらステップＳＨ４３からステップＳＨ５４の第１のループ処理を実行して、各フレーズ番号の順位付けを行う。第１のループ処理の最初に、フレーズ順位番号がフレーズｍａｘ番号より大きいか否かを判別する（ステップＳＨ４３）。フレーズ順位番号がフレーズｍａｘ番号より大きい場合には、フレーズ順位番号を指定する変数ｉｎｄｅｘを０にセットし（ステップＳＨ４４）、平均得点を表わす変数ｔｍｐに１０１をストアする（ステップＳＨ４５）。平均得点の最大値は１００であるので、最大値に１を加えた値である１０１を初期値としてｔｍｐにストアする。そして、ｉｎｄｅｘの値をインクリメントしながらステップＳＨ４６からステップＳＨ５１までの第２のループ処理を実行する。
【００４２】
第２のループ処理の最初に、ｉｎｄｅｘの値がフレーズｍａｘ番号である５よりも大きいか否かを判別する（ステップＳＨ４６）。最初は、ｉｎｄｅｘの値が０であるので、ステップＳＨ４７に移行して、ｕｓｅｄｉｎｄｅｘｂｕｆのｂｉｔ  ｉｎｄｅｘが０であるか否かを判別する。すなわち、ｕｓｅｄｉｎｄｅｘｂｕｆの最下位ビットが０であるか否かを判別する。最初は全てのビットが０であるので、ステップＳＨ４８に移行して、ｉｎｄｅｘ（この場合は０）で指定するフレーズ平均得点ＢＵＦの平均得点がｔｍｐの値より小さいか否かを判別する。図２３において、フレーズ平均得点ＢＵＦ［０］の平均得点は９０であるので、ｔｍｐの１０１より小さい。この場合には、ｔｍｐにフレーズ平均得点ＢＵＦ［０］の平均得点９０をストアする（ステップＳＨ４９）。次に、変数ｆｉｎｄｉｎｄｅｘにｉｎｄｅｘの値をセットする（ステップＳＨ５０）。この後、又は、ステップＳＨ４８において、フレーズ平均得点ＢＵＦ［ｉｎｄｅｘ］の平均得点がｔｍｐの値以上である場合、若しくは、ステップＳＨ４７において、ｕｓｅｄｉｎｄｅｘｂｕｆのｂｉｔ  ｉｎｄｅｘが１である場合には、ｉｎｄｅｘの値をインクリメントして（ステップＳＨ５１）、第２のループ処理の最初すなわちステップＳＨ４６に戻る。
【００４３】
すなわち、ｉｎｄｅｘの値をインクリメントしながら、ループ処理を繰り返して、フレーズ平均得点ＢＵＦ［ｉｎｄｅｘ］の平均得点の中で最も低い平均得点のものを捜す。ステップＳＨ４６において、ｉｎｄｅｘの値がフレーズｍａｘ番号の値（５）よりも大きい値になったとき、すなわち、全てのフレーズ平均得点ＢＵＦ［  ］の検索が終了したときは、フレーズ順位ＢＵＦ［フレーズ順位番号］にｆｉｎｄｉｎｄｅｘの値をセットし（ステップＳＨ５２）、ｕｓｅｄｉｎｄｅｘｂｕｆのｂｉｔ  ｉｎｄｅｘをオン（１）にセットする（ステップＳＨ５３）。そして、フレーズ順位番号をインクリメントし（ステップＳＨ５４）、第１のループ処理の最初すなわちステップＳＨ４３に移行する。
【００４４】
フレーズ順位番号＝０の場合には、フレーズ平均得点ＢＵＦ［ｉｎｄｅｘ］の平均得点の中で最も低い平均得点は、図２３に示すように、フレーズ番号５の７０である。したがって、ｔｍｐにはフレーズ平均得点ＢＵＦ［５］の７０がストアされる。また、ｆｉｎｄｉｎｄｅｘの値も５であるので、ステップＳＨ５２において、フレーズ順位ＢＵＦ［０］＝５となり、ステップＳＨ５３において、ｕｓｅｄｉｎｄｅｘｂｕｆのビット５（下位から６番目のビット）を１にセットする。この結果、最も低い平均得点のフレーズ番号５が決定する。
【００４５】
ステップＳＨ５４において、フレーズ順位番号が１にインクリメントされた後は、ステップＳＨ４３からステップＳＨ５４の第１のループ処理を実行すると、ステップＳＨ４７において、ｕｓｅｄｉｎｄｅｘｂｕｆのｂｉｔ  ｉｎｄｅｘが既に１にセットされているフレーズ平均得点ＢＵＦ［ｉｎｄｅｘ］は、フレーズ順位生成過程から除外される。すなわち、この場合にはフレーズ平均得点ＢＵＦ［５］のフレーズ番号５は除外され、残りの４個のフレーズ番号の中で最も低い平均得点のフレーズ番号が検索される。
フレーズ順位番号＝１の場合には、残りのフレーズ平均得点ＢＵＦ［ｉｎｄｅｘ］の平均得点の中で最も低い平均得点は、図２３に示すように、フレーズ番号１の８５である。したがって、ｔｍｐにはフレーズ平均得点ＢＵＦ［１］の８５がストアされる。また、ステップＳＨ５２において、フレーズ順位ＢＵＦ［１］＝１となり、ステップＳＨ５３において、ｕｓｅｄｉｎｄｅｘｂｕｆのビット１（下位から２番目のビット）を１にセットする。この結果、２番目に低い平均得点のフレーズ番号１が決定する。
このようにして、フレーズ順位番号をインクリメントしながら、ステップＳＨ４３からステップＳＨ５４の第１のループ処理におけるフレーズ順位生成過程を実行すると、より低い平均得点のフレーズ番号が決定されていく。この結果、３番目、４番目、および５番目に低い平均得点のフレーズ番号が決定される。
【００４６】
ステップＳＨ４３において、フレーズ順位番号がフレーズｍａｘ番号よりも大きくなったとき、すなわち、ステップＳＨ５４でインクリメントされたフレーズ順位番号が６になって、フレーズｍａｘ番号５を超えたときは、最も高い平均得点のフレーズ番号４が決定し、図２３の下の図に示すように、全てのフレーズ順位番号が確定し、ｕｓｅｄｉｎｄｅｘｂｕｆの下位６ビットが全て１にセットされる。この場合には、ステップＳＨ４３からステップＳＨ５５に移行して、フレーズ順位番号に０がセットされる。この後は、イベント処理を終了して図８の曲データ処理に戻る。したがって、練習フレーズスイッチがオンされて、図７の練習フレーズ処理を実行する場合において、アップスイッチもダウンスイッチもオンされない場合には、最も低い平均得点のフレーズ順位ＢＵＦ［０］のフレーズ番号が、ステップＳＦ１２において、練習対象のフレーズ番号として現在フレーズ番号にセットされる。
【００４７】
イベント処理が終了したときは、図８のフローチャートにおいて、次のイベントまでの時間をセットし（ステップＳＧ７）、パートアドレスを更新する（ステップＳＧ８）。そして、ステップＳＧ３からの処理を繰り返す。ステップＳＧ４において、経過時間が次のイベントまでの時間に達したときは、パート番号を更新して（ステップＳＧ９）、ステップＳＧ２に移行して全部のパート処理が終了したか否かを判別する。全部のパートが終了していない場合には、ステップＳＧ３以下の上記処理を繰り返すが、全部のパート処理が終了したときはメインルーチンに戻る。
【００４８】
図１３は、図２のメインルーチンにおける鍵盤処理のフローチャートである。押鍵がされたか否かを判別し（ステップＳＪ１）、押鍵がされない場合にはメインルーチンに戻るが、押鍵がされたときは、現在の演奏モードがガイドモードであるか否かを判別する（ステップＳＪ２）。ガイドモードである場合には、１曲通しノートカウントをインクリメントし（ステップＳＪ３）、現在フレーズのノートカウントをインクリメントする（ステップＳＪ４）。次に、押鍵された鍵が現在ノートのいずれかと一致するか否かを判別する（ステップＳＪ５）。
【００４９】
ワークＲＡＭのレジスタにストアする最大４個の現在ノートおよび次に押鍵すべきＮＥＸＴノートは、図２１に示すように、８ビットで構成されている。８ビットの最上位ビットすなわちＭＳＢは、押鍵されたときに０から１に変化するビットであり、下位７ビットがノートの音高を表わしている。また、現在ノートおよびＮＥＸＴノートの個数が４個に満たない場合には、８ビット全てが１（ｆｆ）で表わされる。図２１の例では、Ｃ４、Ｅ４、Ｇ４の音高のノートがレジスタにストアされている。
【００５０】
図１３のステップＳＪ５において、押鍵された鍵が現在ノートのいずれかと一致したときは、一致した現在ノートのＭＳＢを１（オン）にセットする（ステップＳＪ６）。したがって、同じ鍵を２度押鍵した場合には、２度目の押鍵は無視される。図２１において、Ｅ４の鍵が押鍵されたときは、Ｅ４のノートのＭＳＢを１にし、Ｃ４の鍵が押鍵されたときは、Ｃ４のノートのＭＳＢを１にし、Ｇ４の鍵が押鍵されたときは、Ｇ４のノートのＭＳＢを１にする。次に、現在ノートタイマの値に基づいて得点（図２１の＊）を決定する（ステップＳＪ７）。すなわち、ノートオンイベントの押鍵タイミングと現在ノートタイマとの時間差すなわちタイミングずれに基づいて得点を決定する。ただし、曲のテンポに応じてタイミングずれは相対的に変化するので、現在のテンポに対応したタイミングずれに対応して得点を決定する。図２２は、タイミングずれに対応する得点を表わす図である。この例のように、一拍が４分音符のテンポである４８の場合には、６未満、１２未満、２８未満、２４未満、および２４以上のタイミングずれに対応して、１０、４、２、１、０の得点となる。
【００５１】
図１３のステップＳＪ５において、押鍵された鍵が現在ノートのいずれとも一致しない場合には、次に押鍵すべきＮＥＸＴノートのいずれかと一致するか否かを判別する（ステップＳＪ８）。いずれかのＮＥＸＴノートと一致したときは、一致したＮＥＸＴノートのＭＳＢを１にセットして（ステップＳＪ９）、ＮＥＸＴノートタイマの値に基づいて得点を決定する（ステップＳＪ１０）。ステップＳＪ７又はステップＳＪ１０において、現在ノートタイマの値又はＮＥＸＴノートタイマの値に基づいて得点を決定した後は、その決定した得点を現在フレーズの累計得点に加算し（ステップＳＪ１１）、現在フレーズの平均得点を計算して、計算結果を表示する（ステップＳＪ１２）。次に、フレーズ練習中ＦＬＧがオンであるか否かを判別する（ステップＳＪ１３）。フレーズ練習中ＦＬＧがオンである場合には、１曲通しの累計得点に決定した得点を加算し（ステップＳＪ１４）、１曲通しの平均得点を計算し、計算結果を表示する（ステップＳＪ１５）。
【００５２】
ステップＳＪ８において、押鍵された鍵がＮＥＸＴノートのいずれとも一致しない場合には、現在フレーズのミスカウントをインクリメントし（ステップＳＪ１６）、現在フレーズの平均得点を計算し、計算結果を表示する（ステップＳＪ１７）。そして、フレーズ練習中ＦＬＧがオンであるか否かを判別する（ステップＳＪ１８）。フレーズ練習中ＦＬＧがオンである場合には、１曲通しミスカウントをインクリメントし（ステップＳＪ１９）、１曲通し平均得点を計算し、計算結果を表示する（ステップＳＪ２０）。なお、このような演奏ミスの場合における平均得点の計算では、累計得点が加算されないので、平均得点が減点されることになる。
ステップＳＪ１５若しくはステップＳＪ２０の平均得点の計算および計算結果の表示処理の後、又は、ステップＳＪ１３若しくはステップＳＪ１８において、フレーズ練習中ＦＬＧがオフである場合には、発音処理を実行する（ステップＳＪ２１）。そして、メインルーチンに戻る。
【００５３】
図１４および図１５は、図２のメインルーチンにおけるＮＥＸＴノートセット処理のフローチャートである。図１４において、ＮＥＸＴノートセットＲＥＱがオンであるか否かを判別し（ステップＳＫ１）、ＮＥＸＴノートセットＲＥＱがオフの場合にはメインルーチンに戻るが、ＮＥＸＴノートセットＲＥＱがオンの場合には、これをオフにリセットして（ステップＳＫ２）、押鍵すべきノートオンイベントが押鍵されたか否かを調査するノータッチ調査を実行する（ステップＳＫ３）。
【００５４】
図１６は、ステップＳＫ３、並びに、図１１のイベント処理におけるステップＳＨ２７およびステップＳＨ３１のノータッチ調査のフローチャートである。まず、最大４個の現在ノートの１つを指定する変数ｉｎｄｅｘを０にセットして（ステップＳＬ１）、ｉｎｄｅｘの値をインクリメントしながら、以下のループ処理を実行する。すなわち、ｉｎｄｅｘで指定された現在ノートのＭＳＢが０（オフ）であるか１（オン）であるかを判別し（ステップＳＬ２）、現在ノートのＭＳＢが０である場合には、現在フレーズのミスカウントをインクリメントする（ステップＳＬ３）。次に、フレーズ練習中ＦＬＧがオンであるか否かを判別し（ステップＳＬ４）、フレーズ練習中ＦＬＧがオフの場合には、１曲通しミスカウントをインクリメントする（ステップＳＬ５）。
【００５５】
この後、又は、ステップＳＬ４においてフレーズ練習中ＦＬＧが１の場合、若しくは、ステップＳＬ２において現在ノートのＭＳＢが１である場合には、ｉｎｄｅｘの値をインクリメントする（ステップＳＬ６）。このときｉｎｄｅｘの値が４になったか否かを判別し（ステップＳＬ７）、ｉｎｄｅｘの値が３以下の場合にはステップＳＬ２に移行してステップＳＬ７までのループ処理を繰り返す。ｉｎｄｅｘの値が４になったときは、このノータッチ調査を終了して、図１１のイベント処理、又は、図１４のＮＥＸＴノートセットの処理に戻る。
【００５６】
図１４のＮＥＸＴノートセットの処理において、ステップＳＫ３のノータッチ調査が終了したときは、ＮＥＸＴノート［０］〜［３］を現在ノート［０］〜［３］として更新し（ステップＫ４）、ＮＥＸＴノート［０］〜［３］の８ビットを全て１（ｆｆ）にセットする（ステップＳＫ５）。また、ｉｎｄｅｘを０にセットする（ステップＳＫ６）。そして、次のイベントまでの時間を目標時間として設定する（ステップＳＫ７）。次に、ガイド中パートのアドレスをガイド中パートのアドレスとして退避し（ステップＳＫ８）、ガイド中パートのアドレスを更新する（ステップＳＫ９）。そして、ガイド中パートのアドレスを読込み（ステップＳＫ１０）、そのアドレスの次イベントがノートオンであるか否かを判別する（ステップＳＫ１１）。
【００５７】
次イベントがノートオンである場合には、図１５のフローチャートにおいて、ｉｎｄｅｘで指定されたＮＥＸＴノートにノート番号をセットする（ステップＳＫ１４）。例えば、ＮＥＸＴノートがＣ４である場合には、ＮＥＸＴノートに「００１１１１００」をセットする。次に、ノートオンをセットし、ＬＣＤにＮＥＸＴノートを表示し、ノート番号に対応する鍵のＬＥＤを点滅する（ステップＳＫ１５）。この後、ｉｎｄｅｘの値をインクリメントする（ステップＳＫ１６）。そして、次イベントまでの時間が０であるか否かを判別する（ステップＳＫ１７）。この時間が０である場合、すなわち、同じタイミングの他のイベントがある場合には、図１４のステップＳＫ９に移行して、ステップＳＫ１０、ステップＳＫ１１と進み、次イベントがノートオンである場合には、図１５のステップＳＫ１４に移行してステップＳＫ１７までの処理を繰り返す。ステップＳＫ１７において、次イベントまでの時間が０でない場合には、現在ノートタイマを０にクリアし（ステップＳＫ１８）、ＮＥＸＴノートタイマを０から目標時間を減算した値すなわち目標時間のマイナス値にセットする（ステップＳＫ１９）。そして、メインルーチンに戻る。
【００５８】
図１４のステップＳＫ１１において、次イベントがノートオンでない場合には、そのイベントがフレーズマークであるか否かを判別する（ステップＳＫ１２）。フレーズマークである場合にはメインルーチンに戻るが、フレーズマークでない場合には、図１５のフローチャートにおいて、そのイベントがエンドマークであるか否かを判別する（ステップＳＫ２０）。エンドマークでない場合、例えば、ノートオフやプログラムチェンジなどの制御データである場合には、図１４のステップＳＫ１３に移行して、目標時間に次イベントまでの時間を加算する。そして、ステップＳＫ９以降の処理を実行する。
【００５９】
図１５のステップＳＫ２０において、次イベントがエンドマークである場合には、ＮＥＸＴノートの８ビットを全て１（ｆｆ）にセットし（ステップＳＫ２１）、ノートオフをセットし、ＬＣＤに曲の終了を表示し、ＬＥＤを消灯する（ステップＳＫ２２）。さらに、現在ノートタイマに最大値（７ｆｆｆ）をセットし（ステップＳＫ２３）、ＮＥＸＴノートに最大値（７ｆｆｆ）をセットする（ステップＳＫ２４）。そして、メインルーチンに戻る。
【００６０】
図２０のＮＥＸＴノートおよび現在ノートの内容を例にとって、曲開始（ＳＴＡＲＴ）から曲終了（ＥＮＤ）までのイベントデータの種類に対応したＮＥＸＴノートセットの処理を説明する。次イベントデータがＣＥＧのノートオンである場合には、ＮＥＸＴノートにＣＥＧをセットし、曲開始前の現在ノートにｆｆをセットする。次イベントデータがＤＦＧのノートオンである場合には、ＮＥＸＴノートにＤＦＧをセットし、現在ノートにＮＥＸＴノートのＣＥＧをセットする。次イベントデータがフレーズマークである場合には、ＮＥＸＴノートにｆｆをセットし、現在ノートにＮＥＸＴノートのＤＦＧをセットする。次イベントデータがＥＧＢのノートオンである場合には、ＮＥＸＴノートにＥＧＢをセットし、現在ノートにＮＥＸＴノートのｆｆをセットする。次イベントデータがエンドマークである場合には、ＮＥＸＴノートにｆｆをセットし、現在ノートにＮＥＸＴノートのＥＧＢをセットする。
【００６１】
以上のように、上記実施形態によれば、ＣＰＵ３は、演奏された曲を評価するためにフレーズごとに所定回数の演奏結果の平均得点を算出し、その算出した最も低い平均得点のフレーズのイベントデータを読み出してガイドする。
したがって、演奏するたびに演奏結果が大きく変動するような場合でも、その演奏結果を正しく評価して、演奏結果に基づいて苦手なフレーズを重点的に練習できる。
さらに、上手く演奏できなかったフレーズを演奏者が忘れないうちに、反復した練習を行うことで、苦手なフレーズを効率的に克服できる。
また、上記実施形態によれば、ＣＰＵ３は、算出した平均得点が基準値（１００点）より低い１つ以上のフレーズを練習対象として選択し、その練習対象の中からアップスイッチ又はダウンスイッチによって指定されたフレーズのイベントデータを読み出してガイドする。
したがって、ある程度の自由度を持たせて、演奏者に精神的な苦痛を感じさせないようにすることができる。
【００６２】
上記実施形態においては、全てのフレーズを練習対象として選択したが、変形例として、ＣＰＵ３は、算出した平均得点が基準値より低い１つ以上のフレーズを練習対象として選択し、その練習対象の中で最も低い平均得点のフレーズのイベントデータを読み出してガイドした結果、そのフレーズの平均得点が基準値に達したときは、そのフレーズを除いた練習対象の中で平均得点が最も低いフレーズのイベントデータを読み出してガイドするような構成にしてもよい。例えば、図２３のフレーズ平均得点ＢＵＦの中で、９０点の平均得点を基準値として、９０点より低い平均得点のフレーズ番号１、３、および５を練習対象として選択するようにしてもよい。
この変形例においても、上記実施形態と同様に、演奏するたびに演奏結果が大きく変動するような場合でも、その演奏結果を正しく評価して、演奏結果に基づいて苦手なフレーズを重点的に練習できるという効果、ある程度の自由度を持たせて、演奏者に精神的な苦痛を感じさせないようにすることができるという効果、および、上手く演奏できなかったフレーズを演奏者が忘れないうちに、反復した練習を行うことで、苦手なフレーズを効率的に克服できるという効果が得られる。
【００６３】
なお、上記実施形態においては、プログラムＲＯＭ８にあらかじめ記憶された演奏教習処理のプログラムをＣＰＵ３が実行する装置の発明について説明したが、フレキシブルディスク（ＦＤ）、ＣＤ、ＭＤなどの外部記憶媒体に記録されている演奏教習処理のプログラムをハードディスクやフラッシュＲＯＭなどの書き込み可能な不揮発性メモリにインストールしたり、インターネットなどのネットワークからダウンロードした演奏教習処理のプログラムをインストールして、そのプログラムをＣＰＵが実行することも可能である。この場合には、プログラムの発明やそのプログラムを記録した記録媒体の発明を実現できる。
【００６４】
すなわち、本発明による演奏教習処理のプログラムは、コンピュータに、演奏された曲を評価するために一定の期間ごとに所定回数の演奏結果の平均得点を算出するステップＡと、前記ステップＡによって算出された最も低い平均得点の期間のイベントデータを読み出してガイドするステップＢと、を実行させる。
【００６５】
前記ステップＢは、前記ステップＡによって算出された平均得点が基準値より低い１つ以上の期間を練習対象として選択し、当該練習対象の中から所定の操作手段によって指定された期間のイベントデータを読み出してガイドする。
【００６６】
前記ステップＢは、前記ステップＡによって算出された平均得点が基準値より低い１つ以上の期間を練習対象として選択し、当該練習対象の中で最も低い平均得点の期間のイベントデータを読み出してガイドした結果、前記ステップＡによって算出された当該期間の平均得点が基準値に達したときは、当該期間を除いた練習対象の中で平均得点が最も低い期間のイベントデータを読み出してガイドする。
【図面の簡単な説明】
【００６７】
【図１】本発明の演奏教習装置の実施形態における電子鍵盤楽器のブロック図。
【図２】図１におけるＣＰＵのメインルーチンのフローチャート。
【図３】図２のメインルーチンにおけるタイマインタラプト処理のフローチャート。
【図４】図２のメインルーチンにおけるスイッチ処理のフローチャート。
【図５】図４のスイッチ処理における曲セレクト処理のフローチャート。
【図６】図４のスイッチ処理における曲スタート処理のフローチャート。
【図７】図４のスイッチ処理における練習フレーズ処理のフローチャート。
【図８】図２のメインルーチンにおける曲データ処理のフローチャート。
【図９】図８の曲データ処理におけるイベント処理のフローチャート。
【図１０】図９に続くイベント処理のフローチャート。
【図１１】図９および図１０に続くイベント処理のフローチャート。
【図１２】図１１に続くイベント処理のフローチャート。
【図１３】図２のメインルーチンにおける鍵盤処理のフローチャート。
【図１４】図２のメインルーチンにおけるＮＥＸＴノートセット処理のフローチャート。
【図１５】図１４に続くＮＥＸＴノートセット処理のフローチャート。
【図１６】図１１のイベント処理および図１４のＮＥＸＴノートセット処理におけるノータッチ調査のフローチャート。
【図１７】図１の演奏データメモリに記憶されている曲データの構成を示す図。
【図１８】図１のワークＲＡＭにストアされる各種データを示す図。
【図１９】図１の演奏データメモリに記憶されている曲の複数のパートを示す図。
【図２０】実施形態における曲開始から曲終了までのイベントデータの種類に対応したＮＥＸＴノートおよび現在ノートを表わした図。
【図２１】図１のワークＲＡＭに記憶されるＮＥＸＴノートおよび現在ノートのデータ構成および演奏結果の得点を示す図。
【図２２】実施形態の演奏結果におけるタイミングずれと得点との関係を示す図。
【図２３】実施形態におけるフレーズ平均得点からフレーズ順位を作成する過程を示す図。
【符号の説明】
【００６８】
１  鍵盤部
２  スイッチ群
３  ＣＰＵ
４  システムバス
５  ＬＥＤ群
６  押鍵検出回路
７  スイッチ検出回路
８  プログラムＲＯＭ
９  ワークＲＡＭ
１０  演奏データメモリ
１１  表示部
１２  割り込みコントローラ
１３  タイマ
１４  楽音発生回路
１５  ディジタル／アナログ変換回路
１６  増幅回路
１７  スピーカ
【図１】
2006284638.tif 000003
【図２】
2006284638.tif 000004
【図３】
2006284638.tif 000005
【図４】
2006284638.tif 000006
【図５】
2006284638.tif 000007
【図６】
2006284638.tif 000008
【図７】
2006284638.tif 000009
【図８】
2006284638.tif 000010
【図９】
2006284638.tif 000011
【図１０】
2006284638.tif 000012
【図１１】
2006284638.tif 000013
【図１２】
2006284638.tif 000014
【図１３】
2006284638.tif 000015
【図１４】
2006284638.tif 000016
【図１５】
2006284638.tif 000017
【図１６】
2006284638.tif 000018
【図１７】
2006284638.tif 000019
【図１８】
2006284638.tif 000020
【図１９】
2006284638.tif 000021
【図２０】
2006284638.tif 000022
【図２１】
2006284638.tif 000023
【図２２】
2006284638.tif 000024
【図２３】
2006284638.tif 000025