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