(57)【要約】【課題】どのような演奏が為されても曲中の演奏箇所を特定して演奏評価する演奏評価装置を実現する。【解決手段】ＣＰＵ１０は、曲を構成する音符データ列の各音符ｉを「状態」とし、音符ｉから曲が始まる「初期確率」、音符ｉから次の音符ｊに遷移する「遷移確率」および音符ｉが正解となる「出力確率」を設定しておき、ユーザの演奏操作で生じた演奏データ列を生成する確率が最も大きい音符データ列（最適経路）を、隠れ状態系列のビタビ探索により取得し、最後に演奏された演奏データの音高ｉＯｂｓＰｉｔ［ｉＯｂｓＮ−１］と、最後の取得された最適経路で指定される音符データの音高ｉＰｉｔ［ｉＰａｔｈ［ｉＯｂｓＮ−１］］との比較に応じて演奏評価する。【選択図】図１
2014052421.tif 000002
【特許請求の範囲】
【請求項１】
曲中の各音符からそれぞれ曲が始まる初期確率、当該音符から次の音符に遷移する遷移確率および前記音符が正解となる出力確率を設定して隠れマルコフモデルを形成するモデル化手段と、
前記モデル化手段により形成された隠れマルコフモデルを用いて、ユーザの演奏音を生成する確率が最も大きい音符を表す最適経路を、隠れ状態系列のビタビ探索により取得する最適経路取得手段と、
前記最適経路取得手段が取得した最適経路で指定される音符の音高と、演奏された演奏音の音高との比較に応じて演奏の適否を判別する判別手段と
を具備することを特徴とする演奏評価装置。
【請求項２】
前記モデル化手段は、前記音符から前記次の音符に遷移する関係が「次の音」、「次の和音」、「同じ和音内」および「和音から次の音」の何れであるかを判別した結果に応じた遷移確率を設定することを特徴とする請求項１記載の演奏評価装置。
【請求項３】
前記モデル化手段は、前記音符から前記次の音符に遷移する関係が「同じ和音内」である場合に、和音構成音の演奏順序を任意に許容するように遷移確率値を設定することを特徴とする請求項１記載の演奏評価装置。
【請求項４】
前記判別手段は、前記最適経路取得手段が最後に取得した最適経路で指定される音符の音高と、最後に演奏された演奏音の音高とを比較し、両者が一致していればユーザの演奏は正しく弾かれたと判別し、不一致ならばユーザの演奏は正しく弾かれていないと判別することを特徴とする請求項１記載の演奏評価装置。
【請求項５】
コンピュータに、
曲中の各音符からそれぞれ曲が始まる初期確率、当該音符から次の音符に遷移する遷移確率および前記音符が正解となる出力確率を設定して隠れマルコフモデルを形成するモデル化ステップと、
前記モデル化ステップで形成された隠れマルコフモデルを用いて、ユーザの演奏音を生成する確率が最も大きい音符を表す最適経路を、隠れ状態系列のビタビ探索により取得する最適経路取得ステップと、
前記最適経路取得ステップにて取得した最適経路で指定される音符の音高と、演奏された演奏音の音高との比較に応じて演奏の適否を判別する判別ステップと
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザが曲の一部を弾いた場合に、その曲中の演奏箇所を特定し、特定した演奏箇所が正しく弾けているかを評価する演奏評価装置およびプログラムに関する。
【背景技術】
【０００２】
従来より、手本となる曲の音符データと、その曲の演奏操作に応じて発生する演奏データとを比較してユーザ（演奏者）の演奏技量を評価する装置が知られている。この種の技術として、例えば特許文献１には、演奏入力された演奏データと模範演奏に相当する出題データとの比較から正しく弾けた音符の数に応じた正解率を算出したり、算出した正解率からユーザの演奏技量を評価する技術が開示されている。
【０００３】
また、演奏操作に応じて生成された演奏データが、曲中のどの位置に該当するかを推定する楽譜追跡技術として、例えば特許文献２には、演奏情報と楽譜情報との対応関係を確率モデルで表し、和音を発音情報のクラスタ（音の集合）とし、最適性の原理を用いた探索によりマッチングを行って和音演奏が為された曲中での位置を推定する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２４２１３１号公報
【特許文献２】特開２００７−２４１１８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、上記特許文献１に開示の演奏評価技術に、上記特許文献２に開示の楽譜追跡技術を適用した場合、ユーザの演奏操作に応じて発生する演奏データと、手本となる曲の音符データとに基づきユーザが弾いた曲中の演奏箇所を楽譜追跡により特定し、その特定した演奏箇所の音符データと演奏データとを比較してユーザの演奏技量を評価することが可能になる。
【０００６】
しかしながら、上記特許文献２に開示の技術は、和音を発音情報のクラスタとして楽譜追跡する為、例えばユーザがポリフォニー（多声音楽）やアルペジオ（分散和音）等、和音か単音（単旋律）か区別できない音を演奏した場合にはうまく楽譜追跡することが困難になる。つまり、換言すれば、どのような演奏が為されても曲中の演奏箇所を特定して演奏評価することが出来ない、という問題が生じる。
【０００７】
そこで本発明は、このような事情に鑑みてなされたもので、どのような演奏が為されても曲中の演奏箇所を特定して演奏評価することができる演奏評価装置およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明の演奏評価装置は、曲中の各音符からそれぞれ曲が始まる初期確率、当該音符から次の音符に遷移する遷移確率および前記音符が正解となる出力確率を設定して隠れマルコフモデルを形成するモデル化手段と、前記モデル化手段により形成された隠れマルコフモデルを用いて、ユーザの演奏音を生成する確率が最も大きい音符を表す最適経路を、隠れ状態系列のビタビ探索により取得する最適経路取得手段と、前記最適経路取得手段が取得した最適経路で指定される音符の音高と、演奏された演奏音の音高との比較に応じて演奏の適否を判別する判別手段とを具備することを特徴とする。
【発明の効果】
【０００９】
本発明では、どのような演奏が為されても曲中の演奏箇所を特定して演奏評価することができる。
【図面の簡単な説明】
【００１０】
【図１】電子楽器１００の全体構成を示すブロック図である。
【図２】ＲＯＭ１１のデータ構成を示すメモリマップである。
【図３】ＲＡＭ１２の主要データ構成を示すメモリマップである。
【図４】メインルーチンの動作を示すフローチャートである。
【図５】音符データ読み込み処理の動作を示すフローチャートである。
【図６】遷移確率値セット処理の動作を示すフローチャートである。
【図７】ある音符から次の音符に遷移する経路Ｐ１〜Ｐ４を示す状態遷移図である。
【図８】出力確率値セット処理の動作を示すフローチャートである。
【図９】演奏評価処理の動作を示すフローチャートである。
【図１０】演奏評価処理の動作を示すフローチャートである。
【図１１】状態遷移テーブルの一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して本発明の実施形態について説明する。以下では、始めに本発明の概要について述べた後、実施の一形態の説明を進める。
【００１２】
Ａ．発明の概要
本発明では、ユーザが手本となる曲の一部を弾いた場合に、その曲中の演奏箇所を特定し、特定した演奏箇所が正しく弾けたかどうかを判定する。手本となる曲が音符データ列Ｑから構成され、その曲中の一部をユーザが弾き、これにより演奏データ列Ｘが発生する場合、その演奏データ列Ｘが音符データ列Ｑとなる確率Ｐ（Ｑ｜Ｘ）は、ベイズの定理により次式（１）で表現できる。
Ｐ（Ｑ｜Ｘ）＝Ｐ（Ｘ｜Ｑ）・Ｐ（Ｑ）／Ｐ（Ｘ）…（１）
【００１３】
上記（１）式において、Ｐ（Ｘ）は規格化乗数である為、曲中から演奏箇所を特定し、特定した演奏箇所が正しく弾けたかどうかを判定するには、「Ｐ（Ｘ｜Ｑ）・Ｐ（Ｑ）」、すなわち演奏データ列Ｘに対して最も尤もらしい音符データ列Ｑを推定することになる。本発明では、その推定手法として「隠れマルコフモデル（以下、ＨＭＭと称す）」を用いる。
【００１４】
ＨＭＭのモデル化の為に、「状態」、「初期確率」、「遷移確率」および「出力確率」の各パラメータを設定する。本発明では、曲を構成する音符データ列Ｑの各音符ｉを「状態」とし、音符ｉから曲が始まる確率を「初期確率」とする。音符ｉから音符ｊに遷移する確率を「遷移確率」とし、音符ｉが正解となる確率を「出力確率」とする。なお、音符ｉから音符ｊに遷移する「遷移確率」において、対象音符が和音を構成する場合には、和音構成音の演奏順序を任意に許容するように確率値をセットする。
【００１５】
ＨＭＭでは、上記パラメータに基づき演奏データ列Ｘを生成する確率が最も大きい音符データ列Ｑを、隠れ状態系列のビタビ探索により求めることによって、どのような演奏が為されても曲中の演奏箇所を特定して演奏評価することを可能にする。
【００１６】
Ｂ．構成
次に、図１を参照して実施の一形態の構成を説明する。図１は、実施の一形態による演奏評価装置を備えた電子楽器１００の全体構成を示すブロック図である。この図において、ＣＰＵ１０は、演奏操作に応じて鍵盤１３が発生する演奏情報に基づき音源１６に楽音発生を指示する通常の楽器機能の他に、演奏評価機能を具備する。
【００１７】
ここで言う演奏評価機能とは、曲の演奏練習に供せられるデータであって、手本（模範演奏）となる曲データ（後述する）の一部をユーザが弾いた場合に、その曲中の演奏箇所を特定し、特定した演奏箇所が正しく弾けたかどうかを判定する機能を指す。本発明の要旨に係わるＣＰＵ１０の演奏評価機能については追って詳述する。
【００１８】
ＲＯＭ１１は、図２に図示するように、プログラムエリアＰＥおよび曲データエリアＭＥおよびを備える。ＲＯＭ１１のプログラムエリアＰＥには、ＣＰＵ１０にロードされる各種の制御プログラムが記憶される。各種の制御プログラムとは、後述のメインルーチン、メインルーチンを構成する音符データ読み込み処理および演奏評価処理を含む。なお、音符データ読み込み処理は、遷移確率値セット処理および出力確率値セット処理を含む。
【００１９】
ＲＯＭ１１の曲データエリアＭＥには、手本（模範演奏）となる曲データが複数曲分記憶（ファクトリープリセット）される。曲データは、曲を構成する各音符を表す音符データ［０］〜［Ｎ］とノート数ｉＮ（音符データの数）から構成される。音符データは、音高ｉＰｉｔ、発音時刻ｉＴｉｍｅおよび音長ｉＧａｔｅから構成される。曲データエリアＭＥに記憶される複数の曲データの内、ユーザの曲指定操作により指定される曲データがＲＡＭ１２の音符データ読み込みエリアＮＥ（後述する）にストアされる。
【００２０】
ＲＡＭ１２は、図３に図示するように、演奏データエリアＵＥ、音符データ読み込みエリアＮＥおよびワークエリアＷＥを備える。ＲＡＭ１２の演奏データエリアＵＥには、ユーザの演奏操作に応じて時系列順に発生する演奏データ［０］〜［ｎ］、データ数ｉＯｂｓＮ（演奏データの数）およびデータ最大数ｉＯｂｓＳｔｎが一時記憶される。演奏データは、音高ｉＯｂｓＰｉｔ、発音時刻ｉＯｂｓＴｉｍｅおよび音長ｉＯｂｓＧａｔｅから構成される。
【００２１】
ＲＡＭ１２の音符データ読み込みエリアＮＥには、ユーザの曲指定操作に応じてＲＯＭ１１から読み出される音符データ［０］〜［Ｎ］およびノート数ｉＮ（音符データの数）が一時記憶される。ＲＡＭ１２のワークエリアＷＥには、後述するメインルーチンで用いられる各種変数を一時記憶するレジスタが設けられる。
【００２２】
レジスタｉＳｔａｔｅｓＮには状態数（ＨＭＭパラメータである「状態」の数）がストアされ、レジスタｉＯｕｔｐｕｔＮには出力数（観測パターンの種類の数）がストアされる。レジスタｄｏＳｔＰｒｏｂ［ｎ］には初期確率値がストアされ、レジスタｄｏＴｒＰｒｏｂ［ｎ］［ｍ］には遷移確率値がストアされる。レジスタｄｏＥｍＰｒｏｂ［ｎ］［ｍ］には出力確率値がストアされ、レジスタｄｏＲｓｔには初期確率定数がストアされる。レジスタｄｏＲｔｒには遷移確率定数がストアされ、レジスタｄｏＲｅｍには出力確率定数がストアされる。レジスタｉＰａｔｈ［ｎ］には最適経路がストアされる。
【００２３】
再び図１を参照して実施形態の構成について説明を進める。図１において、鍵盤１３は、演奏操作（押離鍵操作）に応じたキーオン／キーオフイベント、鍵番号およびベロシティ等を含む演奏情報を発生する。操作部１４は、装置パネルに配設される各種操作スイッチを有し、ユーザ操作されるスイッチ種に対応したスイッチイベントを発生する。操作部１４に配設される主要なスイッチとしては、例えばパワーオンオフする電源スイッチの他、電子楽器１００の動作モードを楽器機能モード又は演奏評価機能モードの何れかに切り替えるモード切り替えスイッチ、曲データを選択する曲選択スイッチや、動作終了を指示する終了スイッチ等がある。
【００２４】
表示部１５は、例えば演奏評価機能モード下であれば、ＣＰＵ１０から供給される表示制御信号に応じて、手本として選択した曲の曲データを楽譜表示したり、ユーザがその曲の一部分を弾いた場合の演奏評価結果を画面表示したりする。音源１６は、周知の波形メモリ読み出し方式によって構成され、鍵盤１３から供給される演奏情報に基づきＣＰＵ１０が生成する演奏データに応じた楽音データを発生する。サウンドシステム１７は、音源１６から出力される楽音データをアナログ形式の楽音信号に変換した後、その楽音信号から不要ノイズを除去する等のフィルタリングを施してからレベル増幅してスピーカより発音させる。
【００２５】
Ｃ．動作
次に、図４〜図１１を参照して上記構成による電子楽器１００の動作を説明する。以下では、電子楽器１００の動作モードが演奏評価機能モードである場合に、ＣＰＵ１０が実行するメインルーチン、該当メインルーチンからコールされる音符データ読み込み処理および演奏評価処理の各動作について述べる。なお、音符データ読み込み処理は、遷移確率値セット処理および出力確率値セット処理を含む。
【００２６】
（１）メインルーチンの動作
図４は、メインルーチンの動作を示すフローチャートである。メインルーチンは、モード切り替えスイッチにより電子楽器１００の動作モードを演奏評価機能モードに切り替えた場合に実行される。動作モードが演奏評価機能モードに切り替えられると、ＣＰＵ１０は、図４に図示するメインルーチンを実行してステップＳＡ１に処理を進め、楽器各部を初期化するイニシャライズを行う。イニシャライズが完了すると、ＣＰＵ１０はステップＳＡ２に進み、終了スイッチによる終了操作の有無を判断する。終了操作が為されなければ、判断結果は「ＮＯ」になり、ステップＳＡ３に進む。
【００２７】
ステップＳＡ３では、ユーザによる曲指定操作の有無を判断する。曲指定操作が為されると、判断結果は「ＹＥＳ」になり、ステップＳＡ４に進み、音符データ読み込み処理を実行した後、上記ステップＳＡ２に処理を戻す。
【００２８】
ステップＳＡ４の音符データ読み込み処理では、後述するように、曲指定操作により指定された曲データ（音符データ［０］〜［Ｎ］およびノート数ｉＮ）を、各音符毎の音高ｉＰｉｔ［０］〜［ｉＮ］、発音時刻ｉＴｉｍｅ［０］〜［ｉＮ］、音長ｉＧａｔｅ［０］〜［ｉＮ］およびノート数ｉＮに変換し、これらに基づきＨＭＭのモデル化を図るべく曲中の全ての音符について確率値（初期確率値、遷移確率値および出力確率値）をセットする。
【００２９】
一方、曲指定操作が為されなければ、上記ステップＳＡ３の判断結果は「ＮＯ」になり、ステップＳＡ５に進み、押鍵操作の有無、すなわち演奏操作が為されたかどうかを判断する。演奏操作が為されなければ、判断結果は「ＮＯ」になり、上記ステップＳＡ２に処理を戻すが、演奏操作が為されると、判断結果が「ＹＥＳ」になり、ステップＳＡ６に進む。ステップＳＡ６では、ユーザの演奏操作に応じて発生する演奏データをＲＡＭ１２の演奏データエリアＵＥ（図３参照）に取り込む。
【００３０】
この後、ステップＳＡ６の演奏評価処理を実行する。演奏評価処理では、後述するように、「出力ｉ」、「次の状態ｊ」および「現在状態ｋ」の３重ループで表現される状態遷移テーブルから最適経路、すなわち演奏データ列Ｘを生成する確率が最も大きい音符データ列Ｑを隠れ状態系列のビタビ探索により求め、最後に演奏された演奏データの音高ｉＯｂｓＰｉｔ［ｉＯｂｓＮ−１］と、最後の探索された最適経路で指定される音符データの音高ｉＰｉｔ［ｉＰａｔｈ［ｉＯｂｓＮ−１］］とを比較し、両者が一致していればユーザの演奏は正しく弾かれたと判断し、不一致ならばユーザの演奏は正しく弾かれていないと判断する。そして、演奏評価処理が完了すると、上記ステップＳＡ２に処理を戻す。
【００３１】
以後、終了操作が為されるまでの間、曲指定操作が行われたならば、音符データ読み込み処理（ステップＳＡ４）を実行し、演奏操作が行われたならば、ユーザの演奏操作に応じて発生する演奏データを取り込んで演奏評価処理（ステップＳＡ６〜ＳＡ７）を実行する。そして、終了操作が為されると、上記ステップＳＡ２の判断結果が「ＹＥＳ」になり、本処理を終える。
【００３２】
（２）音符データ読み込み処理の動作
次に、図５を参照して音符データ読み込み処理の動作を説明する。上述したメインルーチンのステップＳＡ４（図４参照）を介して本処理が実行されると、ＣＰＵ１０は図５に図示するステップＳＢ１に処理を進め、音符データ読み込みを実行する。
【００３３】
ステップＳＢ１の音符データ読み込みでは、曲指定操作により指定された曲データ（音符データ［０］〜［Ｎ］およびノート数ｉＮ）をＲＯＭ１１から読み出した後、ＲＡＭ１２の音符データ読み込みエリアＮＥ（図３参照）において、ノート数ｉＮをレジスタｉＮにストアし、音符データ［０］〜［Ｎ］の各音高ｉＰｉｔをレジスタｉＰｉｔ［０］〜［ｉＮ］にストアする。さらに、音符データ［０］〜［Ｎ］の各発音時刻ｉＴｉｍｅをレジスタｉＴｉｍｅ［０］〜［ｉＮ］にストアし、音符データ［０］〜［Ｎ］の各音長ｉＧａｔｅをレジスタｉＧａｔｅ［０］〜［ｉＮ］にストアする。加えて、ワークエリアＷＥのレジスタｉＳｔａｔｅｓＮに、ノート数ｉＮを状態数としてストアする。
【００３４】
次いで、ステップＳＢ２では、曲中の音符を指定するポインタｉをゼロリセットし、続くステップＳＢ３では、現在のポインタｉの値がレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）より小さいか否か、すなわち曲中の全ての音符について確率値（初期確率値、遷移確率値および出力確率値）をセットし終えたかどうかを判断する。
【００３５】
全ての音符について確率値をセットし終えていなければ、上記ステップＳＢ３の判断結果は「ＹＥＳ」になり、ステップＳＢ４に進む。ステップＳＢ４では、予めレジスタｄｏＲｓｔに記憶された初期確率定数を読み出し、ポインタｉで指定されるレジスタｄｏＳｔＰｒｏｂ［ｉ］にストアする。つまり、ポインタｉで指定される音符ｉの初期確率値をセットする。
【００３６】
続いて、ステップＳＢ５では、遷移確率値セット処理を実行する。遷移確率値セット処理では、後述するように、レジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）を超えるまでポインタｊを歩進させながら、現在のポインタｉで指定される音符ｉと、ポインタｊで指定される音符ｊとの関係が「次の音」、「次の和音」、「同じ和音内」および「和音から次の音」の各場合に、ポインタｉ，ｊで指定されるレジスタｄｏＴｒＰｒｏｂ［ｉ］［ｊ］に遷移確率値ｄｏＲｔｒをセットする。
【００３７】
次に、ステップＳＢ６では、出力確率値セット処理を実行する。出力確率値セット処理では、後述するように、現在のポインタｉで指定される音符ｉの音高ｉＰｉｔ［ｉ］の値に一致するまでポインタｊの値を歩進させ、歩進させたポインタｊの値が音高ｉＰｉｔ［ｉ］の値に一致すると、現在のポインタｉ，ｊで指定されるレジスタｄｏＥｍＰｒｏｂ［ｉ］［ｊ］に出力確率値ｄｏＲｅｍをセットする。
【００３８】
こうして、現在のポインタｉで指定される音符ｉについて初期確率値、遷移確率値および出力確率値をそれぞれセットし終えると、ステップＳＢ７に進み、ポインタｉをインクリメントして歩進させた後、上述のステップＳＢ３に処理を戻す。以後、曲中の全ての音符について確率値（初期確率値、遷移確率値および出力確率値）をセットし終えるまで上述のステップＳＢ３〜ＳＢ７を繰り返し実行し、歩進させたポインタｉがレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）を超えると、上記ステップＳＢ３の判断結果が「ＮＯ」になり、本処理を終える。
【００３９】
このように、音符データ読み込み処理では、曲指定操作により指定された曲データ（音符データ［０］〜［Ｎ］およびノート数ｉＮ）を、各音符毎の音高ｉＰｉｔ［０］〜［ｉＮ］、発音時刻ｉＴｉｍｅ［０］〜［ｉＮ］、音長ｉＧａｔｅ［０］〜［ｉＮ］およびノート数ｉＮに変換し、これらに基づきＨＭＭのモデル化を図るべく曲中の全ての音符について確率値（初期確率値、遷移確率値および出力確率値）をセットする。
【００４０】
（３）遷移確率値セット処理の動作
次に、図６〜図７を参照して遷移確率値セット処理の動作を説明する。上述した音符データ読み込み処理のステップＳＢ５（図５参照）を介して本処理が実行されると、ＣＰＵ１０は図６に図示するステップＳＣ１に処理を進め、レジスタｄｏＴｒＰｒｏｂ［ｉ］［ｎ］を初期化する。そして、ステップＳＣ２では、曲中の音符を指定するポインタｊをゼロリセットし、続くステップＳＣ３では、現在のポインタｊの値がレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）より小さいか否か、すなわち遷移確率値をセットし終えたかどうかを判断する。
【００４１】
なお、ここで言う遷移確率値とは、ポインタｉで指定された音符ｉからポインタｊで指定される音符ｊへ遷移する確率を指す。具体的には、図７に図示する状態遷移図における経路Ｐ１〜Ｐ４（後述する）を取る確率である。
【００４２】
全ての音符について遷移確率値をセットし終えていなければ、上記ステップＳＣ３の判断結果は「ＹＥＳ」になり、ステップＳＣ４に進む。ステップＳＣ４では、現在のポインタｉで指定されている音符ｉの次の音符ｉ＋１が、現在のポインタｊで指定されている音符ｊ、つまり「次の音」であるかどうかを判断する。「次の音」は、図７に図示する状態遷移図における経路Ｐ１（ｉ→ｉ＋１，ｉ＋１→ｉ＋２，ｉ＋２→ｉ＋３，ｉ＋３→ｉ＋４）で示される。
【００４３】
現在のポインタｊで指定される音符ｊが、現在のポインタｉで指定されている音符ｉの次の音符ならば、上記ステップＳＣ４の判断結果は「ＹＥＳ」になり、ステップＳＣ５に進み、レジスタｄｏＲｔｒの遷移確率値を、現在のポインタｉ，ｊで指定されるレジスタｄｏＴｒＰｒｏｂ［ｉ］［ｊ］にストアする。この後、ステップＳＣ１２に進み、ポインタｊをインクリメントして歩進させた後、上記ステップＳＣ３に処理を戻す。
【００４４】
一方、現在のポインタｉ，ｊの関係が「ｉ＋１＝ｊ」でなければ、上記ステップＳＣ４の判断結果は「ＮＯ」になり、ステップＳＣ６に処理を進める。ステップＳＣ６では、現在のポインタｉで指定される音符ｉの次の音符の発音時刻ｉＴｉｍｅ［ｉ＋１］が、現在のポインタｊで指定される発音時刻ｉＴｉｍｅ［ｊ］に一致するか否か、つまり「次の和音」であるかどうかを判断する。「次の和音」は、図７に図示する状態遷移図における経路Ｐ２（ｉ→ｉ＋２，ｉ→ｉ＋３）で示される。
【００４５】
現在のポインタｉで指定される音符ｉの次の音符の発音時刻ｉＴｉｍｅ［ｉ＋１］が、現在のポインタｊで指定される発音時刻ｉＴｉｍｅ［ｊ］に一致すると、上記ステップＳＣ６の判断結果は「ＹＥＳ」になり、ステップＳＣ７に進み、レジスタｄｏＲｔｒの遷移確率値を、現在のポインタｉ，ｊで指定されるレジスタｄｏＴｒＰｒｏｂ［ｉ］［ｊ］にストアする。この後、ステップＳＣ１２に進み、ポインタｊをインクリメントして歩進させた後、上記ステップＳＣ３に処理を戻す。
【００４６】
これに対し、現在のポインタｉで指定される音符ｉの次の音符の発音時刻ｉＴｉｍｅ［ｉ＋１］が、現在のポインタｊで指定される発音時刻ｉＴｉｍｅ［ｊ］に一致しなければ、上記ステップＳＣ６の判断結果は「ＮＯ」になり、ステップＳＣ８に処理を進める。ステップＳＣ８では、現在のポインタｉで指定される音符の発音時刻ｉＴｉｍｅ［ｉ］が、現在のポインタｊで指定される発音時刻ｉＴｉｍｅ［ｊ］に一致するか否か、つまり「同じ和音内」であるかどうかを判断する。「同じ和音内」は、図７に図示する状態遷移図における経路Ｐ３（ｉ＋１→ｉ＋３，ｉ＋３→ｉ＋１，ｉ＋３→ｉ＋２，ｉ＋２→ｉ＋１）で示される。
【００４７】
現在のポインタｉで指定される音符の発音時刻ｉＴｉｍｅ［ｉ］が、現在のポインタｊで指定される発音時刻ｉＴｉｍｅ［ｊ］に一致すると、上記ステップＳＣ８の判断結果は「ＹＥＳ」になり、ステップＳＣ９に進み、レジスタｄｏＲｔｒの遷移確率値を、現在のポインタｉ，ｊで指定されるレジスタｄｏＴｒＰｒｏｂ［ｉ］［ｊ］にストアする。この後、ステップＳＣ１２に進み、ポインタｊをインクリメントして歩進させた後、上記ステップＳＣ３に処理を戻す。
【００４８】
一方、現在のポインタｉで指定される音符の発音時刻ｉＴｉｍｅ［ｉ］が、現在のポインタｊで指定される発音時刻ｉＴｉｍｅ［ｊ］に一致しなければ、上記ステップＳＣ８の判断結果は「ＮＯ」になり、ステップＳＣ１０に処理を進める。ステップＳＣ１０では、現在のポインタｉで指定される音符の発音時刻ｉＴｉｍｅ［ｉ］が現在のポインタｊで指定される発音時刻ｉＴｉｍｅ［ｊ］に一致し、かつその発音時刻ｉＴｉｍｅ［ｊ］が次の音符の発音時刻ｉＴｉｍｅ［ｊ＋１］より早いか否か、つまり「和音から次の音」に移る場合であるかどうかを判断する。「和音から次の音」は、図７に図示する状態遷移図における経路Ｐ４（ｉ＋１→ｉ＋４，ｉ＋２→ｉ＋４）で示される。
【００４９】
「和音から次の音」に移る場合であると、上記ステップＳＣ１０の判断結果は「ＹＥＳ」になり、ステップＳＣ１１に進み、レジスタｄｏＲｔｒの遷移確率値を、現在のポインタｉ，ｊで指定されるレジスタｄｏＴｒＰｒｏｂ［ｉ］［ｊ］にストアした後、ステップＳＣ１２に進み、ポインタｊをインクリメントして歩進させた後、上記ステップＳＣ３に処理を戻す。「和音から次の音」に移る場合でなければ、上記ステップＳＣ１０の判断結果は「ＮＯ」になり、ステップＳＣ１２に進み、ポインタｊをインクリメントして歩進させた後、上記ステップＳＣ３に処理を戻す。
【００５０】
以後、歩進されたポインタｊがレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）を超えるまでの間、上記ステップＳＣ３〜ＳＣ１２を繰り返し、現在のポインタｉで指定される音符ｉと、現在のポインタｊで指定される音符ｊとの関係が「次の音」、「次の和音」、「同じ和音内」および「和音から次の音」の各場合に、ポインタｉ，ｊで指定されるレジスタｄｏＴｒＰｒｏｂ［ｉ］［ｊ］に遷移確率値ｄｏＲｔｒをセットし、遷移確率値をセットし終えると、ステップＳＣ３の判断結果が「ＮＯ」になり、本処理を終える。
【００５１】
（４）出力確率値セット処理の動作
次に、図８を参照して出力確率値セット処理の動作を説明する。前述した音符データ読み込み処理のステップＳＢ６（図５参照）を介して本処理が実行されると、ＣＰＵ１０は図８に図示するステップＳＤ１に処理を進め、曲中の音符を指定するポインタｊをゼロリセットし、続くステップＳＤ２では、現在のポインタｊの値がレジスタｉＯｕｔｐｕｔＮの出力数より小さいか否か、すなわち出力確率値をセットし終えたかどうかを判断する。
【００５２】
出力確率値をセットし終えていなければ、上記ステップＳＤ２の判断結果は「ＹＥＳ」になり、ステップＳＤ３に進む。ステップＳＤ３では、現在のポインタｉで指定される音符ｉの音高ｉＰｉｔ［ｉ］の値（ＭＩＤＩノートナンバ）が、ポインタｊの値と一致するか否かを判断する。音高ｉＰｉｔ［ｉ］の値がポインタｊの値と一致しなければ、判断結果は「ＮＯ」になり、ステップＳＤ５に進み、ポインタｊをインクリメントして歩進させた後、上述のステップＳＤ２に処理を戻す。
【００５３】
そして、現在のポインタｉで指定される音符ｉの音高ｉＰｉｔ［ｉ］の値に一致するまでポインタｊの値を歩進させ、歩進させたポインタｊの値が音高ｉＰｉｔ［ｉ］の値に一致すると、上記ステップＳＤ３の判断結果が「ＹＥＳ」になり、ステップＳＤ４に進む。ステップＳＤ４では、現在のポインタｉ，ｊで指定されるレジスタｄｏＥｍＰｒｏｂ［ｉ］［ｊ］に、レジスタｄｏＲｅｍの出力確率値をセットする。この後、ステップＳＤ５に進み、ポインタｊをインクリメントして歩進させ、歩進させたポインタｊの値がレジスタｉＯｕｔｐｕｔＮの出力数を超えると、上述したステップＳＤ２の判断結果が「ＮＯ」になり、本処理を終える。
【００５４】
このように、出力確率値セット処理では、現在のポインタｉで指定される音符ｉの音高ｉＰｉｔ［ｉ］の値に一致するまでポインタｊの値を歩進させ、歩進させたポインタｊの値が音高ｉＰｉｔ［ｉ］の値に一致すると、現在のポインタｉ，ｊで指定されるレジスタｄｏＥｍＰｒｏｂ［ｉ］［ｊ］に出力確率値ｄｏＲｅｍをセットする。
【００５５】
（５）演奏評価処理の動作
次に、図９〜図１１を参照して演奏評価処理の動作を説明する。前述したメインルーチンのステップＳＡ６（図４参照）を介して本処理が実行されると、ＣＰＵ１０は図９に図示するステップＳＥ１に処理を進め、出力数を指定するポインタｉをゼロリセットし、続くステップＳＥ２では、現在のポインタｉの値がレジスタｉＯｕｔｐｕｔＮの出力数より小さいか否かを判断する。
【００５６】
現在のポインタｉの値がレジスタｉＯｕｔｐｕｔＮの出力数より小さければ、上記ステップＳＥ２の判断結果は「ＹＥＳ」になり、ステップＳＥ３に進み、次の状態を指定するポインタｊをゼロリセットする。続いて、ステップＳＥ４では、現在のポインタｊの値がレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）より小さいか否かを判断する。
【００５７】
現在のポインタｊの値がレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）より小さければ、上記ステップＳＥ４の判断結果は「ＹＥＳ」になり、ステップＳＥ５に進み、現在の状態を指定するポインタｋをゼロリセットした後、図１０に図示するステップＳＥ６に進む。ステップＳＥ６では、現在のポインタｋの値がレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）より小さいか否かを判断する。
【００５８】
現在のポインタｋの値がレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）より小さければ、上記ステップＳＥ６の判断結果は「ＹＥＳ」になり、ステップＳＥ７に進む。ステップＳＥ７では、現在のポインタｋ，ｉで指定されるレジスタｄｏＥｍＰｒｏｂ［ｋ］［ｉ］の出力確率に、現在のポインタｋ，ｊで指定されるレジスタｄｏＴｒＰｒｏｂ［ｋ］［ｊ］の遷移確率を乗算して乗算値ｐを取得する。
【００５９】
次いで、ステップＳＥ８では、現在のポインタｋで指定される状態までのビタビ経路確率ｖｐｒｏｂ［ｋ］に、乗算値ｐを乗算して当該ビタビ経路確率ｖｐｒｏｂ［ｋ］を更新する。続いて、ステップＳＥ９では、更新されたビタビ経路確率ｖｐｒｏｂ［ｋ］が最大値ｍａｘを超えているか否かを判断する。更新されたビタビ経路確率ｖｐｒｏｂ［ｋ］が最大値ｍａｘを超えていなければ、上記ステップＳＥ９の判断結果は「ＮＯ」になり、ステップＳＥ１１に進み、ポインタｋをインクリメントして歩進させた後、上述のステップＳＥ６に処理を戻す。
【００６０】
一方、更新されたビタビ経路確率ｖｐｒｏｂ［ｋ］が最大値ｍａｘより大きければ、上記ステップＳＥ９の判断結果は「ＹＥＳ」となり、ステップＳＥ１０に進む。ステップＳＥ１０では、上記ステップＳＥ８で乗算値ｐの乗算により更新されたビタビ経路確率ｖｐｒｏｂ［ｋ］を新たな最大値ｍａｘとして更新保存すると共に、最適経路をレジスタｉＰａｔｈ［  ］に保存する。この後、ステップＳＥ１１に進み、ポインタｋを歩進させて上述のステップＳＥ６に処理を戻す。
【００６１】
ここで、図１１を参照して上記ステップＳＥ６〜ＳＥ１０の具体的な動作を説明する。演奏評価処理では、ポインタｉで指定される「出力ｉ」、ポインタｊで指定される「次の状態ｊ」およびポインタｋで指定される「現在状態ｋ」の３重ループで最適経路を探し出す。３重ループは、図１１に図示する状態遷移テーブルとして表現出来る。
【００６２】
図１１に図示する状態遷移テーブルにおいて、例えばレジスタｄｏＥｍＰｒｏｂ［１（現在状態ｋ）］［１（出力ｉ）］の出力確率に、レジスタｄｏＴｒＰｒｏｂ［１（現在状態ｋ）］［２（次の状態ｊ）］の遷移確率を乗算して得た乗算値ｐを現在状態ｋまでのビタビ経路確率ｖｐｒｏｂ［ｋ］に乗算し、これにより更新されたビタビ経路確率ｖｐｒｏｂ［ｋ］が最大値ｍａｘを超えたとする。そうすると、経路「０，１，２」が最適経路としてレジスタｉＰａｔｈ［  ］に保存される。なお、最適経路を表す値は、音符データのインデクス（ノートの順番）に相当する。レジスタｉＰａｔｈ［  ］に保存される最適経路の数は、演奏データの数ｉＯｂｓＮと同じになる。
【００６３】
以後、歩進されたポインタｋがレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）を超えるまで上記ステップＳＥ６〜ＳＥ１１を繰り返す。そして、歩進されたポインタｋがレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）を超えると、上記ステップＳＥ６の判断結果が「ＮＯ」になり、ステップＳＥ１２に進み、「次の状態ｊ」についての、最大値ｍａｘおよび最適経路を取得して保存する。次いで、ステップＳＥ１３では、ポインタｊをインクリメントして歩進させた後、上述したステップＳＥ４（図９参照）に処理を戻す。
【００６４】
以後、歩進されたポインタｊがレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）を超えるまで上述したステップＳＥ４〜ＳＥ１３を繰り返す。そして、歩進されたポインタｊがレジスタｉＳｔａｔｅｓＮの状態数（ノート数ｉＮ）を超えると、上記ステップＳＥ４の判断結果が「ＮＯ」になり、ステップＳＥ１４に進み、「次の状態ｊ」についての、最大値ｍａｘおよび最適経路をコピーし、続くステップＳＥ１５では、ポインタｉをインクリメントして歩進させた後、上述したステップＳＥ２に処理を戻す。
【００６５】
以後、歩進されたポインタｉがレジスタｉＯｕｔｐｕｔＮの出力数を超えるまで上述したステップＳＥ３〜ＳＥ１５を繰り返す。そして、歩進されたポインタｉがレジスタｉＯｕｔｐｕｔＮの出力数を超えると、上記ステップＳＥ２の判断結果が「ＮＯ」になり、ステップＳＥ１６に進み、更新されたビタビ経路確率ｖｐｒｏｂ［ｋ］を新たな最大値ｍａｘとして更新保存すると共に、最適経路をレジスタｉＰａｔｈ［  ］に保存する。
【００６６】
次いで、ステップＳＥ１７では、最後に演奏された演奏データの音高ｉＯｂｓＰｉｔ［ｉＯｂｓＮ−１］と、最後の探索された最適経路で指定される音符データの音高ｉＰｉｔ［ｉＰａｔｈ［ｉＯｂｓＮ−１］］とを比較し、両者が一致していればユーザの演奏は正しく弾かれたと判断し、不一致ならばユーザの演奏は正しく弾かれていないと判断する演奏評価を行って本処理を終える。
【００６７】
このように、演奏評価処理では、「出力ｉ」、「次の状態ｊ」および「現在状態ｋ」の３重ループで表現される状態遷移テーブルから最適経路、すなわち演奏データ列Ｘを生成する確率が最も大きい音符データ列Ｑを隠れ状態系列のビタビ探索により取得する。そして、最後に演奏された演奏データの音高ｉＯｂｓＰｉｔ［ｉＯｂｓＮ−１］と、最後に取得された最適経路で指定される音符データの音高ｉＰｉｔ［ｉＰａｔｈ［ｉＯｂｓＮ−１］］とを比較し、両者が一致していればユーザの演奏は正しく弾かれたと判断し、不一致ならばユーザの演奏は正しく弾かれていないと判断する。
【００６８】
以上説明したように、本実施形態では、ＨＭＭのモデル化を図るべく、曲を構成する音符データ列の各音符ｉを「状態」とし、音符ｉから曲が始まる「初期確率」、音符ｉから次の音符ｊに遷移する「遷移確率」および音符ｉが正解となる「出力確率」を設定しておき、ユーザの演奏操作で生じた演奏データ列を生成する確率が最も大きい音符データ列（最適経路）を、隠れ状態系列のビタビ探索により取得し、最後に演奏された演奏データの音高ｉＯｂｓＰｉｔ［ｉＯｂｓＮ−１］と、最後の取得された最適経路で指定される音符データの音高ｉＰｉｔ［ｉＰａｔｈ［ｉＯｂｓＮ−１］］との比較に応じて演奏評価するので、どのような演奏が為されても曲中の演奏箇所を特定して演奏評価することが可能になる。
【００６９】
以上、本発明の実施の一形態について説明したが、本発明はそれに限定されるものではなく、本願出願の特許請求の範囲に記載された発明とその均等の範囲に含まれる。以下では、本願出願当初の特許請求の範囲に記載された各発明について付記する。
【００７０】
（付記）
［請求項１］
曲中の各音符からそれぞれ曲が始まる初期確率、当該音符から次の音符に遷移する遷移確率および前記音符が正解となる出力確率を設定して隠れマルコフモデルを形成するモデル化手段と、
前記モデル化手段により形成された隠れマルコフモデルを用いて、ユーザの演奏音を生成する確率が最も大きい音符を表す最適経路を、隠れ状態系列のビタビ探索により取得する最適経路取得手段と、
前記最適経路取得手段が取得した最適経路で指定される音符の音高と、演奏された演奏音の音高との比較に応じて演奏の適否を判別する判別手段と
を具備することを特徴とする演奏評価装置。
【００７１】
［請求項２］
前記モデル化手段は、前記音符から次の前記音符に遷移する関係が「次の音」、「次の和音」、「同じ和音内」および「和音から次の音」の何れであるかを判別した結果に応じた遷移確率を設定することを特徴とする請求項１記載の演奏評価装置。
【００７２】
［請求項３］
前記モデル化手段は、前記音符から次の前記音符に遷移する関係が「同じ和音内」である場合に、和音構成音の演奏順序を任意に許容するように遷移確率値を設定することを特徴とする請求項１記載の演奏評価装置。
【００７３】
［請求項４］
前記判別手段は、前記最適経路取得手段が最後に取得した最適経路で指定される音符の音高と、最後に演奏された演奏音の音高とを比較し、両者が一致していればユーザの演奏は正しく弾かれたと判別し、不一致ならばユーザの演奏は正しく弾かれていないと判別することを特徴とする請求項１記載の演奏評価装置。
【００７４】
［請求項５］
コンピュータに、
曲中の各音符からそれぞれ曲が始まる初期確率、当該音符から次の音符に遷移する遷移確率および前記音符が正解となる出力確率を設定して隠れマルコフモデルを形成するモデル化ステップと、
前記モデル化ステップで形成された隠れマルコフモデルを用いて、ユーザの演奏音を生成する確率が最も大きい音符を表す最適経路を、隠れ状態系列のビタビ探索により取得する最適経路取得ステップと、
前記最適経路取得ステップにて取得した最適経路で指定される音符の音高と、演奏音の音高との比較に応じて演奏の適否を判別する判別ステップと
を実行させることを特徴とするプログラム。
【符号の説明】
【００７５】
１０  ＣＰＵ
１１  ＲＯＭ
１２  ＲＡＭ
１３  鍵盤
１４  操作部
１５  表示部
１６  音源
１７  サウンドシステム
１００  電子楽器
【図１】
2014052421.tif 000003
【図２】
2014052421.tif 000004
【図３】
2014052421.tif 000005
【図４】
2014052421.tif 000006
【図５】
2014052421.tif 000007
【図６】
2014052421.tif 000008
【図７】
2014052421.tif 000009
【図８】
2014052421.tif 000010
【図９】
2014052421.tif 000011
【図１０】
2014052421.tif 000012
【図１１】
2014052421.tif 000013