以下、図面を参照して本発明の実施形態について説明する。
A.構成
図1は、実施の一形態による演奏教習装置100の構成を示すブロック図である。この図において、鍵盤10は演奏操作(押離鍵操作)に応じたキーオン/キーオフ信号、鍵番号およびベロシティ等の演奏情報を発生する。スイッチ部11は、装置パネルに配設される各種操作スイッチを有し、ユーザ操作されるスイッチ種に対応したスイッチイベントを発生する。スイッチ部11に配設される主要なスイッチとしては、例えば動作モード(後述する生成モード、練習モードおよびクリアモードの何れか)を設定するモードスイッチ、ガイドの開始/停止を指示するスタート/ストップスイッチ等を備える。
CPU12は、スイッチ部11が発生する各種スイッチイベントに応じて装置各部を制御する。本発明の要旨に係わるCPU12の処理動作については追って詳述する。ROM13には、CPU12にロードされる各種の制御プログラムが記憶される。各種の制御プログラムとは、後述するメインルーチン、生成処理、練習処理およびクリア処理を含む。なお、生成処理は、スイッチ1処理、ガイド1処理、鍵盤処理および解析処理から構成される。また、練習処理は、スイッチ2処理、ガイド2処理、鍵盤処理および制御処理から構成される。
RAM14は、図2に図示するように、ワークエリアWE、曲データエリアMDEおよび演奏データエリアPDEを備える。ワークエリアWEには、CPU12の処理に用いられる各種レジスタ・フラグデータが一時記憶される。また、ワークエリアWEの一部は、演奏データバッファとして用いられ、押離鍵操作に応じて発生する一連の演奏データが一時記憶される。この一時記憶された一連の演奏データは、後述の演奏データエリアPDEにストアされる。
RAM14の曲データエリアMDEには、図3に図示するように、曲を構成する各音を表す音符データ[0]〜[N]が曲進行順にアドレッシングされて格納される。一つの音符データは、発音ピッチを表す「音高」と、曲開始時点からの経過時間(絶対時間)で発音タイミングを表す「ステップタイム」と、発音期間(音長)を表す「ゲートタイム」、演奏ミスした回数を記録する「ミス回数エリア」と、「終了フラグ」と、「判別フラグ」とから構成される。
「ミス回数エリア」は、演奏ミスの内容を分類して計数する演奏ミス項目として「遅れ回数」、「進み回数」、「誤り回数」および「抜け回数」を備える。「遅れ回数」は、上記「ステップタイム」に対して予め定義される適正な押鍵タイミング許容範囲より遅れて押鍵した場合にカウントされる。「進み回数」は、同様に適正な押鍵タイミング許容範囲より早く押鍵した場合にカウントされる。「誤り回数」は、音符データ中の「音高」と一致しない他の鍵を誤って押鍵した場合にカウントされる。「抜け回数」は、音符データ中の「音高」に一致する鍵を押鍵しなかった場合にカウントされる。
「終了フラグ」は、音符データが解析処理(後述する)に用いられた場合に「1」、用いられていない場合に「0」となるフラグである。「判別フラグ」は、ユーザの間違う癖(起き易い演奏ミスの内容)を表すものであり、後述する解析処理によって付与される。具体的には、演奏ミス項目の中で「遅れ回数」が所定値以上かつ最も多い場合に、押鍵が遅れるというユーザの間違う癖が付いた音符データと判別されてフラグ値「1」がセットされる。
また、演奏ミス項目の中で「進み回数」が所定値以上かつ最も多い場合に、早めに押鍵されるというユーザの間違う癖が付いた音符データと判別されてフラグ値「2」がセットされる。さらに、演奏ミス項目の中で「誤り回数」が所定値以上かつ最も多い場合に、誤押鍵されるというユーザの間違う癖が付いた音符データと判別されてフラグ値「3」がセットされる。また、演奏ミス項目の中で「抜け回数」が所定値以上かつ最も多い場合に、押鍵し忘れるというユーザの間違う癖が付いた音符データと判別されてフラグ値「4」がセットされる。なお、所定値以上かつ最多の演奏ミス項目が複数存在する場合には、ユーザの間違う癖を特定することが出来ない為、フラグ値「0」がセットされる。
演奏データエリアPDEは、図4に図示するように、演奏回数に対応した演奏(1)〜(N)のエリアに分割されており、一つのエリアには曲の始めから終わりまで弾くユーザの押鍵操作に応じて発生する一連の演奏データ、すなわち上述のワークエリアWEに一時記憶された演奏データ[0]〜[n]が転送格納される。一つの演奏データは、押鍵された鍵の音高を表す「KEY」と、曲開始時点からの経過時間(絶対時間)で押鍵されたタイミングを表す「ST(ステップタイム)」と、「終了フラグ」とから構成される。終了フラグは、演奏データが解析処理(後述する)に用いられた場合に「1」、用いられていない場合に「0」となるフラグである。
再び図1を参照して実施形態の構成について説明を進める。図1において、表示部15は、LCDパネル等から構成され、CPU12から供給される表示制御信号に応じて装置の設定状態や動作状態など画面表示したりガイド表示したりする。なお、ここで言うガイド表示とは、鍵盤10の各鍵を示す画像を表示部15に画面表示しておき、その画面表示された鍵画像の表示形態を変化させて弾くべき鍵をユーザに案内する表示形態を指す。
音源16は、周知の波形メモリ読み出し方式によって構成され、時分割動作する複数の発音チャンネルを備える。この音源16は、各種音色の波形データを記憶しており、これらの内、CPU12から供給される楽音パラメータに応じた波形データを読み出して楽音出力を発生する。サウンドシステム17は、音源16の楽音出力をアナログ形式の楽音信号に変換した後、その楽音信号から不要ノイズを除去する等のフィルタリングを施してからレベル増幅してスピーカより発音させる。
B.動作
次に、図5〜図18を参照して上記構成による実施形態の動作について説明する。以下では、最初にメインルーチンの動作を説明し、続いてメインルーチンからコールされる各処理(生成処理および練習処理)の動作について述べる。
(1)メインルーチンの動作
演奏教習装置100がパワーオンされると、CPU12は図3に図示するメインルーチンを実行してステップSA1に処理を進め、RAM14のワークエリアWEに格納される各種レジスタやフラグデータをゼロリセット又は初期値セットする他、音源16に対して初期化を指示するイニシャライズを行う。イニシャライズが完了すると、CPU12は、ステップSA2に進み、現在設定されている動作モードが「生成モード」、「練習モード」および「クリアモード」の何れであるかを判別する。なお、動作モードは、後述するように、モードスイッチ操作に応じて変更設定される。また、演奏教習装置100のパワーオン当初では、上記ステップSA1のイニシャライズにおいて「生成モード」がデフォルト設定される。
動作モードが「生成モード」ならば、ステップSA3に進み、生成処理を実行する。後述するように、生成処理では、ガイドの開始が指示されると、音符データに基づきガイド表示を行い、このガイド表示に従ってユーザが行う押鍵操作に応じて発生する一連の演奏データ[0]〜[n]を、演奏データエリアPDE中で演奏回数Nで指定される演奏(N)のエリアにストアする。
曲の始めから終わりまでをガイド表示に従って弾く演奏練習がN回以上行われると、ポインタnで指定される演奏データエリアPDE中の演奏(n)のエリアから、各音符データ[0]〜[N]の発音タイミングに最も近い演奏データをそれぞれ探し出し、探し出した演奏データとそれに対応する音符データとの比較に基づき演奏ミスの有無を判断し、演奏ミスが有れば、その内容(誤押鍵、押鍵タイミングの遅れ、押鍵タイミングの進み、押鍵抜け)を解析した結果に応じて、対応する音符データ中のミス回数エリアに設けられた演奏ミス項目(「遅れ回数」、「進み回数」、「誤り回数」および「抜け回数」)の中で合致する項目の回数をカウントして各音符データ[0]〜[N]毎に演奏ミスの内容を分類集計する。
演奏データエリアPDE中の全てのエリア(演奏(1)〜(N))の演奏データに基づいて各音符データ[0]〜[N]毎に演奏ミスの内容を分類集計し終えると、分類集計された各音符データ[0]〜[N]毎の演奏ミスの内容に基づきユーザの間違う癖(演奏ミス仕勝ちな音と、その音において起き易い演奏ミスの内容)を判別し、その結果を表すフラグ値の判別フラグを各音符データ[0]〜[N]に付与する。こうした生成処理が完了すると、再び上記ステップSA2に戻り、現在設定されている動作モードを判別する。
動作モードが「練習モード」であると、ステップSA4に進み、練習処理を実行する。後述するように、練習処理では、スタート/ストップスイッチ操作によりガイド開始が指示されると、音符データに基づきガイド表示を行い、そのガイド表示に従ったユーザの押離鍵操作に応じて楽音の発音/消音を音源16に指示する一方、押鍵操作に対応して押鍵音高KEYと、押鍵時点におけるレジスタTの値で表されるステップタイムSTと、フラグ値「0」の終了フラグとから構成される演奏データを生成し、生成した演奏データに対応する音符データをRAM14の曲データエリアMDEから検索する。
検索された該当音符データと演奏データとの比較に基づき演奏ミスの有無を判別し、演奏ミスが有ると、その演奏ミスした音符データ中の判別フラグを参照して同じ過ちを繰り返したかどうかを判断する。すなわち、早めに押鍵仕勝ちな音を早めに押鍵したり、遅れて押鍵仕勝ちな音を遅れて押鍵したりする演奏ミスや、押鍵間違い仕勝ちな音を誤押鍵したり、押鍵抜け仕勝ちな音を押鍵し忘れたりする演奏ミスが発生すると、その間違う癖を矯正する繰り返し練習期間を設定する。繰り返し練習期間が設定されると、その繰り返し練習期間において繰り返し回数Mに達するまで間違う癖を矯正するガイドを繰り返し行い、それが完了すると、通常のガイドを再開する。こうした練習処理が完了すると、再び上記ステップSA2に戻り、現在設定されている動作モードを判別する。
動作モードが「クリアモード」であると、ステップSA5に進み、クリア処理を実行する。クリア処理では、RAM15の曲データエリアMDE(図3参照)に格納される各音符データ[0]〜[N]におけるミス回数エリアをゼロクリアすると共に、演奏データエリアPDE(図4参照)の演奏(1)〜(N)の各エリアに格納される演奏データ[0]〜[n]を全てクリアする。そして、クリア処理が完了すると、再び上記ステップSA2に戻り、現在設定されている動作モードを判別する。
(2)生成処理の動作
次に、図6を参照して生成処理の動作を説明する。上述したメインルーチンのステップSA3(図5参照)を介して本処理が実行されると、CPU12は図6に図示するステップSB1に進み、スイッチ1処理を実行する。スイッチ1処理では、後述するように、モードスイッチがオン操作された場合には動作モードの変更を指示する。また、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「1」となり、ガイドの開始が指示された場合には、レジスタTおよび解析フラグKFをゼロリセットすると共に、タイマインタラプト禁止を解除する。一方、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「0」となり、ガイドの停止が指示された場合には、表示部15のガイド表示を消去してタイマインタラプトを禁止する。
続いて、ステップSB2では、ガイド1処理を実行する。ガイド1処理では、後述するように、ガイド進行中(スタートフラグSTFが「1」)であると、最小単位時間(ティック)の経過毎にレジスタTの値を歩進し、歩進されたレジスタTの値と一致するステップタイムを有し、発音タイミングに達した音符データが有れば、その音符データに基づき弾くべき鍵を案内するガイド表示を行い、歩進されたレジスタTの値が、ステップタイムとゲートタイムとの加算値に一致し、消音タイミングに達した音符データが有れば、その音符データに基づきガイド表示を消去する。こうしたガイドが曲終了まで行われると、そのガイドに従ってユーザが行った押鍵操作に応じて発生した一連の演奏データ[0]〜[n]を、演奏データエリアPDE中で演奏回数Nで指定される演奏(N)のエリアにストアする。
次いで、ステップSB3では、押離鍵操作に応じて楽音の発音/消音を音源16に指示する一方、ガイド進行中であれば、ユーザの押鍵操作に応じて、押鍵音高KEYと、押鍵時点におけるレジスタTの値で表されるステップタイムSTと、フラグ値「0」の終了フラグとから構成される演奏データを発生してRAM14のワークエリアWEにストアする鍵盤処理を実行する。
そして、ステップSB4では、解析処理を実行する。解析処理では、後述するように、ポインタnで指定される演奏データエリアPDE中の演奏(n)のエリアから、曲データエリアPDE中の各音符データ[0]〜[N]の発音タイミングに最も近い演奏データをそれぞれ探し出し、探し出した演奏データとそれに対応する音符データとの比較に基づき演奏ミスの有無を判断する。演奏ミスが有れば、その内容(誤押鍵、押鍵タイミングの遅れ、押鍵タイミングの進み、押鍵抜け)を解析した結果に応じて、対応する音符データ中のミス回数エリアに設けられた演奏ミス項目(「遅れ回数」、「進み回数」、「誤り回数」および「抜け回数」)の中で合致する項目の回数をカウントして各音符データ[0]〜[N]毎に演奏ミスの内容を分類集計する。演奏データエリアPDE中の全てのエリア(演奏(1)〜(N))の演奏データに基づいて各音符データ[0]〜[N]毎に演奏ミスの内容を分類集計し終えると、分類集計された各音符データ[0]〜[N]毎の演奏ミスの内容に基づきユーザの間違う癖(演奏ミス仕勝ちな音と、その音において起き易い演奏ミスの内容)を判別し、その結果を表すフラグ値の判別フラグを各音符データ[0]〜[N]に付与する。
次いで、ステップSB5に進み、生成モード以外の他の動作モードに変更されたか否かを判断する。他の動作モードに変更されなければ、判断結果は「NO」になり、上述したステップSB1に処理を戻す。以後、生成モードから他の動作モードに変更されるまで上記ステップSB1〜SB4を繰り返す。そして、上述したモードスイッチのオン操作に応じて、生成モードから他の動作モードに変更されると、上記ステップSB5の判断結果が「YES」となり、本処理を終える。
このように、生成処理では、ガイドの開始が指示されると、最小単位時間(ティック)の経過毎に歩進されるレジスタTの値と一致するステップタイムの音符データ(発音タイミングの音)が有れば、その音符データに基づき弾くべき鍵を案内するガイド表示を行い、歩進されたレジスタTの値がステップタイムとゲートタイムとの加算値に一致する音符データ(消音タイミングの音)が有れば、その音符データに基づきガイド表示を消去するという動作を曲終了するまで行う一方、ガイド表示に従ってユーザが行った演奏操作に応じて発生する一連の演奏データ[0]〜[n]を、演奏データエリアPDE中で演奏回数Nで指定される演奏(N)のエリアにストアする。
こうした演奏練習がN回以上行われると、ポインタnで指定される演奏データエリアPDE中の演奏(n)のエリアから、各音符データ[0]〜[N]の発音タイミングに最も近い演奏データをそれぞれ探し出し、探し出した演奏データとそれに対応する音符データとの比較に基づき演奏ミスの有無を判断し、演奏ミスが有れば、その内容(誤押鍵、押鍵タイミングの遅れ、押鍵タイミングの進み、押鍵抜け)を解析した結果に応じて、対応する音符データ中のミス回数エリアに設けられた演奏ミス項目(「遅れ回数」、「進み回数」、「誤り回数」および「抜け回数」)の中で合致する項目の回数をカウントして各音符データ[0]〜[N]毎に演奏ミスの内容を分類集計する。
演奏データエリアPDE中の全てのエリア(演奏(1)〜(N))の演奏データに基づいて各音符データ[0]〜[N]毎に演奏ミスの内容を分類集計し終えると、分類集計された各音符データ[0]〜[N]毎の演奏ミスの内容に基づきユーザの間違う癖(演奏ミス仕勝ちな音と、その音において起き易い演奏ミスの内容)を判別し、その結果を表すフラグ値の判別フラグを各音符データ[0]〜[N]に付与する。
(3)スイッチ1処理の動作
次に、図7を参照してスイッチ1処理の動作を説明する。上述した生成処理のステップSB1(図6参照)を介して本処理が実行されると、CPU12は図7に図示するステップSC1に進み、スイッチ部11に配設されるモードスイッチがオン操作された否かを判断する。
モードスイッチがオン操作されると、判断結果は「YES」となり、ステップSC2に進み、動作モードを変更して本処理を終える。すなわち、モードスイッチはオン操作される毎に「生成モード」、「練習モード」、「クリアモード」をサイクリックに指定するものであり、例えば「生成モード」においてモードスイッチをオン操作した場合には、「生成モード」から「練習モード」に設定変更するようになっている。
一方、モードスイッチがオン操作されなければ、上記ステップSC1の判断結果は「NO」になり、ステップSC3に進み、スタート/ストップスイッチのオン操作の有無を判断する。スタート/ストップスイッチがオン操作されなければ、判断結果は「NO」になり、本処理を終えるが、オン操作されると、判断結果が「YES」になり、ステップSC4に進む。
ステップSC4では、スタートフラグSTFを反転する。スタートフラグSTFとは、フラグ値「1」の場合にガイドの開始を表し、フラグ値「0」の場合にガイドの停止を表すフラグである。また、スタート/ストップスイッチは所謂トグル動作するスイッチであり、オン操作に応じてガイドの開始/停止を交互に指示する。次いで、ステップSC5では、スタート/ストップスイッチのオン操作に応じて反転されたスタートフラグSTFが「1」であるか否かを判断する。
反転されたスタートフラグSTFが「1」(ガイドの開始)であると、上記ステップSC5の判断結果は「YES」になり、ステップSC6に進み、レジスタTをゼロリセットする。次いで、ステップSC7では、タイマインタラプト禁止を解除し、続くステップSC8では、解析フラグKF(後述する)をゼロリセットして本処理を終える。なお、CPU12では、上記ステップSC7においてタイマインタラプト禁止を解除すると、タイマ機能を具現するタイマインタラプト(不図示)をスタートさせ、曲再生テンポに対応した最小単位時間(ティック)をカウントし始める。
一方、スタート/ストップスイッチのオン操作に応じて反転されたスタートフラグSTFが「0」(ガイドの停止)ならば、上記ステップSC5の判断結果は「NO」になり、ステップSC9に進み、表示部15のガイド表示を消去する。そして、ステップSC10に進み、曲進行時間を計時するタイマインタラプトを禁止して本処理を終える。
このように、スイッチ1処理では、モードスイッチがオン操作された場合には動作モードの変更を指示する。また、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「1」となり、ガイドの開始が指示された場合には、レジスタTおよび解析フラグKFをゼロリセットすると共に、タイマインタラプト禁止を解除する。一方、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「0」となり、ガイドの停止が指示された場合には、表示部15のガイド表示を消去してタイマインタラプトを禁止する。
(3)ガイド1処理の動作
次に、図8を参照してガイド1処理の動作を説明する。前述した生成処理のステップSB2(図6参照)を介して本処理が実行されると、CPU12は図8に図示するステップSD1に進み、スタートフラグSTFが「1」(ガイドの開始)であるかどうかを判断する。スタートフラグSTFが「0」(ガイドの停止)ならば、判断結果は「NO」になり、本処理を終えるが、スタートフラグSTFが「1」(ガイドの開始)であると、判断結果は「YES」になり、ステップSD2に進む。
ステップSD2では、タイマ機能(タイマインタラプト)が曲再生テンポに対応した最小単位時間(ティック)をカウントしたか否か、つまり最小単位時間が経過したかどうかを判断する。最小単位時間が経過していなければ、判断結果は「NO」となり、本処理を終えるが、最小単位時間が経過していると、上記ステップSD2の判断結果は「YES」になり、ステップSD3に進み、レジスタTの値をインクリメントして歩進させる。そして、ステップSD4では、歩進されたレジスタTの値と一致するステップタイムを有する音符データをRAM14の曲データエリアMDEから検索し、続くステップSD5では、該当する音符データの有無、つまり発音タイミングに達した音符データが有るか否かを判断する。
発音タイミングに達した音符データが有ると、判断結果は「YES」になり、ステップSD6に進み、表示部15に画面表示される鍵盤画像において、発音タイミングに達した音符データ中の音高に対応した鍵の画像の表示形態を変化させるガイド表示を実行してユーザに弾くべき鍵を案内した後、後述のステップSD10に進む。
一方、発音タイミングに達した音符データが検索されなければ、上記ステップSD5の判断結果が「NO」になり、ステップSD7に進む。ステップSD7では、歩進されたレジスタTの値が、ステップタイムとゲートタイムとの加算値に一致する音符データをRAM14の曲データエリアMDEから検索し、続くステップSD8では、該当する音符データの有無、つまり消音タイミングに達した音符データが有るか否かを判断する。
消音タイミングに達した音符データが無ければ、判断結果は「NO」になり、後述のステップSD10に進む。これに対し、消音タイミングに達した音符データが有ると、上記ステップSD8の判断結果が「YES」になり、ステップSD9に進み、表示部15に画面表示される鍵盤画像において、消音タイミングに達した音符データ中の音高に対応した鍵の画像の表示形態を元に戻してガイド表示を消去した後、ステップSD10に進む。
こうして、発音タイミングに達した音符データが有れば、その音符データに基づき弾くべき鍵を案内するガイド表示を行い、消音タイミングに達した音符データが有れば、その音符データに基づきガイド表示を消去すると、CPU12はステップSD10に進み、レジスタTの値が曲終了タイム以上であるか否かを判断する。
レジスタTの値が曲終了タイムに達せず、音符データに基づくガイドが進行中であるならば、判断結果は「NO」となり、本処理を終えるが、レジスタTの値が曲終了タイム以上となって、音符データに基づくガイドが完了すると、上記ステップSD10の判断結果は「YES」となり、ステップSD11に進む。ステップSD11では、ユーザの押鍵操作に応じて発生した一連の演奏データ、すなわち後述する鍵盤処理(図9参照)においてRAM14のワークエリアWEに一時記憶された一連の演奏データ[0]〜[n]を、RAM14の演奏データエリアPDE中において演奏回数Nで指定される演奏(N)のエリアにストアする。この後、ステップSD12に進み、演奏回数Nをインクリメントして歩進させ、続くステップSD13では、レジスタTをゼロリセットして本処理を終える。
このように、ガイド1処理では、ガイド進行中(スタートフラグSTFが「1」)であると、曲再生テンポに対応した最小単位時間(ティック)が経過する毎にレジスタTの値を歩進し、歩進されたレジスタTの値と一致するステップタイムを有し、発音タイミングに達した音符データが存在すると、その音符データに基づき弾くべき鍵を案内するガイド表示を行う。また、歩進されたレジスタTの値が、ステップタイムとゲートタイムとの加算値に一致し、消音タイミングに達した音符データが存在すると、その音符データに基づきガイド表示を消去する。こうしたガイドが曲終了まで行われると、そのガイドに従ってユーザが行った押鍵操作に応じて発生した一連の演奏データ[0]〜[n]を、演奏データエリアPDE中で演奏回数Nで指定される演奏(N)のエリアにストアする。
(4)鍵盤処理の動作
次に、図9を参照して鍵盤処理の動作を説明する。前述した生成処理のステップSB3(図6参照)を介して本処理が実行されると、CPU12は図9に図示するステップSE1に進み、鍵盤10の各鍵についてキーオン/キーオフ信号の有無を検出する鍵走査を行い、続くステップSE2では、上記ステップSE1の鍵走査結果に基づき鍵変化を判別する。
押離鍵操作が行われず、鍵変化が生じなければ、ステップSE2において鍵変化無しと判別して本処理を終える。押鍵操作に応じて発生するキーオン信号を検出した場合には、ステップSE2を介してステップSE3に進み、押鍵された鍵の音高(鍵番号)をレジスタKEYにストアする。以下、レジスタKEYの内容を音高KEYと称す。次いで、ステップSE4では、音高KEYおよびベロシティを含むノートオンイベントに基づき生成した楽音パラメータを音源16に供給する。これにより、音源16は押鍵された鍵の音高の楽音を発音する。
次に、ステップSE5では、スタートフラグSTFが「1」、すなわちガイド進行中であるかどうかを判断する。ガイド停止中(スタートフラグSTFが「0」)であると、判断結果は「NO」になり、本処理を終えるが、ガイド進行中ならば、判断結果は「YES」になり、ステップSE6に進み、音高KEYと、押鍵時点におけるレジスタTの値で表されるステップタイムSTと、フラグ値「0」の終了フラグとから構成される演奏データを発生してRAM14のワークエリアWEにストアして本処理を終える。
一方、離鍵操作に応じて発生するキーオフ信号を検出した場合には、ステップSE2を介してステップSE7に進み、離鍵された鍵の音高(鍵番号)をレジスタKEYにストアする。そして、ステップSE8では、離鍵された鍵の音高KEYを含むノートオフイベントに基づき生成した楽音パラメータを音源16に供給する。これにより、音源16は、離鍵された鍵の音高の楽音を消音する。
以上のように、鍵盤処理では、押離鍵操作に応じて楽音の発音/消音を音源16に指示する一方、ガイド進行中であれば、押鍵された鍵の音高KEYと、押鍵時点におけるレジスタTの値で表されるステップタイムSTと、フラグ値「0」の終了フラグとから構成される演奏データを発生してRAM14のワークエリアWEにストアする。なお、押鍵毎に生成されてワークエリアWEに一時記憶される一連の演奏データは、前述したガイド1処理のステップSD11(図8参照)においてRAM14の演奏データエリアPDEに退避格納される。
(5)解析処理の動作
次に、図10〜図12を参照して解析処理の動作を説明する。前述した生成処理のステップSB4(図6参照)を介して本処理が実行されると、CPU12は図10に図示するステップSF1に進み、解析フラグKFが「0」、つまりガイドに従った演奏練習により発生した演奏データに基づいてユーザの演奏ミスの癖を解析する解析処理が未完であるかどうかを判断する。解析フラグKFが「1」(解析処理完了済み)ならば、判断結果は「NO」になり、本処理を終えるが、解析フラグKFが「0」(解析処理未完)であると、判断結果は「YES」になり、ステップSF2に進む。
続いて、ステップSF2では、スタートフラグSTFが「0」(ガイド停止中)であるか否かを判断する。ガイド進行中(スタートフラグSTFが「1」)であると、判断結果は「NO」となり、本処理を終えるが、ガイド停止中ならば、判断結果が「YES」になり、ステップSF3に進む。そして、ステップSF3では、演奏回数Nが所定回数以上であるか否かを判断する。演奏回数Nが所定回数未満であれば、判断結果は「NO」になり、本処理を終えるが、所定回数以上ならば、判断結果が「YES」になり、ステップSF4に進む。
つまり、解析処理が未完であって、かつガイド停止中の状態で演奏回数Nが所定回数以上であると、上記ステップSF1〜SF3の各判断結果が何れも「YES」となってステップSF4に進む。そして、ステップSF4〜SF5では、演奏データエリアPDEにおける演奏エリア指定用のポインタnを初期値「1」に、曲データエリアMDEにおける音符データ指定用のポインタaを初期値「0」にそれぞれセットする。続いて、ステップSF6では、ポインタaで指定される音符データ[a]のステップタイムに最も近いステップタイムSTを有する演奏データを、ポインタnで指定される演奏(n)のエリアの中から検索する。
次いで、ステップSF7では、演奏(n)のエリアの中から検索された該当演奏データ中の終了フラグが「0」であるか否か、つまり未処理の演奏データであるかどうかを判断する。該当演奏データが処理済み(終了フラグが「1」)ならば、判断結果は「NO」となり、ステップSF8に進み、該当演奏データを検索対象から除外して上記ステップSF6に処理を戻す。
一方、該当演奏データが未処理(終了フラグが「0」)であると、上記ステップSF7の判断結果は「YES」となり、ステップSF9に進む。ステップSF9では、演奏(n)のエリアの中から検索された該当演奏データ中の音高KEYと、ポインタaで指定される音符データ[a]の音高とが一致するか否かを判断する。両音高が不一致であれば、判断結果は「NO」になり、ステップSF10に進み、ポインタaで指定される音符データ[a]のミス回数エリアにおける誤り回数(図3参照)をインクリメントして歩進させる。これにより、音符データ[a]における誤押鍵の回数がカウントされる。この後、図11に図示するステップSF15に進む。
これに対し、演奏(n)のエリアの中から検索された該当演奏データ中の音高KEYと、ポインタaで指定される音符データ[a]の音高とが一致すると、上記ステップSF9の判断結果は「YES」となり、図11に図示するステップSF11に進む。ステップSF11〜SF14では、音符データ[a]の発音タイミングに対し、該当演奏データの押鍵タイミングが許容範囲外であるかどうかや、許容範囲外ならば、押鍵タイミングの遅れ/進みを判別する。
すなわち、ステップSF11では、ポインタaで指定される音符データ[a]のステップタイム(発音タイミング)に対し、該当演奏データ中のステップタイムST(押鍵タイミング)が予め定められた許容範囲外であるか否かを判断する。該当演奏データが上記許容範囲に収まる適正なタイミングで押鍵されていれば、判断結果は「NO」となり、後述のステップSF15に進む。
一方、音符データ[a]の発音タイミングに対し、該当演奏データの押鍵タイミングが許容範囲外であると、上記ステップSF11の判断結果は「YES」となり、ステップSF12に進み、許容範囲外の押鍵タイミングが発音タイミングに対して遅れであるか否かを判断する。発音タイミングに対して遅れであると、判断結果は「YES」になり、ステップSF13に進み、ポインタaで指定される音符データ[a]のミス回数エリアにおける遅れ回数(図3参照)をインクリメントして歩進させた後、ステップSF15に進む。
これに対し、発音タイミングに対して進み(早め)であれば、上記ステップSF12の判断結果は「NO」になり、ステップSF14に進み、ポインタaで指定される音符データ[a]のミス回数エリアにおける進み回数(図3参照)をインクリメントして歩進させた後、ステップSF15に進む。
次いで、ステップSF15では、解析処理の対象として用いられた該当演奏データ中の終了フラグと、音符データ[a]中の終了フラグとにそれぞれ「1」をセットする。続いて、ステップSF16に進むと、ポインタaで指定される音符データ[a]が曲終端であるかどうかを判断する。曲終端でなければ、判断結果は「NO」になり、ステップSF17に進み、ポインタaをインクリメントして歩進させた後、前述のステップSF6(図10参照)に処理を戻す。
一方、ポインタaで指定される音符データ[a]が曲終端ならば、上記ステップSF16の判断結果が「YES」になり、ステップSF18に進む。ステップSF18では、曲データエリアMDE中で終了フラグが「0」の音符データ、すなわち解析処理の対象として用いられていない音符データの有無を判断する。演奏抜けが無く、該当する音符データが存在しなければ、判断結果は「NO」になり、後述のステップSF20に進む。
これに対し、演奏抜けが有り、終了フラグが「0」の音符データが存在すると、上記ステップSF18の判断結果は「YES」となり、ステップSF19に進み、終了フラグが「0」の音符データのミス回数エリアにおける抜け回数(図3参照)をインクリメントして歩進させた後、ステップSF20に進み、曲データエリアMDEの全ての音符データ[0]〜[N]の終了フラグをゼロクリアする。
この後、ステップSF21に進み、演奏データエリアPDEにおける演奏エリア指定用のポインタnをインクリメントして歩進させ、続くステップSF21では、歩進されたポインタnが演奏回数Nを超えたかどうかを判断する。歩進されたポインタnが演奏回数Nを超えていなければ、判断結果は「NO」になり、前述したステップSF5に処理を戻す。
以後、上記ステップSF21において歩進されたポインタnで新たに指定される演奏データエリアPDE中の演奏(n)のエリアから、各音符データ[0]〜[N]の発音タイミングに最も近い演奏データをそれぞれ探し出し、探し出した演奏データとそれに対応する音符データとの比較に基づき演奏ミスの有無を判断する。そして、演奏ミスが有れば、その内容(誤押鍵、押鍵タイミングの遅れ、押鍵タイミングの進み、押鍵抜け)を解析した結果に応じて、対応する音符データ中のミス回数エリアに設けられた演奏ミス項目(「遅れ回数」、「進み回数」、「誤り回数」および「抜け回数」)の中で合致する項目の回数をカウントする。こうすることによって曲を構成する各音毎に演奏ミスの内容が分類集計される。
そして、演奏データエリアPDE中の全てのエリア(演奏(1)〜(N))の演奏データに基づいて各音符データ[0]〜[N]毎に演奏ミスの内容を分類集計し終えると、上記ステップSF22の判断結果が「YES」になり、図12に図示するステップSF23に処理を進める。ステップSF23以降では、曲を構成する各音毎に分類集計された演奏ミスの内容に基づきユーザの間違う癖(演奏ミス仕勝ちな音と、その音において起き易い演奏ミスの内容)を判別する。以下、その動作を説明する。
先ずステップSF23では、ポインタaをゼロリセットする。続いて、ステップSF24では、ポインタaで指定される音符データ[a]のミス回数エリアの演奏ミス項目(「遅れ回数」、「進み回数」、「誤り回数」および「抜け回数」)の内から最大値(最大回数)を検索する。次いで、ステップSF25では、検索された最大値(最大回数)が所定値以上であるか否かを判断する。なお、ここで言う所定値とは、演奏ミス仕勝ちな音であるかどうかを判別する為の閾値である。この閾値未満であるならば、演奏ミス仕勝ちな音ではないとして、上記ステップSF25の判断結果は「NO」になり、後述のステップSF35に進む。
一方、検索された最大値(最大回数)が閾値以上であると、演奏ミス仕勝ちな音であるとして、上記ステップSF25の判断結果が「YES」になり、ステップSF26に進む。ステップSF26〜SF33では、検索された最大値(最大回数)が、「遅れ回数」、「進み回数」、「誤り回数」および「抜け回数」の何れに該当するのかに応じて、起き易い演奏ミスの内容(ユーザの間違う癖)を判別する。
すなわち、ステップSF26では、検索された最大値(最大回数)が「遅れ回数」であるか否かを判断し、「遅れ回数」であったならば、判断結果は「YES」となり、ステップSF30に進み、ポインタaで指定される音符データ[a]中の判別フラグに「1」をセットする。これにより、音符データ[a]は押鍵が遅れるというユーザの間違う癖が付いた音と判別される。そしてこの後、後述のステップSF35に進む。
検索された最大値(最大回数)が「遅れ回数」でなければ、上記ステップSF26の判断結果は「NO」になり、ステップSF27に進む。ステップSF27では、検索された最大値(最大回数)が「進み回数」であるか否かを判断し、「進み回数」であったならば、判断結果は「YES」となり、ステップSF31に進み、ポインタaで指定される音符データ[a]中の判別フラグに「2」をセットする。これにより、音符データ[a]は早めに押鍵されるというユーザの間違う癖が付いた音と判別される。そしてこの後、後述のステップSF35に進む。
検索された最大値(最大回数)が「進み回数」でなければ、上記ステップSF27の判断結果は「NO」になり、ステップSF28に進む。ステップSF28では、検索された最大値(最大回数)が「誤り回数」であるか否かを判断し、「誤り回数」であったならば、判断結果は「YES」となり、ステップSF32に進み、ポインタaで指定される音符データ[a]中の判別フラグに「3」をセットする。これにより、音符データ[a]は誤押鍵されるというユーザの間違う癖が付いた音と判別される。そしてこの後、後述のステップSF35に進む。
検索された最大値(最大回数)が「誤り回数」でなければ、上記ステップSF28の判断結果は「NO」になり、ステップSF29に進む。ステップSF29では、検索された最大値(最大回数)が「抜け回数」であるか否かを判断し、「抜け回数」であったならば、判断結果は「YES」となり、ステップSF33に進み、ポインタaで指定される音符データ[a]中の判別フラグに「4」をセットする。これにより、音符データ[a]は押鍵し忘れるというユーザの間違う癖が付いた音と判別される。そしてこの後、後述のステップSF35に進む。
検索された最大値(最大回数)が閾値以上かつ同値の演奏ミス項目が複数存在する場合には、上記ステップSF26〜SF29の各判断結果が何れも「NO」となり、ステップSF34に進み、ポインタaで指定される音符データ[a]中の判別フラグに「0」をセットした後、ステップSF35に進む。ステップSF35では、ポインタaで指定される音符データ[a]中のミス回数エリア(図3参照)をクリアする。
次いで、ステップSF36に進み、ポインタaをインクリメントして歩進させ、続くステップSF37では、歩進させたポインタaの値が曲の音符データ数を超えたか否か、つまり全ての音符データについてユーザの間違う癖(起き易い演奏ミスの内容)を判別し終えたかどうかを判断する。判別し終えていなければ、判断結果は「NO」となり、前述したステップSF24に処理を戻し、歩進させたポインタaで指定される音符データ[a]についてユーザの間違う癖(起き易い演奏ミスの内容)を判別する。そして、り全ての音符データについて判別し終えると、上記ステップSF37の判断結果が「YES」となり、ステップSF38に進み、解析フラグKFに「1」をセットし、これにより解析処理終了を表して本処理を終える。
このように、解析処理では、ポインタnで指定される演奏データエリアPDE中の演奏(n)のエリアから、各音符データ[0]〜[N]の発音タイミングに最も近い演奏データをそれぞれ探し出し、探し出した演奏データとそれに対応する音符データとの比較に基づき演奏ミスの有無を判断する。演奏ミスが有れば、その内容(誤押鍵、押鍵タイミングの遅れ、押鍵タイミングの進み、押鍵抜け)を解析した結果に応じて、対応する音符データ中のミス回数エリアに設けられた演奏ミス項目(「遅れ回数」、「進み回数」、「誤り回数」および「抜け回数」)の中で合致する項目の回数をカウントして各音符データ[0]〜[N]毎に演奏ミスの内容を分類集計する。
演奏データエリアPDE中の全てのエリア(演奏(1)〜(N))の演奏データに基づいて各音符データ[0]〜[N]毎に演奏ミスの内容を分類集計し終えると、分類集計された各音符データ[0]〜[N]毎の演奏ミスの内容に基づきユーザの間違う癖を判別し、その結果を表すフラグ値の判別フラグを各音符データ[0]〜[N]に付与する。
(6)練習処理の動作
次に、図13を参照して練習処理の動作を説明する。前述したメインルーチンのステップSA4(図5参照)を介して本処理が実行されると、CPU12は図13に図示するステップSG1に進み、スイッチ2処理を実行する。スイッチ2処理では、後述するように、モードスイッチがオン操作された場合には動作モードの変更を指示し、スタート/ストップスイッチのオン操作によりガイドの開始が指示されると、レジスタTおよび練習フラグRF(後述する)をゼロリセットすると共に、タイマインタラプト禁止を解除する。一方、ガイドの停止が指示されると、表示部15のガイド表示を消去してタイマインタラプトを禁止する。
続いて、ステップSG2では、ガイド2処理を実行する。ガイド2処理では、後述するように、ガイド進行中ならば、曲再生テンポに対応した最小単位時間(ティック)が経過する毎にレジスタTの値を歩進し、歩進されたレジスタTの値と一致するステップタイムを有し、発音タイミングに達した音符データが存在すると、その音符データに基づき弾くべき鍵を案内するガイド表示を行う。また、歩進されたレジスタTの値が、ステップタイムとゲートタイムとの加算値に一致し、消音タイミングに達した音符データが存在すると、その音符データに基づきガイド表示を消去する。
そして、ガイド進行中に、演奏ミス仕勝ちな音において同じ演奏ミスが生じ、これに応じて後述の制御処理によって繰り返し練習期間が設定されると、その繰り返し練習期間において繰り返し回数Mに達するまで間違う癖を矯正するガイドを繰り返し行い、それが完了すると、通常のガイドを再開する。
次いで、ステップSG3では、押離鍵操作に応じて楽音の発音/消音を音源16に指示する一方、ガイド進行中であれば、押鍵音高KEYと、押鍵時点におけるレジスタTの値で表されるステップタイムSTと、フラグ値「0」の終了フラグとから構成される演奏データを発生してRAM14のワークエリアWEにストアする鍵盤処理を実行する。
そして、ステップSG4では、制御処理を実行する。制御処理では、後述するように、上記ステップSG3の鍵盤処理により生成される演奏データに対応する音符データをRAM14の曲データエリアMDEから検索し、検索された該当音符データと演奏データとの比較に基づき演奏ミスの有無を判別する。演奏ミスが有ると、その演奏ミスした音符データ中の判別フラグを参照して同じ過ちを繰り返したかどうかを判断する。すなわち、早めに押鍵仕勝ちな音を早めに押鍵したり、遅れて押鍵仕勝ちな音を遅れて押鍵したりする演奏ミスや、押鍵間違い仕勝ちな音を誤押鍵してたり、押鍵抜け仕勝ちな音を押鍵し忘れたりする演奏ミスが発生すると、その間違う癖(演奏ミス仕勝ちな音と、その音において起き易い演奏ミスの内容)を矯正する繰り返し練習期間を設定する。
続いて、ステップSG5では、練習モード以外の他の動作モードに変更されたか否かを判断する。他の動作モードに変更されなければ、判断結果は「NO」になり、上述したステップSG1に処理を戻す。以後、練習モードから他の動作モードに変更されるまで上記ステップSG1〜SG4を繰り返す。そして、モードスイッチのオン操作に応じて、練習モードから他の動作モードに変更されると、上記ステップSG5の判断結果が「YES」となり、本処理を終える。
以上のように、練習処理では、ガイド開始が指示されると、曲再生テンポに対応した最小単位時間(ティック)が経過する毎にレジスタTの値を歩進し、歩進されたレジスタTの値と一致するステップタイムを有し、発音タイミングに達した音符データが存在すると、その音符データに基づき弾くべき鍵を案内するガイド表示を行う。また、歩進されたレジスタTの値が、ステップタイムとゲートタイムとの加算値に一致し、消音タイミングに達した音符データが存在すると、その音符データに基づきガイド表示を消去する。
ガイドに従ったユーザの押離鍵操作に応じて楽音の発音/消音を音源16に指示する一方、押鍵に対応して押鍵音高KEYと、押鍵時点におけるレジスタTの値で表されるステップタイムSTと、フラグ値「0」の終了フラグとから構成される演奏データを生成し、生成した演奏データに対応する音符データをRAM14の曲データエリアMDEから検索する。
検索された該当音符データと演奏データとの比較に基づき演奏ミスの有無を判別し、演奏ミスが有ると、その演奏ミスした音符データ中の判別フラグを参照して同じ過ちを繰り返したかどうかを判断する。すなわち、早めに押鍵仕勝ちな音を早めに押鍵したり、遅れて押鍵仕勝ちな音を遅れて押鍵したりする演奏ミスや、押鍵間違い仕勝ちな音を誤押鍵したり、押鍵抜け仕勝ちな音を押鍵し忘れたりする演奏ミスが発生すると、その間違う癖を矯正する繰り返し練習期間を設定する。繰り返し練習期間が設定されると、その繰り返し練習期間において繰り返し回数Mに達するまで間違う癖を矯正するガイドを繰り返し行い、それが完了すると、通常のガイドを再開する。
(7)スイッチ2処理の動作
次に、図14を参照してスイッチ2処理の動作を説明する。上述した練習処理のステップSG1(図13参照)を介して本処理が実行されると、CPU12は図14に図示するステップSH1に進み、スイッチ部11に配設されるモードスイッチのオン操作の有無を判断する。
モードスイッチがオン操作されると、判断結果は「YES」となり、ステップSH2に進み、動作モードを変更して本処理を終える。すなわち、モードスイッチはオン操作される毎に「生成モード」、「練習モード」、「クリアモード」をサイクリックに指定するものであり、例えば「生成モード」においてモードスイッチをオン操作した場合には、「生成モード」から「練習モード」に設定変更するようになっている。
一方、モードスイッチがオン操作されなければ、上記ステップSH1の判断結果は「NO」になり、ステップSH3に進み、スタート/ストップスイッチのオン操作の有無を判断する。スタート/ストップスイッチがオン操作されなければ、判断結果は「NO」になり、本処理を終えるが、オン操作されると、判断結果が「YES」になり、ステップSH4に進む。
ステップSH4では、スタートフラグSTFを反転し、続くステップSH5では、反転されたスタートフラグSTFが「1」であるか否かを判断する。反転されたスタートフラグSTFが「1」(ガイドの開始)であると、上記ステップSH5の判断結果は「YES」になり、ステップSH6に進み、レジスタTをゼロリセットする。そして、ステップSH7に進み、タイマインタラプト禁止を解除する。次いで、ステップSH8では、練習フラグRF(後述する)をゼロリセットして本処理を終える。なお、CPU12では、上記ステップSH7においてタイマインタラプト禁止を解除すると、タイマ機能を具現するタイマインタラプト(不図示)をスタートさせ、曲再生テンポに対応したタイマ最小時間(ティック)をカウントし始める。
一方、スタート/ストップスイッチのオン操作に応じて反転されたスタートフラグSTFが「0」(ガイドの停止)ならば、上記ステップSH5の判断結果は「NO」になり、ステップSH9に進み、表示部15のガイド表示を消去する。この後、ステップSH10に進み、曲進行時間を計時するタイマインタラプトを禁止して本処理を終える。
このように、スイッチ2処理では、モードスイッチがオン操作された場合には動作モードの変更を指示する。また、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「1」となり、ガイドの開始が指示された場合には、レジスタTおよび練習フラグRF(後述する)をゼロリセットすると共に、タイマインタラプト禁止を解除する。一方、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「0」となり、ガイドの停止が指示された場合には、表示部15のガイド表示を消去してタイマインタラプトを禁止する。
(8)ガイド2処理の動作
次に、図15〜図16を参照してガイド2処理の動作を説明する。前述した練習処理のステップSG2(図13参照)を介して本処理が実行されると、CPU12は図15に図示するステップSJ1に進み、スタートフラグSTFが「1」(ガイドの開始)であるかどうかを判断する。スタートフラグSTFが「0」(ガイドの停止)ならば、判断結果は「NO」になり、本処理を終えるが、スタートフラグSTFが「1」(ガイドの開始)であると、判断結果は「YES」になり、ステップSJ2に進む。
ステップSJ2では、タイマ機能(タイマインタラプト)が曲再生テンポに対応した最小単位時間(ティック)をカウントしたか否か、つまり最小単位時間が経過したかどうかを判断する。最小単位時間が経過していなければ、判断結果は「NO」となり、本処理を終えるが、最小単位時間が経過していると、上記ステップSJ2の判断結果は「YES」になり、ステップSJ3に進み、レジスタTの値をインクリメントして歩進させる。そして、ステップSJ4では、歩進されたレジスタTの値と一致するステップタイムを有する音符データをRAM14の曲データエリアMDEから検索し、続くステップSJ5では、該当する音符データの有無、つまり発音タイミングに達した音符データが有るか否かを判断する。
発音タイミングに達した音符データが有ると、判断結果は「YES」になり、ステップSJ6に進み、表示部15に画面表示される鍵盤画像において、発音タイミングに達した音符データ中の音高に対応した鍵の画像の表示形態を変化させるガイド表示を実行してユーザに弾くべき鍵を案内した後、後述のステップSJ10に進む。
一方、発音タイミングに達した音符データが検索されなければ、上記ステップSJ5の判断結果が「NO」になり、ステップSJ7に進む。ステップSJ7では、歩進されたレジスタTの値が、ステップタイムとゲートタイムとの加算値に一致する音符データをRAM14の曲データエリアMDEから検索し、続くステップSJ8では、該当する音符データの有無、つまり消音タイミングに達した音符データが有るか否かを判断する。
消音タイミングに達した音符データが無ければ、判断結果は「NO」になり、後述のステップSJ10に進む。これに対し、消音タイミングに達した音符データが有ると、上記ステップSJ8の判断結果が「YES」になり、ステップSJ9に進み、表示部15に画面表示される鍵盤画像において、消音タイミングに達した音符データ中の音高に対応した鍵の画像の表示形態を元に戻してガイド表示を消去した後、ステップSJ10に進む。
そして、ステップSJ10では、練習フラグRFが「0」であるか否かを判断する。なお、練習フラグRFとは、ユーザの間違う癖(演奏ミス仕勝ちな音において起き易い演奏ミスの内容)を矯正する為の繰り返し練習期間が、後述する制御処理(図18〜図18参照)において設定された場合に「1」、繰り返し練習期間が解除された場合に「0」となるフラグである。したがって、このステップSJ10では、繰り返し練習期間が設定されているかどうかを判断する。
スタート/ストップスイッチの操作によりガイド開始が指示された当初、すなわち後述する制御処理(図18〜図18参照)により繰り返し練習期間が設定されていない状態であれば、練習フラグRFは「0」なので、判断結果は「YES」となり、図16に図示するステップSJ11に進む。ステップSJ11では、レジスタTの値が曲終了タイム以上であるか否か、つまり音符データに基づくガイドが完了したかどうかを判断する。
レジスタTの値が曲終了タイムに達せず、音符データに基づくガイドが進行中であるならば、判断結果は「NO」となり、本処理を終えるが、レジスタTの値が曲終了タイム以上となって、音符データに基づくガイドが完了すると、上記ステップSJ11の判断結果は「YES」となり、ステップSJ12に進み、曲進行時間を計時するタイマインタラプトを禁止する。この後、ステップSJ13に進み、スタートフラグSTFをゼロリセットし、続くステップSJ14では、表示部15のガイド表示を消去して本処理を終える。
これに対し、後述する制御処理(図17〜図18参照)により繰り返し練習期間が設定され、練習フラグRFが「1」となった以後に本ガイド2処理が再び実行されて上述したステップSJ10(図15参照)に処理を進めると、当該ステップSJ10の判断結果は「NO」になり、図16に図示するステップSJ15に進む。ステップSJ15では、レジスタTの値がレジスタT2の値以上であるか否かを判断する。
レジスタTには、現在の曲位置に相当するタイム値がストアされ、レジスタT2には、後述する制御処理によって繰り返し練習期間の終わりに相当するタイム値がストアされる。したがって、ステップSJ15では、繰り返し練習期間を過ぎたかどうかを判断する。繰り返し練習期間を過ぎていなければ、判断結果は「NO」になり、本処理を終えるが、繰り返し練習期間を過ぎると、判断結果が「YES」になり、ステップSJ16に進み、練習回数mをインクリメントして歩進させる。
次いで、ステップSJ17では、歩進された練習回数mが繰り返し回数Mを超えたか否かを判断する。練習回数mが繰り返し回数Mを超えていなければ、判断結果は「NO」になり、ステップSJ19に進み、繰り返し練習期間の始まりに相当するレジスタT1のタイム値をレジスタTにストアして一旦本処理を終える。以後、本ガイド2処理では、繰り返し練習期間の始まり(T1)から終わり(T2)までのガイドを繰り返す。
そして、繰り返し回数Mに達するまで間違う癖(演奏ミス仕勝ちな音において起き易い演奏ミスの内容)を矯正するガイドを繰り返し行うと、上記ステップSJ17の判断結果が「YES」になり、ステップSJ18に進み、繰り返し練習期間の解除を表すべく練習フラグRFをゼロリセットし、続くステップSJ19では、繰り返し練習期間の始まりに相当するレジスタT1のタイム値をレジスタTにストアして一旦本処理を終える。以後、本処理では、レジスタT1のタイム値から通常のガイドを再開する。
以上のように、ガイド2処理では、ガイド進行中(スタートフラグSTFが「1」)であると、曲再生テンポに対応した最小単位時間(ティック)が経過する毎にレジスタTの値を歩進し、歩進されたレジスタTの値と一致するステップタイムを有し、発音タイミングに達した音符データが存在すると、その音符データに基づき弾くべき鍵を案内するガイド表示を行う。また、歩進されたレジスタTの値が、ステップタイムとゲートタイムとの加算値に一致し、消音タイミングに達した音符データが存在すると、その音符データに基づきガイド表示を消去する。
こうしたガイドが進行中に、演奏ミス仕勝ちな音において同じ演奏ミスが生じ、これに応じて後述の制御処理によって繰り返し練習期間(レジスタT1のタイム値からレジスタT2のタイム値まで)が設定されると、繰り返し回数Mに達するまで間違う癖(演奏ミス仕勝ちな音において起き易い演奏ミスの内容)を矯正するガイドを繰り返し行い、それが完了すると、レジスタT1のタイム値から通常のガイドを再開する。
(9)制御処理の動作
次に、図17〜図18を参照して制御処理の動作を説明する。前述した練習処理のステップSG4(図13参照)を介して本処理が実行されると、CPU12は図17に図示するステップSL1に進み、練習フラグRFが「1」であるか否か、つまりユーザの間違う癖を矯正する為の繰り返し練習期間が設定済みであるかどうかを判断する。繰り返し練習期間が設定済みならば、判断結果は「YES」になり、本処理を終える。
一方、繰り返し練習期間が未設定(練習フラグRFが「0」)であれば、判断結果は「NO」になり、ステップSL2に進む。ステップSL2では、演奏データのステップタイムSTに最も近いステップタイムを有する音符データをRAM14の曲データエリアMDEから検索する。なお、演奏データは、前述の鍵盤処理(図9参照)において押鍵に応じて生成されてRAM14のワークエリアWEに一時記憶されるデータであり、押鍵された鍵の音高KEYと、押鍵時点におけるレジスタTの値で表されるステップタイムSTと、フラグ値「0」の終了フラグとから構成される。
続いて、ステップSL3では、曲データエリアMDEから検索された該当音符データ中の終了フラグが「0」であるか否か、つまり未処理の音符データであるかどうかを判断する。該当音符データが処理済み(終了フラグが「1」)ならば、判断結果は「NO」となり、ステップSL4に進み、該当音符データを検索対象から除外して上記ステップSL2に処理を戻す。
一方、該当音符データが未処理(終了フラグが「0」)であると、上記ステップSL3の判断結果は「YES」となり、ステップSL5に進む。ステップSL5では、曲データエリアMDEから検索された該当音符データ中の音高と、演奏データの音高KEYとが一致するか否か、つまり誤押鍵であるかどうかを判断する。以下では、誤押鍵でない場合と、誤押鍵の場合とに分けて動作説明を進める。
<誤押鍵でない場合>
この場合、曲データエリアMDEから検索された該当音符データ中の音高と、演奏データの押鍵音高KEYとが一致するので、上記ステップSL5は「YES」となり、ステップSL6に進む。ステップSL6では、該当音符データのステップタイム(発音タイミング)と、演奏データのステップタイムST(押鍵タイミング)との差分が予め定められた所定範囲に収まっているか否か、つまり適正なタイミングで押鍵されたかどうかを判断する。適正なタイミングで押鍵されていれば、判断結果は「YES」となり、ステップSL7に進み、曲データエリアMDEから検索された該当音符データ中の終了フラグを「1」にセットして本処理を終える。
これに対し、該当音符データのステップタイム(発音タイミング)と、演奏データのステップタイムST(押鍵タイミング)との差分が予め定められた所定範囲に収まらず、適正なタイミングで押鍵されていない場合には、上記ステップSL6の判断結果が「NO」となり、ステップSL8に進む。ステップSL8では、該当音符データのステップタイム(発音タイミング)に対する演奏データのステップタイムST(押鍵タイミング)のずれが「進み」であるか否かを判断する。
発音タイミングに対する押鍵タイミングのずれが「進み」ならば、判断結果は「YES」になり、ステップSL9に進む。ステップSL9では、該当音符データ中の判別フラグが「2」、つまり早めに押鍵仕勝ちな音を早めに押鍵してしまうという同じ過ちを繰り返したかどうかを判断する。同じ過ちを繰り返していなければ、判断結果は「NO」となり、本処理を終えるが、同じ過ちを繰り返すと、判断結果が「YES」になり、後述のステップSL17(図18参照)に進む。
一方、発音タイミングに対する押鍵タイミングのずれが「遅れ」であると、上記ステップSL8の判断結果は「NO」になり、ステップSL10に進む。ステップSL10では、該当音符データ中の判別フラグが「1」、つまり遅れて押鍵仕勝ちな音を遅れて押鍵してしまうという同じ過ちを繰り返したかどうかを判断する。同じ過ちを繰り返していなければ、判断結果は「NO」となり、本処理を終えるが、同じ過ちを繰り返すと、判断結果が「YES」になり、後述のステップSL17(図18参照)に進む。
このように、早めに押鍵仕勝ちな音を早めに押鍵したり、遅れて押鍵仕勝ちな音を遅れて押鍵したりするといった同じ過ちを繰り返してしまった場合には、図18に図示するステップSL17以降を実行し、その間違う癖(演奏ミス仕勝ちな音において起き易い演奏ミスの内容)を矯正する為の繰り返し練習期間を設定する。
先ずステップSL17では、同じ過ちを繰り返した時の演奏データのステップタイムST(押鍵タイミング)より所定時間前のタイム値をレジスタT1にストアし、続くステップSL18では、当該演奏データのステップタイムST(押鍵タイミング)より所定時間後のタイム値をレジスタT2にストアする。こうして、レジスタT1にストアされたタイム値と、レジスタT2にストアされたタイム値とで繰り返し練習期間が設定されると、ステップSL19に進み、レジスタT1のタイム値(繰り返し練習期間の始端に相当)をレジスタTにストアした後、続くステップSL20では、繰り返し練習期間が設定された旨を表すべく練習フラグRFを「1」にセットして本処理を終える。
なお、繰り返し練習期間が設定されると、前述したガイド2処理(図15〜図16参照)では、繰り返し回数Mに達するまで間違う癖を矯正するガイドを繰り返し行うようになっている。
<誤押鍵の場合>
この場合、曲データエリアMDEから検索された該当音符データ中の音高と、演奏データの音高KEYとが不一致になるので、図17に図示するステップSL5の判断結果が「NO」になり、図18に図示するステップSL11に進む。ステップSL11では、演奏データのステップタイムSTに対して2番目に近いステップタイムを有する音符データをRAM14の曲データエリアMDEから検索する。すなわち現在弾くべき音の次に弾く音の音符データを探し出す。
次いで、ステップSL12では、曲データエリアMDEから検索された該当音符データ中の終了フラグが「0」であるか否か、つまり未処理の音符データであるかどうかを判断する。該当音符データが処理済み(終了フラグが「1」)ならば、判断結果は「NO」となり、ステップSL13に進み、該当音符データを検索対象から除外して上記ステップSL11に処理を戻す。
一方、該当音符データが未処理(終了フラグが「0」)であると、上記ステップSL12の判断結果は「YES」となり、ステップSL14に進み、曲データエリアMDEから検索された該当音符データ中の音高と、演奏データの押鍵音高KEYとが一致するか否かを判断する。つまり、ステップSL14では、次に弾く音を誤って弾いてしまったかどうかを判断する。該当音符データ中の音高と、演奏データの音高KEYとが不一致の場合、すなわち次に弾く音を弾いていなければ、判断結果は「NO」になり、ステップSL15に進む。
ステップSL15では、該当音符データ中の判別フラグが「3」、つまり押鍵間違い仕勝ちな音を誤押鍵してしまうという同じ過ちを繰り返したかどうかを判断する。同じ過ちを繰り返していなければ、判断結果は「NO」となり、本処理を終えるが、同じ過ちを繰り返すと、判断結果が「YES」になり、ステップSL17に進む。
これに対し、該当音符データ中の音高と、演奏データの押鍵音高KEYとが一致し、次に弾く音を誤って弾いてしまった場合には、上記ステップSL14の判断結果が「YES」になり、ステップSL16に進む。ステップSL16では、該当音符データ中の判別フラグが「4」、つまり押鍵抜け仕勝ちな音を押鍵し忘れてしまうという同じ過ちを繰り返したかどうかを判断する。同じ過ちを繰り返していなければ、判断結果は「NO」となり、本処理を終えるが、同じ過ちを繰り返すと、判断結果が「YES」になり、ステップSL17に進む。
押鍵間違い仕勝ちな音を誤押鍵したり、押鍵抜け仕勝ちな音を押鍵し忘れたりするといった同じ過ちを繰り返してしまった場合には、前述したステップSL17以降を実行し、その間違う癖(演奏ミス仕勝ちな音において起き易い演奏ミスの内容)を矯正する為の繰り返し練習期間を設定して本処理を終える。なお、繰り返し練習期間が設定されると、前述したガイド2処理(図15〜図16参照)では、繰り返し回数Mに達するまで間違う癖を矯正するガイドを繰り返し行う。
このように、制御処理では、押鍵に応じて発生した演奏データに対応する音符データをRAM14の曲データエリアMDEから検索し、検索された該当音符データと演奏データとの比較に基づき演奏ミスの有無を判別し、演奏ミスが有れば、その演奏ミスした音符データの判別フラグを参照して同じ過ちを繰り返したかどうかを判断する。すなわち、早めに押鍵仕勝ちな音を早めに押鍵したり、遅れて押鍵仕勝ちな音を遅れて押鍵したりする演奏ミスや、押鍵間違い仕勝ちな音を誤押鍵してたり、押鍵抜け仕勝ちな音を押鍵し忘れたりする演奏ミスが発生すると、その間違う癖を矯正する繰り返し練習期間を設定する。
以上説明したように、本実施形態では、先ず生成モードにおいて、曲を構成する各音を表す音符データに基づきユーザに弾くべき鍵を案内するガイド表示を行い、それに従ってユーザが行う押鍵操作で発生する演奏データと、それに対応する音符データとの比較に基づき演奏ミスの有無を判断し、演奏ミスが有れば、対応する演奏ミス項目別に分類して発生回数を計数する処理を複数回実行して曲を構成する各音の内から演奏ミス仕勝ちな音と、その音で起き易い演奏ミス項目とを抽出しておく。
そして、練習モードにおいて、曲を構成する各音を表す音符データに基づきユーザに弾くべき鍵を案内するガイド表示を行い、それに従ってユーザが行う押鍵操作で発生する演奏データと、それに対応する音符データとの比較に基づき演奏ミスの有無を判断し、演奏ミスが有れば、生成モードで抽出された演奏ミス仕勝ちな音における起き易い演奏ミス項目であるか否か、つまり同じ過ちが繰り返されたかどうかを判断し、同じ過ちが繰り返された場合には、その演奏ミス仕勝ちな音の演奏を繰り返し練習するようにガイド表示するので、曲を演奏するユーザの間違う癖を矯正して練習効果を高めることが可能になる。
なお、本実施形態では、同じ過ちが繰り返された音について一律に所定回数の繰り返し練習を行わせるようにしたが、これに限らず、繰り返し練習中の押鍵操作が適正であるか否かを判定する繰り返し練習判定手段と、この繰り返し練習判定手段により誤った押鍵操作が行われたと判定された場合に、練習回数mをゼロリセットして繰り返し練習を始めからやり直させる練習回数制御手段とを更に設ける態様とすることも可能である。こうした構成を更に具備することによって、ユーザの間違う癖を矯正する効果を一層向上させ得る。
さらには、例えば誤押鍵など曲演奏上の影響度が高い演奏ミスに高い重み付けを与える等、前述した演奏ミス項目(「遅れ回数」、「進み回数」、「誤り回数」および「抜け回数」)毎に影響度に応じた重み付け係数を予め付与しておき、同じ過ちが繰り返された音の演奏ミス項目に付与された重み付け係数を参照して繰り返し練習回数を異ならせる態様にすることも可能である。こうすることで曲演奏上の影響度が高い音で間違う癖が出たら繰り返し練習回数を多くし、一方、影響度が低い音で間違う癖が出たら繰り返し練習回数を少なくするので、曲演奏上の影響度が高い音で間違う癖を重点的に矯正することが可能になる。
また、上述した実施形態では、説明の簡略化を図る為、曲を構成する各音を表すデータ(音高、ステップタイムおよびゲートタイム)と、生成処理又は練習処理に供するデータ(ミス回数エリア、終了フラグおよび判別フラグ)とを一体化した音符データを用いるようにしたが、それら両データを分離した態様とすることも可能である。
すなわち、生成処理又は練習処理に供するデータ(ミス回数エリア、終了フラグおよび判別フラグ)を、曲を構成する各音に対応付けた別個のデータベースとして設けておき、生成処理又は練習処理の実行時にこのデータベースを参照する態様としても、上述した実施形態と同様、曲を演奏するユーザの間違う癖を矯正して練習効果を高めることができる。