楽曲難易度評価装置および楽曲難易度評価プログラム
【課題】 楽曲を構成する種々の要素を考慮して、適切に楽曲の難易度を算出する。
【解決手段】 CPU11は、RAM13に格納された楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データに基づいて楽曲の難易度を算出する。CPU11は、音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出し、音符についての時間情報に基づく、当該音符長および押鍵タイミングに関するリズム難易度を算出し、音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出し、さらに、運指難易度、リズム難易度および調性難易度に基づき、楽曲全体の難易度を算出する。
【解決手段】 CPU11は、RAM13に格納された楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データに基づいて楽曲の難易度を算出する。CPU11は、音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出し、音符についての時間情報に基づく、当該音符長および押鍵タイミングに関するリズム難易度を算出し、音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出し、さらに、運指難易度、リズム難易度および調性難易度に基づき、楽曲全体の難易度を算出する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、楽曲の難易度を評価する楽曲難易度評価装置および楽曲難易度評価プログラムに関する。
【背景技術】
【0002】
従来、楽曲の難易度を評価するときに、音楽教育の専門家や演奏家が、その楽曲における種々の要素、たとえば、音符の連なりなどに基づいて、主観的な評価を行なっていた。従来の主観的な評価では、たとえば、楽曲の構成要素についての客観的な難易度は存在せず、楽曲全体としての評価(たとえば、10段階評価など)がなされているに過ぎない場合が多かった。
【0003】
これに対して、楽曲を鍵盤楽器にて演奏する際の運指情報に基づいて、当該運指の難易度を算出する装置が提案されている。特許文献1には、ある音程の2音を2つの指にて押さえるような全ての場合を想定し、当該全ての場合のコストを定義し、運指情報が示す運指を行なう上での難易度を算出する難易度算出方法が提案されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2006−78656号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来の難易度を算出する装置では、2音を2つの指にて押さえるような全ての場合の全てについてコスト値を定義するのが容易ではないという問題点があった。また、楽曲の難易度は運指のみではなく、他にも種々の要素が存在する。したがって、他の要素も考慮したうえで難易度を算出することが望ましい。
【0006】
本発明は、楽曲を構成する種々の要素を考慮して、適切に楽曲の難易度を算出する楽曲難易度算出装置および楽曲難易度算出プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の目的は、楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段と、
前記音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出手段と、
前記音符についての時間情報に基づいて、当該音符長および音符のタイミングに関するリズム難易度を算出するリズム難易度算出手段と、
前記音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出手段と、
前記運指難易度算出手段により算出された運指難易度、前記リズム難易度算出手段により算出されたリズム難易度および調性難易度算出手段により算出された調性難易度に基づき、楽曲の難易度を算出する全体難易度算出手段と、を備えたことを特徴とする楽曲難易度算出装置により達成される。
【0008】
好ましい実施態様においては、前記運指難易度算出手段が、
隣接する音符を押鍵するときの指のポジションに関する第1の分類項目について、当該分類項目における具体的態様を示す第1の分類値、隣接する音符を押鍵するときの指の開き具合に関する第2の分類項目について、当該第2の分類項目における具体的態様を示す第2の分類値、指くぐり或いは指返しに関する第3の分類項目について、当該第3の分類項目における具体的態様を示す第3の分類値、および、隣接する音符を押鍵するときの指換えに関する第4の分類項目について、当該第4の分類項目における具体的態様を示す第4の分類値のうち、少なくとも1つの分類項目についても分類値を取得する第1の分類項目値取得手段と、
前記分類項目のそれぞれにおいて、前記分類項目における分類値に基づいて、前記分類項目における前記具体的態様に対するコスト値を格納した、前記記憶手段中のコストテーブルから、前記分類項目における前記具体的態様に対するコスト値を取得し、前記コスト値を累算し、前記累算されたコスト値を前記運指に関する難易度として取得する第1のコスト累算手段と、を有する。
【0009】
また、より好ましい実施態様においては、前記第1の分類項目値取得手段が、前記音符ごとに、前記分類項目中の分類値が所定の値であるときに、前記分類項目の分類値のカウント値を格納する、前記記憶手段中のカウントマップにおいて、対応するカウント値を増分させ、
前記第1のコスト累算手段が、前記カウントマップ中のカウント値を参照して、前記カウント値が「1」以上であるときに、前記コストテーブル中の、前記対応するコスト値を累算するように構成されている。
【0010】
また、好ましい実施態様においては、前記リズム難易度算出手段が、音符長に関する第5の分類項目について、当該分類項目における具体的態様を示す第5の分類値、音符の小節中の位置に関する第6の分類項目について、当該分類項目における具体的態様を示す第6の分類値のうち、少なくとも1つの分類項目についても分類値を取得する第2の分類項目値取得手段と、
前記分類項目のそれぞれにおいて、前記分類項目における分類値に基づいて、前記分類項目における前記具体的態様に対するコスト値を格納した、前記記憶手段中のコストテーブルから、前記分類項目における前記具体的態様に対するコスト値を取得するとともに、当該コスト値を累算し、前記累算されたコスト値を前記リズムに関する難易度として取得する第2のコスト累算手段と、を有する。
【0011】
別の好ましい実施態様においては、前記調性難易度算出手段が、
前記音符の音高情報に基づいて前記楽曲の調性を特定し、
前記特定された調性の音階と前記楽曲中の音符の音高との一致度、および、前記特定された調性の音階と前記楽曲中の音符の音高との不一致度に基づき前記調性難易度を算出するように構成されている。
【0012】
より好ましい実施態様においては、前記調性難易度算出手段が、
前記一致度と不一致度との差異に対する前記不一致度の割合に基づいて、前記調性難易度を算出する。
【0013】
また、好ましい実施態様においては、前記楽音データが、楽曲のテンポを示すデータを含み、前記全体難易度算出手段が、前記運指難易度およびリズム難易度のそれぞれに、前記楽曲のテンポに応じた重みを与え、重みが与えられた運指難易度およびリズム難易度により全体難易度を算出するように構成されている。
【0014】
また、別の好ましい実施態様においては、前記第1の分類値取得手段が、前記音符ごとに、前記運指に関する分類項目のそれぞれの分類値を、前記音符に関連付けて記憶手段に格納するように構成され、
前記楽曲を構成する音符が五線譜上に配置された楽譜を含む画像データを生成して表示装置の画面上に表示させる画像生成手段を備え、
前記画像生成手段が、前記音符のそれぞれについて、前記記憶手段に格納された、当該音符に関連付けられた、前記運指に関する分類項目の分類値が所定の値であるときに、前記音符が当該分類項目に該当することを示す印を含むような前記楽譜を含む画像データを生成するように構成されている。
【0015】
さらに別の好ましい実施態様においては、前記第2の分類値取得手段が、前記音符ごとに、前記リズムに関する分類項目のそれぞれの分類値を、前記音符に関連付けて記憶手段に格納するように構成され、
前記楽曲を構成する音符が五線譜上に配置された楽譜を含む画像データを生成して表示装置の画面上に表示させる画像生成手段を備え、
前記画像生成手段が、前記音符のそれぞれについて、前記記憶手段に格納された、当該音符に関連付けられた、前記リズムに関する分類項目の分類値が所定の値であるときに、前記音符が当該分類項目に該当することを示す印を含むような前記楽譜を含む画像データを生成するように構成されている。
【0016】
また、本発明の目的は、楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段を備えたコンピュータに、
前記音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出ステップと、
前記音符についての時間情報に基づく、当該音符長および押鍵タイミングに関するリズム難易度を算出するリズム難易度算出ステップと、
前記音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出ステップと、
前記運指難易度算出ステップにおいて算出された運指難易度、前記リズム難易度算出ステップにおいて算出されたリズム難易度および調性難易度算出ステップにおいて算出された調性難易度に基づき、楽曲の難易度を算出する全体難易度算出ステップと、
を実行させることを特徴とする楽曲難易度算出プログラムにより達成される。
【発明の効果】
【0017】
本発明によれば、楽曲を構成する種々の要素を考慮して、適切に楽曲の難易度を算出する楽曲難易度算出装置および楽曲難易度算出プログラムを提供することが可能となる。
【図面の簡単な説明】
【0018】
【図1】図1は、本発明の第1の実施の形態にかかる楽曲難易度評価装置の構成を示すブロックダイヤグラムである。
【図2】図2は、本実施の形態にかかる楽曲難易度評価装置10において実行される処理の概略を示すフローチャートである。
【図3】図3は、本実施の形態にかかる楽曲データのデータ構成例を示す図である。
【図4】図4は、本実施の形態にかかる難易度評価処理の例を概略的に示すフローチャートである。
【図5】図5は、本実施の形態にかかる運指難易度評価処理の例を示すフローチャートである。
【図6】図6は、本実施の形態にかかる運指難易度評価処理の例を示すフローチャートである。
【図7】図7は、本実施の形態にかかるテクニック分類処理の例を示すフローチャートである。
【図8】図8は、本実施の形態にかかるテクニック分類処理の例を示すフローチャートである。
【図9】図9は、本実施の形態にかかる指開き特定処理の例を詳細に示すフローチャートである。
【図10】図10は、本実施の形態にかかるリズム難易度評価処理の例を示すフローチャートである。
【図11】図11は、本実施の形態にかかるリズム難易度評価処理の例を示すフローチャートである。
【図12】図12は、本実施の形態にかかるリズムコスト算出処理の例を示すフローチャートである。
【図13】図13は、本実施の形態にかかるリズムコスト算出処理の例を示すフローチャートである。
【図14】図14は、本実施の形態にかかる調性難易度評価処理の例を示すフローチャートである。
【図15】図15は、本実施の形態にかかる調性難易度評価処理の例を示すフローチャートである。
【図16】図16は、本実施の形態において鍵位置情報を説明するための図である。
【図17】図17(a)は、本実施の形態にかかるベーススケール配列iBaseScale[]の例を示す図、図17(b)は、本実施の形態にかかる非ベーススケール配列iATonal[]の例を示す図である。
【図18】図18は、本実施の形態にかかる長音階との一致度iSumの算出を説明するための図である。
【図19】図19は、本実施の形態にかかる長音階との不一致度iATonalityの算出を説明するための図である。
【図20】図20は、本実施の形態にかかる難易度表示処理の例を示すフローチャートである。
【図21】図21は、本実施の形態にかかる難易度表示処理により生成された楽譜の画像の例を示す図である。
【図22】図22は、第2の実施の形態にかかる難易度評価処理の概略を示すフローチャートである。
【図23】図23は、第3の実施の形態にかかるリズムコスト算出処理の例を示すフローチャートである。
【図24】図24は、第3の実施の形態にかかる難易度表示処理の例を示すフローチャートである。
【発明を実施するための形態】
【0019】
以下、添付図面を参照して、本発明の実施の形態について説明する。図1は、本発明の第1の実施の形態にかかる楽曲難易度評価装置の構成を示すブロックダイヤグラムである。図1に示すように、本実施の形態にかかる楽曲難易度評価装置10は、CPU11、ROM12、RAM13、大規模記憶装置14、入力装置15、表示装置16、サウンドシステム17および鍵盤18を有している。
【0020】
CPU11は、後述する楽曲の難易度を評価するための種々の処理(運指難易度評価処理、リズム難易度評価処理、調性難易度評価処理、全体難易度の算出処理)を実行する。ROM12は、楽音難易度を評価するための種々の処理(運指難易度評価処理、リズム難易度評価処理、調性難易度評価処理、全体難易度の算出処理)のプログラムや、処理に使用するパラメータなどを格納する。RAM13は、プログラムの実行の過程で生じたパラメータ、入力データ、出力データなどを一時的に記憶する。大規模記憶装置14は、ハードディスク装置やメモリカードなどであり、楽曲データなどを格納する。
【0021】
入力装置15は、スイッチ類、キーボード、マウスなどを含み、操作者のスイッチ操作、キー操作、マウスの操作に基づく種々の指示などをCPU11に与える。表示装置12の画面上には、楽曲データに基づく楽譜、楽曲難易度の評価結果などを含む画像データが表示される。サウンドシステム40は、楽音生成回路、増幅器、スピーカなどを含み、楽曲データにしたがって、或いは、操作者による鍵盤18の押鍵操作にしたがって所定の楽音を生成して、楽音に基づく音響信号を出力する。なお、上記実施の形態において、鍵盤18は必須ではない。
【0022】
また、本実施の形態にかかる楽曲難易度評価装置10は、鍵盤楽器の形態であっても良いし、或いは、パーソナルコンピュータのような形態であっても良い。鍵盤楽器の形態であれば、操作者は、表示装置16の画面上に表示された楽譜を参照して、鍵盤18の鍵を押鍵し、サウンドシステム17が、操作者の押鍵に応答して、押鍵された鍵の音高に対応する楽音データを生成することで、サウンドシステム17から楽音を出力することができる。
【0023】
図2は、本実施の形態にかかる楽曲難易度評価装置10において実行される処理の概略を示すフローチャートである。図2に示すように、本実施の形態にかかる楽曲難易度評価装置10のCPU11は、RAM13に格納されたパラメータ等のクリア、表示装置16の画面上に表示された画像のクリアなどを含むイニシャライズを実行する(ステップ201)。次いで、CPU11は、操作者が入力装置15を操作して楽曲指定の入力があったかを判断する(ステップ202)。たとえば、楽曲指定の入力は、楽曲データの番号を入力することにより実現される。
【0024】
ステップ202でYesと判断された場合には、CPU11は、大規模記憶装置14に格納された楽曲データ群から、指定された楽曲の楽曲データを読み出して、RAM13に一時的に記憶する(ステップ203)。次いで、CPU11は、難易度評価処理を実行して、データを読み出された楽曲の難易度を示す値iCostを算出する(ステップ204)。ステップ202でNoと判断されると、CPU11は、難易度算出が行なわれた楽曲のそれぞれについて、算出された難易度と楽曲中の音符との関連を示す画像を生成して表示装置16の画面上に表示する難易度表示処理を実行する(ステップ205)。難易度評価処理および難易度表示処理については、以下に詳述する。
【0025】
図3は、本実施の形態にかかる楽曲データのデータ構成例を示す図である。図3に示すように、ある楽曲の楽曲データは、音符(ノート)ごとに、発音すべき楽音を示す楽音データのレコード(符号301、302参照)を有する。楽音データのレコード(たとえば、先頭のノートのレコードNote[0]:符号301)は、音高情報「Pit」、鍵盤位置情報「Pos」、運指情報「Fig」、発音時刻「Time」、発音時間「Gate」、次のノートのレコードへのポインタ「*Next」および前のノートのレコードへのポインタ「*prev」という項目を含む。
【0026】
音高情報「Pit」は、たとえば、音名「C−1」を「0」として、音高が1つ高くなるごとに「1」を増分させた値である。鍵盤位置情報「Pos」は、当該音高に対応する鍵の横方向の中心位置を示す座標値である。たとえば、図16に示すように、ある位置のC(たとえば、C4:Pit=60)の鍵盤位置情報Pos=X0とすると、C#4〜C5までの鍵盤位置情報は、それぞれ、X1〜X12で示すような値となる。図16から理解できるように、隣接する白鍵と黒鍵、黒鍵と白鍵との間の座標値の差は「1」である。その一方、連続する白鍵(EとF、BとC)との間の座標値の差は「2」となる。
【0027】
図4は、本実施の形態にかかる難易度評価処理の例を概略的に示すフローチャートである。図4に示すように、CPU11は、運指難易度評価処理(ステップ401)、リズム難易度評価処理(ステップ402)、調性難易度評価(ステップ403)、全体難易度の算出処理(ステップ404)を実行する。運指難易度評価処理において、CPU11は、楽音データ中の運指情報などに基づいて、運指難易度iFCostを算出する。リズム難易度評価処理において、CPU11は、楽音データ中の発音時刻、発音時間などに基づいて、リズム難易度RCostを算出する。また、調性難易度評価処理において、CPU11は、楽音データの音高情報などに基づいて、調性難易度iTCostを算出する。
【0028】
CPU11は、算出した運指難易度iFCost、リズム難易度iRCost、調性難易度iTCostおよび楽曲データ中のノート数(iCnt)に基づいて、それぞれに、重み係数RF、RR、RTおよびRCを乗じて加算することで楽曲の難易度iCostを算出する(ステップ404)。すなわち、難易度iCostは以下の数式のようになる。
【0029】
iCost=iFCost×RF+iRCost×RR
+iTCost×RT+iCnt×RC
以下、運指難易度評価処理、リズム難易度評価処理および調性難易度評価処理について詳細に説明する。図5および図6は、本実施の形態にかかる運指難易度評価処理の例を示すフローチャートである。なお、本実施の形態においては、楽曲データは、右手で演奏する楽曲(メロディ)の音符についての楽音データから構成される。したがって、運指難易度においては、右手で演奏する場合の運指難易度が算出され。楽曲データ中、楽音データのレコードの運指情報は、右手のどの指で押鍵するかを示している。また、指番号「1」〜「5」は、それぞれ、親指〜小指で押鍵すべきことを示している。
【0030】
図5に示すように、CPU11は、楽音データに示す楽曲のノート(音符)数を示すパラメータiCntを「0」に初期化するとともに(ステップ501)、RAM13の楽曲データ中、最初の楽音データのレコードNote[0]を、配列me[]に格納する(ステップ502)。CPU11は、楽曲データにおいて全ての楽音データのレコードについて処理が終了するまで(ステップ503でYes)、ステップ504〜515を繰り返す。
【0031】
まず、CPU11は、配列me[]に格納された楽音データのレコードの、一つ前の楽音でデータのレコードを特定し、それを配列prev[]に格納する(ステップ504)。次いで、CPU11は、配列me[]および配列prev[]に格納された値に基づいて、テクニック分類処理を実行する(ステップ505)。テクニック分類処理においては、楽曲の隣接する音符間の運指について、ポジションタイプ(PosType)、指開きタイプ(iSpreadType)、リバースタイプ(RevType)、および、指使いテクニック(Tech)という4つの分類項目のそれぞれの何れに該当するかを判断する。
【0032】
ここで、ポジションタイプ(PosType)という分類項目は、どのような指のポジションで運指が行なわれるかを示す。また、指開きタイプ(iSpreadType)は、隣接する音符を押鍵する指の開き具合を示す。また、リバースタイプ(RevType)は、後述する指くぐり、或いは、指返し(乗り越え)の存在を示す。さらに、指使いテクニック(Tech)は、隣接する音符を押鍵するときにどのような指使い(指換え)がなされているかを示す。
【0033】
テクニック分類処理では、それぞれの分類項目について、当該分類項目における具体的提要を示す分類値が算出される。図7および図8は、本実施の形態にかかるテクニック分類処理の例を示すフローチャートである。CPU11は、配列me[]中の運指情報「Fig」、音高情報「Pit」および鍵盤位置情報「Pos」について、f1=Fig、p1=Pit、ps1=Posとする。また、音高情報「Pit」に基づき、鍵が白鍵か黒鍵かを判断し、白鍵、黒鍵の何れかを示す情報をb1とする。値b1は、鍵が黒鍵であることを示す値「1」或いは鍵が白鍵であることを示す値「0」の何れかをとる。これら値f1、p1、ps1、b1は、RAM13に格納される。
【0034】
また、CPU11は、配列prev[]中の運指情報「Fig」、音高情報「Pit」および鍵盤位置情報「Pos」について、f2=Fig、p2=Pit、ps2=Posとする。また、音高情報「Pit」に基づき、鍵が白鍵か黒鍵かを判断し、白鍵、黒鍵の何れかを示す情報をb2とする。これら値f2、p2、ps2、b2は、RAM13に格納される。CPU11は、p1、p2、f1およびf2に基づき、音高差を示す指標iDistを算出する(ステップ703)。
【0035】
音高差を示す指標iDistは、楽曲において音符の進行が上行であったときに、指番号が増大あるいは減少しているか、また、進行が下行であったときに、指番号が減少或いは増大しているかを示す指標である。本実施の形態においては、iDistは以下のように求められる。
【0036】
iDist=(p1−p2)*(f1−f2)
したがって、iDist>0である場合には、音符の進行が上行かつ指番号が増大するような指使いである場合、或いは、音符の進行が下行かつ指番号が減少するような指使いである場合を意味している。すなわち、iDist>0である場合には、指が開く形態で運指が行なわれる(指くぐりや指返しが行なわれない)ことを示している。
【0037】
CPU11は、f2=f1かつp2=p1であるかを判断する(ステップ704)。ステップ704でYesとなる場合とは、隣接する音符間で、同じ音高の鍵が同じ指で押鍵されることを示す。ステップ704でYesと判断された場合には、CPU11は、指使いテクニック(Tech)という分類項目について、分類値Techとして、「Tech=3」という値を与える(ステップ705)。与えられた値は、RAM13に格納される。次いで、CPU11は、f2≠f1かつp2=p1であるかを判断する(ステップ706)。ステップ706でYesとなる場合とは、隣接する音符間で、同じ音高の鍵が異なる指で押鍵されることを示す。ステップ706でYesと判断された場合には、CPU11は、指使いテクニック(Tech)という分類項目について、「Tech=2」という値を与える(ステップ707)。
【0038】
次いで、CPU11は、f2=f1かつp2≠p1であるかを判断する(ステップ708)。ステップ708でYesとなる場合とは、隣接する音符間で異なる音高の鍵が同じ指で押鍵されることを示す。ステップ708でYesと判断された場合には、CPU11は、指使いテクニック(Tech)という分類項目について、「Tech=4」という値を与える(ステップ709)。ステップ708でNoと判断された場合には、CPU11は、指使いテクニック(Tech)という分類項目について、「Tech=1」という値を与える(ステップ710)。
【0039】
次に、CPU11は、iDist>0であるかを判断する(ステップ801)。上述したように、iDist>0であることは、指が開く形態で運指が行なわれる(指くぐりや指返しが行なわれない)ことを示している。ステップ801でYesと判断された場合には、CPU11は、b2、b1、f2およびf1に基づいて、所定のテーブルiPType[][][][]に基づいて、分類値PosTypeとして、PosType=iPType[b2][b1][f2][f1]を取得する(ステップ802)。テーブルiPType[][][][]は、隣接する音符について、指番号および白鍵/黒鍵の種別に基づく値を含み、RAM13に格納される。
【0040】
テーブルiPType[][][][]における値について以下に簡単に説明する。テーブルiPtype[][][][]は、隣接する音符に配置すべき指の指番号およびその位置(白鍵或いは黒鍵)の関係に基づいて、その指のポジションタイプを格納したテーブルである。たとえば、現在の音符および一つ前の音符の双方が白鍵であれば、iPType[0][0][f2][f1]=1となる。また、一つ前の音符が親指でかつ白鍵が押鍵されていれば、現在の音符が黒鍵であった場合に、iPType[0][1][1][f1]=2となる。また、一つ前の音符が親指でかつ黒鍵が押鍵されていれば、現在の音符が黒鍵であった場合に、iPType[1][1][1][f1]=3となる。
【0041】
このように、テーブルiPtypeにおいては、隣接する音符を押鍵するときの手のむきや指の位置の難易度が高まるのに応じて、値が大きくなるようになっている。
【0042】
ステップ802が実行された後、CPU11は、指開き特定処理を実行する(ステップ803)。図9は、本実施の形態にかかる指開き特定処理の例を詳細に示すフローチャートである。
【0043】
図9に示すように、CPU11は、指開きの度合いを示すパラメータであるiMin、iL1およびiL2(iMin<iL1<iL2)をRAM13から取得する(ステップ901)。たとえば、iMinは、白鍵での長2度の幅に相当する「2」、iL1は、白鍵での長3度に相当する「4」、iL1は、白鍵での完全8度に相当する「14」である。指開き特定処理においては、iDistと、iMin、iL1およびiL2とを比較して、指開きタイプ(iSpreadType)の分類値を決定していく。
【0044】
CPU11は、鍵盤位置に基づく距離iKDist=|ps2−ps1|を算出する(ステップ902)。
【0045】
ステップ703において算出されたiDist<0である場合には(ステップ903でYes)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、分類値iSpreadTypeとして、「iSpreadType=0」という値を与える(ステップ904)。なお、図9が実行されるときには、iDist>0であることが前提である(図8のステップ801参照)。したがって、これは実際には起こりえないことであるため、ステップ904はエラー処理となる。
【0046】
iKDist=iMinである場合(ステップ905でYes)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、分類値iSpreadTypeとして、「iSpreadType=1」という値を与える(ステップ906)。iMin<iKDist≦iL1である場合(ステップ907でYes)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、「iSpreadType=2」という値を与える(ステップ908)。iKDist<iMinである場合(ステップ909でYes)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、「iSpreadType=3」という値を与える(ステップ910)。
【0047】
iKDist<iL2である場合(ステップ911でYes)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、「iSpreadType=4」という値を与える(ステップ912)。その一方、iKDist≧iL2である場合(ステップ911でNo)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、「iSpreadType=5」という値を与える(ステップ913)。
【0048】
指開き特定処理によって、iKDistの値にしたがって、以下のようなiSpreadTypeの値が付与される。
【0049】
0≦iKDist<Min iSpreadType=3
iKDist=iMin iSpreadType=1
iMin<iKDist≦iL1 iSpreadType=2
iL1<iKDist<iL2 iSpreadType=4
iL2≦iKDist iSpreadType=5
指開き特定処理が終了すると、CPU11は、リバースタイプ(RevType)という分類項目について、分類値RevTypeとして、「RevType=1」という分類値を与える(ステップ804)。その後、CPU11は、配列me[]に格納された楽音データについて算出されたPosType、iSpreadType、RevTypeおよびTechという分類値を、当該楽音データと関連付けて記憶装置(RAM13)に格納する(ステップ805)。
【0050】
ステップ801でNoと判断された場合には、所定のテーブルiRType[][][][]に基づいて、RevType=iRType[p2][p1][f2][f1]を取得する(ステップ806)。テーブルiRType[][][][]は、隣接する音符について、指番号および音高に基づく値を含み、RAM13に格納される。
【0051】
テーブルiRType[][][][]における値について以下に簡単に説明する。テーブルiRtype[][][][]は、隣接する音符に配置すべき指の指番号および音高の関係に基づいて、運指における指くぐりや指返し(乗り越え)を示す情報を格納したテーブルである。本実施の形態において、iDist≦0のときには、上行音形において、「1」より大きな指番号の指から指番号「1」の指に移行すること(いわゆる「指くぐり」)、或いは、下行音形において、指番号「1」の指から「1」より大きな指番号の指に移行すること(いわゆる「指返し」ないし「指の乗り越え」)が行なわれ得ることを意味している。
【0052】
本実施の形態においては、指くぐりのとき、つまり、p2<p1,f2>1、f1=1のときには、iRType[p2][p1][f2][f1]=3となる。また、指返しのとき、つまり、p2>p1、f2=1、f1>1のときには、iRType[p2][p1][f2][f1]=2となる。一般的に、運指において、指返しより指くぐりの方が難しいといわれているため、指くぐりについて、RevType=3、指返しについてRevType=2となるようにしている。
【0053】
ステップ806の後、CPU11は、ポジションタイプ(PosType)という分類項目について、「PosType=1」という分類値、指開きタイプ(iSpreadType)という分類項目について、「iSpreadType=1」という分類値を与える(ステップ807)。その後、CPU11は、配列me[]に格納された楽音データについて算出されたPosType、iSpreadType、RevTypeおよびTechという分類値を、当該楽音データと関連付けて記憶装置(RAM13)に格納する(ステップ805)。
【0054】
次に、2次元マップiFMap[i][j](iは分類項目、jは分類項目において付与された値)において、テクニック分類処理により得られた分類項目に対応する値をインクリメントする処理を実行する(図5のステップ506〜512)。本実施の形態においては、ポジションタイプ(PosType)、指開きタイプ(iSpreadType)、リバースタイプ(RevType)、および、指使いテクニック(Tech)という4つの分類項目が存在する。したがって、2次元のマップiFMap[i][j]のそれぞれの要素は以下の分類項目に対応する。
【0055】
iFMap[0][j]:jが「PosType」の値
iFMap[1][j]:jが「iSpreadType」の値
iFMap[2][j]:jが「RevType」の値
iFMap[3][j]:jが「Tech」の値
なお、以下のステップ506、508、510、512から理解できるように、j=0、2のときの値は存在せず、j>1のみについて値を有する。
【0056】
CPU11は、PosType>1である場合には(ステップ506でYes)、対応するマップの値であるiFMap[0][PosType]をインクリメントする(ステップ507)。また、CPU11は、iSpreadType>1である場合には(ステップ508でYes)、対応するマップの値であるiFMap[1][iSpreadType]をインクリメントする(ステップ509)。CPU11は、RevType>1である場合には(ステップ510でYes)、対応するマップの値であるiFMap[2][RevType]をインクリメントする(ステップ511)。さらに、CPU11は、Tech>1である場合には(ステップ512でYes)、対応するマップの値であるiFMap[3][Tech]をインクリメントする(ステップ513)。
【0057】
次いで、CPU11は、ノート数(音符数)を示すパラメータiCntをインクリメントして(ステップ514)、配列me[]に、次の楽音データのレコードを格納し(ステップ515)、その後、ステップ503に戻る。
【0058】
ステップ503でYesと判断された場合には、CPU11は、パラメータiおよびiFCostを「0」に初期化する(ステップ601)。CPU11は、パラメータiが「4」以上であるかを判断する(ステップ602)。上記パラメータiは、iFMap[i][j]の「i」を特定するためのものである。ステップ602でNoと判断された場合には、パラメータjを「0」に初期化して(ステップ603)、jが所定数より大きくなるまで(ステップ604)、ステップ605〜607の処理を繰り返す。
【0059】
CPU11は、マップの値iFMap[i][j]が「0」より大きいかを判断する(ステップ605)。ステップ605でYesと判断された場合には、CPU11は、マップの値iFMap[i][j]に対応付けられたコスト値iFCost[i][j]を、運指難易度の値iFCostに加算する(ステップ606)。
【0060】
以下、コスト値iFCost[i][j]を格納したコストテーブル(iFCost[][][])について説明する。コストテーブルは、コスト値iFCost[i][j]のそれぞれに対応する、「i×j」個のコスト値iFCost[i][j]を格納している。たとえば、iFCost[0][j]は、テクニック分類処理(図8)のステップ802で取得された「PosType」の値のそれぞれに対応するコスト値であり、ポジションタイプのそれぞれの値に固有の値となっている。i=1以上の他のコスト値も同様である。
【0061】
本実施の形態においては、ポジションタイプ「PosType」、指開きタイプ「iSpreadType」、リバースタイプ「RevType」および指使いテクニック「Tech」のそれぞれにおいて、値が大きくなるのにしたがって、それぞれの分類項目において運指の困難度が高まるようになっている。したがって、コスト値iFCost[i][j]も、jが増大するのにしたがって、コスト値が増大するようになっている。
【0062】
また、本実施の形態においては,マップの値iFMap[i][j]が幾つであるかは考慮せず、0より大きければ(すなわち1以上であれば)、コスト値iFCost[i][j]を、運指難易度の値iFCostに加算している。すなわち、マップの値の多寡にかかわらず、加算される値はコスト値iFCost[i][j]である。これは、分類項目「i」(例えば、ポジションタイプや指開きタイプ)において、iFMap[i][j]において1より大きい値を有する音符が1つあれば、その場合には、当該iFMap[i][j]に対応する難易度を含むため、そのノートの数は、難易度を示すコスト値にそれほど大きく影響しないであろうという知見に基づく。
【0063】
無論、マップの値iFMap[i][j]に応じて、加算されるiFCost[i][j]に重みを与えても良い。つまりこの場合には、
iCost=iCost+
f(iFCost[i][j])×iFCost[i][j]
となる。ここで、f(iFCost[i][j])は、変数iFCost[i][j]が増大するのにしたがって増大するが、変数iFCost[i][j]が増大するのにしたがって、関数値fの増分は小さくなっていく関数である。たとえば、fとして対数関数を使用しても良い。
【0064】
ステップ605でNoと判断された場合、或いは、ステップ606が実行された後、CPU11は、jをインクリメントして(ステップ607)、ステップ604に戻る。また、ステップ604でYesと判断された場合には、CPU11は、iをインクリメントして(ステップ608)、ステップ602に戻る。
【0065】
このように本実施の形態においては、楽曲に含まれるあるノートが、運指に関する分類項目の具体的態様についてのマップ値iFMap[i][j]が「0」でない場合には、当該分類項目の具体的態様に対応するコスト値iFCost[i][j]が、運指難易度iFCostに加算される。
【0066】
次に、リズム難易度評価処理について説明する。図10および図11は、本実施の形態にかかるリズム難易度評価処理の例を示すフローチャートである。図10に示すように、CPU11は、RAM13の楽曲データ中、最初の楽音データのレコードNote[0]を、配列me[]に格納する(ステップ1001)。CPU11は、楽曲データにおいて全ての楽音データのレコードについて処理が終了するまで(ステップ1002でYes)、ステップ1003〜1007を繰り返す。
【0067】
CPU11は、RAM13に格納された、リズム評価処理用のパラメータ(リズムパラメータ)を取得する(ステップ1003)。リズムパラメータには、1小節の長さを示すiMeasLen、リズムの分解能を示すResolutionなどが含まれ、これらは、次のリズムコスト算出処理において利用される。CPU11は、リズムコスト算出処理を実行する(ステップ1004)。図12および図13は、本実施の形態にかかるリズムコスト算出処理の例を示すフローチャートである。リズムコスト算出処理においては、音符の音符長(次の音符までの間隔に基づく音符長)に相当する分類項目であるステップタイム(iStepTime)についての分類値と、音符の小節中の位置に相当する分類項目であるポジション(iPos)についての分類値とが得られる。
【0068】
図12に示すように、CPU11は、配列me[]に示す楽音データのレコードの、次のレコードを参照して、その発音時刻Timeを取得する(ステップ1201)。次いで、CPU11は、配列me[]中の発音時刻Timeと、ステップ1201で取得した次の発音データのレコードにおける発音時刻Timeとに基づいて、次の音符までの間隔iTを算出する(ステップ1202)。CPU11は、時間間隔iTと、1小節の長さiMeasLenとに基づいて、上記時間間隔の小節内での音符長iStepTimeを算出する(ステップ1203)。得られたiStepTimeが、音符長という分類項目についての分類値となる。
【0069】
本実施の形態において、音符長iStepTimeは以下のように求められる。
【0070】
iStepTime=32×iT/iMeasLen
本実施の形態においては、楽曲は4/4拍子としており、iStepTimeは、iTが32分音符いくつ分に相当するかを示している。
【0071】
次いで、CPU11は、配列me[]中の発音時刻Timeに基づき、小節内の音符位置iTickInMeas、拍内での音符位置iTickInBeatおよび当該音符の属する拍iBeatを算出する(ステップ1304)。iTickInMeasは、1小節を32分割したときの音符の位置、つまり、小節の先頭から32分音符でいくつ目に位置しているかを示す。また、iTickInBeatは、拍の先頭から32分音符でいくつ目に位置しているかを示す。
【0072】
CPU11は、パラメータiおよびiPosを「0」に初期化して(ステップ1205)、iが8未満である限り(ステップ1206でYes)、ステップ1207から1210の処理を実行する。CPU11は、iTickInBeatの位置を特定するために、a=iTickInBeat−iResolution×i/8を算出する(ステップ1207)。ここで、iTickInBeatは、「0」〜「7」の何れかの値をとる。したがって、いずれかのiについて、a=0となり、次のステップ1208でYesと判断される。ステップ1208でNoと判断された場合には、CPU11は、パラメータiをインクリメントして(ステップ1209)、ステップ1206に戻る。ステップ1208でYesと判断された場合には、CPU11は、パラメータiPos=iとする(ステップ1210)。
【0073】
ステップ1206でNoと判断された場合、或いは、ステップ1210の処理が終了した後、図13のステップ1301に進む。なお、本実施の形態においては、ステップ1204においてiTickInBeatの算出の際に、32分音符の分解能にクォンタイズされる。したがって、ステップ1210においてNoと判断されることは本来ありえない。したがって、この場合は、演算において何らかのエラーが生じたことになる。
【0074】
このようにして得られたiPosは、音符が、拍の頭から32分音符で何番目の位置にあるかを示すものである。これをそのまま使って良いが、本実施の形態においては、小節の先頭、小節の中央および拍の先頭として、iPosとして異なる値を与える。iTickInMeas=0の場合、すなわち、音符が拍の先頭に位置している場合には(ステップ1301でYes)、CPU11は、iPos=32とする(ステップ1302)。また、iTickInBeat=0かつiBeat=2、つまり、音符が3拍目の先頭(小節の中央)に位置している場合には(ステップ1303でYes)、CPU11は、iPos=16とする(ステップ1304)。さらに、iTickInBeat=0、つまり、音符が2拍目或いは4拍目の先頭に位置している場合には(ステップ1305でYes)、CPU11は、iPos=8とする(ステップ1306)。
【0075】
リズムコスト算出処理によって得られる分類項目の1つであるポジション(iPos)の分類値は、音符の小節中の位置によって以下のような値をとる。
【0076】
音符の位置が、小節の先頭:iPos=32
音符の位置が、3拍目の先頭:iPos=16
音符の位置が、他の拍(2拍目、4拍目)の先頭:iPos=8
音符の位置が他の場合:iPos=拍を8等分した場合の位置を示す値
上記iPosは、楽曲が4/4拍子の場合の例であり、他の拍子(たとえば、3/4)の場合には、iPosは異なる。楽曲が3/4拍子であれば、分類値「iPos」は以下の値をとり得る。
【0077】
音符の位置が、小節の先頭:iPos=32
音符の位置が、他の拍(2拍目、3拍目)の先頭:iPos=8
音符の位置が他の場合:iPos=拍を8等分した場合の位置を示す値
リズムコスト算出処理が終了すると、CPU11は、2次元マップの値であるiRMap[0][iStepTime]をインクリメントする(ステップ1005)とともに、iRMap[1][iPos]をインクリメントする(ステップ1006)。その後、CPU11は、配列me[]に、次の楽音データのレコードを格納し(ステップ1007)、その後、ステップ1002に戻る。
【0078】
ステップ1002でYesと判断された場合には、CPU11は、パラメータiおよびiRCostを「0」に初期化する(ステップ1101)。CPU11は、パラメータiが「2」以上であるかを判断する(ステップ1102)。上記パラメータiは、iRMap[i][j]の「i」を特定するためのものである。ステップ1102でNoと判断された場合には、パラメータjを「0」に初期化して(ステップ1103)、jが所定数より大きくなるまで(ステップ1104)、ステップ1105〜1107の処理を繰り返す。
【0079】
CPU11は、マップ値iRMap[i][j]が「0」より大きいかを判断する(ステップ1105)。ステップ1105でYesと判断された場合には、CPU11は、マップの値iRMap[i][j]に対応付けられたコスト値iRCost[i][j]を、運指難易度の値iRCostに加算する(ステップ1106)。
【0080】
以下、コスト値iRCost[i][j]を格納したコストテーブルiRCost[][]について説明する。運指難易度についてのコスト値iR[i][j]を格納したコストテーブルと同様に、コストテーブルiRCost[][]は、コスト値iRCost[i][j]のそれぞれに対応する、「i×j」個のコスト値iRCost[i][j]を格納している。たとえば、iRCost[0][j]は、リズムコスト算出処理(図12)のステップ1203で取得された音符長iStepTimeのそれぞれに対応するコスト値であり、音符長のそれぞれに固有の値となっている。また、iRCost[1][j]は、ステップ1210、ステップ1302、1304、1306で得られた拍内の音符位置iPosのそれぞれに対応するコスト値であり、音符位置のそれぞれに固有の値となっている。
【0081】
たとえば、iRCost[0][iStepTime]においては、iStepTime=32、16、8、4、および、それら以外の値、について、コスト値iRCost[0][iStepTime]が増大するようになっている。つまり、音符長が、全音符であるとき、そのコスト値iRCost[0][32]がもっとも小さく、2分音符、4分音符、8分音符、その他の音符となるのにしたがって、コスト値は大きくなる。
【0082】
また、iRCost[1][iPod]においても、iPos=32、16、8、それら以外の値、について、コスト値iRCost[1][iPos]が増大するようになっている。つまり、音符が小節の先頭に位置するとき、そのコスト値iRCost[1][32]がもっとも小さく、3拍目の先頭、2拍目或いは4拍目の先頭、その他の位置となるのにしたがって、コスト値は大きくなる。
【0083】
運指難易度コストの算出と同様に、マップの値iRMap[i][j]が幾つであるかは考慮せず、0より大きければ(すなわち1以上であれば)、コスト値iRCost[i][j]を、リズム難易度の値iRCostに加算している。すなわち、マップの値の多寡にかかわらず、加算される値はコスト値iRCost[i][j]である。
【0084】
ステップ1105でNoと判断された場合、或いは、ステップ1106が実行された後、CPU11は、jをインクリメントして(ステップ1107)、ステップ1104に戻る。また、ステップ1104でYesと判断された場合には、CPU11は、iをインクリメントして(ステップ1108)、ステップ1102に戻る。
【0085】
このように本実施の形態においては、音符についてのリズム、特に、音符長および音符位置のそれぞれについて、対応するコスト値iRCost[i][j]が、リズム難易度iRCostに加算される。
【0086】
次に、本実施の形態にかかる調性難易度評価処理について説明する。図14および図15は、本実施の形態にかかる調性難易度評価処理の例を示すフローチャートである。図15に示すように、CPU11は、配列me[]に先頭の楽音データのレコードを格納する(ステップ1401)。CPU11は、楽曲データにおいて全ての楽音データのレコードについて処理が終了するまで(ステップ1402でYes)、ステップ1403、1404を繰り返す。
【0087】
CPU11は、配列me[]中の音高情報「Pit」に基づいて、カウント値iPC[Pit mod 12]をインクリメントする(ステップ1403)。ステップ1403においては、音符の、CからBまでの何れかの音名に対応するカウント値iPCがインクリメントされる。次いで、CPU11は、配列me[]に次の楽音データのレコードを格納して(ステップ1404)、ステップ1402に戻る。ステップ1402〜1404の処理によって、楽曲に含まれるノート(音符)の音名のそれぞれについて、累算値を格納した配列iPC[]が取得される。
【0088】
ステップ1402でYesと判断された場合には、CPU11は、パラメータiTonality、iMax,iATMaxおよびiを「0」に初期化する(ステップ1405〜1407)。CPU11は、パラメータiが12以上になるまで(ステップ1408でNo)、図15のステップ1501〜1512を実行する。
【0089】
図15に示すように、CPU11は、パラメータiSumおよびiATonalityを「0」に初期化する。ここに、iSumは、楽曲が含んでいたノート(音符)の音名の累算値と、各調の長音階との一致度を示すパラメータであり、iATonalityは、上記音名の累算値と、各調の長音階との不一致度を示すパラメータである。なお、本実施の形態においては、長音階の楽曲について、各調の長音階との一致度、不一致度を見出しているが、これに限定されるものではない。短音階の楽曲については、各調の短音階との一致度や不一致度を見出せば良い。
【0090】
CPU11は、パラメータjを「0」に初期化して(ステップ1504)、iSumに、iPC[(j+i) mod 12]×iBaseScale[j]を加算する。また、CPU11は、iATonalityに、iPC[(j+i) mod 12]×iATonal[j]を加算する(ステップ1505)。その後、CPU11はjをインクリメントしてステップ1503に戻る。
【0091】
図17(a)は、本実施の形態にかかるベーススケール配列iBaseScale[]の例を示す図である。図17(a)に示すように、iBaseScale[](符号1701)は、11個の要素(j=0〜11)を有し、長音階の音名に相当する要素(j=0、2、4、5、7、9、11)が「1」となり、それ以外が「0」となっている。なお、図17(a)において、配列の要素の上に配置された数字、♭(フラット)、#(シャープ)は、最も左のj=0の要素(根音)に対する間隔(度)を示している。また、図17(b)は、本実施の形態にかかる非ベーススケール配列iATonal[]の例を示す図である。iATonal[](符号1702参照)は、iBaseScale[]1701と同様に、11個の要素(j=0〜11)を有し、その値は、iBaseScaleと逆となっている。すなわち、長音階の音名に該当しない要素(j=1、3、6、8、10)が「1」となり、それ以外が「0」となっている。
【0092】
以下、ステップ1504における、iSumに加算される値iPC[(j+i) mod 12]×iBaseScale[j]について説明する。たとえば、図18において、符号1801は、ステップ1402〜1404で得られた配列iPC[]の例を示す図、符号1802は、ベーススケール配列iBaseScale[]の例を示す図である。
【0093】
iPC[j+i mod 12]×iBaseScale[j]において、i=0のときには、j=0、2、4、5、7、9において、0以外の値をとり、全てのjについて処理が実行された場合のiSumの最終値は、
iSum=Σ(iPC[j mod 12]×iBaseScale[j])
=7+2+3+10+4+5=31となる。
【0094】
i=1のときには、j=4、5、9、11において、0以外の値をとり、全てのjについて処理が実行された場合のiSumの最終値は、
iSum=1+3+5+8=17となる。
【0095】
また、i=5のときには、j=0、2、4、5、7、9、22において、0以外の値をとり、全てのjについて処理が実行された場合のiSumの最終値は、
iSum=10+4+5+8+7+2+3=39となる。
【0096】
さらに、i=7のときには、j=0、2、5、7、9において、0以外の値をとり、全てのjについて処理が実行された場合のiSumの最終値は、
iSum=4+5+7+2+3=22となる。
【0097】
iATonalityにiPC(j+i mod 12)×iATonal[j]を加算する演算も、iSumの演算と同様に実行され得る。
【0098】
図19において、符号1901は、ステップ1402〜1404で得られた配列iPC[]の例を示す図、符号1902は、非ベーススケール配列iATonlity[]の例を示す図である。配列iPC[]は、図18の符号1801と同様である。
【0099】
i=0のときには、iATonalityの最終値
iATonality=Σ(iPC[j mod 12]×iATonal[j]
=1+5+8=14となる。
【0100】
また、i=1のときのiATonalityの最終値は、
iATonality=7+2+10+4+5=28(符号1903参照)
i=5のときのiATonalityの最終値は、
iATonality=5+1=6(符号1904参照)
i=7のときのiATonalityの最終値は、
iATonality=5+8+1+10=24(符号1905参照)となる。
【0101】
ステップ1503でNoと判断された場合、つまり、特定のiについて、j=0〜11のiSumおよびiATonalityが算出された場合には、CPU11は、一致度iSumと不一致度iATonalityの差分値a(=iSum−iATonality)を算出する(ステップ1507)。
【0102】
CPU11は、ステップ1507において得られた差分値aが、RAM13に記憶された差分値aの最大値iMaxより大きいかを判断する(ステップ1508)。ステップ1508でYesと判断された場合には、CPU11は、差分値aを最大値iMaxとしてセットし(ステップ1509)、かつ、最大値iMaxを得たときの調性を示すパラメータiTonalityにiをセットする(ステップ1510)。また、CPU11は、得られた不一致度iATonalityを、iSumの最大値が得られたときの対応する不一致度iATMaxとしてセットする(ステップ1511)。
【0103】
ステップ1508でNoと判断された場合、または、ステップ1511が実行された後に、CPU11は、iをインクリメントして、ステップ1408に戻る。ステップ1408でNoと判断された場合には、CPU11は、調性難易度を示すiTCostを以下のように算出する(ステップ1409)。
【0104】
iTCost=(iATMax×A)/iMax
ここに、Aは所定の定数である。したがって、iTCostは、調性の一致度が最大となったときの、音符の音階との一致度iSumとそのときの不一致度iATonalityとの差分値に対する、そのときの不一致度の比に、定数Aを乗じたものとなる。
【0105】
先に説明したように、運指難易度iFCost、リズム難易度iRCostおよび調性難易度iTCostが算出されると、これら難易度および楽曲のノート数iCntに基づいて、以下のように楽曲の難易度iCostが算出される。
【0106】
iCost=iFCost×RF+iRCost×RR
+iTCost×RT+iCnt×RC
次に、本実施の形態にかかる難易度表示処理について説明する。難易度評価処理(ステップ204)が終了し、新たな楽曲指定の入力が無かった場合(ステップ202でNo)、CPU11は、難易度表示処理を実行する(ステップ205)。難易度表示処理205では、難易度iCostが算出された楽曲について、音符ごとに対応する難易度を示す印を付した楽譜を生成して、表示装置16の画面上に表示する。本実施の形態においては、音符ごとの運指難易度を楽譜上に示している。
【0107】
図20は、本実施の形態にかかる難易度表示処理の例を示すフローチャートである。図20に示すように、CPU11は、配列me[]に先頭の楽音データのレコードを格納する(ステップ2001)。CPU11は、楽曲データにおいて全ての楽音データのレコードについて処理が終了するまで(ステップ2002でYes)、ステップ2003〜2009を繰り返す。
【0108】
CPU11は、配列me[]中の音高情報「Pit」、発音時刻「Time」および発音時間「Gate」に基づいて、画像において、五線譜中の所定の位置に所定の音長の音符を配置する(ステップ2003)。また、CPU11は、配列me[]中の運指情報「Fig」に基づいて、画像において、音符の上部に指番号を配置する(ステップ2004)。次いで、CPU11は、me[]で特定される楽音データに関連付けられて、RAM13に記憶されたポジションタイプ(PosType)、指開きタイプ(iSpreadType)、リバースタイプ(RevType)、指使いテクニック(Tech)のそれぞれの分類項目についての分類値を取得する(ステップ2005)。
【0109】
次いで、CPU11は、それぞれの値の何れかが「1」より大きいかを判断する(ステップ2006)。ステップ2006でYesと判断された場合には、CPU11は、該当する分類項目を示す印を、音符の上部に配置する(ステップ2007)。たとえば、PosType>1であれば「P」、iSpreadType>1であれば「S」、RevType>1であれば「R」、Tech>1であれば「T」という印が、画像において音符の上部に配置される。
【0110】
さらに、CPU11は、音符に印が付された分類項目に対応する色彩を付与する(ステップ2008)。たとえば、PosType>1であれば赤、iSpreadType>1であれば水色、RevType>1であれば黄緑、Tech>1であれば桃色という色彩が音符に付与される。なお、PosTypeおよびiSpreaTypeの双方とも、1より大きい値を持っていた場合には、PosTypeについてのコスト値iFCost[0][PosType]と、iSpreadTypeについてのコスト値iFcost[1][iSpreadType]とを比較して、コスト値の大きい方の分類項目に対応する色彩が選択される。
【0111】
その後、CPU11は、配列me[]に次の楽音データのレコードを格納して(ステップ2009)、ステップ2002に戻る。
【0112】
図21は、本実施の形態にかかる難易度表示処理により生成された楽譜の画像の例を示す図である。図21に示すように、楽曲を構成する音符の上部には、1〜5の指番号が表示されるとともに、特定の音符においては、分類項目に対応する印(「P」、「S」、「R」、「T」)が音符の上部に付加されている。また、図21では表われていないが、印「T」が付された音符(たとえば、第2小節第3拍の「G4」)には、対応する色彩である桃色が付されている。同様に、印「S」が付された音符(たとえば、第3小節第1拍の「E5」)には、対応する色彩である水色が付され、印「R」が付された楽譜(たとえば、第7小節第1拍の「F#4」、第2拍の「G4」)には、対応する色彩である黄緑色が付される。
【0113】
さらに、印「S」および「P」の双方が付されている音符(たとえば、第3小節の第3.5拍の「F#5」、第4小節の第1拍の「G5」)においては、コスト値の大きい方の分類項目(この場合には、PosType)の色彩(この場合には、赤色)が付される。
【0114】
上述したように、本実施の形態においては、CPU11により、音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出処理、音符についての時間情報に基づいて、音符長および音符のタイミングに関するリズム難易度を算出するリズム難易度算出処理、音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出処理、並びに、運指難易度、リズム難易度および調性難易度に基づき、楽曲の難易度を算出する全体難易度の算出処理が実行される。したがって、運指だけではなく、楽曲を構成するリズム、調性を含む要素を考慮した楽曲の難易度を算出することが可能となる。
【0115】
また、本実施の形態においては、運指難易度算出処理において、CPU11は、隣接する音符を押鍵するときの指のポジションに関する第1の分類項目(PosType)について、当該分類項目における具体的態様を示す第1の分類値、隣接する音符を押鍵するときの指の開き具合に関する第2の分類項目(iSpredType)について、当該第2の分類項目における具体的態様を示す第2の分類値、指くぐり或いは指返しに関する第3の分類項目(RevType)について、当該第3の分類項目における具体的態様を示す第3の分類値、および、隣接する音符を押鍵するときの指換えに関する第4の分類項目(Tech)について、当該第4の分類項目における具体的態様を示す第4の分類値を取得する。また、CPU11は、分類項目のそれぞれにおいて、分類項目における分類値(PosType、iSpreadType、RevType、Tech)に基づいて、分類項目における前記具体的態様に対するコスト値を格納した、記憶装置中のコストテーブルiFCost[][]から、分類項目における具体的態様に対するコスト値iFCost[i][j]を取得し、コスト値を累算し、累算されたコスト値を運指に関する難易度iFcostとして取得する。
【0116】
上述したように、本実施の形態によれば、運指を規定する種々の分類項目のそれぞれについて、その具体的態様に基づくコスト値を取得することができる。したがって、実際の運指の困難さに沿った適切な難易度を算出することができる。
【0117】
また、本実施の形態においては、上記第1の分類項目の分類値の取得において、CPU11は、音符ごとに、分類項目中の分類値が所定の値であるときに、分類項目の分類値のカウント値を、マップ値として格納するカウントマップiFMap[][]において、対応するカウント値iFMap[i][j]を増分させ、また、コスト累算において、CPU11は、カウントマップiFMap[][]中のカウント値iFMap[i][j]を参照して、カウント値が「1」以上であるときに、コストテーブルiFCost[][]中の、対応するコスト値iFCost[i][j]をiFCostに加算する。したがって、コストテーブルiFCost[][]にコスト値を格納しておくことで、分類項目中の具体的態様に対応した適切なコスト値を取得することが可能となる。
【0118】
また、本実施の形態においては、リズム難易度算出処理において、CPU11は、音符長に関する第5の分類項目(iStepTime)について、当該分類項目における具体的態様を示す第5の分類値、音符の小節中の位置に関する第6の分類項目(iPos)について、当該分類項目における具体的態様を示す第6の分類値を取得する。また、CPU11は、分類項目のそれぞれにおいて、分類項目における分類値に基づいて、分類項目における具体的態様に対するコスト値を格納した、記憶装置中のコストテーブルiRCost[][]から、分類項目における具体的態様に対するコスト値iRCost[i][j]を取得して、コスト値を累算し、累算されたコスト値をリズムに関する難易度iRCostとして取得する。
【0119】
上述したように、本実施の形態によれば、音符のリズムを規定する種々の分類項目のそれぞれについて、その具体的態様に基づくコスト値を取得することができる。したがって、実際に演奏する際のリズムの困難さに沿った適切な難易度を算出することができる。
【0120】
また、本実施の形態によれば、調性難易度算出処理において、CPU11は、音符の音高情報に基づいて前記楽曲の調性を特定し、特定された調性の音階と楽曲中の音符の音高との一致度iSum、および、特定された調性の音階と楽曲中の音符の音高との不一致度iATonalityに基づき調性難易度を算出する。したがって、単なる調性自体の難易度ではなく、楽曲を構成する音符と音階との関係に基づく調性難易度を取得することができる。
【0121】
特に、本実施の形態においては、調性難易度算出ステップにおいて、CPU11は、一致度iSumと不一致度iATonalityとの差異(iSum−iAtonality)に対する不一致度iAtonalityの割合に基づいて、調性難易度を算出する。したがって、より適切な楽曲の調性難易度を得ることが可能となる。
【0122】
また、本実施の形態においては、難易度表示処理において、CPU11は、楽曲を構成する音符のそれぞれについて、当該音符に関連付けられた、運指に関する分類項目の分類値が所定の値であるときに、音符が当該分類項目に該当することを示す印を含むような楽譜を含む画像データを生成して、表示装置16の画面上に表示する。これにより、操作者(演奏者)は、楽曲において運指上、所定の難易度を持つような音符を容易に知ることができる。
【0123】
次に、本発明の第2の実施の形態ついて説明する。第2の実施の形態においては、難易度算出処理(図2のステップ204)中、全体難易度の算出において、楽曲のテンポを校了している。また、第2の実施の形態においては、楽曲データ中に、楽曲のテンポを示す値BPM(Beat per Minite)が含まれる。図22は、第2の実施の形態にかかる難易度評価処理の概略を示すフローチャートである。図22において、ステップ2201〜2203は、図4のステップ401〜403と同様である。したがって、第1の実施の形態と同様の運指難易度iFCost、リズム難易度iRCostおよび調性難易度iTCostが算出される。
【0124】
ステップ2201〜2203が終了すると、CPU11は、運指難易度に関する係数RFを調整する(ステップ2204)。本実施の形態においては、係数RFは以下の式に基づいて調整される。
【0125】
RF=RF×(0.5+0.5×(BPM/120))
すなわち、基準テンポを120(毎分120ビート)としたときの楽曲のテンポの比に基づいて、RFの半分にBPM/120という重みを付けることで、RFを調整している。
【0126】
また、CPU11は、リズム難易度に関数係数RRを調整する(ステップ2205)。本実施の形態においては、係数RRは以下の式に基づいて調整される。
【0127】
RR=RR×BPM/120
すなわち、基準テンポを120(毎分120ビート)としたときの楽曲のテンポの比を重みとして、RRに当該重みを付与することでRRを調整している。つまり、リズム難易度に用いられる係数RRは、運指難易度に用いられる係数RFと比較して、テンポがより係数値に直接的に反映されるようになっている。
【0128】
その後、CPU11は、CPU11は、算出した運指難易度iFCost、リズム難易度iRCost、調性難易度iTCostおよび楽曲データ中のノート数(iCnt)に基づいて、それぞれに、調整された重み係数RFおよびRR、予め定められた重み係数RTおよびRCを乗じて加算することで楽曲の難易度iCostを算出する(ステップ2206)。
【0129】
第2の実施の形態によれば、全体難易度の算出処理において、CPU11は、運指難易度iFCostおよびリズム難易度iRCostのそれぞれに、楽曲のテンポBPMに応じた重みを与え、重みが与えられた運指難易度およびリズム難易度により全体難易度を算出する。したがって、テンポも考慮したより適切な難易度の算出が可能となる。
【0130】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【0131】
たとえば、第1の実施の形態にかかる難易度表示処理においては、音符ごとの運指難易度に関する分類項目の分類値を記憶装置(RAM13)に格納し、当該分類値に基づいて、音符ごとに運指難易度に関する表示を行なっていた。本発明はこれに限定されず、他の難易度、たとえば、リズム難易度に関する表示も可能である。
【0132】
図23は、本発明の第3の実施の形態にかかるリズムコスト算出処理の後半部分の例を示すフローチャートである。図23は、図12に示すリズムコスト算出処理のステップ1206でNoの場合、或いは、ステップ1210が終了した場合に開始される。図23のステップ2301〜2306は、図13のステップ1301〜1306と同様である。ステップ2302、2304、2306が終了した後、或いは、ステップ2305でNoと判断された場合には、CPU11は、配列me[]に格納された楽音データについて算出された音符長を示すiStepTime、および、音符の小節中の位置示すiPosという分類値を、当該楽音データと関連付けて記憶装置(RAM13)に格納する(ステップ2307)。
【0133】
図24は、本発明の第3の実施の形態にかかる難易度表示処理の例を示すフローチャートである。図24において、ステップ2401〜2404は、図20のステップ2001〜2004と同様である。ステップ2404の後、CPU11は、CPU11は、me[]で特定される楽音データに関連付けられて、RAM13に記憶された音符長を示すiStepTime、および、音符の小節中の位置示すiPosというそれぞれの分類項目についての分類値を取得する(ステップ2405)。
【0134】
次いで、CPU11は、iStepTimeが所定の値であるか、或いは、iPosが所定の値であるかを判断する(ステップ2406)。たとえば、iStepTimeが、「32」、「16」、「8」、「4」以外の値である場合に、ステップ2406でYesと判断される。また、iPosが、「32」、「16」、「8」以外の値である場合に、ステップ2406でYesと判断される。ステップ2406でYesと判断された場合には、CPU11は、該当する分類項目を示す印を、音符の上部に配置する(ステップ2407)。たとえば、iStepTimeが所定の値であれば「T」という印が、iPosが所定の値であれば「P」という印が、画像において音符の上部に配置される。
【0135】
さらに、CPU11は、音符に印が付された分類項目に対応する色彩を付与する(ステップ2408)。その後、CPU11は、配列me[]に次の楽音データのレコードを格納して(ステップ2409)、ステップ2402に戻る。
【0136】
第3の実施の形態によれば、難易度表示処理において、CPU11は、楽曲を構成する音符のそれぞれについて、当該音符に関連付けられた、リズムに関する分類項目の分類値が所定の値であるときに、音符が当該分類項目に該当することを示す印を含むような楽譜を含む画像データを生成して、表示装置16の画面上に表示する。これにより、操作者(演奏者)は、楽曲においてリズムについて、所定の難易度を持つような音符を容易に知ることができる。
【符号の説明】
【0137】
10 楽曲難易度評価装置
11 CPU
12 ROM
13 RAM
14 大規模記憶装置
15 入力装置
16 表示装置
17 サウンドシステム
18 鍵盤
【技術分野】
【0001】
本発明は、楽曲の難易度を評価する楽曲難易度評価装置および楽曲難易度評価プログラムに関する。
【背景技術】
【0002】
従来、楽曲の難易度を評価するときに、音楽教育の専門家や演奏家が、その楽曲における種々の要素、たとえば、音符の連なりなどに基づいて、主観的な評価を行なっていた。従来の主観的な評価では、たとえば、楽曲の構成要素についての客観的な難易度は存在せず、楽曲全体としての評価(たとえば、10段階評価など)がなされているに過ぎない場合が多かった。
【0003】
これに対して、楽曲を鍵盤楽器にて演奏する際の運指情報に基づいて、当該運指の難易度を算出する装置が提案されている。特許文献1には、ある音程の2音を2つの指にて押さえるような全ての場合を想定し、当該全ての場合のコストを定義し、運指情報が示す運指を行なう上での難易度を算出する難易度算出方法が提案されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2006−78656号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来の難易度を算出する装置では、2音を2つの指にて押さえるような全ての場合の全てについてコスト値を定義するのが容易ではないという問題点があった。また、楽曲の難易度は運指のみではなく、他にも種々の要素が存在する。したがって、他の要素も考慮したうえで難易度を算出することが望ましい。
【0006】
本発明は、楽曲を構成する種々の要素を考慮して、適切に楽曲の難易度を算出する楽曲難易度算出装置および楽曲難易度算出プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の目的は、楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段と、
前記音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出手段と、
前記音符についての時間情報に基づいて、当該音符長および音符のタイミングに関するリズム難易度を算出するリズム難易度算出手段と、
前記音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出手段と、
前記運指難易度算出手段により算出された運指難易度、前記リズム難易度算出手段により算出されたリズム難易度および調性難易度算出手段により算出された調性難易度に基づき、楽曲の難易度を算出する全体難易度算出手段と、を備えたことを特徴とする楽曲難易度算出装置により達成される。
【0008】
好ましい実施態様においては、前記運指難易度算出手段が、
隣接する音符を押鍵するときの指のポジションに関する第1の分類項目について、当該分類項目における具体的態様を示す第1の分類値、隣接する音符を押鍵するときの指の開き具合に関する第2の分類項目について、当該第2の分類項目における具体的態様を示す第2の分類値、指くぐり或いは指返しに関する第3の分類項目について、当該第3の分類項目における具体的態様を示す第3の分類値、および、隣接する音符を押鍵するときの指換えに関する第4の分類項目について、当該第4の分類項目における具体的態様を示す第4の分類値のうち、少なくとも1つの分類項目についても分類値を取得する第1の分類項目値取得手段と、
前記分類項目のそれぞれにおいて、前記分類項目における分類値に基づいて、前記分類項目における前記具体的態様に対するコスト値を格納した、前記記憶手段中のコストテーブルから、前記分類項目における前記具体的態様に対するコスト値を取得し、前記コスト値を累算し、前記累算されたコスト値を前記運指に関する難易度として取得する第1のコスト累算手段と、を有する。
【0009】
また、より好ましい実施態様においては、前記第1の分類項目値取得手段が、前記音符ごとに、前記分類項目中の分類値が所定の値であるときに、前記分類項目の分類値のカウント値を格納する、前記記憶手段中のカウントマップにおいて、対応するカウント値を増分させ、
前記第1のコスト累算手段が、前記カウントマップ中のカウント値を参照して、前記カウント値が「1」以上であるときに、前記コストテーブル中の、前記対応するコスト値を累算するように構成されている。
【0010】
また、好ましい実施態様においては、前記リズム難易度算出手段が、音符長に関する第5の分類項目について、当該分類項目における具体的態様を示す第5の分類値、音符の小節中の位置に関する第6の分類項目について、当該分類項目における具体的態様を示す第6の分類値のうち、少なくとも1つの分類項目についても分類値を取得する第2の分類項目値取得手段と、
前記分類項目のそれぞれにおいて、前記分類項目における分類値に基づいて、前記分類項目における前記具体的態様に対するコスト値を格納した、前記記憶手段中のコストテーブルから、前記分類項目における前記具体的態様に対するコスト値を取得するとともに、当該コスト値を累算し、前記累算されたコスト値を前記リズムに関する難易度として取得する第2のコスト累算手段と、を有する。
【0011】
別の好ましい実施態様においては、前記調性難易度算出手段が、
前記音符の音高情報に基づいて前記楽曲の調性を特定し、
前記特定された調性の音階と前記楽曲中の音符の音高との一致度、および、前記特定された調性の音階と前記楽曲中の音符の音高との不一致度に基づき前記調性難易度を算出するように構成されている。
【0012】
より好ましい実施態様においては、前記調性難易度算出手段が、
前記一致度と不一致度との差異に対する前記不一致度の割合に基づいて、前記調性難易度を算出する。
【0013】
また、好ましい実施態様においては、前記楽音データが、楽曲のテンポを示すデータを含み、前記全体難易度算出手段が、前記運指難易度およびリズム難易度のそれぞれに、前記楽曲のテンポに応じた重みを与え、重みが与えられた運指難易度およびリズム難易度により全体難易度を算出するように構成されている。
【0014】
また、別の好ましい実施態様においては、前記第1の分類値取得手段が、前記音符ごとに、前記運指に関する分類項目のそれぞれの分類値を、前記音符に関連付けて記憶手段に格納するように構成され、
前記楽曲を構成する音符が五線譜上に配置された楽譜を含む画像データを生成して表示装置の画面上に表示させる画像生成手段を備え、
前記画像生成手段が、前記音符のそれぞれについて、前記記憶手段に格納された、当該音符に関連付けられた、前記運指に関する分類項目の分類値が所定の値であるときに、前記音符が当該分類項目に該当することを示す印を含むような前記楽譜を含む画像データを生成するように構成されている。
【0015】
さらに別の好ましい実施態様においては、前記第2の分類値取得手段が、前記音符ごとに、前記リズムに関する分類項目のそれぞれの分類値を、前記音符に関連付けて記憶手段に格納するように構成され、
前記楽曲を構成する音符が五線譜上に配置された楽譜を含む画像データを生成して表示装置の画面上に表示させる画像生成手段を備え、
前記画像生成手段が、前記音符のそれぞれについて、前記記憶手段に格納された、当該音符に関連付けられた、前記リズムに関する分類項目の分類値が所定の値であるときに、前記音符が当該分類項目に該当することを示す印を含むような前記楽譜を含む画像データを生成するように構成されている。
【0016】
また、本発明の目的は、楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段を備えたコンピュータに、
前記音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出ステップと、
前記音符についての時間情報に基づく、当該音符長および押鍵タイミングに関するリズム難易度を算出するリズム難易度算出ステップと、
前記音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出ステップと、
前記運指難易度算出ステップにおいて算出された運指難易度、前記リズム難易度算出ステップにおいて算出されたリズム難易度および調性難易度算出ステップにおいて算出された調性難易度に基づき、楽曲の難易度を算出する全体難易度算出ステップと、
を実行させることを特徴とする楽曲難易度算出プログラムにより達成される。
【発明の効果】
【0017】
本発明によれば、楽曲を構成する種々の要素を考慮して、適切に楽曲の難易度を算出する楽曲難易度算出装置および楽曲難易度算出プログラムを提供することが可能となる。
【図面の簡単な説明】
【0018】
【図1】図1は、本発明の第1の実施の形態にかかる楽曲難易度評価装置の構成を示すブロックダイヤグラムである。
【図2】図2は、本実施の形態にかかる楽曲難易度評価装置10において実行される処理の概略を示すフローチャートである。
【図3】図3は、本実施の形態にかかる楽曲データのデータ構成例を示す図である。
【図4】図4は、本実施の形態にかかる難易度評価処理の例を概略的に示すフローチャートである。
【図5】図5は、本実施の形態にかかる運指難易度評価処理の例を示すフローチャートである。
【図6】図6は、本実施の形態にかかる運指難易度評価処理の例を示すフローチャートである。
【図7】図7は、本実施の形態にかかるテクニック分類処理の例を示すフローチャートである。
【図8】図8は、本実施の形態にかかるテクニック分類処理の例を示すフローチャートである。
【図9】図9は、本実施の形態にかかる指開き特定処理の例を詳細に示すフローチャートである。
【図10】図10は、本実施の形態にかかるリズム難易度評価処理の例を示すフローチャートである。
【図11】図11は、本実施の形態にかかるリズム難易度評価処理の例を示すフローチャートである。
【図12】図12は、本実施の形態にかかるリズムコスト算出処理の例を示すフローチャートである。
【図13】図13は、本実施の形態にかかるリズムコスト算出処理の例を示すフローチャートである。
【図14】図14は、本実施の形態にかかる調性難易度評価処理の例を示すフローチャートである。
【図15】図15は、本実施の形態にかかる調性難易度評価処理の例を示すフローチャートである。
【図16】図16は、本実施の形態において鍵位置情報を説明するための図である。
【図17】図17(a)は、本実施の形態にかかるベーススケール配列iBaseScale[]の例を示す図、図17(b)は、本実施の形態にかかる非ベーススケール配列iATonal[]の例を示す図である。
【図18】図18は、本実施の形態にかかる長音階との一致度iSumの算出を説明するための図である。
【図19】図19は、本実施の形態にかかる長音階との不一致度iATonalityの算出を説明するための図である。
【図20】図20は、本実施の形態にかかる難易度表示処理の例を示すフローチャートである。
【図21】図21は、本実施の形態にかかる難易度表示処理により生成された楽譜の画像の例を示す図である。
【図22】図22は、第2の実施の形態にかかる難易度評価処理の概略を示すフローチャートである。
【図23】図23は、第3の実施の形態にかかるリズムコスト算出処理の例を示すフローチャートである。
【図24】図24は、第3の実施の形態にかかる難易度表示処理の例を示すフローチャートである。
【発明を実施するための形態】
【0019】
以下、添付図面を参照して、本発明の実施の形態について説明する。図1は、本発明の第1の実施の形態にかかる楽曲難易度評価装置の構成を示すブロックダイヤグラムである。図1に示すように、本実施の形態にかかる楽曲難易度評価装置10は、CPU11、ROM12、RAM13、大規模記憶装置14、入力装置15、表示装置16、サウンドシステム17および鍵盤18を有している。
【0020】
CPU11は、後述する楽曲の難易度を評価するための種々の処理(運指難易度評価処理、リズム難易度評価処理、調性難易度評価処理、全体難易度の算出処理)を実行する。ROM12は、楽音難易度を評価するための種々の処理(運指難易度評価処理、リズム難易度評価処理、調性難易度評価処理、全体難易度の算出処理)のプログラムや、処理に使用するパラメータなどを格納する。RAM13は、プログラムの実行の過程で生じたパラメータ、入力データ、出力データなどを一時的に記憶する。大規模記憶装置14は、ハードディスク装置やメモリカードなどであり、楽曲データなどを格納する。
【0021】
入力装置15は、スイッチ類、キーボード、マウスなどを含み、操作者のスイッチ操作、キー操作、マウスの操作に基づく種々の指示などをCPU11に与える。表示装置12の画面上には、楽曲データに基づく楽譜、楽曲難易度の評価結果などを含む画像データが表示される。サウンドシステム40は、楽音生成回路、増幅器、スピーカなどを含み、楽曲データにしたがって、或いは、操作者による鍵盤18の押鍵操作にしたがって所定の楽音を生成して、楽音に基づく音響信号を出力する。なお、上記実施の形態において、鍵盤18は必須ではない。
【0022】
また、本実施の形態にかかる楽曲難易度評価装置10は、鍵盤楽器の形態であっても良いし、或いは、パーソナルコンピュータのような形態であっても良い。鍵盤楽器の形態であれば、操作者は、表示装置16の画面上に表示された楽譜を参照して、鍵盤18の鍵を押鍵し、サウンドシステム17が、操作者の押鍵に応答して、押鍵された鍵の音高に対応する楽音データを生成することで、サウンドシステム17から楽音を出力することができる。
【0023】
図2は、本実施の形態にかかる楽曲難易度評価装置10において実行される処理の概略を示すフローチャートである。図2に示すように、本実施の形態にかかる楽曲難易度評価装置10のCPU11は、RAM13に格納されたパラメータ等のクリア、表示装置16の画面上に表示された画像のクリアなどを含むイニシャライズを実行する(ステップ201)。次いで、CPU11は、操作者が入力装置15を操作して楽曲指定の入力があったかを判断する(ステップ202)。たとえば、楽曲指定の入力は、楽曲データの番号を入力することにより実現される。
【0024】
ステップ202でYesと判断された場合には、CPU11は、大規模記憶装置14に格納された楽曲データ群から、指定された楽曲の楽曲データを読み出して、RAM13に一時的に記憶する(ステップ203)。次いで、CPU11は、難易度評価処理を実行して、データを読み出された楽曲の難易度を示す値iCostを算出する(ステップ204)。ステップ202でNoと判断されると、CPU11は、難易度算出が行なわれた楽曲のそれぞれについて、算出された難易度と楽曲中の音符との関連を示す画像を生成して表示装置16の画面上に表示する難易度表示処理を実行する(ステップ205)。難易度評価処理および難易度表示処理については、以下に詳述する。
【0025】
図3は、本実施の形態にかかる楽曲データのデータ構成例を示す図である。図3に示すように、ある楽曲の楽曲データは、音符(ノート)ごとに、発音すべき楽音を示す楽音データのレコード(符号301、302参照)を有する。楽音データのレコード(たとえば、先頭のノートのレコードNote[0]:符号301)は、音高情報「Pit」、鍵盤位置情報「Pos」、運指情報「Fig」、発音時刻「Time」、発音時間「Gate」、次のノートのレコードへのポインタ「*Next」および前のノートのレコードへのポインタ「*prev」という項目を含む。
【0026】
音高情報「Pit」は、たとえば、音名「C−1」を「0」として、音高が1つ高くなるごとに「1」を増分させた値である。鍵盤位置情報「Pos」は、当該音高に対応する鍵の横方向の中心位置を示す座標値である。たとえば、図16に示すように、ある位置のC(たとえば、C4:Pit=60)の鍵盤位置情報Pos=X0とすると、C#4〜C5までの鍵盤位置情報は、それぞれ、X1〜X12で示すような値となる。図16から理解できるように、隣接する白鍵と黒鍵、黒鍵と白鍵との間の座標値の差は「1」である。その一方、連続する白鍵(EとF、BとC)との間の座標値の差は「2」となる。
【0027】
図4は、本実施の形態にかかる難易度評価処理の例を概略的に示すフローチャートである。図4に示すように、CPU11は、運指難易度評価処理(ステップ401)、リズム難易度評価処理(ステップ402)、調性難易度評価(ステップ403)、全体難易度の算出処理(ステップ404)を実行する。運指難易度評価処理において、CPU11は、楽音データ中の運指情報などに基づいて、運指難易度iFCostを算出する。リズム難易度評価処理において、CPU11は、楽音データ中の発音時刻、発音時間などに基づいて、リズム難易度RCostを算出する。また、調性難易度評価処理において、CPU11は、楽音データの音高情報などに基づいて、調性難易度iTCostを算出する。
【0028】
CPU11は、算出した運指難易度iFCost、リズム難易度iRCost、調性難易度iTCostおよび楽曲データ中のノート数(iCnt)に基づいて、それぞれに、重み係数RF、RR、RTおよびRCを乗じて加算することで楽曲の難易度iCostを算出する(ステップ404)。すなわち、難易度iCostは以下の数式のようになる。
【0029】
iCost=iFCost×RF+iRCost×RR
+iTCost×RT+iCnt×RC
以下、運指難易度評価処理、リズム難易度評価処理および調性難易度評価処理について詳細に説明する。図5および図6は、本実施の形態にかかる運指難易度評価処理の例を示すフローチャートである。なお、本実施の形態においては、楽曲データは、右手で演奏する楽曲(メロディ)の音符についての楽音データから構成される。したがって、運指難易度においては、右手で演奏する場合の運指難易度が算出され。楽曲データ中、楽音データのレコードの運指情報は、右手のどの指で押鍵するかを示している。また、指番号「1」〜「5」は、それぞれ、親指〜小指で押鍵すべきことを示している。
【0030】
図5に示すように、CPU11は、楽音データに示す楽曲のノート(音符)数を示すパラメータiCntを「0」に初期化するとともに(ステップ501)、RAM13の楽曲データ中、最初の楽音データのレコードNote[0]を、配列me[]に格納する(ステップ502)。CPU11は、楽曲データにおいて全ての楽音データのレコードについて処理が終了するまで(ステップ503でYes)、ステップ504〜515を繰り返す。
【0031】
まず、CPU11は、配列me[]に格納された楽音データのレコードの、一つ前の楽音でデータのレコードを特定し、それを配列prev[]に格納する(ステップ504)。次いで、CPU11は、配列me[]および配列prev[]に格納された値に基づいて、テクニック分類処理を実行する(ステップ505)。テクニック分類処理においては、楽曲の隣接する音符間の運指について、ポジションタイプ(PosType)、指開きタイプ(iSpreadType)、リバースタイプ(RevType)、および、指使いテクニック(Tech)という4つの分類項目のそれぞれの何れに該当するかを判断する。
【0032】
ここで、ポジションタイプ(PosType)という分類項目は、どのような指のポジションで運指が行なわれるかを示す。また、指開きタイプ(iSpreadType)は、隣接する音符を押鍵する指の開き具合を示す。また、リバースタイプ(RevType)は、後述する指くぐり、或いは、指返し(乗り越え)の存在を示す。さらに、指使いテクニック(Tech)は、隣接する音符を押鍵するときにどのような指使い(指換え)がなされているかを示す。
【0033】
テクニック分類処理では、それぞれの分類項目について、当該分類項目における具体的提要を示す分類値が算出される。図7および図8は、本実施の形態にかかるテクニック分類処理の例を示すフローチャートである。CPU11は、配列me[]中の運指情報「Fig」、音高情報「Pit」および鍵盤位置情報「Pos」について、f1=Fig、p1=Pit、ps1=Posとする。また、音高情報「Pit」に基づき、鍵が白鍵か黒鍵かを判断し、白鍵、黒鍵の何れかを示す情報をb1とする。値b1は、鍵が黒鍵であることを示す値「1」或いは鍵が白鍵であることを示す値「0」の何れかをとる。これら値f1、p1、ps1、b1は、RAM13に格納される。
【0034】
また、CPU11は、配列prev[]中の運指情報「Fig」、音高情報「Pit」および鍵盤位置情報「Pos」について、f2=Fig、p2=Pit、ps2=Posとする。また、音高情報「Pit」に基づき、鍵が白鍵か黒鍵かを判断し、白鍵、黒鍵の何れかを示す情報をb2とする。これら値f2、p2、ps2、b2は、RAM13に格納される。CPU11は、p1、p2、f1およびf2に基づき、音高差を示す指標iDistを算出する(ステップ703)。
【0035】
音高差を示す指標iDistは、楽曲において音符の進行が上行であったときに、指番号が増大あるいは減少しているか、また、進行が下行であったときに、指番号が減少或いは増大しているかを示す指標である。本実施の形態においては、iDistは以下のように求められる。
【0036】
iDist=(p1−p2)*(f1−f2)
したがって、iDist>0である場合には、音符の進行が上行かつ指番号が増大するような指使いである場合、或いは、音符の進行が下行かつ指番号が減少するような指使いである場合を意味している。すなわち、iDist>0である場合には、指が開く形態で運指が行なわれる(指くぐりや指返しが行なわれない)ことを示している。
【0037】
CPU11は、f2=f1かつp2=p1であるかを判断する(ステップ704)。ステップ704でYesとなる場合とは、隣接する音符間で、同じ音高の鍵が同じ指で押鍵されることを示す。ステップ704でYesと判断された場合には、CPU11は、指使いテクニック(Tech)という分類項目について、分類値Techとして、「Tech=3」という値を与える(ステップ705)。与えられた値は、RAM13に格納される。次いで、CPU11は、f2≠f1かつp2=p1であるかを判断する(ステップ706)。ステップ706でYesとなる場合とは、隣接する音符間で、同じ音高の鍵が異なる指で押鍵されることを示す。ステップ706でYesと判断された場合には、CPU11は、指使いテクニック(Tech)という分類項目について、「Tech=2」という値を与える(ステップ707)。
【0038】
次いで、CPU11は、f2=f1かつp2≠p1であるかを判断する(ステップ708)。ステップ708でYesとなる場合とは、隣接する音符間で異なる音高の鍵が同じ指で押鍵されることを示す。ステップ708でYesと判断された場合には、CPU11は、指使いテクニック(Tech)という分類項目について、「Tech=4」という値を与える(ステップ709)。ステップ708でNoと判断された場合には、CPU11は、指使いテクニック(Tech)という分類項目について、「Tech=1」という値を与える(ステップ710)。
【0039】
次に、CPU11は、iDist>0であるかを判断する(ステップ801)。上述したように、iDist>0であることは、指が開く形態で運指が行なわれる(指くぐりや指返しが行なわれない)ことを示している。ステップ801でYesと判断された場合には、CPU11は、b2、b1、f2およびf1に基づいて、所定のテーブルiPType[][][][]に基づいて、分類値PosTypeとして、PosType=iPType[b2][b1][f2][f1]を取得する(ステップ802)。テーブルiPType[][][][]は、隣接する音符について、指番号および白鍵/黒鍵の種別に基づく値を含み、RAM13に格納される。
【0040】
テーブルiPType[][][][]における値について以下に簡単に説明する。テーブルiPtype[][][][]は、隣接する音符に配置すべき指の指番号およびその位置(白鍵或いは黒鍵)の関係に基づいて、その指のポジションタイプを格納したテーブルである。たとえば、現在の音符および一つ前の音符の双方が白鍵であれば、iPType[0][0][f2][f1]=1となる。また、一つ前の音符が親指でかつ白鍵が押鍵されていれば、現在の音符が黒鍵であった場合に、iPType[0][1][1][f1]=2となる。また、一つ前の音符が親指でかつ黒鍵が押鍵されていれば、現在の音符が黒鍵であった場合に、iPType[1][1][1][f1]=3となる。
【0041】
このように、テーブルiPtypeにおいては、隣接する音符を押鍵するときの手のむきや指の位置の難易度が高まるのに応じて、値が大きくなるようになっている。
【0042】
ステップ802が実行された後、CPU11は、指開き特定処理を実行する(ステップ803)。図9は、本実施の形態にかかる指開き特定処理の例を詳細に示すフローチャートである。
【0043】
図9に示すように、CPU11は、指開きの度合いを示すパラメータであるiMin、iL1およびiL2(iMin<iL1<iL2)をRAM13から取得する(ステップ901)。たとえば、iMinは、白鍵での長2度の幅に相当する「2」、iL1は、白鍵での長3度に相当する「4」、iL1は、白鍵での完全8度に相当する「14」である。指開き特定処理においては、iDistと、iMin、iL1およびiL2とを比較して、指開きタイプ(iSpreadType)の分類値を決定していく。
【0044】
CPU11は、鍵盤位置に基づく距離iKDist=|ps2−ps1|を算出する(ステップ902)。
【0045】
ステップ703において算出されたiDist<0である場合には(ステップ903でYes)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、分類値iSpreadTypeとして、「iSpreadType=0」という値を与える(ステップ904)。なお、図9が実行されるときには、iDist>0であることが前提である(図8のステップ801参照)。したがって、これは実際には起こりえないことであるため、ステップ904はエラー処理となる。
【0046】
iKDist=iMinである場合(ステップ905でYes)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、分類値iSpreadTypeとして、「iSpreadType=1」という値を与える(ステップ906)。iMin<iKDist≦iL1である場合(ステップ907でYes)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、「iSpreadType=2」という値を与える(ステップ908)。iKDist<iMinである場合(ステップ909でYes)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、「iSpreadType=3」という値を与える(ステップ910)。
【0047】
iKDist<iL2である場合(ステップ911でYes)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、「iSpreadType=4」という値を与える(ステップ912)。その一方、iKDist≧iL2である場合(ステップ911でNo)、CPU11は、指開きタイプ(iSpreadType)という分類項目について、「iSpreadType=5」という値を与える(ステップ913)。
【0048】
指開き特定処理によって、iKDistの値にしたがって、以下のようなiSpreadTypeの値が付与される。
【0049】
0≦iKDist<Min iSpreadType=3
iKDist=iMin iSpreadType=1
iMin<iKDist≦iL1 iSpreadType=2
iL1<iKDist<iL2 iSpreadType=4
iL2≦iKDist iSpreadType=5
指開き特定処理が終了すると、CPU11は、リバースタイプ(RevType)という分類項目について、分類値RevTypeとして、「RevType=1」という分類値を与える(ステップ804)。その後、CPU11は、配列me[]に格納された楽音データについて算出されたPosType、iSpreadType、RevTypeおよびTechという分類値を、当該楽音データと関連付けて記憶装置(RAM13)に格納する(ステップ805)。
【0050】
ステップ801でNoと判断された場合には、所定のテーブルiRType[][][][]に基づいて、RevType=iRType[p2][p1][f2][f1]を取得する(ステップ806)。テーブルiRType[][][][]は、隣接する音符について、指番号および音高に基づく値を含み、RAM13に格納される。
【0051】
テーブルiRType[][][][]における値について以下に簡単に説明する。テーブルiRtype[][][][]は、隣接する音符に配置すべき指の指番号および音高の関係に基づいて、運指における指くぐりや指返し(乗り越え)を示す情報を格納したテーブルである。本実施の形態において、iDist≦0のときには、上行音形において、「1」より大きな指番号の指から指番号「1」の指に移行すること(いわゆる「指くぐり」)、或いは、下行音形において、指番号「1」の指から「1」より大きな指番号の指に移行すること(いわゆる「指返し」ないし「指の乗り越え」)が行なわれ得ることを意味している。
【0052】
本実施の形態においては、指くぐりのとき、つまり、p2<p1,f2>1、f1=1のときには、iRType[p2][p1][f2][f1]=3となる。また、指返しのとき、つまり、p2>p1、f2=1、f1>1のときには、iRType[p2][p1][f2][f1]=2となる。一般的に、運指において、指返しより指くぐりの方が難しいといわれているため、指くぐりについて、RevType=3、指返しについてRevType=2となるようにしている。
【0053】
ステップ806の後、CPU11は、ポジションタイプ(PosType)という分類項目について、「PosType=1」という分類値、指開きタイプ(iSpreadType)という分類項目について、「iSpreadType=1」という分類値を与える(ステップ807)。その後、CPU11は、配列me[]に格納された楽音データについて算出されたPosType、iSpreadType、RevTypeおよびTechという分類値を、当該楽音データと関連付けて記憶装置(RAM13)に格納する(ステップ805)。
【0054】
次に、2次元マップiFMap[i][j](iは分類項目、jは分類項目において付与された値)において、テクニック分類処理により得られた分類項目に対応する値をインクリメントする処理を実行する(図5のステップ506〜512)。本実施の形態においては、ポジションタイプ(PosType)、指開きタイプ(iSpreadType)、リバースタイプ(RevType)、および、指使いテクニック(Tech)という4つの分類項目が存在する。したがって、2次元のマップiFMap[i][j]のそれぞれの要素は以下の分類項目に対応する。
【0055】
iFMap[0][j]:jが「PosType」の値
iFMap[1][j]:jが「iSpreadType」の値
iFMap[2][j]:jが「RevType」の値
iFMap[3][j]:jが「Tech」の値
なお、以下のステップ506、508、510、512から理解できるように、j=0、2のときの値は存在せず、j>1のみについて値を有する。
【0056】
CPU11は、PosType>1である場合には(ステップ506でYes)、対応するマップの値であるiFMap[0][PosType]をインクリメントする(ステップ507)。また、CPU11は、iSpreadType>1である場合には(ステップ508でYes)、対応するマップの値であるiFMap[1][iSpreadType]をインクリメントする(ステップ509)。CPU11は、RevType>1である場合には(ステップ510でYes)、対応するマップの値であるiFMap[2][RevType]をインクリメントする(ステップ511)。さらに、CPU11は、Tech>1である場合には(ステップ512でYes)、対応するマップの値であるiFMap[3][Tech]をインクリメントする(ステップ513)。
【0057】
次いで、CPU11は、ノート数(音符数)を示すパラメータiCntをインクリメントして(ステップ514)、配列me[]に、次の楽音データのレコードを格納し(ステップ515)、その後、ステップ503に戻る。
【0058】
ステップ503でYesと判断された場合には、CPU11は、パラメータiおよびiFCostを「0」に初期化する(ステップ601)。CPU11は、パラメータiが「4」以上であるかを判断する(ステップ602)。上記パラメータiは、iFMap[i][j]の「i」を特定するためのものである。ステップ602でNoと判断された場合には、パラメータjを「0」に初期化して(ステップ603)、jが所定数より大きくなるまで(ステップ604)、ステップ605〜607の処理を繰り返す。
【0059】
CPU11は、マップの値iFMap[i][j]が「0」より大きいかを判断する(ステップ605)。ステップ605でYesと判断された場合には、CPU11は、マップの値iFMap[i][j]に対応付けられたコスト値iFCost[i][j]を、運指難易度の値iFCostに加算する(ステップ606)。
【0060】
以下、コスト値iFCost[i][j]を格納したコストテーブル(iFCost[][][])について説明する。コストテーブルは、コスト値iFCost[i][j]のそれぞれに対応する、「i×j」個のコスト値iFCost[i][j]を格納している。たとえば、iFCost[0][j]は、テクニック分類処理(図8)のステップ802で取得された「PosType」の値のそれぞれに対応するコスト値であり、ポジションタイプのそれぞれの値に固有の値となっている。i=1以上の他のコスト値も同様である。
【0061】
本実施の形態においては、ポジションタイプ「PosType」、指開きタイプ「iSpreadType」、リバースタイプ「RevType」および指使いテクニック「Tech」のそれぞれにおいて、値が大きくなるのにしたがって、それぞれの分類項目において運指の困難度が高まるようになっている。したがって、コスト値iFCost[i][j]も、jが増大するのにしたがって、コスト値が増大するようになっている。
【0062】
また、本実施の形態においては,マップの値iFMap[i][j]が幾つであるかは考慮せず、0より大きければ(すなわち1以上であれば)、コスト値iFCost[i][j]を、運指難易度の値iFCostに加算している。すなわち、マップの値の多寡にかかわらず、加算される値はコスト値iFCost[i][j]である。これは、分類項目「i」(例えば、ポジションタイプや指開きタイプ)において、iFMap[i][j]において1より大きい値を有する音符が1つあれば、その場合には、当該iFMap[i][j]に対応する難易度を含むため、そのノートの数は、難易度を示すコスト値にそれほど大きく影響しないであろうという知見に基づく。
【0063】
無論、マップの値iFMap[i][j]に応じて、加算されるiFCost[i][j]に重みを与えても良い。つまりこの場合には、
iCost=iCost+
f(iFCost[i][j])×iFCost[i][j]
となる。ここで、f(iFCost[i][j])は、変数iFCost[i][j]が増大するのにしたがって増大するが、変数iFCost[i][j]が増大するのにしたがって、関数値fの増分は小さくなっていく関数である。たとえば、fとして対数関数を使用しても良い。
【0064】
ステップ605でNoと判断された場合、或いは、ステップ606が実行された後、CPU11は、jをインクリメントして(ステップ607)、ステップ604に戻る。また、ステップ604でYesと判断された場合には、CPU11は、iをインクリメントして(ステップ608)、ステップ602に戻る。
【0065】
このように本実施の形態においては、楽曲に含まれるあるノートが、運指に関する分類項目の具体的態様についてのマップ値iFMap[i][j]が「0」でない場合には、当該分類項目の具体的態様に対応するコスト値iFCost[i][j]が、運指難易度iFCostに加算される。
【0066】
次に、リズム難易度評価処理について説明する。図10および図11は、本実施の形態にかかるリズム難易度評価処理の例を示すフローチャートである。図10に示すように、CPU11は、RAM13の楽曲データ中、最初の楽音データのレコードNote[0]を、配列me[]に格納する(ステップ1001)。CPU11は、楽曲データにおいて全ての楽音データのレコードについて処理が終了するまで(ステップ1002でYes)、ステップ1003〜1007を繰り返す。
【0067】
CPU11は、RAM13に格納された、リズム評価処理用のパラメータ(リズムパラメータ)を取得する(ステップ1003)。リズムパラメータには、1小節の長さを示すiMeasLen、リズムの分解能を示すResolutionなどが含まれ、これらは、次のリズムコスト算出処理において利用される。CPU11は、リズムコスト算出処理を実行する(ステップ1004)。図12および図13は、本実施の形態にかかるリズムコスト算出処理の例を示すフローチャートである。リズムコスト算出処理においては、音符の音符長(次の音符までの間隔に基づく音符長)に相当する分類項目であるステップタイム(iStepTime)についての分類値と、音符の小節中の位置に相当する分類項目であるポジション(iPos)についての分類値とが得られる。
【0068】
図12に示すように、CPU11は、配列me[]に示す楽音データのレコードの、次のレコードを参照して、その発音時刻Timeを取得する(ステップ1201)。次いで、CPU11は、配列me[]中の発音時刻Timeと、ステップ1201で取得した次の発音データのレコードにおける発音時刻Timeとに基づいて、次の音符までの間隔iTを算出する(ステップ1202)。CPU11は、時間間隔iTと、1小節の長さiMeasLenとに基づいて、上記時間間隔の小節内での音符長iStepTimeを算出する(ステップ1203)。得られたiStepTimeが、音符長という分類項目についての分類値となる。
【0069】
本実施の形態において、音符長iStepTimeは以下のように求められる。
【0070】
iStepTime=32×iT/iMeasLen
本実施の形態においては、楽曲は4/4拍子としており、iStepTimeは、iTが32分音符いくつ分に相当するかを示している。
【0071】
次いで、CPU11は、配列me[]中の発音時刻Timeに基づき、小節内の音符位置iTickInMeas、拍内での音符位置iTickInBeatおよび当該音符の属する拍iBeatを算出する(ステップ1304)。iTickInMeasは、1小節を32分割したときの音符の位置、つまり、小節の先頭から32分音符でいくつ目に位置しているかを示す。また、iTickInBeatは、拍の先頭から32分音符でいくつ目に位置しているかを示す。
【0072】
CPU11は、パラメータiおよびiPosを「0」に初期化して(ステップ1205)、iが8未満である限り(ステップ1206でYes)、ステップ1207から1210の処理を実行する。CPU11は、iTickInBeatの位置を特定するために、a=iTickInBeat−iResolution×i/8を算出する(ステップ1207)。ここで、iTickInBeatは、「0」〜「7」の何れかの値をとる。したがって、いずれかのiについて、a=0となり、次のステップ1208でYesと判断される。ステップ1208でNoと判断された場合には、CPU11は、パラメータiをインクリメントして(ステップ1209)、ステップ1206に戻る。ステップ1208でYesと判断された場合には、CPU11は、パラメータiPos=iとする(ステップ1210)。
【0073】
ステップ1206でNoと判断された場合、或いは、ステップ1210の処理が終了した後、図13のステップ1301に進む。なお、本実施の形態においては、ステップ1204においてiTickInBeatの算出の際に、32分音符の分解能にクォンタイズされる。したがって、ステップ1210においてNoと判断されることは本来ありえない。したがって、この場合は、演算において何らかのエラーが生じたことになる。
【0074】
このようにして得られたiPosは、音符が、拍の頭から32分音符で何番目の位置にあるかを示すものである。これをそのまま使って良いが、本実施の形態においては、小節の先頭、小節の中央および拍の先頭として、iPosとして異なる値を与える。iTickInMeas=0の場合、すなわち、音符が拍の先頭に位置している場合には(ステップ1301でYes)、CPU11は、iPos=32とする(ステップ1302)。また、iTickInBeat=0かつiBeat=2、つまり、音符が3拍目の先頭(小節の中央)に位置している場合には(ステップ1303でYes)、CPU11は、iPos=16とする(ステップ1304)。さらに、iTickInBeat=0、つまり、音符が2拍目或いは4拍目の先頭に位置している場合には(ステップ1305でYes)、CPU11は、iPos=8とする(ステップ1306)。
【0075】
リズムコスト算出処理によって得られる分類項目の1つであるポジション(iPos)の分類値は、音符の小節中の位置によって以下のような値をとる。
【0076】
音符の位置が、小節の先頭:iPos=32
音符の位置が、3拍目の先頭:iPos=16
音符の位置が、他の拍(2拍目、4拍目)の先頭:iPos=8
音符の位置が他の場合:iPos=拍を8等分した場合の位置を示す値
上記iPosは、楽曲が4/4拍子の場合の例であり、他の拍子(たとえば、3/4)の場合には、iPosは異なる。楽曲が3/4拍子であれば、分類値「iPos」は以下の値をとり得る。
【0077】
音符の位置が、小節の先頭:iPos=32
音符の位置が、他の拍(2拍目、3拍目)の先頭:iPos=8
音符の位置が他の場合:iPos=拍を8等分した場合の位置を示す値
リズムコスト算出処理が終了すると、CPU11は、2次元マップの値であるiRMap[0][iStepTime]をインクリメントする(ステップ1005)とともに、iRMap[1][iPos]をインクリメントする(ステップ1006)。その後、CPU11は、配列me[]に、次の楽音データのレコードを格納し(ステップ1007)、その後、ステップ1002に戻る。
【0078】
ステップ1002でYesと判断された場合には、CPU11は、パラメータiおよびiRCostを「0」に初期化する(ステップ1101)。CPU11は、パラメータiが「2」以上であるかを判断する(ステップ1102)。上記パラメータiは、iRMap[i][j]の「i」を特定するためのものである。ステップ1102でNoと判断された場合には、パラメータjを「0」に初期化して(ステップ1103)、jが所定数より大きくなるまで(ステップ1104)、ステップ1105〜1107の処理を繰り返す。
【0079】
CPU11は、マップ値iRMap[i][j]が「0」より大きいかを判断する(ステップ1105)。ステップ1105でYesと判断された場合には、CPU11は、マップの値iRMap[i][j]に対応付けられたコスト値iRCost[i][j]を、運指難易度の値iRCostに加算する(ステップ1106)。
【0080】
以下、コスト値iRCost[i][j]を格納したコストテーブルiRCost[][]について説明する。運指難易度についてのコスト値iR[i][j]を格納したコストテーブルと同様に、コストテーブルiRCost[][]は、コスト値iRCost[i][j]のそれぞれに対応する、「i×j」個のコスト値iRCost[i][j]を格納している。たとえば、iRCost[0][j]は、リズムコスト算出処理(図12)のステップ1203で取得された音符長iStepTimeのそれぞれに対応するコスト値であり、音符長のそれぞれに固有の値となっている。また、iRCost[1][j]は、ステップ1210、ステップ1302、1304、1306で得られた拍内の音符位置iPosのそれぞれに対応するコスト値であり、音符位置のそれぞれに固有の値となっている。
【0081】
たとえば、iRCost[0][iStepTime]においては、iStepTime=32、16、8、4、および、それら以外の値、について、コスト値iRCost[0][iStepTime]が増大するようになっている。つまり、音符長が、全音符であるとき、そのコスト値iRCost[0][32]がもっとも小さく、2分音符、4分音符、8分音符、その他の音符となるのにしたがって、コスト値は大きくなる。
【0082】
また、iRCost[1][iPod]においても、iPos=32、16、8、それら以外の値、について、コスト値iRCost[1][iPos]が増大するようになっている。つまり、音符が小節の先頭に位置するとき、そのコスト値iRCost[1][32]がもっとも小さく、3拍目の先頭、2拍目或いは4拍目の先頭、その他の位置となるのにしたがって、コスト値は大きくなる。
【0083】
運指難易度コストの算出と同様に、マップの値iRMap[i][j]が幾つであるかは考慮せず、0より大きければ(すなわち1以上であれば)、コスト値iRCost[i][j]を、リズム難易度の値iRCostに加算している。すなわち、マップの値の多寡にかかわらず、加算される値はコスト値iRCost[i][j]である。
【0084】
ステップ1105でNoと判断された場合、或いは、ステップ1106が実行された後、CPU11は、jをインクリメントして(ステップ1107)、ステップ1104に戻る。また、ステップ1104でYesと判断された場合には、CPU11は、iをインクリメントして(ステップ1108)、ステップ1102に戻る。
【0085】
このように本実施の形態においては、音符についてのリズム、特に、音符長および音符位置のそれぞれについて、対応するコスト値iRCost[i][j]が、リズム難易度iRCostに加算される。
【0086】
次に、本実施の形態にかかる調性難易度評価処理について説明する。図14および図15は、本実施の形態にかかる調性難易度評価処理の例を示すフローチャートである。図15に示すように、CPU11は、配列me[]に先頭の楽音データのレコードを格納する(ステップ1401)。CPU11は、楽曲データにおいて全ての楽音データのレコードについて処理が終了するまで(ステップ1402でYes)、ステップ1403、1404を繰り返す。
【0087】
CPU11は、配列me[]中の音高情報「Pit」に基づいて、カウント値iPC[Pit mod 12]をインクリメントする(ステップ1403)。ステップ1403においては、音符の、CからBまでの何れかの音名に対応するカウント値iPCがインクリメントされる。次いで、CPU11は、配列me[]に次の楽音データのレコードを格納して(ステップ1404)、ステップ1402に戻る。ステップ1402〜1404の処理によって、楽曲に含まれるノート(音符)の音名のそれぞれについて、累算値を格納した配列iPC[]が取得される。
【0088】
ステップ1402でYesと判断された場合には、CPU11は、パラメータiTonality、iMax,iATMaxおよびiを「0」に初期化する(ステップ1405〜1407)。CPU11は、パラメータiが12以上になるまで(ステップ1408でNo)、図15のステップ1501〜1512を実行する。
【0089】
図15に示すように、CPU11は、パラメータiSumおよびiATonalityを「0」に初期化する。ここに、iSumは、楽曲が含んでいたノート(音符)の音名の累算値と、各調の長音階との一致度を示すパラメータであり、iATonalityは、上記音名の累算値と、各調の長音階との不一致度を示すパラメータである。なお、本実施の形態においては、長音階の楽曲について、各調の長音階との一致度、不一致度を見出しているが、これに限定されるものではない。短音階の楽曲については、各調の短音階との一致度や不一致度を見出せば良い。
【0090】
CPU11は、パラメータjを「0」に初期化して(ステップ1504)、iSumに、iPC[(j+i) mod 12]×iBaseScale[j]を加算する。また、CPU11は、iATonalityに、iPC[(j+i) mod 12]×iATonal[j]を加算する(ステップ1505)。その後、CPU11はjをインクリメントしてステップ1503に戻る。
【0091】
図17(a)は、本実施の形態にかかるベーススケール配列iBaseScale[]の例を示す図である。図17(a)に示すように、iBaseScale[](符号1701)は、11個の要素(j=0〜11)を有し、長音階の音名に相当する要素(j=0、2、4、5、7、9、11)が「1」となり、それ以外が「0」となっている。なお、図17(a)において、配列の要素の上に配置された数字、♭(フラット)、#(シャープ)は、最も左のj=0の要素(根音)に対する間隔(度)を示している。また、図17(b)は、本実施の形態にかかる非ベーススケール配列iATonal[]の例を示す図である。iATonal[](符号1702参照)は、iBaseScale[]1701と同様に、11個の要素(j=0〜11)を有し、その値は、iBaseScaleと逆となっている。すなわち、長音階の音名に該当しない要素(j=1、3、6、8、10)が「1」となり、それ以外が「0」となっている。
【0092】
以下、ステップ1504における、iSumに加算される値iPC[(j+i) mod 12]×iBaseScale[j]について説明する。たとえば、図18において、符号1801は、ステップ1402〜1404で得られた配列iPC[]の例を示す図、符号1802は、ベーススケール配列iBaseScale[]の例を示す図である。
【0093】
iPC[j+i mod 12]×iBaseScale[j]において、i=0のときには、j=0、2、4、5、7、9において、0以外の値をとり、全てのjについて処理が実行された場合のiSumの最終値は、
iSum=Σ(iPC[j mod 12]×iBaseScale[j])
=7+2+3+10+4+5=31となる。
【0094】
i=1のときには、j=4、5、9、11において、0以外の値をとり、全てのjについて処理が実行された場合のiSumの最終値は、
iSum=1+3+5+8=17となる。
【0095】
また、i=5のときには、j=0、2、4、5、7、9、22において、0以外の値をとり、全てのjについて処理が実行された場合のiSumの最終値は、
iSum=10+4+5+8+7+2+3=39となる。
【0096】
さらに、i=7のときには、j=0、2、5、7、9において、0以外の値をとり、全てのjについて処理が実行された場合のiSumの最終値は、
iSum=4+5+7+2+3=22となる。
【0097】
iATonalityにiPC(j+i mod 12)×iATonal[j]を加算する演算も、iSumの演算と同様に実行され得る。
【0098】
図19において、符号1901は、ステップ1402〜1404で得られた配列iPC[]の例を示す図、符号1902は、非ベーススケール配列iATonlity[]の例を示す図である。配列iPC[]は、図18の符号1801と同様である。
【0099】
i=0のときには、iATonalityの最終値
iATonality=Σ(iPC[j mod 12]×iATonal[j]
=1+5+8=14となる。
【0100】
また、i=1のときのiATonalityの最終値は、
iATonality=7+2+10+4+5=28(符号1903参照)
i=5のときのiATonalityの最終値は、
iATonality=5+1=6(符号1904参照)
i=7のときのiATonalityの最終値は、
iATonality=5+8+1+10=24(符号1905参照)となる。
【0101】
ステップ1503でNoと判断された場合、つまり、特定のiについて、j=0〜11のiSumおよびiATonalityが算出された場合には、CPU11は、一致度iSumと不一致度iATonalityの差分値a(=iSum−iATonality)を算出する(ステップ1507)。
【0102】
CPU11は、ステップ1507において得られた差分値aが、RAM13に記憶された差分値aの最大値iMaxより大きいかを判断する(ステップ1508)。ステップ1508でYesと判断された場合には、CPU11は、差分値aを最大値iMaxとしてセットし(ステップ1509)、かつ、最大値iMaxを得たときの調性を示すパラメータiTonalityにiをセットする(ステップ1510)。また、CPU11は、得られた不一致度iATonalityを、iSumの最大値が得られたときの対応する不一致度iATMaxとしてセットする(ステップ1511)。
【0103】
ステップ1508でNoと判断された場合、または、ステップ1511が実行された後に、CPU11は、iをインクリメントして、ステップ1408に戻る。ステップ1408でNoと判断された場合には、CPU11は、調性難易度を示すiTCostを以下のように算出する(ステップ1409)。
【0104】
iTCost=(iATMax×A)/iMax
ここに、Aは所定の定数である。したがって、iTCostは、調性の一致度が最大となったときの、音符の音階との一致度iSumとそのときの不一致度iATonalityとの差分値に対する、そのときの不一致度の比に、定数Aを乗じたものとなる。
【0105】
先に説明したように、運指難易度iFCost、リズム難易度iRCostおよび調性難易度iTCostが算出されると、これら難易度および楽曲のノート数iCntに基づいて、以下のように楽曲の難易度iCostが算出される。
【0106】
iCost=iFCost×RF+iRCost×RR
+iTCost×RT+iCnt×RC
次に、本実施の形態にかかる難易度表示処理について説明する。難易度評価処理(ステップ204)が終了し、新たな楽曲指定の入力が無かった場合(ステップ202でNo)、CPU11は、難易度表示処理を実行する(ステップ205)。難易度表示処理205では、難易度iCostが算出された楽曲について、音符ごとに対応する難易度を示す印を付した楽譜を生成して、表示装置16の画面上に表示する。本実施の形態においては、音符ごとの運指難易度を楽譜上に示している。
【0107】
図20は、本実施の形態にかかる難易度表示処理の例を示すフローチャートである。図20に示すように、CPU11は、配列me[]に先頭の楽音データのレコードを格納する(ステップ2001)。CPU11は、楽曲データにおいて全ての楽音データのレコードについて処理が終了するまで(ステップ2002でYes)、ステップ2003〜2009を繰り返す。
【0108】
CPU11は、配列me[]中の音高情報「Pit」、発音時刻「Time」および発音時間「Gate」に基づいて、画像において、五線譜中の所定の位置に所定の音長の音符を配置する(ステップ2003)。また、CPU11は、配列me[]中の運指情報「Fig」に基づいて、画像において、音符の上部に指番号を配置する(ステップ2004)。次いで、CPU11は、me[]で特定される楽音データに関連付けられて、RAM13に記憶されたポジションタイプ(PosType)、指開きタイプ(iSpreadType)、リバースタイプ(RevType)、指使いテクニック(Tech)のそれぞれの分類項目についての分類値を取得する(ステップ2005)。
【0109】
次いで、CPU11は、それぞれの値の何れかが「1」より大きいかを判断する(ステップ2006)。ステップ2006でYesと判断された場合には、CPU11は、該当する分類項目を示す印を、音符の上部に配置する(ステップ2007)。たとえば、PosType>1であれば「P」、iSpreadType>1であれば「S」、RevType>1であれば「R」、Tech>1であれば「T」という印が、画像において音符の上部に配置される。
【0110】
さらに、CPU11は、音符に印が付された分類項目に対応する色彩を付与する(ステップ2008)。たとえば、PosType>1であれば赤、iSpreadType>1であれば水色、RevType>1であれば黄緑、Tech>1であれば桃色という色彩が音符に付与される。なお、PosTypeおよびiSpreaTypeの双方とも、1より大きい値を持っていた場合には、PosTypeについてのコスト値iFCost[0][PosType]と、iSpreadTypeについてのコスト値iFcost[1][iSpreadType]とを比較して、コスト値の大きい方の分類項目に対応する色彩が選択される。
【0111】
その後、CPU11は、配列me[]に次の楽音データのレコードを格納して(ステップ2009)、ステップ2002に戻る。
【0112】
図21は、本実施の形態にかかる難易度表示処理により生成された楽譜の画像の例を示す図である。図21に示すように、楽曲を構成する音符の上部には、1〜5の指番号が表示されるとともに、特定の音符においては、分類項目に対応する印(「P」、「S」、「R」、「T」)が音符の上部に付加されている。また、図21では表われていないが、印「T」が付された音符(たとえば、第2小節第3拍の「G4」)には、対応する色彩である桃色が付されている。同様に、印「S」が付された音符(たとえば、第3小節第1拍の「E5」)には、対応する色彩である水色が付され、印「R」が付された楽譜(たとえば、第7小節第1拍の「F#4」、第2拍の「G4」)には、対応する色彩である黄緑色が付される。
【0113】
さらに、印「S」および「P」の双方が付されている音符(たとえば、第3小節の第3.5拍の「F#5」、第4小節の第1拍の「G5」)においては、コスト値の大きい方の分類項目(この場合には、PosType)の色彩(この場合には、赤色)が付される。
【0114】
上述したように、本実施の形態においては、CPU11により、音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出処理、音符についての時間情報に基づいて、音符長および音符のタイミングに関するリズム難易度を算出するリズム難易度算出処理、音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出処理、並びに、運指難易度、リズム難易度および調性難易度に基づき、楽曲の難易度を算出する全体難易度の算出処理が実行される。したがって、運指だけではなく、楽曲を構成するリズム、調性を含む要素を考慮した楽曲の難易度を算出することが可能となる。
【0115】
また、本実施の形態においては、運指難易度算出処理において、CPU11は、隣接する音符を押鍵するときの指のポジションに関する第1の分類項目(PosType)について、当該分類項目における具体的態様を示す第1の分類値、隣接する音符を押鍵するときの指の開き具合に関する第2の分類項目(iSpredType)について、当該第2の分類項目における具体的態様を示す第2の分類値、指くぐり或いは指返しに関する第3の分類項目(RevType)について、当該第3の分類項目における具体的態様を示す第3の分類値、および、隣接する音符を押鍵するときの指換えに関する第4の分類項目(Tech)について、当該第4の分類項目における具体的態様を示す第4の分類値を取得する。また、CPU11は、分類項目のそれぞれにおいて、分類項目における分類値(PosType、iSpreadType、RevType、Tech)に基づいて、分類項目における前記具体的態様に対するコスト値を格納した、記憶装置中のコストテーブルiFCost[][]から、分類項目における具体的態様に対するコスト値iFCost[i][j]を取得し、コスト値を累算し、累算されたコスト値を運指に関する難易度iFcostとして取得する。
【0116】
上述したように、本実施の形態によれば、運指を規定する種々の分類項目のそれぞれについて、その具体的態様に基づくコスト値を取得することができる。したがって、実際の運指の困難さに沿った適切な難易度を算出することができる。
【0117】
また、本実施の形態においては、上記第1の分類項目の分類値の取得において、CPU11は、音符ごとに、分類項目中の分類値が所定の値であるときに、分類項目の分類値のカウント値を、マップ値として格納するカウントマップiFMap[][]において、対応するカウント値iFMap[i][j]を増分させ、また、コスト累算において、CPU11は、カウントマップiFMap[][]中のカウント値iFMap[i][j]を参照して、カウント値が「1」以上であるときに、コストテーブルiFCost[][]中の、対応するコスト値iFCost[i][j]をiFCostに加算する。したがって、コストテーブルiFCost[][]にコスト値を格納しておくことで、分類項目中の具体的態様に対応した適切なコスト値を取得することが可能となる。
【0118】
また、本実施の形態においては、リズム難易度算出処理において、CPU11は、音符長に関する第5の分類項目(iStepTime)について、当該分類項目における具体的態様を示す第5の分類値、音符の小節中の位置に関する第6の分類項目(iPos)について、当該分類項目における具体的態様を示す第6の分類値を取得する。また、CPU11は、分類項目のそれぞれにおいて、分類項目における分類値に基づいて、分類項目における具体的態様に対するコスト値を格納した、記憶装置中のコストテーブルiRCost[][]から、分類項目における具体的態様に対するコスト値iRCost[i][j]を取得して、コスト値を累算し、累算されたコスト値をリズムに関する難易度iRCostとして取得する。
【0119】
上述したように、本実施の形態によれば、音符のリズムを規定する種々の分類項目のそれぞれについて、その具体的態様に基づくコスト値を取得することができる。したがって、実際に演奏する際のリズムの困難さに沿った適切な難易度を算出することができる。
【0120】
また、本実施の形態によれば、調性難易度算出処理において、CPU11は、音符の音高情報に基づいて前記楽曲の調性を特定し、特定された調性の音階と楽曲中の音符の音高との一致度iSum、および、特定された調性の音階と楽曲中の音符の音高との不一致度iATonalityに基づき調性難易度を算出する。したがって、単なる調性自体の難易度ではなく、楽曲を構成する音符と音階との関係に基づく調性難易度を取得することができる。
【0121】
特に、本実施の形態においては、調性難易度算出ステップにおいて、CPU11は、一致度iSumと不一致度iATonalityとの差異(iSum−iAtonality)に対する不一致度iAtonalityの割合に基づいて、調性難易度を算出する。したがって、より適切な楽曲の調性難易度を得ることが可能となる。
【0122】
また、本実施の形態においては、難易度表示処理において、CPU11は、楽曲を構成する音符のそれぞれについて、当該音符に関連付けられた、運指に関する分類項目の分類値が所定の値であるときに、音符が当該分類項目に該当することを示す印を含むような楽譜を含む画像データを生成して、表示装置16の画面上に表示する。これにより、操作者(演奏者)は、楽曲において運指上、所定の難易度を持つような音符を容易に知ることができる。
【0123】
次に、本発明の第2の実施の形態ついて説明する。第2の実施の形態においては、難易度算出処理(図2のステップ204)中、全体難易度の算出において、楽曲のテンポを校了している。また、第2の実施の形態においては、楽曲データ中に、楽曲のテンポを示す値BPM(Beat per Minite)が含まれる。図22は、第2の実施の形態にかかる難易度評価処理の概略を示すフローチャートである。図22において、ステップ2201〜2203は、図4のステップ401〜403と同様である。したがって、第1の実施の形態と同様の運指難易度iFCost、リズム難易度iRCostおよび調性難易度iTCostが算出される。
【0124】
ステップ2201〜2203が終了すると、CPU11は、運指難易度に関する係数RFを調整する(ステップ2204)。本実施の形態においては、係数RFは以下の式に基づいて調整される。
【0125】
RF=RF×(0.5+0.5×(BPM/120))
すなわち、基準テンポを120(毎分120ビート)としたときの楽曲のテンポの比に基づいて、RFの半分にBPM/120という重みを付けることで、RFを調整している。
【0126】
また、CPU11は、リズム難易度に関数係数RRを調整する(ステップ2205)。本実施の形態においては、係数RRは以下の式に基づいて調整される。
【0127】
RR=RR×BPM/120
すなわち、基準テンポを120(毎分120ビート)としたときの楽曲のテンポの比を重みとして、RRに当該重みを付与することでRRを調整している。つまり、リズム難易度に用いられる係数RRは、運指難易度に用いられる係数RFと比較して、テンポがより係数値に直接的に反映されるようになっている。
【0128】
その後、CPU11は、CPU11は、算出した運指難易度iFCost、リズム難易度iRCost、調性難易度iTCostおよび楽曲データ中のノート数(iCnt)に基づいて、それぞれに、調整された重み係数RFおよびRR、予め定められた重み係数RTおよびRCを乗じて加算することで楽曲の難易度iCostを算出する(ステップ2206)。
【0129】
第2の実施の形態によれば、全体難易度の算出処理において、CPU11は、運指難易度iFCostおよびリズム難易度iRCostのそれぞれに、楽曲のテンポBPMに応じた重みを与え、重みが与えられた運指難易度およびリズム難易度により全体難易度を算出する。したがって、テンポも考慮したより適切な難易度の算出が可能となる。
【0130】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【0131】
たとえば、第1の実施の形態にかかる難易度表示処理においては、音符ごとの運指難易度に関する分類項目の分類値を記憶装置(RAM13)に格納し、当該分類値に基づいて、音符ごとに運指難易度に関する表示を行なっていた。本発明はこれに限定されず、他の難易度、たとえば、リズム難易度に関する表示も可能である。
【0132】
図23は、本発明の第3の実施の形態にかかるリズムコスト算出処理の後半部分の例を示すフローチャートである。図23は、図12に示すリズムコスト算出処理のステップ1206でNoの場合、或いは、ステップ1210が終了した場合に開始される。図23のステップ2301〜2306は、図13のステップ1301〜1306と同様である。ステップ2302、2304、2306が終了した後、或いは、ステップ2305でNoと判断された場合には、CPU11は、配列me[]に格納された楽音データについて算出された音符長を示すiStepTime、および、音符の小節中の位置示すiPosという分類値を、当該楽音データと関連付けて記憶装置(RAM13)に格納する(ステップ2307)。
【0133】
図24は、本発明の第3の実施の形態にかかる難易度表示処理の例を示すフローチャートである。図24において、ステップ2401〜2404は、図20のステップ2001〜2004と同様である。ステップ2404の後、CPU11は、CPU11は、me[]で特定される楽音データに関連付けられて、RAM13に記憶された音符長を示すiStepTime、および、音符の小節中の位置示すiPosというそれぞれの分類項目についての分類値を取得する(ステップ2405)。
【0134】
次いで、CPU11は、iStepTimeが所定の値であるか、或いは、iPosが所定の値であるかを判断する(ステップ2406)。たとえば、iStepTimeが、「32」、「16」、「8」、「4」以外の値である場合に、ステップ2406でYesと判断される。また、iPosが、「32」、「16」、「8」以外の値である場合に、ステップ2406でYesと判断される。ステップ2406でYesと判断された場合には、CPU11は、該当する分類項目を示す印を、音符の上部に配置する(ステップ2407)。たとえば、iStepTimeが所定の値であれば「T」という印が、iPosが所定の値であれば「P」という印が、画像において音符の上部に配置される。
【0135】
さらに、CPU11は、音符に印が付された分類項目に対応する色彩を付与する(ステップ2408)。その後、CPU11は、配列me[]に次の楽音データのレコードを格納して(ステップ2409)、ステップ2402に戻る。
【0136】
第3の実施の形態によれば、難易度表示処理において、CPU11は、楽曲を構成する音符のそれぞれについて、当該音符に関連付けられた、リズムに関する分類項目の分類値が所定の値であるときに、音符が当該分類項目に該当することを示す印を含むような楽譜を含む画像データを生成して、表示装置16の画面上に表示する。これにより、操作者(演奏者)は、楽曲においてリズムについて、所定の難易度を持つような音符を容易に知ることができる。
【符号の説明】
【0137】
10 楽曲難易度評価装置
11 CPU
12 ROM
13 RAM
14 大規模記憶装置
15 入力装置
16 表示装置
17 サウンドシステム
18 鍵盤
【特許請求の範囲】
【請求項1】
楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段と、
前記音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出手段と、
前記音符についての時間情報に基づいて、当該音符長および音符のタイミングに関するリズム難易度を算出するリズム難易度算出手段と、
前記音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出手段と、
前記運指難易度算出手段により算出された運指難易度、前記リズム難易度算出手段により算出されたリズム難易度および調性難易度算出手段により算出された調性難易度に基づき、楽曲の難易度を算出する全体難易度算出手段と、を備えたことを特徴とする楽曲難易度算出装置。
【請求項2】
前記運指難易度算出手段が、
隣接する音符を押鍵するときの指のポジションに関する第1の分類項目について、当該分類項目における具体的態様を示す第1の分類値、隣接する音符を押鍵するときの指の開き具合に関する第2の分類項目について、当該第2の分類項目における具体的態様を示す第2の分類値、指くぐり或いは指返しに関する第3の分類項目について、当該第3の分類項目における具体的態様を示す第3の分類値、および、隣接する音符を押鍵するときの指換えに関する第4の分類項目について、当該第4の分類項目における具体的態様を示す第4の分類値のうち、少なくとも1つの分類項目についても分類値を取得する第1の分類項目値取得手段と、
前記分類項目のそれぞれにおいて、前記分類項目における分類値に基づいて、前記分類項目における前記具体的態様に対するコスト値を格納した、前記記憶手段中のコストテーブルから、前記分類項目における前記具体的態様に対するコスト値を取得するとともに、当該コスト値を累算し、前記累算されたコスト値を前記運指に関する難易度として取得する第1のコスト累算手段と、
を有することを特徴とする請求項1に記載の楽曲難易度算出装置。
【請求項3】
前記第1の分類項目値取得手段が、前記音符ごとに、前記分類項目中の分類値が所定の値であるときに、前記分類項目の分類値のカウント値を格納する、前記記憶手段中のカウントマップにおいて、対応するカウント値を増分させ、
前記第1のコスト累算手段が、前記カウントマップ中のカウント値を参照して、前記カウント値が「1」以上であるときに、前記コストテーブル中の、前記対応するコスト値を累算するように構成されたことを特徴とする請求項2に記載の楽曲難易度算出装置。
【請求項4】
前記リズム難易度算出手段が、音符長に関する第5の分類項目について、当該分類項目における具体的態様を示す第5の分類値、音符の小節中の位置に関する第6の分類項目について、当該分類項目における具体的態様を示す第6の分類値のうち、少なくとも1つの分類項目についても分類値を取得する第2の分類項目値取得手段と、
前記分類項目のそれぞれにおいて、前記分類項目における分類値に基づいて、前記分類項目における前記具体的態様に対するコスト値を格納した、前記記憶手段中のコストテーブルから、前記分類項目における前記具体的態様に対するコスト値を取得し、前記コスト値を累算し、前記累算されたコスト値を前記リズムに関する難易度として取得する第2のコスト累算手段と、
を有することを特徴とする請求項1ないし3の何れか一項に記載の楽曲難易度算出装置。
【請求項5】
前記調性難易度算出手段が、
前記音符の音高情報に基づいて前記楽曲の調性を特定し、
前記特定された調性の音階と前記楽曲中の音符の音高との一致度、および、前記特定された調性の音階と前記楽曲中の音符の音高との不一致度に基づき前記調性難易度を算出するように構成されたことを特徴とする請求項1ないし4の何れか一項に記載の楽曲難易度算出装置。
【請求項6】
前記調性難易度算出手段が、
前記一致度と不一致度との差異に対する前記不一致度の割合に基づいて、前記調性難易度を算出することを特徴等する請求項5に記載の楽曲難易度算出装置。
【請求項7】
前記楽音データが、楽曲のテンポを示すデータを含み、
前記全体難易度算出手段が、前記運指難易度およびリズム難易度のそれぞれに、前記楽曲のテンポに応じた重みを与え、重みが与えられた運指難易度およびリズム難易度により全体難易度を算出するように構成されたことを特徴等する請求項1ないし6の何れか一項に記載の楽曲難易度算出装置。
【請求項8】
前記第1の分類値取得手段が、前記音符ごとに、前記運指に関する分類項目のそれぞれの分類値を、前記音符に関連付けて記憶手段に格納するように構成され、
前記楽曲を構成する音符が五線譜上に配置された楽譜を含む画像データを生成して表示装置の画面上に表示させる画像生成手段を備え、
前記画像生成手段が、前記音符のそれぞれについて、前記記憶手段に格納された、当該音符に関連付けられた、前記運指に関する分類項目の分類値が所定の値であるときに、前記音符が当該分類項目に該当することを示す印を含むような前記楽譜を含む画像データを生成するように構成されたことを特徴とする請求項1ないし7の何れか一項に記載の楽曲難易度算出装置。
【請求項9】
前記第2の分類値取得手段が、前記音符ごとに、前記リズムに関する分類項目のそれぞれの分類値を、前記音符に関連付けて記憶手段に格納するように構成され、
前記楽曲を構成する音符が五線譜上に配置された楽譜を含む画像データを生成して表示装置の画面上に表示させる画像生成手段を備え、
前記画像生成手段が、前記音符のそれぞれについて、前記記憶手段に格納された、当該音符に関連付けられた、前記リズムに関する分類項目の分類値が所定の値であるときに、前記音符が当該分類項目に該当することを示す印を含むような前記楽譜を含む画像データを生成するように構成されたことを特徴とする請求項1ないし8の何れか一項に記載の楽曲難易度算出装置。
【請求項10】
楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段を備えたコンピュータに、
前記音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出ステップと、
前記音符についての時間情報に基づく、当該音符長および押鍵タイミングに関するリズム難易度を算出するリズム難易度算出ステップと、
前記音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出ステップと、
前記運指難易度算出ステップにおいて算出された運指難易度、前記リズム難易度算出ステップにおいて算出されたリズム難易度および調性難易度算出ステップにおいて算出された調性難易度に基づき、楽曲の難易度を算出する全体難易度算出ステップと、を実行させることを特徴とする楽曲難易度算出プログラム。
【請求項1】
楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段と、
前記音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出手段と、
前記音符についての時間情報に基づいて、当該音符長および音符のタイミングに関するリズム難易度を算出するリズム難易度算出手段と、
前記音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出手段と、
前記運指難易度算出手段により算出された運指難易度、前記リズム難易度算出手段により算出されたリズム難易度および調性難易度算出手段により算出された調性難易度に基づき、楽曲の難易度を算出する全体難易度算出手段と、を備えたことを特徴とする楽曲難易度算出装置。
【請求項2】
前記運指難易度算出手段が、
隣接する音符を押鍵するときの指のポジションに関する第1の分類項目について、当該分類項目における具体的態様を示す第1の分類値、隣接する音符を押鍵するときの指の開き具合に関する第2の分類項目について、当該第2の分類項目における具体的態様を示す第2の分類値、指くぐり或いは指返しに関する第3の分類項目について、当該第3の分類項目における具体的態様を示す第3の分類値、および、隣接する音符を押鍵するときの指換えに関する第4の分類項目について、当該第4の分類項目における具体的態様を示す第4の分類値のうち、少なくとも1つの分類項目についても分類値を取得する第1の分類項目値取得手段と、
前記分類項目のそれぞれにおいて、前記分類項目における分類値に基づいて、前記分類項目における前記具体的態様に対するコスト値を格納した、前記記憶手段中のコストテーブルから、前記分類項目における前記具体的態様に対するコスト値を取得するとともに、当該コスト値を累算し、前記累算されたコスト値を前記運指に関する難易度として取得する第1のコスト累算手段と、
を有することを特徴とする請求項1に記載の楽曲難易度算出装置。
【請求項3】
前記第1の分類項目値取得手段が、前記音符ごとに、前記分類項目中の分類値が所定の値であるときに、前記分類項目の分類値のカウント値を格納する、前記記憶手段中のカウントマップにおいて、対応するカウント値を増分させ、
前記第1のコスト累算手段が、前記カウントマップ中のカウント値を参照して、前記カウント値が「1」以上であるときに、前記コストテーブル中の、前記対応するコスト値を累算するように構成されたことを特徴とする請求項2に記載の楽曲難易度算出装置。
【請求項4】
前記リズム難易度算出手段が、音符長に関する第5の分類項目について、当該分類項目における具体的態様を示す第5の分類値、音符の小節中の位置に関する第6の分類項目について、当該分類項目における具体的態様を示す第6の分類値のうち、少なくとも1つの分類項目についても分類値を取得する第2の分類項目値取得手段と、
前記分類項目のそれぞれにおいて、前記分類項目における分類値に基づいて、前記分類項目における前記具体的態様に対するコスト値を格納した、前記記憶手段中のコストテーブルから、前記分類項目における前記具体的態様に対するコスト値を取得し、前記コスト値を累算し、前記累算されたコスト値を前記リズムに関する難易度として取得する第2のコスト累算手段と、
を有することを特徴とする請求項1ないし3の何れか一項に記載の楽曲難易度算出装置。
【請求項5】
前記調性難易度算出手段が、
前記音符の音高情報に基づいて前記楽曲の調性を特定し、
前記特定された調性の音階と前記楽曲中の音符の音高との一致度、および、前記特定された調性の音階と前記楽曲中の音符の音高との不一致度に基づき前記調性難易度を算出するように構成されたことを特徴とする請求項1ないし4の何れか一項に記載の楽曲難易度算出装置。
【請求項6】
前記調性難易度算出手段が、
前記一致度と不一致度との差異に対する前記不一致度の割合に基づいて、前記調性難易度を算出することを特徴等する請求項5に記載の楽曲難易度算出装置。
【請求項7】
前記楽音データが、楽曲のテンポを示すデータを含み、
前記全体難易度算出手段が、前記運指難易度およびリズム難易度のそれぞれに、前記楽曲のテンポに応じた重みを与え、重みが与えられた運指難易度およびリズム難易度により全体難易度を算出するように構成されたことを特徴等する請求項1ないし6の何れか一項に記載の楽曲難易度算出装置。
【請求項8】
前記第1の分類値取得手段が、前記音符ごとに、前記運指に関する分類項目のそれぞれの分類値を、前記音符に関連付けて記憶手段に格納するように構成され、
前記楽曲を構成する音符が五線譜上に配置された楽譜を含む画像データを生成して表示装置の画面上に表示させる画像生成手段を備え、
前記画像生成手段が、前記音符のそれぞれについて、前記記憶手段に格納された、当該音符に関連付けられた、前記運指に関する分類項目の分類値が所定の値であるときに、前記音符が当該分類項目に該当することを示す印を含むような前記楽譜を含む画像データを生成するように構成されたことを特徴とする請求項1ないし7の何れか一項に記載の楽曲難易度算出装置。
【請求項9】
前記第2の分類値取得手段が、前記音符ごとに、前記リズムに関する分類項目のそれぞれの分類値を、前記音符に関連付けて記憶手段に格納するように構成され、
前記楽曲を構成する音符が五線譜上に配置された楽譜を含む画像データを生成して表示装置の画面上に表示させる画像生成手段を備え、
前記画像生成手段が、前記音符のそれぞれについて、前記記憶手段に格納された、当該音符に関連付けられた、前記リズムに関する分類項目の分類値が所定の値であるときに、前記音符が当該分類項目に該当することを示す印を含むような前記楽譜を含む画像データを生成するように構成されたことを特徴とする請求項1ないし8の何れか一項に記載の楽曲難易度算出装置。
【請求項10】
楽曲を構成する音符ごとの音高情報、当該音符を押鍵する際の運指情報、および、当該音符についての時間情報を含む楽音データを格納した記憶手段を備えたコンピュータに、
前記音高情報および運指情報に基づいて、隣接する音符を押鍵する運指に関する運指難易度を算出する運指難易度算出ステップと、
前記音符についての時間情報に基づく、当該音符長および押鍵タイミングに関するリズム難易度を算出するリズム難易度算出ステップと、
前記音符の音高情報に基づいて、当該楽曲の調性に関する調性難易度を算出する調性難易度算出ステップと、
前記運指難易度算出ステップにおいて算出された運指難易度、前記リズム難易度算出ステップにおいて算出されたリズム難易度および調性難易度算出ステップにおいて算出された調性難易度に基づき、楽曲の難易度を算出する全体難易度算出ステップと、を実行させることを特徴とする楽曲難易度算出プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【公開番号】特開2010−276891(P2010−276891A)
【公開日】平成22年12月9日(2010.12.9)
【国際特許分類】
【出願番号】特願2009−129809(P2009−129809)
【出願日】平成21年5月29日(2009.5.29)
【出願人】(000001443)カシオ計算機株式会社 (8,748)
【Fターム(参考)】
【公開日】平成22年12月9日(2010.12.9)
【国際特許分類】
【出願日】平成21年5月29日(2009.5.29)
【出願人】(000001443)カシオ計算機株式会社 (8,748)
【Fターム(参考)】
[ Back to top ]