(57)【要約】   【課題】  楽曲を構成する種々の要素を考慮して、適切に楽曲の難易度を算出する。  【解決手段】  ＣＰＵ１１は、楽音データ中の音高情報、運指情報、および、時間情報の何れかに基づいて、楽曲の演奏に必要な複数の要素（運指、リズム、調性）のそれぞれについて個別難易度を算出し、算出された複数の個別難易度のそれぞれに重み係数を乗じて、重みが付与された個別難易度を累算することにより楽曲全体の難易度を算出する。また、ＣＰＵ１１は、個別難易度に基づいて算出される楽曲の難易度演算値と、予め楽曲に対して付与された、専門家による同一の楽曲の難易度評価値との相関が最大となるように、重み係数を最適化する。【選択図】  図１
2010281882.tif 000002
【特許請求の範囲】
【請求項１】
楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段と、
前記音高情報、運指情報、および、時間情報の何れかに基づいて、楽曲の演奏に必要な複数の要素のそれぞれについて個別難易度を算出する個別難易度算出手段と、
算出された複数の個別難易度のそれぞれに重み係数を乗じて、重みが付与された個別難易度を累算することにより楽曲全体の難易度を算出し、算出された難易度を記憶手段に格納する全体難易度算出手段と、
前記複数の個別難易度に乗じる重み係数を最適化する重み係数最適化手段と、を備え、
前記重み係数最適化手段が、予め算出され記憶手段に格納された個別難易度に基づいて算出される楽曲の難易度演算値と、予め楽曲に対して付与され、記憶手段に格納されていた専門家による同一の楽曲の難易度評価値との相関が最大となるように、前記重み係数を算出するように構成されたことを特徴とする楽曲難易度算出装置。
【請求項２】
前記重み係数最適化手段が、前記要素ごとに、前記重み係数の基礎値の周辺値である、重み係数候補値を求め、前記全ての要素についての重み係数の候補値の組を用いて、前記難易度演算値を算出することを特徴とする請求項１に記載の楽曲難易度算出装置。
【請求項３】
前記重み係数最適化手段が、前記重み係数候補値を、基礎値に、所定範囲で変化する係数を乗じることにより算出することを特徴とする請求項２に記載の楽曲難易度算出装置。
【請求項４】
前記難易度算出手段が、
前記音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出手段と、
前記音符についての時間情報に基づいて、当該音符長および音符のタイミングに関するリズム難易度を算出するリズム難易度算出手段と、
前記音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出手段と、を有することを特徴とする請求項１ないし３の何れか一項に記載の楽曲難易度算出装置。
【請求項５】
楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段を備えたコンピュータに、
前記音高情報、運指情報、および、時間情報の何れかに基づいて、楽曲の演奏に必要な複数の要素のそれぞれについて個別難易度を算出する個別難易度算出ステップと、
算出された複数の個別難易度のそれぞれに重み係数を乗じて、重みが付与された個別難易度を累算することにより楽曲全体の難易度を算出し、算出された難易度を記憶手段に格納する全体難易度算出ステップと、
前記複数の個別難易度に乗じる重み係数を最適化する重み係数最適化ステップと、を実行させ、
前記重み係数最適化ステップが、予め算出され記憶手段に格納された個別難易度に基づいて算出される楽曲の難易度演算値と、予め楽曲に対して付与され、記憶手段に格納されていた専門家による同一の楽曲の難易度評価値との相関が最大となるように、前記重み係数を算出するステップを含むことを特徴とする楽曲難易度算出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、楽曲の難易度を評価する楽曲難易度算出装置および楽曲難易度算出プログラムに関する。
【背景技術】
【０００２】
従来、楽曲の難易度を評価するときに、音楽教育の専門家や演奏家が、その楽曲における種々の要素、たとえば、音符の連なりなどに基づいて、主観的な評価を行なっていた。従来の主観的な評価では、たとえば、楽曲の構成要素についての客観的な難易度は存在せず、楽曲全体としての評価（たとえば、１０段階評価など）がなされているに過ぎない場合が多かった。
【０００３】
これに対して、楽曲を鍵盤楽器にて演奏する際の運指情報に基づいて、当該運指の難易度を算出する装置が提案されている。特許文献１には、ある音程の２音を２つの指にて押さえるような全ての場合を想定し、当該全ての場合のコストを定義し、運指情報が示す運指を行なう上での難易度を算出する難易度算出方法が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−７８６５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の難易度を算出する装置では、２音を２つの指にて押さえるような全ての場合の全てについてコスト値を定義するのが容易ではないという問題点があった。また、楽曲の難易度は運指のみではなく、他にも種々の要素が存在する。したがって、他の要素も考慮したうえで難易度を算出することが望ましい。
【０００６】
また、種々の要素を考慮して算出された難易度が、上記音楽教育の専門家や演奏家が同じ楽曲に対して出した評価と逸脱していることは望ましくなく、算出された難易度も、専門家の評価とほぼ同様であることが望ましい。
【０００７】
本発明は、楽曲を構成する種々の要素を考慮して、適切に楽曲の難易度を算出する楽曲難易度算出装置および楽曲難易度算出プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の目的は、楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段と、
前記音高情報、運指情報、および、時間情報の何れかに基づいて、楽曲の演奏に必要な複数の要素のそれぞれについて個別難易度を算出する個別難易度算出手段と、
算出された複数の個別難易度のそれぞれに重み係数を乗じて、重みが付与された個別難易度を累算することにより楽曲全体の難易度を算出し、算出された難易度を記憶手段に格納する全体難易度算出手段と、
前記複数の個別難易度に乗じる重み係数を最適化する重み係数最適化手段と、を備え、
前記重み係数最適化手段が、予め算出され記憶手段に格納された個別難易度に基づいて算出される楽曲の難易度演算値と、予め楽曲に対して付与され、記憶手段に格納されていた専門家による同一の楽曲の難易度評価値との相関が最大となるように、前記重み係数を算出するように構成されたことを特徴とする楽曲難易度算出装置により達成される。
【０００９】
好ましい実施態様においては、前記重み係数最適化手段が、前記要素ごとに、前記重み係数の基礎値の周辺値である、重み係数候補値を求め、前記全ての要素についての重み係数の候補値の組を用いて、前記難易度演算値を算出する。
【００１０】
より好ましい実施態様においては、前記重み係数最適化手段が、前記重み係数候補値を、基礎値に、所定範囲で変化する係数を乗じることにより算出する。
【００１１】
別の好ましい実施態様においては、前記難易度算出手段が、
前記音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出手段と、
前記音符についての時間情報に基づいて、当該音符長および音符のタイミングに関するリズム難易度を算出するリズム難易度算出手段と、
前記音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出手段と、を有する。
【００１２】
また、本発明の目的は、楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段を備えたコンピュータに、
前記音高情報、運指情報、および、時間情報の何れかに基づいて、楽曲の演奏に必要な複数の要素のそれぞれについて個別難易度を算出する個別難易度算出ステップと、
算出された複数の個別難易度のそれぞれに重み係数を乗じて、重みが付与された個別難易度を累算することにより楽曲全体の難易度を算出し、算出された難易度を記憶手段に格納する全体難易度算出ステップと、
前記複数の個別難易度に乗じる重み係数を最適化する重み係数最適化ステップと、を実行させ、
前記重み係数最適化ステップが、予め算出され記憶手段に格納された個別難易度に基づいて算出される楽曲の難易度演算値と、予め楽曲に対して付与され、記憶手段に格納されていた専門家による同一の楽曲の難易度評価値との相関が最大となるように、前記重み係数を算出するステップを含むことを特徴とする楽曲難易度算出プログラムにより達成される。
【発明の効果】
【００１３】
本発明によれば、楽曲を構成する種々の要素を考慮して、適切に楽曲の難易度を算出する楽曲難易度算出装置および楽曲難易度算出プログラムを提供することが可能となる。
【図面の簡単な説明】
【００１４】
【図１】図１は、本発明の実施の形態にかかる楽曲難易度算出装置の構成を示すブロックダイヤグラムである。
【図２】図２は、本実施の形態にかかる楽曲難易度算出装置１０において実行される処理の概略を示すフローチャートである。
【図３】図３は、本実施の形態にかかる楽曲データのデータ構成例を示す図である。
【図４】図４は、本実施の形態にかかる難易度評価処理の例を概略的に示すフローチャートである。
【図５】図５は、本実施の形態にかかる運指難易度評価処理の例を示すフローチャートである。
【図６】図６は、本実施の形態にかかる運指難易度評価処理の例を示すフローチャートである。
【図７】図７は、本実施の形態にかかるテクニック分類処理の例を示すフローチャートである。
【図８】図８は、本実施の形態にかかるテクニック分類処理の例を示すフローチャートである。
【図９】図９は、本実施の形態にかかる指開き特定処理の例を詳細に示すフローチャートである。
【図１０】図１０は、本実施の形態にかかるリズム難易度評価処理の例を示すフローチャートである。
【図１１】図１１は、本実施の形態にかかるリズム難易度評価処理の例を示すフローチャートである。
【図１２】図１２は、本実施の形態にかかるリズムコスト算出処理の例を示すフローチャートである。
【図１３】図１３は、本実施の形態にかかるリズムコスト算出処理の例を示すフローチャートである。
【図１４】図１４は、本実施の形態にかかる調性難易度評価処理の例を示すフローチャートである。
【図１５】図１５は、本実施の形態にかかる調性難易度評価処理の例を示すフローチャートである。
【図１６】図１６は、本実施の形態において鍵位置情報を説明するための図である。
【図１７】図１７（ａ）は、本実施の形態にかかるベーススケール配列ｉＢａｓｅＳｃａｌｅ［］の例を示す図、図１７（ｂ）は、本実施の形態にかかる非ベーススケール配列ｉＡＴｏｎａｌ［］の例を示す図である。
【図１８】図１８は、本実施の形態にかかる長音階との一致度ｉＳｕｍの算出を説明するための図である。
【図１９】図１９は、本実施の形態にかかる長音階との不一致度ｉＡＴｏｎａｌｉｔｙの算出を説明するための図である。
【図２０】図２０は、本実施の形態にかかる係数最適化処理の例を示すフローチャートである。
【図２１】図２１は、本実施の形態にかかる最適値算出処理の例を示すフローチャートである。
【図２２】図２２は、本実施の形態にかかる最適値算出処理の例を示すフローチャートである。
【図２３】図２３は、本実施の形態にかかる難易度算出処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して、本発明の実施の形態について説明する。図１は、本発明の実施の形態にかかる楽曲難易度算出装置の構成を示すブロックダイヤグラムである。図１に示すように、本実施の形態にかかる楽曲難易度算出装置１０は、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、大規模記憶装置１４、入力装置１５、表示装置１６、サウンドシステム１７および鍵盤１８を有している。
【００１６】
ＣＰＵ１１は、後述する楽曲の難易度を評価するための種々の処理（運指難易度評価処理、リズム難易度評価処理、調性難易度評価処理、全体難易度の算出処理）を実行する。ＲＯＭ１２は、楽音難易度を評価するための種々の処理（運指難易度評価処理、リズム難易度評価処理、調性難易度評価処理、全体難易度の算出処理）のプログラムや、処理に使用するパラメータなどを格納する。ＲＡＭ１３は、プログラムの実行の過程で生じたパラメータ、入力データ、出力データなどを一時的に記憶する。大規模記憶装置１４は、ハードディスク装置やメモリカードなどであり、楽曲データなどを格納する。
【００１７】
入力装置１５は、スイッチ類、キーボード、マウスなどを含み、操作者のスイッチ操作、キー操作、マウスの操作に基づく種々の指示などをＣＰＵ１１に与える。表示装置１２の画面上には、楽曲データに基づく楽譜、楽曲難易度の評価結果などを含む画像データが表示される。サウンドシステム４０は、楽音生成回路、増幅器、スピーカなどを含み、楽曲データにしたがって、或いは、操作者による鍵盤１８の押鍵操作にしたがって所定の楽音を生成して、楽音に基づく音響信号を出力する。なお、上記実施の形態において、鍵盤１８は必須ではない。
【００１８】
また、本実施の形態にかかる楽曲難易度評価装置１０は、鍵盤楽器の形態であっても良いし、或いは、パーソナルコンピュータのような形態であっても良い。鍵盤楽器の形態であれば、操作者は、表示装置１６の画面上に表示された楽譜を参照して、鍵盤１８の鍵を押鍵し、サウンドシステム１７が、操作者の押鍵に応答して、押鍵された鍵の音高に対応する楽音データを生成することで、サウンドシステム１７から楽音を出力することができる。
【００１９】
図２は、本実施の形態にかかる楽曲難易度評価装置１０において実行される処理の概略を示すフローチャートである。図２に示すように、本実施の形態にかかる楽曲難易度評価装置１０のＣＰＵ１１は、ＲＡＭ１３に格納されたパラメータ等のクリア、表示装置１６の画面上に表示された画像のクリアなどを含むイニシャライズを実行する（ステップ２０１）。次いで、ＣＰＵ１１は、操作者が入力装置１５を操作して楽曲指定の入力があったかを判断する（ステップ２０２）。たとえば、楽曲指定の入力は、楽曲データの番号を入力することにより実現される。
【００２０】
ステップ２０２でＹｅｓと判断された場合には、ＣＰＵ１１は、大規模記憶装置１４に格納された楽曲データ群から、指定された楽曲の楽曲データを読み出して、ＲＡＭ１３に一時的に記憶する（ステップ２０３）。次いで、ＣＰＵ１１は、難易度評価処理を実行して、データを読み出された楽曲の難易度を示す値ｉＣｏｓｔを算出する（ステップ２０４）。ステップ２０２でＮｏと判断されると、ＣＰＵ１１は、操作者が入力装置１５を操作して、係数最適化の指示を入力しているかを判断する（ステップ２０５）。ステップ２０５でＹｅｓと判断された場合には、ＣＰＵ１１は、係数最適化処理を実行する（ステップ２０６）。難易度評価処理および係数最適化処理については、以下に詳述する。
【００２１】
図３は、本実施の形態にかかる楽曲データのデータ構成例を示す図である。図３に示すように、ある楽曲の楽曲データは、音符（ノート）ごとに、発音すべき楽音を示す楽音データのレコード（符号３０１、３０２参照）を有する。楽音データのレコード（たとえば、先頭のノートのレコードＮｏｔｅ［０］：符号３０１）は、音高情報「Ｐｉｔ」、鍵盤位置情報「Ｐｏｓ」、運指情報「Ｆｉｇ」、発音時刻「Ｔｉｍｅ」、発音時間「Ｇａｔｅ」、次のノートのレコードへのポインタ「＊Ｎｅｘｔ」および前のノートのレコードへのポインタ「＊ｐｒｅｖ」という項目を含む。
【００２２】
音高情報「Ｐｉｔ」は、たとえば、音名「Ｃ−１」を「０」として、音高が１つ高くなるごとに「１」を増分させた値である。鍵盤位置情報「Ｐｏｓ」は、当該音高に対応する鍵の横方向の中心位置を示す座標値である。たとえば、図１６に示すように、ある位置のＣ（たとえば、Ｃ４：Ｐｉｔ＝６０）の鍵盤位置情報Ｐｏｓ＝Ｘ０とすると、Ｃ＃４〜Ｃ５までの鍵盤位置情報は、それぞれ、Ｘ１〜Ｘ１２で示すような値となる。図１６から理解できるように、隣接する白鍵と黒鍵、黒鍵と白鍵との間の座標値の差は「１」である。その一方、連続する白鍵（ＥとＦ、ＢとＣ）との間の座標値の差は「２」となる。
【００２３】
図４は、本実施の形態にかかる難易度評価処理の例を概略的に示すフローチャートである。図４に示すように、ＣＰＵ１１は、運指難易度評価処理（ステップ４０１）、リズム難易度評価処理（ステップ４０２）、調性難易度評価（ステップ４０３）、全体難易度の算出処理（ステップ４０４）を実行する。運指難易度評価処理において、ＣＰＵ１１は、楽音データ中の運指情報などに基づいて、運指難易度ｉＦＣｏｓｔを算出する。リズム難易度評価処理において、ＣＰＵ１１は、楽音データ中の発音時刻、発音時間などに基づいて、リズム難易度ＲＣｏｓｔを算出する。また、調性難易度評価処理において、ＣＰＵ１１は、楽音データの音高情報などに基づいて、調性難易度ｉＴＣｏｓｔを算出する。ステップ４０１〜４０３において算出された運指難易度、リズム難易度および調性難易度が、それぞれ個別難易度に相当する。
【００２４】
ＣＰＵ１１は、算出した運指難易度ｉＦＣｏｓｔ、リズム難易度ｉＲＣｏｓｔ、調性難易度ｉＴＣｏｓｔおよび楽曲データ中のノート数（ｉＣｎｔ）に基づいて、それぞれに、重み係数ＲＦ、ＲＲ、ＲＴおよびＲＣを乗じて加算することで楽曲の難易度ｉＣｏｓｔを算出する（ステップ４０４）。すなわち、難易度ｉＣｏｓｔは以下の数式のようになる。
【００２５】
ｉＣｏｓｔ＝ｉＦＣｏｓｔ×ＲＦ＋ｉＲＣｏｓｔ×ＲＲ
＋ｉＴＣｏｓｔ×ＲＴ＋ｉＣｎｔ×ＲＣ
以下、運指難易度評価処理、リズム難易度評価処理および調性難易度評価処理について詳細に説明する。図５および図６は、本実施の形態にかかる運指難易度評価処理の例を示すフローチャートである。なお、本実施の形態においては、楽曲データは、右手で演奏する楽曲（メロディ）の音符についての楽音データから構成される。したがって、運指難易度においては、右手で演奏する場合の運指難易度が算出され。楽曲データ中、楽音データのレコードの運指情報は、右手のどの指で押鍵するかを示している。また、指番号「１」〜「５」は、それぞれ、親指〜小指で押鍵すべきことを示している。
【００２６】
図５に示すように、ＣＰＵ１１は、楽音データに示す楽曲のノート（音符）数を示すパラメータｉＣｎｔを「０」に初期化するとともに（ステップ５０１）、ＲＡＭ１３の楽曲データ中、最初の楽音データのレコードＮｏｔｅ［０］を、配列ｍｅ［］に格納する（ステップ５０２）。ＣＰＵ１１は、楽曲データにおいて全ての楽音データのレコードについて処理が終了するまで（ステップ５０３でＹｅｓ）、ステップ５０４〜５１５を繰り返す。
【００２７】
まず、ＣＰＵ１１は、配列ｍｅ［］に格納された楽音データのレコードの、一つ前の楽音でデータのレコードを特定し、それを配列ｐｒｅｖ［］に格納する（ステップ５０４）。次いで、ＣＰＵ１１は、配列ｍｅ［］および配列ｐｒｅｖ［］に格納された値に基づいて、テクニック分類処理を実行する（ステップ５０５）。テクニック分類処理においては、楽曲の隣接する音符間の運指について、ポジションタイプ（ＰｏｓＴｙｐｅ）、指開きタイプ（ｉＳｐｒｅａｄＴｙｐｅ）、リバースタイプ（ＲｅｖＴｙｐｅ）、および、指使いテクニック（Ｔｅｃｈ）という４つの分類項目のそれぞれの何れに該当するかを判断する。
【００２８】
ここで、ポジションタイプ（ＰｏｓＴｙｐｅ）という分類項目は、どのような指のポジションで運指が行なわれるかを示す。また、指開きタイプ（ｉＳｐｒｅａｄＴｙｐｅ）は、隣接する音符を押鍵する指の開き具合を示す。また、リバースタイプ（ＲｅｖＴｙｐｅ）は、後述する指くぐり、或いは、指返し（乗り越え）の存在を示す。さらに、指使いテクニック（Ｔｅｃｈ）は、隣接する音符を押鍵するときにどのような指使い（指換え）がなされているかを示す。
【００２９】
テクニック分類処理では、それぞれの分類項目について、当該分類項目における具体的提要を示す分類値が算出される。図７および図８は、本実施の形態にかかるテクニック分類処理の例を示すフローチャートである。ＣＰＵ１１は、配列ｍｅ［］中の運指情報「Ｆｉｇ」、音高情報「Ｐｉｔ」および鍵盤位置情報「Ｐｏｓ」について、ｆ１＝Ｆｉｇ、ｐ１＝Ｐｉｔ、ｐｓ１＝Ｐｏｓとする。また、音高情報「Ｐｉｔ」に基づき、鍵が白鍵か黒鍵かを判断し、白鍵、黒鍵の何れかを示す情報をｂ１とする。値ｂ１は、鍵が黒鍵であることを示す値「１」或いは鍵が白鍵であることを示す値「０」の何れかをとる。これら値ｆ１、ｐ１、ｐｓ１、ｂ１は、ＲＡＭ１３に格納される。
【００３０】
また、ＣＰＵ１１は、配列ｐｒｅｖ［］中の運指情報「Ｆｉｇ」、音高情報「Ｐｉｔ」および鍵盤位置情報「Ｐｏｓ」について、ｆ２＝Ｆｉｇ、ｐ２＝Ｐｉｔ、ｐｓ２＝Ｐｏｓとする。また、音高情報「Ｐｉｔ」に基づき、鍵が白鍵か黒鍵かを判断し、白鍵、黒鍵の何れかを示す情報をｂ２とする。これら値ｆ２、ｐ２、ｐｓ２、ｂ２は、ＲＡＭ１３に格納される。ＣＰＵ１１は、ｐ１、ｐ２、ｆ１およびｆ２に基づき、音高差を示す指標ｉＤｉｓｔを算出する（ステップ７０３）。
【００３１】
音高差を示す指標ｉＤｉｓｔは、楽曲において音符の進行が上行であったときに、指番号が増大あるいは減少しているか、また、進行が下行であったときに、指番号が減少或いは増大しているかを示す指標である。本実施の形態においては、ｉＤｉｓｔは以下のように求められる。
【００３２】
ｉＤｉｓｔ＝（ｐ１−ｐ２）＊（ｆ１−ｆ２）
したがって、ｉＤｉｓｔ＞０である場合には、音符の進行が上行かつ指番号が増大するような指使いである場合、或いは、音符の進行が下行かつ指番号が減少するような指使いである場合を意味している。すなわち、ｉＤｉｓｔ＞０である場合には、指が開く形態で運指が行なわれる（指くぐりや指返しが行なわれない）ことを示している。
【００３３】
ＣＰＵ１１は、ｆ２＝ｆ１かつｐ２＝ｐ１であるかを判断する（ステップ７０４）。ステップ７０４でＹｅｓとなる場合とは、隣接する音符間で、同じ音高の鍵が同じ指で押鍵されることを示す。ステップ７０４でＹｅｓと判断された場合には、ＣＰＵ１１は、指使いテクニック（Ｔｅｃｈ）という分類項目について、分類値Ｔｅｃｈとして、「Ｔｅｃｈ＝３」という値を与える（ステップ７０５）。与えられた値は、ＲＡＭ１３に格納される。次いで、ＣＰＵ１１は、ｆ２≠ｆ１かつｐ２＝ｐ１であるかを判断する（ステップ７０６）。ステップ７０６でＹｅｓとなる場合とは、隣接する音符間で、同じ音高の鍵が異なる指で押鍵されることを示す。ステップ７０６でＹｅｓと判断された場合には、ＣＰＵ１１は、指使いテクニック（Ｔｅｃｈ）という分類項目について、「Ｔｅｃｈ＝２」という値を与える（ステップ７０７）。
【００３４】
次いで、ＣＰＵ１１は、ｆ２＝ｆ１かつｐ２≠ｐ１であるかを判断する（ステップ７０８）。ステップ７０８でＹｅｓとなる場合とは、隣接する音符間で異なる音高の鍵が同じ指で押鍵されることを示す。ステップ７０８でＹｅｓと判断された場合には、ＣＰＵ１１は、指使いテクニック（Ｔｅｃｈ）という分類項目について、「Ｔｅｃｈ＝４」という値を与える（ステップ７０９）。ステップ７０８でＮｏと判断された場合には、ＣＰＵ１１は、指使いテクニック（Ｔｅｃｈ）という分類項目について、「Ｔｅｃｈ＝１」という値を与える（ステップ７１０）。
【００３５】
次に、ＣＰＵ１１は、ｉＤｉｓｔ＞０であるかを判断する（ステップ８０１）。上述したように、ｉＤｉｓｔ＞０であることは、指が開く形態で運指が行なわれる（指くぐりや指返しが行なわれない）ことを示している。ステップ８０１でＹｅｓと判断された場合には、ＣＰＵ１１は、ｂ２、ｂ１、ｆ２およびｆ１に基づいて、所定のテーブルｉＰＴｙｐｅ［］［］［］［］に基づいて、分類値ＰｏｓＴｙｐｅとして、ＰｏｓＴｙｐｅ＝ｉＰＴｙｐｅ［ｂ２］［ｂ１］［ｆ２］［ｆ１］を取得する（ステップ８０２）。テーブルｉＰＴｙｐｅ［］［］［］［］は、隣接する音符について、指番号および白鍵／黒鍵の種別に基づく値を含み、ＲＡＭ１３に格納される。
【００３６】
テーブルｉＰＴｙｐｅ［］［］［］［］における値について以下に簡単に説明する。テーブルｉＰｔｙｐｅ［］［］［］［］は、隣接する音符に配置すべき指の指番号およびその位置（白鍵或いは黒鍵）の関係に基づいて、その指のポジションタイプを格納したテーブルである。たとえば、現在の音符および一つ前の音符の双方が白鍵であれば、ｉＰＴｙｐｅ［０］［０］［ｆ２］［ｆ１］＝１となる。また、一つ前の音符が親指でかつ白鍵が押鍵されていれば、現在の音符が黒鍵であった場合に、ｉＰＴｙｐｅ［０］［１］［１］［ｆ１］＝２となる。また、一つ前の音符が親指でかつ黒鍵が押鍵されていれば、現在の音符が黒鍵であった場合に、ｉＰＴｙｐｅ［１］［１］［１］［ｆ１］＝３となる。
【００３７】
このように、テーブルｉＰｔｙｐｅにおいては、隣接する音符を押鍵するときの手のむきや指の位置の難易度が高まるのに応じて、値が大きくなるようになっている。
【００３８】
ステップ８０２が実行された後、ＣＰＵ１１は、指開き特定処理を実行する（ステップ８０３）。図９は、本実施の形態にかかる指開き特定処理の例を詳細に示すフローチャートである。
【００３９】
図９に示すように、ＣＰＵ１１は、指開きの度合いを示すパラメータであるｉＭｉｎ、ｉＬ１およびｉＬ２（ｉＭｉｎ＜ｉＬ１＜ｉＬ２）をＲＡＭ１３から取得する（ステップ９０１）。たとえば、ｉＭｉｎは、白鍵での長２度の幅に相当する「２」、ｉＬ１は、白鍵での長３度に相当する「４」、ｉＬ１は、白鍵での完全８度に相当する「１４」である。指開き特定処理においては、ｉＤｉｓｔと、ｉＭｉｎ、ｉＬ１およびｉＬ２とを比較して、指開きタイプ（ｉＳｐｒｅａｄＴｙｐｅ）の分類値を決定していく。
【００４０】
ＣＰＵ１１は、鍵盤位置に基づく距離ｉＫＤｉｓｔ＝｜ｐｓ２−ｐｓ１｜を算出する（ステップ９０２）。
【００４１】
ステップ７０３において算出されたｉＤｉｓｔ＜０である場合には（ステップ９０３でＹｅｓ）、ＣＰＵ１１は、指開きタイプ（ｉＳｐｒｅａｄＴｙｐｅ）という分類項目について、分類値ｉＳｐｒｅａｄＴｙｐｅとして、「ｉＳｐｒｅａｄＴｙｐｅ＝０」という値を与える（ステップ９０４）。なお、図９が実行されるときには、ｉＤｉｓｔ＞０であることが前提である（図８のステップ８０１参照）。したがって、これは実際には起こりえないことであるため、ステップ９０４はエラー処理となる。
【００４２】
ｉＫＤｉｓｔ＝ｉＭｉｎである場合（ステップ９０５でＹｅｓ）、ＣＰＵ１１は、指開きタイプ（ｉＳｐｒｅａｄＴｙｐｅ）という分類項目について、分類値ｉＳｐｒｅａｄＴｙｐｅとして、「ｉＳｐｒｅａｄＴｙｐｅ＝１」という値を与える（ステップ９０６）。ｉＭｉｎ＜ｉＫＤｉｓｔ≦ｉＬ１である場合（ステップ９０７でＹｅｓ）、ＣＰＵ１１は、指開きタイプ（ｉＳｐｒｅａｄＴｙｐｅ）という分類項目について、「ｉＳｐｒｅａｄＴｙｐｅ＝２」という値を与える（ステップ９０８）。ｉＫＤｉｓｔ＜ｉＭｉｎである場合（ステップ９０９でＹｅｓ）、ＣＰＵ１１は、指開きタイプ（ｉＳｐｒｅａｄＴｙｐｅ）という分類項目について、「ｉＳｐｒｅａｄＴｙｐｅ＝３」という値を与える（ステップ９１０）。
【００４３】
ｉＫＤｉｓｔ＜ｉＬ２である場合（ステップ９１１でＹｅｓ）、ＣＰＵ１１は、指開きタイプ（ｉＳｐｒｅａｄＴｙｐｅ）という分類項目について、「ｉＳｐｒｅａｄＴｙｐｅ＝４」という値を与える（ステップ９１２）。その一方、ｉＫＤｉｓｔ≧ｉＬ２である場合（ステップ９１１でＮｏ）、ＣＰＵ１１は、指開きタイプ（ｉＳｐｒｅａｄＴｙｐｅ）という分類項目について、「ｉＳｐｒｅａｄＴｙｐｅ＝５」という値を与える（ステップ９１３）。
【００４４】
指開き特定処理によって、ｉＫＤｉｓｔの値にしたがって、以下のようなｉＳｐｒｅａｄＴｙｐｅの値が付与される。
【００４５】
０≦ｉＫＤｉｓｔ＜Ｍｉｎ  ｉＳｐｒｅａｄＴｙｐｅ＝３
ｉＫＤｉｓｔ＝ｉＭｉｎ          ｉＳｐｒｅａｄＴｙｐｅ＝１
ｉＭｉｎ＜ｉＫＤｉｓｔ≦ｉＬ１  ｉＳｐｒｅａｄＴｙｐｅ＝２
ｉＬ１＜ｉＫＤｉｓｔ＜ｉＬ２    ｉＳｐｒｅａｄＴｙｐｅ＝４
ｉＬ２≦ｉＫＤｉｓｔ      ｉＳｐｒｅａｄＴｙｐｅ＝５
指開き特定処理が終了すると、ＣＰＵ１１は、リバースタイプ（ＲｅｖＴｙｐｅ）という分類項目について、分類値ＲｅｖＴｙｐｅとして、「ＲｅｖＴｙｐｅ＝１」という分類値を与える（ステップ８０４）。その後、ＣＰＵ１１は、配列ｍｅ［］に格納された楽音データについて算出されたＰｏｓＴｙｐｅ、ｉＳｐｒｅａｄＴｙｐｅ、ＲｅｖＴｙｐｅおよびＴｅｃｈという分類値を、当該楽音データと関連付けて記憶装置（ＲＡＭ１３）に格納する（ステップ８０５）。
【００４６】
ステップ８０１でＮｏと判断された場合には、所定のテーブルｉＲＴｙｐｅ［］［］［］［］に基づいて、ＲｅｖＴｙｐｅ＝ｉＲＴｙｐｅ［ｐ２］［ｐ１］［ｆ２］［ｆ１］を取得する（ステップ８０６）。テーブルｉＲＴｙｐｅ［］［］［］［］は、隣接する音符について、指番号および音高に基づく値を含み、ＲＡＭ１３に格納される。
【００４７】
テーブルｉＲＴｙｐｅ［］［］［］［］における値について以下に簡単に説明する。テーブルｉＲｔｙｐｅ［］［］［］［］は、隣接する音符に配置すべき指の指番号および音高の関係に基づいて、運指における指くぐりや指返し（乗り越え）を示す情報を格納したテーブルである。本実施の形態において、ｉＤｉｓｔ≦０のときには、上行音形において、「１」より大きな指番号の指から指番号「１」の指に移行すること（いわゆる「指くぐり」）、或いは、下行音形において、指番号「１」の指から「１」より大きな指番号の指に移行すること（いわゆる「指返し」ないし「指の乗り越え」）が行なわれ得ることを意味している。
【００４８】
本実施の形態においては、指くぐりのとき、つまり、ｐ２＜ｐ１，ｆ２＞１、ｆ１＝１のときには、ｉＲＴｙｐｅ［ｐ２］［ｐ１］［ｆ２］［ｆ１］＝３となる。また、指返しのとき、つまり、ｐ２＞ｐ１、ｆ２＝１、ｆ１＞１のときには、ｉＲＴｙｐｅ［ｐ２］［ｐ１］［ｆ２］［ｆ１］＝２となる。一般的に、運指において、指返しより指くぐりの方が難しいといわれているため、指くぐりについて、ＲｅｖＴｙｐｅ＝３、指返しについてＲｅｖＴｙｐｅ＝２となるようにしている。
【００４９】
ステップ８０６の後、ＣＰＵ１１は、ポジションタイプ（ＰｏｓＴｙｐｅ）という分類項目について、「ＰｏｓＴｙｐｅ＝１」という分類値、指開きタイプ（ｉＳｐｒｅａｄＴｙｐｅ）という分類項目について、「ｉＳｐｒｅａｄＴｙｐｅ＝１」という分類値を与える（ステップ８０７）。その後、ＣＰＵ１１は、配列ｍｅ［］に格納された楽音データについて算出されたＰｏｓＴｙｐｅ、ｉＳｐｒｅａｄＴｙｐｅ、ＲｅｖＴｙｐｅおよびＴｅｃｈという分類値を、当該楽音データと関連付けて記憶装置（ＲＡＭ１３）に格納する（ステップ８０５）。
【００５０】
次に、２次元マップｉＦＭａｐ［ｉ］［ｊ］（ｉは分類項目、ｊは分類項目において付与された値）において、テクニック分類処理により得られた分類項目に対応する値をインクリメントする処理を実行する（図５のステップ５０６〜５１２）。本実施の形態においては、ポジションタイプ（ＰｏｓＴｙｐｅ）、指開きタイプ（ｉＳｐｒｅａｄＴｙｐｅ）、リバースタイプ（ＲｅｖＴｙｐｅ）、および、指使いテクニック（Ｔｅｃｈ）という４つの分類項目が存在する。したがって、２次元のマップＭａｐ［ｉ］［ｊ］のそれぞれの要素は以下の分類項目に対応する。
【００５１】
ｉＦＭａｐ［０］［ｊ］：ｊが「ＰｏｓＴｙｐｅ」の値
ｉＦＭａｐ［１］［ｊ］：ｊが「ｉＳｐｒｅａｄＴｙｐｅ」の値
ｉＦＭａｐ［２］［ｊ］：ｊが「ＲｅｖＴｙｐｅ」の値
ｉＦＭａｐ［３］［ｊ］：ｊが「Ｔｅｃｈ」の値
なお、以下のステップ５０６、５０８、５１０、５１２から理解できるように、ｊ＝０、２のときの値は存在せず、ｊ＞１のみについて値を有する。
【００５２】
ＣＰＵ１１は、ＰｏｓＴｙｐｅ＞１である場合には（ステップ５０６でＹｅｓ）、対応するマップの値であるｉＦＭａｐ［０］［ＰｏｓＴｙｐｅ］をインクリメントする（ステップ５０７）。また、ＣＰＵ１１は、ｉＳｐｒｅａｄＴｙｐｅ＞１である場合には（ステップ５０８でＹｅｓ）、対応するマップの値であるｉＦＭａｐ［１］［ｉＳｐｒｅａｄＴｙｐｅ］をインクリメントする（ステップ５０９）。ＣＰＵ１１は、ＲｅｖＴｙｐｅ＞１である場合には（ステップ５１０でＹｅｓ）、対応するマップの値であるｉＦＭａｐ［２］［ＲｅｖＴｙｐｅ］をインクリメントする（ステップ５１１）。さらに、ＣＰＵ１１は、Ｔｅｃｈ＞１である場合には（ステップ５１２でＹｅｓ）、対応するマップの値であるｉＦＭａｐ［３］［Ｔｅｃｈ］をインクリメントする（ステップ５１３）。
【００５３】
次いで、ＣＰＵ１１は、ノート数（音符数）を示すパラメータｉＣｎｔをインクリメントして（ステップ５１４）、配列ｍｅ［］に、次の楽音データのレコードを格納し（ステップ５１５）、その後、ステップ５０３に戻る。
【００５４】
ステップ５０３でＹｅｓと判断された場合には、ＣＰＵ１１は、パラメータｉおよびｉＦＣｏｓｔを「０」に初期化する（ステップ６０１）。ＣＰＵ１１は、パラメータｉが「４」以上であるかを判断する（ステップ６０２）。上記パラメータｉは、ｉＦＭａｐ［ｉ］［ｊ］の「ｉ」を特定するためのものである。ステップ６０２でＮｏと判断された場合には、パラメータｊを「０」に初期化して（ステップ６０３）、ｊが所定数より大きくなるまで（ステップ６０４）、ステップ６０５〜６０７の処理を繰り返す。
【００５５】
ＣＰＵ１１は、マップの値ｉＦＭａｐ［ｉ］［ｊ］が「０」より大きいかを判断する（ステップ６０５）。ステップ６０５でＹｅｓと判断された場合には、ＣＰＵ１１は、マップの値ｉＦＭａｐ［ｉ］［ｊ］に対応付けられたコスト値ｉＦＣｏｓｔ［ｉ］［ｊ］を、運指難易度の値ｉＦＣｏｓｔに加算する（ステップ６０６）。
【００５６】
以下、コスト値ｉＦＣｏｓｔ［ｉ］［ｊ］を格納したコストテーブル（ｉＦＣｏｓｔ［］［］［］）について説明する。コストテーブルは、コスト値ｉＦＣｏｓｔ［ｉ］［ｊ］のそれぞれに対応する、「ｉ×ｊ」個のコスト値ｉＦＣｏｓｔ［ｉ］［ｊ］を格納している。たとえば、ｉＦＣｏｓｔ［０］［ｊ］は、テクニック分類処理（図８）のステップ８０２で取得された「ＰｏｓＴｙｐｅ」の値のそれぞれに対応するコスト値であり、ポジションタイプのそれぞれの値に固有の値となっている。ｉ＝１以上の他のコスト値も同様である。
【００５７】
本実施の形態においては、ポジションタイプ「ＰｏｓＴｙｐｅ」、指開きタイプ「ｉＳｐｒｅａｄＴｙｐｅ」、リバースタイプ「ＲｅｖＴｙｐｅ」および指使いテクニック「Ｔｅｃｈ」のそれぞれにおいて、値が大きくなるのにしたがって、それぞれの分類項目において運指の困難度が高まるようになっている。したがって、コスト値ｉＦＣｏｓｔ［ｉ］［ｊ］も、ｊが増大するのにしたがって、コスト値が増大するようになっている。
【００５８】
また、本実施の形態においては，マップの値ｉＦＭａｐ［ｉ］［ｊ］が幾つであるかは考慮せず、「０」より大きければ（すなわち「１」以上であれば）、コスト値ｉＦＣｏｓｔ［ｉ］［ｊ］を、運指難易度の値ｉＦＣｏｓｔに加算している。すなわち、マップの値の多寡にかかわらず、加算される値はコスト値ｉＦＣｏｓｔ［ｉ］［ｊ］である。これは、分類項目「ｉ」（例えば、ポジションタイプや指開きタイプ）において、ｉＦＭａｐ［ｉ］［ｊ］において１より大きい値を有する音符が１つあれば、その場合には、当該ｉＦＭａｐ［ｉ］［ｊ］に対応する難易度を含むため、そのノートの数は、難易度を示すコスト値にそれほど大きく影響しないであろうという知見に基づく。
【００５９】
無論、マップの値ｉＦＭａｐ［ｉ］［ｊ］に応じて、加算されるｉＦＣｏｓｔ［ｉ］［ｊ］に重みを与えても良い。つまりこの場合には、
ｉＣｏｓｔ＝ｉＣｏｓｔ＋
ｆ（ｉＦＣｏｓｔ［ｉ］［ｊ］）×ｉＦＣｏｓｔ［ｉ］［ｊ］
となる。ここで、ｆ（ｉＦＣｏｓｔ［ｉ］［ｊ］）は、変数ｉＦＣｏｓｔ［ｉ］［ｊ］が増大するのにしたがって増大するが、変数ｉＦＣｏｓｔ［ｉ］［ｊ］が増大するのにしたがって、関数値ｆの増分は小さくなっていく関数である。たとえば、ｆとして対数関数を使用しても良い。
【００６０】
ステップ６０５でＮｏと判断された場合、或いは、ステップ６０６が実行された後、ＣＰＵ１１は、ｊをインクリメントして（ステップ６０７）、ステップ６０４に戻る。また、ステップ６０４でＹｅｓと判断された場合には、ＣＰＵ１１は、ｉをインクリメントして（ステップ６０８）、ステップ６０２に戻る。
【００６１】
このように本実施の形態においては、楽曲に含まれるあるノートが、運指に関する分類項目の具体的態様についてのマップ値ｉＭａｐ［ｉ］［ｊ］が「０」でない場合には、当該分類項目の具体的態様に対応するコスト値ｉＦＣｏｓｔ［ｉ］［ｊ］が、運指難易度ｉＦＣｏｓｔに加算される。
【００６２】
次に、リズム難易度評価処理について説明する。図１０および図１１は、本実施の形態にかかるリズム難易度評価処理の例を示すフローチャートである。図１０に示すように、ＣＰＵ１１は、ＲＡＭ１３の楽曲データ中、最初の楽音データのレコードＮｏｔｅ［０］を、配列ｍｅ［］に格納する（ステップ１００１）。ＣＰＵ１１は、楽曲データにおいて全ての楽音データのレコードについて処理が終了するまで（ステップ１００２でＹｅｓ）、ステップ１００３〜１００７を繰り返す。
【００６３】
ＣＰＵ１１は、ＲＡＭ１３に格納された、リズム評価処理用のパラメータ（リズムパラメータ）を取得する（ステップ１００３）。リズムパラメータには、１小節の長さを示すｉＭｅａｓＬｅｎ、リズムの分解能を示すＲｅｓｏｌｕｔｉｏｎなどが含まれ、これらは、次のリズムコスト算出処理において利用される。ＣＰＵ１１は、リズムコスト算出処理を実行する（ステップ１００４）。図１２および図１３は、本実施の形態にかかるリズムコスト算出処理の例を示すフローチャートである。リズムコスト算出処理においては、音符の音符長（次の音符までの間隔に基づく音符長）に相当する分類項目であるステップタイム（ｉＳｔｅｐＴｉｍｅ）についての分類値と、音符の小節中の位置に相当する分類項目であるポジション（ｉＰｏｓ）についての分類値とが得られる。
【００６４】
図１２に示すように、ＣＰＵ１１は、配列ｍｅ［］に示す楽音データのレコードの、次のレコードを参照して、その発音時刻Ｔｉｍｅを取得する（ステップ１２０１）。次いで、ＣＰＵ１１は、配列ｍｅ［］中の発音時刻Ｔｉｍｅと、ステップ１２０１で取得した次の発音データのレコードにおける発音時刻Ｔｉｍｅとに基づいて、次の音符までの間隔ｉＴを算出する（ステップ１２０２）。ＣＰＵ１１は、時間間隔ｉＴと、１小節の長さｉＭｅａｓＬｅｎとに基づいて、上記時間間隔の小節内での音符長ｉＳｔｅｐＴｉｍｅを算出する（ステップ１２０３）。得られたｉＳｔｅｐＴｉｍｅが、音符長という分類項目についての分類値となる。
【００６５】
本実施の形態において、音符長ｉＳｔｅｐＴｉｍｅは以下のように求められる。
【００６６】
ｉＳｔｅｐＴｉｍｅ＝３２×ｉＴ／ｉＭｅａｓＬｅｎ
本実施の形態においては、楽曲は４／４拍子としており、ｉＳｔｅｐＴｉｍｅは、ｉＴが３２分音符いくつ分に相当するかを示している。
【００６７】
次いで、ＣＰＵ１１は、配列ｍｅ［］中の発音時刻Ｔｉｍｅに基づき、小節内の音符位置ｉＴｉｃｋＩｎＭｅａｓ、拍内での音符位置ｉＴｉｃｋＩｎＢｅａｔおよび当該音符の属する拍ｉＢｅａｔを算出する（ステップ１３０４）。ｉＴｉｃｋＩｎＭｅａｓは、１小節を３２分割したときの音符の位置、つまり、小節の先頭から３２分音符でいくつ目に位置しているかを示す。また、ｉＴｉｃｋＩｎＢｅａｔは、拍の先頭から３２分音符でいくつ目に位置しているかを示す。
【００６８】
ＣＰＵ１１は、パラメータｉおよびｉＰｏｓを「０」に初期化して（ステップ１２０５）、ｉが８未満である限り（ステップ１２０６でＹｅｓ）、ステップ１２０７から１２１０の処理を実行する。ＣＰＵ１１は、ｉＴｉｃｋＩｎＢｅａｔの位置を特定するために、ａ＝ｉＴｉｃｋＩｎＢｅａｔ−ｉＲｅｓｏｌｕｔｉｏｎ×ｉ／８を算出する（ステップ１２０７）。ここで、ｉＴｉｃｋＩｎＢｅａｔは、「０」〜「７」の何れかの値をとる。したがって、いずれかのｉについて、ａ＝０となり、次のステップ１２０８でＹｅｓと判断される。ステップ１２０８でＮｏと判断された場合には、ＣＰＵ１１は、パラメータｉをインクリメントして（ステップ１２０９）、ステップ１２０６に戻る。ステップ１２０８でＹｅｓと判断された場合には、ＣＰＵ１１は、パラメータｉＰｏｓ＝ｉとする（ステップ１２１０）。
【００６９】
ステップ１２０６でＮｏと判断された場合、或いは、ステップ１２１０の処理が終了した後、図１３のステップ１３０１に進む。なお、本実施の形態においては、ステップ１２０４においてｉＴｉｃｋＩｎＢｅａｔの算出の際に、３２分音符の分解能にクォンタイズされる。したがって、ステップ１２１０においてＮｏと判断されることは本来ありえない。したがって、この場合は、演算において何らかのエラーが生じたことになる。
【００７０】
このようにして得られたｉＰｏｓは、音符が、拍の頭から３２分音符で何番目の位置にあるかを示すものである。これをそのまま使って良いが、本実施の形態においては、小節の先頭、小節の中央および拍の先頭として、ｉＰｏｓとして異なる値を与える。ｉＴｉｃｋＩｎＭｅａｓ＝０の場合、すなわち、音符が拍の先頭に位置している場合には（ステップ１３０１でＹｅｓ）、ＣＰＵ１１は、ｉＰｏｓ＝３２とする（ステップ１３０２）。また、ｉＴｉｃｋＩｎＢｅａｔ＝０かつｉＢｅａｔ＝２、つまり、音符が３拍目の先頭（小節の中央）に位置している場合には（ステップ１３０３でＹｅｓ）、ＣＰＵ１１は、ｉＰｏｓ＝１６とする（ステップ１３０４）。さらに、ｉＴｉｃｋＩｎＢｅａｔ＝０、つまり、音符が２拍目或いは４拍目の先頭に位置している場合には（ステップ１３０５でＹｅｓ）、ＣＰＵ１１は、ｉＰｏｓ＝８とする（ステップ１３０６）。
【００７１】
リズムコスト算出処理によって得られる分類項目の１つであるポジション（ｉＰｏｓ）の分類値は、音符の小節中の位置によって以下のような値をとる。
【００７２】
音符の位置が、小節の先頭：ｉＰｏｓ＝３２
音符の位置が、３拍目の先頭：ｉＰｏｓ＝１６
音符の位置が、他の拍（２拍目、４拍目）の先頭：ｉＰｏｓ＝８
音符の位置が他の場合：ｉＰｏｓ＝拍を８等分した場合の位置を示す値
上記ｉＰｏｓは、楽曲が４／４拍子の場合の例であり、他の拍子（たとえば、３／４）の場合には、ｉＰｏｓは異なる。楽曲が３／４拍子であれば、分類値「ｉＰｏｓ」は以下の値をとり得る。
【００７３】
音符の位置が、小節の先頭：ｉＰｏｓ＝３２
音符の位置が、他の拍（２拍目、３拍目）の先頭：ｉＰｏｓ＝８
音符の位置が他の場合：ｉＰｏｓ＝拍を８等分した場合の位置を示す値
リズムコスト算出処理が終了すると、ＣＰＵ１１は、２次元マップの値であるｉＲＭａ［０］［ｉＳｔｅｐＴｉｍｅ］をインクリメントする（ステップ１００５）とともに、ｉＲＭａｐ［１］［ｉＰｏｓ］をインクリメントする（ステップ１００６）。その後、ＣＰＵ１１は、配列ｍｅ［］に、次の楽音データのレコードを格納し（ステップ１００７）、その後、ステップ１００２に戻る。
【００７４】
ステップ１００２でＹｅｓと判断された場合には、ＣＰＵ１１は、パラメータｉおよびｉＲＣｏｓｔを「０」に初期化する（ステップ１１０１）。ＣＰＵ１１は、パラメータｉが「２」以上であるかを判断する（ステップ１１０２）。上記パラメータｉは、ｉＲＭａｐ［ｉ］［ｊ］の「ｉ」を特定するためのものである。ステップ１１０２でＮｏと判断された場合には、パラメータｊを「０」に初期化して（ステップ１１０３）、ｊが所定数より大きくなるまで（ステップ１１０４）、ステップ１１０５〜１１０７の処理を繰り返す。
【００７５】
ＣＰＵ１１は、マップ値ｉＲＭａｐ［ｉ］［ｊ］が「０」より大きいかを判断する（ステップ１１０５）。ステップ１１０５でＹｅｓと判断された場合には、ＣＰＵ１１は、マップの値ｉＲＭａｐ［ｉ］［ｊ］に対応付けられたコスト値ｉＲＣｏｓｔ［ｉ］［ｊ］を、運指難易度の値ｉＲＣｏｓｔに加算する（ステップ１１０６）。
【００７６】
以下、コスト値ｉＲＣｏｓｔ［ｉ］［ｊ］を格納したコストテーブルｉＲＣｏｓｔ［］［］について説明する。運指難易度についてのコスト値ｉＲ［ｉ］［ｊ］を格納したコストテーブルと同様に、コストテーブルｉＲＣｏｓｔ［］［］は、コスト値ｉＲＣｏｓｔ［ｉ］［ｊ］のそれぞれに対応する、「ｉ×ｊ」個のコスト値ｉＲＣｏｓｔ［ｉ］［ｊ］を格納している。たとえば、ｉＲＣｏｓｔ［０］［ｊ］は、リズムコスト算出処理（図１２）のステップ１２０３で取得された音符長ｉＳｔｅｐＴｉｍｅのそれぞれに対応するコスト値であり、音符長のそれぞれに固有の値となっている。また、ｉＲＣｏｓｔ［１］［ｊ］は、ステップ１２１０、ステップ１３０２、１３０４、１３０６で得られた拍内の音符位置ｉＰｏｓのそれぞれに対応するコスト値であり、音符位置のそれぞれに固有の値となっている。
【００７７】
たとえば、ｉＲＣｏｓｔ［０］［ｉＳｔｅｐＴｉｍｅ］においては、ｉＳｔｅｐＴｉｍｅ＝３２、１６、８、４、および、それら以外の値、について、コスト値ｉＲＣｏｓｔ［０］［ｉＳｔｅｐＴｉｍｅ］が増大するようになっている。つまり、音符長が、全音符であるとき、そのコスト値ｉＲＣｏｓｔ［０］［３２］がもっとも小さく、２分音符、４分音符、８分音符、その他の音符となるのにしたがって、コスト値は大きくなる。
【００７８】
また、ｉＲＣｏｓｔ［１］［ｉＰｏｄ］においても、ｉＰｏｓ＝３２、１６、８、それら以外の値、について、コスト値ｉＲＣｏｓｔ［１］［ｉＰｏｓ］が増大するようになっている。つまり、音符が小節の先頭に位置するとき、そのコスト値ｉＲＣｏｓｔ［１］［３２］がもっとも小さく、３拍目の先頭、２拍目或いは４拍目の先頭、その他の位置となるのにしたがって、コスト値は大きくなる。
【００７９】
運指難易度コストの算出と同様に、マップの値ｉＲＭａｐ［ｉ］［ｊ］が幾つであるかは考慮せず、０より大きければ（すなわち１以上であれば）、コスト値ｉＲＣｏｓｔ［ｉ］［ｊ］を、リズム難易度の値ｉＲＣｏｓｔに加算している。すなわち、マップの値の多寡にかかわらず、加算される値はコスト値ｉＲＣｏｓｔ［ｉ］［ｊ］である。
【００８０】
ステップ１１０５でＮｏと判断された場合、或いは、ステップ１１０６が実行された後、ＣＰＵ１１は、ｊをインクリメントして（ステップ１１０７）、ステップ１１０４に戻る。また、ステップ１１０４でＹｅｓと判断された場合には、ＣＰＵ１１は、ｉをインクリメントして（ステップ１１０８）、ステップ１１０２に戻る。
【００８１】
このように本実施の形態においては、音符についてのリズム、特に、音符長および音符位置のそれぞれについて、対応するコスト値ｉＲＣｏｓｔ［ｉ］［ｊ］が、リズム難易度ｉＲＣｏｓｔに加算される。
【００８２】
次に、本実施の形態にかかる調性難易度評価処理について説明する。図１４および図１５は、本実施の形態にかかる調性難易度評価処理の例を示すフローチャートである。図１５に示すように、ＣＰＵ１１は、配列ｍｅ［］に先頭の楽音データのレコードを格納する（ステップ１４０１）。ＣＰＵ１１は、楽曲データにおいて全ての楽音データのレコードについて処理が終了するまで（ステップ１４０２でＹｅｓ）、ステップ１４０３、１４０４を繰り返す。
【００８３】
ＣＰＵ１１は、配列ｍｅ［］中の音高情報「Ｐｉｔ」に基づいて、カウント値ｉＰＣ［Ｐｉｔ  ｍｏｄ  １２］をインクリメントする（ステップ１４０３）。ステップ１４０３においては、音符の、ＣからＢまでの何れかの音名に対応するカウント値ｉＰＣがインクリメントされる。次いで、ＣＰＵ１１は、配列ｍｅ［］に次の楽音データのレコードを格納して（ステップ１４０４）、ステップ１４０２に戻る。ステップ１４０２〜１４０４の処理によって、楽曲に含まれるノート（音符）の音名のそれぞれについて、累算値を格納した配列ｉＰＣ［］が取得される。
【００８４】
ステップ１４０２でＹｅｓと判断された場合には、ＣＰＵ１１は、パラメータｉＴｏｎａｌｉｔｙ、ｉＭａｘ，ｉＡＴＭａｘおよびｉを「０」に初期化する（ステップ１４０５〜１４０７）。ＣＰＵ１１は、パラメータｉが１２以上になるまで（ステップ１４０８でＮｏ）、図１５のステップ１５０１〜１５１２を実行する。
【００８５】
図１５に示すように、ＣＰＵ１１は、パラメータｉＳｕｍおよびｉＡＴｏｎａｌｉｔｙを「０」に初期化する。ここに、ｉＳｕｍは、楽曲が含んでいたノート（音符）の音名の累算値と、各調の長音階との一致度を示すパラメータであり、ｉＡＴｏｎａｌｉｔｙは、上記音名の累算値と、各調の長音階との不一致度を示すパラメータである。なお、本実施の形態においては、長音階の楽曲について、各調の長音階との一致度、不一致度を見出しているが、これに限定されるものではない。短音階の楽曲については、各調の短音階との一致度や不一致度を見出せば良い。
【００８６】
ＣＰＵ１１は、パラメータｊを「０」に初期化して（ステップ１５０４）、ｉＳｕｍに、ｉＰＣ［（ｊ＋ｉ）  ｍｏｄ  １２］×ｉＢａｓｅＳｃａｌｅ［ｊ］を加算する。また、ＣＰＵ１１は、ｉＡＴｏｎａｌｉｔｙに、ｉＰＣ［（ｊ＋ｉ）  ｍｏｄ  １２］×ｉＡＴｏｎａｌ［ｊ］を加算する（ステップ１５０５）。その後、ＣＰＵ１１はｊをインクリメントしてステップ１５０３に戻る。
【００８７】
図１７（ａ）は、本実施の形態にかかるベーススケール配列ｉＢａｓｅＳｃａｌｅ［］の例を示す図である。図１７（ａ）に示すように、ｉＢａｓｅＳｃａｌｅ［］（符号１７０１）は、１１個の要素（ｊ＝０〜１１）を有し、長音階の音名に相当する要素（ｊ＝０、２、４、５、７、９、１１）が「１」となり、それ以外が「０」となっている。なお、図１７（ａ）において、配列の要素の上に配置された数字、♭（フラット）、＃（シャープ）は、最も左のｊ＝０の要素（根音）に対する間隔（度）を示している。また、図１７（ｂ）は、本実施の形態にかかる非ベーススケール配列ｉＡＴｏｎａｌ［］の例を示す図である。ｉＡＴｏｎａｌ［］（符号１７０２参照）は、ｉＢａｓｅＳｃａｌｅ［］１７０１と同様に、１１個の要素（ｊ＝０〜１１）を有し、その値は、ｉＢａｓｅＳｃａｌｅと逆となっている。すなわち、長音階の音名に該当しない要素（ｊ＝１、３、６、８、１０）が「１」となり、それ以外が「０」となっている。
【００８８】
以下、ステップ１５０４における、ｉＳｕｍに加算される値ｉＰＣ［（ｊ＋ｉ）  ｍｏｄ  １２］×ｉＢａｓｅＳｃａｌｅ［ｊ］について説明する。たとえば、図１８において、符号１８０１は、ステップ１４０２〜１４０４で得られた配列ｉＰＣ［］の例を示す図、符号１８０２は、ベーススケール配列ｉＢａｓｅＳｃａｌｅ［］の例を示す図である。
【００８９】
ｉＰＣ［ｊ＋ｉ  ｍｏｄ  １２］×ｉＢａｓｅＳｃａｌｅ［ｊ］において、ｉ＝０のときには、ｊ＝０、２、４、５、７、９において、０以外の値をとり、全てのｊについて処理が実行された場合のｉＳｕｍの最終値は、
ｉＳｕｍ＝Σ（ｉＰＣ［ｊ  ｍｏｄ  １２］×ｉＢａｓｅＳｃａｌｅ［ｊ］）
＝７＋２＋３＋１０＋４＋５＝３１となる。
【００９０】
ｉ＝１のときには、ｊ＝４、５、９、１１において、０以外の値をとり、全てのｊについて処理が実行された場合のｉＳｕｍの最終値は、
ｉＳｕｍ＝１＋３＋５＋８＝１７となる。
【００９１】
また、ｉ＝５のときには、ｊ＝０、２、４、５、７、９、２２において、０以外の値をとり、全てのｊについて処理が実行された場合のｉＳｕｍの最終値は、
ｉＳｕｍ＝１０＋４＋５＋８＋７＋２＋３＝３９となる。
【００９２】
さらに、ｉ＝７のときには、ｊ＝０、２、５、７、９において、０以外の値をとり、全てのｊについて処理が実行された場合のｉＳｕｍの最終値は、
ｉＳｕｍ＝４＋５＋７＋２＋３＝２２となる。
【００９３】
ｉＡＴｏｎａｌｉｔｙにｉＰＣ（ｊ＋ｉ  ｍｏｄ  １２）×ｉＡＴｏｎａｌ［ｊ］を加算する演算も、ｉＳｕｍの演算と同様に実行され得る。
【００９４】
図１９において、符号１９０１は、ステップ１４０２〜１４０４で得られた配列ｉＰＣ［］の例を示す図、符号１９０２は、非ベーススケール配列ｉＡＴｏｎｌｉｔｙ［］の例を示す図である。配列ｉＰＣ［］は、図１８の符号１８０１と同様である。
【００９５】
ｉ＝０のときには、ｉＡＴｏｎａｌｉｔｙの最終値
ｉＡＴｏｎａｌｉｔｙ＝Σ（ｉＰＣ［ｊ  ｍｏｄ  １２］×ｉＡＴｏｎａｌ［ｊ］
＝１＋５＋８＝１４となる。
【００９６】
また、ｉ＝１のときのｉＡＴｏｎａｌｉｔｙの最終値は、
ｉＡＴｏｎａｌｉｔｙ＝７＋２＋１０＋４＋５＝２８（符号１９０３参照）
ｉ＝５のときのｉＡＴｏｎａｌｉｔｙの最終値は、
ｉＡＴｏｎａｌｉｔｙ＝５＋１＝６（符号１９０４参照）
ｉ＝７のときのｉＡＴｏｎａｌｉｔｙの最終値は、
ｉＡＴｏｎａｌｉｔｙ＝５＋８＋１＋１０＝２４（符号１９０５参照）となる。
【００９７】
ステップ１５０３でＮｏと判断された場合、つまり、特定のｉについて、ｊ＝０〜１１のｉＳｕｍおよびｉＡＴｏｎａｌｉｔｙが算出された場合には、ＣＰＵ１１は、一致度ｉＳｕｍと不一致度ｉＡＴｏｎａｌｉｔｙの差分値ａ（＝ｉＳｕｍ−ｉＡＴｏｎａｌｉｔｙ）を算出する（ステップ１５０７）。
【００９８】
ＣＰＵ１１は、ステップ１５０７において得られた差分値ａが、ＲＡＭ１３に記憶された差分値ａの最大値ｉＭａｘより大きいかを判断する（ステップ１５０８）。ステップ１５０８でＹｅｓと判断された場合には、ＣＰＵ１１は、差分値ａを最大値ｉＭａｘとしてセットし（ステップ１５０９）、かつ、最大値ｉＭａｘを得たときの調性を示すパラメータｉＴｏｎａｌｉｔｙにｉをセットする（ステップ１５１０）。また、ＣＰＵ１１は、得られた不一致度ｉＡＴｏｎａｌｉｔｙを、ｉＳｕｍの最大値が得られたときの対応する不一致度ｉＡＴＭａｘとしてセットする（ステップ１５１１）。
【００９９】
ステップ１５０８でＮｏと判断された場合、または、ステップ１５１１が実行された後に、ＣＰＵ１１は、ｉをインクリメントして、ステップ１４０８に戻る。ステップ１４０８でＮｏと判断された場合には、ＣＰＵ１１は、調性難易度を示すｉＴＣｏｓｔを以下のように算出する（ステップ１４０９）。
【０１００】
ｉＴＣｏｓｔ＝（ｉＡＴＭａｘ×Ａ）／ｉＭａｘ
ここに、Ａは所定の定数である。したがって、ｉＴＣｏｓｔは、調性の一致度が最大となったときの、音符の音階との一致度ｉＳｕｍとそのときの不一致度ｉＡＴｏｎａｌｉｔｙとの差分値に対する、そのときの不一致度の比に、定数Ａを乗じたものとなる。
【０１０１】
先に説明したように、運指難易度ｉＦＣｏｓｔ、リズム難易度ｉＲＣｏｓｔおよび調性難易度ｉＴＣｏｓｔが算出されると、これら難易度および楽曲のノート数ｉＣｎｔに基づいて、以下のように楽曲の難易度ｉＣｏｓｔが算出される。
【０１０２】
ｉＣｏｓｔ＝ｉＦＣｏｓｔ×ＲＦ＋ｉＲＣｏｓｔ×ＲＲ
＋ｉＴＣｏｓｔ×ＲＴ＋ｉＣｎｔ×ＲＣ
【０１０３】
次に、本実施の形態にかかる係数最適化処理（図２のステップ２０６）についてより詳細に説明する。係数最適化処理において、楽曲の難易度ｉＣｏｓｔを算出する際に、運指難易度、リズム難易度および調性難易度の各要素に乗算される重み係数ＲＦ、ＲＲおよびＲＴを最適化する。概略的には、楽曲における各要素の難易度を、人が評価する場合と同様の結果となるように重み係数を算出している。図２０は、本実施の形態にかかる係数最適化処理の例を示すフローチャート出る。図２０に示すように、ＣＰＵ１１は、処理の繰り返し回数を示すパラメータｏｐｔを「０」に初期化し（ステップ２００１）、パラメータｏｐｔが定められた所定数より大きくなるまで（ステップ２００２でＹｅｓ）、ステップ２００３〜２０１０を繰り返す。
【０１０４】
ＣＰＵ１１は、楽曲の難易度の要素を特定するためのパラメータｉを「０」に初期化する（ステップ２００３）。ここで、ｉ＝０は、運指難易度を示し、ｉ＝１はリズム難易度を示し、また、ｉ＝２は調性難易度を示す。ＣＰＵ１１は、パラメータｉが要素数Ｅｍａｘ（この場合には「３」）未満である限り（ステップ２００４）、ステップ２００５〜２００８を繰り返す。
【０１０５】
次いで、ＣＰＵ１１は、繰り返し回数を示すパラメータｏｐｔが「０」、つまり、１回目の処理であるかを判断する（ステップ２００５）。ステップ２００５でＹｅｓと判断された場合には、重み係数の基礎値ａ［ｉ］を、予め定められた初期値ｉｎｉ［ｉ］とする（ステップ２００６）。初期値ｉｎｉ［ｉ］は任意の値（たとえば、ｉｎｉ［ｉ］＝１）で良い。ステップ２００５でＮｏと判断された場合には、上記基礎値ａ［ｉ］を、先の処理で得られた重み係数の候補値の最大値ｂｍａｘ［ｉ］とする（ステップ２００７）。なお、最終的に得られたｂｍａｘ［０］が運指難易度についての重み係数ＲＦ、ｂｍａｘ［１］がリズム難易度についての重み係数ＲＲ、ｂｍａｘ［２］が調性難易度についての重み係数ＲＴとなる。ステップ２００６、２００７が実行されると、ＣＰＵ１１は、パラメータｉをインクリメントして（ステップ２００８）、ステップ２００４に戻る。
【０１０６】
ステップ２００４でＮｏと判断された場合には、ＣＰＵ１１は、最適値算出処理を実行する（ステップ２００９）。その後、ＣＰＵ１１は、繰り返し回数を示すパラメータｏｐｔをインクリメントして（ステップ２０１０）、ステップ２００２に戻る。
【０１０７】
図２１、２２は、本実施の形態にかかる最適値算出処理の例を示すフローチャートである。基礎値ａ［ｉ］は、求める重み係数の中心値と考える。最適値算出処理においては、パラメータｉ、ｊおよびｋを用いた三重ループによって、基礎値ａ［］の周辺の値ｉＶａｒの全ての組み合わせについて、候補値ｂ［］が求められる。また、候補値ｂ［］を用いた難易度（難易度算出値）が求められ、当該難易度と、専門家による難易度評価値との相関が算出され、求められた相関値の最大値ｒｍａｘが得られる。以下、最適値算出処理をより詳細に説明する。
【０１０８】
図２１に示すように、ＣＰＵ１１は、相関値の最大値ｒｍａｘを初期化するとともに（ステップ２１０１）、パラメータｉを初期化する（ステップ２１０２）。次いで、ＣＰＵ１１は、パラメータｉが所定の周辺値数を示すパラメータｉＶａｒより小さい限り（ステップ２１０３でＹｅｓ）、ステップ２１０４以下の処理を実行する。なお、ｉ≧ｉＶａｒとなった場合に（ステップ２１０３でＮｏ）には処理を終了する。
【０１０９】
ステップ２１０３でＹｅｓと判断された場合には、ＣＰＵ１１は、パラメータｊを初期化して（ステップ２１０４）、パラメータｊが所定のパラメータｉＶａｒより小さい限り（ステップ２１０５でＹｅｓ）、ステップ２１０６以下の処理を実行する。なお、ｊ≧ｉＶａｒとなった場合に（ステップ２１０５でＮｏ）には、ＣＰＵ１１は、パラメータｉをインクリメントして（ステップ２１１２）、ステップ２１０３に戻る。
【０１１０】
ステップ２１０５でＹｅｓと判断された場合には、ＣＰＵ１１は、パラメータｋを初期化して（ステップ２１０６）、パラメータｋが所定のパラメータｉＶａｒより小さい限り（ステップ２１０７でＹｅｓ）、ステップ２１０８以下の処理を実行する。なお、ｋ≧ｉＶａｒとなった場合に（ステップ２１０７でＮｏ）には、ＣＰＵ１１は、パラメータｊをインクリメントして（ステップ２１１１）、ステップ２１０５に戻る。
【０１１１】
ステップ２１０７でＹｅｓと判断された場合には、ＣＰＵ１１は、候補値ｂ［０］からｂ［２］のそれぞれに値をセットする（ステップ２１０８〜２１１０）。ステップ２１０８〜２１１０においては、以下のように候補値ｂ［］が算出される。
【０１１２】
ｂ［０］＝ａ［０］×ｄ［ｉ］
ｂ［１］＝ａ［１］×ｄ［ｊ］
ｂ［２］＝ａ［２］×ｄ［ｋ］
ｄ［ｉ］、ｄ［ｊ］、ｄ［ｋ］は、それぞれ、候補値ｂ［］を算出するために、基礎値ａ［］に乗じるための定められた係数であり、本実施の形態においては、０．０〜９．９の値をとるようになっている。たとえば、ｄ［０］＝０．０、ｄ［１］＝０．２、ｄ［２］＝０．６・・・ｄ［６］＝９．９というように、パラメータｉ、ｊ、ｋが増大するのにしたがって係数が増大するようになっている。
【０１１３】
ステップ２１１０の後、ＣＰＵ１１は、難易度算出処理を実行する（ステップ２２０１）。難易度算出処理においては、予め難易度が算出されている所定数（ＳｏｎｇＮ）の楽曲の難易度に基づいて、相関値算出のための難易度算出値ｏｕｔ［］を算出する。図２３は、本実施の形態にかかる難易度算出処理の例を示すフローチャートである。図２３に示すように、難易度算出処理において、ＣＰＵ１１は、楽曲を特定するためのパラメータｐを「０」に初期化して（ステップ２３０１）、パラメータｐが楽曲総数ＳｏｎｇＮ未満である限り（ステップ２３０２でＹｅｓ）、ステップ２３０３〜２３０８の処理を繰り返す。
【０１１４】
ＣＰＵ１１は、難易度算出値ｏｕｔ［ｐ］を「０」に初期化して（ステップ２３０３）、難易度の要素（運指難易度、リズム難易度、調性難易度）を特定するためのパラメータｊを「０」に初期化する（ステップ２３０４）。ＣＰＵ１１は、パラメータｑが要素数Ｅｍａｘ未満である限り（ステップ２３０５でＹｅｓ）、ステップ２３０６〜２３０７を実行する。ＣＰＵ１１は、難易度算出値ｏｕｔ［ｐ］＝ｏｕｔ［ｐ］＋ｄａｔａ［ｑ］［ｐ］×ｂ［ｑ］を算出する（ステップ２３０６）。ここに、ｄａｔａ［ｑ］［ｐ］は、パラメータｐで特定される楽曲について、パラメータｑで特定される要素（ｑ＝０であれば運指、ｑ＝１であればリズム、ｑ＝２であれば調性）について算出された難易度である。ｄａｔａ［ｑ］［ｐ］は予め算出されＲＡＭ１３に格納されている。その後、ＣＰＵ１１は、パラメータｑをインクリメントして（ステップ２３０７）、ステップ２３０５に戻る。
【０１１５】
また、ステップ２３０５でＮｏと判断された場合には、ＣＰＵ１１は、パラメータｐをインクリメントして（ステップ２３０８）、ステップ２３０２に戻る。
【０１１６】
難易度算出処理が終了すると、ＣＰＵ１１は、難易度算出処理において求めた難易度算出値ｏｕｔ［ｋ］と、予めＲＡＭ１３に格納していた専門家による難易度評価値ｄａｔ［ｋ］との相関値ｒを求める（ステップ２２０２）。たとえば、相関値は以下のような一般的な相関係数を利用することができる。
【０１１７】
【数１】
2010281882.tif 000003
上記式において、ｘｉ＝ｏｕｔ［ｉ］、ｙｉ＝ｄａｔ［ｉ］、ｎ＝ＳｏｎｇＮである。ＣＰＵ１１は、ステップ２２０２で算出された相関値ｒが、以前の処理にて得られていた相関値の最大値ｒｍａｘより大きいかを判断する（ステップ２２０３）。ステップ２２０３でＮｏと判断された場合には、ＣＰＵ１１は、パラメータｋをインクリメントして（ステップ２２０９）、ステップ２１０７に戻る。
【０１１８】
その一方、ステップ２２０３でＹｅｓと判断された場合には、ＣＰＵ１１は、パラメータｎを「０」に初期化して、ｎが要素数Ｅｍａｘ未満である限り（ステップ２２０５でＹｅｓ）、ステップ２２０６〜２２０８を実行する。ＣＰＵ１１は、現在の候補値ｂ［ｎ］を最大値ｂｍａｘ［ｎ］としてＲＡＭ１３に一時的に記憶するとともに（ステップ２２０６）、現在の相関値ｒを相関値の最大値ｒｍａｘとしてＲＡＭ１３に一時的に記憶する（ステップ２２０７）。その後、ＣＰＵ１１は、パラメータｎをインクリメントして（ステップ２２０８）、ステップ２２０５に戻る。ステップ２２０５でＮｏと判断された場合には、ＣＰＵ１１は、パラメータｋをインクリメントして（ステップ２２０９）、ステップ２１０９に戻る。ステップ２２０５〜２２０８によって、難易度の要素のそれぞれについての係数の候補値ｂ［０］〜ｂ［２］および相関値ｒの最大値ｒｍａｘが取得される。
【０１１９】
前述したように、最適値算出処理（ステップ２２０９）は所定回数だけ実行されて、処理が繰り返されることにより、ｂｍａｘ［０］〜ｂｍａｘ［２］が、専門家の判断による値に徐々に近づいていく。得られたｂｍａｘ［０］、ｂｍａｘ［１］およびｂｍａｘ［２］は、ＲＡＭ１３などの記憶装置に格納され、難易度評価処理（図４）の全体難易度の算出（ステップ４０４）において、それぞれ、調性難易度ｉＦＣｏｓｔに乗じる重み係数ＲＦ、リズム難易度ｉＲＣｏｓｔに乗じる重み係数ＲＲ、および、調性難易度ｉＴＣｏｓｔに乗じる重み係数ＲＴとして用いられる。
【０１２０】
本実施の形態においては、楽曲の演奏に必要な、運指、リズム、調性という要素について、ＣＰＵ１１は、個別難易度を算出し、算出された複数の個別難易度のそれぞれに重み係数を乗じて、重みが付与された個別難易度を累算することにより楽曲全体の難易度を算出する。また、ＣＰＵ１１は、予め算出され記憶手段に格納された個別難易度に基づいて算出される楽曲の難易度演算値と、予め楽曲に対して付与された専門家による同一の楽曲の難易度評価値との相関が最大となるように、個別難易度に乗じる重み係数を最適化する。
【０１２１】
したがって、客観的な要素ごとの個別難易度の加算を行ないつつ、その結果が、専門家の評価から逸脱しないような難易度の算出が可能となる。
【０１２２】
また、本実施の形態においては、運指、リズム、調性という要素ごとに、重み係数の基礎値ａ［ｉ］の周辺値である、重み係数候補値ｂ［ｉ］を求め、全ての要素についての重み係数の候補値ｂ［０］〜ｂ［２］の組を用いて、前記難易度演算値を算出する。組み合わせを変更して、新たな重み係数の組を作って、難易度演算値を算出することにより、最も難易度評価値との相関が大きかったときの難易度演算値を算出した重み係数候補値を適切に取得することができる。
【０１２３】
また、本実施の形態においては、ＣＰＵ１１は、重み係数候補値ｂ［ｉ］を、基礎値ａ［ｉ］に、所定範囲で変化する係数ｄ［ｊ］を乗じることにより算出する。すなわち、基礎値ａ［ｉ］の周辺で変化する候補値ｂ［ｉ］の組み合わせから最大値ｂｍａｘ［ｉ］を得ていく。
【０１２４】
さらに、本実施の形態においては、ＣＰＵ１１は、音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度と、音符についての時間情報に基づいて、音符長および音符のタイミングに関するリズム難易度と、音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度と、を算出する。したがって、楽曲を構成する種々の要素を考慮して、適切に楽曲の難易度を算出することが可能となる。
【０１２５】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【符号の説明】
【０１２６】
１０        楽曲難易度算出装置
１１        ＣＰＵ
１２        ＲＯＭ
１３        ＲＡＭ
１４        大規模記憶装置
１５        入力装置
１６        表示装置
１７        サウンドシステム
１８        鍵盤
【図１】
2010281882.tif 000004
【図２】
2010281882.tif 000005
【図３】
2010281882.tif 000006
【図４】
2010281882.tif 000007
【図５】
2010281882.tif 000008
【図６】
2010281882.tif 000009
【図７】
2010281882.tif 000010
【図８】
2010281882.tif 000011
【図９】
2010281882.tif 000012
【図１０】
2010281882.tif 000013
【図１１】
2010281882.tif 000014
【図１２】
2010281882.tif 000015
【図１３】
2010281882.tif 000016
【図１４】
2010281882.tif 000017
【図１５】
2010281882.tif 000018
【図１６】
2010281882.tif 000019
【図１７】
2010281882.tif 000020
【図１８】
2010281882.tif 000021
【図１９】
2010281882.tif 000022
【図２０】
2010281882.tif 000023
【図２１】
2010281882.tif 000024
【図２２】
2010281882.tif 000025
【図２３】
2010281882.tif 000026