以下、図面を参照して本発明の実施形態について説明する。
A.構成
図1は、実施の一形態による自動伴奏装置100の構成を示すブロック図である。この図において、鍵盤10は演奏操作(押離鍵操作)に応じたキーオン/キーオフ信号、鍵番号およびベロシティ等の演奏情報を発生する。スイッチ部11は、装置パネルに配設される各種操作スイッチを有し、ユーザ操作されるスイッチ種に対応したスイッチイベントを発生する。本発明の要旨に係わるスイッチとして、曲データに従って演奏操作をユーザに案内するガイド(後述する)の開始/停止を指示するスタート/ストップスイッチを有する。
CPU12は、スイッチ部11が発生する各種スイッチイベントに応じて装置各部を制御する。本発明の要旨に係わるCPU12の処理動作については追って詳述する。ROM13は、図2に図示するように、プログラムエリアPEおよびテーブルエリアTEを備える。ROM13のプログラムエリアPEには、CPU12にロードされる各種の制御プログラムが記憶される。各種の制御プログラムとは、後述するメインルーチン、イニシャル処理、スイッチ処理、タイマインタラプト処理、ガイド処理、鍵盤処理、伴奏処理および評価処理を含む。なお、伴奏処理は、ハイハット処理、ドラム処理、ベース処理、コード1処理、コード2処理およびパーカッション処理から構成される。
ROM13のテーブルエリアTEには、図2に図示するように、評価テーブルET、補正テーブルCTおよびパートフラグ設定テーブルPTが記憶される。以下、図3〜図5を参照してこれらテーブルET、CTおよびPTの構成について説明する。先ず図3は評価テーブルETの一構成例を示す図である。評価テーブルETは、後述する評価処理で参照されるデータテーブルであり、ミス回数MISSに対応した演奏評価結果を出力する。ミス回数MISSとは、一つのフレーズ区間において押鍵するタイミングを間違えた回数(タイミングミス回数TIMINGMISS)と、弾くべき鍵とは異なる鍵を押鍵してしまった回数(押鍵ミス回数KEYMISS)との和を表す。
例えば曲のあるフレーズ区間についてユーザが演奏練習を行い、その区間におけるミス回数MISSが「0」の場合には、評価テーブルETから当該フレーズ区間の演奏評価を表す演奏評価結果「A」が読み出される。また、演奏練習したフレーズ区間のミス回数MISSが「2」ならば、評価テーブルETから演奏評価結果「B」が読み出される。
図4は補正テーブルCTの一構成例を示す図である。補正テーブルCTは、後述する評価処理で参照されるデータテーブルであり、上述の評価テーブルETから読み出される演奏評価結果に応じて、現在のレベルを補正する補正値を出力する。現在のレベルとは、ユーザの演奏技量を表す値であり、通常、レベル「3」がデフォルト設定される。
例えば曲のあるフレーズ区間についてユーザが演奏練習を行い、その区間の演奏評価結果が「A」であって、かつ現在のレベルが「3」の場合には、補正値「+1」が読み出される。また、あるフレーズ区間の演奏評価結果が「E」で現在のレベルが「1」ならば、補正値「0」が読み出される。
なお、後述するように、補正テーブルCTから読み出される補正値は現在のレベルに加算される。つまり、一つのフレーズ区間を演奏し終える毎に、演奏し終えた現フレーズ区間の一つ前のフレーズ区間における現在のレベル(前フレーズ区間のレベル)と、現フレーズ区間の演奏評価結果とに応じて補正テーブルCTから補正値を読み出し、読み出した補正値を前フレーズ区間のレベルに加算することによって、現フレーズ区間の現在のレベルを更新するようになっている。
図5はパートフラグ設定テーブルPTの一構成例を示す図である。パートフラグ設定テーブルPTは、後述するスイッチ処理および評価処理で参照されるデータテーブルであり、ユーザの演奏技量を表す現在のレベルに対応したパートフラグが読み出される。パートフラグとは、自動伴奏パートの有効/無効を表すフラグであり、本実施形態ではハイハットパートの有効/無効を表すフラグHIF、ドラムパートの有効/無効を表すフラグDRF、ベースパートの有効/無効を表すフラグBAF、コード1パートの有効/無効を表すフラグCO1F、コード2パートの有効/無効を表すフラグCO2およびパーカッションパートの有効/無効を表すフラグPAFから構成される。
例えば現在のレベルが「3」ならば、フラグHIF、CO2FおよびPAFが「0」、フラグDRF、BAFおよびCO1Fが「1」となるパートフラグがパートフラグ設定テーブルPTから読み出される。この場合、ハイハットパート、コード2パートおよびパーカッションパートが無効となり自動伴奏されず、一方、ドラムパート、ベースパートおよびコード1パートが有効となり自動伴奏される。
次に、RAM14は、図6に図示するように、ワークエリアWEおよび曲データエリアKDEを備える。RAM14のワークエリアWEには、CPU12の処理に用いられる各種レジスタ・フラグデータが一時記憶される。RAM14の曲データエリアKDEは、演奏練習する曲をフレーズ単位に区切った複数のフレーズ区間(0)〜(m)から形成される。一つのフレーズ区間は、各パート(メロディパート、ドラムパート、ベースパート、コード1パート、コード2パートおよびパーカッションパート)の曲データから構成される。
曲データは、対応するパートのフレーズ区間を構成する各音を表す。一つの曲データは、タイムおよびイベントが対となって曲進行に対応した時系列のアドレス順に記憶される、いわゆる絶対時間方式と呼ばれるデータ形式で表現される。タイムは、曲開始時点からの経過時間で現イベントのタイミングを表す。イベントは、発音を表すノートオンイベント(又は消音を表すノートオフイベント)および発音音高(又は消音音高)を表すノートナンバを含む。なお、ドラムやパーカッションのパートの曲データでは、音高要素を持たない楽音なので、イベントは発音を表すノートオンイベントのみとなる。
再び図1を参照して実施形態の構成について説明を進める。図1において、表示部15は、LCDパネル等から構成され、CPU12から供給される表示制御信号に応じて装置の設定状態や動作状態などを画面表示したりガイド表示したりする。なお、ここで言うガイド表示とは、例えば鍵盤10の各鍵を示す鍵盤画像を表示部15に画面表示しておき、その画面表示される鍵盤画像中でブリンク表示させた鍵を「次に弾くべき鍵」として案内し、さらにその鍵を反転表示して押鍵タイミングを案内する表示形態を指す。
音源16は、周知の波形メモリ読み出し方式によって構成され、時分割動作する複数の発音チャンネルを備える。この音源16は、上述した各パートに対応した音色の波形データを記憶しており、これらの内、CPU12から供給される楽音パラメータに応じた波形データを読み出して楽音出力を発生する。サウンドシステム17は、音源16の楽音出力をアナログ形式の楽音信号に変換した後、その楽音信号から不要ノイズを除去する等のフィルタリングを施してからレベル増幅してスピーカより発音させる。
B.動作
次に、図7〜図19を参照して上記構成による実施形態の動作について説明する。以下では、最初にメインルーチンの動作を説明し、続いてメインルーチンからコールされる各処理(スイッチ処理、ガイド処理、鍵盤処理、伴奏処理および評価処理)の動作について述べる。
(1)メインルーチンの動作
自動伴奏装置100がパワーオンされると、CPU12は図7に図示するメインルーチンを実行し、ステップSA1を介して図8に図示するイニシャル処理を実行する。イニシャル処理では、ステップSB1において、RAM14のワークエリアWE(図6参照)に格納される各種レジスタやフラグデータをゼロリセット又は初期値セットする他、音源16に対して初期化を指示し、続くステップSB2では、レジスタLEVELに「3」をストアする。なお、レジスタLEVELにストアされる値は、ユーザの演奏技量を表す現在レベルを表す。本実施形態では、通常の演奏技量を表す値として「3」がデフォルト設定される。以後、レジスタLEVELの内容を現在レベルLEVELと称す。
さて、ステップSA1のイニシャライズ処理が完了すると、CPU12は次のステップSA2に進み、スイッチ処理を実行する。スイッチ処理では、後述するように、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「1」となり、ガイドの開始が指示された場合には、メロディパートの最初のノートオンイベントに含まれる発音音高に基づきガイド表示を行って最初に弾くべき鍵をユーザにガイドする。そして、ROM13に記憶されるパートフラグ設定テーブルPT(図5参照)を参照して現在レベルLEVELに応じた各パートフラグを設定すると共に、各パートの伴奏スタートフラグ(DSTF、BSTF、C1STF、C2STF、PSTF)および曲進行時間を累算するレジスタTをゼロリセットした後、タイマインタラプト禁止を解除する。一方、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「0」となり、ガイドの停止が指示された場合には、全てのフラグ・レジスタを初期化すると共に、表示部15のガイド表示を停止してタイマインタラプトを禁止する。
次いで、ステップSA3では、ガイド処理を実行する。ガイド処理では、後述するように、フレーズ区間(m)を演奏中にメロディパートのイベントタイミングに達すると、歩進させたメロディパート読み出しアドレスMADに応じて曲データKDE(MAD)を読み出し、それがノートオンイベントならば発音音高に対応する鍵の押鍵をユーザに案内するガイド表示を行い、ノートオフイベントならば消音音高に対応する鍵のガイド表示を停止する。
そして、メロディパート読み出しアドレスMADの歩進に応じて読み出されるメロディパート次イベントタイミングFTがフレーズ区間(m)に収まるならば、当該メロディパート次イベントタイミングFTを新たなメロディパートイベントタイミングMTに更新すると共に、次押鍵タイミングYTもフレーズ区間(m)内に存在するならば、該当するノートオンイベントの発音音高に基づいて次に弾くべき鍵の位置をユーザに案内するガイド表示を行う。
続いて、曲進行時間Tがフレーズ区間(m)の終了時間に一致し、当該フレーズ区間(m)を演奏し終えると、ユーザの演奏評価を行うか否かを判定するフラグHYOKAFを「1」にセットして演奏評価を行う旨を表す。この後、ポインタmをインクリメントして歩進させ、歩進させたポインタmが最大フレーズ数を超えたか否か、つまり全てのフレーズ区間について演奏し終えたかどうかを判断し、全てのフレーズ区間について演奏し終えていなければ、本処理を終えるが、全てのフレーズ区間について演奏し終えると、全フラグ・レジスタの初期化を行った後、音源16に消音を指示すると共に、表示部15のガイド表示を停止し、さらに曲進行時間を計時するタイマインタラプト処理を禁止して本処理を終える。
次に、ステップSA4では、後述するように、押離鍵操作に応じて、押鍵(又は離鍵)された鍵の音高の楽音を発音(又は消音)するよう音源16に指示する一方、押鍵時には曲データに従ってガイドされた鍵が適正なタイミングで弾かれたかどうかを判断し、ガイドされた鍵とは異なる鍵を間違って弾いた時には押鍵ミス回数KEYMISSを歩進し、間違ったタイミングで弾いた時にはタイミングミス回数を歩進する鍵盤処理を実行する。
次いで、ステップSA5では、伴奏処理を実行する。伴奏処理では、後述するように、パートフラグ(フラグHIF、フラグDRF、フラグBAF、フラグCO1F、フラグCO2およびフラグPAF)に基づき自動伴奏パートの有効/無効が指定され、有効とされたパート(ハイハットパートを除く)では曲進行に同期して順次読み出される曲データ(タイムおよびイベント)に従い、タイムで表される発音タイミングに達する毎に、イベントで指定されるパートの音を発音する。なお、ハイハットパートの場合には、フラグHIFが「1」にセットされていると、拍タイミングに達する毎にハイハット音の発音を指示するノートオンイベントを音源16に供給してハイハット音を発音させる。
そして、ステップSA6では、評価処理を実行する。評価処理では、後述するように、フレーズ区間の演奏練習が完了してフラグHYOKAFに「1」がセットされると、タイミングミス回数TIMINGMISSと押鍵ミス回数KEYMISSとを加算したミス回数MISSに基づき評価テーブルET(図3参照)から演奏評価結果HYOKAを読み出した後、その演奏評価結果HYOKAと現在レベルLEVELとに対応する補正値CT(HYOKA,LEVEL)を補正テーブルCT(図4参照)から読み出して現在レベルLEVELを補正し、補正された現在レベルLEVELに対応する各パートフラグをパートフラグ設定テーブルPT(図5参照)から読み出して次フレーズ区間で自動伴奏されるパートを設定する。
続いて、ステップSA7では、例えば表示部15に曲データを楽譜表示する処理などの、その他の処理を実行する。そして、その他の処理が完了すると、再び上記ステップSA2に戻り、以後、装置電源がパワーオフされるまで上述したステップSA2〜SA7を繰り返す。
(2)スイッチ処理の動作
次に、図9を参照してスイッチ処理の動作を説明する。上述したメインルーチンのステップSA2(図7参照)を介して本処理が実行されると、CPU12は図9に図示するステップSC1に進み、スタート/ストップスイッチのオン操作の有無を判断する。スタート/ストップスイッチがオン操作されなければ、判断結果は「NO」になり、本処理を終えるが、オン操作されると、判断結果が「YES」になり、ステップSC2に進む。
ステップSC2では、スタートフラグSTFを反転する。スタートフラグSTFとは、フラグ値「1」の場合にガイドの開始を表し、フラグ値「0」の場合にガイドの停止を表すフラグである。また、スタート/ストップスイッチは所謂トグル動作するスイッチであり、オン操作に応じてガイドの開始/停止を交互に指示する。次いで、ステップSC3では、スタート/ストップスイッチのオン操作に応じて反転されたスタートフラグSTFが「1」であるか否かを判断する。以下、スタート/ストップスイッチのオン操作に応じて反転されたスタートフラグSTFが「1」(ガイドの開始)の場合と、当該スタートフラグSTFが「0」(ガイドの停止)の場合とに分けて動作説明を進める。
<スタートフラグSTFが「1」(ガイドの開始)の場合>
反転されたスタートフラグSTFが「1」(ガイドの開始)であると、上記ステップSC3の判断結果が「YES」になり、ステップSC4に進み、曲データ中のフレーズ区間を指定するポインタmをゼロリセットする。次いで、ステップSC5では、RAM14の曲データエリアKDEにおいて、ポインタmで指定されるフレーズ区間(m)におけるメロディパートの開始アドレスをレジスタMADにストアする。以下、レジスタMADの内容をメロディパート読み出しアドレスMADと称す。
続いて、ステップSC6では、メロディパート読み出しアドレスMADに応じて曲データエリアKDEから読み出される曲データKDE(MAD)、すなわちメロディパートの先頭の「タイム」をレジスタMTにストアする。レジスタMTにストアされる「タイム」は、メロディパートのイベントタイミングに相当する。以下、レジスタMTの内容をメロディパートイベントタイミングMTと称す。
そして、ステップSC7に進み、ポインタnを初期値「1」にセットし、続くステップSC8では、このポインタnをメロディパート読み出しアドレスMADに加算した読み出しアドレス(MAD+n)に応じて、曲データエリアKDEから読み出される曲データKDE(MAD+n)がノートオンイベントであるか否かを判断する。曲データKDE(MAD+n)がノートオンイベントでなければ、判断結果は「NO」になり、ステップSC9に進み、ポインタnをインクリメントして歩進させた後、上述のステップSC8に戻る。
つまり、ステップSC7〜SC9では、メロディパートにおける最初のノートオンイベントが読み出される迄、ポインタnをインクリメントして読み出しアドレス(MAD+n)を歩進させる。そして、メロディパートにおける最初のノートオンイベントが読み出されると、上記ステップSC8の判断結果は「YES」となり、ステップSC10に進み、その読み出されたノートオンイベントに含まれる発音音高をレジスタNEXTNOTEにストアする。
続いて、ステップSC11では、レジスタNEXTNOTEにストアした発音音高に対応する鍵のガイド表示を行う。ここで言うガイド表示とは、表示部15に画面表示される鍵盤画像において、レジスタNEXTNOTEにストアした発音音高に対応する鍵の画像の表示形態を変化(例えばブリンク表示)させ、ユーザに対して次に弾くべき鍵を案内する表示態様を指す。したがって、このステップSC11におけるガイド表示によって、演奏練習するメロディパートで最初に弾くべき鍵の位置がユーザにガイドされる。
そして、ステップSC12に進むと、ROM13に記憶されるパートフラグ設定テーブルPT(図5参照)を参照し、現在レベルLEVELに応じた各パートフラグを設定する。具体的には、デフォルト設定される現在レベルLEVELの値「3」に対応してパートフラグ設定テーブルPTからフラグHIF、CO2FおよびPAFが「0」、フラグDRF、BAFおよびCO1Fが「1」となるパートフラグを読み出される。これにより、現在レベルLEVELの値が「3」となるガイド開始当初では、ドラムパート、ベースパートおよびコード1パートの自動伴奏となる。
次いで、ステップSC13では、各パートの伴奏スタートフラグ(DSTF、BSTF、C1STF、C2STF、PSTF)をゼロリセットする。なお、伴奏スタートフラグDSTF、BSTF、C1STF、C2STF、PSTFとは、後述する伴奏処理で参照されるフラグであり、「1」の場合に伴奏進行中を表し、「0」の場合に伴奏停止を表す。
この後、ステップSC14に進み、曲進行時間を累算するレジスタTをゼロリセットし、続くステップSC15では、タイマインタラプト禁止を解除して本処理を終える。なお、CPU12では、上記ステップSC15においてタイマインタラプト禁止を解除すると、タイマ機能を具現するタイマインタラプト処理(後述する)をスタートさせる。
<スタートフラグSTFが「0」(ガイドの停止)の場合>
一方、スタート/ストップスイッチのオン操作に応じて反転されたスタートフラグSTFが「0」(ガイドの停止)ならば、上記ステップSC3の判断結果は「NO」になり、ステップSC16に進み、全てのフラグ・レジスタを初期化する。この後、ステップSC17に進み、音源16に消音を指示すると共に、表示部15のガイド表示を停止する。そして、ステップSC18に進み、曲進行時間を計時するタイマインタラプト処理(後述する)を禁止して本処理を終える。
このように、スイッチ処理では、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「1」となり、ガイドの開始が指示されると、メロディパートの最初のノートオンイベントに含まれる発音音高に基づきガイド表示を行って最初に弾くべき鍵をユーザにガイドする。そして、ROM13に記憶されるパートフラグ設定テーブルPT(図5参照)を参照して現在レベルLEVELに応じた各パートフラグを設定すると共に、各パートの伴奏スタートフラグ(DSTF、BSTF、C1STF、C2STF、PSTF)および曲進行時間を累算するレジスタTをゼロリセットした後、タイマインタラプト禁止を解除する。一方、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「0」となり、ガイドの停止が指示された場合には、全てのフラグ・レジスタを初期化すると共に、表示部15のガイド表示を停止してタイマインタラプト処理を禁止する。
(3)タイマインタラプト処理の動作
次に、図10を参照してタイマインタラプト処理の動作を説明する。上述したスイッチ処理のステップSC15(図9参照)においてタイマインタラプト禁止が解除されると、所定周期毎のタイマ割り込みによってCPU12は図10に図示するタイマインタラプト処理を実行する。割り込み実行タイミングになると、ステップSD1に進み、レジスタTの値をインクリメントして曲進行時間を歩進させ、続くステップSD2では、レジスタHTの値をインクリメントして歩進させて本処理を終える。なお、以後、レジスタTの値を曲進行時間Tと称す。
(4)ガイド処理の動作
次に、図11〜図13を参照してガイド処理の動作を説明する。前述したメインルーチンのステップSA3(図7参照)を介して本処理が実行されると、CPU12は図11に図示するステップSE1に進み、スタートフラグSTFが「1」(ガイドの開始)であるかどうかを判断する。スタートフラグSTFが「0」(ガイドの停止)ならば、判断結果は「NO」になり、本処理を終えるが、スタートフラグSTFが「1」(ガイドの開始)であると、判断結果は「YES」になり、ステップSE2に進む。
ステップSE2では、曲進行時間Tがポインタmで指定されるフレーズ区間(m)の終了時間に一致したか、つまりフレーズ区間(m)を演奏し終えたかどうかを判断する。以下、フレーズ区間(m)を演奏中の場合と、フレーズ区間(m)を演奏し終えた場合とに分けて動作の説明を進める。
<フレーズ区間(m)を演奏中の場合>
メロディパートにおけるフレーズ区間(m)を演奏中であると、上記ステップSE2の判断結果は「NO」になり、図12に図示するステップSE3に進む。ステップSE3では、曲進行時間TがメロディパートイベントタイミングMTに一致するか否か、つまりメロディパートイベントタイミングMTに達したかどうかを判断する。メロディパートイベントタイミングMTに達していなければ、判断結果は「NO」になり、一旦本処理を終える。
これに対し、メロディパートイベントタイミングであると、上記ステップSE3の判断結果は「YES」になり、ステップSE4に進み、メロディパート読み出しアドレスMADをインクリメントして歩進させる。続いて、ステップSE5では、歩進させたメロディパート読み出しアドレスMADに応じて曲データエリアKDEから読み出される曲データKDE(MAD)が「イベント」又は「タイム」の何れであるかを判別する。
前述した通り、曲データはタイムとイベントとが対になっているので、メロディパートイベントタイミング下で読み出される曲データKDE(MAD)は「イベント」となり、これによりステップSE5を介して図13に図示するステップSE6に処理を進める。ステップSE6では、読み出された曲データKDE(MAD)がノートオンイベントであるか否かを判断する。ノートオンイベントならば、判断結果は「YES」になり、ステップSE7に進む。
ステップSE7では、当該ノートオンイベントに含まれる発音音高をレジスタNOTEにストアする。そして、ステップSE8に進み、ノートフラグNOTEFを「1」にセットする。なお、このノートフラグNOTEFは、「1」の場合にノートオンを表し、「0」の場合にノートオフを表す。続いて、ステップSE9に進むと、表示部15に画面表示される鍵盤画像において、レジスタNOTEにストアした発音音高に対応する鍵の画像の表示形態を変化(例えば反転表示)させてユーザに押鍵を案内するガイド表示を行った後、上述のステップSE4(図12参照)に処理を戻す。
一方、ノートオンイベントでなければ、上記ステップSE6の判断結果は「NO」となり、ステップSE10に進み、ノートオフイベントであるか否かを判断する。ノートオン/ノートオフイベント以外の他のイベント(例えば音色切替を指示するプログラムチェンジ等)であると、判断結果は「NO」になり、上述のステップSE4(図12参照)に処理を戻すが、ノートオフイベントであると、上記ステップSE10の判断結果が「YES」になり、ステップSE11に進む。ステップSE11では、ノートオフイベントに含まれる消音音高をレジスタNOTEにストアし、続くステップSE12においてノートフラグNOTEFをゼロリセットする。この後、ステップSE13に進み、表示部15に画面表示される鍵盤画像において、レジスタNOTEにストアした消音音高に対応する鍵のガイド表示を停止させた後、上述のステップSE4(図12参照)に処理を戻す。
さて、こうしてノートオン/ノートオフイベントに対応した処理を実行してから図12に図示するステップSE4に戻り、メロディパート読み出しアドレスMADを歩進させた後、歩進させたメロディパート読み出しアドレスMADに応じて曲データエリアKDEから読み出される曲データKDE(MAD)が「タイム」になると、上述のステップSE5を介してステップSE14に進む。
ステップSE14では、歩進させたメロディパート読み出しアドレスMADに応じて曲データエリアKDEから読み出される曲データKDE(MAD)、すなわち「タイム」をレジスタFTにストアする。レジスタFTにストアされる「タイム」は、メロディパートにおける次のイベントタイミングに相当する。以下、レジスタFTの内容をメロディパート次イベントタイミングFTと称す。
次いで、ステップSE15では、メロディパート次イベントタイミングFTが、ポインタmで指定されるフレーズ区間(m)の終了時間以内であるか否かを判断する。メロディパート次イベントタイミングFTがフレーズ区間(m)の終了時間を超え、次フレーズ区間(m+1)に含まれる場合には判断結果が「NO」となり、一旦本処理を終える。
一方、メロディパート次イベントタイミングFTがフレーズ区間(m)の終了時間以内ならば、上記ステップSE15の判断結果は「YES」となり、ステップSE16に進み、メロディパート次イベントタイミングFTを、新たなメロディパートイベントタイミングMTに更新する。そして、ステップSE17に進み、ポインタnを初期値「1」にセットし、続くステップSE18では、このポインタnをメロディパート読み出しアドレスMADに加算した読み出しアドレス(MAD+n)に応じて、曲データエリアKDEから読み出される曲データKDE(MAD+n)が「イベント」又は「タイム」の何れであるかを判別する。
読み出しアドレス(MAD+n)に対応する曲データKDE(MAD+n)が「イベント」ならば、ステップSE19に進み、その「イベント」がノートオンイベントであるか否かを判断する。先のノートオンイベントに対応するノートオフイベントであると、判断結果は「NO」になり、ステップSE22に進み、ポインタnをインクリメントして歩進させた後、上述のステップSE18に戻る。
そして、歩進されたポインタnをメロディパート読み出しアドレスMADに加算した読み出しアドレス(MAD+n)に応じて、曲データエリアKDEから読み出される曲データKDE(MAD+n)が「タイム」になると、上記ステップSE18を介してステップSE23に進む。ステップSE23では、その「タイム」をレジスタYT(次押鍵タイミングYTと記す)にストアし、続くステップSE24では、次押鍵タイミングYTがポインタmで指定されるフレーズ区間(m)の終了時間以内であるか否かを判断する。
次押鍵タイミングYTがフレーズ区間(m)の終了時間を超え、次のフレーズ区間(m+1)に含まれるならば、判断結果は「NO」となり、一旦本処理を終えるが、次押鍵タイミングYTがフレーズ区間(m)に収まると、上記ステップSE24の判断結果は「YES」となり、ステップSE22に進み、ポインタnをインクリメントして歩進させた後、上述のステップSE18に戻る。
そして、歩進されたポインタnをメロディパート読み出しアドレスMADに加算した読み出しアドレス(MAD+n)に応じて読み出される曲データKDE(MAD+n)が「イベント」になると、ステップSE19に進み、かつその「イベント」がノートオンイベントならば、当該ステップSE19の判断結果は「YES」になり、ステップSE20に進む。
ステップSE20では、当該ノートオンイベントに含まれる発音音高をレジスタNEXTNOTEにストアし、続くテップSE21では、表示部15に画面表示される鍵盤画像において、レジスタNEXTNOTEにストアした発音音高に対応する鍵の画像の表示形態を変化(例えばブリンク表示)させてユーザに次に弾くべき鍵の位置を案内するガイド表示を行った後、ステップSE22に進み、ポインタnをインクリメントして歩進させた後、上述のステップSE18に戻る。
このように、ポインタmで指定されるフレーズ区間(m)を演奏中にメロディパートのイベントタイミングに達し、歩進させたメロディパート読み出しアドレスMADに応じて読み出される曲データKDE(MAD)がノートオンイベントであれば、発音音高に対応する鍵の押鍵タイミングをユーザに案内するガイド表示を行い、一方、ノートオフイベントならば、消音音高に対応する鍵のガイド表示を停止する。
そして、メロディパート読み出しアドレスMADの歩進に応じて読み出されるメロディパート次イベントタイミングFTがフレーズ区間(m)に収まるならば、当該メロディパート次イベントタイミングFTを新たなメロディパートイベントタイミングMTに更新すると共に、次押鍵タイミングYTがフレーズ区間(m)内に存在する場合には、該当するノートオンイベントに含まれる発音音高に基づいてユーザに次に弾くべき鍵の位置を案内するガイド表示を行う。
<フレーズ区間(m)を演奏し終えた場合>
曲進行時間Tがポインタmで指定されるフレーズ区間(m)の終了時間に一致し、当該フレーズ区間(m)を演奏し終えると、図11に図示するステップSE2の判断結果が「YES」になり、フラグHYOKAFを「1」にセットする。なお、フラグHYOKAFとは、後述する評価処理(図19参照)においてユーザの演奏評価を行うか否かを判定するフラグであり、「1」の場合に演奏評価を行う旨を表し、「0」の場合に演奏評価を行わない旨を表す。
次いで、ステップSE26では、フレーズ区間を指定するポインタmをインクリメントして歩進させ、続くステップSE27では、歩進させたポインタmが最大フレーズ数を超えたか否か、つまり全てのフレーズ区間について演奏し終えたかどうかを判断する。全てのフレーズ区間について演奏し終えていなければ、判断結果は「NO」になり、本処理を終える。これに対し、全てのフレーズ区間について演奏し終えると、上記ステップSE27の判断結果が「YES」になり、ステップSE28に進み、全てのフラグ・レジスタを初期化する。この後、ステップSE29に進み、音源16に消音を指示すると共に、表示部15のガイド表示を停止する。そして、ステップSE30に進み、曲進行時間を計時するタイマインタラプト処理を禁止して本処理を終える。
以上のように、ガイド処理では、ポインタmで指定されるフレーズ区間(m)を演奏中にメロディパートのイベントタイミングに達すると、歩進させたメロディパート読み出しアドレスMADに応じて曲データKDE(MAD)を読み出し、それがノートオンイベントであれば、発音音高に対応する鍵の押鍵をユーザに案内するガイド表示を行い、ノートオフイベントならば、消音音高に対応する鍵のガイド表示を停止する。
そして、メロディパート読み出しアドレスMADの歩進に応じて読み出されるメロディパート次イベントタイミングFTがフレーズ区間(m)に収まるならば、当該メロディパート次イベントタイミングFTを新たなメロディパートイベントタイミングMTに更新すると共に、次押鍵タイミングYTがフレーズ区間(m)内に存在する場合には、該当するノートオンイベントに含まれる発音音高に基づいてユーザに次に弾くべき鍵の位置を案内するガイド表示を行う。
続いて、曲進行時間Tがフレーズ区間(m)の終了時間に一致し、当該フレーズ区間(m)を演奏し終えると、ユーザの演奏評価を行うか否かを判定するフラグHYOKAFを「1」にセットして演奏評価を行う旨を表す。この後、ポインタmをインクリメントして歩進させ、歩進させたポインタmが最大フレーズ数を超えたか否か、つまり全てのフレーズ区間について演奏し終えたかどうかを判断し、全てのフレーズ区間について演奏し終えていなければ、本処理を終えるが、全てのフレーズ区間について演奏し終えると、全フラグ・レジスタの初期化を行った後、音源16に消音を指示すると共に、表示部15のガイド表示を停止し、さらに曲進行時間を計時するタイマインタラプト処理を禁止して本処理を終える。
(5)鍵盤処理の動作
次に、図14〜図15を参照して鍵盤処理の動作を説明する。前述したメインルーチンのステップSA4(図7参照)を介して本処理が実行されると、CPU12は図14に図示するステップSF1に進み、鍵盤10の各鍵についてキーオン/キーオフ信号の有無を検出する鍵走査を行い、続くステップSF2では、上記ステップSF1の鍵走査結果に基づき鍵変化を判別する。
押離鍵操作が行われず、鍵変化が生じなければ、ステップSF2において鍵変化無しと判別して本処理を終える。押鍵操作に応じたキーオン信号を検出した場合には、ステップSF2を介してステップSF3に進み、押鍵された鍵の鍵番号をレジスタKEYにストアする。以下、レジスタKEYの内容を鍵番号KEYと称す。次いで、ステップSF4では、鍵番号KEYおよびベロシティを含むノートオンイベントを作成し、続くステップSF5では、作成したノートオンイベントを音源16に供給する。これにより、音源16は押鍵された鍵の音高の楽音を発音する。
続いて、図15に図示するステップSF6に進み、ノートフラグNOTEFが「1」であるか否か、すなわちノートオンであるかどうかを判断する。ノートフラグNOTEFが「0」(ノートオフ)であると、判断結果は「NO」になり、ステップSF7に進み、押鍵ミス回数を計数するカウンタKEYMISS(以下、押鍵ミス回数KEYMISSと記す)をインクリメントする。つまり、ノートオフであるにもかかわらず押鍵した場合には、間違った押鍵が為されたとして押鍵ミス回数KEYMISSをカウントアップする。この後、ステップSF8に進み、ノートフラグNOTEFをゼロリセットして本処理を終える。
一方、ノートフラグNOTEFが「1」(ノートオン)ならば、上記ステップSF6の判断結果は「YES」になり、ステップSF9に進む。ステップSF9では、押鍵された鍵の鍵番号KEYとレジスタNOTEにストアされた発音音高(ノートナンバ)とが同一であるか否か、つまりガイドされた鍵の押鍵であるかどうかを判断する。
ガイドされた鍵の押鍵ならば、判断結果は「YES」になり、ステップSF10に進む。ステップSF10では、押鍵された時点の曲進行時間TとメロディパートイベントタイミングMTとの差分絶対値|T−MT|が所定時間α以内、つまりメロディパートイベントタイミングMTの前後の所定時間α以内に押鍵が為されたかどうかを判断する。メロディパートイベントタイミングMTの前後の所定時間α以内に押鍵されたならば、適正なタイミングの押鍵と見なされ、上記ステップSF10の判断結果は「YES」となり、ステップSF8に進み、ノートフラグNOTEFをゼロリセットして本処理を終える。
これに対し、メロディパートイベントタイミングMTより所定時間α以上早く押鍵したり、メロディパートイベントタイミングMTから所定時間α以上遅れて押鍵した場合には、不適なタイミングの押鍵と見なされ、上記ステップSF10の判断結果が「NO」になり、ステップSF11に進み、タイミングミス回数を計数するカウンタTIMINGMISS(以下、タイミングミス回数TIMINGMISSと記す)をインクリメントする。この後、ステップSF8に進み、ノートフラグNOTEFをゼロリセットして本処理を終える。
さて一方、ガイドされた鍵とは異なる音高の鍵の押鍵であると、上述のステップSF9の判断結果が「NO」となり、ステップSF12に進む。ステップSF12では、押鍵された鍵の鍵番号KEYとレジスタNEXTNOTEにストアされた発音音高(ノートナンバ)とが同一であるか否かを判断する。鍵番号KEYとレジスタNEXTNOTEの発音音高とが同一でなければ、判断結果は「NO」になり、ステップSF7に進み、間違った押鍵が為されたとして押鍵ミス回数KEYMISSをカウントアップし、続くステップSF8において、ノートフラグNOTEFをゼロリセットして本処理を終える。
これに対し、鍵番号KEYとレジスタNEXTNOTEの発音音高とが同一であると、上記ステップSF12の判断結果が「YES」になり、ステップSF13に進む。ステップSF13では、次押鍵タイミングYTと押鍵された時点の曲進行時間Tとの差分(YT−T)が判定条件(YT−T≦α≦0)を満たすか否か、すなわち次に弾くべき音としてガイドされた鍵を、次押鍵タイミングYTより所定時間α以上早く押鍵したかどうかを判断する。
次押鍵タイミングYTより所定時間α以上早く押鍵したならば、判断結果は「YES」となり、ステップSF8に進み、ノートフラグNOTEFをゼロリセットして本処理を終える。つまり、この場合、次に弾くべき音としてガイドされた鍵を早めに押鍵したものと見なし、押鍵ミスとしてカウントしないようになっている。
一方、次押鍵タイミングYTから所定時間α以内の押鍵であると、上記ステップSF13の判断結果が「NO」となり、ステップSF7に進み、間違った押鍵が為されたとして押鍵ミス回数KEYMISSをカウントアップした後、ステップSF8に進み、ノートフラグNOTEFをゼロリセットして本処理を終える。
さて、離鍵操作に応じたキーオフ信号を検出した場合には、上述したステップSF2(図14参照)を介してステップSF14に進み、離鍵された鍵の鍵番号をレジスタKEYにストアする。そして、ステップSF15に進み、その鍵番号KEYおよびベロシティを含むノートオフイベントを作成し、続くステップSF16では、作成したノートオンイベントを音源16に供給する。これにより、音源16は離鍵された鍵の音高の楽音を消音する。
このように、鍵盤処理では、押離鍵操作に応じて、押鍵(又は離鍵)された鍵の音高の楽音を発音(又は消音)するよう音源16に指示する一方、押鍵時には曲データに従ってガイドされた鍵が適正なタイミングで弾かれたかどうかを判断し、ガイドされた鍵とは異なる鍵を間違って弾いた時には押鍵ミス回数KEYMISSを歩進し、間違ったタイミングで弾いた時にはタイミングミス回数を歩進する。
(6)伴奏処理の動作
次に、図16を参照して伴奏処理の動作を説明する。前述したメインルーチンのステップSA5(図7参照)を介して本処理が実行されると、CPU12は図16に図示するステップSG1に進み、ハイハット処理を実行する。ハイハット処理では、後述するように、拍タイミングに達する毎に、フラグHIFに基づきハイハットパートを自動伴奏するかどうかを判断し、フラグHIFが「1」にセットされていれば、ハイハット音の発音を指示するノートオンイベントを音源16に供給してハイハット音を発音させる。
続いて、ステップSG2では、ドラム処理を実行する。ドラム処理では、後述するように、フラグDRFが「1」であって、かつ伴奏スタートフラグDSTFが「0」であると、伴奏スタートフラグDSTFを「1」にセットしてドラムパートの自動伴奏開始を表すと共に、ポインタmで指定されるフレーズ区間(m)のドラムパート開始アドレスをドラムパート読み出しアドレスDADに設定し、このドラムパート読み出しアドレスDADに応じて読み出される最初の曲データKED(DAD)、すなわち先頭の「タイム」をドラムパート発音タイミングDTにセットして一旦本処理を終える。
以後、伴奏スタートフラグDSTFが「0」になる迄の間、本処理では曲進行時間Tがドラムパート発音タイミングDTに達する毎に、歩進されたドラムパート読み出しアドレスDADに応じて読み出される「イベント」(ドラム音の発音を指示するノートオンイベント)を音源16に供給してドラム音を発音させる一方、次の「タイム」を読み出して新たなドラムパート発音タイミングDTに更新する動作を繰り返すことによってドラムパートの自動伴奏を進行させる。
続いて、ステップSG3〜SG6では、それぞれ「ベース処理」、「コード1処理」、「コード2処理」および「パーカッション処理」を実行する。これら各処理は上記ステップSG2のドラム処理と同様の動作である為、その詳細な動作説明については省略する。
一例として、ステップSG3の「ベース処理」について概説する。ベース処理では、フラグBAFが「1」であって、かつ伴奏スタートフラグBSTFが「0」であると、伴奏スタートフラグBSTFを「1」にセットしてベースパートの自動伴奏開始を表すと共に、ポインタmで指定されるフレーズ区間(m)のベースパートの開始アドレスをベースパート読み出しアドレスBADに設定し、このドラムパート読み出しアドレスBADに応じて読み出される最初の曲データKED(BAD)、すなわち先頭の「タイム」をベースパート発音タイミングBTにセットして一旦本処理を終える。
以後、伴奏スタートフラグBSTFが「0」になる迄の間、ベース処理では曲進行時間Tがベースパート発音タイミングBTに一致する毎に、歩進されたベースパート読み出しアドレスBADに応じて読み出される「イベント」(ベース音の発音を指示するノートオンイベント)を音源16に供給してベース音を発音させる一方、次の「タイム」を読み出して新たなベースパート発音タイミングBTに更新する動作を繰り返してベースパートの自動伴奏を進行させる。
以上のように、伴奏処理では、パートフラグ(フラグHIF、フラグDRF、フラグBAF、フラグCO1F、フラグCO2およびフラグPAF)に基づき自動伴奏パートの有効/無効が指定され、有効とされたパート(ハイハットパートを除く)では曲進行に同期して順次読み出される曲データ(タイムおよびイベント)に従い、タイムで表される発音タイミングに達する毎に、イベントで指定されるパートの音を発音する。なお、ハイハットパートの場合には、フラグHIFが「1」にセットされて有効となっていると、拍タイミングに達する毎にハイハット音の発音を指示するノートオンイベントを音源16に供給してハイハット音を発音させる。
(7)ハイハット処理の動作
次に、図17を参照してハイハット処理の動作を説明する。伴奏処理のステップSG1(図16参照)を介して本処理が実行されると、CPU12は図17に図示するステップSH1に進む。ステップSH1では、前述のタイマインタラプト処理(図10参照)において歩進されるレジスタHTの時間値が、曲のテンポおよび拍子で定まる拍時間に一致するか否か、つまり拍タイミングであるかどうかを判断する。拍タイミングでなければ、判断結果は「NO」になり、本処理を終える。
一方、レジスタHTの時間値が曲のテンポおよび拍子で定まる拍時間に一致する拍タイミングになると、上記ステップSH1の判断結果は「YES」となり、ステップSH2に進み、フラグHIFが「1」にセットされているか否かを判断する。フラグHIFが「0」ならば、判断結果は「NO」となり、ステップSH5に進み、レジスタHTをゼロリセットして本処理を終える。
これに対し、フラグHIFが「1」であると、上記ステップSH2の判断結果は「YES」になり、ステップSH3に進み、ハイハット音の発音を指示するノートオンイベントを作成し、続くステップSH4において、その作成したノートオンイベントを音源16に供給する。これにより、音源16はハイハット音を発音する。この後、ステップSH5に進み、レジスタHTをゼロリセットして本処理を終える。
このように、ハイハット処理では、拍タイミングに達する毎に、フラグHIFに基づきハイハットパートを自動伴奏するかどうかを判断し、フラグHIFが「1」にセットされていれば、ハイハット音の発音を指示するノートオンイベントを音源16に供給してハイハット音を発音させる。
(8)ドラム処理の動作
次に、図18を参照してドラム処理の動作を説明する。伴奏処理のステップSG2(図13参照)を介して本処理が実行されると、CPU12は図18に図示するステップSJ1に進み、フラグDRFが「1」、つまりドラムパートを自動伴奏する設定であるかどうかを判断する。フラグDRFが「0」ならば、ドラムパートを自動伴奏しない設定なので、判断結果は「NO」となり、本処理を終えるが、フラグDRFが「1」にセットされていれば、上記ステップSJ1の判断結果は「YES」になり、ステップSJ2に進む。
ステップSJ2では、ドラムパートの伴奏スタートフラグDSTFが「0」、すなわちドラムパートの自動伴奏が停止中であるか否かを判断する。ドラムパートの自動伴奏が停止中(伴奏スタートフラグDSTFが「0」)であると、判断結果は「YES」となり、ステップSJ3に進み、伴奏スタートフラグDSTFを「1」にセットする。
次いで、ステップSJ4では、RAM14の曲データエリアKDEにおいて、ポインタmで指定されるフレーズ区間(m)におけるドラムパートの開始アドレスをレジスタDADにストアする。以下、レジスタDADの内容をドラムパート読み出しアドレスDADと称す。そして、ステップSJ5に進み、ドラムパート読み出しアドレスDADに応じて曲データエリアKDEから読み出される曲データKDE(DAD)、すなわちドラムパートの先頭の「タイム」をレジスタDTにストアして本処理を終える。なお、以下ではレジスタDTの内容をドラムパート発音タイミングDTと称す。
こうしてドラムパートの自動伴奏を開始させた後に再び本処理が実行され、上述のステップSJ2に進むと、伴奏スタートフラグDSTFが「1」にセットされているので、判断結果は「NO」になり、ステップSJ6に進み、曲進行時間Tがドラムパート発音タイミングDTに一致するか否かを判断する。ドラムパート発音タイミングDTでなければ、判断結果は「NO」になり、一旦本処理を終える。
一方、曲進行時間Tがドラムパート発音タイミングDTに達すると、上記ステップSJ6の判断結果は「YES」になり、ステップSJ7に進み、ドラムパート読み出しアドレスDADをインクリメントして歩進させる。次いで、ステップSJ8では、歩進されたドラムパート読み出しアドレスDADが現フレーズ区間(m)の最終アドレスを超えたか否かを判断する。最終アドレスを超えていなければ、判断結果は「NO」になり、後述のステップSJ10に進む。
これに対し、歩進されたドラムパート読み出しアドレスDADが現フレーズ区間(m)の最終アドレスを超えると、上記ステップSJ8の判断結果は「YES」となり、ステップSJ9に進み、次フレーズ区間(m+1)におけるドラムパート開始アドレスを、ドラムパート読み出しアドレスDADにセットした後、ステップSJ10に進む。
そして、ステップSJ10では、ドラムパート読み出しアドレスDADに応じて曲データエリアKDEから読み出される曲データKDE(DAD)が「イベント」又は「タイム」の何れであるかを判別する。曲データKDE(DAD)が「タイム」であると、上述したステップSJ5に進み、読み出された「タイム」をドラムパート発音タイミングDTにセットして一旦本処理を終える。
曲データKDE(DAD)が「イベント」ならば、上記ステップSJ10を介してステップSJ11に進み、当該「イベント」(ドラム音の発音を指示するノートオンイベント)を音源16に供給する。これにより、音源16はドラム音を発音する。この後、上述したステップSJ7以降の動作を繰り返す。
このように、ドラム処理では、フラグDRFが「1」であって、かつ伴奏スタートフラグDSTFが「0」であると、伴奏スタートフラグDSTFを「1」にセットしてドラムパートの自動伴奏開始を表すと共に、RAM14の曲データエリアKDEにおいて、ポインタmで指定されるフレーズ区間(m)のドラムパート開始アドレスをドラムパート読み出しアドレスDADに設定し、このドラムパート読み出しアドレスDADに応じて読み出される最初の曲データKED(DAD)、すなわち先頭の「タイム」をドラムパート発音タイミングDTにセットして一旦本処理を終える。
以後、伴奏スタートフラグDSTFが「0」になる迄の間、本処理では曲進行時間Tがドラムパート発音タイミングDTに達する毎に、歩進されたドラムパート読み出しアドレスDADに応じて読み出される「イベント」(ドラム音の発音を指示するノートオンイベント)を音源16に供給してドラム音を発音させる一方、次の「タイム」を読み出して新たなドラムパート発音タイミングDTに更新する動作を繰り返すことでドラムパートの自動伴奏を進行させる。
(9)評価処理の動作
次に、図19を参照して評価処理の動作を説明する。前述したメインルーチンのステップSA6(図7参照)を介して本処理が実行されると、CPU12は図19に図示するステップSK1に進み、フラグHYOKAFが「1」であるか否かを判断する。前述した通り、フラグHYOKAFは、フレーズ区間の演奏が完了した時にフラグ値「1」がセットされる(図11に図示するガイド処理のステップSE25参照)。従って、例えば今、先頭のフレーズ区間(1)について演奏しているならば、フラグHYOKAFは「0」なので、上記ステップSK1の判断結果は「NO」になり、何も行わずに本処理を終える。
そして、再び本処理が実行された時に、例えば先頭のフレーズ区間(1)の演奏が完了してフラグHYOKAFに「1」がセットされたとする。そうすると、上記ステップSK1の判断結果は「YES」になり、ステップSK2に進む。ステップSK2では、前述したガイド処理にて計数されたタイミングミス回数TIMINGMISSと押鍵ミス回数KEYMISSとを加算してミス回数MISSを算出する。
次いで、ステップSK3では、評価テーブルET(図3参照)からミス回数MISSに対応した演奏評価結果HYOKAを読み出し、続くステップSK4では、その演奏評価結果HYOKAと現在レベルLEVELとに対応する補正値CT(HYOKA,LEVEL)を補正テーブルCT(図4参照)から読み出し、読み出した補正値CT(HYOKA,LEVEL)を現在レベルLEVELに加算して現在レベルLEVELを更新(補正)する。例えば演奏評価結果HYOKAが「D」、現在レベルLEVELが「3」であれば、補正テーブルCTから読み出される補正値CT(HYOKA,LEVEL)は「−1」となり、この結果、現在レベルLEVELは「3」から一段階下がって「2」に更新(補正)される。
こうして、演奏評価結果HYOKAに応じて現在レベルLEVELが補正されると、ステップSK5に進み、ROM13に記憶されるパートフラグ設定テーブルPT(図5参照)を参照し、現在レベルLEVELに応じた各パートフラグを設定する。例えば上記一例のように、現在レベルLEVELが「2」になった場合には、パートフラグ設定テーブルPTからフラグHIF、COF1、CO2FおよびPAFが「0」となり、フラグDRFおよびBAFが「1」となるパートフラグを読み出される。この結果、ガイド開始当初の先頭のフレーズ区間(1)では、デフォルト設定される現在レベルLEVEL値「3」に基づきドラムパート、ベースパートおよびコード1パートの自動伴奏となっていたが、フレーズ区間(1)の演奏練習を終えた時点の演奏評価結果HYOKAに基づき現在レベルLEVELが一段階下がって「2」になると、次フレーズ区間(2)ではドラムパートおよびベースパートの自動伴奏に変更される。
現在レベルLEVELに応じた各パートフラグが設定されると、ステップSK6に進み、タイミングミス回数TIMINGMISSが所定回数α以上であるか否かを判断する。タイミングミス回数TIMINGMISSが所定回数α未満ならば、判断結果は「NO」になり、後述のステップSK8に進むが、タイミングミス回数TIMINGMISSが所定回数α以上であると、上記ステップSK6の判断結果は「YES」になり、ステップSK7に進み、フラグHIFを「1」にセットしてハイハットパートを自動伴奏パートに加える。
つまり、タイミングミス回数TIMINGMISSが多い場合には、押鍵タイミングの間違いを減らす目的で強制的にハイハットパートを自動伴奏パートに加え、伴奏されるハイハット音を聴くことでタイミングを取り易くさせる。そして、ステップSK8では、ミス回数MISS、タイミングミス回数TIMINGMISSおよび押鍵ミス回数KEYMISSをそれぞれゼロリセットする。次いで、ステップSK9では、フラグHYOKAFをゼロリセットして本処理を終える。
このように、評価処理では、フレーズ区間の演奏が完了してフラグHYOKAFに「1」がセットされると、タイミングミス回数TIMINGMISSと押鍵ミス回数KEYMISSとを加算したミス回数MISSに基づき評価テーブルET(図3参照)から演奏評価結果HYOKAを読み出した後、その演奏評価結果HYOKAと現在レベルLEVELとに対応する補正値CT(HYOKA,LEVEL)を補正テーブルCT(図4参照)から読み出して現在レベルLEVELを補正し、補正された現在レベルLEVELに対応する各パートフラグをパートフラグ設定テーブルPT(図5参照)から読み出して次フレーズ区間で自動伴奏されるパートを設定する。
以上説明したように、本実施形態では、演奏パート(メロディパート)および複数の伴奏パートをフレーズ単位に区切り、区切られたフレーズ区間の各音を表す曲データの内、演奏パートの曲データに従ってフレーズ区間の各音の演奏をガイドすると共に、そのガイドされた音に対応した演奏操作であるか否かに応じて演奏のミス回数を計数する。一つのフレーズ区間を演奏し終える毎に、当該フレーズ区間で計数されたミス回数MISSからユーザの演奏操作を評価して演奏技量を表す現在レベルLEVELを生成する。そして、生成された現在レベルLEVELに応じて次フレーズ区間の伴奏パートを指定し、次フレーズ区間では複数の伴奏パートの中から指定された伴奏パートを自動伴奏するので、曲を演奏しているユーザの演奏技量に応じて、その演奏に自動伴奏される伴奏内容を変化させることが可能になる。
また、本実施形態によれば、現在レベルLEVELが「1」の、演奏操作に不慣れなユーザであると、拍に同期したタイミングで発音されるハイハット音だけを自動伴奏させるようにしたので、演奏タイミングの取り方を補助することが出来る。さらに、演奏技量の向上に連れて自動伴奏されるパートの種類を増やすようにしたので、上達するほど曲演奏の楽しみが増え、謂わばゲーム的要素を持たせて練習意欲の維持や向上を図ることが出来るという効果も奏する。加えて、タイミングミス回数TIMINGMISSが所定回数α以上であると、押鍵タイミングの間違いを減らす目的で強制的にハイハットパートを自動伴奏パートに加えるようにしたので、伴奏されるハイハット音をユーザに聴かせることで演奏のタイミングを取り易くさせることが出来る。
なお、本実施形態では、現フレーズ区間の演奏技量を表す現在レベルLEVELに応じて、次フレーズ区間で自動伴奏される伴奏パートを指定するようにしたが、これに限らず、現在レベルLEVELに応じて次フレーズ区間で自動伴奏される各伴奏パートのパターンを変化させる態様とすることも可能である。すなわち、演奏パート(メロディパート)以外の各伴奏パート毎に、予め演奏技量に応じて異なる複数の伴奏パターンの曲データを設けておき、その中から現フレーズ区間の演奏操作を評価して得られた現在レベルLEVELに対応する伴奏パターンを指定し、次フレーズ区間では各伴奏パートを指定された伴奏パターンで自動伴奏させる。このようにしても曲を演奏しているユーザの演奏技量に応じて、その演奏に自動伴奏される伴奏内容を変化させることが出来る。