(57)【特許請求の範囲】
【請求項１】
アドバイスを生成するアドバイス生成部と、
このアドバイス生成部によるアドバイスが生成された後、所定の曲を演奏することにより得られる演奏データに基づいて、当該演奏の達成度を取得する取得部と、
この取得部により取得された達成度、及び当該取得された達成度より以前に取得された達成度に基づいて達成度変化量を算出する算出部と、
前記以前に取得された達成度、達成度変化量及び前記生成されたアドバイスを一組とするデータ群を、所定のメモリに記憶させる記憶制御部と、
前記メモリに記憶された複数組のデータの中から、前記取得された達成度に基づいて算出される達成度ランク、当該取得された達成度と以前に取得された達成度との差に基づいて設定された達成度変化量ランク及びアドバイスの種類に基づいて設定される価値関数テーブルの中から、達成度ランク及び達成度変化量ランクが同じでかつ価値が最大となるアドバイスの種類を特定するとともに、前記アドバイス生成部を、当該特定された種類のアドバイスを生成するように制御するアドバイス制御部と、
を具備する演奏教習装置。
【請求項２】
前記取得部は、
前記所定の曲を構成する各音を表す複数の音符データと、ユーザの演奏入力に応じて発生した演奏データとの比較に基づきユーザの演奏技量を評価して曲の難易度に応じた達成度を取得する、請求項１記載の演奏教習装置。
【請求項３】
演奏教習装置に搭載されるコンピュータが読み取り可能な記憶媒体であって、
アドバイスを生成するアドバイス生成ステップと、
このアドバイス生成ステップによるアドバイスが生成された後、所定の曲を演奏することにより得られる演奏データに基づいて、当該演奏の達成度を取得する取得ステップと、
この取得ステップにより取得された達成度、及び当該取得された達成度より以前に取得された達成度に基づいて達成度変化量を算出する算出ステップと、
前記以前に取得された達成度、達成度変化量及び前記生成されたアドバイスを一組とするデータ群を、所定のメモリに記憶させる記憶ステップと、
前記メモリに記憶された複数組のデータの中から、前記取得された達成度に基づいて算出される達成度ランク、当該取得された達成度と以前に取得された達成度との差に基づいて設定された達成度変化量ランク及びアドバイスの種類に基づいて設定される価値関数テーブルの中から、達成度ランク及び達成度変化量ランクが同じでかつ価値が最大となるアドバイスの種類を特定するとともに、前記アドバイス生成ステップにおいて、当該特定された種類のアドバイスを生成するように制御するアドバイス制御ステップと、
をコンピュータに実行させるプログラムを記憶した記憶媒体。
【請求項４】
演奏練習装置に用いられる演奏練習方法であって、前記演奏練習装置は、
アドバイスを生成し、
このアドバイスが生成された後、所定の曲を演奏することにより得られる演奏データに基づいて、当該演奏の達成度を取得し、
この取得された達成度、及び当該取得された達成度より以前に取得された達成度に基づいて達成度変化量を算出し、
前記以前に取得された達成度、達成度変化量及び前記生成されたアドバイスを一組とするデータ群を、所定のメモリに記憶させ、
前記メモリに記憶された複数組のデータの中から、前記取得された達成度に基づいて算出される達成度ランク、当該取得された達成度と以前に取得された達成度との差に基づいて設定された達成度変化量ランク及びアドバイスの種類に基づいて設定される価値関数テーブルの中から、達成度ランク及び達成度変化量ランクが同じでかつ価値が最大となるアドバイスの種類を特定し、当該特定された種類のアドバイスを生成するように制御する、演奏教習方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子楽器に用いて好適な演奏教習装置、演奏教習方法およびプログラムに関する。
【背景技術】
【０００２】
ユーザ（演奏者）の演奏を評価した結果に基づき練習効果を高めさせる演奏教習装置が知られている。この種の技術として、例えば特許文献１には、演奏入力された演奏データと模範演奏に相当する音符データとの比較に基づき演奏ミスの有無を判断し、演奏ミスが有れば、対応する演奏ミス項目別に分類集計することで演奏ミス仕勝ちな音を抽出し、その演奏ミス仕勝ちな音で再度演奏ミスが生じた場合に、ユーザの間違う癖を矯正する為、その演奏ミス仕勝ちな音の演奏を繰り返し練習させる技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−５３５７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上記特許文献１に開示の技術では、単に同じ過ちが繰り返された場合に、演奏ミス仕勝ちな音の演奏を繰り返し練習させるだけなので、ユーザの状態に応じた最適なアドバイスを与えることが出来ないという問題がある。
【０００５】
本発明は、このような事情に鑑みてなされたもので、ユーザの状態に応じた最適なアドバイスを与えることができる演奏教習装置、演奏教習方法およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明の演奏教習装置は、アドバイスを生成するアドバイス生成部と、このアドバイス生成部によるアドバイスが生成された後、所定の曲を演奏することにより得られる演奏データに基づいて、当該演奏の達成度を取得する取得部と、この取得部により取得された達成度、及び当該取得された達成度より以前に取得された達成度に基づいて達成度変化量を算出する算出部と、前記以前に取得された達成度、達成度変化量及び前記生成されたアドバイスを一組とするデータ群を、所定のメモリに記憶させる記憶制御部と、前記メモリに記憶された複数組のデータの中から、前記取得された達成度に基づいて算出される達成度ランク、当該取得された達成度と以前に取得された達成度との差に基づいて設定された達成度変化量ランク及びアドバイスの種類に基づいて設定される価値関数テーブルの中から、達成度ランク及び達成度変化量ランクが同じでかつ価値が最大となるアドバイスの種類を特定するとともに、前記アドバイス生成部を、当該特定された種類のアドバイスを生成するように制御するアドバイス制御部と、を具備することを特徴とする。
また、本発明の演奏教習方法は、演奏練習装置に用いられる演奏練習方法であって、前記演奏練習装置は、アドバイスを生成し、このアドバイスが生成された後、所定の曲を演奏することにより得られる演奏データに基づいて、当該演奏の達成度を取得し、この取得された達成度、及び当該取得された達成度より以前に取得された達成度に基づいて達成度変化量を算出し、前記以前に取得された達成度、達成度変化量及び前記生成されたアドバイスを一組とするデータ群を、所定のメモリに記憶させ、前記メモリに記憶された複数組のデータの中から、前記取得された達成度に基づいて算出される達成度ランク、当該取得された達成度と以前に取得された達成度との差に基づいて設定された達成度変化量ランク及びアドバイスの種類に基づいて設定される価値関数テーブルの中から、達成度ランク及び達成度変化量ランクが同じでかつ価値が最大となるアドバイスの種類を特定し、当該特定された種類のアドバイスを生成するように制御する、ことを特徴とする。
また、本発明のプログラムは、アドバイスを生成するアドバイス生成ステップと、このアドバイス生成ステップによるアドバイスが生成された後、所定の曲を演奏することにより得られる演奏データに基づいて、当該演奏の達成度を取得する取得ステップと、この取得ステップにより取得された達成度、及び当該取得された達成度より以前に取得された達成度に基づいて達成度変化量を算出する算出ステップと、前記以前に取得された達成度、達成度変化量及び前記生成されたアドバイスを一組とするデータ群を、所定のメモリに記憶させる記憶ステップと、前記メモリに記憶された複数組のデータの中から、前記取得された達成度に基づいて算出される達成度ランク、当該取得された達成度と以前に取得された達成度との差に基づいて設定された達成度変化量ランク及びアドバイスの種類に基づいて設定される価値関数テーブルの中から、達成度ランク及び達成度変化量ランクが同じでかつ価値が最大となるアドバイスの種類を特定するとともに、前記アドバイス生成ステップにおいて、当該特定された種類のアドバイスを生成するように制御するアドバイス制御ステップと、をコンピュータに実行させることを特徴とする。
【発明の効果】
【０００７】
本発明では、ユーザの状態に応じた最適なアドバイスを与えることができる。
【図面の簡単な説明】
【０００８】
【図１】第１実施形態による演奏評価装置１００の全体構成を示すブロック図である。
【図２】メインルーチンの動作を示すフローチャートである。
【図３】該当箇所特定処理の動作を示すフローチャートである。
【図４】距離算出処理の動作を示すフローチャートである。
【図５】ＤＰマッチング処理の動作を示すフローチャートである。
【図６】図５に続くＤＰマッチング処理の動作を示すフローチャートである。
【図７】演奏判定処理の動作を示すフローチャートである。
【図８】達成度算出処理の動作を示すフローチャートである。
【図９】図８に続く達成度算出処理の動作を示すフローチャートである。
【図１０】変数更新処理の動作を示すフローチャートである。
【図１１】最大Ｑアクション処理の動作を示すフローチャートである。
【図１２】価値関数テーブルｖａｌｕｅの一例を示す図である。
【図１３】アドバイス処理の動作を示すフローチャートである。
【図１４】第２実施形態の概要を説明するための図である。
【図１５】第２実施形態による変数更新処理の動作を示すフローチャートである。
【図１６】第２実施形態による最大Ｑアクション処理の動作を示すフローチャートである。
【図１７】第２実施形態の変形例を説明するための図である。
【発明を実施するための形態】
【０００９】
以下、図面を参照して本発明の実施形態について説明する。
［第１実施形態］
Ａ．構成
図１は、第１実施形態による演奏評価装置１００の全体構成を示すブロック図である。この図において、鍵盤１０は、演奏入力（押離鍵操作）に応じたキーオン／キーオフイベント、鍵番号およびベロシティ等を含む演奏情報を発生する。スイッチ部１１は、装置パネルに配設される各種操作スイッチを有し、ユーザ操作されるスイッチ種に対応したスイッチイベントを発生する。スイッチ部１１に配設される主要なスイッチとしては、例えばパワーオンオフする電源スイッチの他、手本（模範演奏）となる曲データを選択する曲選択スイッチや、動作の終了を指示する終了スイッチ等がある。
【００１０】
表示部１２は、ＬＣＤパネル等から構成され、ＣＰＵ１３から供給される表示制御信号に応じて、演奏入力する際に曲データを楽譜表示したり、演奏終了後に演奏評価結果を表示したりする他、装置の動作状態や設定状態を表示する。
【００１１】
ＣＰＵ１３は、演奏入力に応じて鍵盤１０が発生する演奏情報をＭＩＤＩ形式の演奏データ（ノートオン／ノートオフ等）に変換し、変換した演奏データを記憶する一方、音源１６に供給して楽音発生を指示する。また、ＣＰＵ１３は、記憶された演奏データと手本（模範演奏）となる曲データを構成する音符データとの比較に基づきユーザの演奏技量を評価して曲の難易度を加味した達成度を取得し、取得した達成度を更に向上させるのに最も効果的なアドバイスをユーザに与える。こうした本発明に係わるＣＰＵ１３の特徴的な処理動作については追って詳述する。
【００１２】
ＲＯＭ１４には、ＣＰＵ１３にロードされる各種の制御プログラムが記憶される。各種の制御プログラムとは、後述するメインルーチンを構成する該当箇所特定処理、演奏判定処理、達成度算出処理、変数更新処理およひアドバイス処理を含む。なお、該当箇所特定処理は距離算出処理およびＤＰマッチング処理を含み、変数更新処理は最大Ｑアクション処理を含む。
【００１３】
ＲＡＭ１５は、ワークエリア、演奏データエリアおよび曲データエリアを備える。ＲＡＭ１５のワークエリアには、ＣＰＵ１３の処理に使用される各種レジスタ・フラグデータが一時記憶される他、演奏技術の種別に対応する難易度が登録される難易度テーブルｉＦＴＣｏｓｔや、Ｑ学習理論に基づき生成された価値関数テーブルｖａｌｕｅを備える。この難易度テーブルｉＦＴＣｏｓｔや価値関数テーブルｖａｌｕｅが意図するところについては追って述べる。
【００１４】
ＲＡＭ１５の演奏データエリアには、演奏入力に応じてＣＰＵ１０が生成する複数の演奏音の演奏データが記憶される。ＲＡＭ１５の曲データエリアには、手本（模範演奏）となる曲データが複数曲分格納される。曲データは、曲を形成する複数の音符を表す音符データから構成される。曲データを構成する音符データは、右手で弾く右手パート、左手で弾く左手パートおよび両手で弾く左右両パートに区分される。
【００１５】
１つの音符データは、ｉＴｉｍｅ、ｉＧａｔｅ、ｉＰｉｔ、ｉＶｅｌ、ｉＴｅｃｈおよびｉＣｌｅａｒから構成される。ｉＴｉｍｅは発音時刻、ｉＧａｔｅは音長、ｉＰｉｔはピッチ（音高）、ｉＶｅｌはベロシティ（音量）を表す。ｉＴｅｃｈは演奏技術の種別を表す値である。演奏技術の種別とは、「指潜り」や「指跨ぎ」等の指の動かし方の種類を指す。負の値の場合には、演奏技術を要しない音符であることを表し、０以上の値が演奏技術の種別を表す。以下、ｉＴｅｃｈを演奏技術タイプと称す。ｉＣｌｅａｒは対応する音符が手本通りに正しく弾けたかどうかを表すフラグであり、「１」の場合に手本通りに正しく弾けたことを表し、「０」の場合に弾けていないことを表す。以下、ｉＣｌｅａｒをクリアフラグｉＣｌｅａｒと称す。
【００１６】
音源１６は、周知の波形メモリ読み出し方式によって構成され、ＣＰＵ１３から供給される演奏データに応じた楽音データを発生して出力する。サウンドシステム１７は、音源１６から出力される楽音データをアナログ形式の楽音信号に変換した後、その楽音信号から不要ノイズを除去する等のフィルタリングを施してからレベル増幅してスピーカより発音させる。
【００１７】
Ｂ．動作
次に、図２〜図９を参照して上記構成による演奏評価装置１００の動作を説明する。以下では、ＣＰＵ１３が実行するメインルーチン、該当箇所特定処理、演奏判定処理、達成度算出処理、変数更新処理およひアドバイス処理の各動作について述べる。なお、該当箇所特定処理は距離算出処理およびＤＰマッチング処理を含み、変数更新処理は最大Ｑアクション処理を含む。
【００１８】
（１）メインルーチンの動作
図２は、メインルーチンの動作を示すフローチャートである。演奏評価装置１００がパワーオンされると、ＣＰＵ１３は図２に図示するメインルーチンを実行してステップＳＡ１に処理を進め、装置各部を初期化するイニシャライズを行う。イニシャライズが完了すると、ＣＰＵ１３はステップＳＡ２に進み、終了操作が為された否かを判断する。終了操作が為されなければ、判断結果は「ＮＯ」になり、ステップＳＡ３に進む。
【００１９】
ステップＳＡ３では、演奏入力に応じてＣＰＵ１０が生成する演奏データをＲＡＭ１５の演奏データエリアに保存する演奏入力処理を実行する。なお、演奏入力処理では、曲選択スイッチ操作により選択された曲データを練習課題とし、当該曲データを表示部１２に楽譜表示させ、その楽譜を見てユーザが曲の各音を弾く演奏入力を行うようになっている。
【００２０】
次いで、ステップＳＡ４では、ユーザの演奏入力で発生した演奏データが、手本（模範演奏）となる曲データ中のどの音符データに該当し、かつその該当音符データを右手パート、左手パートおよび左右両パートの何れで弾いたのかを特定する該当箇所特定処理を実行する。
【００２１】
続いて、ステップＳＡ５では、上記ステップＳＡ４において特定した音符データのピッチｉＰｉｔと演奏データの音高とを比較して当該音符データの音が正しく弾かれたかどうかを判定し、正しく弾かれた音符データのクリアフラグｉＣｌｅａｒを「１」にセットする演奏判定処理を実行する。
【００２２】
そして、ステップＳＡ６では、達成度算出処理を実行する。達成度算出処理では、後述するように、曲データ中の全ての音符データに含まれる演奏技術タイプｉＴｅｃｈから演奏技術の種別毎の発生回数およびクリア回数（正しく弾かれた回数）を抽出し、抽出した発生回数およびクリア回数から得られる演奏技術の種別毎の正解率（クリア回数／発生回数）に、演奏技術の種別に応じた難易度を乗算して演奏技術の種別毎の達成度を算出し、算出された各達成度を累算することで曲の難易度に応じた達成度ａｃｈｉｅｖｅＶａｌｕｅを取得する。
【００２３】
次いで、ステップＳＡ７では、Ｑ学習理論に基づき、現在のアドバイスに従って演奏入力を行った結果得られた達成度ａｃｈｉｅｖｅＶａｌｕｅから価値関数テーブルｖａｌｕｅの状態変数を更新すると共に、更新した状態変数に応じて価値関数テーブルｖａｌｕｅから最も効果的なアドバイスを取得する変数更新処理を実行する。続いて、ステップＳＡ８では、価値関数テーブルｖａｌｕｅ［ａｃｈｉｅｖｅ］［ｃｈａｎｇｅ］［ｉ］から探し出された最も効果的（最大Ｑアクション価値ｍａｘＱ）なアドバイス種別ａｃｔｉｏｎで指定される種類のアドバイスを演奏入力するユーザに与える。
【００２４】
この後、上述のステップＳＡ２に処理を戻し、以後、終了操作が為されるまで上述したステップＳＡ２〜ＳＡ９を繰り返し実行する。そして、終了操作が為されると、上記ステップＳＡ２の判断結果が「ＹＥＳ」になり、ステップＳＡ９に進み、変数更新処理（ステップＳＡ７）において更新された変数（前回の達成度ランクｐｒｅｖＡｃｈｉｅｖｅ、達成度ランク変化ｐｒｅｖＣｈａｎｇｅ、アドバイス種別ｐｒｅｖＡｃｔｉｏｎおよび達成度ｐｅｖＡｃｈｉｅｖｅＶａｌｕｅを保存する変数保存処理を実行して本処理を終える。
【００２５】
（２）該当箇所特定処理の動作
次に、図３を参照して該当箇所特定処理の動作を説明する。上述したメインルーチンのステップＳＡ４（図２参照）を介して本処理が実行されると、ＣＰＵ１３は図３に図示するステップＳＢ１に処理を進め、レジスタｄｏＤｉｓｔＭｉｎに初期値となる所定値をストアする。レジスタｄｏＤｉｓｔＭｉｎに格納される初期値が意図するところについては追って述べる。
【００２６】
続いて、ステップＳＢ２では、ポインタｍｅｏｒｇｔａｒ０およびポインタｍｅｏｒｇｔａｒ１をゼロリセットする。ポインタｍｅｏｒｇｔａｒ０とは、曲データ中の右手パートの音符データの内、ユーザの演奏入力で発生した演奏データに一致した音符データを指定するポインタである。同様に、ポインタｍｅｏｒｇｔａｒ１とは、曲データ中の左手パートの音符データの内、ユーザの演奏入力で発生した演奏データに一致した音符データを指定するポインタである。
【００２７】
次いで、ステップＳＢ３〜ＳＢ４では、曲データ中の右手パートの音符データの内、先頭ノート（先頭の音符）を指定するアドレス値をポインタｍｅｏｒｇ［０］にストアし、曲データ中の左手パートの音符データの内、先頭ノート（先頭の音符）を指定するアドレス値をポインタｍｅｏｒｇ［１］にストアする。そして、ステップＳＢ５に進むと、ポインタｍｅｏｒｇ［０］、ｍｅｏｒｇ［１］が共に終端でないか否か、つまり曲の終わりに達するまで該当箇所を検索したかどうかを判断する。
【００２８】
曲の終わりに達するまで該当箇所を検索していなければ、判断結果は「ＹＥＳ」になり、ステップＳＢ６に進む。ステップＳＢ６〜ＳＢ８では、ポインタｍｅｏｒｇ［０］およびポインタｍｅｏｒｇ［１］を曲の終わりに達するまで歩進させる毎に、ステップＳＢ６の距離算出処理を繰り返し実行する。そして、曲の終わりに達するまで該当箇所を検索し終えると、上記ステップＳＢ５の判断結果が「ＮＯ」となり、本処理を終える。
【００２９】
なお、ステップＳＢ６の距離算出処理では、後述するように、ユーザの演奏入力で発生した演奏データに対し、曲データ中の全ての音符データ（右手パート、左手パートおよび左右両パート）について公知のＤＰマッチングを施して類似度に相当する距離（右手パート時の距離、左手パート時の距離および左右両パート時の距離）を算出し、算出した距離の中で最も類似度の大きい最小距離となるパートの音符データを、演奏データに該当する箇所と特定する。
【００３０】
（３）距離算出処理の動作
次に、図４を参照して距離算出処理の動作を説明する。上述した該当箇所特定処理のステップＳＢ６（図３参照）を介して本処理が実行されると、ＣＰＵ１３は図４に図示するステップＳＣ１に処理を進め、レジスタｉＨａｎｄに「０」をストアする。レジスタｉＨａｎｄの値は、曲データ中のパートを指定する。具体的には、「０」の場合に曲データ中の右手パートを指定し、、「１」の場合に曲データ中の左手パートを指定し、「２」の場合に曲データ中の左右両パートを指定する。以下、レジスタｉＨａｎｄの値をパート指定データｉＨａｎｄと称す。
【００３１】
続いて、ステップＳＣ２では、パート指定データｉＨａｎｄが「３」より小さいか否か、すなわち全てのパートについて距離算出し終えたかどうかを判断する。パート指定データｉＨａｎｄが「３」より小さく、全てのパートについて距離算出し終えていなければ、判断結果は「ＹＥＳ」となり、ステップＳＣ３を介してＤＰマッチング処理を実行する。ＤＰマッチング処理では、後述するように、ユーザの演奏入力で発生した演奏データに対し、曲データ中の全ての音符データ（右手パート、左手パートおよび左右両パート）について類似度に相当する距離ｄｏＤｉｓｔを取得する。
【００３２】
次いで、ステップＳＣ４では、上記ステップＳＣ３のＤＰマッチング処理にて今回取得した距離ｄｏＤｉｓｔが、前回取得した距離ｄｏＤｉｓｔＭｉｎ（初回時はステップＳＢ１にてストアした所定値を用いる）の９５％値より小さいか否かを判断する。つまり最小距離を更新したかどうかを判断する。最小距離を更新していなければ、判断結果は「ＮＯ」になり、後述のステップＳＣ１０に進む。
【００３３】
一方、今回取得した距離ｄｏＤｉｓｔが、前回取得した距離ｄｏＤｉｓｔＭｉｎの９５％値より小さく、最小距離を更新すると、上記ステップＳＣ４の判断結果は「ＹＥＳ」になり、ステップＳＣ５に進む。ステップＳＣ５では、距離ｄｏＤｉｓｔを距離ｄｏＤｉｓｔＭｉｎに更新する。また、ステップＳＣ５では、ポインタｍｅｏｒｇ［０］の値をポインタｍｅｏｒｇｔａｒ０に、ポインタｍｅｏｒｇ［１］の値をポインタｍｅｏｒｇｔａｒ１にセットする。
【００３４】
そして、ステップＳＣ６に進むと、パート指定データｉＨａｎｄが「０」であるか否か、つまり距離算出対象が右手パートであるかどうかを判断する。右手パートならば、判断結果は「ＹＥＳ」になり、ステップＳＣ８に進み、ポインタｍｅｏｒｇｔａｒ１をゼロリセットし、続くステップＳＣ１０では、パート指定データｉＨａｎｄをインクリメントして歩進させた後、上述のステップＳＣ２に処理を戻す。
【００３５】
これに対し、パート指定データｉＨａｎｄが「０」でない場合、つまり距離算出対象が右手パートでなければ、上記ステップＳＣ６の判断結果は「ＮＯ」になり、ステップＳＣ７に進み、パート指定データｉＨａｎｄが「１」であるか否か、つまり距離算出対象が左手パートであるかどうかを判断する。左手パートならば、判断結果は「ＹＥＳ」になり、ステップＳＣ９に進み、ポインタｍｅｏｒｇｔａｒ０をゼロリセットし、続くステップＳＣ１０では、パート指定データｉＨａｎｄをインクリメントして歩進させた後、上述のステップＳＣ２に処理を戻す。
【００３６】
一方、距離算出対象が左手パートでない場合、つまり左右両パートであると、上記ステップＳＣ７の判断結果は「ＮＯ」になり、ステップＳＣ１０に進み、パート指定データｉＨａｎｄをインクリメントして歩進させた後、上述のステップＳＣ２に処理を戻す。そして、歩進されたパート指定データｉＨａｎｄが「３」より大きくなると、上記ステップＳＣ２の判断結果は「ＮＯ」になり、本処理を終える。
【００３７】
（４）ＤＰマッチング処理の動作
次に、図５〜図６を参照してＤＰマッチング処理の動作を説明する。上述した距離算出処理のステップＳＣ３（図４参照）を介して本処理が実行されると、ＣＰＵ１３は図５に図示するステップＳＤ１に処理を進め、音符データを指定するポインタＩに初期値「０」をセットする。
【００３８】
次いで、ステップＳＤ２では、ポインタｍｅｏｒｇ［０］の値をポインタｍｅ０ｏｒｇ（Ｉ）に、ポインタｍｅｏｒｇ［１］の値をポインタｍｅ１ｏｒｇ（Ｉ）にセットする。なお、ポインタｍｅｏｒｇ［０］は曲データ中の右手パートの先頭の音符データを指定するポインタ値であり、ポインタｍｅｏｒｇ［１］は、曲データ中の左手パートの先頭の音符データを指定するポインタ値である。
【００３９】
続いて、ステップＳＤ３では、ポインタＩの歩進に応じて、全ての音符データを指定し終えたか否かを判断する。全ての音符データを指定し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＤ４に進み、パート指定データｉＨａｎｄが「０」、つまりＤＰマッチングの対象が右手パートであるかどうかを判断する。右手パートならば、判断結果は「ＹＥＳ」になり、ステップＳＤ５に進み、ポインタｍｅ０ｏｒｇ（Ｉ）をポインタｍｅＡｏｒｇ（Ｉ）にセットした後、図６に図示するステップＳＤ９（後述する）に処理を進める。
【００４０】
ＤＰマッチングの対象が右手パートでなければ、上記ステップＳＤ４の判断結果は「ＮＯ」になり、ステップＳＤ６に進む。ステップＳＤ６では、パート指定データｉＨａｎｄが「１」、つまりＤＰマッチングの対象が左手パートであるかどうかを判断する。左手パートならば、判断結果は「ＹＥＳ」になり、ステップＳＤ７に進み、ポインタｍｅ１ｏｒｇ（Ｉ）をポインタｍｅＡｏｒｇ（Ｉ）にセットした後、図６に図示するステップＳＤ９（後述する）に処理を進める。
【００４１】
ＤＰマッチングの対象が左右両パートであると、上記ステップＳＤ６の判断結果は「ＮＯ」になり、ステップＳＤ８に進む。ステップＳＤ８では、ポインタｍｅ０ｏｒｇ（Ｉ）で指定される音符データの発音時刻ｉＴｉｍｅと、ポインタｍｅ１ｏｒｇ（Ｉ）で指定される音符データの発音時刻ｉＴｉｍｅとを比較し、発音時刻の早い音符データを指定する方のポインタをポインタｍｅＡｏｒｇ（Ｉ）にセットした後、図６に図示するステップＳＤ９（後述する）に処理を進める。
【００４２】
そして、図９に図示するステップＳＤ９に進むと、演奏データを指定するポインタＪに初期値「０」をセットする。次いで、ステップＳＤ１０では、ポインタＪの歩進に応じて、全ての演奏データを指定し終えたか否かを判断する。全ての演奏データを指定し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＤ１１に進む。
【００４３】
ステップＳＤ１１では、ポインタｍｅＡｏｒｇ（Ｉ）で指定される音符データのピッチｉＰｉｔと、ポインタｍｅＢｕｓｒ（Ｊ）で指定される演奏データのピッチとを比較する。両データのピッチが一致すると、ステップＳＤ１２に進み、レジスタｄｏＭｉｓｓＭａｔｃｈ［Ｉ］［Ｊ］に一致値「０．０」をセットし、一方、両データのピッチが不一致ならば、ステップＳＤ１３に進み、レジスタｄｏＭｉｓｓＭａｔｃｈ［Ｉ］［Ｊ］に不一致値「１．０」をセットする。
【００４４】
次いで、ステップＳＤ１４では、ポインタＪをインクリメントして歩進させた後、上述のステップＳＤ１０に処理を戻す。以後、ポインタＪを歩進させながら、上述したステップＳＤ１０〜ＳＤ１４を繰り返すことによって、ポインタｍｅＡｏｒｇ（Ｉ）で指定される音符データのピッチｉＰｉｔに対し、全ての演奏データのピッチについて一致・不一致を判別し、その判別結果を一致・不一致マトリクスに相当する２次元のレジスタｄｏＭｉｓｓＭａｔｃｈ［Ｉ］［Ｊ］に保存する。ポインタＪの歩進に応じて、全ての演奏データを指定し終えると、上記ステップＳＤ１０の判断結果が「ＹＥＳ」になり、ステップＳＤ１５に進み、ポインタＩをインクリメントして歩進させた後、前述したステップＳＤ３（図５参照）に処理を戻す。
【００４５】
そして、ポインタＩの歩進に応じて、全ての音符データを指定し終えると、前述したステップＳＤ３の判断結果が「ＹＥＳ」になり、ステップＳＤ１６に進む。ステップＳＤ１６では、パート指定データｉＨａｎｄが「０」であるか否か、つまりＤＰマッチングの対象が右手パートであるかどうかを判断する。右手パートならば、判断結果は「ＹＥＳ」になり、ステップＳＤ１７に進み、ポインタｍｅ１ｏｒｇをゼロリセットした後、ステップＳＤ２０に進む。
【００４６】
一方、パート指定データｉＨａｎｄが「０」でない場合、つまりＤＰマッチングの対象が右手パートでなければ、上記ステップＳＤ１６の判断結果は「ＮＯ」になり、ステップＳＤ１８に進み、パート指定データｉＨａｎｄが「１」であるか否か、つまりＤＰマッチングが左手パートであるかどうかを判断する。左手パートならば、判断結果は「ＹＥＳ」になり、ステップＳＤ１９に進み、ポインタｍｅ０ｏｒｇをゼロリセットした後、ステップＳＤ２０に進む。
【００４７】
ＤＰマッチングの対象が左右両パートの場合には、上記ステップＳＤ１６、ＳＤ１８の各判断結果が何れも「ＮＯ」になり、ステップＳＤ２０に進む。そして、ステップＳＤ２０では、２次元のレジスタｄｏＭｉｓｓＭａｔｃｈ［Ｉ］［Ｊ］に保存された一致・不一致マトリクスに基づく公知のＤＰマッチングによって、ユーザの演奏入力で発生した演奏データに対し、曲データ中の全ての音符データ（右手パート、左手パートおよび左右両パート）について類似度に相当する距離ｄｏＤｉｓｔを取得して本処理を終える。
【００４８】
（５）演奏判定処理の動作
次に、図７を参照して演奏判定処理の動作を説明する。前述したメインルーチンのステップＳＡ５（図２参照）を介して本処理が実行されると、ＣＰＵ１３は図７に図示するステップＳＥ１に処理を進め、音符データを指定するポインタＩに初期値「０」をセットする。
【００４９】
次いで、ステップＳＥ２では、曲データ中の右手パートの音符データの内、ユーザの演奏入力で発生した演奏データに一致した音符データを指定するポインタｍｅｏｒｇｔａｒ０の値を、ポインタｍｅ０ｏｒｇ（Ｉ）にセットすると共に、曲データ中の左手パートの音符データの内、ユーザの演奏入力で発生した演奏データに一致した音符データを指定するポインタｍｅｏｒｇｔａｒ１の値を、ポインタｍｅ１ｏｒｇ（Ｉ）にセットする。
【００５０】
続いて、ステップＳＥ３では、ポインタＩの歩進に応じて、全ての音符データを指定し終えたか否かを判断する。全ての音符データを指定し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＥ４に進む。ステップＳＥ４では、ポインタｍｅ０ｏｒｇ（Ｉ）で指定される音符データの発音時刻ｉＴｉｍｅと、ポインタｍｅ１ｏｒｇ（Ｉ）で指定される音符データの発音時刻ｉＴｉｍｅとを比較し、発音時刻の早い音符データを指定する方のポインタをポインタｍｅＡｏｒｇ（Ｉ）にセットする。
【００５１】
次いで、ステップＳＥ５では、演奏データを指定するポインタＪに初期値「０」をセットし、続くステップＳＥ６では、ポインタＪの歩進に応じて、全ての演奏データを指定し終えたか否かを判断する。全ての演奏データを指定し終えていなければ、判断結果は「ＮＯ」になり、次のステップＳＥ７に進む。ステップＳＥ７では、ポインタｍｅＡｏｒｇ（Ｉ）で指定される音符データのピッチｉＰｉｔと、ポインタｍｅＢｕｓｒ（Ｊ）で指定される演奏データのピッチとを比較する。
【００５２】
音符データのピッチと演奏データのピッチとが一致すると、ステップＳＥ８に進み、ポインタｍｅＡｏｒｇ（Ｉ）で指定される音符データのクリアフラグｉＣｌｅａｒに「１」をセットし、正しく弾かれた音であること表す。そして、ステップＳＥ９に進み、ポインタＪをインクリメントして歩進させた後、上述のステップＳＥ６に処理を戻す。以後、ポインタＪを歩進させながら、上述したステップＳＥ６〜ＳＥ９を繰り返す。
【００５３】
そして、ポインタＪの歩進に応じて、全ての演奏データを指定し終えると、上記ステップＳＥ６の判断結果が「ＹＥＳ」になり、ステップＳＥ１０に進み、ポインタＩをインクリメントして歩進させた後、上述のステップＳＥ３に処理を戻す。ポインタＩの歩進に応じて、全ての音符データを指定し終えると、このステップＳＤ３の判断結果が「ＹＥＳ」になり、本処理を終える。
【００５４】
（６）達成度算出処理の動作
次に、図８〜図９を参照して達成度算出処理の動作を説明する。前述したメインルーチンのステップＳＡ６（図２参照）を介して本処理が実行されると、ＣＰＵ１３は図８に図示するステップＳＦ１に処理を進め、レジスタｍｅに先頭ノート（曲頭の音）の音符データをストアする。続いて、ステップＳＦ２では、曲データ中の全ての音符データを読み出し終えたかどうかを判断する。全ての音符データを読み出し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＦ３に進む。
【００５５】
ステップＳＦ３では、レジスタｍｅにストアした音符データに含まれる演奏技術タイプｉＴｅｃｈが「０」以上であるか否か、つまり演奏技術を要する音符であるかどうかを判断する。演奏技術タイプｉＴｅｃｈが負の値の場合には、演奏技術を要しない音符なので、判断結果は「ＮＯ」になり、ステップＳＦ７に進み、レジスタｍｅに次の音符データをストアして上述のステップＳＦ２に処理を戻す。
【００５６】
一方、レジスタｍｅにストアした音符データに含まれる演奏技術タイプｉＴｅｃｈが「０」以上であり、演奏技術の種別を表す場合には、上記ステップＳＦ３の判断結果が「ＹＥＳ」になり、ステップＳＦ４に進む。ステップＳＦ４では、演奏技術タイプｉＴｅｃｈ別に発生回数を計数するカウンタｉＦＴＴｙｐｅＣｎｔ［ｉＴｅｃｈ］をインクリメントして歩進させる。
【００５７】
次いで、ステップＳＦ５では、レジスタｍｅにストアした音符データに含まれるクリアフラグｉＣｌｅａｒが「１」、すなわち正しく弾かれた音であるか否かを判断する。正しく弾かれていない音（クリアフラグｉＣｌｅａｒが「０」）であれば、判断結果は「ＮＯ」になり、ステップＳＦ７に進み、レジスタｍｅに次の音符データをストアして上述のステップＳＦ２に処理を戻す。
【００５８】
これに対し、正しく弾かれた音ならば、上記ステップＳＦ５の判断結果は「ＹＥＳ」になり、ステップＳＦ６に進む。ステップＳＦ６では、演奏技術タイプｉＴｅｃｈ別にクリア回数を計数するカウンタｉＦＴＴｙｐｅＣｌｅａｒ［ｉＴｅｃｈ］をインクリメントして歩進させる。そして、この後、ステップＳＦ７に進み、レジスタｍｅに次の音符データをストアして上述のステップＳＦ２に処理を戻す。
【００５９】
以後、全ての音符データを読み出し終えるまで、上述したステップＳＦ２〜ＳＦ７を繰り返すことによって、演奏技術タイプｉＴｅｃｈ別の発生回数がカウンタｉＦＴＴｙｐｅＣｎｔ［ｉＴｅｃｈ］にて計数されると共に、演奏技術タイプｉＴｅｃｈ別のクリア回数がカウンタｉＦＴＴｙｐｅＣｌｅａｒ［ｉＴｅｃｈ］にて計数される。
【００６０】
そして、全ての音符データについて読み出し終えると、上記ステップＳＦ２の判断結果が「ＹＥＳ」になり、図９に図示するステップＳＦ８に進む。ステップＳＦ８では、演奏技術の種別を指定するポインタＩおよびレジスタａｃをゼロクリアする。なお、レジスタａｃには、後述するように演奏技量の向上具合を表す達成度がストアされる。以下、レジスタａｃの値を達成度ａｃと称す。次いで、ステップＳＦ９に進むと、全ての演奏技術の種別毎の達成度ａｃを算出し終えたかどうかを判断する。算出し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＦ１０に進む。
【００６１】
ステップＳＦ１０〜ＳＦ１１では、クリア回数（カウンタｉＦＴＴｙｐｅＣｌｅａｒ［Ｉ］）を発生回数（カウンタｉＦＴＴｙｐｅＣｎｔ［Ｉ］で除して得られる正解率に、ポインタＩに応じて難易度テーブルｉＦＴＣｏｓｔ［Ｉ］から読み出される難易度を乗算することによって、ポインタＩで指定される演奏技術の種別における達成度ａｃを算出し、それをポインタＩの歩進に応じて累算する。
【００６２】
こうして、全ての演奏技術の種別毎の達成度ａｃを算出し終えると、上記ステップＳＦ１０では、各演奏技術の種別毎に算出した達成度ａｃが累算され、この結果、ユーザが演奏入力した曲について難易度を加味した達成度ａｃが得られる。また、全ての演奏技術の種別について達成度ａｃを算出し終えると、上記ステップＳＦ９の判断結果が「ＹＥＳ」になり、ステップＳＦ１２に進み、曲の難易度を加味した達成度ａｃをレジスタａｃｈｉｅｖｅＶａｌｕｅ（以下、達成度ａｃｈｉｅｖｅＶａｌｕｅと称す）にストアして本処理を終える。
【００６３】
（７）変数更新処理の動作
強化学習の一種であるＱ学習では、『現在のルールに従って行動を行い、それにより得られた報酬から価値関数（ルール評価）を作成すると共に、現在の価値関数から最適なルールを作成する』ことが知られている。
【００６４】
変数更新処理では、このようなＱ学習理論を適用しており、具体的には現在のアドバイス（ルール）に従って演奏入力（行動）を行った結果得られる達成度（報酬）から価値関数テーブルｖａｌｕｅの状態変数を更新すると共に、更新した状態変数に応じて価値関数テーブルｖａｌｕｅから最も効果的なアドバイス（ルール）を取得する。
【００６５】
以下、こうした変数更新処理の動作について図１０を参照して説明する。前述したメインルーチンのステップＳＡ７（図２参照）を介して本処理が実行されると、ＣＰＵ１３は図１０に図示するステップＳＧ１に処理を進め、達成度レベル数ＡｃｈｉｅｖｅＮ（定数）に、達成率（達成度ａｃｈｉｅｖｅＶａｌｕｅ／曲の難易度ｃｏｓｔ）を乗算し、Ｑ学習における状態変数として扱われる達成度ランクａｃｈｉｅｖｅを算出する。
【００６６】
続いて、ステップＳＧ２では、現在の達成度ａｃｈｉｅｖｅＶａｌｕｅから前回の達成度ｐｒｅｖＡｃｈｉｅｖｅＶａｌｕｅを減算して達成度差分ａを算出する。次いで、ステップＳＧ３では、算出した達成度差分ａが「０」より大きいか否か、すなわち達成度が上昇したかどうかを判断する。達成度が上昇した場合（ａ＞０）には、判断結果が「ＹＥＳ」になり、ステップＳＧ４に進み、レジスタｃｈａｎｇｅに「４」をセットした後、ステップＳＧ８に進む。以下、レジスタｃｈａｎｇｅの値を達成度ランク変化と称す。この達成度ランク変化ｃｈａｎｇｅは、Ｑ学習における状態変数として扱われる。
【００６７】
一方、達成度差分ａが「０」以下、つまり達成度が変わらないか或いは達成度が下降した場合には、上記ステップＳＧ３の判断結果は「ＮＯ」になり、ステップＳＧ５に進む。ステップＳＧ５では、算出した達成度差分ａが「０」か否か、つまり達成度が変わらないかどうかを判断する。達成度が変わらない場合（ａ＝０）には、判断結果は「ＹＥＳ」になり、ステップＳＧ６に進み、達成度ランク変化ｃｈａｎｇｅを「２」にセットした後、ステップＳＧ８に進む。これに対し、達成度が下降した場合（ａ＜０）には、上記ステップＳＧ５の判断結果が「ＮＯ」になり、ステップＳＧ７に進み、達成度ランク変化ｃｈａｎｇｅを「０」にセットした後、ステップＳＧ８に進む。
【００６８】
そして、ステップＳＧ８では、達成度ランクａｃｈｉｅｖｅおよび達成度ランク変化ｃｈａｎｇｅで指定される状態において、アクション番号検索ポインタｉを歩進させながら、価値関数テーブルｖａｌｕｅ［ａｃｈｉｅｖｅ］［ｃｈａｎｇｅ］［ｉ］から最も効果的（最大Ｑアクション価値ｍａｘＱ）なアドバイス種別ａｃｔｉｏｎを探し出す最大Ｑアクション処理を実行する。
【００６９】
次いで、ステップＳＧ９では、達成度ランクａｃｈｉｅｖｅおよび達成度ランク変化ｃｈａｎｇｅで指定される現在の状態におけるアドバイス種別ａｃｔｉｏｎの現在価値ａｆｔｅｒＱを、価値関数テーブルｖａｌｕｅ［ａｃｈｉｅｖｅ］［ｃｈａｎｇｅ］［ａｃｔｉｏｎ］から取得する。続いて、ステップＳＧ１０では、達成度ランクｐｒｅｖＡｃｈｉｅｖｅおよび達成度ランク変化ｐｒｅｖＣｈａｎｇｅで指定される前回状態における前アドバイス種別ｐｒｅｖＡｃｔｉｏｎの前回価値ｖを、価値関数テーブルｖａｌｕｅ［ｐｒｅｖＡｃｈｉｅｖｅ］［ｐｒｅｖＣｈａｎｇｅ］［ｐｒｅｖＡｃｔｉｏｎ］から取得する。
【００７０】
次に、ステップＳＧ１１では、次式（１）に従って現在価値ａｆｔｅｒＱに応じて前回の状態および前回価値ｖを更新する。
ｖａｌｕｅ［ｐｒｅｖＡｃｈｉｅｖｅ］［ｐｒｅｖＣｈａｎｇｅ］［ｐｒｅｖＡｃｔｉｏｎ］
← 
ｖ＋ａｌｐｈａ×（ｇａｍｍａ×ａｆｔｅｒＱ−ｖ＋ｒｅｗａｒｄ）…（１）
なお、上記（１）式において、ａｌｐｈａは学習率、ｇａｍｍａは割引率、ｒｅｗａｒｄは報酬（達成度ａｃｈｉｅｖｅＶａｌｕｅ）である。
【００７１】
そして、ステップＳＧ１２では、現在の達成度ランクａｃｈｉｅｖｅ、達成度ランク変化ｃｈａｎｇｅ、アドバイス種別ａｃｔｉｏｎおよび達成度ａｃｈｉｅｖｅＶａｌｕｅを、それぞれ前回の達成度ランクｐｒｅｖＡｃｈｉｅｖｅ、達成度ランク変化ｐｒｅｖＣｈａｎｇｅ、アドバイス種別ｐｒｅｖＡｃｔｉｏｎおよび達成度ｐｅｖＡｃｈｉｅｖｅＶａｌｕｅに更新して本処理を終える。
【００７２】
（８）最大Ｑアクション処理の動作
次に、図１１を参照して最大Ｑアクション処理の動作を説明する。上述した変数更新処理のステップＳＧ８（図１０参照）を介して本処理が実行されると、ＣＰＵ１３は図１１に図示するステップＳＨ１に処理を進める。ステップＳＨ１〜ＳＨ３では、アクション番号検索ポインタｉ、最大Ｑアクション価値ｍａｘＱおよびアクション種別ｉｎｄｅｘをそれぞれゼロクリアする。
【００７３】
続いて、ステップＳＨ４では、全てのアクションについて検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＨ５に進み、達成度ランクａｃｈｉｅｖｅおよび達成度ランク変化ｃｈａｎｇｅで指定される状態において、アクション番号検索ポインタｉに応じたアドバイス価値ｑを、価値関数テーブルｖａｌｕｅ［ａｃｈｉｅｖｅ］［ｃｈａｎｇｅ］［ｉ］から取得する。
【００７４】
ここで、図１２を参照して、達成度ランクａｃｈｉｅｖｅおよび達成度ランク変化ｃｈａｎｇｅで指定される状態において、アクション番号検索ポインタｉに応じたアドバイス価値ｑを価値関数テーブルｖａｌｕｅから取得する処理について説明する。例えば達成度ランクａｃｈｉｅｖｅが「１」、達成度ランク変化ｃｈａｎｇｅが「１」の場合、価値関数テーブルｖａｌｕｅ［１］［１］［ａｃｔｉｏｎ］には、図１２に図示する一例のように、複数のアクション（アドバイス）とそれらに対応付けられたアドバイス価値ｑ０〜ｑｎが登録されており、上記ステップＳＨ５では、アクション番号検索ポインタｉに応じたアドバイス価値ｑを価値関数テーブルｖａｌｕｅ［ａｃｈｉｅｖｅ］［ｃｈａｎｇｅ］［ｉ］から読み出すようになっている。
【００７５】
そして、次のステップＳＨ６では、価値関数テーブルｖａｌｕｅ［ａｃｈｉｅｖｅ］［ｃｈａｎｇｅ］［ｉ］から読み出したアドバイス価値ｑが、最大Ｑアクション価値ｍａｘＱより大きいか否かを判断する。最初のパスでは、上記ステップＳＨ２において最大Ｑアクション価値ｍａｘＱはゼロクリアされている為、判断結果は「ＮＯ」になり、ステップＳＨ７に進む。ステップＳＨ７では、アクション番号検索ポインタｉをアクション種別ｉｎｄｅｘに保持し、続くステップＳＨ８では、アクション番号検索ポインタｉに応じて、価値関数テーブルｖａｌｕｅ［ａｃｈｉｅｖｅ］［ｃｈａｎｇｅ］［ｉ］から読み出したアドバイス価値ｑを最大Ｑアクション価値ｍａｘＱとして保存しておく。
【００７６】
次いで、ステップＳＨ９では、アクション番号検索ポインタｉをインクリメントして歩進させた後、上述のステップＳＨ４に処理を戻す。以後、アクション番号検索ポインタｉの歩進に応じて価値関数テーブルｖａｌｕｅ［ａｃｈｉｅｖｅ］［ｃｈａｎｇｅ］［ｉ］からアドバイス価値ｑを読み出し、読み出したアドバイス価値ｑが最大Ｑアクション価値ｍａｘＱを超えると、上記ステップＳＨ６の判断結果が「ＹＥＳ」になり、ステップＳＨ１０に進む。
【００７７】
ステップＳＨ１０〜ステップＳＨ１３では、検索される最大Ｑアクション価値ｍａｘＱが常に同じものとなる単調化を避ける為、ランダムに変化する要素を追加する。すなわち、ステップＳＨ１０では、パート指定データｉＨａｎｄが「１」であるか否か、つまり達成度ａｃｈｉｅｖｅＶａｌｕｅを算出する前段階の距離算出対象が左手パートであったかどうかを判断する。右手パートであったならば、判断結果は「ＮＯ」になり、上述したステップＳＨ９に処理を進め、アクション番号検索ポインタｉを歩進させた後、前述のステップＳＨ４に処理を戻す。この場合、ランダムに変化する要素は追加されない。
【００７８】
一方、左手パートの場合には、上記ステップＳＨ１０の判断結果が「ＹＥＳ」となり、ステップＳＨ１１に進み、「０」又は「１」の乱数を発生させてレジスタｒｎｄにストアする。次いで、ステップＳＨ１２では、レジスタｒｎｄの乱数値が「１」であるか否かを判断する。レジスタｒｎｄの乱数値が「０」ならば、判断結果は「ＮＯ」になり、上述したステップＳＨ９に進むが、レジスタｒｎｄの乱数値が「１」であると、判断結果は「ＹＥＳ」になり、ステップＳＨ１３に進み、アドバイス種別ｉｎｄｅｘに、アクション番号検索ポインタｉをセットして上述のステップＳＨ９に進む。これにより、ランダムに変化する要素が追加されることになる。
【００７９】
こうして、ランダムに変化する要素を加味しつつ、アクション番号検索ポインタｉの歩進に応じて、価値関数テーブルｖａｌｕｅ［ａｃｈｉｅｖｅ］［ｃｈａｎｇｅ］［ｉ］から全てのアクション（アドバイスの種別）を検索し終えると、上述したステップＳＨ４の判断結果が「ＹＥＳ」になり、最大Ｑアクション価値ｍａｘＱとなったアドバイス価値ｑを指定したアクション種別ｉｎｄｅｘを、アドバイス種別ａｃｔｉｏｎにセットして本処理を終える。
【００８０】
（９）アドバイス処理の動作
次に、図１３を参照してアドバイス処理の動作を説明する。前述したメインルーチンのステップＳＡ８（図２参照）を介して本処理が実行されると、ＣＰＵ１３は図１３に図示するステップＳＪ１に進み、「０」又は「１」の乱数値を発生させてレジスタｒｎｄにストアし、続くステップＳＪ２では、レジスタｒｎｄの乱数値が「１」であるか否かを判断する。レジスタｒｎｄの乱数値が「０」であると、判断結果は「ＮＯ」になり、ステップＳＪ３に進み、アドバイス種別の数の範囲で乱数を発生させ、発生させた乱数値をアドバイス種別ａｃｔｉｏｎにセットした後、後述のステップＳＪ５に進む。
【００８１】
一方、レジスタｒｎｄの乱数値が「１」であると、上記ステップＳＪ２の判断結果は「ＹＥＳ」になり、ステップＳＪ４に進む。ステップＳＪ４では、達成度ランクａｃｈｉｅｖｅおよび達成度ランク変化ｃｈａｎｇｅで指定される状態において、アクション番号検索ポインタｉを歩進させながら、価値関数テーブルｖａｌｕｅ［ａｃｈｉｅｖｅ］［ｃｈａｎｇｅ］［ｉ］から最も効果的（最大Ｑアクション価値ｍａｘＱ）なアドバイス種別ａｃｔｉｏｎを探し出す最大Ｑアクション処理（図１１参照）を実行した後、ステップＳＪ５に進む。そして、ステップＳＪ５では、アドバイス種別ａｃｔｉｏｎで指定される種類のアドバイスを実行して本処理を終える。なお、ここで言うアドバイスの実行とは、例えばアドバイス種別ａｃｔｉｏｎで指定されるアドバイスの文言を画面表示したり音声合成したりしてユーザに報知することを指す。
【００８２】
以上説明したように、第１実施形態では、ユーザの演奏入力に応じて発生する演奏データが、手本（模範演奏）となる曲データ中のどの音符データに該当し、かつその該当音符データを右手、左手および両手の何れで弾いたのかを特定し、特定された音符データのピッチｉＰｉｔと演奏データのピッチとを比較して当該音符データの音が正しく弾かれたかどうかを判定し、正しく弾かれた音符データのクリアフラグｉＣｌｅａｒを「１」にセットする。
【００８３】
そして、曲データ中の全ての音符データに含まれる演奏技術タイプｉＴｅｃｈから演奏技術の種別毎の発生回数およびクリア回数（正しく弾かれた回数）を抽出し、抽出した発生回数およびクリア回数から得られる演奏技術の種別毎の正解率（クリア回数／発生回数）に、演奏技術の種別に応じた難易度を乗算して演奏技術の種別毎の達成度を算出し、算出された各達成度を累算することで曲の難易度に応じた達成度ａｃｈｉｅｖｅＶａｌｕｅを取得する。
【００８４】
取得した達成度ａｃｈｉｅｖｅＶａｌｕｅに基づき価値関数テーブルｖａｌｕｅの状態変数（達成度ランクａｃｈｉｅｖｅおよび達成度ランク変化ｃｈａｎｇｅ）を更新し、更新した状態変数に応じて価値関数テーブルｖａｌｕｅ［ａｃｈｉｅｖｅ］［ｃｈａｎｇｅ］［ａｃｔｉｏｎ］から探し出される最も効果的（最大Ｑアクション価値ｍａｘＱ）なアドバイス種別ａｃｔｉｏｎにより指定される種類のアドバイスを演奏入力するユーザに与えるので、ユーザの状態に応じた最適なアドバイスを与えることが可能になる。
【００８５】
なお、上述した第１実施形態では、ユーザの演奏入力に応じて発生する演奏データが、手本（模範演奏）となる曲データ中のどの音符データに該当し、かつその該当音符データを右手、左手および両手の何れで弾いたのかをＤＰマッチングを用いて特定するようにしたので、曲データ中のどの音から弾いたとしても、演奏データに該当する音符データを特定することが出来る。
【００８６】
［第２実施形態］
次に、図１４〜図１６を参照して第２実施形態について説明する。第２実施形態の構成は、第１実施形態と共通するので、その説明については省略する。第２実施形態が第１実施形態と相違する点は、第１実施形態では達成度ａｃｈｉｅｖｅＶａｌｕｅを向上させるのに最も効果的（最大Ｑアクション価値ｍａｘＱ）なアドバイスをユーザに与えるのに対し、第２実施形態では練習意欲を向上させ、練習時間を長くするのに最も効果的（最大Ｑアクション価値ｍａｘＱ）なアドバイスをユーザに与えることにある。
【００８７】
すなわち、図１４に図示するように、第２実施形態では、現在の練習時間ｌｅｎに基づき価値関数テーブルｖａｌｕｅの状態変数ｓｔａｔｅ１（前回練習時間ｌｅｎＰｒｅ）および状態変数ｓｔａｔｅ２（練習間隔ｔｉｍｅ−ｔｉｍｅＰｒｅ）を更新し、更新した状態変数に応じて価値関数テーブルｖａｌｕｅ［ｓｔａｔｅ１］［ｓｔａｔｅ２］［ａｃｔｉｏｎ］から練習時間を長くする、つまり換言すれば練習意欲の向上を図るのに最も効果的（最大Ｑアクション価値ｍａｘＱ）なアドバイスを探し出す。
【００８８】
以下では、こうした第２実施形態による変数更新処理および最大Ｑアクション処理の各動作を説明する。なお、第２実施形態では、演奏入力処理（ステップＳＡ３）において、演奏入力に応じた演奏データを保存する一方、演奏入力が行われる毎に開始時刻および終了時刻を記録するものとする。
【００８９】
（１）第２実施形態による変数更新処理の動作
図１５を参照して第２実施形態による変数更新処理の動作を説明する。前述した第１実施形態と同様、メインルーチンのステップＳＡ７（図２参照）を介して本処理が実行されると、ＣＰＵ１３は図１５に図示するステップＳＫ１に処理を進め、前回の練習時間ｌｅｎＰｒｅをレジスタｓｔａｔｅ１（以下、状態変数ｓｔａｔｅ１と称す）にストアし、続くステップＳＫ２では、今回の開始時刻ｔｉｍｅから前回の終了時刻ｔｉｍｅＰｒｅを減算して得た練習間隔をレジスタｓｔａｔｅ２（以下、状態変数ｓｔａｔｅ２と称す）にストアする。
【００９０】
そして、ステップＳＫ３では、状態変数ｓｔａｔｅ１および状態変数ｓｔａｔｅ２で指定される状態において、アクション番号検索ポインタｉを歩進させながら、価値関数テーブルｖａｌｕｅ［ｓｔａｔｅ１］［ｓｔａｔｅ２］［ｉ］から最も効果的（最大Ｑアクション価値ｍａｘＱ）なアドバイス種別ａｃｔｉｏｎを探し出す最大Ｑアクション処理を実行する。
【００９１】
次いで、ステップＳＫ４では、状態変数ｓｔａｔｅ１および状態変数ｓｔａｔｅ２で指定される現在の状態におけるアドバイス種別ａｃｔｉｏｎの現在価値ａｆｔｅｒＱを、価値関数テーブルｖａｌｕｅ［ｓｔａｔｅ１］［ｓｔａｔｅ２］［ａｃｔｉｏｎ］から取得する。続いて、ステップＳＫ５では、前回の状態変数ｓｔａｔｅ１Ｐｒおよび前回の状態変数ｓｔａｔｅ２Ｐｒで指定される前回状態における前アドバイス種別ｐｒｅｖＡｃｔｉｏｎの前回価値ｖを、価値関数テーブルｖａｌｕｅ［ｓｔａｔｅ１Ｐｒ］［ｓｔａｔｅ２Ｐｒ］［ｐｒｅｖＡｃｔｉｏｎ］から取得する。
【００９２】
次に、ステップＳＫ６では、次式（２）に従って現在価値ａｆｔｅｒＱに応じて前回の状態および前回価値ｖを更新する。
ｖａｌｕｅ［ｓｔａｔｅ１Ｐｒ］［ｓｔａｔｅ２Ｐｒ］［ｐｒｅｖＡｃｔｉｏｎ］
← 
ｖ＋ａｌｐｈａ×（ｇａｍｍａ×ａｆｔｅｒＱ−ｖ＋ｒｅｗａｒｄ）…（２）
なお、上記（１）式において、ａｌｐｈａは学習率、ｇａｍｍａは割引率、ｒｅｗａｒｄは報酬（練習時間の長さｌｅｎ）である。
【００９３】
そして、ステップＳＫ７では、現在の状態変数ｓｔａｔｅ１、状態変数ｓｔａｔｅ２およびアドバイス種別ａｃｔｉｏｎを、それぞれ前回の状態変数ｓｔａｔｅ１Ｐｒ、状態変数ｓｔａｔｅ２Ｐｒおよびアドバイス種別ｐｒｅｖＡｃｔｉｏｎに更新して本処理を終える。
【００９４】
（２）第２実施形態による最大Ｑアクション処理の動作
次に、図１６を参照して第２実施形態による最大Ｑアクション処理の動作を説明する。上述した変数更新処理のステップＳＫ３（図１５参照）を介して本処理が実行されると、ＣＰＵ１３は図１６に図示するステップＳＬ１に処理を進める。ステップＳＬ１〜ＳＬ３では、アクション番号検索ポインタｉ、最大Ｑアクション価値ｍａｘＱおよびアクション種別ｉｎｄｅｘをそれぞれゼロクリアする。
【００９５】
続いて、ステップＳＬ４では、全てのアクションについて検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＬ５に進み、状態変数ｓｔａｔｅ１および状態変数ｓｔａｔｅ２で指定される状態において、アクション番号検索ポインタｉに応じたアドバイス価値ｑを、価値関数テーブルｖａｌｕｅ［ｓｔａｔｅ１］［ｓｔａｔｅ２］［ｉ］から取得する。
【００９６】
そして、ステップＳＬ６では、価値関数テーブルｖａｌｕｅｖａｌｕｅ［ｓｔａｔｅ１］［ｓｔａｔｅ２］［ｉ］から読み出したアドバイス価値ｑが、最大Ｑアクション価値ｍａｘＱより大きいか否かを判断する。最初のパスでは、上記ステップＳＬ２において最大Ｑアクション価値ｍａｘＱはゼロクリアされている為、判断結果は「ＮＯ」になり、ステップＳＬ７に進む。
【００９７】
ステップＳＬ７では、アクション番号検索ポインタｉをアクション種別ｉｎｄｅｘに保持し、続くステップＳＬ８では、アクション番号検索ポインタｉに応じて、価値関数テーブルｖａｌｕｅ［ｓｔａｔｅ１］［ｓｔａｔｅ２］［ｉ］から読み出したアドバイス価値ｑを最大Ｑアクション価値ｍａｘＱとして保存しておく。
【００９８】
次いで、ステップＳＬ９では、アクション番号検索ポインタｉをインクリメントして歩進させた後、上述のステップＳＬ４に処理を戻す。以後、アクション番号検索ポインタｉの歩進に応じて価値関数テーブルｖａｌｕｅ［ｓｔａｔｅ１］［ｓｔａｔｅ２］［ｉ］からアドバイス価値ｑを読み出し、読み出したアドバイス価値ｑが最大Ｑアクション価値ｍａｘＱを超えると、上記ステップＳＬ６の判断結果が「ＹＥＳ」になり、ステップＳＬ１０に進む。
【００９９】
ステップＳＬ１０〜ステップＳＬ１３では、検索される最大Ｑアクション価値ｍａｘＱが常に同じものとなる単調化を避ける為、ランダムに変化する要素を追加する。すなわち、ステップＳＬ１０では、パート指定データｉＨａｎｄが「１」であるか否か、つまり距離算出対象が左手パートであったかどうかを判断する。右手パートであったならば、判断結果は「ＮＯ」になり、上述したステップＳＬ９に処理を進め、アクション番号検索ポインタｉを歩進させた後、前述のステップＳＬ４に処理を戻す。この場合、ランダムに変化する要素は追加されない。
【０１００】
一方、左手パートの場合には、上記ステップＳＬ１０の判断結果が「ＹＥＳ」となり、ステップＳＬ１１に進み、「０」又は「１」の乱数を発生させてレジスタｒｎｄにストアする。次いで、ステップＳＬ１２では、レジスタｒｎｄの乱数値が「１」であるか否かを判断する。レジスタｒｎｄの乱数値が「０」ならば、判断結果は「ＮＯ」になり、上述したステップＳＬ９に進むが、レジスタｒｎｄの乱数値が「１」であると、判断結果は「ＹＥＳ」になり、ステップＳＬ１３に進み、アドバイス種別ｉｎｄｅｘに、アクション番号検索ポインタｉをセットして上述のステップＳＨ９に進む。これにより、ランダムに変化する要素が追加されることになる。
【０１０１】
こうして、ランダムに変化する要素を加味しつつ、アクション番号検索ポインタｉの歩進に応じて、価値関数テーブルｖａｌｕｅ［ｓｔａｔｅ１］［ｓｔａｔｅ２］［ｉ］から全てのアクション（アドバイスの種別）を検索し終えると、上述したステップＳＬ４の判断結果が「ＹＥＳ」になり、最大Ｑアクション価値ｍａｘＱとなったアドバイス価値ｑを指定したアクション種別ｉｎｄｅｘを、アドバイス種別ａｃｔｉｏｎにセットして本処理を終える。
【０１０２】
以上のように、第２実施形態によれば、現在の練習時間ｌｅｎに基づき価値関数テーブルｖａｌｕｅの状態変数ｓｔａｔｅ１（前回練習時間ｌｅｎＰｒｅ）および状態変数ｓｔａｔｅ２（練習間隔ｔｉｍｅ−ｔｉｍｅＰｒｅ）を更新し、更新した状態変数に応じて価値関数テーブルｖａｌｕｅ［ｓｔａｔｅ１］［ｓｔａｔｅ２］［ａｃｔｉｏｎ］から練習時間を長くする、つまり換言すれば練習意欲の向上を図るのに最も効果的（最大Ｑアクション価値ｍａｘＱ）なアドバイス種別ａｃｔｉｏｎにより指定される種類のアドバイスを演奏入力するユーザに与えるので、ユーザの状態に応じた最適なアドバイスを与えることが可能になる。
【０１０３】
なお、上述の第２実施形態では、ユーザの練習意欲の向上を図り、練習時間を長くするのに効果的なアドバイスを与えるようにしたが、これに限らず、図１７に図示する一例のように、ユーザの練習意欲の向上を図り、練習間隔ｔｉｍｅ−ｔｉｍｅＰｒｅを短くして頻繁に練習させるのに効果的なアドバイスを与える態様とすることも可能であり、この態様でもユーザの状態に応じた最適なアドバイスを与えることが可能になる。
【０１０４】
以上、本発明の実施の一形態について説明したが、本発明はそれに限定されるものではなく、本願出願の特許請求の範囲に記載された発明とその均等の範囲に含まれる。以下では、本願出願当初の特許請求の範囲に記載された各発明について付記する。
【０１０５】
（付記）
［請求項１］
曲を構成する各音を表す複数の音符データを記憶する記憶手段と、
前記記憶手段に記憶される複数の音符データと、ユーザの演奏入力に応じて発生した演奏データとの比較に基づきユーザの演奏技量を評価して曲の難易度に応じた達成度を取得する達成度取得手段と、
前記達成度取得手段により取得された達成度の向上を図るのに最も効果的なアドバイスを発生してユーザに与えるアドバイス発生手段と
を具備することを特徴とする演奏教習装置。
【０１０６】
［請求項２］
前記アドバイス発生手段は、
前記達成度取得手段により取得された達成度から第１および第２の状態変数を生成する状態変数生成手段と、
前記状態変数生成手段により生成された第１および第２の状態変数に応じて、複数のアドバイス種別の中から最大価値のアドバイスを抽出するアドバイス抽出手段と
を備えることを特徴とする請求項１記載の演奏教習装置。
【０１０７】
［請求項３］
前記状態変数生成手段は、
前記達成度取得手段により取得された達成度から達成度ランクを取得する第１の状態変数取得手段と、
前記達成度取得手段により取得された現在の達成度と前回取得された前回の達成度との差分に応じた達成度ランク変化を取得する第２の状態変数取得手段とを備え、
前記アドバイス抽出手段は、
前記第１の状態変数取得手段が取得した達成度ランクと、前記第２の状態変数取得手段が取得した達成度ランク変化とで指定される状態において、価値関数テーブルに登録される複数のアドバイス種別の中から最大価値を有する種別のアドバイスを抽出することを特徴とする請求項２記載の演奏教習装置。
【０１０８】
［請求項４］
演奏入力が行われる毎に開始時刻および終了時刻を記録する時刻記録手段を更に備え、
前記状態変数生成手段は、
前記時刻記録手段により記録された前回の開始時刻および終了時刻から前回練習時間を取得する第１の状態変数取得手段と、
前記時刻記録手段により記録された今回の開始時刻および前回の終了時刻から練習間隔を取得する第２の状態変数取手段とを備え、
前記アドバイス抽出手段は、
前記第１の状態変数取得手段が取得した前回練習時間と、前記第２の状態変数取手段が取得した練習間隔とで指定される状態において、価値関数テーブルに登録される複数のアドバイス種別の中から練習時間を長くするのに最も効果的なアドバイスを抽出することを特徴とする請求項２記載の演奏教習装置。
【０１０９】
［請求項５］
前記アドバイス抽出手段は、
前記第１の状態変数取得手段が取得した前回練習時間と、前記第２の状態変数取手段が取得した練習間隔とで指定される状態において、価値関数テーブルに登録される複数のアドバイス種別の中から練習間隔を短くして頻繁に練習させるのに最も効果的なアドバイスを抽出することを特徴とする請求項４記載の演奏教習装置。
【０１１０】
［請求項６］
前記アドバイス発生手段は、
前記達成度取得手段により取得された達成度から第１および第２の状態変数を生成する状態変数生成手段と、
前記状態変数生成手段により生成された第１および第２の状態変数に応じて、Ｑ学習理論に基づく価値関数テーブルから最大価値のアドバイスを抽出するアドバイス抽出手段と
を備えることを特徴とする請求項１記載の演奏教習装置。
【０１１１】
［請求項７］
演奏教習装置に搭載されるコンピュータに、
曲を構成する各音を表す複数の音符データと、ユーザの演奏入力に応じて発生した演奏データとの比較に基づきユーザの演奏技量を評価して曲の難易度に応じた達成度を取得する達成度取得ステップと、
前記達成度取得ステップにより取得された達成度の向上を図るのに最も効果的なアドバイスを発生してユーザに与えるアドバイス発生ステップと
を実行させることを特徴とするプログラム。
【符号の説明】
【０１１２】
１０  鍵盤
１１  スイッチ部
１２  表示部
１３  ＣＰＵ
１４  ＲＯＭ
１５  ＲＡＭ
１６  音源
１７  サウンドシステム
１００  演奏教習装置
【図１】
0005440961.tif 000002
【図２】
0005440961.tif 000003
【図３】
0005440961.tif 000004
【図４】
0005440961.tif 000005
【図５】
0005440961.tif 000006
【図６】
0005440961.tif 000007
【図７】
0005440961.tif 000008
【図８】
0005440961.tif 000009
【図９】
0005440961.tif 000010
【図１０】
0005440961.tif 000011
【図１１】
0005440961.tif 000012
【図１２】
0005440961.tif 000013
【図１３】
0005440961.tif 000014
【図１４】
0005440961.tif 000015
【図１５】
0005440961.tif 000016
【図１６】
0005440961.tif 000017
【図１７】
0005440961.tif 000018