(57)【特許請求の範囲】
【請求項１】
演奏パートおよび複数の伴奏パートを複数の区間に区切り、区切られた各区間の各音を表す曲データを記憶する曲データ記憶手段と、
前記曲データ記憶手段に記憶される曲データの内、演奏パートの曲データに従って区間中の各音の演奏をガイドする演奏ガイド手段と、
前記演奏ガイド手段によりガイドされた音に対応した演奏操作であるか否かに応じて区間中の演奏ミス回数を計数する計数手段と、
一つの区間を演奏し終える毎に、演奏し終えた現区間において前記計数手段が計数した演奏ミス回数に基づき演奏操作を評価して現区間の演奏技量レベルを生成する演奏評価手段と、
前記演奏評価手段によって生成された現区間の演奏技量レベルに応じて、複数の伴奏パートの中から次区間で自動伴奏する伴奏パートを指定するパート指定手段と、
前記パート指定手段により指定された伴奏パートを次区間で自動伴奏する自動伴奏手段とを備え、
前記パート指定手段は、
前記計数手段により計数された演奏ミス回数の内、不適なタイミングで演奏するタイミングミス回数が所定回数以上存在する場合に、拍タイミングに同期して発音されるリズム音の伴奏パートを指定するリズムパート指定手段を更に備えることを特徴とする自動伴奏装置。
【請求項２】
前記計数手段は、
前記演奏ガイド手段によりガイドされた音とは異なる音を演奏する操作ミス回数を計数する第１の計数手段と、
前記演奏ガイド手段によりガイドされた音の発音タイミングに対して不適なタイミングで演奏するタイミングミス回数を計数する第２の計数手段と、
前記第１および第２の計数手段によりそれぞれ計数される操作ミス回数とタイミングミス回数とを加算して演奏ミス回数を発生する回数加算手段と
を具備することを特徴とする請求項１記載の自動伴奏装置。
【請求項３】
前記演奏評価手段は、
前記計数手段により計数された演奏ミス回数を、演奏し終えた現区間の演奏評価結果に変換する変換手段と、
前記変換手段により得られる現区間の演奏評価結果と現区間の一つ前の区間の演奏技量レベルとに応じて、現区間の一つ前の区間の演奏技量レベルを現区間の演奏技量レベルに更新する更新手段と
を具備することを特徴とする請求項１記載の自動伴奏装置。
【請求項４】
コンピュータに、
演奏パートおよび複数の伴奏パートを複数の区間に区切り、区切られた各区間の各音を表す曲データの内、演奏パートの曲データに従って区間中の各音の演奏をガイドする演奏ガイドステップと、
前記演奏ガイドステップによりガイドされた音に対応した演奏操作であるか否かに応じて区間中の演奏ミス回数を計数する計数ステップと、
一つの区間を演奏し終える毎に、演奏し終えた現区間において前記計数ステップで計数した演奏ミス回数に基づき演奏操作を評価して現区間の演奏技量レベルを生成する演奏評価ステップと、
前記演奏評価ステップにて生成された現区間の演奏技量レベルに応じて、複数の伴奏パートの中から次区間で自動伴奏する伴奏パートを指定するパート指定ステップと、
前記パート指定ステップにより指定された伴奏パートを次区間で自動伴奏する自動伴奏ステップとを実行させ、
前記パート指定ステップは、
前記計数ステップにより計数された演奏ミス回数の内、不適なタイミングで演奏するタイミングミス回数が所定回数以上存在する場合に、拍タイミングに同期して発音されるリズム音の伴奏パートを指定するリズムパート指定ステップを更に実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、曲を演奏しているユーザの演奏技量に応じて、その演奏に自動伴奏される伴奏内容を変化させる自動伴奏装置およびプログラムに関する。
【背景技術】
【０００２】
近年、曲の演奏練習の単調さを解消して練習意欲を維持させる技術が各種開発されている。この種の技術として、例えば特許文献１には、曲を構成する各パートの曲データの内、ピアノパートの曲データに基づきユーザが演奏（鍵操作）を練習し、この演奏練習中に発生する演奏ミスの回数を計数して演奏評価を行い、その評価結果が低ければピアノパート以外の他の自動演奏されるパート（ベースやドラム、ギター等）の曲データの再生音量（発音音量）を低減させることによって、演奏練習の評価結果をユーザに認識させる、謂わばゲーム的要素を加味して練習意欲の維持を図る装置が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−３１７７７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上記特許文献１に開示の装置では、単に演奏を練習するパートの演奏評価結果に応じて、練習パート以外の他の自動演奏されるパートの発音音量を制御するだけであるから、曲を演奏しているユーザの演奏技量に応じて、その演奏に自動伴奏される伴奏内容を変化させることが出来ない、という問題がある。
【０００５】
本発明は、このような事情に鑑みてなされたもので、曲を演奏しているユーザの演奏技量に応じて、その演奏に自動伴奏される伴奏内容を変化させることができる自動伴奏装置およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、請求項１に記載の発明では、演奏パートおよび複数の伴奏パートを複数の区間に区切り、区切られた各区間の各音を表す曲データを記憶する曲データ記憶手段と、前記曲データ記憶手段に記憶される曲データの内、演奏パートの曲データに従って区間中の各音の演奏をガイドする演奏ガイド手段と、前記演奏ガイド手段によりガイドされた音に対応した演奏操作であるか否かに応じて区間中の演奏ミス回数を計数する計数手段と、一つの区間を演奏し終える毎に、演奏し終えた現区間において前記計数手段が計数した演奏ミス回数に基づき演奏操作を評価して現区間の演奏技量レベルを生成する演奏評価手段と、前記演奏評価手段によって生成された現区間の演奏技量レベルに応じて、複数の伴奏パートの中から次区間で自動伴奏する伴奏パートを指定するパート指定手段と、前記パート指定手段により指定された伴奏パートを次区間で自動伴奏する自動伴奏手段とを備え、前記パート指定手段は、前記計数手段により計数された演奏ミス回数の内、不適なタイミングで演奏するタイミングミス回数が所定回数以上存在する場合に、拍タイミングに同期して発音されるリズム音の伴奏パートを指定するリズムパート指定手段を更に備えることを特徴とする。
【０００７】
上記請求項１に従属する請求項２に記載の発明では、前記計数手段は、前記演奏ガイド手段によりガイドされた音とは異なる音を演奏する操作ミス回数を計数する第１の計数手段と、前記演奏ガイド手段によりガイドされた音の発音タイミングに対して不適なタイミングで演奏するタイミングミス回数を計数する第２の計数手段と、前記第１および第２の計数手段によりそれぞれ計数される操作ミス回数とタイミングミス回数とを加算して演奏ミス回数を発生する回数加算手段とを具備することを特徴とする。
【０００８】
上記請求項１に従属する請求項３に記載の発明では、前記演奏評価手段は、前記計数手段により計数された演奏ミス回数を、演奏し終えた現区間の演奏評価結果に変換する変換手段と、前記変換手段により得られる現区間の演奏評価結果と現区間の一つ前の区間の演奏技量レベルとに応じて、現区間の一つ前の区間の演奏技量レベルを現区間の演奏技量レベルに更新する更新手段とを具備することを特徴とする。
【０００９】
請求項４に記載の発明では、コンピュータに、演奏パートおよび複数の伴奏パートを複数の区間に区切り、区切られた各区間の各音を表す曲データの内、演奏パートの曲データに従って区間中の各音の演奏をガイドする演奏ガイドステップと、前記演奏ガイドステップによりガイドされた音に対応した演奏操作であるか否かに応じて区間中の演奏ミス回数を計数する計数ステップと、一つの区間を演奏し終える毎に、演奏し終えた現区間において前記計数ステップで計数した演奏ミス回数に基づき演奏操作を評価して現区間の演奏技量レベルを生成する演奏評価ステップと、前記演奏評価ステップにて生成された現区間の演奏技量レベルに応じて、複数の伴奏パートの中から次区間で自動伴奏する伴奏パートを指定するパート指定ステップと、前記パート指定ステップにより指定された伴奏パートを次区間で自動伴奏する自動伴奏ステップとを実行させ、前記パート指定ステップは、前記計数ステップにより計数された演奏ミス回数の内、不適なタイミングで演奏するタイミングミス回数が所定回数以上存在する場合に、拍タイミングに同期して発音されるリズム音の伴奏パートを指定するリズムパート指定ステップを更に実行させることを特徴とする。
【発明の効果】
【００１１】
本発明では、曲を演奏しているユーザの演奏技量に応じて、その演奏に自動伴奏される伴奏内容を変化させることができる。この自動伴奏内容の変化は、即聴覚的変化として演奏者は認識することができ、このことから演奏技量、つまり演奏評価を聴覚的に認識することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】実施の一形態による自動伴奏装置１００の構成を示すブロック図である。
【図２】ＲＯＭ１３のメモリ構成を示すメモリマップである。
【図３】ＲＯＭ１３に記憶される評価テーブルＥＴの構成を示す図である。
【図４】ＲＯＭ１３に記憶される補正テーブルＣＴの構成を示す図である。
【図５】ＲＯＭ１３に記憶されるパートフラグ設定テーブルＰＴの構成を示す図である。
【図６】ＲＡＭ１４のメモリ構成および曲データの構成を示すメモリマップである。
【図７】メインルーチンの動作を示すフローチャートである。
【図８】イニシャル処理の動作を示すフローチャートである。
【図９】スイッチ処理の動作を示すフローチャートである。
【図１０】タイマインタラプト処理の動作を示すフローチャートである。
【図１１】ガイド処理の動作を示すフローチャートである。
【図１２】ガイド処理の動作を示すフローチャートである。
【図１３】ガイド処理の動作を示すフローチャートである。
【図１４】鍵盤処理の動作を示すフローチャートである。
【図１５】鍵盤処理の動作を示すフローチャートである。
【図１６】伴奏処理の動作を示すフローチャートである。
【図１７】ハイハット処理の動作を示すフローチャートである。
【図１８】ドラム処理の動作を示すフローチャートである。
【図１９】評価処理の動作を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面を参照して本発明の実施形態について説明する。
Ａ．構成
図１は、実施の一形態による自動伴奏装置１００の構成を示すブロック図である。この図において、鍵盤１０は演奏操作（押離鍵操作）に応じたキーオン／キーオフ信号、鍵番号およびベロシティ等の演奏情報を発生する。スイッチ部１１は、装置パネルに配設される各種操作スイッチを有し、ユーザ操作されるスイッチ種に対応したスイッチイベントを発生する。本発明の要旨に係わるスイッチとして、曲データに従って演奏操作をユーザに案内するガイド（後述する）の開始／停止を指示するスタート／ストップスイッチを有する。
【００１４】
ＣＰＵ１２は、スイッチ部１１が発生する各種スイッチイベントに応じて装置各部を制御する。本発明の要旨に係わるＣＰＵ１２の処理動作については追って詳述する。ＲＯＭ１３は、図２に図示するように、プログラムエリアＰＥおよびテーブルエリアＴＥを備える。ＲＯＭ１３のプログラムエリアＰＥには、ＣＰＵ１２にロードされる各種の制御プログラムが記憶される。各種の制御プログラムとは、後述するメインルーチン、イニシャル処理、スイッチ処理、タイマインタラプト処理、ガイド処理、鍵盤処理、伴奏処理および評価処理を含む。なお、伴奏処理は、ハイハット処理、ドラム処理、ベース処理、コード１処理、コード２処理およびパーカッション処理から構成される。
【００１５】
ＲＯＭ１３のテーブルエリアＴＥには、図２に図示するように、評価テーブルＥＴ、補正テーブルＣＴおよびパートフラグ設定テーブルＰＴが記憶される。以下、図３〜図５を参照してこれらテーブルＥＴ、ＣＴおよびＰＴの構成について説明する。先ず図３は評価テーブルＥＴの一構成例を示す図である。評価テーブルＥＴは、後述する評価処理で参照されるデータテーブルであり、ミス回数ＭＩＳＳに対応した演奏評価結果を出力する。ミス回数ＭＩＳＳとは、一つのフレーズ区間において押鍵するタイミングを間違えた回数（タイミングミス回数ＴＩＭＩＮＧＭＩＳＳ）と、弾くべき鍵とは異なる鍵を押鍵してしまった回数（押鍵ミス回数ＫＥＹＭＩＳＳ）との和を表す。
【００１６】
例えば曲のあるフレーズ区間についてユーザが演奏練習を行い、その区間におけるミス回数ＭＩＳＳが「０」の場合には、評価テーブルＥＴから当該フレーズ区間の演奏評価を表す演奏評価結果「Ａ」が読み出される。また、演奏練習したフレーズ区間のミス回数ＭＩＳＳが「２」ならば、評価テーブルＥＴから演奏評価結果「Ｂ」が読み出される。
【００１７】
図４は補正テーブルＣＴの一構成例を示す図である。補正テーブルＣＴは、後述する評価処理で参照されるデータテーブルであり、上述の評価テーブルＥＴから読み出される演奏評価結果に応じて、現在のレベルを補正する補正値を出力する。現在のレベルとは、ユーザの演奏技量を表す値であり、通常、レベル「３」がデフォルト設定される。
【００１８】
例えば曲のあるフレーズ区間についてユーザが演奏練習を行い、その区間の演奏評価結果が「Ａ」であって、かつ現在のレベルが「３」の場合には、補正値「＋１」が読み出される。また、あるフレーズ区間の演奏評価結果が「Ｅ」で現在のレベルが「１」ならば、補正値「０」が読み出される。
【００１９】
なお、後述するように、補正テーブルＣＴから読み出される補正値は現在のレベルに加算される。つまり、一つのフレーズ区間を演奏し終える毎に、演奏し終えた現フレーズ区間の一つ前のフレーズ区間における現在のレベル（前フレーズ区間のレベル）と、現フレーズ区間の演奏評価結果とに応じて補正テーブルＣＴから補正値を読み出し、読み出した補正値を前フレーズ区間のレベルに加算することによって、現フレーズ区間の現在のレベルを更新するようになっている。
【００２０】
図５はパートフラグ設定テーブルＰＴの一構成例を示す図である。パートフラグ設定テーブルＰＴは、後述するスイッチ処理および評価処理で参照されるデータテーブルであり、ユーザの演奏技量を表す現在のレベルに対応したパートフラグが読み出される。パートフラグとは、自動伴奏パートの有効／無効を表すフラグであり、本実施形態ではハイハットパートの有効／無効を表すフラグＨＩＦ、ドラムパートの有効／無効を表すフラグＤＲＦ、ベースパートの有効／無効を表すフラグＢＡＦ、コード１パートの有効／無効を表すフラグＣＯ１Ｆ、コード２パートの有効／無効を表すフラグＣＯ２およびパーカッションパートの有効／無効を表すフラグＰＡＦから構成される。
【００２１】
例えば現在のレベルが「３」ならば、フラグＨＩＦ、ＣＯ２ＦおよびＰＡＦが「０」、フラグＤＲＦ、ＢＡＦおよびＣＯ１Ｆが「１」となるパートフラグがパートフラグ設定テーブルＰＴから読み出される。この場合、ハイハットパート、コード２パートおよびパーカッションパートが無効となり自動伴奏されず、一方、ドラムパート、ベースパートおよびコード１パートが有効となり自動伴奏される。
【００２２】
次に、ＲＡＭ１４は、図６に図示するように、ワークエリアＷＥおよび曲データエリアＫＤＥを備える。ＲＡＭ１４のワークエリアＷＥには、ＣＰＵ１２の処理に用いられる各種レジスタ・フラグデータが一時記憶される。ＲＡＭ１４の曲データエリアＫＤＥは、演奏練習する曲をフレーズ単位に区切った複数のフレーズ区間（０）〜（ｍ）から形成される。一つのフレーズ区間は、各パート（メロディパート、ドラムパート、ベースパート、コード１パート、コード２パートおよびパーカッションパート）の曲データから構成される。
【００２３】
曲データは、対応するパートのフレーズ区間を構成する各音を表す。一つの曲データは、タイムおよびイベントが対となって曲進行に対応した時系列のアドレス順に記憶される、いわゆる絶対時間方式と呼ばれるデータ形式で表現される。タイムは、曲開始時点からの経過時間で現イベントのタイミングを表す。イベントは、発音を表すノートオンイベント（又は消音を表すノートオフイベント）および発音音高（又は消音音高）を表すノートナンバを含む。なお、ドラムやパーカッションのパートの曲データでは、音高要素を持たない楽音なので、イベントは発音を表すノートオンイベントのみとなる。
【００２４】
再び図１を参照して実施形態の構成について説明を進める。図１において、表示部１５は、ＬＣＤパネル等から構成され、ＣＰＵ１２から供給される表示制御信号に応じて装置の設定状態や動作状態などを画面表示したりガイド表示したりする。なお、ここで言うガイド表示とは、例えば鍵盤１０の各鍵を示す鍵盤画像を表示部１５に画面表示しておき、その画面表示される鍵盤画像中でブリンク表示させた鍵を「次に弾くべき鍵」として案内し、さらにその鍵を反転表示して押鍵タイミングを案内する表示形態を指す。
【００２５】
音源１６は、周知の波形メモリ読み出し方式によって構成され、時分割動作する複数の発音チャンネルを備える。この音源１６は、上述した各パートに対応した音色の波形データを記憶しており、これらの内、ＣＰＵ１２から供給される楽音パラメータに応じた波形データを読み出して楽音出力を発生する。サウンドシステム１７は、音源１６の楽音出力をアナログ形式の楽音信号に変換した後、その楽音信号から不要ノイズを除去する等のフィルタリングを施してからレベル増幅してスピーカより発音させる。
【００２６】
Ｂ．動作
次に、図７〜図１９を参照して上記構成による実施形態の動作について説明する。以下では、最初にメインルーチンの動作を説明し、続いてメインルーチンからコールされる各処理（スイッチ処理、ガイド処理、鍵盤処理、伴奏処理および評価処理）の動作について述べる。
【００２７】
（１）メインルーチンの動作
自動伴奏装置１００がパワーオンされると、ＣＰＵ１２は図７に図示するメインルーチンを実行し、ステップＳＡ１を介して図８に図示するイニシャル処理を実行する。イニシャル処理では、ステップＳＢ１において、ＲＡＭ１４のワークエリアＷＥ（図６参照）に格納される各種レジスタやフラグデータをゼロリセット又は初期値セットする他、音源１６に対して初期化を指示し、続くステップＳＢ２では、レジスタＬＥＶＥＬに「３」をストアする。なお、レジスタＬＥＶＥＬにストアされる値は、ユーザの演奏技量を表す現在レベルを表す。本実施形態では、通常の演奏技量を表す値として「３」がデフォルト設定される。以後、レジスタＬＥＶＥＬの内容を現在レベルＬＥＶＥＬと称す。
【００２８】
さて、ステップＳＡ１のイニシャライズ処理が完了すると、ＣＰＵ１２は次のステップＳＡ２に進み、スイッチ処理を実行する。スイッチ処理では、後述するように、スタート／ストップスイッチのオン操作に応じてスタートフラグＳＴＦが「１」となり、ガイドの開始が指示された場合には、メロディパートの最初のノートオンイベントに含まれる発音音高に基づきガイド表示を行って最初に弾くべき鍵をユーザにガイドする。そして、ＲＯＭ１３に記憶されるパートフラグ設定テーブルＰＴ（図５参照）を参照して現在レベルＬＥＶＥＬに応じた各パートフラグを設定すると共に、各パートの伴奏スタートフラグ（ＤＳＴＦ、ＢＳＴＦ、Ｃ１ＳＴＦ、Ｃ２ＳＴＦ、ＰＳＴＦ）および曲進行時間を累算するレジスタＴをゼロリセットした後、タイマインタラプト禁止を解除する。一方、スタート／ストップスイッチのオン操作に応じてスタートフラグＳＴＦが「０」となり、ガイドの停止が指示された場合には、全てのフラグ・レジスタを初期化すると共に、表示部１５のガイド表示を停止してタイマインタラプトを禁止する。
【００２９】
次いで、ステップＳＡ３では、ガイド処理を実行する。ガイド処理では、後述するように、フレーズ区間（ｍ）を演奏中にメロディパートのイベントタイミングに達すると、歩進させたメロディパート読み出しアドレスＭＡＤに応じて曲データＫＤＥ（ＭＡＤ）を読み出し、それがノートオンイベントならば発音音高に対応する鍵の押鍵をユーザに案内するガイド表示を行い、ノートオフイベントならば消音音高に対応する鍵のガイド表示を停止する。
【００３０】
そして、メロディパート読み出しアドレスＭＡＤの歩進に応じて読み出されるメロディパート次イベントタイミングＦＴがフレーズ区間（ｍ）に収まるならば、当該メロディパート次イベントタイミングＦＴを新たなメロディパートイベントタイミングＭＴに更新すると共に、次押鍵タイミングＹＴもフレーズ区間（ｍ）内に存在するならば、該当するノートオンイベントの発音音高に基づいて次に弾くべき鍵の位置をユーザに案内するガイド表示を行う。
【００３１】
続いて、曲進行時間Ｔがフレーズ区間（ｍ）の終了時間に一致し、当該フレーズ区間（ｍ）を演奏し終えると、ユーザの演奏評価を行うか否かを判定するフラグＨＹＯＫＡＦを「１」にセットして演奏評価を行う旨を表す。この後、ポインタｍをインクリメントして歩進させ、歩進させたポインタｍが最大フレーズ数を超えたか否か、つまり全てのフレーズ区間について演奏し終えたかどうかを判断し、全てのフレーズ区間について演奏し終えていなければ、本処理を終えるが、全てのフレーズ区間について演奏し終えると、全フラグ・レジスタの初期化を行った後、音源１６に消音を指示すると共に、表示部１５のガイド表示を停止し、さらに曲進行時間を計時するタイマインタラプト処理を禁止して本処理を終える。
【００３２】
次に、ステップＳＡ４では、後述するように、押離鍵操作に応じて、押鍵（又は離鍵）された鍵の音高の楽音を発音（又は消音）するよう音源１６に指示する一方、押鍵時には曲データに従ってガイドされた鍵が適正なタイミングで弾かれたかどうかを判断し、ガイドされた鍵とは異なる鍵を間違って弾いた時には押鍵ミス回数ＫＥＹＭＩＳＳを歩進し、間違ったタイミングで弾いた時にはタイミングミス回数を歩進する鍵盤処理を実行する。
【００３３】
次いで、ステップＳＡ５では、伴奏処理を実行する。伴奏処理では、後述するように、パートフラグ（フラグＨＩＦ、フラグＤＲＦ、フラグＢＡＦ、フラグＣＯ１Ｆ、フラグＣＯ２およびフラグＰＡＦ）に基づき自動伴奏パートの有効／無効が指定され、有効とされたパート（ハイハットパートを除く）では曲進行に同期して順次読み出される曲データ（タイムおよびイベント）に従い、タイムで表される発音タイミングに達する毎に、イベントで指定されるパートの音を発音する。なお、ハイハットパートの場合には、フラグＨＩＦが「１」にセットされていると、拍タイミングに達する毎にハイハット音の発音を指示するノートオンイベントを音源１６に供給してハイハット音を発音させる。
【００３４】
そして、ステップＳＡ６では、評価処理を実行する。評価処理では、後述するように、フレーズ区間の演奏練習が完了してフラグＨＹＯＫＡＦに「１」がセットされると、タイミングミス回数ＴＩＭＩＮＧＭＩＳＳと押鍵ミス回数ＫＥＹＭＩＳＳとを加算したミス回数ＭＩＳＳに基づき評価テーブルＥＴ（図３参照）から演奏評価結果ＨＹＯＫＡを読み出した後、その演奏評価結果ＨＹＯＫＡと現在レベルＬＥＶＥＬとに対応する補正値ＣＴ（ＨＹＯＫＡ，ＬＥＶＥＬ）を補正テーブルＣＴ（図４参照）から読み出して現在レベルＬＥＶＥＬを補正し、補正された現在レベルＬＥＶＥＬに対応する各パートフラグをパートフラグ設定テーブルＰＴ（図５参照）から読み出して次フレーズ区間で自動伴奏されるパートを設定する。
【００３５】
続いて、ステップＳＡ７では、例えば表示部１５に曲データを楽譜表示する処理などの、その他の処理を実行する。そして、その他の処理が完了すると、再び上記ステップＳＡ２に戻り、以後、装置電源がパワーオフされるまで上述したステップＳＡ２〜ＳＡ７を繰り返す。
【００３６】
（２）スイッチ処理の動作
次に、図９を参照してスイッチ処理の動作を説明する。上述したメインルーチンのステップＳＡ２（図７参照）を介して本処理が実行されると、ＣＰＵ１２は図９に図示するステップＳＣ１に進み、スタート／ストップスイッチのオン操作の有無を判断する。スタート／ストップスイッチがオン操作されなければ、判断結果は「ＮＯ」になり、本処理を終えるが、オン操作されると、判断結果が「ＹＥＳ」になり、ステップＳＣ２に進む。
【００３７】
ステップＳＣ２では、スタートフラグＳＴＦを反転する。スタートフラグＳＴＦとは、フラグ値「１」の場合にガイドの開始を表し、フラグ値「０」の場合にガイドの停止を表すフラグである。また、スタート／ストップスイッチは所謂トグル動作するスイッチであり、オン操作に応じてガイドの開始／停止を交互に指示する。次いで、ステップＳＣ３では、スタート／ストップスイッチのオン操作に応じて反転されたスタートフラグＳＴＦが「１」であるか否かを判断する。以下、スタート／ストップスイッチのオン操作に応じて反転されたスタートフラグＳＴＦが「１」（ガイドの開始）の場合と、当該スタートフラグＳＴＦが「０」（ガイドの停止）の場合とに分けて動作説明を進める。
【００３８】
＜スタートフラグＳＴＦが「１」（ガイドの開始）の場合＞
反転されたスタートフラグＳＴＦが「１」（ガイドの開始）であると、上記ステップＳＣ３の判断結果が「ＹＥＳ」になり、ステップＳＣ４に進み、曲データ中のフレーズ区間を指定するポインタｍをゼロリセットする。次いで、ステップＳＣ５では、ＲＡＭ１４の曲データエリアＫＤＥにおいて、ポインタｍで指定されるフレーズ区間（ｍ）におけるメロディパートの開始アドレスをレジスタＭＡＤにストアする。以下、レジスタＭＡＤの内容をメロディパート読み出しアドレスＭＡＤと称す。
【００３９】
続いて、ステップＳＣ６では、メロディパート読み出しアドレスＭＡＤに応じて曲データエリアＫＤＥから読み出される曲データＫＤＥ（ＭＡＤ）、すなわちメロディパートの先頭の「タイム」をレジスタＭＴにストアする。レジスタＭＴにストアされる「タイム」は、メロディパートのイベントタイミングに相当する。以下、レジスタＭＴの内容をメロディパートイベントタイミングＭＴと称す。
【００４０】
そして、ステップＳＣ７に進み、ポインタｎを初期値「１」にセットし、続くステップＳＣ８では、このポインタｎをメロディパート読み出しアドレスＭＡＤに加算した読み出しアドレス（ＭＡＤ＋ｎ）に応じて、曲データエリアＫＤＥから読み出される曲データＫＤＥ（ＭＡＤ＋ｎ）がノートオンイベントであるか否かを判断する。曲データＫＤＥ（ＭＡＤ＋ｎ）がノートオンイベントでなければ、判断結果は「ＮＯ」になり、ステップＳＣ９に進み、ポインタｎをインクリメントして歩進させた後、上述のステップＳＣ８に戻る。
【００４１】
つまり、ステップＳＣ７〜ＳＣ９では、メロディパートにおける最初のノートオンイベントが読み出される迄、ポインタｎをインクリメントして読み出しアドレス（ＭＡＤ＋ｎ）を歩進させる。そして、メロディパートにおける最初のノートオンイベントが読み出されると、上記ステップＳＣ８の判断結果は「ＹＥＳ」となり、ステップＳＣ１０に進み、その読み出されたノートオンイベントに含まれる発音音高をレジスタＮＥＸＴＮＯＴＥにストアする。
【００４２】
続いて、ステップＳＣ１１では、レジスタＮＥＸＴＮＯＴＥにストアした発音音高に対応する鍵のガイド表示を行う。ここで言うガイド表示とは、表示部１５に画面表示される鍵盤画像において、レジスタＮＥＸＴＮＯＴＥにストアした発音音高に対応する鍵の画像の表示形態を変化（例えばブリンク表示）させ、ユーザに対して次に弾くべき鍵を案内する表示態様を指す。したがって、このステップＳＣ１１におけるガイド表示によって、演奏練習するメロディパートで最初に弾くべき鍵の位置がユーザにガイドされる。
【００４３】
そして、ステップＳＣ１２に進むと、ＲＯＭ１３に記憶されるパートフラグ設定テーブルＰＴ（図５参照）を参照し、現在レベルＬＥＶＥＬに応じた各パートフラグを設定する。具体的には、デフォルト設定される現在レベルＬＥＶＥＬの値「３」に対応してパートフラグ設定テーブルＰＴからフラグＨＩＦ、ＣＯ２ＦおよびＰＡＦが「０」、フラグＤＲＦ、ＢＡＦおよびＣＯ１Ｆが「１」となるパートフラグを読み出される。これにより、現在レベルＬＥＶＥＬの値が「３」となるガイド開始当初では、ドラムパート、ベースパートおよびコード１パートの自動伴奏となる。
【００４４】
次いで、ステップＳＣ１３では、各パートの伴奏スタートフラグ（ＤＳＴＦ、ＢＳＴＦ、Ｃ１ＳＴＦ、Ｃ２ＳＴＦ、ＰＳＴＦ）をゼロリセットする。なお、伴奏スタートフラグＤＳＴＦ、ＢＳＴＦ、Ｃ１ＳＴＦ、Ｃ２ＳＴＦ、ＰＳＴＦとは、後述する伴奏処理で参照されるフラグであり、「１」の場合に伴奏進行中を表し、「０」の場合に伴奏停止を表す。
【００４５】
この後、ステップＳＣ１４に進み、曲進行時間を累算するレジスタＴをゼロリセットし、続くステップＳＣ１５では、タイマインタラプト禁止を解除して本処理を終える。なお、ＣＰＵ１２では、上記ステップＳＣ１５においてタイマインタラプト禁止を解除すると、タイマ機能を具現するタイマインタラプト処理（後述する）をスタートさせる。
【００４６】
＜スタートフラグＳＴＦが「０」（ガイドの停止）の場合＞
一方、スタート／ストップスイッチのオン操作に応じて反転されたスタートフラグＳＴＦが「０」（ガイドの停止）ならば、上記ステップＳＣ３の判断結果は「ＮＯ」になり、ステップＳＣ１６に進み、全てのフラグ・レジスタを初期化する。この後、ステップＳＣ１７に進み、音源１６に消音を指示すると共に、表示部１５のガイド表示を停止する。そして、ステップＳＣ１８に進み、曲進行時間を計時するタイマインタラプト処理（後述する）を禁止して本処理を終える。
【００４７】
このように、スイッチ処理では、スタート／ストップスイッチのオン操作に応じてスタートフラグＳＴＦが「１」となり、ガイドの開始が指示されると、メロディパートの最初のノートオンイベントに含まれる発音音高に基づきガイド表示を行って最初に弾くべき鍵をユーザにガイドする。そして、ＲＯＭ１３に記憶されるパートフラグ設定テーブルＰＴ（図５参照）を参照して現在レベルＬＥＶＥＬに応じた各パートフラグを設定すると共に、各パートの伴奏スタートフラグ（ＤＳＴＦ、ＢＳＴＦ、Ｃ１ＳＴＦ、Ｃ２ＳＴＦ、ＰＳＴＦ）および曲進行時間を累算するレジスタＴをゼロリセットした後、タイマインタラプト禁止を解除する。一方、スタート／ストップスイッチのオン操作に応じてスタートフラグＳＴＦが「０」となり、ガイドの停止が指示された場合には、全てのフラグ・レジスタを初期化すると共に、表示部１５のガイド表示を停止してタイマインタラプト処理を禁止する。
【００４８】
（３）タイマインタラプト処理の動作
次に、図１０を参照してタイマインタラプト処理の動作を説明する。上述したスイッチ処理のステップＳＣ１５（図９参照）においてタイマインタラプト禁止が解除されると、所定周期毎のタイマ割り込みによってＣＰＵ１２は図１０に図示するタイマインタラプト処理を実行する。割り込み実行タイミングになると、ステップＳＤ１に進み、レジスタＴの値をインクリメントして曲進行時間を歩進させ、続くステップＳＤ２では、レジスタＨＴの値をインクリメントして歩進させて本処理を終える。なお、以後、レジスタＴの値を曲進行時間Ｔと称す。
【００４９】
（４）ガイド処理の動作
次に、図１１〜図１３を参照してガイド処理の動作を説明する。前述したメインルーチンのステップＳＡ３（図７参照）を介して本処理が実行されると、ＣＰＵ１２は図１１に図示するステップＳＥ１に進み、スタートフラグＳＴＦが「１」（ガイドの開始）であるかどうかを判断する。スタートフラグＳＴＦが「０」（ガイドの停止）ならば、判断結果は「ＮＯ」になり、本処理を終えるが、スタートフラグＳＴＦが「１」（ガイドの開始）であると、判断結果は「ＹＥＳ」になり、ステップＳＥ２に進む。
【００５０】
ステップＳＥ２では、曲進行時間Ｔがポインタｍで指定されるフレーズ区間（ｍ）の終了時間に一致したか、つまりフレーズ区間（ｍ）を演奏し終えたかどうかを判断する。以下、フレーズ区間（ｍ）を演奏中の場合と、フレーズ区間（ｍ）を演奏し終えた場合とに分けて動作の説明を進める。
【００５１】
＜フレーズ区間（ｍ）を演奏中の場合＞
メロディパートにおけるフレーズ区間（ｍ）を演奏中であると、上記ステップＳＥ２の判断結果は「ＮＯ」になり、図１２に図示するステップＳＥ３に進む。ステップＳＥ３では、曲進行時間ＴがメロディパートイベントタイミングＭＴに一致するか否か、つまりメロディパートイベントタイミングＭＴに達したかどうかを判断する。メロディパートイベントタイミングＭＴに達していなければ、判断結果は「ＮＯ」になり、一旦本処理を終える。
【００５２】
これに対し、メロディパートイベントタイミングであると、上記ステップＳＥ３の判断結果は「ＹＥＳ」になり、ステップＳＥ４に進み、メロディパート読み出しアドレスＭＡＤをインクリメントして歩進させる。続いて、ステップＳＥ５では、歩進させたメロディパート読み出しアドレスＭＡＤに応じて曲データエリアＫＤＥから読み出される曲データＫＤＥ（ＭＡＤ）が「イベント」又は「タイム」の何れであるかを判別する。
【００５３】
前述した通り、曲データはタイムとイベントとが対になっているので、メロディパートイベントタイミング下で読み出される曲データＫＤＥ（ＭＡＤ）は「イベント」となり、これによりステップＳＥ５を介して図１３に図示するステップＳＥ６に処理を進める。ステップＳＥ６では、読み出された曲データＫＤＥ（ＭＡＤ）がノートオンイベントであるか否かを判断する。ノートオンイベントならば、判断結果は「ＹＥＳ」になり、ステップＳＥ７に進む。
【００５４】
ステップＳＥ７では、当該ノートオンイベントに含まれる発音音高をレジスタＮＯＴＥにストアする。そして、ステップＳＥ８に進み、ノートフラグＮＯＴＥＦを「１」にセットする。なお、このノートフラグＮＯＴＥＦは、「１」の場合にノートオンを表し、「０」の場合にノートオフを表す。続いて、ステップＳＥ９に進むと、表示部１５に画面表示される鍵盤画像において、レジスタＮＯＴＥにストアした発音音高に対応する鍵の画像の表示形態を変化（例えば反転表示）させてユーザに押鍵を案内するガイド表示を行った後、上述のステップＳＥ４（図１２参照）に処理を戻す。
【００５５】
一方、ノートオンイベントでなければ、上記ステップＳＥ６の判断結果は「ＮＯ」となり、ステップＳＥ１０に進み、ノートオフイベントであるか否かを判断する。ノートオン／ノートオフイベント以外の他のイベント（例えば音色切替を指示するプログラムチェンジ等）であると、判断結果は「ＮＯ」になり、上述のステップＳＥ４（図１２参照）に処理を戻すが、ノートオフイベントであると、上記ステップＳＥ１０の判断結果が「ＹＥＳ」になり、ステップＳＥ１１に進む。ステップＳＥ１１では、ノートオフイベントに含まれる消音音高をレジスタＮＯＴＥにストアし、続くステップＳＥ１２においてノートフラグＮＯＴＥＦをゼロリセットする。この後、ステップＳＥ１３に進み、表示部１５に画面表示される鍵盤画像において、レジスタＮＯＴＥにストアした消音音高に対応する鍵のガイド表示を停止させた後、上述のステップＳＥ４（図１２参照）に処理を戻す。
【００５６】
さて、こうしてノートオン／ノートオフイベントに対応した処理を実行してから図１２に図示するステップＳＥ４に戻り、メロディパート読み出しアドレスＭＡＤを歩進させた後、歩進させたメロディパート読み出しアドレスＭＡＤに応じて曲データエリアＫＤＥから読み出される曲データＫＤＥ（ＭＡＤ）が「タイム」になると、上述のステップＳＥ５を介してステップＳＥ１４に進む。
【００５７】
ステップＳＥ１４では、歩進させたメロディパート読み出しアドレスＭＡＤに応じて曲データエリアＫＤＥから読み出される曲データＫＤＥ（ＭＡＤ）、すなわち「タイム」をレジスタＦＴにストアする。レジスタＦＴにストアされる「タイム」は、メロディパートにおける次のイベントタイミングに相当する。以下、レジスタＦＴの内容をメロディパート次イベントタイミングＦＴと称す。
【００５８】
次いで、ステップＳＥ１５では、メロディパート次イベントタイミングＦＴが、ポインタｍで指定されるフレーズ区間（ｍ）の終了時間以内であるか否かを判断する。メロディパート次イベントタイミングＦＴがフレーズ区間（ｍ）の終了時間を超え、次フレーズ区間（ｍ＋１）に含まれる場合には判断結果が「ＮＯ」となり、一旦本処理を終える。
【００５９】
一方、メロディパート次イベントタイミングＦＴがフレーズ区間（ｍ）の終了時間以内ならば、上記ステップＳＥ１５の判断結果は「ＹＥＳ」となり、ステップＳＥ１６に進み、メロディパート次イベントタイミングＦＴを、新たなメロディパートイベントタイミングＭＴに更新する。そして、ステップＳＥ１７に進み、ポインタｎを初期値「１」にセットし、続くステップＳＥ１８では、このポインタｎをメロディパート読み出しアドレスＭＡＤに加算した読み出しアドレス（ＭＡＤ＋ｎ）に応じて、曲データエリアＫＤＥから読み出される曲データＫＤＥ（ＭＡＤ＋ｎ）が「イベント」又は「タイム」の何れであるかを判別する。
【００６０】
読み出しアドレス（ＭＡＤ＋ｎ）に対応する曲データＫＤＥ（ＭＡＤ＋ｎ）が「イベント」ならば、ステップＳＥ１９に進み、その「イベント」がノートオンイベントであるか否かを判断する。先のノートオンイベントに対応するノートオフイベントであると、判断結果は「ＮＯ」になり、ステップＳＥ２２に進み、ポインタｎをインクリメントして歩進させた後、上述のステップＳＥ１８に戻る。
【００６１】
そして、歩進されたポインタｎをメロディパート読み出しアドレスＭＡＤに加算した読み出しアドレス（ＭＡＤ＋ｎ）に応じて、曲データエリアＫＤＥから読み出される曲データＫＤＥ（ＭＡＤ＋ｎ）が「タイム」になると、上記ステップＳＥ１８を介してステップＳＥ２３に進む。ステップＳＥ２３では、その「タイム」をレジスタＹＴ（次押鍵タイミングＹＴと記す）にストアし、続くステップＳＥ２４では、次押鍵タイミングＹＴがポインタｍで指定されるフレーズ区間（ｍ）の終了時間以内であるか否かを判断する。
【００６２】
次押鍵タイミングＹＴがフレーズ区間（ｍ）の終了時間を超え、次のフレーズ区間（ｍ＋１）に含まれるならば、判断結果は「ＮＯ」となり、一旦本処理を終えるが、次押鍵タイミングＹＴがフレーズ区間（ｍ）に収まると、上記ステップＳＥ２４の判断結果は「ＹＥＳ」となり、ステップＳＥ２２に進み、ポインタｎをインクリメントして歩進させた後、上述のステップＳＥ１８に戻る。
【００６３】
そして、歩進されたポインタｎをメロディパート読み出しアドレスＭＡＤに加算した読み出しアドレス（ＭＡＤ＋ｎ）に応じて読み出される曲データＫＤＥ（ＭＡＤ＋ｎ）が「イベント」になると、ステップＳＥ１９に進み、かつその「イベント」がノートオンイベントならば、当該ステップＳＥ１９の判断結果は「ＹＥＳ」になり、ステップＳＥ２０に進む。
【００６４】
ステップＳＥ２０では、当該ノートオンイベントに含まれる発音音高をレジスタＮＥＸＴＮＯＴＥにストアし、続くテップＳＥ２１では、表示部１５に画面表示される鍵盤画像において、レジスタＮＥＸＴＮＯＴＥにストアした発音音高に対応する鍵の画像の表示形態を変化（例えばブリンク表示）させてユーザに次に弾くべき鍵の位置を案内するガイド表示を行った後、ステップＳＥ２２に進み、ポインタｎをインクリメントして歩進させた後、上述のステップＳＥ１８に戻る。
【００６５】
このように、ポインタｍで指定されるフレーズ区間（ｍ）を演奏中にメロディパートのイベントタイミングに達し、歩進させたメロディパート読み出しアドレスＭＡＤに応じて読み出される曲データＫＤＥ（ＭＡＤ）がノートオンイベントであれば、発音音高に対応する鍵の押鍵タイミングをユーザに案内するガイド表示を行い、一方、ノートオフイベントならば、消音音高に対応する鍵のガイド表示を停止する。
【００６６】
そして、メロディパート読み出しアドレスＭＡＤの歩進に応じて読み出されるメロディパート次イベントタイミングＦＴがフレーズ区間（ｍ）に収まるならば、当該メロディパート次イベントタイミングＦＴを新たなメロディパートイベントタイミングＭＴに更新すると共に、次押鍵タイミングＹＴがフレーズ区間（ｍ）内に存在する場合には、該当するノートオンイベントに含まれる発音音高に基づいてユーザに次に弾くべき鍵の位置を案内するガイド表示を行う。
【００６７】
＜フレーズ区間（ｍ）を演奏し終えた場合＞
曲進行時間Ｔがポインタｍで指定されるフレーズ区間（ｍ）の終了時間に一致し、当該フレーズ区間（ｍ）を演奏し終えると、図１１に図示するステップＳＥ２の判断結果が「ＹＥＳ」になり、フラグＨＹＯＫＡＦを「１」にセットする。なお、フラグＨＹＯＫＡＦとは、後述する評価処理（図１９参照）においてユーザの演奏評価を行うか否かを判定するフラグであり、「１」の場合に演奏評価を行う旨を表し、「０」の場合に演奏評価を行わない旨を表す。
【００６８】
次いで、ステップＳＥ２６では、フレーズ区間を指定するポインタｍをインクリメントして歩進させ、続くステップＳＥ２７では、歩進させたポインタｍが最大フレーズ数を超えたか否か、つまり全てのフレーズ区間について演奏し終えたかどうかを判断する。全てのフレーズ区間について演奏し終えていなければ、判断結果は「ＮＯ」になり、本処理を終える。これに対し、全てのフレーズ区間について演奏し終えると、上記ステップＳＥ２７の判断結果が「ＹＥＳ」になり、ステップＳＥ２８に進み、全てのフラグ・レジスタを初期化する。この後、ステップＳＥ２９に進み、音源１６に消音を指示すると共に、表示部１５のガイド表示を停止する。そして、ステップＳＥ３０に進み、曲進行時間を計時するタイマインタラプト処理を禁止して本処理を終える。
【００６９】
以上のように、ガイド処理では、ポインタｍで指定されるフレーズ区間（ｍ）を演奏中にメロディパートのイベントタイミングに達すると、歩進させたメロディパート読み出しアドレスＭＡＤに応じて曲データＫＤＥ（ＭＡＤ）を読み出し、それがノートオンイベントであれば、発音音高に対応する鍵の押鍵をユーザに案内するガイド表示を行い、ノートオフイベントならば、消音音高に対応する鍵のガイド表示を停止する。
【００７０】
そして、メロディパート読み出しアドレスＭＡＤの歩進に応じて読み出されるメロディパート次イベントタイミングＦＴがフレーズ区間（ｍ）に収まるならば、当該メロディパート次イベントタイミングＦＴを新たなメロディパートイベントタイミングＭＴに更新すると共に、次押鍵タイミングＹＴがフレーズ区間（ｍ）内に存在する場合には、該当するノートオンイベントに含まれる発音音高に基づいてユーザに次に弾くべき鍵の位置を案内するガイド表示を行う。
【００７１】
続いて、曲進行時間Ｔがフレーズ区間（ｍ）の終了時間に一致し、当該フレーズ区間（ｍ）を演奏し終えると、ユーザの演奏評価を行うか否かを判定するフラグＨＹＯＫＡＦを「１」にセットして演奏評価を行う旨を表す。この後、ポインタｍをインクリメントして歩進させ、歩進させたポインタｍが最大フレーズ数を超えたか否か、つまり全てのフレーズ区間について演奏し終えたかどうかを判断し、全てのフレーズ区間について演奏し終えていなければ、本処理を終えるが、全てのフレーズ区間について演奏し終えると、全フラグ・レジスタの初期化を行った後、音源１６に消音を指示すると共に、表示部１５のガイド表示を停止し、さらに曲進行時間を計時するタイマインタラプト処理を禁止して本処理を終える。
【００７２】
（５）鍵盤処理の動作
次に、図１４〜図１５を参照して鍵盤処理の動作を説明する。前述したメインルーチンのステップＳＡ４（図７参照）を介して本処理が実行されると、ＣＰＵ１２は図１４に図示するステップＳＦ１に進み、鍵盤１０の各鍵についてキーオン／キーオフ信号の有無を検出する鍵走査を行い、続くステップＳＦ２では、上記ステップＳＦ１の鍵走査結果に基づき鍵変化を判別する。
【００７３】
押離鍵操作が行われず、鍵変化が生じなければ、ステップＳＦ２において鍵変化無しと判別して本処理を終える。押鍵操作に応じたキーオン信号を検出した場合には、ステップＳＦ２を介してステップＳＦ３に進み、押鍵された鍵の鍵番号をレジスタＫＥＹにストアする。以下、レジスタＫＥＹの内容を鍵番号ＫＥＹと称す。次いで、ステップＳＦ４では、鍵番号ＫＥＹおよびベロシティを含むノートオンイベントを作成し、続くステップＳＦ５では、作成したノートオンイベントを音源１６に供給する。これにより、音源１６は押鍵された鍵の音高の楽音を発音する。
【００７４】
続いて、図１５に図示するステップＳＦ６に進み、ノートフラグＮＯＴＥＦが「１」であるか否か、すなわちノートオンであるかどうかを判断する。ノートフラグＮＯＴＥＦが「０」（ノートオフ）であると、判断結果は「ＮＯ」になり、ステップＳＦ７に進み、押鍵ミス回数を計数するカウンタＫＥＹＭＩＳＳ（以下、押鍵ミス回数ＫＥＹＭＩＳＳと記す）をインクリメントする。つまり、ノートオフであるにもかかわらず押鍵した場合には、間違った押鍵が為されたとして押鍵ミス回数ＫＥＹＭＩＳＳをカウントアップする。この後、ステップＳＦ８に進み、ノートフラグＮＯＴＥＦをゼロリセットして本処理を終える。
【００７５】
一方、ノートフラグＮＯＴＥＦが「１」（ノートオン）ならば、上記ステップＳＦ６の判断結果は「ＹＥＳ」になり、ステップＳＦ９に進む。ステップＳＦ９では、押鍵された鍵の鍵番号ＫＥＹとレジスタＮＯＴＥにストアされた発音音高（ノートナンバ）とが同一であるか否か、つまりガイドされた鍵の押鍵であるかどうかを判断する。
【００７６】
ガイドされた鍵の押鍵ならば、判断結果は「ＹＥＳ」になり、ステップＳＦ１０に進む。ステップＳＦ１０では、押鍵された時点の曲進行時間ＴとメロディパートイベントタイミングＭＴとの差分絶対値｜Ｔ−ＭＴ｜が所定時間α以内、つまりメロディパートイベントタイミングＭＴの前後の所定時間α以内に押鍵が為されたかどうかを判断する。メロディパートイベントタイミングＭＴの前後の所定時間α以内に押鍵されたならば、適正なタイミングの押鍵と見なされ、上記ステップＳＦ１０の判断結果は「ＹＥＳ」となり、ステップＳＦ８に進み、ノートフラグＮＯＴＥＦをゼロリセットして本処理を終える。
【００７７】
これに対し、メロディパートイベントタイミングＭＴより所定時間α以上早く押鍵したり、メロディパートイベントタイミングＭＴから所定時間α以上遅れて押鍵した場合には、不適なタイミングの押鍵と見なされ、上記ステップＳＦ１０の判断結果が「ＮＯ」になり、ステップＳＦ１１に進み、タイミングミス回数を計数するカウンタＴＩＭＩＮＧＭＩＳＳ（以下、タイミングミス回数ＴＩＭＩＮＧＭＩＳＳと記す）をインクリメントする。この後、ステップＳＦ８に進み、ノートフラグＮＯＴＥＦをゼロリセットして本処理を終える。
【００７８】
さて一方、ガイドされた鍵とは異なる音高の鍵の押鍵であると、上述のステップＳＦ９の判断結果が「ＮＯ」となり、ステップＳＦ１２に進む。ステップＳＦ１２では、押鍵された鍵の鍵番号ＫＥＹとレジスタＮＥＸＴＮＯＴＥにストアされた発音音高（ノートナンバ）とが同一であるか否かを判断する。鍵番号ＫＥＹとレジスタＮＥＸＴＮＯＴＥの発音音高とが同一でなければ、判断結果は「ＮＯ」になり、ステップＳＦ７に進み、間違った押鍵が為されたとして押鍵ミス回数ＫＥＹＭＩＳＳをカウントアップし、続くステップＳＦ８において、ノートフラグＮＯＴＥＦをゼロリセットして本処理を終える。
【００７９】
これに対し、鍵番号ＫＥＹとレジスタＮＥＸＴＮＯＴＥの発音音高とが同一であると、上記ステップＳＦ１２の判断結果が「ＹＥＳ」になり、ステップＳＦ１３に進む。ステップＳＦ１３では、次押鍵タイミングＹＴと押鍵された時点の曲進行時間Ｔとの差分（ＹＴ−Ｔ）が判定条件（ＹＴ−Ｔ≦α≦０）を満たすか否か、すなわち次に弾くべき音としてガイドされた鍵を、次押鍵タイミングＹＴより所定時間α以上早く押鍵したかどうかを判断する。
【００８０】
次押鍵タイミングＹＴより所定時間α以上早く押鍵したならば、判断結果は「ＹＥＳ」となり、ステップＳＦ８に進み、ノートフラグＮＯＴＥＦをゼロリセットして本処理を終える。つまり、この場合、次に弾くべき音としてガイドされた鍵を早めに押鍵したものと見なし、押鍵ミスとしてカウントしないようになっている。
【００８１】
一方、次押鍵タイミングＹＴから所定時間α以内の押鍵であると、上記ステップＳＦ１３の判断結果が「ＮＯ」となり、ステップＳＦ７に進み、間違った押鍵が為されたとして押鍵ミス回数ＫＥＹＭＩＳＳをカウントアップした後、ステップＳＦ８に進み、ノートフラグＮＯＴＥＦをゼロリセットして本処理を終える。
【００８２】
さて、離鍵操作に応じたキーオフ信号を検出した場合には、上述したステップＳＦ２（図１４参照）を介してステップＳＦ１４に進み、離鍵された鍵の鍵番号をレジスタＫＥＹにストアする。そして、ステップＳＦ１５に進み、その鍵番号ＫＥＹおよびベロシティを含むノートオフイベントを作成し、続くステップＳＦ１６では、作成したノートオンイベントを音源１６に供給する。これにより、音源１６は離鍵された鍵の音高の楽音を消音する。
【００８３】
このように、鍵盤処理では、押離鍵操作に応じて、押鍵（又は離鍵）された鍵の音高の楽音を発音（又は消音）するよう音源１６に指示する一方、押鍵時には曲データに従ってガイドされた鍵が適正なタイミングで弾かれたかどうかを判断し、ガイドされた鍵とは異なる鍵を間違って弾いた時には押鍵ミス回数ＫＥＹＭＩＳＳを歩進し、間違ったタイミングで弾いた時にはタイミングミス回数を歩進する。
【００８４】
（６）伴奏処理の動作
次に、図１６を参照して伴奏処理の動作を説明する。前述したメインルーチンのステップＳＡ５（図７参照）を介して本処理が実行されると、ＣＰＵ１２は図１６に図示するステップＳＧ１に進み、ハイハット処理を実行する。ハイハット処理では、後述するように、拍タイミングに達する毎に、フラグＨＩＦに基づきハイハットパートを自動伴奏するかどうかを判断し、フラグＨＩＦが「１」にセットされていれば、ハイハット音の発音を指示するノートオンイベントを音源１６に供給してハイハット音を発音させる。
【００８５】
続いて、ステップＳＧ２では、ドラム処理を実行する。ドラム処理では、後述するように、フラグＤＲＦが「１」であって、かつ伴奏スタートフラグＤＳＴＦが「０」であると、伴奏スタートフラグＤＳＴＦを「１」にセットしてドラムパートの自動伴奏開始を表すと共に、ポインタｍで指定されるフレーズ区間（ｍ）のドラムパート開始アドレスをドラムパート読み出しアドレスＤＡＤに設定し、このドラムパート読み出しアドレスＤＡＤに応じて読み出される最初の曲データＫＥＤ（ＤＡＤ）、すなわち先頭の「タイム」をドラムパート発音タイミングＤＴにセットして一旦本処理を終える。
【００８６】
以後、伴奏スタートフラグＤＳＴＦが「０」になる迄の間、本処理では曲進行時間Ｔがドラムパート発音タイミングＤＴに達する毎に、歩進されたドラムパート読み出しアドレスＤＡＤに応じて読み出される「イベント」（ドラム音の発音を指示するノートオンイベント）を音源１６に供給してドラム音を発音させる一方、次の「タイム」を読み出して新たなドラムパート発音タイミングＤＴに更新する動作を繰り返すことによってドラムパートの自動伴奏を進行させる。
【００８７】
続いて、ステップＳＧ３〜ＳＧ６では、それぞれ「ベース処理」、「コード１処理」、「コード２処理」および「パーカッション処理」を実行する。これら各処理は上記ステップＳＧ２のドラム処理と同様の動作である為、その詳細な動作説明については省略する。
【００８８】
一例として、ステップＳＧ３の「ベース処理」について概説する。ベース処理では、フラグＢＡＦが「１」であって、かつ伴奏スタートフラグＢＳＴＦが「０」であると、伴奏スタートフラグＢＳＴＦを「１」にセットしてベースパートの自動伴奏開始を表すと共に、ポインタｍで指定されるフレーズ区間（ｍ）のベースパートの開始アドレスをベースパート読み出しアドレスＢＡＤに設定し、このドラムパート読み出しアドレスＢＡＤに応じて読み出される最初の曲データＫＥＤ（ＢＡＤ）、すなわち先頭の「タイム」をベースパート発音タイミングＢＴにセットして一旦本処理を終える。
【００８９】
以後、伴奏スタートフラグＢＳＴＦが「０」になる迄の間、ベース処理では曲進行時間Ｔがベースパート発音タイミングＢＴに一致する毎に、歩進されたベースパート読み出しアドレスＢＡＤに応じて読み出される「イベント」（ベース音の発音を指示するノートオンイベント）を音源１６に供給してベース音を発音させる一方、次の「タイム」を読み出して新たなベースパート発音タイミングＢＴに更新する動作を繰り返してベースパートの自動伴奏を進行させる。
【００９０】
以上のように、伴奏処理では、パートフラグ（フラグＨＩＦ、フラグＤＲＦ、フラグＢＡＦ、フラグＣＯ１Ｆ、フラグＣＯ２およびフラグＰＡＦ）に基づき自動伴奏パートの有効／無効が指定され、有効とされたパート（ハイハットパートを除く）では曲進行に同期して順次読み出される曲データ（タイムおよびイベント）に従い、タイムで表される発音タイミングに達する毎に、イベントで指定されるパートの音を発音する。なお、ハイハットパートの場合には、フラグＨＩＦが「１」にセットされて有効となっていると、拍タイミングに達する毎にハイハット音の発音を指示するノートオンイベントを音源１６に供給してハイハット音を発音させる。
【００９１】
（７）ハイハット処理の動作
次に、図１７を参照してハイハット処理の動作を説明する。伴奏処理のステップＳＧ１（図１６参照）を介して本処理が実行されると、ＣＰＵ１２は図１７に図示するステップＳＨ１に進む。ステップＳＨ１では、前述のタイマインタラプト処理（図１０参照）において歩進されるレジスタＨＴの時間値が、曲のテンポおよび拍子で定まる拍時間に一致するか否か、つまり拍タイミングであるかどうかを判断する。拍タイミングでなければ、判断結果は「ＮＯ」になり、本処理を終える。
【００９２】
一方、レジスタＨＴの時間値が曲のテンポおよび拍子で定まる拍時間に一致する拍タイミングになると、上記ステップＳＨ１の判断結果は「ＹＥＳ」となり、ステップＳＨ２に進み、フラグＨＩＦが「１」にセットされているか否かを判断する。フラグＨＩＦが「０」ならば、判断結果は「ＮＯ」となり、ステップＳＨ５に進み、レジスタＨＴをゼロリセットして本処理を終える。
【００９３】
これに対し、フラグＨＩＦが「１」であると、上記ステップＳＨ２の判断結果は「ＹＥＳ」になり、ステップＳＨ３に進み、ハイハット音の発音を指示するノートオンイベントを作成し、続くステップＳＨ４において、その作成したノートオンイベントを音源１６に供給する。これにより、音源１６はハイハット音を発音する。この後、ステップＳＨ５に進み、レジスタＨＴをゼロリセットして本処理を終える。
【００９４】
このように、ハイハット処理では、拍タイミングに達する毎に、フラグＨＩＦに基づきハイハットパートを自動伴奏するかどうかを判断し、フラグＨＩＦが「１」にセットされていれば、ハイハット音の発音を指示するノートオンイベントを音源１６に供給してハイハット音を発音させる。
【００９５】
（８）ドラム処理の動作
次に、図１８を参照してドラム処理の動作を説明する。伴奏処理のステップＳＧ２（図１３参照）を介して本処理が実行されると、ＣＰＵ１２は図１８に図示するステップＳＪ１に進み、フラグＤＲＦが「１」、つまりドラムパートを自動伴奏する設定であるかどうかを判断する。フラグＤＲＦが「０」ならば、ドラムパートを自動伴奏しない設定なので、判断結果は「ＮＯ」となり、本処理を終えるが、フラグＤＲＦが「１」にセットされていれば、上記ステップＳＪ１の判断結果は「ＹＥＳ」になり、ステップＳＪ２に進む。
【００９６】
ステップＳＪ２では、ドラムパートの伴奏スタートフラグＤＳＴＦが「０」、すなわちドラムパートの自動伴奏が停止中であるか否かを判断する。ドラムパートの自動伴奏が停止中（伴奏スタートフラグＤＳＴＦが「０」）であると、判断結果は「ＹＥＳ」となり、ステップＳＪ３に進み、伴奏スタートフラグＤＳＴＦを「１」にセットする。
【００９７】
次いで、ステップＳＪ４では、ＲＡＭ１４の曲データエリアＫＤＥにおいて、ポインタｍで指定されるフレーズ区間（ｍ）におけるドラムパートの開始アドレスをレジスタＤＡＤにストアする。以下、レジスタＤＡＤの内容をドラムパート読み出しアドレスＤＡＤと称す。そして、ステップＳＪ５に進み、ドラムパート読み出しアドレスＤＡＤに応じて曲データエリアＫＤＥから読み出される曲データＫＤＥ（ＤＡＤ）、すなわちドラムパートの先頭の「タイム」をレジスタＤＴにストアして本処理を終える。なお、以下ではレジスタＤＴの内容をドラムパート発音タイミングＤＴと称す。
【００９８】
こうしてドラムパートの自動伴奏を開始させた後に再び本処理が実行され、上述のステップＳＪ２に進むと、伴奏スタートフラグＤＳＴＦが「１」にセットされているので、判断結果は「ＮＯ」になり、ステップＳＪ６に進み、曲進行時間Ｔがドラムパート発音タイミングＤＴに一致するか否かを判断する。ドラムパート発音タイミングＤＴでなければ、判断結果は「ＮＯ」になり、一旦本処理を終える。
【００９９】
一方、曲進行時間Ｔがドラムパート発音タイミングＤＴに達すると、上記ステップＳＪ６の判断結果は「ＹＥＳ」になり、ステップＳＪ７に進み、ドラムパート読み出しアドレスＤＡＤをインクリメントして歩進させる。次いで、ステップＳＪ８では、歩進されたドラムパート読み出しアドレスＤＡＤが現フレーズ区間（ｍ）の最終アドレスを超えたか否かを判断する。最終アドレスを超えていなければ、判断結果は「ＮＯ」になり、後述のステップＳＪ１０に進む。
【０１００】
これに対し、歩進されたドラムパート読み出しアドレスＤＡＤが現フレーズ区間（ｍ）の最終アドレスを超えると、上記ステップＳＪ８の判断結果は「ＹＥＳ」となり、ステップＳＪ９に進み、次フレーズ区間（ｍ＋１）におけるドラムパート開始アドレスを、ドラムパート読み出しアドレスＤＡＤにセットした後、ステップＳＪ１０に進む。
【０１０１】
そして、ステップＳＪ１０では、ドラムパート読み出しアドレスＤＡＤに応じて曲データエリアＫＤＥから読み出される曲データＫＤＥ（ＤＡＤ）が「イベント」又は「タイム」の何れであるかを判別する。曲データＫＤＥ（ＤＡＤ）が「タイム」であると、上述したステップＳＪ５に進み、読み出された「タイム」をドラムパート発音タイミングＤＴにセットして一旦本処理を終える。
【０１０２】
曲データＫＤＥ（ＤＡＤ）が「イベント」ならば、上記ステップＳＪ１０を介してステップＳＪ１１に進み、当該「イベント」（ドラム音の発音を指示するノートオンイベント）を音源１６に供給する。これにより、音源１６はドラム音を発音する。この後、上述したステップＳＪ７以降の動作を繰り返す。
【０１０３】
このように、ドラム処理では、フラグＤＲＦが「１」であって、かつ伴奏スタートフラグＤＳＴＦが「０」であると、伴奏スタートフラグＤＳＴＦを「１」にセットしてドラムパートの自動伴奏開始を表すと共に、ＲＡＭ１４の曲データエリアＫＤＥにおいて、ポインタｍで指定されるフレーズ区間（ｍ）のドラムパート開始アドレスをドラムパート読み出しアドレスＤＡＤに設定し、このドラムパート読み出しアドレスＤＡＤに応じて読み出される最初の曲データＫＥＤ（ＤＡＤ）、すなわち先頭の「タイム」をドラムパート発音タイミングＤＴにセットして一旦本処理を終える。
【０１０４】
以後、伴奏スタートフラグＤＳＴＦが「０」になる迄の間、本処理では曲進行時間Ｔがドラムパート発音タイミングＤＴに達する毎に、歩進されたドラムパート読み出しアドレスＤＡＤに応じて読み出される「イベント」（ドラム音の発音を指示するノートオンイベント）を音源１６に供給してドラム音を発音させる一方、次の「タイム」を読み出して新たなドラムパート発音タイミングＤＴに更新する動作を繰り返すことでドラムパートの自動伴奏を進行させる。
【０１０５】
（９）評価処理の動作
次に、図１９を参照して評価処理の動作を説明する。前述したメインルーチンのステップＳＡ６（図７参照）を介して本処理が実行されると、ＣＰＵ１２は図１９に図示するステップＳＫ１に進み、フラグＨＹＯＫＡＦが「１」であるか否かを判断する。前述した通り、フラグＨＹＯＫＡＦは、フレーズ区間の演奏が完了した時にフラグ値「１」がセットされる（図１１に図示するガイド処理のステップＳＥ２５参照）。従って、例えば今、先頭のフレーズ区間（１）について演奏しているならば、フラグＨＹＯＫＡＦは「０」なので、上記ステップＳＫ１の判断結果は「ＮＯ」になり、何も行わずに本処理を終える。
【０１０６】
そして、再び本処理が実行された時に、例えば先頭のフレーズ区間（１）の演奏が完了してフラグＨＹＯＫＡＦに「１」がセットされたとする。そうすると、上記ステップＳＫ１の判断結果は「ＹＥＳ」になり、ステップＳＫ２に進む。ステップＳＫ２では、前述したガイド処理にて計数されたタイミングミス回数ＴＩＭＩＮＧＭＩＳＳと押鍵ミス回数ＫＥＹＭＩＳＳとを加算してミス回数ＭＩＳＳを算出する。
【０１０７】
次いで、ステップＳＫ３では、評価テーブルＥＴ（図３参照）からミス回数ＭＩＳＳに対応した演奏評価結果ＨＹＯＫＡを読み出し、続くステップＳＫ４では、その演奏評価結果ＨＹＯＫＡと現在レベルＬＥＶＥＬとに対応する補正値ＣＴ（ＨＹＯＫＡ，ＬＥＶＥＬ）を補正テーブルＣＴ（図４参照）から読み出し、読み出した補正値ＣＴ（ＨＹＯＫＡ，ＬＥＶＥＬ）を現在レベルＬＥＶＥＬに加算して現在レベルＬＥＶＥＬを更新（補正）する。例えば演奏評価結果ＨＹＯＫＡが「Ｄ」、現在レベルＬＥＶＥＬが「３」であれば、補正テーブルＣＴから読み出される補正値ＣＴ（ＨＹＯＫＡ，ＬＥＶＥＬ）は「−１」となり、この結果、現在レベルＬＥＶＥＬは「３」から一段階下がって「２」に更新（補正）される。
【０１０８】
こうして、演奏評価結果ＨＹＯＫＡに応じて現在レベルＬＥＶＥＬが補正されると、ステップＳＫ５に進み、ＲＯＭ１３に記憶されるパートフラグ設定テーブルＰＴ（図５参照）を参照し、現在レベルＬＥＶＥＬに応じた各パートフラグを設定する。例えば上記一例のように、現在レベルＬＥＶＥＬが「２」になった場合には、パートフラグ設定テーブルＰＴからフラグＨＩＦ、ＣＯＦ１、ＣＯ２ＦおよびＰＡＦが「０」となり、フラグＤＲＦおよびＢＡＦが「１」となるパートフラグを読み出される。この結果、ガイド開始当初の先頭のフレーズ区間（１）では、デフォルト設定される現在レベルＬＥＶＥＬ値「３」に基づきドラムパート、ベースパートおよびコード１パートの自動伴奏となっていたが、フレーズ区間（１）の演奏練習を終えた時点の演奏評価結果ＨＹＯＫＡに基づき現在レベルＬＥＶＥＬが一段階下がって「２」になると、次フレーズ区間（２）ではドラムパートおよびベースパートの自動伴奏に変更される。
【０１０９】
現在レベルＬＥＶＥＬに応じた各パートフラグが設定されると、ステップＳＫ６に進み、タイミングミス回数ＴＩＭＩＮＧＭＩＳＳが所定回数α以上であるか否かを判断する。タイミングミス回数ＴＩＭＩＮＧＭＩＳＳが所定回数α未満ならば、判断結果は「ＮＯ」になり、後述のステップＳＫ８に進むが、タイミングミス回数ＴＩＭＩＮＧＭＩＳＳが所定回数α以上であると、上記ステップＳＫ６の判断結果は「ＹＥＳ」になり、ステップＳＫ７に進み、フラグＨＩＦを「１」にセットしてハイハットパートを自動伴奏パートに加える。
【０１１０】
つまり、タイミングミス回数ＴＩＭＩＮＧＭＩＳＳが多い場合には、押鍵タイミングの間違いを減らす目的で強制的にハイハットパートを自動伴奏パートに加え、伴奏されるハイハット音を聴くことでタイミングを取り易くさせる。そして、ステップＳＫ８では、ミス回数ＭＩＳＳ、タイミングミス回数ＴＩＭＩＮＧＭＩＳＳおよび押鍵ミス回数ＫＥＹＭＩＳＳをそれぞれゼロリセットする。次いで、ステップＳＫ９では、フラグＨＹＯＫＡＦをゼロリセットして本処理を終える。
【０１１１】
このように、評価処理では、フレーズ区間の演奏が完了してフラグＨＹＯＫＡＦに「１」がセットされると、タイミングミス回数ＴＩＭＩＮＧＭＩＳＳと押鍵ミス回数ＫＥＹＭＩＳＳとを加算したミス回数ＭＩＳＳに基づき評価テーブルＥＴ（図３参照）から演奏評価結果ＨＹＯＫＡを読み出した後、その演奏評価結果ＨＹＯＫＡと現在レベルＬＥＶＥＬとに対応する補正値ＣＴ（ＨＹＯＫＡ，ＬＥＶＥＬ）を補正テーブルＣＴ（図４参照）から読み出して現在レベルＬＥＶＥＬを補正し、補正された現在レベルＬＥＶＥＬに対応する各パートフラグをパートフラグ設定テーブルＰＴ（図５参照）から読み出して次フレーズ区間で自動伴奏されるパートを設定する。
【０１１２】
以上説明したように、本実施形態では、演奏パート（メロディパート）および複数の伴奏パートをフレーズ単位に区切り、区切られたフレーズ区間の各音を表す曲データの内、演奏パートの曲データに従ってフレーズ区間の各音の演奏をガイドすると共に、そのガイドされた音に対応した演奏操作であるか否かに応じて演奏のミス回数を計数する。一つのフレーズ区間を演奏し終える毎に、当該フレーズ区間で計数されたミス回数ＭＩＳＳからユーザの演奏操作を評価して演奏技量を表す現在レベルＬＥＶＥＬを生成する。そして、生成された現在レベルＬＥＶＥＬに応じて次フレーズ区間の伴奏パートを指定し、次フレーズ区間では複数の伴奏パートの中から指定された伴奏パートを自動伴奏するので、曲を演奏しているユーザの演奏技量に応じて、その演奏に自動伴奏される伴奏内容を変化させることが可能になる。
【０１１３】
また、本実施形態によれば、現在レベルＬＥＶＥＬが「１」の、演奏操作に不慣れなユーザであると、拍に同期したタイミングで発音されるハイハット音だけを自動伴奏させるようにしたので、演奏タイミングの取り方を補助することが出来る。さらに、演奏技量の向上に連れて自動伴奏されるパートの種類を増やすようにしたので、上達するほど曲演奏の楽しみが増え、謂わばゲーム的要素を持たせて練習意欲の維持や向上を図ることが出来るという効果も奏する。加えて、タイミングミス回数ＴＩＭＩＮＧＭＩＳＳが所定回数α以上であると、押鍵タイミングの間違いを減らす目的で強制的にハイハットパートを自動伴奏パートに加えるようにしたので、伴奏されるハイハット音をユーザに聴かせることで演奏のタイミングを取り易くさせることが出来る。
【０１１４】
なお、本実施形態では、現フレーズ区間の演奏技量を表す現在レベルＬＥＶＥＬに応じて、次フレーズ区間で自動伴奏される伴奏パートを指定するようにしたが、これに限らず、現在レベルＬＥＶＥＬに応じて次フレーズ区間で自動伴奏される各伴奏パートのパターンを変化させる態様とすることも可能である。すなわち、演奏パート（メロディパート）以外の各伴奏パート毎に、予め演奏技量に応じて異なる複数の伴奏パターンの曲データを設けておき、その中から現フレーズ区間の演奏操作を評価して得られた現在レベルＬＥＶＥＬに対応する伴奏パターンを指定し、次フレーズ区間では各伴奏パートを指定された伴奏パターンで自動伴奏させる。このようにしても曲を演奏しているユーザの演奏技量に応じて、その演奏に自動伴奏される伴奏内容を変化させることが出来る。
【符号の説明】
【０１１５】
１０  鍵盤
１１  スイッチ部
１２  ＣＰＵ
１３  ＲＯＭ
１４  ＲＡＭ
１５  表示部
１６  音源
１７  サウンドシステム
１００  自動伴奏装置
【図１】
0005557087.tif 000002
【図２】
0005557087.tif 000003
【図３】
0005557087.tif 000004
【図４】
0005557087.tif 000005
【図５】
0005557087.tif 000006
【図６】
0005557087.tif 000007
【図７】
0005557087.tif 000008
【図８】
0005557087.tif 000009
【図９】
0005557087.tif 000010
【図１０】
0005557087.tif 000011
【図１１】
0005557087.tif 000012
【図１２】
0005557087.tif 000013
【図１３】
0005557087.tif 000014
【図１４】
0005557087.tif 000015
【図１５】
0005557087.tif 000016
【図１６】
0005557087.tif 000017
【図１７】
0005557087.tif 000018
【図１８】
0005557087.tif 000019
【図１９】
0005557087.tif 000020