演奏練習装置および演奏練習プログラム
【課題】 効果的な演奏練習が可能な演奏練習装置を実現する。
【解決手段】 曲データmelを複数のレッスンエリアに区分けし、各レッスンエリアの開始条件を含むレッスンエリアデータlaを設ける。エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータlaを参照して、移動先のレッスンエリアの開始条件を調べる。開始条件を満たしている場合には移動先のレッスンエリアに対応付けられた曲データmelを再生して演奏練習を行わせる。一方、開始条件を満たしていない場合には移動指示前のレッスンエリアに戻り、そのレッスンエリアに対応付けられた曲データmelを再生して演奏練習を行わせる。これにより、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習するようになる結果、練習意欲を低下させることなく、効果的な演奏練習を行える。
【解決手段】 曲データmelを複数のレッスンエリアに区分けし、各レッスンエリアの開始条件を含むレッスンエリアデータlaを設ける。エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータlaを参照して、移動先のレッスンエリアの開始条件を調べる。開始条件を満たしている場合には移動先のレッスンエリアに対応付けられた曲データmelを再生して演奏練習を行わせる。一方、開始条件を満たしていない場合には移動指示前のレッスンエリアに戻り、そのレッスンエリアに対応付けられた曲データmelを再生して演奏練習を行わせる。これにより、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習するようになる結果、練習意欲を低下させることなく、効果的な演奏練習を行える。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、練習曲の曲データを再生して演奏操作を練習させる演奏練習装置および演奏練習プログラムに関する。
【背景技術】
【0002】
従来より、練習曲の曲データを再生して演奏操作を練習させる演奏練習装置が知られている。この種の装置として、例えば特許文献1には、曲データを複数の区間に分割して読み出し、各区間毎に曲データと演奏操作に応じて入力される演奏データとを比較して、両データが一致したとき次の区間の曲データを読み出させ、一方、不一致であるときは同一区間の曲データを再び読み出すようにして、演奏ミスした区間をミスせず演奏し得るようになるまで繰り返し練習させてから次の区間に進むようにした技術が開示されている。
【0003】
【特許文献1】特開平5−297795号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
ところで、上記特許文献1に開示の演奏練習装置では、練習曲を複数の区間に区分けしておき、ある区間を間違えずに演奏出来たら次の区間の演奏練習に進むようにしている。従って、例えば曲の始めから演奏難度が高い練習曲であったとすると、演奏操作に慣れ親しんでいない初心者の場合には、演奏ミスを頻発して次の区間の演奏練習に進むことが出来ずに練習意欲を低下させてしまい、効果的な演奏練習を行うことが出来ないという問題がある。
そこで本発明は、このような事情に鑑みてなされたもので、効果的な演奏練習を行うことができる演奏練習装置および演奏練習プログラムを提供することを目的としている。
【課題を解決するための手段】
【0005】
上記目的を達成するため、請求項1に記載の発明では、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶するエリアデータ記憶手段と、複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、前記エリア指定手段により指定された移動先エリアのエリアデータを前記レッスンエリアデータ記憶手段から読み出して移動先エリアの開始条件を満たしている否かを判定する判定手段と、前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段とを具備することを特徴とする。
【0006】
請求項2に記載の発明では、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶するエリアデータ記憶手段と、複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、前記エリア指定手段により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアにおけるクリアレベルと演奏レベルとを前記エリアデータ記憶手段を読み出し、読み出した演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定手段と、前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段とを具備することを特徴とする。
【0007】
請求項3に記載の発明では、複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して移動先エリアの開始条件を満たしている否かを判定する判定処理と、前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理とをコンピュータで実行させることを特徴とする。
【0008】
請求項4に記載の発明では、複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアの演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定処理と、前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理とをコンピュータで実行させることを特徴とする。
【発明の効果】
【0009】
請求項1、3に記載の発明によれば、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶しておき、複数のレッスンエリアの内から移動先エリアを指定すると、指定された移動先エリアのエリアデータを参照して移動先エリアの開始条件を満たしている否かを判定し、開始条件を満たしていると、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていなければ、移動元エリアに対応する曲データを再生するので、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習でき、この結果、練習意欲を低下させることなく、効果的な演奏練習を行うことができるようになる。
【0010】
請求項2、4に記載の発明によれば、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶しておき、複数のレッスンエリアの内から移動先エリアを指定すると、指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアの演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定し、開始条件を満たしていると、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていなければ、移動元エリアに対応する曲データを再生するので、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習でき、この結果、練習意欲を低下させることなく、効果的な演奏練習を行うことができるようになる。
【発明を実施するための最良の形態】
【0011】
以下、図面を参照して本発明の実施の形態について説明する。
A.構成
(1)全体構成
図1は本発明の実施の一形態による演奏練習装置100の構成を示すブロック図である。この図において、CPU10は、ROM11に記憶される練習曲の曲データを、MIDIインフェース13を介して電子楽器20に供給して練習曲を再生させたり、再生された練習曲を手本に鍵盤15を弾くユーザの演奏操作で発生する演奏データを、MIDIインフェース13を介して電子楽器20に供給して発音させる。また、CPU10は、ユーザの演奏操作で発生した演奏データと、それに対応する練習曲の曲データとを比較して演奏練習内容を評価する。本発明の要旨に係わるCPU10の特徴的な処理動作については追って詳述する。
【0012】
ROM11は、プログラムエリアおよびデータエリアを備える。ROM11のプログラムエリアには、後述するメインルーチン、エリア変更処理および再生処理を含む各種制御プログラムが記憶される。ROM11のデータエリアには、演奏練習に供する練習曲の曲データや各種画面データ等が記憶される。曲データの構成については追って説明する。RAM12は、ワークエリアおよびデータエリアを備える。RAM12のワークエリアには、バッファ領域に一時記憶されるオフバッファデータoffbufと、再生制御データplyとが格納される。RAM12のデータエリアには、レッスンエリアデータlaが格納される。上記各データ(オフバッファデータoffbuf、再生制御データplyおよびレッスンエリアデータla)の構成については追って詳述する。
【0013】
MIDIインタフェース13は、CPU10の制御の下に、電子楽器20とMIDIデータを授受する。操作部14は、表示部16に画面表示されるアイコンのクリック操作に応じて、そのアイコンに対応付けられた操作イベントを発生させるマウスや、スイッチ操作に対応したスイッチイベントを発生する各種操作スイッチを備える。本発明に係わる操作スイッチとして、操作部14には、レッスンエリアを指定するエリア指定スイッチ、レッスンエリアの移動を指示するエリア移動スイッチ、レッスンの開始を指示するレッスン開始スイッチおよびレッスンの停止を指示するレッスン停止スイッチが配設される。
なお、本実施形態では、後述するように、上述したエリア指定スイッチ、レッスン開始スイッチおよびレッスン停止スイッチとそれぞれ同等の操作イベントを発生するアイコンを備えたメニュー画面(後述する)を表示部16に画面表示させ、それらアイコンのクリック操作でスイッチ操作を代用することも可能になっている。
【0014】
鍵盤15は、演奏操作(押離鍵操作)に応じた演奏データ(ノートオン/ノートオフイベント)を発生する。表示部16は、例えば液晶パネル等から構成され、CPU10から供給される表示制御信号に応じて、例えばレッスンエリアを指定するエリア指定アイコン、レッスンの開始を指示するレッスン開始アイコンおよびレッスン停止を指示するレッスン停止アイコン等を備えるメニュー画面を画面表示する。電子楽器20は、MIDIインタフェース13を介して受領するMIDIデータ(曲データや演奏データ)を、予め設定される音色の楽音として再生する。
【0015】
(2)曲データmelの構成
図2は、ROM11に記憶される曲データmelの構成を示す図である。曲データmelは、練習曲を構成する各音を表すノートデータmel[0]〜[n]から構成される。ノートデータmel[0]〜[n]は、それぞれノートナンバで表される音高iPitch、tick数(テンポクロック数)で表される発音開始時間lTimeおよび発音期間を表す音長lGateから構成される。
【0016】
(3)オフバッファデータoffbufの構成
図3は、RAM12のワークエリアに設けられたバッファ領域に一時記憶されるオフバッファデータoffbufの構成を示す図である。オフバッファデータoffbufとは、発音(ノートオン)されたノートデータmelに対応してオフバッファ領域に登録されるデータであり、ノートナンバで表される音高iPitchおよびtick数(テンポクロック数)で表される消音時間lTimeから構成される。オフバッファデータoffbuf[0]〜[n]は、対応するノートデータmelが消音された時点で消去される。
【0017】
(4)再生制御データplyの構成
図4は、RAM12のワークエリアに格納される再生制御データplyの構成を示す図である。再生制御データplyは、曲データmelの再生開始時間lBaseTime、現在時刻lNowTime、再生開始時間lBaseTimeから現在時刻lNowTimeまでの経過時間lMeta51Time、経過時間lMeta51Timeをtick数(テンポクロック数)で表現した現在再生位置lNowTick、前回テンポ変更ティックdMeta51Tick、4分音符長のtick数で表される分解能dRes1000、レッスンエリア開始ティックlTickCurriculum、中途再生開始ティックlTickOffset、ティック増分lTickCountIn、現在テンポ値lTempo、オフセットテンポ値lTempoOffset、先頭テンポ値lTempoTop、曲データポインタmelptrおよび状態フラグiPalyから構成される。
【0018】
(5)レッスンエリアデータlaの構成
図5は、RAM12のデータエリアに格納されるレッスンエリアデータlaの構成を示す図である。レッスンエリアデータlaは、練習曲の曲データmelを複数の区間(レッスンエリア)に区分けし、区分けされた各レッスンエリアの属性を表す情報であり、曲データmelを区分けしたレッスンエリアの数を表すレッスンエリア数iLAnum、レッスンエリアを指定するエリアポインタiLAptrおよび各レッスンエリア毎の属性を表すエリア情報la[0]〜[n]から構成される。
各エリア情報la[0]〜[n]は、エリア番号iLArea、エリア開始位置を表す開始ティックlLATime、エリア終了位置を表す終了ティックlLATimeEnd、発音開始ティックlLATimeOn、開始条件エリアiLAarea、開始条件クリアレベルiLAareaClevelおよびクリアレベルiLAClevelを有する。
【0019】
発音開始ティックlLATimeOnは、レッスンエリア先頭の曲データmelの発音タイミングを表す。開始条件エリアiLAareaおよび開始条件クリアレベルiLAareaClevelは、本レッスンエリアの演奏練習を行うための前提条件を表す。本実施形態では、例えば各レッスンエリアにおいてユーザの演奏レベル(習熟度)を5段階で評価するようになっており、開始条件エリアiLAareaにおける演奏レベルが、開始条件クリアレベルiLAareaClevelを超えている場合に、本レッスンエリアの演奏練習を可能とするようになっている。クリアレベルiLAClevelは、本レッスンエリアの演奏レベルを表す。
【0020】
B.動作
次に、図6〜図12を参照して、上記構成による実施形態の動作について説明する。以下では、最初に全体動作としてメインルーチンの動作について説明した後、メインルーチンからコールされるエリア変更処理および再生処理の各動作について述べる。
【0021】
(1)メインルーチンの動作
演奏練習装置100において、メインルーチンが実行されると、CPU10は図6に示すステップSA1に進み、装置各部を初期化するイニシャライズを行った後、ステップSA2に進む。ステップSA2では、ROM11のデータエリアから読み出すメニュー画面データに基づき表示部16にメニュー画面(不図示)を表示する。前述したように、メニュー画面は、レッスンエリアを指定するエリア指定アイコン、レッスンの開始を指示するレッスン開始アイコンおよびレッスンの停止を指示するレッスン停止アイコンを備える画面である。
【0022】
続いて、ステップSA3では、操作部14に配設されるスイッチ操作もしくはメニュー画面におけるアイコン操作のいずれかで行われるコマンド入力の有無を判断する。そして、ユーザがコマンド入力を行うと、ステップSA3の判断結果が「YES」になり、ステップSA4以降に処理を進める。以下、レッスンエリア指定、レッスン開始、レッスン停止およびその他の処理コマンドがそれぞれ入力された場合の動作について説明する。
【0023】
a.レッスンエリア指定の場合
レッスンエリアを指定するコマンドが入力された場合には、ステップSA4の判断結果が「YES」となり、ステップSA5に進み、エリア変更処理を実行する。エリア変更処理では、後述するように、レッスンエリアデータlaを参照して、移動設定されたレッスンエリアの発音開始ティックla[iLAptr].iLATimeOn以上の発音開始時間を持つノートデータmel[I].lTimeを探し出し、それに該当するノートデータmel[I]を指定する曲データ検索ポインタIを、曲データポインタply.melptrにセットすると共に、移動設定されたレッスンエリアの開始ティックla[iLAptr].iLATmeを、レッスンエリア開始ティックply.lTickCurriculmにセットする。この後、上述のステップSA2に処理を戻し、メニュー画面表示状態に復帰する。
【0024】
b.レッスン開始の場合
レッスン開始を指示するコマンドが入力された場合には、ステップSA6の判断結果が「YES」となり、ステップSA7に進み、再生処理を実行する。再生処理では、後述するように、再生処理を終了させる終了条件に合致するまで、後述する「再生用変数更新処理」、「ノートオフ処理」および「ノートオン処理」を実行して、指定されたレッスンエリアに対応する曲データmelを再生した後、上述のステップSA2に処理を戻し、メニュー画面表示状態に復帰する。
【0025】
c.レッスン停止の場合
レッスン停止を指示するコマンドが入力された場合には、ステップSA8の判断結果が「YES」となり、ステップSA9に進み、再生制御データ中の状態フラグply.iPlayに「0」をセットしてレッスン停止状態に設定した後、上述のステップSA2に処理を戻し、メニュー画面表示状態に復帰する。
【0026】
d.その他の処理コマンドの場合
例えば演奏レベルの評価を指示するコマンドが入力された場合には、ステップSA10に進み、ユーザの演奏操作に応じて発生した演奏データと、それに対応する練習曲の曲データとを比較して演奏レベルを判定する等の、その他の処理を実行してから上述のステップSA2に処理を戻し、メニュー画面表示状態に復帰する。
【0027】
(2)エリア変更処理の動作
次に、図7を参照してエリア変更処理の動作を説明する。前述したメインルーチンのステップSA5(図6参照)を介して本処理が実行されると、CPU10は図7に図示するステップSB1に処理を進める。ステップSB1では、エリア移動スイッチの操作で指定されるレッスンエリアの移動方向が、後方移動(曲後端方向への移動)であるか否かを判断する。
【0028】
曲頭方向へレッスンエリアを移動させる前方移動の場合には、上記ステップSB1の判断結果が「NO」になり、ステップSB2に進む。ステップSB2では、エリアポインタiLAptrの値が「0」より大きいか否か、つまり、エリアポインタiLAptrにて現在設定されているレッスンエリアが練習曲の曲頭であるかどうかを判断する。現在設定されているレッスンエリアが曲先頭であると、それより前には移動できないので、上記ステップSB2の判断結果は「NO」になり、ステップSB6に進み、曲データ検索ポインタIをゼロリセットする。 一方、現在設定されているレッスンエリアが曲先頭でなければ、上記ステップSB2の判断結果は「YES」になり、ステップSB3に進み、エリアポインタiLAptrの値をデクリメントした後、ステップSB6に進み、曲データ検索ポインタIをゼロリセットする。
【0029】
これに対し、曲後端方向へレッスンエリアを移動させる後方移動の場合には、上記ステップSB1の判断結果が「YES」になり、ステップSB4に進む。ステップSB4では、曲後端方向に1つ分移動させたエリアポインタiLAptr+1がレッスンエリア数iLAnum以上であるか、つまり、エリアポインタiLAptrにて現在設定されているレッスンエリアが曲後端であるかどうかを判断する。曲後端であると、それより後には移動できないので、上記ステップSB4の判断結果が「NO」になり、ステップSB6に進み、曲データ検索ポインタIをゼロリセットする。
一方、現在設定されているレッスンエリアが曲後端でなければ、上記ステップSB4の判断結果は「NO」になり、ステップSB5に進み、エリアポインタiLAptrの値をインクリメントして歩進させた後、ステップSB6に進み、曲データ検索ポインタIをゼロリセットする。
【0030】
次いで、ステップSB7〜SB9では、曲データmelを構成するノートデータmel[0]〜[n]の数MAXMELに達するまで曲データ検索ポインタIを歩進させながら、移動指定されたレッスンエリアの発音開始ティックla[iLAptr].iLATimeOn以上の発音開始時間を持つノートデータmel[I].lTimeを検索する。
該当するノートデータmel[I].lTimeが検索されると、ステップSB8の判断結果が「YES」になり、ステップSB10に進み、曲データ検索ポインタIの値を、曲データポインタply.melptrにセットする。続いて、ステップSB11では、移動指定されたレッスンエリアの開始ティックla[iLAptr].iLATmeを、レッスンエリア開始ティックply.lTickCurriculmにセットして本処理を終える。
【0031】
このように、エリア変更処理では、エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータlaを参照して、移動指定されたレッスンエリアの発音開始ティックla[iLAptr].iLATimeOn以上の発音開始時間を持つノートデータmel[I].lTimeを検索し、該当するノートデータmel[I]を指定する曲データ検索ポインタIを、曲データポインタply.melptrにセットすると共に、移動指定されたレッスンエリアの開始ティックla[iLAptr].iLATmeを、再生制御データ中のレッスンエリア開始ティックply.lTickCurriculmにセットする。
【0032】
なお、上記ステップSB7〜SB9において、該当するノートデータmel[I].lTimeが検索されず、曲データmelを構成するノートデータmel[0]〜[n]の数MAXMELを超えるまで曲データ検索ポインタIを歩進させた場合には、ステップSB7の判断結果が「YES」となり、前述のステップSB1に処理を戻してレッスンエリア移動をやり直す。
【0033】
(3)再生処理の動作
次に、図8を参照して再生処理の動作を説明する。前述したメインルーチンのステップSA7(図6参照)を介して本処理が実行されると、CPU10は図8に図示するステップSC1に処理を進める。ステップSC1では、再生制御データ中の状態フラグply.iPlayに「1」をセットする。続いて、ステップSC2では、再生処理を終了させる終了条件に合致するかどうかを判断し、終了条件に合致する場合に、再生終了を表す値「−1」を状態フラグply.iPlayにセットする終了条件検査処理(後述する)を実行する。
【0034】
次いで、ステップSC3では、状態フラグply.iPlayの値が「−1」、すなわち再生終了が指示されているかどうかを判断する。再生終了が指示されていると、判断結果は「YES」になり、本処理を完了させる。一方、再生終了が指示されていなければ、判断結果は「NO」になり、ステップSC4〜SC6を介して後述の「再生用変数更新処理」、「ノートオフ処理」および「ノートオン処理」を実行して、指定されたレッスンエリアに対応する曲データmelを順番に再生させて行く。
【0035】
(4)終了条件検査処理の動作
次に、図9を参照して終了条件検査処理の動作を説明する。上述した再生処理のステップSC2(図8参照)を介して本処理が実行されると、CPU10は図9に図示するステップSD1に処理を進める。ステップSD1では、第1の終了条件、すなわち曲データmelを終端まで読み出し終え、かつオフバッファデータoffbufが全て消去された状態であるか否かを判断する。第1の終了条件に合致すると、判断結果は「YES」になり、ステップSD4に進み、再生制御データ中の状態フラグply.iPlayに再生終了を指示する値「−1」をセットして本処理を終える。
【0036】
一方、第1の終了条件に合致しない場合には、上記ステップSD1の判断結果が「NO」になり、ステップSD2に進む。ステップSD2では、第2の終了条件、すなわち現在再生位置ply.lNowTickが、現在設定されているレッスンエリアの終了ティックlLATimeEndを超えているかどうかを判断する。第2の終了条件に合致すると、判断結果は「YES」になり、ステップSD4に進み、状態フラグply.iPlayに再生終了を表す値「−1」をセットして本処理を終える。
【0037】
これに対し、第2の終了条件に合致しない場合には、上記ステップSD2の判断結果が「NO」になり、ステップSD3に進む。ステップSD3では、第3の終了条件、すなわちレッスン停止スイッチ操作あるいはレッスン停止アイコン操作に応じて、再生制御データ中の状態フラグply.iPlayの値が「0」にセットされているかどうかを判断する。第3の終了条件に合致すると、判断結果は「YES」になり、ステップSD4に進み、再生制御データ中の状態フラグply.iPlayに再生終了を表す値「−1」をセットして本処理を終える。一方、第3の終了条件に合致しない場合には、判断結果が「NO」になり、何も行わずに本処理を終える。
【0038】
(5)再生用変数更新処理の動作
次に、図10を参照して再生用変数更新処理の動作を説明する。上述した再生処理のステップSC4(図8参照)を介して本処理が実行されると、CPU10は図10に図示するステップSE1に処理を進める。ステップSE1では、msec単位で表現される現在時刻を、再生制御データ中の現在時刻ply.lNowTimeにストアする。続いて、ステップSE2では、再生制御データ中の現在時刻ply.lNowTimeから再生開始時間lBaseTimeを減算して経過時間ply.lMeta51Timeを算出する。
【0039】
次いで、ステップSE3では、次式(1)に基づきティック数で表現される現在再生位置ply.lNowTickを算出する。
ply.lNowTick=ply.dMeta51Tick+ply.dRes1000×ply.lMeta51Time/(ply.lTempo×ply.lTempoOffset/ply.lTempoTop)+ply.lTickOffset+ply.lTickCurriculum−ply.lTickCountIn …(1)
【0040】
なお、上記(1)式において、ply.dMeta51Tickは前回テンポ変更ティック、ply.dRes1000は4分音符長のtick数(テンポクロック数)で表される分解能、ply.lMeta51Timeは再生開始時点からの経過時間である。ply.lTempoは現在テンポ値、ply.lTempoOffsetはオフセットテンポ値、ply.lTempoTopは先頭テンポ値である。ply.lTickOffsetは中途再生開始ティック、ply.lTickCurriculumはレッスンエリア開始ティック、ply.lTickCountInはティック増分である。
【0041】
次に、ステップSE4では、テンポ変更指示の有無を判断する。テンポ変更指示が無ければ、判断結果は「NO」となり、何も行わずに本処理を完了させるが、テンポ変更指示が有ると、判断結果は「YES」になり、ステップSE5に進む。ステップSE5では、次式(2)に基づき再生制御データ中の前回テンポ変更ティックply.dMeta51Tickを更新する。
ply.dMeta51Tick=ply.dMeta51Tick+
ply.dRes1000×ply.lMeta51Time/(ply.lTempo×ply.lTempoOffset/ply.lTempoTop)…(2)
次いで、ステップSE6では、テンポ変更に伴い、現在時刻ply.lNowTimeを再生開始時間ply.lBaseTimeに更新させ、続くステップSE7では、指定テンポ値を現在テンポ値ply.lTempoに設定して本処理を終える。
【0042】
(6)ノートオフ処理の動作
次に、図11を参照してノートオフ処理の動作を説明する。上述した再生処理のステップSC5(図8参照)を介して本処理が実行されると、CPU10は図11に図示するステップSF1に処理を進め、曲データ検索ポインタIをゼロリセットする。続いて、ステップSF2では、曲データ検索ポインタIがRAM12のバッファ領域に格納可能なオフバッファデータoffbufの数MAXOFFBUF以上であるか否か、すなわち全てのオフバッファデータoffbufについて検索し終えたかどうかを判断する。
【0043】
全てのオフバッファデータoffbufについて検索し終えていなければ、判断結果は「NO」になり、ステップSF3に進む。ステップSF3では、曲データ検索ポインタIで指定されるオフバッファデータoffbuf中の消音時間offbuf[I].lTimeが「NULL(空き状態)」であるか否かを判断する。曲データ検索ポインタIで指定されるオフバッファデータoffbufが空き状態であると、判断結果は「YES」になり、ステップSF7に進み、曲データ検索ポインタIをインクリメントして歩進させた後、上述にステップSF2に処理を戻す。これに対し、曲データ検索ポインタIで指定されるオフバッファデータoffbufが空き状態でなければ、上記ステップSF3の判断結果が「NO」になり、ステップSF4に進む。
【0044】
ステップSF4では、曲データ検索ポインタIで指定されるオフバッファデータoffbuf中の消音時間offbuf[I].lTimeが、現在再生位置ply.lNowTickを過ぎているか否か、つまり消音タイミングに達したかどうかを判断する。消音タイミングに達していない場合、すなわちオフバッファデータoffbuf[I]に対応する曲データmel(ノートデータ)が発音中であれば、判断結果は「YES」になり、ステップSF7にて曲データ検索ポインタIを歩進させて上述のステップSF2に処理を戻す。
【0045】
一方、消音タイミングに達した場合、すなわちオフバッファデータoffbuf[I]に対応する曲データmelが発音済みになると、上記ステップSF4の判断結果は「NO」になり、ステップSF5に進む。ステップSF5では、オフバッファデータoffbuf[I]を、消音を指示するノートオフイベントとしてMIDIインタフェース13を介して電子楽器20に送出する。これにより、電子楽器20側で再生される曲データmelの楽音が消音される。そして、ステップSF6では、曲データ検索ポインタIで指定されるオフバッファデータoffbuf中の消音時間offbuf[I].lTimeを、「NULL(空き状態)」に設定した後、ステップSF7に進む。
【0046】
以後、最大数MAXOFFBUFを超えるまで曲データ検索ポインタIを歩進させながら、発音済みの曲データmelに対応するオフバッファデータoffbuf[I]を検索し、該当するオフバッファデータoffbuf[I]があれば、そのオフバッファデータoffbuf[I]を消音を指示するノートオフイベントとして電子楽器20側に送出して消音指示する一方、該当するオフバッファデータoffbuf中の消音時間offbuf[I].lTimeを「NULL(空き状態)」に設定してバッファ領域から消去する。そして、曲データ検索ポインタIが最大数MAXOFFBUFを超えると、上記ステップSF2の判断結果が「YES」になり、本処理を終える。
【0047】
(7)ノートオン処理の動作
次に、図12を参照してノートオン処理の動作を説明する。上述した再生処理のステップSC6(図8参照)を介して本処理が実行されると、CPU10は図12に図示するステップSG1に処理を進め、再生制御データ中の曲データポインタply.melptrの値を、曲データ検索ポインタIにセットする。続いて、ステップSG2では、曲データ検索ポインタIが、曲データmelを構成するノートデータmel[0]〜[n]の数MAXMELを超えたか否か、すなわち曲データmelを曲終端まで再生し終えたかどうかを判断する。
【0048】
曲データmelを曲終端まで再生し終えていなければ、判断結果は「NO」になり、ステップSG4に進む。ステップSG4では、曲データ検索ポインタIで指定されるノートデータmel中の発音開始時間mel[I].lTimeが、現在再生位置ply.lNowTickを過ぎたか否か、つまり発音タイミングに達したかどうかを判断する。発音タイミングに達していない場合には、判断結果が「NO」になり、ステップSG3に進み、曲データ検索ポインタIの値を、曲データポインタply.melptrに格納して一旦本処理を終える。
一方、発音タイミングに達した場合には、上記ステップSG4の判断結果が「YES」になり、ステップSG5に進み、ノートデータmel[I]の発音を指示するノートオンイベントを発生し、MIDIインタフェース13を介して電子楽器20側に送出して発音指示する。
【0049】
次いで、ステップSG6〜SG8では、検索ポインタjを歩進させて消音時間lTimeが「NULL(空き状態)」のオフバッファデータoffbuf[j]を探し出す。消音時間lTimeが「NULL(空き状態)」のオフバッファデータoffbuf[j]が検索されると、ステップSG7の判断結果が「YES」になり、ステップSG9に進む。ステップSG9では、曲データ検索ポインタIで指定されるノートデータmel中の発音開始時間mel[I].lTimeと音長mel[I].lGateとの加算値を、オフバッファデータoffbuf[j]の消音時間lTimeとしてストアする。また、曲データ検索ポインタIで指定されるノートデータmel中の音高mel[I].iPitchを、オフバッファデータoffbuf[j]の音高iPitchとして格納する。
【0050】
そして、ステップSG10に進み、曲データ検索ポインタIをインクリメントして歩進させた後、上述のステップSG2に処理を戻す。以後、曲データ検索ポインタIがノートデータmel[0]〜[n]の数MAXMELを超えるまで上述したステップSG2〜SG10を繰り返す。そして、曲データmelを曲終端まで再生し終えると、ステップSG2の判断結果が「YES」となり、本処理を終える。
【0051】
C.変形例
前述のエリア変更処理(図7参照)では、レッスンエリアの移動を指示すると、レッスンエリアデータlaを参照して、移動先のレッスンエリア先頭に対応するノートデータmelを検索して再生可能にするようにした。これに対し、変形例によるエリア変更処理では、レッスンエリアの移動を指示すると、レッスンエリアデータlaを参照して、移動先のレッスンエリアの開始条件を調べ、その開始条件を満たしている場合には移動先のレッスンエリア先頭に対応するノートデータmelを検索して再生可能にし、一方、開始条件を満たしていない場合にはレッスンエリアの移動を指示する以前のレッスンエリアに戻すようになっている。
【0052】
以下、こうした変形例によるエリア変更処理の動作について図13を参照して説明する。上述した実施形態と同様、メインルーチンのステップSA5(図6参照)を介して本処理が実行されると、CPU10は図13に図示するステップSH1に処理を進め、現在設定されているエリアポインタiLAptrの値をレジスタbufにストアする。続いて、ステップSH2では、エリア移動スイッチの操作で指定されるレッスンエリアの移動方向が、後方移動(曲後端方向への移動)であるか否かを判断する。
【0053】
曲頭方向へレッスンエリアを移動させる前方移動の場合には、上記ステップSH2の判断結果が「NO」になり、ステップSH3に進む。ステップSH3では、エリアポインタiLAptrの値が「0」より大きいか否か、つまり、現在設定されているエリアポインタiLAptrにて指定されるレッスンエリアが、練習曲の曲頭であるかどうかを判断する。現在設定されているレッスンエリアが曲頭であると、それより前には移動できないので、上記ステップSH3の判断結果は「NO」になり、ステップSH7に進み、曲データ検索ポインタIをゼロリセットする。
一方、現在設定されているレッスンエリアが曲頭でなければ、上記ステップSH3の判断結果は「YES」になり、ステップSH4に進み、エリアポインタiLAptrの値をデクリメントした後、ステップSH7に進み、曲データ検索ポインタIをゼロリセットする。
【0054】
これに対し、曲後端方向へレッスンエリアを移動させる後方移動の場合には、上記ステップSH2の判断結果が「YES」になり、ステップSH5に進む。ステップSH5では、曲後端方向に1つ分移動させたエリアポインタiLAptr+1がレッスンエリア数iLAnum以上であるか、つまり、現在設定されているエリアポインタiLAptrで指定されるレッスンエリアが曲後端であるかどうかを判断する。曲後端であると、それより後には移動できないので、上記ステップSH5の判断結果が「YES」になり、ステップSH7に進み、曲データ検索ポインタIをゼロリセットする。
一方、現在設定されているレッスンエリアが曲後端でなければ、上記ステップSH5の判断結果は「NO」になり、ステップSH6に進み、エリアポインタiLAptrの値をインクリメントして歩進させた後、ステップSH7に進み、曲データ検索ポインタIをゼロリセットする。
【0055】
次いで、ステップSH8では、エリアポインタiLAptrが指定するレッスンエリアデータla中の開始条件エリアla[iLAptr].iLAareaにおいて定義された開始条件クリアレベルiLAClevelから、エリアポインタiLAptrが指定するレッスンエリアデータla中のクリアレベルla[iLAptr].iLAareaClevelを減算した値をレジスタaにストアする。
そして、ステップSH9では、レジスタaの値が「0」より大きいか否か、つまり開始条件を満たしているかどうかを判断する。レジスタaの値が「0」より大きく開始条件を満たしていると、判断結果は「YES」になり、後述するステップSH11に進む。
一方、レジスタaの値が「0」以下で開始条件を満たしていなければ、判断結果が「NO」になり、ステップSH10に進み、レジスタbufの値を、エリアポインタiLAptrにストアする。これにより、開始条件を満たしていない場合には以前のレッスンエリアに戻される。
【0056】
次に、ステップSH11〜SH13では、曲データmelを構成するノートデータmel[0]〜[n]の数MAXMELに達するまで曲データ検索ポインタIを歩進させながら、エリアポインタiLAptrで指定されるレッスンエリアの発音開始ティックla[iLAptr].iLATimeOn以上の発音開始時間を持つノートデータmel[I].lTimeを検索する。
該当するノートデータmel[I].lTimeが検索されると、ステップSH12の判断結果が「YES」になり、ステップSH14に進み、曲データ検索ポインタIの値を、再生制御データ中の曲データポインタply.melptrにセットする。続いて、ステップSH15では、エリアポインタiLAptrで指定されるレッスンエリアの開始ティックla[iLAptr].iLATmeを、再生制御データ中のレッスンエリア開始ティックply.lTickCurriculmにセットして本処理を終える。
【0057】
ところで、上記ステップSH11〜SH13において、該当するノートデータmel[I].lTimeが検索されず、曲データmelを構成するノートデータmel[0]〜[n]の数MAXMELを超えるまで曲データ検索ポインタIを歩進させた場合には、ステップSH11の判断結果が「YES」となり、前述のステップSH1に処理を戻してレッスンエリア移動指定をやり直す。
【0058】
このように、変形例によるエリア変更処理では、エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータlaを参照して、移動先のレッスンエリアの開始条件を調べ、その開始条件を満たしている場合には移動先のレッスンエリア先頭に対応するノートデータmelを検索して再生可能にし、一方、開始条件を満たしていない場合にはレッスンエリアの移動を指示する以前のレッスンエリアに戻す。
そして、開始条件判定を行った後は、レッスンエリアデータlaを参照して、エリアポインタiLAptrで指定されるレッスンエリアの発音開始ティックla[iLAptr].iLATimeOn以上の発音開始時間を持つノートデータmel[I].lTimeを検索し、該当するノートデータmel[I]を指定する曲データ検索ポインタIを、曲データポインタply.melptrにセットすると共に、エリアポインタiLAptrで指定されるレッスンエリアの開始ティックla[iLAptr].iLATmeを、再生制御データ中のレッスンエリア開始ティックply.lTickCurriculmにセットする。
【0059】
以上のように、本実施の形態では、練習曲の曲データmelを複数のレッスンエリアに区分けし、区分けされた各レッスンエリアの開始条件を含むレッスンエリアデータlaを設けておき、エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータlaを参照して、移動先のレッスンエリアの開始条件を調べ、その開始条件を満たしている場合には移動先のレッスンエリアに対応付けられた曲データmelを再生して演奏練習を行わせ、一方、開始条件を満たしていない場合には移動指示前のレッスンエリアに戻り、そのレッスンエリアに対応付けられた曲データmelを再生して演奏練習を行わせるので、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習するようになる結果、練習意欲を低下させることなく、効果的な演奏練習を行うことが可能になる。
【0060】
なお、本実施形態では、レッスンエリアデータlaに登録される各レッスンエリア毎の開始条件(開始条件クリアレベルiLAareaClevel:図5参照)を固定的なものとしているが、これに限らず可変的なものとしても良い。つまり、演奏練習毎に評価されるレッスンエリア毎の演奏レベル(習熟度)を、開始条件クリアレベルiLAareaClevelとしてレッスンエリアデータlaに登録するようにし、次回演奏練習時に評価された演奏レベルが、前回の演奏レベルを上回り上達したと判断された場合に、次に移行可能なレッスンエリアをユーザに提示する態様とすることも可能である。このようにすれば、ユーザ自ら上達具合を把握でき効果的な演奏練習が可能になる。
【図面の簡単な説明】
【0061】
【図1】実施の一形態の全体構成を示すブロック図である。
【図2】曲データmelの構成を示す図である。
【図3】オフバッファデータoffbufの構成を示す図である。
【図4】再生制御データplyの構成を示す図である。
【図5】レッスンエリアデータlaの構成を示す図である。
【図6】メインルーチンの動作を示すフローチャートである。
【図7】エリア変更処理の動作を示すフローチャートである。
【図8】再生処理の動作を示すフローチャートである。
【図9】終了条件検査処理の動作を示すフローチャートである。
【図10】再生用変数更新処理の動作を示すフローチャートである。
【図11】ノートオフ処理の動作を示すフローチャートである。
【図12】ノートオン処理の動作を示すフローチャートである。
【図13】変形例によるエリア変更処理の動作を示すフローチャートである。
【符号の説明】
【0062】
10 CPU
11 ROM
12 RAM
13 MIDIインタフェース
14 操作部
15 鍵盤
16 表示部
20 電子楽器
100 演奏練習装置
【技術分野】
【0001】
本発明は、練習曲の曲データを再生して演奏操作を練習させる演奏練習装置および演奏練習プログラムに関する。
【背景技術】
【0002】
従来より、練習曲の曲データを再生して演奏操作を練習させる演奏練習装置が知られている。この種の装置として、例えば特許文献1には、曲データを複数の区間に分割して読み出し、各区間毎に曲データと演奏操作に応じて入力される演奏データとを比較して、両データが一致したとき次の区間の曲データを読み出させ、一方、不一致であるときは同一区間の曲データを再び読み出すようにして、演奏ミスした区間をミスせず演奏し得るようになるまで繰り返し練習させてから次の区間に進むようにした技術が開示されている。
【0003】
【特許文献1】特開平5−297795号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
ところで、上記特許文献1に開示の演奏練習装置では、練習曲を複数の区間に区分けしておき、ある区間を間違えずに演奏出来たら次の区間の演奏練習に進むようにしている。従って、例えば曲の始めから演奏難度が高い練習曲であったとすると、演奏操作に慣れ親しんでいない初心者の場合には、演奏ミスを頻発して次の区間の演奏練習に進むことが出来ずに練習意欲を低下させてしまい、効果的な演奏練習を行うことが出来ないという問題がある。
そこで本発明は、このような事情に鑑みてなされたもので、効果的な演奏練習を行うことができる演奏練習装置および演奏練習プログラムを提供することを目的としている。
【課題を解決するための手段】
【0005】
上記目的を達成するため、請求項1に記載の発明では、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶するエリアデータ記憶手段と、複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、前記エリア指定手段により指定された移動先エリアのエリアデータを前記レッスンエリアデータ記憶手段から読み出して移動先エリアの開始条件を満たしている否かを判定する判定手段と、前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段とを具備することを特徴とする。
【0006】
請求項2に記載の発明では、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶するエリアデータ記憶手段と、複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、前記エリア指定手段により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアにおけるクリアレベルと演奏レベルとを前記エリアデータ記憶手段を読み出し、読み出した演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定手段と、前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段とを具備することを特徴とする。
【0007】
請求項3に記載の発明では、複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して移動先エリアの開始条件を満たしている否かを判定する判定処理と、前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理とをコンピュータで実行させることを特徴とする。
【0008】
請求項4に記載の発明では、複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアの演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定処理と、前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理とをコンピュータで実行させることを特徴とする。
【発明の効果】
【0009】
請求項1、3に記載の発明によれば、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶しておき、複数のレッスンエリアの内から移動先エリアを指定すると、指定された移動先エリアのエリアデータを参照して移動先エリアの開始条件を満たしている否かを判定し、開始条件を満たしていると、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていなければ、移動元エリアに対応する曲データを再生するので、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習でき、この結果、練習意欲を低下させることなく、効果的な演奏練習を行うことができるようになる。
【0010】
請求項2、4に記載の発明によれば、練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶しておき、複数のレッスンエリアの内から移動先エリアを指定すると、指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアの演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定し、開始条件を満たしていると、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていなければ、移動元エリアに対応する曲データを再生するので、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習でき、この結果、練習意欲を低下させることなく、効果的な演奏練習を行うことができるようになる。
【発明を実施するための最良の形態】
【0011】
以下、図面を参照して本発明の実施の形態について説明する。
A.構成
(1)全体構成
図1は本発明の実施の一形態による演奏練習装置100の構成を示すブロック図である。この図において、CPU10は、ROM11に記憶される練習曲の曲データを、MIDIインフェース13を介して電子楽器20に供給して練習曲を再生させたり、再生された練習曲を手本に鍵盤15を弾くユーザの演奏操作で発生する演奏データを、MIDIインフェース13を介して電子楽器20に供給して発音させる。また、CPU10は、ユーザの演奏操作で発生した演奏データと、それに対応する練習曲の曲データとを比較して演奏練習内容を評価する。本発明の要旨に係わるCPU10の特徴的な処理動作については追って詳述する。
【0012】
ROM11は、プログラムエリアおよびデータエリアを備える。ROM11のプログラムエリアには、後述するメインルーチン、エリア変更処理および再生処理を含む各種制御プログラムが記憶される。ROM11のデータエリアには、演奏練習に供する練習曲の曲データや各種画面データ等が記憶される。曲データの構成については追って説明する。RAM12は、ワークエリアおよびデータエリアを備える。RAM12のワークエリアには、バッファ領域に一時記憶されるオフバッファデータoffbufと、再生制御データplyとが格納される。RAM12のデータエリアには、レッスンエリアデータlaが格納される。上記各データ(オフバッファデータoffbuf、再生制御データplyおよびレッスンエリアデータla)の構成については追って詳述する。
【0013】
MIDIインタフェース13は、CPU10の制御の下に、電子楽器20とMIDIデータを授受する。操作部14は、表示部16に画面表示されるアイコンのクリック操作に応じて、そのアイコンに対応付けられた操作イベントを発生させるマウスや、スイッチ操作に対応したスイッチイベントを発生する各種操作スイッチを備える。本発明に係わる操作スイッチとして、操作部14には、レッスンエリアを指定するエリア指定スイッチ、レッスンエリアの移動を指示するエリア移動スイッチ、レッスンの開始を指示するレッスン開始スイッチおよびレッスンの停止を指示するレッスン停止スイッチが配設される。
なお、本実施形態では、後述するように、上述したエリア指定スイッチ、レッスン開始スイッチおよびレッスン停止スイッチとそれぞれ同等の操作イベントを発生するアイコンを備えたメニュー画面(後述する)を表示部16に画面表示させ、それらアイコンのクリック操作でスイッチ操作を代用することも可能になっている。
【0014】
鍵盤15は、演奏操作(押離鍵操作)に応じた演奏データ(ノートオン/ノートオフイベント)を発生する。表示部16は、例えば液晶パネル等から構成され、CPU10から供給される表示制御信号に応じて、例えばレッスンエリアを指定するエリア指定アイコン、レッスンの開始を指示するレッスン開始アイコンおよびレッスン停止を指示するレッスン停止アイコン等を備えるメニュー画面を画面表示する。電子楽器20は、MIDIインタフェース13を介して受領するMIDIデータ(曲データや演奏データ)を、予め設定される音色の楽音として再生する。
【0015】
(2)曲データmelの構成
図2は、ROM11に記憶される曲データmelの構成を示す図である。曲データmelは、練習曲を構成する各音を表すノートデータmel[0]〜[n]から構成される。ノートデータmel[0]〜[n]は、それぞれノートナンバで表される音高iPitch、tick数(テンポクロック数)で表される発音開始時間lTimeおよび発音期間を表す音長lGateから構成される。
【0016】
(3)オフバッファデータoffbufの構成
図3は、RAM12のワークエリアに設けられたバッファ領域に一時記憶されるオフバッファデータoffbufの構成を示す図である。オフバッファデータoffbufとは、発音(ノートオン)されたノートデータmelに対応してオフバッファ領域に登録されるデータであり、ノートナンバで表される音高iPitchおよびtick数(テンポクロック数)で表される消音時間lTimeから構成される。オフバッファデータoffbuf[0]〜[n]は、対応するノートデータmelが消音された時点で消去される。
【0017】
(4)再生制御データplyの構成
図4は、RAM12のワークエリアに格納される再生制御データplyの構成を示す図である。再生制御データplyは、曲データmelの再生開始時間lBaseTime、現在時刻lNowTime、再生開始時間lBaseTimeから現在時刻lNowTimeまでの経過時間lMeta51Time、経過時間lMeta51Timeをtick数(テンポクロック数)で表現した現在再生位置lNowTick、前回テンポ変更ティックdMeta51Tick、4分音符長のtick数で表される分解能dRes1000、レッスンエリア開始ティックlTickCurriculum、中途再生開始ティックlTickOffset、ティック増分lTickCountIn、現在テンポ値lTempo、オフセットテンポ値lTempoOffset、先頭テンポ値lTempoTop、曲データポインタmelptrおよび状態フラグiPalyから構成される。
【0018】
(5)レッスンエリアデータlaの構成
図5は、RAM12のデータエリアに格納されるレッスンエリアデータlaの構成を示す図である。レッスンエリアデータlaは、練習曲の曲データmelを複数の区間(レッスンエリア)に区分けし、区分けされた各レッスンエリアの属性を表す情報であり、曲データmelを区分けしたレッスンエリアの数を表すレッスンエリア数iLAnum、レッスンエリアを指定するエリアポインタiLAptrおよび各レッスンエリア毎の属性を表すエリア情報la[0]〜[n]から構成される。
各エリア情報la[0]〜[n]は、エリア番号iLArea、エリア開始位置を表す開始ティックlLATime、エリア終了位置を表す終了ティックlLATimeEnd、発音開始ティックlLATimeOn、開始条件エリアiLAarea、開始条件クリアレベルiLAareaClevelおよびクリアレベルiLAClevelを有する。
【0019】
発音開始ティックlLATimeOnは、レッスンエリア先頭の曲データmelの発音タイミングを表す。開始条件エリアiLAareaおよび開始条件クリアレベルiLAareaClevelは、本レッスンエリアの演奏練習を行うための前提条件を表す。本実施形態では、例えば各レッスンエリアにおいてユーザの演奏レベル(習熟度)を5段階で評価するようになっており、開始条件エリアiLAareaにおける演奏レベルが、開始条件クリアレベルiLAareaClevelを超えている場合に、本レッスンエリアの演奏練習を可能とするようになっている。クリアレベルiLAClevelは、本レッスンエリアの演奏レベルを表す。
【0020】
B.動作
次に、図6〜図12を参照して、上記構成による実施形態の動作について説明する。以下では、最初に全体動作としてメインルーチンの動作について説明した後、メインルーチンからコールされるエリア変更処理および再生処理の各動作について述べる。
【0021】
(1)メインルーチンの動作
演奏練習装置100において、メインルーチンが実行されると、CPU10は図6に示すステップSA1に進み、装置各部を初期化するイニシャライズを行った後、ステップSA2に進む。ステップSA2では、ROM11のデータエリアから読み出すメニュー画面データに基づき表示部16にメニュー画面(不図示)を表示する。前述したように、メニュー画面は、レッスンエリアを指定するエリア指定アイコン、レッスンの開始を指示するレッスン開始アイコンおよびレッスンの停止を指示するレッスン停止アイコンを備える画面である。
【0022】
続いて、ステップSA3では、操作部14に配設されるスイッチ操作もしくはメニュー画面におけるアイコン操作のいずれかで行われるコマンド入力の有無を判断する。そして、ユーザがコマンド入力を行うと、ステップSA3の判断結果が「YES」になり、ステップSA4以降に処理を進める。以下、レッスンエリア指定、レッスン開始、レッスン停止およびその他の処理コマンドがそれぞれ入力された場合の動作について説明する。
【0023】
a.レッスンエリア指定の場合
レッスンエリアを指定するコマンドが入力された場合には、ステップSA4の判断結果が「YES」となり、ステップSA5に進み、エリア変更処理を実行する。エリア変更処理では、後述するように、レッスンエリアデータlaを参照して、移動設定されたレッスンエリアの発音開始ティックla[iLAptr].iLATimeOn以上の発音開始時間を持つノートデータmel[I].lTimeを探し出し、それに該当するノートデータmel[I]を指定する曲データ検索ポインタIを、曲データポインタply.melptrにセットすると共に、移動設定されたレッスンエリアの開始ティックla[iLAptr].iLATmeを、レッスンエリア開始ティックply.lTickCurriculmにセットする。この後、上述のステップSA2に処理を戻し、メニュー画面表示状態に復帰する。
【0024】
b.レッスン開始の場合
レッスン開始を指示するコマンドが入力された場合には、ステップSA6の判断結果が「YES」となり、ステップSA7に進み、再生処理を実行する。再生処理では、後述するように、再生処理を終了させる終了条件に合致するまで、後述する「再生用変数更新処理」、「ノートオフ処理」および「ノートオン処理」を実行して、指定されたレッスンエリアに対応する曲データmelを再生した後、上述のステップSA2に処理を戻し、メニュー画面表示状態に復帰する。
【0025】
c.レッスン停止の場合
レッスン停止を指示するコマンドが入力された場合には、ステップSA8の判断結果が「YES」となり、ステップSA9に進み、再生制御データ中の状態フラグply.iPlayに「0」をセットしてレッスン停止状態に設定した後、上述のステップSA2に処理を戻し、メニュー画面表示状態に復帰する。
【0026】
d.その他の処理コマンドの場合
例えば演奏レベルの評価を指示するコマンドが入力された場合には、ステップSA10に進み、ユーザの演奏操作に応じて発生した演奏データと、それに対応する練習曲の曲データとを比較して演奏レベルを判定する等の、その他の処理を実行してから上述のステップSA2に処理を戻し、メニュー画面表示状態に復帰する。
【0027】
(2)エリア変更処理の動作
次に、図7を参照してエリア変更処理の動作を説明する。前述したメインルーチンのステップSA5(図6参照)を介して本処理が実行されると、CPU10は図7に図示するステップSB1に処理を進める。ステップSB1では、エリア移動スイッチの操作で指定されるレッスンエリアの移動方向が、後方移動(曲後端方向への移動)であるか否かを判断する。
【0028】
曲頭方向へレッスンエリアを移動させる前方移動の場合には、上記ステップSB1の判断結果が「NO」になり、ステップSB2に進む。ステップSB2では、エリアポインタiLAptrの値が「0」より大きいか否か、つまり、エリアポインタiLAptrにて現在設定されているレッスンエリアが練習曲の曲頭であるかどうかを判断する。現在設定されているレッスンエリアが曲先頭であると、それより前には移動できないので、上記ステップSB2の判断結果は「NO」になり、ステップSB6に進み、曲データ検索ポインタIをゼロリセットする。 一方、現在設定されているレッスンエリアが曲先頭でなければ、上記ステップSB2の判断結果は「YES」になり、ステップSB3に進み、エリアポインタiLAptrの値をデクリメントした後、ステップSB6に進み、曲データ検索ポインタIをゼロリセットする。
【0029】
これに対し、曲後端方向へレッスンエリアを移動させる後方移動の場合には、上記ステップSB1の判断結果が「YES」になり、ステップSB4に進む。ステップSB4では、曲後端方向に1つ分移動させたエリアポインタiLAptr+1がレッスンエリア数iLAnum以上であるか、つまり、エリアポインタiLAptrにて現在設定されているレッスンエリアが曲後端であるかどうかを判断する。曲後端であると、それより後には移動できないので、上記ステップSB4の判断結果が「NO」になり、ステップSB6に進み、曲データ検索ポインタIをゼロリセットする。
一方、現在設定されているレッスンエリアが曲後端でなければ、上記ステップSB4の判断結果は「NO」になり、ステップSB5に進み、エリアポインタiLAptrの値をインクリメントして歩進させた後、ステップSB6に進み、曲データ検索ポインタIをゼロリセットする。
【0030】
次いで、ステップSB7〜SB9では、曲データmelを構成するノートデータmel[0]〜[n]の数MAXMELに達するまで曲データ検索ポインタIを歩進させながら、移動指定されたレッスンエリアの発音開始ティックla[iLAptr].iLATimeOn以上の発音開始時間を持つノートデータmel[I].lTimeを検索する。
該当するノートデータmel[I].lTimeが検索されると、ステップSB8の判断結果が「YES」になり、ステップSB10に進み、曲データ検索ポインタIの値を、曲データポインタply.melptrにセットする。続いて、ステップSB11では、移動指定されたレッスンエリアの開始ティックla[iLAptr].iLATmeを、レッスンエリア開始ティックply.lTickCurriculmにセットして本処理を終える。
【0031】
このように、エリア変更処理では、エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータlaを参照して、移動指定されたレッスンエリアの発音開始ティックla[iLAptr].iLATimeOn以上の発音開始時間を持つノートデータmel[I].lTimeを検索し、該当するノートデータmel[I]を指定する曲データ検索ポインタIを、曲データポインタply.melptrにセットすると共に、移動指定されたレッスンエリアの開始ティックla[iLAptr].iLATmeを、再生制御データ中のレッスンエリア開始ティックply.lTickCurriculmにセットする。
【0032】
なお、上記ステップSB7〜SB9において、該当するノートデータmel[I].lTimeが検索されず、曲データmelを構成するノートデータmel[0]〜[n]の数MAXMELを超えるまで曲データ検索ポインタIを歩進させた場合には、ステップSB7の判断結果が「YES」となり、前述のステップSB1に処理を戻してレッスンエリア移動をやり直す。
【0033】
(3)再生処理の動作
次に、図8を参照して再生処理の動作を説明する。前述したメインルーチンのステップSA7(図6参照)を介して本処理が実行されると、CPU10は図8に図示するステップSC1に処理を進める。ステップSC1では、再生制御データ中の状態フラグply.iPlayに「1」をセットする。続いて、ステップSC2では、再生処理を終了させる終了条件に合致するかどうかを判断し、終了条件に合致する場合に、再生終了を表す値「−1」を状態フラグply.iPlayにセットする終了条件検査処理(後述する)を実行する。
【0034】
次いで、ステップSC3では、状態フラグply.iPlayの値が「−1」、すなわち再生終了が指示されているかどうかを判断する。再生終了が指示されていると、判断結果は「YES」になり、本処理を完了させる。一方、再生終了が指示されていなければ、判断結果は「NO」になり、ステップSC4〜SC6を介して後述の「再生用変数更新処理」、「ノートオフ処理」および「ノートオン処理」を実行して、指定されたレッスンエリアに対応する曲データmelを順番に再生させて行く。
【0035】
(4)終了条件検査処理の動作
次に、図9を参照して終了条件検査処理の動作を説明する。上述した再生処理のステップSC2(図8参照)を介して本処理が実行されると、CPU10は図9に図示するステップSD1に処理を進める。ステップSD1では、第1の終了条件、すなわち曲データmelを終端まで読み出し終え、かつオフバッファデータoffbufが全て消去された状態であるか否かを判断する。第1の終了条件に合致すると、判断結果は「YES」になり、ステップSD4に進み、再生制御データ中の状態フラグply.iPlayに再生終了を指示する値「−1」をセットして本処理を終える。
【0036】
一方、第1の終了条件に合致しない場合には、上記ステップSD1の判断結果が「NO」になり、ステップSD2に進む。ステップSD2では、第2の終了条件、すなわち現在再生位置ply.lNowTickが、現在設定されているレッスンエリアの終了ティックlLATimeEndを超えているかどうかを判断する。第2の終了条件に合致すると、判断結果は「YES」になり、ステップSD4に進み、状態フラグply.iPlayに再生終了を表す値「−1」をセットして本処理を終える。
【0037】
これに対し、第2の終了条件に合致しない場合には、上記ステップSD2の判断結果が「NO」になり、ステップSD3に進む。ステップSD3では、第3の終了条件、すなわちレッスン停止スイッチ操作あるいはレッスン停止アイコン操作に応じて、再生制御データ中の状態フラグply.iPlayの値が「0」にセットされているかどうかを判断する。第3の終了条件に合致すると、判断結果は「YES」になり、ステップSD4に進み、再生制御データ中の状態フラグply.iPlayに再生終了を表す値「−1」をセットして本処理を終える。一方、第3の終了条件に合致しない場合には、判断結果が「NO」になり、何も行わずに本処理を終える。
【0038】
(5)再生用変数更新処理の動作
次に、図10を参照して再生用変数更新処理の動作を説明する。上述した再生処理のステップSC4(図8参照)を介して本処理が実行されると、CPU10は図10に図示するステップSE1に処理を進める。ステップSE1では、msec単位で表現される現在時刻を、再生制御データ中の現在時刻ply.lNowTimeにストアする。続いて、ステップSE2では、再生制御データ中の現在時刻ply.lNowTimeから再生開始時間lBaseTimeを減算して経過時間ply.lMeta51Timeを算出する。
【0039】
次いで、ステップSE3では、次式(1)に基づきティック数で表現される現在再生位置ply.lNowTickを算出する。
ply.lNowTick=ply.dMeta51Tick+ply.dRes1000×ply.lMeta51Time/(ply.lTempo×ply.lTempoOffset/ply.lTempoTop)+ply.lTickOffset+ply.lTickCurriculum−ply.lTickCountIn …(1)
【0040】
なお、上記(1)式において、ply.dMeta51Tickは前回テンポ変更ティック、ply.dRes1000は4分音符長のtick数(テンポクロック数)で表される分解能、ply.lMeta51Timeは再生開始時点からの経過時間である。ply.lTempoは現在テンポ値、ply.lTempoOffsetはオフセットテンポ値、ply.lTempoTopは先頭テンポ値である。ply.lTickOffsetは中途再生開始ティック、ply.lTickCurriculumはレッスンエリア開始ティック、ply.lTickCountInはティック増分である。
【0041】
次に、ステップSE4では、テンポ変更指示の有無を判断する。テンポ変更指示が無ければ、判断結果は「NO」となり、何も行わずに本処理を完了させるが、テンポ変更指示が有ると、判断結果は「YES」になり、ステップSE5に進む。ステップSE5では、次式(2)に基づき再生制御データ中の前回テンポ変更ティックply.dMeta51Tickを更新する。
ply.dMeta51Tick=ply.dMeta51Tick+
ply.dRes1000×ply.lMeta51Time/(ply.lTempo×ply.lTempoOffset/ply.lTempoTop)…(2)
次いで、ステップSE6では、テンポ変更に伴い、現在時刻ply.lNowTimeを再生開始時間ply.lBaseTimeに更新させ、続くステップSE7では、指定テンポ値を現在テンポ値ply.lTempoに設定して本処理を終える。
【0042】
(6)ノートオフ処理の動作
次に、図11を参照してノートオフ処理の動作を説明する。上述した再生処理のステップSC5(図8参照)を介して本処理が実行されると、CPU10は図11に図示するステップSF1に処理を進め、曲データ検索ポインタIをゼロリセットする。続いて、ステップSF2では、曲データ検索ポインタIがRAM12のバッファ領域に格納可能なオフバッファデータoffbufの数MAXOFFBUF以上であるか否か、すなわち全てのオフバッファデータoffbufについて検索し終えたかどうかを判断する。
【0043】
全てのオフバッファデータoffbufについて検索し終えていなければ、判断結果は「NO」になり、ステップSF3に進む。ステップSF3では、曲データ検索ポインタIで指定されるオフバッファデータoffbuf中の消音時間offbuf[I].lTimeが「NULL(空き状態)」であるか否かを判断する。曲データ検索ポインタIで指定されるオフバッファデータoffbufが空き状態であると、判断結果は「YES」になり、ステップSF7に進み、曲データ検索ポインタIをインクリメントして歩進させた後、上述にステップSF2に処理を戻す。これに対し、曲データ検索ポインタIで指定されるオフバッファデータoffbufが空き状態でなければ、上記ステップSF3の判断結果が「NO」になり、ステップSF4に進む。
【0044】
ステップSF4では、曲データ検索ポインタIで指定されるオフバッファデータoffbuf中の消音時間offbuf[I].lTimeが、現在再生位置ply.lNowTickを過ぎているか否か、つまり消音タイミングに達したかどうかを判断する。消音タイミングに達していない場合、すなわちオフバッファデータoffbuf[I]に対応する曲データmel(ノートデータ)が発音中であれば、判断結果は「YES」になり、ステップSF7にて曲データ検索ポインタIを歩進させて上述のステップSF2に処理を戻す。
【0045】
一方、消音タイミングに達した場合、すなわちオフバッファデータoffbuf[I]に対応する曲データmelが発音済みになると、上記ステップSF4の判断結果は「NO」になり、ステップSF5に進む。ステップSF5では、オフバッファデータoffbuf[I]を、消音を指示するノートオフイベントとしてMIDIインタフェース13を介して電子楽器20に送出する。これにより、電子楽器20側で再生される曲データmelの楽音が消音される。そして、ステップSF6では、曲データ検索ポインタIで指定されるオフバッファデータoffbuf中の消音時間offbuf[I].lTimeを、「NULL(空き状態)」に設定した後、ステップSF7に進む。
【0046】
以後、最大数MAXOFFBUFを超えるまで曲データ検索ポインタIを歩進させながら、発音済みの曲データmelに対応するオフバッファデータoffbuf[I]を検索し、該当するオフバッファデータoffbuf[I]があれば、そのオフバッファデータoffbuf[I]を消音を指示するノートオフイベントとして電子楽器20側に送出して消音指示する一方、該当するオフバッファデータoffbuf中の消音時間offbuf[I].lTimeを「NULL(空き状態)」に設定してバッファ領域から消去する。そして、曲データ検索ポインタIが最大数MAXOFFBUFを超えると、上記ステップSF2の判断結果が「YES」になり、本処理を終える。
【0047】
(7)ノートオン処理の動作
次に、図12を参照してノートオン処理の動作を説明する。上述した再生処理のステップSC6(図8参照)を介して本処理が実行されると、CPU10は図12に図示するステップSG1に処理を進め、再生制御データ中の曲データポインタply.melptrの値を、曲データ検索ポインタIにセットする。続いて、ステップSG2では、曲データ検索ポインタIが、曲データmelを構成するノートデータmel[0]〜[n]の数MAXMELを超えたか否か、すなわち曲データmelを曲終端まで再生し終えたかどうかを判断する。
【0048】
曲データmelを曲終端まで再生し終えていなければ、判断結果は「NO」になり、ステップSG4に進む。ステップSG4では、曲データ検索ポインタIで指定されるノートデータmel中の発音開始時間mel[I].lTimeが、現在再生位置ply.lNowTickを過ぎたか否か、つまり発音タイミングに達したかどうかを判断する。発音タイミングに達していない場合には、判断結果が「NO」になり、ステップSG3に進み、曲データ検索ポインタIの値を、曲データポインタply.melptrに格納して一旦本処理を終える。
一方、発音タイミングに達した場合には、上記ステップSG4の判断結果が「YES」になり、ステップSG5に進み、ノートデータmel[I]の発音を指示するノートオンイベントを発生し、MIDIインタフェース13を介して電子楽器20側に送出して発音指示する。
【0049】
次いで、ステップSG6〜SG8では、検索ポインタjを歩進させて消音時間lTimeが「NULL(空き状態)」のオフバッファデータoffbuf[j]を探し出す。消音時間lTimeが「NULL(空き状態)」のオフバッファデータoffbuf[j]が検索されると、ステップSG7の判断結果が「YES」になり、ステップSG9に進む。ステップSG9では、曲データ検索ポインタIで指定されるノートデータmel中の発音開始時間mel[I].lTimeと音長mel[I].lGateとの加算値を、オフバッファデータoffbuf[j]の消音時間lTimeとしてストアする。また、曲データ検索ポインタIで指定されるノートデータmel中の音高mel[I].iPitchを、オフバッファデータoffbuf[j]の音高iPitchとして格納する。
【0050】
そして、ステップSG10に進み、曲データ検索ポインタIをインクリメントして歩進させた後、上述のステップSG2に処理を戻す。以後、曲データ検索ポインタIがノートデータmel[0]〜[n]の数MAXMELを超えるまで上述したステップSG2〜SG10を繰り返す。そして、曲データmelを曲終端まで再生し終えると、ステップSG2の判断結果が「YES」となり、本処理を終える。
【0051】
C.変形例
前述のエリア変更処理(図7参照)では、レッスンエリアの移動を指示すると、レッスンエリアデータlaを参照して、移動先のレッスンエリア先頭に対応するノートデータmelを検索して再生可能にするようにした。これに対し、変形例によるエリア変更処理では、レッスンエリアの移動を指示すると、レッスンエリアデータlaを参照して、移動先のレッスンエリアの開始条件を調べ、その開始条件を満たしている場合には移動先のレッスンエリア先頭に対応するノートデータmelを検索して再生可能にし、一方、開始条件を満たしていない場合にはレッスンエリアの移動を指示する以前のレッスンエリアに戻すようになっている。
【0052】
以下、こうした変形例によるエリア変更処理の動作について図13を参照して説明する。上述した実施形態と同様、メインルーチンのステップSA5(図6参照)を介して本処理が実行されると、CPU10は図13に図示するステップSH1に処理を進め、現在設定されているエリアポインタiLAptrの値をレジスタbufにストアする。続いて、ステップSH2では、エリア移動スイッチの操作で指定されるレッスンエリアの移動方向が、後方移動(曲後端方向への移動)であるか否かを判断する。
【0053】
曲頭方向へレッスンエリアを移動させる前方移動の場合には、上記ステップSH2の判断結果が「NO」になり、ステップSH3に進む。ステップSH3では、エリアポインタiLAptrの値が「0」より大きいか否か、つまり、現在設定されているエリアポインタiLAptrにて指定されるレッスンエリアが、練習曲の曲頭であるかどうかを判断する。現在設定されているレッスンエリアが曲頭であると、それより前には移動できないので、上記ステップSH3の判断結果は「NO」になり、ステップSH7に進み、曲データ検索ポインタIをゼロリセットする。
一方、現在設定されているレッスンエリアが曲頭でなければ、上記ステップSH3の判断結果は「YES」になり、ステップSH4に進み、エリアポインタiLAptrの値をデクリメントした後、ステップSH7に進み、曲データ検索ポインタIをゼロリセットする。
【0054】
これに対し、曲後端方向へレッスンエリアを移動させる後方移動の場合には、上記ステップSH2の判断結果が「YES」になり、ステップSH5に進む。ステップSH5では、曲後端方向に1つ分移動させたエリアポインタiLAptr+1がレッスンエリア数iLAnum以上であるか、つまり、現在設定されているエリアポインタiLAptrで指定されるレッスンエリアが曲後端であるかどうかを判断する。曲後端であると、それより後には移動できないので、上記ステップSH5の判断結果が「YES」になり、ステップSH7に進み、曲データ検索ポインタIをゼロリセットする。
一方、現在設定されているレッスンエリアが曲後端でなければ、上記ステップSH5の判断結果は「NO」になり、ステップSH6に進み、エリアポインタiLAptrの値をインクリメントして歩進させた後、ステップSH7に進み、曲データ検索ポインタIをゼロリセットする。
【0055】
次いで、ステップSH8では、エリアポインタiLAptrが指定するレッスンエリアデータla中の開始条件エリアla[iLAptr].iLAareaにおいて定義された開始条件クリアレベルiLAClevelから、エリアポインタiLAptrが指定するレッスンエリアデータla中のクリアレベルla[iLAptr].iLAareaClevelを減算した値をレジスタaにストアする。
そして、ステップSH9では、レジスタaの値が「0」より大きいか否か、つまり開始条件を満たしているかどうかを判断する。レジスタaの値が「0」より大きく開始条件を満たしていると、判断結果は「YES」になり、後述するステップSH11に進む。
一方、レジスタaの値が「0」以下で開始条件を満たしていなければ、判断結果が「NO」になり、ステップSH10に進み、レジスタbufの値を、エリアポインタiLAptrにストアする。これにより、開始条件を満たしていない場合には以前のレッスンエリアに戻される。
【0056】
次に、ステップSH11〜SH13では、曲データmelを構成するノートデータmel[0]〜[n]の数MAXMELに達するまで曲データ検索ポインタIを歩進させながら、エリアポインタiLAptrで指定されるレッスンエリアの発音開始ティックla[iLAptr].iLATimeOn以上の発音開始時間を持つノートデータmel[I].lTimeを検索する。
該当するノートデータmel[I].lTimeが検索されると、ステップSH12の判断結果が「YES」になり、ステップSH14に進み、曲データ検索ポインタIの値を、再生制御データ中の曲データポインタply.melptrにセットする。続いて、ステップSH15では、エリアポインタiLAptrで指定されるレッスンエリアの開始ティックla[iLAptr].iLATmeを、再生制御データ中のレッスンエリア開始ティックply.lTickCurriculmにセットして本処理を終える。
【0057】
ところで、上記ステップSH11〜SH13において、該当するノートデータmel[I].lTimeが検索されず、曲データmelを構成するノートデータmel[0]〜[n]の数MAXMELを超えるまで曲データ検索ポインタIを歩進させた場合には、ステップSH11の判断結果が「YES」となり、前述のステップSH1に処理を戻してレッスンエリア移動指定をやり直す。
【0058】
このように、変形例によるエリア変更処理では、エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータlaを参照して、移動先のレッスンエリアの開始条件を調べ、その開始条件を満たしている場合には移動先のレッスンエリア先頭に対応するノートデータmelを検索して再生可能にし、一方、開始条件を満たしていない場合にはレッスンエリアの移動を指示する以前のレッスンエリアに戻す。
そして、開始条件判定を行った後は、レッスンエリアデータlaを参照して、エリアポインタiLAptrで指定されるレッスンエリアの発音開始ティックla[iLAptr].iLATimeOn以上の発音開始時間を持つノートデータmel[I].lTimeを検索し、該当するノートデータmel[I]を指定する曲データ検索ポインタIを、曲データポインタply.melptrにセットすると共に、エリアポインタiLAptrで指定されるレッスンエリアの開始ティックla[iLAptr].iLATmeを、再生制御データ中のレッスンエリア開始ティックply.lTickCurriculmにセットする。
【0059】
以上のように、本実施の形態では、練習曲の曲データmelを複数のレッスンエリアに区分けし、区分けされた各レッスンエリアの開始条件を含むレッスンエリアデータlaを設けておき、エリア移動スイッチ操作に応じてレッスンエリアを移動させると、レッスンエリアデータlaを参照して、移動先のレッスンエリアの開始条件を調べ、その開始条件を満たしている場合には移動先のレッスンエリアに対応付けられた曲データmelを再生して演奏練習を行わせ、一方、開始条件を満たしていない場合には移動指示前のレッスンエリアに戻り、そのレッスンエリアに対応付けられた曲データmelを再生して演奏練習を行わせるので、得意なレッスンエリアから難度の高いレッスンエリアにユーザ自らが自発的に練習するようになる結果、練習意欲を低下させることなく、効果的な演奏練習を行うことが可能になる。
【0060】
なお、本実施形態では、レッスンエリアデータlaに登録される各レッスンエリア毎の開始条件(開始条件クリアレベルiLAareaClevel:図5参照)を固定的なものとしているが、これに限らず可変的なものとしても良い。つまり、演奏練習毎に評価されるレッスンエリア毎の演奏レベル(習熟度)を、開始条件クリアレベルiLAareaClevelとしてレッスンエリアデータlaに登録するようにし、次回演奏練習時に評価された演奏レベルが、前回の演奏レベルを上回り上達したと判断された場合に、次に移行可能なレッスンエリアをユーザに提示する態様とすることも可能である。このようにすれば、ユーザ自ら上達具合を把握でき効果的な演奏練習が可能になる。
【図面の簡単な説明】
【0061】
【図1】実施の一形態の全体構成を示すブロック図である。
【図2】曲データmelの構成を示す図である。
【図3】オフバッファデータoffbufの構成を示す図である。
【図4】再生制御データplyの構成を示す図である。
【図5】レッスンエリアデータlaの構成を示す図である。
【図6】メインルーチンの動作を示すフローチャートである。
【図7】エリア変更処理の動作を示すフローチャートである。
【図8】再生処理の動作を示すフローチャートである。
【図9】終了条件検査処理の動作を示すフローチャートである。
【図10】再生用変数更新処理の動作を示すフローチャートである。
【図11】ノートオフ処理の動作を示すフローチャートである。
【図12】ノートオン処理の動作を示すフローチャートである。
【図13】変形例によるエリア変更処理の動作を示すフローチャートである。
【符号の説明】
【0062】
10 CPU
11 ROM
12 RAM
13 MIDIインタフェース
14 操作部
15 鍵盤
16 表示部
20 電子楽器
100 演奏練習装置
【特許請求の範囲】
【請求項1】
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶するエリアデータ記憶手段と、
複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、
前記エリア指定手段により指定された移動先エリアのエリアデータを前記レッスンエリアデータ記憶手段から読み出して移動先エリアの開始条件を満たしている否かを判定する判定手段と、
前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段と
を具備することを特徴とする演奏練習装置。
【請求項2】
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶するエリアデータ記憶手段と、
複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、
前記エリア指定手段により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアにおけるクリアレベルと演奏レベルとを前記エリアデータ記憶手段を読み出し、読み出した演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定手段と、
前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段と
を具備することを特徴とする演奏練習装置。
【請求項3】
複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して移動先エリアの開始条件を満たしている否かを判定する判定処理と、
前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理と
をコンピュータで実行させることを特徴とする演奏練習プログラム。
【請求項4】
複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアの演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定処理と、
前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理と
をコンピュータで実行させることを特徴とする演奏練習プログラム。
【請求項1】
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶するエリアデータ記憶手段と、
複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、
前記エリア指定手段により指定された移動先エリアのエリアデータを前記レッスンエリアデータ記憶手段から読み出して移動先エリアの開始条件を満たしている否かを判定する判定手段と、
前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段と
を具備することを特徴とする演奏練習装置。
【請求項2】
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶するエリアデータ記憶手段と、
複数のレッスンエリアの内から移動先エリアを指定するエリア指定手段と、
前記エリア指定手段により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアにおけるクリアレベルと演奏レベルとを前記エリアデータ記憶手段を読み出し、読み出した演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定手段と、
前記判定手段により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生手段と
を具備することを特徴とする演奏練習装置。
【請求項3】
複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件を含むエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して移動先エリアの開始条件を満たしている否かを判定する判定処理と、
前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理と
をコンピュータで実行させることを特徴とする演奏練習プログラム。
【請求項4】
複数のレッスンエリアの内から移動先エリアを指定するエリア指定処理と、
練習曲の各音を表す曲データを複数のレッスンエリアに区分けし、区分けされた各レッスンエリア毎に、対応する曲データを再生する為の開始条件であって、クリアすべきレッスンエリア、本レッスンエリアをクリアするのに必要なクリアレベルおよび演奏練習で評価された演奏レベルを備えたエリアデータを記憶しておき、その内から前記エリア指定処理により指定された移動先エリアのエリアデータを参照して当該移動先エリアへ進む前にクリアすべきレッスンエリアの演奏レベルがクリアレベルを超える開始条件を満たしているか否かを判定する判定処理と、
前記判定処理により開始条件を満たすと判定された場合には、移動先エリアに対応する曲データを再生し、一方、開始条件を満たしていない場合には、移動元エリアに対応する曲データを再生する再生処理と
をコンピュータで実行させることを特徴とする演奏練習プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2006−215167(P2006−215167A)
【公開日】平成18年8月17日(2006.8.17)
【国際特許分類】
【出願番号】特願2005−26323(P2005−26323)
【出願日】平成17年2月2日(2005.2.2)
【出願人】(000001443)カシオ計算機株式会社 (8,748)
【Fターム(参考)】
【公開日】平成18年8月17日(2006.8.17)
【国際特許分類】
【出願日】平成17年2月2日(2005.2.2)
【出願人】(000001443)カシオ計算機株式会社 (8,748)
【Fターム(参考)】
[ Back to top ]