(57)【要約】【課題】  効果的な演奏練習が可能な演奏練習装置を実現する。【解決手段】  曲データｍｅｌを複数のレッスンエリアに区分けし、各レッスンエリアの開始条件を含むレッスンエリアデータｌａを設ける。エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータｌａを参照して、移動先のレッスンエリアの開始条件を調べる。開始条件を満たしている場合には移動先のレッスンエリアに対応付けられた曲データｍｅｌを再生して演奏練習を行わせる。一方、開始条件を満たしていない場合には移動指示前のレッスンエリアに戻り、そのレッスンエリアに対応付けられた曲データｍｅｌを再生して演奏練習を行わせる。これにより、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習するようになる結果、練習意欲を低下させることなく、効果的な演奏練習を行える。【選択図】  図５
2006215167.tif 000002
【特許請求の範囲】
【請求項１】
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶するエリアデータ記憶手段と、
複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、
前記エリア指定手段により指定された移動先エリアのエリアデータを前記レッスンエリアデータ記憶手段から読み出して移動先エリアの開始条件を満たしている否かを判定する判定手段と、
前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段と
を具備することを特徴とする演奏練習装置。
【請求項２】
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶するエリアデータ記憶手段と、
複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、
前記エリア指定手段により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアにおけるクリアレベルと演奏レベルとを前記エリアデータ記憶手段を読み出し、読み出した演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定手段と、
前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段と
を具備することを特徴とする演奏練習装置。
【請求項３】
複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して移動先エリアの開始条件を満たしている否かを判定する判定処理と、
前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理と
をコンピュータで実行させることを特徴とする演奏練習プログラム。
【請求項４】
複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアの演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定処理と、
前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理と
をコンピュータで実行させることを特徴とする演奏練習プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、練習曲の曲データを再生して演奏操作を練習させる演奏練習装置および演奏練習プログラムに関する。
【背景技術】
【０００２】
従来より、練習曲の曲データを再生して演奏操作を練習させる演奏練習装置が知られている。この種の装置として、例えば特許文献１には、曲データを複数の区間に分割して読み出し、各区間毎に曲データと演奏操作に応じて入力される演奏データとを比較して、両データが一致したとき次の区間の曲データを読み出させ、一方、不一致であるときは同一区間の曲データを再び読み出すようにして、演奏ミスした区間をミスせず演奏し得るようになるまで繰り返し練習させてから次の区間に進むようにした技術が開示されている。
【０００３】
【特許文献１】特開平５−２９７７９５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、上記特許文献１に開示の演奏練習装置では、練習曲を複数の区間に区分けしておき、ある区間を間違えずに演奏出来たら次の区間の演奏練習に進むようにしている。従って、例えば曲の始めから演奏難度が高い練習曲であったとすると、演奏操作に慣れ親しんでいない初心者の場合には、演奏ミスを頻発して次の区間の演奏練習に進むことが出来ずに練習意欲を低下させてしまい、効果的な演奏練習を行うことが出来ないという問題がある。
そこで本発明は、このような事情に鑑みてなされたもので、効果的な演奏練習を行うことができる演奏練習装置および演奏練習プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００５】
上記目的を達成するため、請求項１に記載の発明では、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶するエリアデータ記憶手段と、複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、前記エリア指定手段により指定された移動先エリアのエリアデータを前記レッスンエリアデータ記憶手段から読み出して移動先エリアの開始条件を満たしている否かを判定する判定手段と、前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段とを具備することを特徴とする。
【０００６】
請求項２に記載の発明では、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶するエリアデータ記憶手段と、複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、前記エリア指定手段により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアにおけるクリアレベルと演奏レベルとを前記エリアデータ記憶手段を読み出し、読み出した演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定手段と、前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段とを具備することを特徴とする。
【０００７】
請求項３に記載の発明では、複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して移動先エリアの開始条件を満たしている否かを判定する判定処理と、前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理とをコンピュータで実行させることを特徴とする。
【０００８】
請求項４に記載の発明では、複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアの演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定処理と、前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理とをコンピュータで実行させることを特徴とする。
【発明の効果】
【０００９】
請求項１、３に記載の発明によれば、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶しておき、複数のレッスンエリアの内から移動先エリアを指定すると、指定された移動先エリアのエリアデータを参照して移動先エリアの開始条件を満たしている否かを判定し、開始条件を満たしていると、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていなければ、移動元エリアに対応する曲データを再生するので、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習でき、この結果、練習意欲を低下させることなく、効果的な演奏練習を行うことができるようになる。
【００１０】
請求項２、４に記載の発明によれば、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶しておき、複数のレッスンエリアの内から移動先エリアを指定すると、指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアの演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定し、開始条件を満たしていると、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていなければ、移動元エリアに対応する曲データを再生するので、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習でき、この結果、練習意欲を低下させることなく、効果的な演奏練習を行うことができるようになる。
【発明を実施するための最良の形態】
【００１１】
以下、図面を参照して本発明の実施の形態について説明する。
Ａ．構成
（１）全体構成
図１は本発明の実施の一形態による演奏練習装置１００の構成を示すブロック図である。この図において、ＣＰＵ１０は、ＲＯＭ１１に記憶される練習曲の曲データを、ＭＩＤＩインフェース１３を介して電子楽器２０に供給して練習曲を再生させたり、再生された練習曲を手本に鍵盤１５を弾くユーザの演奏操作で発生する演奏データを、ＭＩＤＩインフェース１３を介して電子楽器２０に供給して発音させる。また、ＣＰＵ１０は、ユーザの演奏操作で発生した演奏データと、それに対応する練習曲の曲データとを比較して演奏練習内容を評価する。本発明の要旨に係わるＣＰＵ１０の特徴的な処理動作については追って詳述する。
【００１２】
ＲＯＭ１１は、プログラムエリアおよびデータエリアを備える。ＲＯＭ１１のプログラムエリアには、後述するメインルーチン、エリア変更処理および再生処理を含む各種制御プログラムが記憶される。ＲＯＭ１１のデータエリアには、演奏練習に供する練習曲の曲データや各種画面データ等が記憶される。曲データの構成については追って説明する。ＲＡＭ１２は、ワークエリアおよびデータエリアを備える。ＲＡＭ１２のワークエリアには、バッファ領域に一時記憶されるオフバッファデータｏｆｆｂｕｆと、再生制御データｐｌｙとが格納される。ＲＡＭ１２のデータエリアには、レッスンエリアデータｌａが格納される。上記各データ（オフバッファデータｏｆｆｂｕｆ、再生制御データｐｌｙおよびレッスンエリアデータｌａ）の構成については追って詳述する。
【００１３】
ＭＩＤＩインタフェース１３は、ＣＰＵ１０の制御の下に、電子楽器２０とＭＩＤＩデータを授受する。操作部１４は、表示部１６に画面表示されるアイコンのクリック操作に応じて、そのアイコンに対応付けられた操作イベントを発生させるマウスや、スイッチ操作に対応したスイッチイベントを発生する各種操作スイッチを備える。本発明に係わる操作スイッチとして、操作部１４には、レッスンエリアを指定するエリア指定スイッチ、レッスンエリアの移動を指示するエリア移動スイッチ、レッスンの開始を指示するレッスン開始スイッチおよびレッスンの停止を指示するレッスン停止スイッチが配設される。
なお、本実施形態では、後述するように、上述したエリア指定スイッチ、レッスン開始スイッチおよびレッスン停止スイッチとそれぞれ同等の操作イベントを発生するアイコンを備えたメニュー画面（後述する）を表示部１６に画面表示させ、それらアイコンのクリック操作でスイッチ操作を代用することも可能になっている。
【００１４】
鍵盤１５は、演奏操作（押離鍵操作）に応じた演奏データ（ノートオン／ノートオフイベント）を発生する。表示部１６は、例えば液晶パネル等から構成され、ＣＰＵ１０から供給される表示制御信号に応じて、例えばレッスンエリアを指定するエリア指定アイコン、レッスンの開始を指示するレッスン開始アイコンおよびレッスン停止を指示するレッスン停止アイコン等を備えるメニュー画面を画面表示する。電子楽器２０は、ＭＩＤＩインタフェース１３を介して受領するＭＩＤＩデータ（曲データや演奏データ）を、予め設定される音色の楽音として再生する。
【００１５】
（２）曲データｍｅｌの構成
図２は、ＲＯＭ１１に記憶される曲データｍｅｌの構成を示す図である。曲データｍｅｌは、練習曲を構成する各音を表すノートデータｍｅｌ［０］〜［ｎ］から構成される。ノートデータｍｅｌ［０］〜［ｎ］は、それぞれノートナンバで表される音高ｉＰｉｔｃｈ、ｔｉｃｋ数（テンポクロック数）で表される発音開始時間ｌＴｉｍｅおよび発音期間を表す音長ｌＧａｔｅから構成される。
【００１６】
（３）オフバッファデータｏｆｆｂｕｆの構成
図３は、ＲＡＭ１２のワークエリアに設けられたバッファ領域に一時記憶されるオフバッファデータｏｆｆｂｕｆの構成を示す図である。オフバッファデータｏｆｆｂｕｆとは、発音（ノートオン）されたノートデータｍｅｌに対応してオフバッファ領域に登録されるデータであり、ノートナンバで表される音高ｉＰｉｔｃｈおよびｔｉｃｋ数（テンポクロック数）で表される消音時間ｌＴｉｍｅから構成される。オフバッファデータｏｆｆｂｕｆ［０］〜［ｎ］は、対応するノートデータｍｅｌが消音された時点で消去される。
【００１７】
（４）再生制御データｐｌｙの構成
図４は、ＲＡＭ１２のワークエリアに格納される再生制御データｐｌｙの構成を示す図である。再生制御データｐｌｙは、曲データｍｅｌの再生開始時間ｌＢａｓｅＴｉｍｅ、現在時刻ｌＮｏｗＴｉｍｅ、再生開始時間ｌＢａｓｅＴｉｍｅから現在時刻ｌＮｏｗＴｉｍｅまでの経過時間ｌＭｅｔａ５１Ｔｉｍｅ、経過時間ｌＭｅｔａ５１Ｔｉｍｅをｔｉｃｋ数（テンポクロック数）で表現した現在再生位置ｌＮｏｗＴｉｃｋ、前回テンポ変更ティックｄＭｅｔａ５１Ｔｉｃｋ、４分音符長のｔｉｃｋ数で表される分解能ｄＲｅｓ１０００、レッスンエリア開始ティックｌＴｉｃｋＣｕｒｒｉｃｕｌｕｍ、中途再生開始ティックｌＴｉｃｋＯｆｆｓｅｔ、ティック増分ｌＴｉｃｋＣｏｕｎｔＩｎ、現在テンポ値ｌＴｅｍｐｏ、オフセットテンポ値ｌＴｅｍｐｏＯｆｆｓｅｔ、先頭テンポ値ｌＴｅｍｐｏＴｏｐ、曲データポインタｍｅｌｐｔｒおよび状態フラグｉＰａｌｙから構成される。
【００１８】
（５）レッスンエリアデータｌａの構成
図５は、ＲＡＭ１２のデータエリアに格納されるレッスンエリアデータｌａの構成を示す図である。レッスンエリアデータｌａは、練習曲の曲データｍｅｌを複数の区間（レッスンエリア）に区分けし、区分けされた各レッスンエリアの属性を表す情報であり、曲データｍｅｌを区分けしたレッスンエリアの数を表すレッスンエリア数ｉＬＡｎｕｍ、レッスンエリアを指定するエリアポインタｉＬＡｐｔｒおよび各レッスンエリア毎の属性を表すエリア情報ｌａ［０］〜［ｎ］から構成される。
各エリア情報ｌａ［０］〜［ｎ］は、エリア番号ｉＬＡｒｅａ、エリア開始位置を表す開始ティックｌＬＡＴｉｍｅ、エリア終了位置を表す終了ティックｌＬＡＴｉｍｅＥｎｄ、発音開始ティックｌＬＡＴｉｍｅＯｎ、開始条件エリアｉＬＡａｒｅａ、開始条件クリアレベルｉＬＡａｒｅａＣｌｅｖｅｌおよびクリアレベルｉＬＡＣｌｅｖｅｌを有する。
【００１９】
発音開始ティックｌＬＡＴｉｍｅＯｎは、レッスンエリア先頭の曲データｍｅｌの発音タイミングを表す。開始条件エリアｉＬＡａｒｅａおよび開始条件クリアレベルｉＬＡａｒｅａＣｌｅｖｅｌは、本レッスンエリアの演奏練習を行うための前提条件を表す。本実施形態では、例えば各レッスンエリアにおいてユーザの演奏レベル（習熟度）を５段階で評価するようになっており、開始条件エリアｉＬＡａｒｅａにおける演奏レベルが、開始条件クリアレベルｉＬＡａｒｅａＣｌｅｖｅｌを超えている場合に、本レッスンエリアの演奏練習を可能とするようになっている。クリアレベルｉＬＡＣｌｅｖｅｌは、本レッスンエリアの演奏レベルを表す。
【００２０】
Ｂ．動作
次に、図６〜図１２を参照して、上記構成による実施形態の動作について説明する。以下では、最初に全体動作としてメインルーチンの動作について説明した後、メインルーチンからコールされるエリア変更処理および再生処理の各動作について述べる。
【００２１】
（１）メインルーチンの動作
演奏練習装置１００において、メインルーチンが実行されると、ＣＰＵ１０は図６に示すステップＳＡ１に進み、装置各部を初期化するイニシャライズを行った後、ステップＳＡ２に進む。ステップＳＡ２では、ＲＯＭ１１のデータエリアから読み出すメニュー画面データに基づき表示部１６にメニュー画面（不図示）を表示する。前述したように、メニュー画面は、レッスンエリアを指定するエリア指定アイコン、レッスンの開始を指示するレッスン開始アイコンおよびレッスンの停止を指示するレッスン停止アイコンを備える画面である。
【００２２】
続いて、ステップＳＡ３では、操作部１４に配設されるスイッチ操作もしくはメニュー画面におけるアイコン操作のいずれかで行われるコマンド入力の有無を判断する。そして、ユーザがコマンド入力を行うと、ステップＳＡ３の判断結果が「ＹＥＳ」になり、ステップＳＡ４以降に処理を進める。以下、レッスンエリア指定、レッスン開始、レッスン停止およびその他の処理コマンドがそれぞれ入力された場合の動作について説明する。
【００２３】
ａ．レッスンエリア指定の場合
レッスンエリアを指定するコマンドが入力された場合には、ステップＳＡ４の判断結果が「ＹＥＳ」となり、ステップＳＡ５に進み、エリア変更処理を実行する。エリア変更処理では、後述するように、レッスンエリアデータｌａを参照して、移動設定されたレッスンエリアの発音開始ティックｌａ［ｉＬＡｐｔｒ］．ｉＬＡＴｉｍｅＯｎ以上の発音開始時間を持つノートデータｍｅｌ［Ｉ］．ｌＴｉｍｅを探し出し、それに該当するノートデータｍｅｌ［Ｉ］を指定する曲データ検索ポインタＩを、曲データポインタｐｌｙ．ｍｅｌｐｔｒにセットすると共に、移動設定されたレッスンエリアの開始ティックｌａ［ｉＬＡｐｔｒ］．ｉＬＡＴｍｅを、レッスンエリア開始ティックｐｌｙ．ｌＴｉｃｋＣｕｒｒｉｃｕｌｍにセットする。この後、上述のステップＳＡ２に処理を戻し、メニュー画面表示状態に復帰する。
【００２４】
ｂ．レッスン開始の場合
レッスン開始を指示するコマンドが入力された場合には、ステップＳＡ６の判断結果が「ＹＥＳ」となり、ステップＳＡ７に進み、再生処理を実行する。再生処理では、後述するように、再生処理を終了させる終了条件に合致するまで、後述する「再生用変数更新処理」、「ノートオフ処理」および「ノートオン処理」を実行して、指定されたレッスンエリアに対応する曲データｍｅｌを再生した後、上述のステップＳＡ２に処理を戻し、メニュー画面表示状態に復帰する。
【００２５】
ｃ．レッスン停止の場合
レッスン停止を指示するコマンドが入力された場合には、ステップＳＡ８の判断結果が「ＹＥＳ」となり、ステップＳＡ９に進み、再生制御データ中の状態フラグｐｌｙ．ｉＰｌａｙに「０」をセットしてレッスン停止状態に設定した後、上述のステップＳＡ２に処理を戻し、メニュー画面表示状態に復帰する。
【００２６】
ｄ．その他の処理コマンドの場合
例えば演奏レベルの評価を指示するコマンドが入力された場合には、ステップＳＡ１０に進み、ユーザの演奏操作に応じて発生した演奏データと、それに対応する練習曲の曲データとを比較して演奏レベルを判定する等の、その他の処理を実行してから上述のステップＳＡ２に処理を戻し、メニュー画面表示状態に復帰する。
【００２７】
（２）エリア変更処理の動作
次に、図７を参照してエリア変更処理の動作を説明する。前述したメインルーチンのステップＳＡ５（図６参照）を介して本処理が実行されると、ＣＰＵ１０は図７に図示するステップＳＢ１に処理を進める。ステップＳＢ１では、エリア移動スイッチの操作で指定されるレッスンエリアの移動方向が、後方移動（曲後端方向への移動）であるか否かを判断する。
【００２８】
曲頭方向へレッスンエリアを移動させる前方移動の場合には、上記ステップＳＢ１の判断結果が「ＮＯ」になり、ステップＳＢ２に進む。ステップＳＢ２では、エリアポインタｉＬＡｐｔｒの値が「０」より大きいか否か、つまり、エリアポインタｉＬＡｐｔｒにて現在設定されているレッスンエリアが練習曲の曲頭であるかどうかを判断する。現在設定されているレッスンエリアが曲先頭であると、それより前には移動できないので、上記ステップＳＢ２の判断結果は「ＮＯ」になり、ステップＳＢ６に進み、曲データ検索ポインタＩをゼロリセットする。  一方、現在設定されているレッスンエリアが曲先頭でなければ、上記ステップＳＢ２の判断結果は「ＹＥＳ」になり、ステップＳＢ３に進み、エリアポインタｉＬＡｐｔｒの値をデクリメントした後、ステップＳＢ６に進み、曲データ検索ポインタＩをゼロリセットする。
【００２９】
これに対し、曲後端方向へレッスンエリアを移動させる後方移動の場合には、上記ステップＳＢ１の判断結果が「ＹＥＳ」になり、ステップＳＢ４に進む。ステップＳＢ４では、曲後端方向に１つ分移動させたエリアポインタｉＬＡｐｔｒ＋１がレッスンエリア数ｉＬＡｎｕｍ以上であるか、つまり、エリアポインタｉＬＡｐｔｒにて現在設定されているレッスンエリアが曲後端であるかどうかを判断する。曲後端であると、それより後には移動できないので、上記ステップＳＢ４の判断結果が「ＮＯ」になり、ステップＳＢ６に進み、曲データ検索ポインタＩをゼロリセットする。
一方、現在設定されているレッスンエリアが曲後端でなければ、上記ステップＳＢ４の判断結果は「ＮＯ」になり、ステップＳＢ５に進み、エリアポインタｉＬＡｐｔｒの値をインクリメントして歩進させた後、ステップＳＢ６に進み、曲データ検索ポインタＩをゼロリセットする。
【００３０】
次いで、ステップＳＢ７〜ＳＢ９では、曲データｍｅｌを構成するノートデータｍｅｌ［０］〜［ｎ］の数ＭＡＸＭＥＬに達するまで曲データ検索ポインタＩを歩進させながら、移動指定されたレッスンエリアの発音開始ティックｌａ［ｉＬＡｐｔｒ］．ｉＬＡＴｉｍｅＯｎ以上の発音開始時間を持つノートデータｍｅｌ［Ｉ］．ｌＴｉｍｅを検索する。
該当するノートデータｍｅｌ［Ｉ］．ｌＴｉｍｅが検索されると、ステップＳＢ８の判断結果が「ＹＥＳ」になり、ステップＳＢ１０に進み、曲データ検索ポインタＩの値を、曲データポインタｐｌｙ．ｍｅｌｐｔｒにセットする。続いて、ステップＳＢ１１では、移動指定されたレッスンエリアの開始ティックｌａ［ｉＬＡｐｔｒ］．ｉＬＡＴｍｅを、レッスンエリア開始ティックｐｌｙ．ｌＴｉｃｋＣｕｒｒｉｃｕｌｍにセットして本処理を終える。
【００３１】
このように、エリア変更処理では、エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータｌａを参照して、移動指定されたレッスンエリアの発音開始ティックｌａ［ｉＬＡｐｔｒ］．ｉＬＡＴｉｍｅＯｎ以上の発音開始時間を持つノートデータｍｅｌ［Ｉ］．ｌＴｉｍｅを検索し、該当するノートデータｍｅｌ［Ｉ］を指定する曲データ検索ポインタＩを、曲データポインタｐｌｙ．ｍｅｌｐｔｒにセットすると共に、移動指定されたレッスンエリアの開始ティックｌａ［ｉＬＡｐｔｒ］．ｉＬＡＴｍｅを、再生制御データ中のレッスンエリア開始ティックｐｌｙ．ｌＴｉｃｋＣｕｒｒｉｃｕｌｍにセットする。
【００３２】
なお、上記ステップＳＢ７〜ＳＢ９において、該当するノートデータｍｅｌ［Ｉ］．ｌＴｉｍｅが検索されず、曲データｍｅｌを構成するノートデータｍｅｌ［０］〜［ｎ］の数ＭＡＸＭＥＬを超えるまで曲データ検索ポインタＩを歩進させた場合には、ステップＳＢ７の判断結果が「ＹＥＳ」となり、前述のステップＳＢ１に処理を戻してレッスンエリア移動をやり直す。
【００３３】
（３）再生処理の動作
次に、図８を参照して再生処理の動作を説明する。前述したメインルーチンのステップＳＡ７（図６参照）を介して本処理が実行されると、ＣＰＵ１０は図８に図示するステップＳＣ１に処理を進める。ステップＳＣ１では、再生制御データ中の状態フラグｐｌｙ．ｉＰｌａｙに「１」をセットする。続いて、ステップＳＣ２では、再生処理を終了させる終了条件に合致するかどうかを判断し、終了条件に合致する場合に、再生終了を表す値「−１」を状態フラグｐｌｙ．ｉＰｌａｙにセットする終了条件検査処理（後述する）を実行する。
【００３４】
次いで、ステップＳＣ３では、状態フラグｐｌｙ．ｉＰｌａｙの値が「−１」、すなわち再生終了が指示されているかどうかを判断する。再生終了が指示されていると、判断結果は「ＹＥＳ」になり、本処理を完了させる。一方、再生終了が指示されていなければ、判断結果は「ＮＯ」になり、ステップＳＣ４〜ＳＣ６を介して後述の「再生用変数更新処理」、「ノートオフ処理」および「ノートオン処理」を実行して、指定されたレッスンエリアに対応する曲データｍｅｌを順番に再生させて行く。
【００３５】
（４）終了条件検査処理の動作
次に、図９を参照して終了条件検査処理の動作を説明する。上述した再生処理のステップＳＣ２（図８参照）を介して本処理が実行されると、ＣＰＵ１０は図９に図示するステップＳＤ１に処理を進める。ステップＳＤ１では、第１の終了条件、すなわち曲データｍｅｌを終端まで読み出し終え、かつオフバッファデータｏｆｆｂｕｆが全て消去された状態であるか否かを判断する。第１の終了条件に合致すると、判断結果は「ＹＥＳ」になり、ステップＳＤ４に進み、再生制御データ中の状態フラグｐｌｙ．ｉＰｌａｙに再生終了を指示する値「−１」をセットして本処理を終える。
【００３６】
一方、第１の終了条件に合致しない場合には、上記ステップＳＤ１の判断結果が「ＮＯ」になり、ステップＳＤ２に進む。ステップＳＤ２では、第２の終了条件、すなわち現在再生位置ｐｌｙ．ｌＮｏｗＴｉｃｋが、現在設定されているレッスンエリアの終了ティックｌＬＡＴｉｍｅＥｎｄを超えているかどうかを判断する。第２の終了条件に合致すると、判断結果は「ＹＥＳ」になり、ステップＳＤ４に進み、状態フラグｐｌｙ．ｉＰｌａｙに再生終了を表す値「−１」をセットして本処理を終える。
【００３７】
これに対し、第２の終了条件に合致しない場合には、上記ステップＳＤ２の判断結果が「ＮＯ」になり、ステップＳＤ３に進む。ステップＳＤ３では、第３の終了条件、すなわちレッスン停止スイッチ操作あるいはレッスン停止アイコン操作に応じて、再生制御データ中の状態フラグｐｌｙ．ｉＰｌａｙの値が「０」にセットされているかどうかを判断する。第３の終了条件に合致すると、判断結果は「ＹＥＳ」になり、ステップＳＤ４に進み、再生制御データ中の状態フラグｐｌｙ．ｉＰｌａｙに再生終了を表す値「−１」をセットして本処理を終える。一方、第３の終了条件に合致しない場合には、判断結果が「ＮＯ」になり、何も行わずに本処理を終える。
【００３８】
（５）再生用変数更新処理の動作
次に、図１０を参照して再生用変数更新処理の動作を説明する。上述した再生処理のステップＳＣ４（図８参照）を介して本処理が実行されると、ＣＰＵ１０は図１０に図示するステップＳＥ１に処理を進める。ステップＳＥ１では、ｍｓｅｃ単位で表現される現在時刻を、再生制御データ中の現在時刻ｐｌｙ．ｌＮｏｗＴｉｍｅにストアする。続いて、ステップＳＥ２では、再生制御データ中の現在時刻ｐｌｙ．ｌＮｏｗＴｉｍｅから再生開始時間ｌＢａｓｅＴｉｍｅを減算して経過時間ｐｌｙ．ｌＭｅｔａ５１Ｔｉｍｅを算出する。
【００３９】
次いで、ステップＳＥ３では、次式（１）に基づきティック数で表現される現在再生位置ｐｌｙ．ｌＮｏｗＴｉｃｋを算出する。
ｐｌｙ．ｌＮｏｗＴｉｃｋ＝ｐｌｙ．ｄＭｅｔａ５１Ｔｉｃｋ＋ｐｌｙ．ｄＲｅｓ１０００×ｐｌｙ．ｌＭｅｔａ５１Ｔｉｍｅ／（ｐｌｙ．ｌＴｅｍｐｏ×ｐｌｙ．ｌＴｅｍｐｏＯｆｆｓｅｔ／ｐｌｙ．ｌＴｅｍｐｏＴｏｐ）＋ｐｌｙ．ｌＴｉｃｋＯｆｆｓｅｔ＋ｐｌｙ．ｌＴｉｃｋＣｕｒｒｉｃｕｌｕｍ−ｐｌｙ．ｌＴｉｃｋＣｏｕｎｔＩｎ  …（１）
【００４０】
なお、上記（１）式において、ｐｌｙ．ｄＭｅｔａ５１Ｔｉｃｋは前回テンポ変更ティック、ｐｌｙ．ｄＲｅｓ１０００は４分音符長のｔｉｃｋ数（テンポクロック数）で表される分解能、ｐｌｙ．ｌＭｅｔａ５１Ｔｉｍｅは再生開始時点からの経過時間である。ｐｌｙ．ｌＴｅｍｐｏは現在テンポ値、ｐｌｙ．ｌＴｅｍｐｏＯｆｆｓｅｔはオフセットテンポ値、ｐｌｙ．ｌＴｅｍｐｏＴｏｐは先頭テンポ値である。ｐｌｙ．ｌＴｉｃｋＯｆｆｓｅｔは中途再生開始ティック、ｐｌｙ．ｌＴｉｃｋＣｕｒｒｉｃｕｌｕｍはレッスンエリア開始ティック、ｐｌｙ．ｌＴｉｃｋＣｏｕｎｔＩｎはティック増分である。
【００４１】
次に、ステップＳＥ４では、テンポ変更指示の有無を判断する。テンポ変更指示が無ければ、判断結果は「ＮＯ」となり、何も行わずに本処理を完了させるが、テンポ変更指示が有ると、判断結果は「ＹＥＳ」になり、ステップＳＥ５に進む。ステップＳＥ５では、次式（２）に基づき再生制御データ中の前回テンポ変更ティックｐｌｙ．ｄＭｅｔａ５１Ｔｉｃｋを更新する。
ｐｌｙ．ｄＭｅｔａ５１Ｔｉｃｋ＝ｐｌｙ．ｄＭｅｔａ５１Ｔｉｃｋ＋
ｐｌｙ．ｄＲｅｓ１０００×ｐｌｙ．ｌＭｅｔａ５１Ｔｉｍｅ／（ｐｌｙ．ｌＴｅｍｐｏ×ｐｌｙ．ｌＴｅｍｐｏＯｆｆｓｅｔ／ｐｌｙ．ｌＴｅｍｐｏＴｏｐ）…（２）
次いで、ステップＳＥ６では、テンポ変更に伴い、現在時刻ｐｌｙ．ｌＮｏｗＴｉｍｅを再生開始時間ｐｌｙ．ｌＢａｓｅＴｉｍｅに更新させ、続くステップＳＥ７では、指定テンポ値を現在テンポ値ｐｌｙ．ｌＴｅｍｐｏに設定して本処理を終える。
【００４２】
（６）ノートオフ処理の動作
次に、図１１を参照してノートオフ処理の動作を説明する。上述した再生処理のステップＳＣ５（図８参照）を介して本処理が実行されると、ＣＰＵ１０は図１１に図示するステップＳＦ１に処理を進め、曲データ検索ポインタＩをゼロリセットする。続いて、ステップＳＦ２では、曲データ検索ポインタＩがＲＡＭ１２のバッファ領域に格納可能なオフバッファデータｏｆｆｂｕｆの数ＭＡＸＯＦＦＢＵＦ以上であるか否か、すなわち全てのオフバッファデータｏｆｆｂｕｆについて検索し終えたかどうかを判断する。
【００４３】
全てのオフバッファデータｏｆｆｂｕｆについて検索し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＦ３に進む。ステップＳＦ３では、曲データ検索ポインタＩで指定されるオフバッファデータｏｆｆｂｕｆ中の消音時間ｏｆｆｂｕｆ［Ｉ］．ｌＴｉｍｅが「ＮＵＬＬ（空き状態）」であるか否かを判断する。曲データ検索ポインタＩで指定されるオフバッファデータｏｆｆｂｕｆが空き状態であると、判断結果は「ＹＥＳ」になり、ステップＳＦ７に進み、曲データ検索ポインタＩをインクリメントして歩進させた後、上述にステップＳＦ２に処理を戻す。これに対し、曲データ検索ポインタＩで指定されるオフバッファデータｏｆｆｂｕｆが空き状態でなければ、上記ステップＳＦ３の判断結果が「ＮＯ」になり、ステップＳＦ４に進む。
【００４４】
ステップＳＦ４では、曲データ検索ポインタＩで指定されるオフバッファデータｏｆｆｂｕｆ中の消音時間ｏｆｆｂｕｆ［Ｉ］．ｌＴｉｍｅが、現在再生位置ｐｌｙ．ｌＮｏｗＴｉｃｋを過ぎているか否か、つまり消音タイミングに達したかどうかを判断する。消音タイミングに達していない場合、すなわちオフバッファデータｏｆｆｂｕｆ［Ｉ］に対応する曲データｍｅｌ（ノートデータ）が発音中であれば、判断結果は「ＹＥＳ」になり、ステップＳＦ７にて曲データ検索ポインタＩを歩進させて上述のステップＳＦ２に処理を戻す。
【００４５】
一方、消音タイミングに達した場合、すなわちオフバッファデータｏｆｆｂｕｆ［Ｉ］に対応する曲データｍｅｌが発音済みになると、上記ステップＳＦ４の判断結果は「ＮＯ」になり、ステップＳＦ５に進む。ステップＳＦ５では、オフバッファデータｏｆｆｂｕｆ［Ｉ］を、消音を指示するノートオフイベントとしてＭＩＤＩインタフェース１３を介して電子楽器２０に送出する。これにより、電子楽器２０側で再生される曲データｍｅｌの楽音が消音される。そして、ステップＳＦ６では、曲データ検索ポインタＩで指定されるオフバッファデータｏｆｆｂｕｆ中の消音時間ｏｆｆｂｕｆ［Ｉ］．ｌＴｉｍｅを、「ＮＵＬＬ（空き状態）」に設定した後、ステップＳＦ７に進む。
【００４６】
以後、最大数ＭＡＸＯＦＦＢＵＦを超えるまで曲データ検索ポインタＩを歩進させながら、発音済みの曲データｍｅｌに対応するオフバッファデータｏｆｆｂｕｆ［Ｉ］を検索し、該当するオフバッファデータｏｆｆｂｕｆ［Ｉ］があれば、そのオフバッファデータｏｆｆｂｕｆ［Ｉ］を消音を指示するノートオフイベントとして電子楽器２０側に送出して消音指示する一方、該当するオフバッファデータｏｆｆｂｕｆ中の消音時間ｏｆｆｂｕｆ［Ｉ］．ｌＴｉｍｅを「ＮＵＬＬ（空き状態）」に設定してバッファ領域から消去する。そして、曲データ検索ポインタＩが最大数ＭＡＸＯＦＦＢＵＦを超えると、上記ステップＳＦ２の判断結果が「ＹＥＳ」になり、本処理を終える。
【００４７】
（７）ノートオン処理の動作
次に、図１２を参照してノートオン処理の動作を説明する。上述した再生処理のステップＳＣ６（図８参照）を介して本処理が実行されると、ＣＰＵ１０は図１２に図示するステップＳＧ１に処理を進め、再生制御データ中の曲データポインタｐｌｙ．ｍｅｌｐｔｒの値を、曲データ検索ポインタＩにセットする。続いて、ステップＳＧ２では、曲データ検索ポインタＩが、曲データｍｅｌを構成するノートデータｍｅｌ［０］〜［ｎ］の数ＭＡＸＭＥＬを超えたか否か、すなわち曲データｍｅｌを曲終端まで再生し終えたかどうかを判断する。
【００４８】
曲データｍｅｌを曲終端まで再生し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＧ４に進む。ステップＳＧ４では、曲データ検索ポインタＩで指定されるノートデータｍｅｌ中の発音開始時間ｍｅｌ［Ｉ］．ｌＴｉｍｅが、現在再生位置ｐｌｙ．ｌＮｏｗＴｉｃｋを過ぎたか否か、つまり発音タイミングに達したかどうかを判断する。発音タイミングに達していない場合には、判断結果が「ＮＯ」になり、ステップＳＧ３に進み、曲データ検索ポインタＩの値を、曲データポインタｐｌｙ．ｍｅｌｐｔｒに格納して一旦本処理を終える。
一方、発音タイミングに達した場合には、上記ステップＳＧ４の判断結果が「ＹＥＳ」になり、ステップＳＧ５に進み、ノートデータｍｅｌ［Ｉ］の発音を指示するノートオンイベントを発生し、ＭＩＤＩインタフェース１３を介して電子楽器２０側に送出して発音指示する。
【００４９】
次いで、ステップＳＧ６〜ＳＧ８では、検索ポインタｊを歩進させて消音時間ｌＴｉｍｅが「ＮＵＬＬ（空き状態）」のオフバッファデータｏｆｆｂｕｆ［ｊ］を探し出す。消音時間ｌＴｉｍｅが「ＮＵＬＬ（空き状態）」のオフバッファデータｏｆｆｂｕｆ［ｊ］が検索されると、ステップＳＧ７の判断結果が「ＹＥＳ」になり、ステップＳＧ９に進む。ステップＳＧ９では、曲データ検索ポインタＩで指定されるノートデータｍｅｌ中の発音開始時間ｍｅｌ［Ｉ］．ｌＴｉｍｅと音長ｍｅｌ［Ｉ］．ｌＧａｔｅとの加算値を、オフバッファデータｏｆｆｂｕｆ［ｊ］の消音時間ｌＴｉｍｅとしてストアする。また、曲データ検索ポインタＩで指定されるノートデータｍｅｌ中の音高ｍｅｌ［Ｉ］．ｉＰｉｔｃｈを、オフバッファデータｏｆｆｂｕｆ［ｊ］の音高ｉＰｉｔｃｈとして格納する。
【００５０】
そして、ステップＳＧ１０に進み、曲データ検索ポインタＩをインクリメントして歩進させた後、上述のステップＳＧ２に処理を戻す。以後、曲データ検索ポインタＩがノートデータｍｅｌ［０］〜［ｎ］の数ＭＡＸＭＥＬを超えるまで上述したステップＳＧ２〜ＳＧ１０を繰り返す。そして、曲データｍｅｌを曲終端まで再生し終えると、ステップＳＧ２の判断結果が「ＹＥＳ」となり、本処理を終える。
【００５１】
Ｃ．変形例
前述のエリア変更処理（図７参照）では、レッスンエリアの移動を指示すると、レッスンエリアデータｌａを参照して、移動先のレッスンエリア先頭に対応するノートデータｍｅｌを検索して再生可能にするようにした。これに対し、変形例によるエリア変更処理では、レッスンエリアの移動を指示すると、レッスンエリアデータｌａを参照して、移動先のレッスンエリアの開始条件を調べ、その開始条件を満たしている場合には移動先のレッスンエリア先頭に対応するノートデータｍｅｌを検索して再生可能にし、一方、開始条件を満たしていない場合にはレッスンエリアの移動を指示する以前のレッスンエリアに戻すようになっている。
【００５２】
以下、こうした変形例によるエリア変更処理の動作について図１３を参照して説明する。上述した実施形態と同様、メインルーチンのステップＳＡ５（図６参照）を介して本処理が実行されると、ＣＰＵ１０は図１３に図示するステップＳＨ１に処理を進め、現在設定されているエリアポインタｉＬＡｐｔｒの値をレジスタｂｕｆにストアする。続いて、ステップＳＨ２では、エリア移動スイッチの操作で指定されるレッスンエリアの移動方向が、後方移動（曲後端方向への移動）であるか否かを判断する。
【００５３】
曲頭方向へレッスンエリアを移動させる前方移動の場合には、上記ステップＳＨ２の判断結果が「ＮＯ」になり、ステップＳＨ３に進む。ステップＳＨ３では、エリアポインタｉＬＡｐｔｒの値が「０」より大きいか否か、つまり、現在設定されているエリアポインタｉＬＡｐｔｒにて指定されるレッスンエリアが、練習曲の曲頭であるかどうかを判断する。現在設定されているレッスンエリアが曲頭であると、それより前には移動できないので、上記ステップＳＨ３の判断結果は「ＮＯ」になり、ステップＳＨ７に進み、曲データ検索ポインタＩをゼロリセットする。
一方、現在設定されているレッスンエリアが曲頭でなければ、上記ステップＳＨ３の判断結果は「ＹＥＳ」になり、ステップＳＨ４に進み、エリアポインタｉＬＡｐｔｒの値をデクリメントした後、ステップＳＨ７に進み、曲データ検索ポインタＩをゼロリセットする。
【００５４】
これに対し、曲後端方向へレッスンエリアを移動させる後方移動の場合には、上記ステップＳＨ２の判断結果が「ＹＥＳ」になり、ステップＳＨ５に進む。ステップＳＨ５では、曲後端方向に１つ分移動させたエリアポインタｉＬＡｐｔｒ＋１がレッスンエリア数ｉＬＡｎｕｍ以上であるか、つまり、現在設定されているエリアポインタｉＬＡｐｔｒで指定されるレッスンエリアが曲後端であるかどうかを判断する。曲後端であると、それより後には移動できないので、上記ステップＳＨ５の判断結果が「ＹＥＳ」になり、ステップＳＨ７に進み、曲データ検索ポインタＩをゼロリセットする。
一方、現在設定されているレッスンエリアが曲後端でなければ、上記ステップＳＨ５の判断結果は「ＮＯ」になり、ステップＳＨ６に進み、エリアポインタｉＬＡｐｔｒの値をインクリメントして歩進させた後、ステップＳＨ７に進み、曲データ検索ポインタＩをゼロリセットする。
【００５５】
次いで、ステップＳＨ８では、エリアポインタｉＬＡｐｔｒが指定するレッスンエリアデータｌａ中の開始条件エリアｌａ［ｉＬＡｐｔｒ］．ｉＬＡａｒｅａにおいて定義された開始条件クリアレベルｉＬＡＣｌｅｖｅｌから、エリアポインタｉＬＡｐｔｒが指定するレッスンエリアデータｌａ中のクリアレベルｌａ［ｉＬＡｐｔｒ］．ｉＬＡａｒｅａＣｌｅｖｅｌを減算した値をレジスタａにストアする。
そして、ステップＳＨ９では、レジスタａの値が「０」より大きいか否か、つまり開始条件を満たしているかどうかを判断する。レジスタａの値が「０」より大きく開始条件を満たしていると、判断結果は「ＹＥＳ」になり、後述するステップＳＨ１１に進む。
一方、レジスタａの値が「０」以下で開始条件を満たしていなければ、判断結果が「ＮＯ」になり、ステップＳＨ１０に進み、レジスタｂｕｆの値を、エリアポインタｉＬＡｐｔｒにストアする。これにより、開始条件を満たしていない場合には以前のレッスンエリアに戻される。
【００５６】
次に、ステップＳＨ１１〜ＳＨ１３では、曲データｍｅｌを構成するノートデータｍｅｌ［０］〜［ｎ］の数ＭＡＸＭＥＬに達するまで曲データ検索ポインタＩを歩進させながら、エリアポインタｉＬＡｐｔｒで指定されるレッスンエリアの発音開始ティックｌａ［ｉＬＡｐｔｒ］．ｉＬＡＴｉｍｅＯｎ以上の発音開始時間を持つノートデータｍｅｌ［Ｉ］．ｌＴｉｍｅを検索する。
該当するノートデータｍｅｌ［Ｉ］．ｌＴｉｍｅが検索されると、ステップＳＨ１２の判断結果が「ＹＥＳ」になり、ステップＳＨ１４に進み、曲データ検索ポインタＩの値を、再生制御データ中の曲データポインタｐｌｙ．ｍｅｌｐｔｒにセットする。続いて、ステップＳＨ１５では、エリアポインタｉＬＡｐｔｒで指定されるレッスンエリアの開始ティックｌａ［ｉＬＡｐｔｒ］．ｉＬＡＴｍｅを、再生制御データ中のレッスンエリア開始ティックｐｌｙ．ｌＴｉｃｋＣｕｒｒｉｃｕｌｍにセットして本処理を終える。
【００５７】
ところで、上記ステップＳＨ１１〜ＳＨ１３において、該当するノートデータｍｅｌ［Ｉ］．ｌＴｉｍｅが検索されず、曲データｍｅｌを構成するノートデータｍｅｌ［０］〜［ｎ］の数ＭＡＸＭＥＬを超えるまで曲データ検索ポインタＩを歩進させた場合には、ステップＳＨ１１の判断結果が「ＹＥＳ」となり、前述のステップＳＨ１に処理を戻してレッスンエリア移動指定をやり直す。
【００５８】
このように、変形例によるエリア変更処理では、エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータｌａを参照して、移動先のレッスンエリアの開始条件を調べ、その開始条件を満たしている場合には移動先のレッスンエリア先頭に対応するノートデータｍｅｌを検索して再生可能にし、一方、開始条件を満たしていない場合にはレッスンエリアの移動を指示する以前のレッスンエリアに戻す。
そして、開始条件判定を行った後は、レッスンエリアデータｌａを参照して、エリアポインタｉＬＡｐｔｒで指定されるレッスンエリアの発音開始ティックｌａ［ｉＬＡｐｔｒ］．ｉＬＡＴｉｍｅＯｎ以上の発音開始時間を持つノートデータｍｅｌ［Ｉ］．ｌＴｉｍｅを検索し、該当するノートデータｍｅｌ［Ｉ］を指定する曲データ検索ポインタＩを、曲データポインタｐｌｙ．ｍｅｌｐｔｒにセットすると共に、エリアポインタｉＬＡｐｔｒで指定されるレッスンエリアの開始ティックｌａ［ｉＬＡｐｔｒ］．ｉＬＡＴｍｅを、再生制御データ中のレッスンエリア開始ティックｐｌｙ．ｌＴｉｃｋＣｕｒｒｉｃｕｌｍにセットする。
【００５９】
以上のように、本実施の形態では、練習曲の曲データｍｅｌを複数のレッスンエリアに区分けし、区分けされた各レッスンエリアの開始条件を含むレッスンエリアデータｌａを設けておき、エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータｌａを参照して、移動先のレッスンエリアの開始条件を調べ、その開始条件を満たしている場合には移動先のレッスンエリアに対応付けられた曲データｍｅｌを再生して演奏練習を行わせ、一方、開始条件を満たしていない場合には移動指示前のレッスンエリアに戻り、そのレッスンエリアに対応付けられた曲データｍｅｌを再生して演奏練習を行わせるので、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習するようになる結果、練習意欲を低下させることなく、効果的な演奏練習を行うことが可能になる。
【００６０】
なお、本実施形態では、レッスンエリアデータｌａに登録される各レッスンエリア毎の開始条件（開始条件クリアレベルｉＬＡａｒｅａＣｌｅｖｅｌ：図５参照）を固定的なものとしているが、これに限らず可変的なものとしても良い。つまり、演奏練習毎に評価されるレッスンエリア毎の演奏レベル（習熟度）を、開始条件クリアレベルｉＬＡａｒｅａＣｌｅｖｅｌとしてレッスンエリアデータｌａに登録するようにし、次回演奏練習時に評価された演奏レベルが、前回の演奏レベルを上回り上達したと判断された場合に、次に移行可能なレッスンエリアをユーザに提示する態様とすることも可能である。このようにすれば、ユーザ自ら上達具合を把握でき効果的な演奏練習が可能になる。
【図面の簡単な説明】
【００６１】
【図１】実施の一形態の全体構成を示すブロック図である。
【図２】曲データｍｅｌの構成を示す図である。
【図３】オフバッファデータｏｆｆｂｕｆの構成を示す図である。
【図４】再生制御データｐｌｙの構成を示す図である。
【図５】レッスンエリアデータｌａの構成を示す図である。
【図６】メインルーチンの動作を示すフローチャートである。
【図７】エリア変更処理の動作を示すフローチャートである。
【図８】再生処理の動作を示すフローチャートである。
【図９】終了条件検査処理の動作を示すフローチャートである。
【図１０】再生用変数更新処理の動作を示すフローチャートである。
【図１１】ノートオフ処理の動作を示すフローチャートである。
【図１２】ノートオン処理の動作を示すフローチャートである。
【図１３】変形例によるエリア変更処理の動作を示すフローチャートである。
【符号の説明】
【００６２】
１０  ＣＰＵ
１１  ＲＯＭ
１２  ＲＡＭ
１３  ＭＩＤＩインタフェース
１４  操作部
１５  鍵盤
１６  表示部
２０  電子楽器
１００  演奏練習装置
【図１】
2006215167.tif 000003
【図２】
2006215167.tif 000004
【図３】
2006215167.tif 000005
【図４】
2006215167.tif 000006
【図５】
2006215167.tif 000007
【図６】
2006215167.tif 000008
【図７】
2006215167.tif 000009
【図８】
2006215167.tif 000010
【図９】
2006215167.tif 000011
【図１０】
2006215167.tif 000012
【図１１】
2006215167.tif 000013
【図１２】
2006215167.tif 000014
【図１３】
2006215167.tif 000015