説明

演奏教習装置、演奏教習方法およびプログラム

【課題】ユーザの状態に応じた最適なアドバイスを与える演奏教習装置を提供する。
【解決手段】CPUは、曲を構成する各音を表す複数の音符データと、ユーザの演奏入力に応じて発生した演奏データとの比較に基づきユーザの演奏技量を評価して曲の難易度に応じた達成度を取得し、取得した達成度に基づき価値関数テーブルvalueの状態変数(達成度ランクachieveおよび達成度ランク変化change)を更新し、更新した状態変数に応じて価値関数テーブルvalue[achieve][change][action]から探し出される最も効果的(最大価値)なアドバイス種別actionにより指定される種類のアドバイスを演奏入力するユーザに与える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、電子楽器に用いて好適な演奏教習装置およびプログラムに関する。
【背景技術】
【0002】
ユーザ(演奏者)の演奏を評価した結果に基づき練習効果を高めさせる演奏教習装置が知られている。この種の技術として、例えば特許文献1には、演奏入力された演奏データと模範演奏に相当する音符データとの比較に基づき演奏ミスの有無を判断し、演奏ミスが有れば、対応する演奏ミス項目別に分類集計することで演奏ミス仕勝ちな音を抽出し、その演奏ミス仕勝ちな音で再度演奏ミスが生じた場合に、ユーザの間違う癖を矯正する為、その演奏ミス仕勝ちな音の演奏を繰り返し練習させる技術が開示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2011−53579号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、上記特許文献1に開示の技術では、単に同じ過ちが繰り返された場合に、演奏ミス仕勝ちな音の演奏を繰り返し練習させるだけなので、ユーザの状態に応じた最適なアドバイスを与えることが出来ないという問題がある。
【0005】
本発明は、このような事情に鑑みてなされたもので、ユーザの状態に応じた最適なアドバイスを与えることができる演奏教習装置およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【0006】
上記目的を達成するため、本発明の演奏教習装置は、曲を構成する各音を表す複数の音符データを記憶する記憶手段と、前記記憶手段に記憶される複数の音符データと、ユーザの演奏入力に応じて発生した演奏データとの比較に基づきユーザの演奏技量を評価して曲の難易度に応じた達成度を取得する達成度取得手段と、前記達成度取得手段により取得された達成度の向上を図るのに最も効果的なアドバイスを発生してユーザに与えるアドバイス発生手段とを具備することを特徴とする。
【発明の効果】
【0007】
本発明では、ユーザの状態に応じた最適なアドバイスを与えることができる。
【図面の簡単な説明】
【0008】
【図1】第1実施形態による演奏評価装置100の全体構成を示すブロック図である。
【図2】メインルーチンの動作を示すフローチャートである。
【図3】該当箇所特定処理の動作を示すフローチャートである。
【図4】距離算出処理の動作を示すフローチャートである。
【図5】DPマッチング処理の動作を示すフローチャートである。
【図6】図5に続くDPマッチング処理の動作を示すフローチャートである。
【図7】演奏判定処理の動作を示すフローチャートである。
【図8】達成度算出処理の動作を示すフローチャートである。
【図9】図8に続く達成度算出処理の動作を示すフローチャートである。
【図10】変数更新処理の動作を示すフローチャートである。
【図11】最大Qアクション処理の動作を示すフローチャートである。
【図12】価値関数テーブルvalueの一例を示す図である。
【図13】アドバイス処理の動作を示すフローチャートである。
【図14】第2実施形態の概要を説明するための図である。
【図15】第2実施形態による変数更新処理の動作を示すフローチャートである。
【図16】第2実施形態による最大Qアクション処理の動作を示すフローチャートである。
【図17】第2実施形態の変形例を説明するための図である。
【発明を実施するための形態】
【0009】
以下、図面を参照して本発明の実施形態について説明する。
[第1実施形態]
A.構成
図1は、第1実施形態による演奏評価装置100の全体構成を示すブロック図である。この図において、鍵盤10は、演奏入力(押離鍵操作)に応じたキーオン/キーオフイベント、鍵番号およびベロシティ等を含む演奏情報を発生する。スイッチ部11は、装置パネルに配設される各種操作スイッチを有し、ユーザ操作されるスイッチ種に対応したスイッチイベントを発生する。スイッチ部11に配設される主要なスイッチとしては、例えばパワーオンオフする電源スイッチの他、手本(模範演奏)となる曲データを選択する曲選択スイッチや、動作の終了を指示する終了スイッチ等がある。
【0010】
表示部12は、LCDパネル等から構成され、CPU13から供給される表示制御信号に応じて、演奏入力する際に曲データを楽譜表示したり、演奏終了後に演奏評価結果を表示したりする他、装置の動作状態や設定状態を表示する。
【0011】
CPU13は、演奏入力に応じて鍵盤10が発生する演奏情報をMIDI形式の演奏データ(ノートオン/ノートオフ等)に変換し、変換した演奏データを記憶する一方、音源16に供給して楽音発生を指示する。また、CPU13は、記憶された演奏データと手本(模範演奏)となる曲データを構成する音符データとの比較に基づきユーザの演奏技量を評価して曲の難易度を加味した達成度を取得し、取得した達成度を更に向上させるのに最も効果的なアドバイスをユーザに与える。こうした本発明に係わるCPU13の特徴的な処理動作については追って詳述する。
【0012】
ROM14には、CPU13にロードされる各種の制御プログラムが記憶される。各種の制御プログラムとは、後述するメインルーチンを構成する該当箇所特定処理、演奏判定処理、達成度算出処理、変数更新処理およひアドバイス処理を含む。なお、該当箇所特定処理は距離算出処理およびDPマッチング処理を含み、変数更新処理は最大Qアクション処理を含む。
【0013】
RAM15は、ワークエリア、演奏データエリアおよび曲データエリアを備える。RAM15のワークエリアには、CPU13の処理に使用される各種レジスタ・フラグデータが一時記憶される他、演奏技術の種別に対応する難易度が登録される難易度テーブルiFTCostや、Q学習理論に基づき生成された価値関数テーブルvalueを備える。この難易度テーブルiFTCostや価値関数テーブルvalueが意図するところについては追って述べる。
【0014】
RAM15の演奏データエリアには、演奏入力に応じてCPU10が生成する複数の演奏音の演奏データが記憶される。RAM15の曲データエリアには、手本(模範演奏)となる曲データが複数曲分格納される。曲データは、曲を形成する複数の音符を表す音符データから構成される。曲データを構成する音符データは、右手で弾く右手パート、左手で弾く左手パートおよび両手で弾く左右両パートに区分される。
【0015】
1つの音符データは、iTime、iGate、iPit、iVel、iTechおよびiClearから構成される。iTimeは発音時刻、iGateは音長、iPitはピッチ(音高)、iVelはベロシティ(音量)を表す。iTechは演奏技術の種別を表す値である。演奏技術の種別とは、「指潜り」や「指跨ぎ」等の指の動かし方の種類を指す。負の値の場合には、演奏技術を要しない音符であることを表し、0以上の値が演奏技術の種別を表す。以下、iTechを演奏技術タイプと称す。iClearは対応する音符が手本通りに正しく弾けたかどうかを表すフラグであり、「1」の場合に手本通りに正しく弾けたことを表し、「0」の場合に弾けていないことを表す。以下、iClearをクリアフラグiClearと称す。
【0016】
音源16は、周知の波形メモリ読み出し方式によって構成され、CPU13から供給される演奏データに応じた楽音データを発生して出力する。サウンドシステム17は、音源16から出力される楽音データをアナログ形式の楽音信号に変換した後、その楽音信号から不要ノイズを除去する等のフィルタリングを施してからレベル増幅してスピーカより発音させる。
【0017】
B.動作
次に、図2〜図9を参照して上記構成による演奏評価装置100の動作を説明する。以下では、CPU13が実行するメインルーチン、該当箇所特定処理、演奏判定処理、達成度算出処理、変数更新処理およひアドバイス処理の各動作について述べる。なお、該当箇所特定処理は距離算出処理およびDPマッチング処理を含み、変数更新処理は最大Qアクション処理を含む。
【0018】
(1)メインルーチンの動作
図2は、メインルーチンの動作を示すフローチャートである。演奏評価装置100がパワーオンされると、CPU13は図2に図示するメインルーチンを実行してステップSA1に処理を進め、装置各部を初期化するイニシャライズを行う。イニシャライズが完了すると、CPU13はステップSA2に進み、終了操作が為された否かを判断する。終了操作が為されなければ、判断結果は「NO」になり、ステップSA3に進む。
【0019】
ステップSA3では、演奏入力に応じてCPU10が生成する演奏データをRAM15の演奏データエリアに保存する演奏入力処理を実行する。なお、演奏入力処理では、曲選択スイッチ操作により選択された曲データを練習課題とし、当該曲データを表示部12に楽譜表示させ、その楽譜を見てユーザが曲の各音を弾く演奏入力を行うようになっている。
【0020】
次いで、ステップSA4では、ユーザの演奏入力で発生した演奏データが、手本(模範演奏)となる曲データ中のどの音符データに該当し、かつその該当音符データを右手パート、左手パートおよび左右両パートの何れで弾いたのかを特定する該当箇所特定処理を実行する。
【0021】
続いて、ステップSA5では、上記ステップSA4において特定した音符データのピッチiPitと演奏データの音高とを比較して当該音符データの音が正しく弾かれたかどうかを判定し、正しく弾かれた音符データのクリアフラグiClearを「1」にセットする演奏判定処理を実行する。
【0022】
そして、ステップSA6では、達成度算出処理を実行する。達成度算出処理では、後述するように、曲データ中の全ての音符データに含まれる演奏技術タイプiTechから演奏技術の種別毎の発生回数およびクリア回数(正しく弾かれた回数)を抽出し、抽出した発生回数およびクリア回数から得られる演奏技術の種別毎の正解率(クリア回数/発生回数)に、演奏技術の種別に応じた難易度を乗算して演奏技術の種別毎の達成度を算出し、算出された各達成度を累算することで曲の難易度に応じた達成度achieveValueを取得する。
【0023】
次いで、ステップSA7では、Q学習理論に基づき、現在のアドバイスに従って演奏入力を行った結果得られた達成度achieveValueから価値関数テーブルvalueの状態変数を更新すると共に、更新した状態変数に応じて価値関数テーブルvalueから最も効果的なアドバイスを取得する変数更新処理を実行する。続いて、ステップSA8では、価値関数テーブルvalue[achieve][change][i]から探し出された最も効果的(最大Qアクション価値maxQ)なアドバイス種別actionで指定される種類のアドバイスを演奏入力するユーザに与える。
【0024】
この後、上述のステップSA2に処理を戻し、以後、終了操作が為されるまで上述したステップSA2〜SA9を繰り返し実行する。そして、終了操作が為されると、上記ステップSA2の判断結果が「YES」になり、ステップSA9に進み、変数更新処理(ステップSA7)において更新された変数(前回の達成度ランクprevAchieve、達成度ランク変化prevChange、アドバイス種別prevActionおよび達成度pevAchieveValueを保存する変数保存処理を実行して本処理を終える。
【0025】
(2)該当箇所特定処理の動作
次に、図3を参照して該当箇所特定処理の動作を説明する。上述したメインルーチンのステップSA4(図2参照)を介して本処理が実行されると、CPU13は図3に図示するステップSB1に処理を進め、レジスタdoDistMinに初期値となる所定値をストアする。レジスタdoDistMinに格納される初期値が意図するところについては追って述べる。
【0026】
続いて、ステップSB2では、ポインタmeorgtar0およびポインタmeorgtar1をゼロリセットする。ポインタmeorgtar0とは、曲データ中の右手パートの音符データの内、ユーザの演奏入力で発生した演奏データに一致した音符データを指定するポインタである。同様に、ポインタmeorgtar1とは、曲データ中の左手パートの音符データの内、ユーザの演奏入力で発生した演奏データに一致した音符データを指定するポインタである。
【0027】
次いで、ステップSB3〜SB4では、曲データ中の右手パートの音符データの内、先頭ノート(先頭の音符)を指定するアドレス値をポインタmeorg[0]にストアし、曲データ中の左手パートの音符データの内、先頭ノート(先頭の音符)を指定するアドレス値をポインタmeorg[1]にストアする。そして、ステップSB5に進むと、ポインタmeorg[0]、meorg[1]が共に終端でないか否か、つまり曲の終わりに達するまで該当箇所を検索したかどうかを判断する。
【0028】
曲の終わりに達するまで該当箇所を検索していなければ、判断結果は「YES」になり、ステップSB6に進む。ステップSB6〜SB8では、ポインタmeorg[0]およびポインタmeorg[1]を曲の終わりに達するまで歩進させる毎に、ステップSB6の距離算出処理を繰り返し実行する。そして、曲の終わりに達するまで該当箇所を検索し終えると、上記ステップSB5の判断結果が「NO」となり、本処理を終える。
【0029】
なお、ステップSB6の距離算出処理では、後述するように、ユーザの演奏入力で発生した演奏データに対し、曲データ中の全ての音符データ(右手パート、左手パートおよび左右両パート)について公知のDPマッチングを施して類似度に相当する距離(右手パート時の距離、左手パート時の距離および左右両パート時の距離)を算出し、算出した距離の中で最も類似度の大きい最小距離となるパートの音符データを、演奏データに該当する箇所と特定する。
【0030】
(3)距離算出処理の動作
次に、図4を参照して距離算出処理の動作を説明する。上述した該当箇所特定処理のステップSB6(図3参照)を介して本処理が実行されると、CPU13は図4に図示するステップSC1に処理を進め、レジスタiHandに「0」をストアする。レジスタiHandの値は、曲データ中のパートを指定する。具体的には、「0」の場合に曲データ中の右手パートを指定し、、「1」の場合に曲データ中の左手パートを指定し、「2」の場合に曲データ中の左右両パートを指定する。以下、レジスタiHandの値をパート指定データiHandと称す。
【0031】
続いて、ステップSC2では、パート指定データiHandが「3」より小さいか否か、すなわち全てのパートについて距離算出し終えたかどうかを判断する。パート指定データiHandが「3」より小さく、全てのパートについて距離算出し終えていなければ、判断結果は「YES」となり、ステップSC3を介してDPマッチング処理を実行する。DPマッチング処理では、後述するように、ユーザの演奏入力で発生した演奏データに対し、曲データ中の全ての音符データ(右手パート、左手パートおよび左右両パート)について類似度に相当する距離doDistを取得する。
【0032】
次いで、ステップSC4では、上記ステップSC3のDPマッチング処理にて今回取得した距離doDistが、前回取得した距離doDistMin(初回時はステップSB1にてストアした所定値を用いる)の95%値より小さいか否かを判断する。つまり最小距離を更新したかどうかを判断する。最小距離を更新していなければ、判断結果は「NO」になり、後述のステップSC10に進む。
【0033】
一方、今回取得した距離doDistが、前回取得した距離doDistMinの95%値より小さく、最小距離を更新すると、上記ステップSC4の判断結果は「YES」になり、ステップSC5に進む。ステップSC5では、距離doDistを距離doDistMinに更新する。また、ステップSC5では、ポインタmeorg[0]の値をポインタmeorgtar0に、ポインタmeorg[1]の値をポインタmeorgtar1にセットする。
【0034】
そして、ステップSC6に進むと、パート指定データiHandが「0」であるか否か、つまり距離算出対象が右手パートであるかどうかを判断する。右手パートならば、判断結果は「YES」になり、ステップSC8に進み、ポインタmeorgtar1をゼロリセットし、続くステップSC10では、パート指定データiHandをインクリメントして歩進させた後、上述のステップSC2に処理を戻す。
【0035】
これに対し、パート指定データiHandが「0」でない場合、つまり距離算出対象が右手パートでなければ、上記ステップSC6の判断結果は「NO」になり、ステップSC7に進み、パート指定データiHandが「1」であるか否か、つまり距離算出対象が左手パートであるかどうかを判断する。左手パートならば、判断結果は「YES」になり、ステップSC9に進み、ポインタmeorgtar0をゼロリセットし、続くステップSC10では、パート指定データiHandをインクリメントして歩進させた後、上述のステップSC2に処理を戻す。
【0036】
一方、距離算出対象が左手パートでない場合、つまり左右両パートであると、上記ステップSC7の判断結果は「NO」になり、ステップSC10に進み、パート指定データiHandをインクリメントして歩進させた後、上述のステップSC2に処理を戻す。そして、歩進されたパート指定データiHandが「3」より大きくなると、上記ステップSC2の判断結果は「NO」になり、本処理を終える。
【0037】
(4)DPマッチング処理の動作
次に、図5〜図6を参照してDPマッチング処理の動作を説明する。上述した距離算出処理のステップSC3(図4参照)を介して本処理が実行されると、CPU13は図5に図示するステップSD1に処理を進め、音符データを指定するポインタIに初期値「0」をセットする。
【0038】
次いで、ステップSD2では、ポインタmeorg[0]の値をポインタme0org(I)に、ポインタmeorg[1]の値をポインタme1org(I)にセットする。なお、ポインタmeorg[0]は曲データ中の右手パートの先頭の音符データを指定するポインタ値であり、ポインタmeorg[1]は、曲データ中の左手パートの先頭の音符データを指定するポインタ値である。
【0039】
続いて、ステップSD3では、ポインタIの歩進に応じて、全ての音符データを指定し終えたか否かを判断する。全ての音符データを指定し終えていなければ、判断結果は「NO」になり、ステップSD4に進み、パート指定データiHandが「0」、つまりDPマッチングの対象が右手パートであるかどうかを判断する。右手パートならば、判断結果は「YES」になり、ステップSD5に進み、ポインタme0org(I)をポインタmeAorg(I)にセットした後、図6に図示するステップSD9(後述する)に処理を進める。
【0040】
DPマッチングの対象が右手パートでなければ、上記ステップSD4の判断結果は「NO」になり、ステップSD6に進む。ステップSD6では、パート指定データiHandが「1」、つまりDPマッチングの対象が左手パートであるかどうかを判断する。左手パートならば、判断結果は「YES」になり、ステップSD7に進み、ポインタme1org(I)をポインタmeAorg(I)にセットした後、図6に図示するステップSD9(後述する)に処理を進める。
【0041】
DPマッチングの対象が左右両パートであると、上記ステップSD6の判断結果は「NO」になり、ステップSD8に進む。ステップSD8では、ポインタme0org(I)で指定される音符データの発音時刻iTimeと、ポインタme1org(I)で指定される音符データの発音時刻iTimeとを比較し、発音時刻の早い音符データを指定する方のポインタをポインタmeAorg(I)にセットした後、図6に図示するステップSD9(後述する)に処理を進める。
【0042】
そして、図9に図示するステップSD9に進むと、演奏データを指定するポインタJに初期値「0」をセットする。次いで、ステップSD10では、ポインタJの歩進に応じて、全ての演奏データを指定し終えたか否かを判断する。全ての演奏データを指定し終えていなければ、判断結果は「NO」になり、ステップSD11に進む。
【0043】
ステップSD11では、ポインタmeAorg(I)で指定される音符データのピッチiPitと、ポインタmeBusr(J)で指定される演奏データのピッチとを比較する。両データのピッチが一致すると、ステップSD12に進み、レジスタdoMissMatch[I][J]に一致値「0.0」をセットし、一方、両データのピッチが不一致ならば、ステップSD13に進み、レジスタdoMissMatch[I][J]に不一致値「1.0」をセットする。
【0044】
次いで、ステップSD14では、ポインタJをインクリメントして歩進させた後、上述のステップSD10に処理を戻す。以後、ポインタJを歩進させながら、上述したステップSD10〜SD14を繰り返すことによって、ポインタmeAorg(I)で指定される音符データのピッチiPitに対し、全ての演奏データのピッチについて一致・不一致を判別し、その判別結果を一致・不一致マトリクスに相当する2次元のレジスタdoMissMatch[I][J]に保存する。ポインタJの歩進に応じて、全ての演奏データを指定し終えると、上記ステップSD10の判断結果が「YES」になり、ステップSD15に進み、ポインタIをインクリメントして歩進させた後、前述したステップSD3(図5参照)に処理を戻す。
【0045】
そして、ポインタIの歩進に応じて、全ての音符データを指定し終えると、前述したステップSD3の判断結果が「YES」になり、ステップSD16に進む。ステップSD16では、パート指定データiHandが「0」であるか否か、つまりDPマッチングの対象が右手パートであるかどうかを判断する。右手パートならば、判断結果は「YES」になり、ステップSD17に進み、ポインタme1orgをゼロリセットした後、ステップSD20に進む。
【0046】
一方、パート指定データiHandが「0」でない場合、つまりDPマッチングの対象が右手パートでなければ、上記ステップSD16の判断結果は「NO」になり、ステップSD18に進み、パート指定データiHandが「1」であるか否か、つまりDPマッチングが左手パートであるかどうかを判断する。左手パートならば、判断結果は「YES」になり、ステップSD19に進み、ポインタme0orgをゼロリセットした後、ステップSD20に進む。
【0047】
DPマッチングの対象が左右両パートの場合には、上記ステップSD16、SD18の各判断結果が何れも「NO」になり、ステップSD20に進む。そして、ステップSD20では、2次元のレジスタdoMissMatch[I][J]に保存された一致・不一致マトリクスに基づく公知のDPマッチングによって、ユーザの演奏入力で発生した演奏データに対し、曲データ中の全ての音符データ(右手パート、左手パートおよび左右両パート)について類似度に相当する距離doDistを取得して本処理を終える。
【0048】
(5)演奏判定処理の動作
次に、図7を参照して演奏判定処理の動作を説明する。前述したメインルーチンのステップSA5(図2参照)を介して本処理が実行されると、CPU13は図7に図示するステップSE1に処理を進め、音符データを指定するポインタIに初期値「0」をセットする。
【0049】
次いで、ステップSE2では、曲データ中の右手パートの音符データの内、ユーザの演奏入力で発生した演奏データに一致した音符データを指定するポインタmeorgtar0の値を、ポインタme0org(I)にセットすると共に、曲データ中の左手パートの音符データの内、ユーザの演奏入力で発生した演奏データに一致した音符データを指定するポインタmeorgtar1の値を、ポインタme1org(I)にセットする。
【0050】
続いて、ステップSE3では、ポインタIの歩進に応じて、全ての音符データを指定し終えたか否かを判断する。全ての音符データを指定し終えていなければ、判断結果は「NO」になり、ステップSE4に進む。ステップSE4では、ポインタme0org(I)で指定される音符データの発音時刻iTimeと、ポインタme1org(I)で指定される音符データの発音時刻iTimeとを比較し、発音時刻の早い音符データを指定する方のポインタをポインタmeAorg(I)にセットする。
【0051】
次いで、ステップSE5では、演奏データを指定するポインタJに初期値「0」をセットし、続くステップSE6では、ポインタJの歩進に応じて、全ての演奏データを指定し終えたか否かを判断する。全ての演奏データを指定し終えていなければ、判断結果は「NO」になり、次のステップSE7に進む。ステップSE7では、ポインタmeAorg(I)で指定される音符データのピッチiPitと、ポインタmeBusr(J)で指定される演奏データのピッチとを比較する。
【0052】
音符データのピッチと演奏データのピッチとが一致すると、ステップSE8に進み、ポインタmeAorg(I)で指定される音符データのクリアフラグiClearに「1」をセットし、正しく弾かれた音であること表す。そして、ステップSE9に進み、ポインタJをインクリメントして歩進させた後、上述のステップSE6に処理を戻す。以後、ポインタJを歩進させながら、上述したステップSE6〜SE9を繰り返す。
【0053】
そして、ポインタJの歩進に応じて、全ての演奏データを指定し終えると、上記ステップSE6の判断結果が「YES」になり、ステップSE10に進み、ポインタIをインクリメントして歩進させた後、上述のステップSE3に処理を戻す。ポインタIの歩進に応じて、全ての音符データを指定し終えると、このステップSD3の判断結果が「YES」になり、本処理を終える。
【0054】
(6)達成度算出処理の動作
次に、図8〜図9を参照して達成度算出処理の動作を説明する。前述したメインルーチンのステップSA6(図2参照)を介して本処理が実行されると、CPU13は図8に図示するステップSF1に処理を進め、レジスタmeに先頭ノート(曲頭の音)の音符データをストアする。続いて、ステップSF2では、曲データ中の全ての音符データを読み出し終えたかどうかを判断する。全ての音符データを読み出し終えていなければ、判断結果は「NO」になり、ステップSF3に進む。
【0055】
ステップSF3では、レジスタmeにストアした音符データに含まれる演奏技術タイプiTechが「0」以上であるか否か、つまり演奏技術を要する音符であるかどうかを判断する。演奏技術タイプiTechが負の値の場合には、演奏技術を要しない音符なので、判断結果は「NO」になり、ステップSF7に進み、レジスタmeに次の音符データをストアして上述のステップSF2に処理を戻す。
【0056】
一方、レジスタmeにストアした音符データに含まれる演奏技術タイプiTechが「0」以上であり、演奏技術の種別を表す場合には、上記ステップSF3の判断結果が「YES」になり、ステップSF4に進む。ステップSF4では、演奏技術タイプiTech別に発生回数を計数するカウンタiFTTypeCnt[iTech]をインクリメントして歩進させる。
【0057】
次いで、ステップSF5では、レジスタmeにストアした音符データに含まれるクリアフラグiClearが「1」、すなわち正しく弾かれた音であるか否かを判断する。正しく弾かれていない音(クリアフラグiClearが「0」)であれば、判断結果は「NO」になり、ステップSF7に進み、レジスタmeに次の音符データをストアして上述のステップSF2に処理を戻す。
【0058】
これに対し、正しく弾かれた音ならば、上記ステップSF5の判断結果は「YES」になり、ステップSF6に進む。ステップSF6では、演奏技術タイプiTech別にクリア回数を計数するカウンタiFTTypeClear[iTech]をインクリメントして歩進させる。そして、この後、ステップSF7に進み、レジスタmeに次の音符データをストアして上述のステップSF2に処理を戻す。
【0059】
以後、全ての音符データを読み出し終えるまで、上述したステップSF2〜SF7を繰り返すことによって、演奏技術タイプiTech別の発生回数がカウンタiFTTypeCnt[iTech]にて計数されると共に、演奏技術タイプiTech別のクリア回数がカウンタiFTTypeClear[iTech]にて計数される。
【0060】
そして、全ての音符データについて読み出し終えると、上記ステップSF2の判断結果が「YES」になり、図9に図示するステップSF8に進む。ステップSF8では、演奏技術の種別を指定するポインタIおよびレジスタacをゼロクリアする。なお、レジスタacには、後述するように演奏技量の向上具合を表す達成度がストアされる。以下、レジスタacの値を達成度acと称す。次いで、ステップSF9に進むと、全ての演奏技術の種別毎の達成度acを算出し終えたかどうかを判断する。算出し終えていなければ、判断結果は「NO」になり、ステップSF10に進む。
【0061】
ステップSF10〜SF11では、クリア回数(カウンタiFTTypeClear[I])を発生回数(カウンタiFTTypeCnt[I]で除して得られる正解率に、ポインタIに応じて難易度テーブルiFTCost[I]から読み出される難易度を乗算することによって、ポインタIで指定される演奏技術の種別における達成度acを算出し、それをポインタIの歩進に応じて累算する。
【0062】
こうして、全ての演奏技術の種別毎の達成度acを算出し終えると、上記ステップSF10では、各演奏技術の種別毎に算出した達成度acが累算され、この結果、ユーザが演奏入力した曲について難易度を加味した達成度acが得られる。また、全ての演奏技術の種別について達成度acを算出し終えると、上記ステップSF9の判断結果が「YES」になり、ステップSF12に進み、曲の難易度を加味した達成度acをレジスタachieveValue(以下、達成度achieveValueと称す)にストアして本処理を終える。
【0063】
(7)変数更新処理の動作
強化学習の一種であるQ学習では、『現在のルールに従って行動を行い、それにより得られた報酬から価値関数(ルール評価)を作成すると共に、現在の価値関数から最適なルールを作成する』ことが知られている。
【0064】
変数更新処理では、このようなQ学習理論を適用しており、具体的には現在のアドバイス(ルール)に従って演奏入力(行動)を行った結果得られる達成度(報酬)から価値関数テーブルvalueの状態変数を更新すると共に、更新した状態変数に応じて価値関数テーブルvalueから最も効果的なアドバイス(ルール)を取得する。
【0065】
以下、こうした変数更新処理の動作について図10を参照して説明する。前述したメインルーチンのステップSA7(図2参照)を介して本処理が実行されると、CPU13は図10に図示するステップSG1に処理を進め、達成度レベル数AchieveN(定数)に、達成率(達成度achieveValue/曲の難易度cost)を乗算し、Q学習における状態変数として扱われる達成度ランクachieveを算出する。
【0066】
続いて、ステップSG2では、現在の達成度achieveValueから前回の達成度prevAchieveValueを減算して達成度差分aを算出する。次いで、ステップSG3では、算出した達成度差分aが「0」より大きいか否か、すなわち達成度が上昇したかどうかを判断する。達成度が上昇した場合(a>0)には、判断結果が「YES」になり、ステップSG4に進み、レジスタchangeに「4」をセットした後、ステップSG8に進む。以下、レジスタchangeの値を達成度ランク変化と称す。この達成度ランク変化changeは、Q学習における状態変数として扱われる。
【0067】
一方、達成度差分aが「0」以下、つまり達成度が変わらないか或いは達成度が下降した場合には、上記ステップSG3の判断結果は「NO」になり、ステップSG5に進む。ステップSG5では、算出した達成度差分aが「0」か否か、つまり達成度が変わらないかどうかを判断する。達成度が変わらない場合(a=0)には、判断結果は「YES」になり、ステップSG6に進み、達成度ランク変化changeを「2」にセットした後、ステップSG8に進む。これに対し、達成度が下降した場合(a<0)には、上記ステップSG5の判断結果が「NO」になり、ステップSG7に進み、達成度ランク変化changeを「0」にセットした後、ステップSG8に進む。
【0068】
そして、ステップSG8では、達成度ランクachieveおよび達成度ランク変化changeで指定される状態において、アクション番号検索ポインタiを歩進させながら、価値関数テーブルvalue[achieve][change][i]から最も効果的(最大Qアクション価値maxQ)なアドバイス種別actionを探し出す最大Qアクション処理を実行する。
【0069】
次いで、ステップSG9では、達成度ランクachieveおよび達成度ランク変化changeで指定される現在の状態におけるアドバイス種別actionの現在価値afterQを、価値関数テーブルvalue[achieve][change][action]から取得する。続いて、ステップSG10では、達成度ランクprevAchieveおよび達成度ランク変化prevChangeで指定される前回状態における前アドバイス種別prevActionの前回価値vを、価値関数テーブルvalue[prevAchieve][prevChange][prevAction]から取得する。
【0070】
次に、ステップSG11では、次式(1)に従って現在価値afterQに応じて前回の状態および前回価値vを更新する。
value[prevAchieve][prevChange][prevAction]

v+alpha×(gamma×afterQ−v+reward)…(1)
なお、上記(1)式において、alphaは学習率、gammaは割引率、rewardは報酬(達成度achieveValue)である。
【0071】
そして、ステップSG12では、現在の達成度ランクachieve、達成度ランク変化change、アドバイス種別actionおよび達成度achieveValueを、それぞれ前回の達成度ランクprevAchieve、達成度ランク変化prevChange、アドバイス種別prevActionおよび達成度pevAchieveValueに更新して本処理を終える。
【0072】
(8)最大Qアクション処理の動作
次に、図11を参照して最大Qアクション処理の動作を説明する。上述した変数更新処理のステップSG8(図10参照)を介して本処理が実行されると、CPU13は図11に図示するステップSH1に処理を進める。ステップSH1〜SH3では、アクション番号検索ポインタi、最大Qアクション価値maxQおよびアクション種別indexをそれぞれゼロクリアする。
【0073】
続いて、ステップSH4では、全てのアクションについて検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「NO」になり、ステップSH5に進み、達成度ランクachieveおよび達成度ランク変化changeで指定される状態において、アクション番号検索ポインタiに応じたアドバイス価値qを、価値関数テーブルvalue[achieve][change][i]から取得する。
【0074】
ここで、図12を参照して、達成度ランクachieveおよび達成度ランク変化changeで指定される状態において、アクション番号検索ポインタiに応じたアドバイス価値qを価値関数テーブルvalueから取得する処理について説明する。例えば達成度ランクachieveが「1」、達成度ランク変化changeが「1」の場合、価値関数テーブルvalue[1][1][action]には、図12に図示する一例のように、複数のアクション(アドバイス)とそれらに対応付けられたアドバイス価値q〜qが登録されており、上記ステップSH5では、アクション番号検索ポインタiに応じたアドバイス価値qを価値関数テーブルvalue[achieve][change][i]から読み出すようになっている。
【0075】
そして、次のステップSH6では、価値関数テーブルvalue[achieve][change][i]から読み出したアドバイス価値qが、最大Qアクション価値maxQより大きいか否かを判断する。最初のパスでは、上記ステップSH2において最大Qアクション価値maxQはゼロクリアされている為、判断結果は「NO」になり、ステップSH7に進む。ステップSH7では、アクション番号検索ポインタiをアクション種別indexに保持し、続くステップSH8では、アクション番号検索ポインタiに応じて、価値関数テーブルvalue[achieve][change][i]から読み出したアドバイス価値qを最大Qアクション価値maxQとして保存しておく。
【0076】
次いで、ステップSH9では、アクション番号検索ポインタiをインクリメントして歩進させた後、上述のステップSH4に処理を戻す。以後、アクション番号検索ポインタiの歩進に応じて価値関数テーブルvalue[achieve][change][i]からアドバイス価値qを読み出し、読み出したアドバイス価値qが最大Qアクション価値maxQを超えると、上記ステップSH6の判断結果が「YES」になり、ステップSH10に進む。
【0077】
ステップSH10〜ステップSH13では、検索される最大Qアクション価値maxQが常に同じものとなる単調化を避ける為、ランダムに変化する要素を追加する。すなわち、ステップSH10では、パート指定データiHandが「1」であるか否か、つまり達成度achieveValueを算出する前段階の距離算出対象が左手パートであったかどうかを判断する。右手パートであったならば、判断結果は「NO」になり、上述したステップSH9に処理を進め、アクション番号検索ポインタiを歩進させた後、前述のステップSH4に処理を戻す。この場合、ランダムに変化する要素は追加されない。
【0078】
一方、左手パートの場合には、上記ステップSH10の判断結果が「YES」となり、ステップSH11に進み、「0」又は「1」の乱数を発生させてレジスタrndにストアする。次いで、ステップSH12では、レジスタrndの乱数値が「1」であるか否かを判断する。レジスタrndの乱数値が「0」ならば、判断結果は「NO」になり、上述したステップSH9に進むが、レジスタrndの乱数値が「1」であると、判断結果は「YES」になり、ステップSH13に進み、アドバイス種別indexに、アクション番号検索ポインタiをセットして上述のステップSH9に進む。これにより、ランダムに変化する要素が追加されることになる。
【0079】
こうして、ランダムに変化する要素を加味しつつ、アクション番号検索ポインタiの歩進に応じて、価値関数テーブルvalue[achieve][change][i]から全てのアクション(アドバイスの種別)を検索し終えると、上述したステップSH4の判断結果が「YES」になり、最大Qアクション価値maxQとなったアドバイス価値qを指定したアクション種別indexを、アドバイス種別actionにセットして本処理を終える。
【0080】
(9)アドバイス処理の動作
次に、図13を参照してアドバイス処理の動作を説明する。前述したメインルーチンのステップSA8(図2参照)を介して本処理が実行されると、CPU13は図13に図示するステップSJ1に進み、「0」又は「1」の乱数値を発生させてレジスタrndにストアし、続くステップSJ2では、レジスタrndの乱数値が「1」であるか否かを判断する。レジスタrndの乱数値が「0」であると、判断結果は「NO」になり、ステップSJ3に進み、アドバイス種別の数の範囲で乱数を発生させ、発生させた乱数値をアドバイス種別actionにセットした後、後述のステップSJ5に進む。
【0081】
一方、レジスタrndの乱数値が「1」であると、上記ステップSJ2の判断結果は「YES」になり、ステップSJ4に進む。ステップSJ4では、達成度ランクachieveおよび達成度ランク変化changeで指定される状態において、アクション番号検索ポインタiを歩進させながら、価値関数テーブルvalue[achieve][change][i]から最も効果的(最大Qアクション価値maxQ)なアドバイス種別actionを探し出す最大Qアクション処理(図11参照)を実行した後、ステップSJ5に進む。そして、ステップSJ5では、アドバイス種別actionで指定される種類のアドバイスを実行して本処理を終える。なお、ここで言うアドバイスの実行とは、例えばアドバイス種別actionで指定されるアドバイスの文言を画面表示したり音声合成したりしてユーザに報知することを指す。
【0082】
以上説明したように、第1実施形態では、ユーザの演奏入力に応じて発生する演奏データが、手本(模範演奏)となる曲データ中のどの音符データに該当し、かつその該当音符データを右手、左手および両手の何れで弾いたのかを特定し、特定された音符データのピッチiPitと演奏データのピッチとを比較して当該音符データの音が正しく弾かれたかどうかを判定し、正しく弾かれた音符データのクリアフラグiClearを「1」にセットする。
【0083】
そして、曲データ中の全ての音符データに含まれる演奏技術タイプiTechから演奏技術の種別毎の発生回数およびクリア回数(正しく弾かれた回数)を抽出し、抽出した発生回数およびクリア回数から得られる演奏技術の種別毎の正解率(クリア回数/発生回数)に、演奏技術の種別に応じた難易度を乗算して演奏技術の種別毎の達成度を算出し、算出された各達成度を累算することで曲の難易度に応じた達成度achieveValueを取得する。
【0084】
取得した達成度achieveValueに基づき価値関数テーブルvalueの状態変数(達成度ランクachieveおよび達成度ランク変化change)を更新し、更新した状態変数に応じて価値関数テーブルvalue[achieve][change][action]から探し出される最も効果的(最大Qアクション価値maxQ)なアドバイス種別actionにより指定される種類のアドバイスを演奏入力するユーザに与えるので、ユーザの状態に応じた最適なアドバイスを与えることが可能になる。
【0085】
なお、上述した第1実施形態では、ユーザの演奏入力に応じて発生する演奏データが、手本(模範演奏)となる曲データ中のどの音符データに該当し、かつその該当音符データを右手、左手および両手の何れで弾いたのかをDPマッチングを用いて特定するようにしたので、曲データ中のどの音から弾いたとしても、演奏データに該当する音符データを特定することが出来る。
【0086】
[第2実施形態]
次に、図14〜図16を参照して第2実施形態について説明する。第2実施形態の構成は、第1実施形態と共通するので、その説明については省略する。第2実施形態が第1実施形態と相違する点は、第1実施形態では達成度achieveValueを向上させるのに最も効果的(最大Qアクション価値maxQ)なアドバイスをユーザに与えるのに対し、第2実施形態では練習意欲を向上させ、練習時間を長くするのに最も効果的(最大Qアクション価値maxQ)なアドバイスをユーザに与えることにある。
【0087】
すなわち、図14に図示するように、第2実施形態では、現在の練習時間lenに基づき価値関数テーブルvalueの状態変数state1(前回練習時間lenPre)および状態変数state2(練習間隔time−timePre)を更新し、更新した状態変数に応じて価値関数テーブルvalue[state1][state2][action]から練習時間を長くする、つまり換言すれば練習意欲の向上を図るのに最も効果的(最大Qアクション価値maxQ)なアドバイスを探し出す。
【0088】
以下では、こうした第2実施形態による変数更新処理および最大Qアクション処理の各動作を説明する。なお、第2実施形態では、演奏入力処理(ステップSA3)において、演奏入力に応じた演奏データを保存する一方、演奏入力が行われる毎に開始時刻および終了時刻を記録するものとする。
【0089】
(1)第2実施形態による変数更新処理の動作
図15を参照して第2実施形態による変数更新処理の動作を説明する。前述した第1実施形態と同様、メインルーチンのステップSA7(図2参照)を介して本処理が実行されると、CPU13は図15に図示するステップSK1に処理を進め、前回の練習時間lenPreをレジスタstate1(以下、状態変数state1と称す)にストアし、続くステップSK2では、今回の開始時刻timeから前回の終了時刻timePreを減算して得た練習間隔をレジスタstate2(以下、状態変数state2と称す)にストアする。
【0090】
そして、ステップSK3では、状態変数state1および状態変数state2で指定される状態において、アクション番号検索ポインタiを歩進させながら、価値関数テーブルvalue[state1][state2][i]から最も効果的(最大Qアクション価値maxQ)なアドバイス種別actionを探し出す最大Qアクション処理を実行する。
【0091】
次いで、ステップSK4では、状態変数state1および状態変数state2で指定される現在の状態におけるアドバイス種別actionの現在価値afterQを、価値関数テーブルvalue[state1][state2][action]から取得する。続いて、ステップSK5では、前回の状態変数state1Prおよび前回の状態変数state2Prで指定される前回状態における前アドバイス種別prevActionの前回価値vを、価値関数テーブルvalue[state1Pr][state2Pr][prevAction]から取得する。
【0092】
次に、ステップSK6では、次式(2)に従って現在価値afterQに応じて前回の状態および前回価値vを更新する。
value[state1Pr][state2Pr][prevAction]

v+alpha×(gamma×afterQ−v+reward)…(2)
なお、上記(1)式において、alphaは学習率、gammaは割引率、rewardは報酬(練習時間の長さlen)である。
【0093】
そして、ステップSK7では、現在の状態変数state1、状態変数state2およびアドバイス種別actionを、それぞれ前回の状態変数state1Pr、状態変数state2Prおよびアドバイス種別prevActionに更新して本処理を終える。
【0094】
(2)第2実施形態による最大Qアクション処理の動作
次に、図16を参照して第2実施形態による最大Qアクション処理の動作を説明する。上述した変数更新処理のステップSK3(図15参照)を介して本処理が実行されると、CPU13は図16に図示するステップSL1に処理を進める。ステップSL1〜SL3では、アクション番号検索ポインタi、最大Qアクション価値maxQおよびアクション種別indexをそれぞれゼロクリアする。
【0095】
続いて、ステップSL4では、全てのアクションについて検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「NO」になり、ステップSL5に進み、状態変数state1および状態変数state2で指定される状態において、アクション番号検索ポインタiに応じたアドバイス価値qを、価値関数テーブルvalue[state1][state2][i]から取得する。
【0096】
そして、ステップSL6では、価値関数テーブルvaluevalue[state1][state2][i]から読み出したアドバイス価値qが、最大Qアクション価値maxQより大きいか否かを判断する。最初のパスでは、上記ステップSL2において最大Qアクション価値maxQはゼロクリアされている為、判断結果は「NO」になり、ステップSL7に進む。
【0097】
ステップSL7では、アクション番号検索ポインタiをアクション種別indexに保持し、続くステップSL8では、アクション番号検索ポインタiに応じて、価値関数テーブルvalue[state1][state2][i]から読み出したアドバイス価値qを最大Qアクション価値maxQとして保存しておく。
【0098】
次いで、ステップSL9では、アクション番号検索ポインタiをインクリメントして歩進させた後、上述のステップSL4に処理を戻す。以後、アクション番号検索ポインタiの歩進に応じて価値関数テーブルvalue[state1][state2][i]からアドバイス価値qを読み出し、読み出したアドバイス価値qが最大Qアクション価値maxQを超えると、上記ステップSL6の判断結果が「YES」になり、ステップSL10に進む。
【0099】
ステップSL10〜ステップSL13では、検索される最大Qアクション価値maxQが常に同じものとなる単調化を避ける為、ランダムに変化する要素を追加する。すなわち、ステップSL10では、パート指定データiHandが「1」であるか否か、つまり距離算出対象が左手パートであったかどうかを判断する。右手パートであったならば、判断結果は「NO」になり、上述したステップSL9に処理を進め、アクション番号検索ポインタiを歩進させた後、前述のステップSL4に処理を戻す。この場合、ランダムに変化する要素は追加されない。
【0100】
一方、左手パートの場合には、上記ステップSL10の判断結果が「YES」となり、ステップSL11に進み、「0」又は「1」の乱数を発生させてレジスタrndにストアする。次いで、ステップSL12では、レジスタrndの乱数値が「1」であるか否かを判断する。レジスタrndの乱数値が「0」ならば、判断結果は「NO」になり、上述したステップSL9に進むが、レジスタrndの乱数値が「1」であると、判断結果は「YES」になり、ステップSL13に進み、アドバイス種別indexに、アクション番号検索ポインタiをセットして上述のステップSH9に進む。これにより、ランダムに変化する要素が追加されることになる。
【0101】
こうして、ランダムに変化する要素を加味しつつ、アクション番号検索ポインタiの歩進に応じて、価値関数テーブルvalue[state1][state2][i]から全てのアクション(アドバイスの種別)を検索し終えると、上述したステップSL4の判断結果が「YES」になり、最大Qアクション価値maxQとなったアドバイス価値qを指定したアクション種別indexを、アドバイス種別actionにセットして本処理を終える。
【0102】
以上のように、第2実施形態によれば、現在の練習時間lenに基づき価値関数テーブルvalueの状態変数state1(前回練習時間lenPre)および状態変数state2(練習間隔time−timePre)を更新し、更新した状態変数に応じて価値関数テーブルvalue[state1][state2][action]から練習時間を長くする、つまり換言すれば練習意欲の向上を図るのに最も効果的(最大Qアクション価値maxQ)なアドバイス種別actionにより指定される種類のアドバイスを演奏入力するユーザに与えるので、ユーザの状態に応じた最適なアドバイスを与えることが可能になる。
【0103】
なお、上述の第2実施形態では、ユーザの練習意欲の向上を図り、練習時間を長くするのに効果的なアドバイスを与えるようにしたが、これに限らず、図17に図示する一例のように、ユーザの練習意欲の向上を図り、練習間隔time−timePreを短くして頻繁に練習させるのに効果的なアドバイスを与える態様とすることも可能であり、この態様でもユーザの状態に応じた最適なアドバイスを与えることが可能になる。
【0104】
以上、本発明の実施の一形態について説明したが、本発明はそれに限定されるものではなく、本願出願の特許請求の範囲に記載された発明とその均等の範囲に含まれる。以下では、本願出願当初の特許請求の範囲に記載された各発明について付記する。
【0105】
(付記)
[請求項1]
曲を構成する各音を表す複数の音符データを記憶する記憶手段と、
前記記憶手段に記憶される複数の音符データと、ユーザの演奏入力に応じて発生した演奏データとの比較に基づきユーザの演奏技量を評価して曲の難易度に応じた達成度を取得する達成度取得手段と、
前記達成度取得手段により取得された達成度の向上を図るのに最も効果的なアドバイスを発生してユーザに与えるアドバイス発生手段と
を具備することを特徴とする演奏教習装置。
【0106】
[請求項2]
前記アドバイス発生手段は、
前記達成度取得手段により取得された達成度から第1および第2の状態変数を生成する状態変数生成手段と、
前記状態変数生成手段により生成された第1および第2の状態変数に応じて、複数のアドバイス種別の中から最大価値のアドバイスを抽出するアドバイス抽出手段と
を備えることを特徴とする請求項1記載の演奏教習装置。
【0107】
[請求項3]
前記状態変数生成手段は、
前記達成度取得手段により取得された達成度から達成度ランクを取得する第1の状態変数取得手段と、
前記達成度取得手段により取得された現在の達成度と前回取得された前回の達成度との差分に応じた達成度ランク変化を取得する第2の状態変数取得手段とを備え、
前記アドバイス抽出手段は、
前記第1の状態変数取得手段が取得した達成度ランクと、前記第2の状態変数取得手段が取得した達成度ランク変化とで指定される状態において、価値関数テーブルに登録される複数のアドバイス種別の中から最大価値を有する種別のアドバイスを抽出することを特徴とする請求項2記載の演奏教習装置。
【0108】
[請求項4]
演奏入力が行われる毎に開始時刻および終了時刻を記録する時刻記録手段を更に備え、
前記状態変数生成手段は、
前記時刻記録手段により記録された前回の開始時刻および終了時刻から前回練習時間を取得する第1の状態変数取得手段と、
前記時刻記録手段により記録された今回の開始時刻および前回の終了時刻から練習間隔を取得する第2の状態変数取手段とを備え、
前記アドバイス抽出手段は、
前記第1の状態変数取得手段が取得した前回練習時間と、前記第2の状態変数取手段が取得した練習間隔とで指定される状態において、価値関数テーブルに登録される複数のアドバイス種別の中から練習時間を長くするのに最も効果的なアドバイスを抽出することを特徴とする請求項2記載の演奏教習装置。
【0109】
[請求項5]
前記アドバイス抽出手段は、
前記第1の状態変数取得手段が取得した前回練習時間と、前記第2の状態変数取手段が取得した練習間隔とで指定される状態において、価値関数テーブルに登録される複数のアドバイス種別の中から練習間隔を短くして頻繁に練習させるのに最も効果的なアドバイスを抽出することを特徴とする請求項4記載の演奏教習装置。
【0110】
[請求項6]
前記アドバイス発生手段は、
前記達成度取得手段により取得された達成度から第1および第2の状態変数を生成する状態変数生成手段と、
前記状態変数生成手段により生成された第1および第2の状態変数に応じて、Q学習理論に基づく価値関数テーブルから最大価値のアドバイスを抽出するアドバイス抽出手段と
を備えることを特徴とする請求項1記載の演奏教習装置。
【0111】
[請求項7]
演奏教習装置に搭載されるコンピュータに、
曲を構成する各音を表す複数の音符データと、ユーザの演奏入力に応じて発生した演奏データとの比較に基づきユーザの演奏技量を評価して曲の難易度に応じた達成度を取得する達成度取得ステップと、
前記達成度取得ステップにより取得された達成度の向上を図るのに最も効果的なアドバイスを発生してユーザに与えるアドバイス発生ステップと
を実行させることを特徴とするプログラム。
【符号の説明】
【0112】
10 鍵盤
11 スイッチ部
12 表示部
13 CPU
14 ROM
15 RAM
16 音源
17 サウンドシステム
100 演奏教習装置

【特許請求の範囲】
【請求項1】
曲を構成する各音を表す複数の音符データを記憶する記憶手段と、
前記記憶手段に記憶される複数の音符データと、ユーザの演奏入力に応じて発生した演奏データとの比較に基づきユーザの演奏技量を評価して曲の難易度に応じた達成度を取得する達成度取得手段と、
前記達成度取得手段により取得された達成度の向上を図るのに最も効果的なアドバイスを発生してユーザに与えるアドバイス発生手段と
を具備することを特徴とする演奏教習装置。
【請求項2】
前記アドバイス発生手段は、
前記達成度取得手段により取得された達成度から第1および第2の状態変数を生成する状態変数生成手段と、
前記状態変数生成手段により生成された第1および第2の状態変数に応じて、複数のアドバイス種別の中から最大価値のアドバイスを抽出するアドバイス抽出手段と
を備えることを特徴とする請求項1記載の演奏教習装置。
【請求項3】
前記状態変数生成手段は、
前記達成度取得手段により取得された達成度から達成度ランクを取得する第1の状態変数取得手段と、
前記達成度取得手段により取得された現在の達成度と前回取得された前回の達成度との差分に応じた達成度ランク変化を取得する第2の状態変数取得手段とを備え、
前記アドバイス抽出手段は、
前記第1の状態変数取得手段が取得した達成度ランクと、前記第2の状態変数取得手段が取得した達成度ランク変化とで指定される状態において、価値関数テーブルに登録される複数のアドバイス種別の中から最大価値を有する種別のアドバイスを抽出することを特徴とする請求項2記載の演奏教習装置。
【請求項4】
演奏入力が行われる毎に開始時刻および終了時刻を記録する時刻記録手段を更に備え、
前記状態変数生成手段は、
前記時刻記録手段により記録された前回の開始時刻および終了時刻から前回練習時間を取得する第1の状態変数取得手段と、
前記時刻記録手段により記録された今回の開始時刻および前回の終了時刻から練習間隔を取得する第2の状態変数取手段とを備え、
前記アドバイス抽出手段は、
前記第1の状態変数取得手段が取得した前回練習時間と、前記第2の状態変数取手段が取得した練習間隔とで指定される状態において、価値関数テーブルに登録される複数のアドバイス種別の中から練習時間を長くするのに最も効果的なアドバイスを抽出することを特徴とする請求項2記載の演奏教習装置。
【請求項5】
前記アドバイス抽出手段は、
前記第1の状態変数取得手段が取得した前回練習時間と、前記第2の状態変数取手段が取得した練習間隔とで指定される状態において、価値関数テーブルに登録される複数のアドバイス種別の中から練習間隔を短くして頻繁に練習させるのに最も効果的なアドバイスを抽出することを特徴とする請求項4記載の演奏教習装置。
【請求項6】
前記アドバイス発生手段は、
前記達成度取得手段により取得された達成度から第1および第2の状態変数を生成する状態変数生成手段と、
前記状態変数生成手段により生成された第1および第2の状態変数に応じて、Q学習理論に基づく価値関数テーブルから最大価値のアドバイスを抽出するアドバイス抽出手段と
を備えることを特徴とする請求項1記載の演奏教習装置。
【請求項7】
演奏教習装置に搭載されるコンピュータに、
曲を構成する各音を表す複数の音符データと、ユーザの演奏入力に応じて発生した演奏データとの比較に基づきユーザの演奏技量を評価して曲の難易度に応じた達成度を取得する達成度取得ステップと、
前記達成度取得ステップにより取得された達成度の向上を図るのに最も効果的なアドバイスを発生してユーザに与えるアドバイス発生ステップと
を実行させることを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate