(57)【特許請求の範囲】
【請求項１】
音高及び発音開始タイミングを夫々含む複数のノートから成る楽曲データの演奏内容を分析することにより、当該演奏上の難易度を表わす分析データを生成する装置であって、
前記楽曲データを記憶する記憶手段と、
この記憶手段に記憶された楽曲データから、当該楽曲を演奏する際の手指の移動量、楽譜上で音符に臨時記号を付して表される変化音を含む割合、及び該楽曲のリズムが変化する度合い、のうちの少なくとも一つに着目して前記演奏上の難易度を評価するための分析を行い、該演奏上の難易度を表わす分析データを生成する分析データ生成手段と、
を具備することを特徴とする楽曲分析装置。
【請求項２】
前記分析データ生成手段は、
前記記憶手段に記憶されている楽曲データを構成する複数のノートを先頭から順に指定する第１のノート指定手段と、
この第１のノート指定手段によりノートが指定されると、当該指定されたノートに続く次のノートを順次指定することにより、前記第１のノート指定手段にて指定されたノートの発音開始タイミングと所定値以上の差を有する発音開始タイミングを有するノートを指定する第２のノート指定手段と、
この第２のノート指定手段にて指定されたノートに続く次のノートを順次指定し、この指定されたノートが前記第２のノート指定手段にて指定されたノートの発音開始タイミングと所定値未満の差を有する発音開始タイミングを有するノートでかつ、前記第１のノート指定手段にて指定されているノートの音高により近い音高を有するノートである場合は、当該ノートを前記第２のノート指定手段にて指定されたノートとするノート置換手段と、
前記指定されたノートが前記第２のノート指定手段にて指定されたノートの発音開始タイミングと所定値以上の差を有する発音開始タイミングを有するノートである場合は、当該ノートを指定する第３のノート指定手段と、
前記第１及び第２のノート指定手段にて夫々指定されたノートの発音開始タイミング差と、前記第２及び第３のノート指定手段にて夫々指定されたノートの発音開始タイミング差を比較し、差の大きい発音開始タイミング差を差の小さい発音開始タイミング差で除算することにより比率を算出する算出手段と、
前記楽曲データに含まれるノートの数をカウントするカウント手段と、
前記算出された比率を累算する累算手段と、  
前記第１のノート指定手段にて前記楽曲データに含まれるノートが全て指定された後、前記累算手段にて指定された比率と前記カウント手段にてカウントされたノート数とに基づいて当該比率の平均値を、前記楽曲のリズムが変化する度合いにより演奏上の難易度を表わす分析データとして生成する生成手段と、
を有することを特徴とする請求項１記載の楽曲分析装置。
【請求項３】
前記分析データ生成手段は、
テンポを設定するテンポ設定手段と、
和音である場合の難易度の初期値を設定する和音難易度設定手段と、
前記記憶手段に記憶されている楽曲データを構成する複数のノートを先頭から順に指定する第１のノート指定手段と、
この第１のノート指定手段によりノートが指定されると、当該指定されたノートに続く次のノートを指定し、当該次のノートが前記第１のノート指定手段にて指定されたノートの発音開始タイミングと所定値未満の差を有する発音開始タイミングを有するノートである毎に、前記和音難易度設定手段にてされている和音難易度の値を増加変更させる難易度増加手段と、
前記第１のノート指定手段によりノートが指定されると、当該指定されたノートに続く次のノートを順次指定することにより、前記第１のノート指定手段にて指定されたノートの発音開始タイミングと所定値以上の差を有する発音開始タイミングを有するノートを指定する第２のノート指定手段と、
この第２のノート指定手段にて指定されたノートに続く次のノートを順次指定し、この指定されたノートが前記第２のノート指定手段にて指定されたノートの発音開始タイミングと所定値未満の差を有する発音開始タイミングを有するノートでかつ、前記第１のノート指定手段にて指定されているノートの音高により近い音高を有するノートである場合は、当該ノートを前記第２のノート指定手段にて指定されたノートとするノート置換手段と、
前記楽曲データに含まれるノートの数をカウントするカウント手段と、
前記第１及び第２のノート指定手段にて指定されたノートの音高差を検知する音高差検知手段と、
この音高差検知手段で求められた音高差を前記第１及び第２のノート指定手段にて指定されたノートの発音開始タイミング差で除算した値、テンポ設定手段にて設定されたテンポ、及び和音難易度設定手段にて設定された和音難易度に基づいて手指の移動コストを算出する算出手段と、
前記算出された移動コストを累算する累算手段と、  
前記第１のノート指定手段にて前記楽曲データに含まれるノートが全て指定された後、前記累算手段にて指定された移動コストと前記カウント手段にてカウントされたノート数とに基づいて当該移動コストの平均値を、前記楽曲を演奏する際の手指の移動量により演奏上の難易度を表わす分析データとして生成する生成手段と、
を有することを特徴とする請求項１記載の楽曲分析装置。
【請求項４】
前記分析データ生成手段は
前記記憶手段に記憶された楽曲データを構成する各ノートの音高がスケールノートのいずれに該当するかを判別することにより、前記楽曲データのノート数を、スケールノート毎のノート数に分類するノート分類手段と、
このノート分類手段にて分類された各スケールのノート数に基づき、各調におけるスケールノートに該当するノート数と該当しないノート数を算出するノート数算出手段と、
ノート数算出手段にて算出されたスケールノートに該当するノート数が最大となる調において、当該該当するノート数と該当しないノート数とに基づき、該当しないノート数の比率を算出し、当該算出結果を、前記楽譜上で音符に臨時記号を付して表される変化音を含む割合により演奏上の難易度を表わす分析データとして生成する生成手段と、
を有することを特徴とする請求項１記載の楽曲分析装置。
【請求項５】
音高及び発音開始タイミングを夫々含む複数のノートから成る楽曲データの演奏内容を分析することにより、当該演奏上の難易度を表わす分析データを生成する装置に実行させるプログラムであって、
前記楽曲データを記憶する記憶手段に記憶された楽曲データから、当該楽曲を演奏する際の手指の移動量、楽譜上で音符に臨時記号を付して表される変化音を含む割合、及び該楽曲のリズムが変化する度合い、のうちの少なくとも一つに着目して前記演奏上の難易度を評価するための分析を行い、該演奏上の難易度を表わす分析データを生成する分析データ生成機能と、
を実現させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演奏再生用の演奏データ、或いは画像データで表される楽曲の演奏内容を分析するための技術に関する。
【０００２】
【従来の技術および発明が解決しようとする課題】
楽器の演奏の対象となる楽曲は数多く存在し、その演奏上の難易度も様々である。しかし、例えば初心者には、難易度の高い楽曲をスムーズに演奏することはできない。このようなことから、一定のレベルに達していない学習者は、自身のレベルに合った難易度の楽曲で楽器の練習を行うことが望ましいと云える。
【０００３】
従来、楽曲の演奏上の難易度を含む演奏内容は、人が判断していた。しかし、人が演奏内容を判断するには、演奏を聴くか、或いは楽譜を見なければならない。このため、演奏内容の判断を容易に行えないという問題点があった。
本発明の課題は、楽曲の演奏内容を分析して、その演奏内容をユーザが判断するうえで有用なデータを生成する楽曲分析装置を提供することにある。
【０００４】
【課題を解決するための手段】
本発明の楽曲分析装置は、音高及び発音開始タイミングを夫々含む複数のノートから成る楽曲データの演奏内容を分析することにより、当該演奏上の難易度を表わす分析データを生成することを前提とし、楽曲データを記憶する記憶手段と、記憶手段に記憶された楽曲データから、当該楽曲を演奏する際の手指の移動量、楽譜上で音符に臨時記号を付して表される変化音を含む割合、及び該楽曲のリズムが変化する度合い、のうちの少なくとも一つに着目して演奏上の難易度を評価するための分析を行い、該演奏上の難易度を表わす分析データを生成する分析データ生成手段と、を具備する。
【０００５】
なお、上記分析データ生成手段は、記憶手段に記憶されている楽曲データを構成する複数のノートを先頭から順に指定する第１のノート指定手段と、この第１のノート指定手段によりノートが指定されると、当該指定されたノートに続く次のノートを順次指定することにより、第１のノート指定手段にて指定されたノートの発音開始タイミングと所定値以上の差を有する発音開始タイミングを有するノートを指定する第２のノート指定手段と、この第２のノート指定手段にて指定されたノートに続く次のノートを順次指定し、この指定されたノートが第２のノート指定手段にて指定されたノートの発音開始タイミングと所定値未満の差を有する発音開始タイミングを有するノートでかつ、第１のノート指定手段にて指定されているノートの音高により近い音高を有するノートである場合は、当該ノートを第２のノート指定手段にて指定されたノートとするノート置換手段と、指定されたノートが第２のノート指定手段にて指定されたノートの発音開始タイミングと所定値以上の差を有する発音開始タイミングを有するノートである場合は、当該ノートを指定する第３のノート指定手段と、第１及び第２のノート指定手段にて夫々指定されたノートの発音開始タイミング差と、第２及び第３のノート指定手段にて夫々指定されたノートの発音開始タイミング差を比較し、差の大きい発音開始タイミング差を差の小さい発音開始タイミング差で除算することにより比率を算出する算出手段と、楽曲データに含まれるノートの数をカウントするカウント手段と、算出された比率を累算する累算手段と、第１のノート指定手段にて楽曲データに含まれるノートが全て指定された後、累算手段にて指定された比率とカウント手段にてカウントされたノート数とに基づいて当該比率の平均値を、楽曲のリズムが変化する度合いにより演奏上の難易度を表わす分析データとして生成する生成手段と、を有することが望ましい。
また、上記分析データ生成手段は、テンポを設定するテンポ設定手段と、和音である場合の難易度の初期値を設定する和音難易度設定手段と、記憶手段に記憶されている楽曲データを構成する複数のノートを先頭から順に指定する第１のノート指定手段と、この第１のノート指定手段によりノートが指定されると、当該指定されたノートに続く次のノートを指定し、当該次のノートが第１のノート指定手段にて指定されたノートの発音開始タイミングと所定値未満の差を有する発音開始タイミングを有するノートである毎に、和音難易度設定手段にてされている和音難易度の値を増加変更させる難易度増加手段と、第１のノート指定手段によりノートが指定されると、当該指定されたノートに続く次のノートを順次指定することにより、第１のノート指定手段にて指定されたノートの発音開始タイミングと所定値以上の差を有する発音開始タイミングを有するノートを指定する第２のノート指定手段と、この第２のノート指定手段にて指定されたノートに続く次のノートを順次指定し、この指定されたノートが前記第２のノート指定手段にて指定されたノートの発音開始タイミングと所定値未満の差を有する発音開始タイミングを有するノートでかつ、第１のノート指定手段にて指定されているノートの音高により近い音高を有するノートである場合は、当該ノートを第２のノート指定手段にて指定されたノートとするノート置換手段と、楽曲データに含まれるノートの数をカウントするカウント手段と、第１及び第２のノート指定手段にて指定されたノートの音高差を検知する音高差検知手段と、音高差検知手段で求められた音高差を第１及び第２のノート指定手段にて指定されたノートの発音開始タイミング差で除算した値、テンポ設定手段にて設定されたテンポ、及び和音難易度設定手段にて設定された和音難易度に基づいて手指の移動コストを算出する算出手段と、算出された移動コストを累算する累算手段と、第１のノート指定手段にて楽曲データに含まれるノートが全て指定された後、累算手段にて指定された移動コストとカウント手段にてカウントされたノート数とに基づいて当該移動コストの平均値を、楽曲を演奏する際の手指の移動量により演奏上の難易度を表わす分析データとして生成する生成手段と、を有することが望ましい。
さらに、上記分析データ生成手段は記憶手段に記憶された楽曲データを構成する各ノートの音高がスケールノートのいずれに該当するかを判別することにより、楽曲データのノート数を、スケールノート毎のノート数に分類するノート分類手段と、  ノート分類手段にて分類された各スケールのノート数に基づき、各調におけるスケールノートに該当するノート数と該当しないノート数を算出するノート数算出手段と、ノート数算出手段にて算出されたスケールノートに該当するノート数が最大となる調において、該当するノート数と該当しないノート数とに基づき、該当しないノート数の比率を算出し、当該算出結果を、楽譜上で音符に臨時記号を付して表される変化音を含む割合により演奏上の難易度を表わす分析データとして生成する生成手段と、を有することが望ましい。
【０００６】
本発明のプログラムは、音高及び発音開始タイミングを夫々含む複数のノートから成る楽曲データの演奏内容を分析することにより、当該演奏上の難易度を表わす分析データを生成する装置に実行させることを前提とし、楽曲データを記憶する記憶手段に記憶された楽曲データから、当該楽曲を演奏する際の手指の移動量、楽譜上で音符に臨時記号を付して表される変化音を含む割合、及び該楽曲のリズムが変化する度合い、のうちの少なくとも一つに着目して前記演奏上の難易度を評価するための分析を行い、該演奏上の難易度を表わす分析データを生成する分析データ生成機能と、を実現させる。
【０００７】
本発明では、楽曲の演奏内容を表す楽曲データを取得して、それが表す演奏内容の分析を行い、該演奏内容を表す分析データを生成する。それにより、ユーザは、実際の演奏を聴いたり、楽譜を見ることなく、その分析データを基に、楽曲の演奏内容を適切に判断することが行えるようになる。
【０００８】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図１は、本実施の形態による楽曲分析装置の回路構成図である。
図１に示すように、その楽曲分析装置は、装置全体の制御を実行するＣＰＵ１０１と、そのＣＰＵ１０１が実行するプログラムや各種制御用データなどを格納したＲＯＭ１０２と、そのＣＰＵ１０１がワーク用に使用するＲＡＭ１０３と、各種データを入力するための入力装置１０４と、ユーザに通知すべき情報を通知するためのモニター１０５と、それらを相互に接続するバス１０６と、を備えて構成されている。それにより、その楽曲分析装置は、入力装置１０４から演奏内容を表すデータ（以降、曲データと呼ぶ）を入力してその演奏内容を分析し、その分析結果をモニター１０５に出力する装置として実現されている。
【０００９】
上記入力装置１０４には、キーボードやフロッピーディスク装置、ＣＤ−ＲＯＭ装置、或いは外部装置との通信を行うインターフェースなどが対応する。モニター１０５には、表示装置やフロッピーディスク装置、或いは外部装置との通信を行うインターフェースなどが対応する。当然のことながら、入力装置１０４、及びモニター１０５に、それぞれ複数の装置が対応していても良く、それらが同じものであっても良い。本実施の形態では、複数の装置が入力装置１０４に対応している。
【００１０】
以上の構成において、動作を説明する。
ＣＰＵ１０１は、電源がオンされると、ＲＯＭ１０２に格納されたプログラムを読み出して実行することにより、装置全体の制御を開始する。その制御は、入力装置１０４を介して受け取るユーザの指示に対応する形で行う。
【００１１】
ユーザが曲データの入力を指示した場合、ＣＰＵ１０１は、入力装置１０４を介して曲データを入力し、その曲データに識別用の曲番号を割り当ててＲＡＭ１０３に格納する。格納した曲データの総数は、例えばモニター１０５を介してユーザに通知する。
【００１２】
図２は、上記曲データの構成を説明する図である。その図２において、「曲０のデータ」「曲１のデータ」は、入力装置１０４から入力されてＲＡＭ１０３に格納された曲データであり、それぞれ曲番号「０」「１」が割り当てられていることを表している。
【００１３】
その曲データは、自動演奏用のデータである。先頭にデータポインター群が格納され、それに続く形で更に、右手トラック、左手トラック、曲名を表すデータ、及び音色を指定するデータが格納されている。
上記右手トラックは、右手で行われる演奏上のイベントの内容を示すイベントデータがイベントの発生順に並べて構成されたイベントデータ群であり、左手トラックは、逆に左手で行われる演奏上のイベントの内容を示すイベントデータがイベントの発生順に並べて構成されたイベントデータ群である。そのイベントデータは図２中、「ノート０」「ノート１」で表してある。
【００１４】
イベントデータの先頭には、そのイベントデータの種類を表すステータスデータが格納されている。そのステータスデータが楽音の発音を指示するデータであれば、それに続く形で、音高を示すピッチデータ、音量を示すベロシティーデータ、発音開始時間を示す時間データ、及び発音を持続させる持続時間（ゲートタイム）を示す持続時間データがその順序で格納される。それらのデータは、それぞれ、配列変数ｂｙＤａｔａの要素ｂｙＤａｔａ［０］〜［２］として扱われる。時間データは変数ＩＴｉｍｅ、持続時間データは変数ＩＧａｔｅとして扱われる。なお、発音開始時間は、例えば曲の先頭といったように、予め定めた時間的位置を基準として、その基準から経過した時間で楽音の発音を開始するタイミングを表したものである。
【００１５】
上記データーポインター群は、例えば右手トラックの先頭位置を示すアドレス（相対アドレス）、左手トラックの先頭位置を示すアドレス（相対アドレス）、曲名を示すデータ、音色を指定するデータの各アドレス（相対アドレス）を示す値をそれぞれ格納した複数のデータポインターから構成される。それにより、データポインター群を参照することで所望のデータやトラックにアクセスできるようになっている。
【００１６】
なお、本実施の形態では、上述したような構成の曲データを対象に、それが表す演奏内容を分析するようになっているが、その曲データの構成はそれに限定されるものではない。スタンダードＭＩＤＩファイルなどのようなものであっても良い。或いは楽譜などを表示するための画像データであっても良い。このことから明らかなように、演奏内容を表しているのであればデータの種類や構成は特に限定されるものではない。
【００１７】
ユーザが楽曲の分析（評価）を指示した場合には、ＣＰＵ１０１は、ＲＡＭ１０３に格納されている曲データを対象に、曲データ単位でそれが表す演奏内容の分析を行い、その分析結果を保存する。ここでは、その分析によって楽曲の演奏上の難易度にかかわる各種音楽要素を評価し、それらの評価結果を分析結果として保存する。各種音楽要素の評価結果は、それぞれ変数として扱っている。
【００１８】
図３は、曲データの評価結果、及びその内容を説明する図である。
曲データは、上述したように、イベントデータが右手トラック、左手トラックに分けてまとめられている（図２参照）。このことに合わせて、本実施の形態では、各トラック毎に演奏内容の評価を行っている。図３において、「右手の評価結果」「左手の評価結果」は、それぞれ、右手トラック、左手トラックを対象に行った評価結果を表している。「曲名」「音色指定」は評価の対象とした曲データ中からコピーしたデータである（図２参照）。
【００１９】
本実施の形態では、図３に示すように、右手、左手の各評価結果として、それぞれ、移動コストの平均、移動コスト最大値、音符密度、リズムの複雑さ、調の難しさ、及びモードの難しさの計６種類の評価結果を格納している。移動コストの平均とは、楽音を鳴らしてから次の楽音を鳴らすために手指を移動させる労力（移動コスト）の平均であり、移動コスト最大値とは、その移動コストのなかでの最大値である。音符密度は、鳴らす楽音の総数を楽曲の演奏時間で割って得られる値（単位時間当たりに鳴らす楽音数）である。リズムの複雑さは、隣接する楽音間の時間的間隔が変動する度合いを数値化したもの、調の難しさは、楽曲が持つ調性による演奏上の難易度を数値化したもの、モードの難しさは、楽譜上で音符に臨時記号（嬰記号や変記号など）を付して表される変化音に着目して楽曲の難しさを数値化したものである。それらの評価（分析）方法の詳細については後述する。なお、本実施の形態では、調の難しさ、及びモードの難しさは、右手、左手という区別をせずに評価を行い、右手の評価結果として格納している。
【００２０】
本実施の形態では、楽音が変化音か否か判定するために、図４に示すように各要素に値が格納された配列変数ｉＤｉａｔｏｎｉｃを用意している。その配列変数ｉＤｉａｔｏｎｉｃを構成する要素は全音階を構成する音にそれぞれ対応させてあり、要素に格納された値の「１」は変化音でないことを示し、「０」は変化音であることを示している。
【００２１】
上記各評価結果は、右手と左手とでは同じ配列変数で要素を異ならせて扱っている。具体的には、移動コスト平均は配列変数ｄｏＤｉｆｆｉｃ、移動コスト最大値は配列変数ｄｏＤｉｆｆｉｃａｘ、音符密度は配列変数ｄｏＤｅｎｓｉｔｙ、リズムの複雑さは配列変数ｄｏＲＤｉｆｆｉｃ、調の難しさは配列変数ｄｏＤｉｆｆｉｃｋｅｙ、モードの難しさは配列変数ｄｏＤｉｆｆｉｃＭｏｄｅで扱っている。右手の評価結果用の要素を指定する値は「０」、左手のそれは「１」である。
【００２２】
ユーザが楽曲の分析（評価）結果の表示を指示した場合には、ＣＰＵ１０１は、各楽曲（曲データ）毎に、その評価結果をモニター１０５に出力することで表示させる。それにより、評価結果をユーザに通知する。
上述したような評価結果を通知することで、実際の演奏を聴いたり、或いは楽譜を見ることなく、ユーザはその評価結果から楽曲の演奏内容（ここでは演奏の難易度）を予想したり判断するといったことが行えるようになる。また、その評価結果から、楽曲間の比較を客観的に行えるようになる。
【００２３】
次に、図５〜図１０に示す各種フローチャートを参照して、上記ＣＰＵ１０１の動作について詳細に説明する。
図５は、全体処理のフローチャートである。電源がオンされた後にＣＰＵ１０１が実行する全体的な処理の流れを表したものである。始めに図５を参照して、その全体処理について詳細に説明する。なお、その全体処理は、ＣＰＵ１０１が、ＲＡＭ１０３をワーク用に使用しながら、ＲＯＭ１０２から読み出したプログラムを実行することにより実現される。入力装置１０４には、例えばキーボードとフロッピーディスク装置といったように、複数の装置が対応している。
【００２４】
先ず、ステップ５０１では、初期化処理を行う。その処理の実行により装置を予め定められた状態に設定した後はステップ５０２に移行して、入力装置（ここでは例えばキーボード）１０４のスキャンを行う。その後はステップ５０３に移行する。
【００２５】
ステップ５０３では、スキャンを行った結果、ユーザによる楽曲（曲データ）の評価（分析）の指示を検出したか否か判定する。ユーザが特定のスイッチを操作するなどしてその指示を行った場合、判定はＹＥＳとなり、ステップ５０４で楽曲の評価を行ってその評価結果（図３参照）を保存する評価処理を実行した後、上記ステップ５０２に戻る。そうでない場合には、判定はＮＯとなってステップ５０５に移行する。
【００２６】
ステップ５０５では、ユーザによる評価結果の表示の指示を検出したか否か判定する。ユーザが特定のスイッチを操作するなどしてその指示を行った場合、判定はＹＥＳとなり、ステップ５０６で楽曲の評価結果をモニター１０５に出力することにより表示させる表示処理を実行した後、上記ステップ５０２に戻る。そうでない場合には、判定はＮＯとなってステップ５０７に移行する。
【００２７】
ステップ５０７では、ユーザによる曲入力の指示を検出したか否か判定する。ユーザが特定のスイッチを操作するなどしてその指示を行った場合、判定はＹＥＳとなり、ステップ５０８で入力装置１０４に対応するフロッピーディスク装置などから曲データを入力してＲＡＭ１０３に格納（図２参照）する曲入力処理を実行した後、上記ステップ５０２に戻る。そうでない場合には、判定はＮＯとなり、他のステップの処理を実行することなく、そのステップ５０２に戻る。
【００２８】
図６は、上記ステップ５０４として実行される評価処理のフローチャートである。次に図６を参照して、その評価処理について詳細に説明する。その評価処理では、評価の対象とする曲データを順次、変更しながら、各曲データ毎にその評価を行うようになっている。
【００２９】
先ず、ステップ６０１では、評価の対象とする曲データを管理するために用意した変数ｓに０を代入する。続くステップ６０２では、ＲＡＭ１０３に格納した曲データ全ての評価が終了したか否か判定する。評価の対象とする曲データを指定する変数ｓの値は順次、インクリメントすることから、その値に対応する曲データがＲＡＭ１０３に格納されていないような場合、判定はＹＥＳとなり、ここで一連の処理を終了する。そうでない場合には、判定はＮＯとなってステップ６０３に移行する。
【００３０】
ステップ６０３では、変数ｓの値で指定される曲データ中のデータポインター群（図２参照）等を読み出したり、評価結果を保存するための領域をＲＡＭ１０３に確保して、その領域内に曲データ中から「曲名」「音色指定」をコピーする等のことを行い、その曲データを評価するうえでの準備をする。その次に移行するステップ６０４では、その曲データを対象に評価を行う１曲評価処理を実行する。それを実行すると、ステップ６０５で変数ｓの値をインクリメントした後、上記ステップ６０２に戻る。それにより、１曲データ毎に、その評価を行う。
【００３１】
次に、上記ステップ６０４として実行される１曲評価処理について、図７〜図１０に示すそのフローチャートを参照して詳細に説明する。なお、上記ステップ６０３の処理では、読み出したデータポインター群を、配列変数ｃＣｈの各要素に代入するようになっている。
【００３２】
先ず、ステップ７０１では、変数ｄｏＴｅｍｐｏにテンポ値を代入する。続くステップ７０２では、曲データ中の右手、或いは左手トラックを構成するイベントデータを参照して、楽曲の長さ（演奏時間）を求め、それを表す値を変数ｕＬｅｎｇｔｈに代入する。その次に移行するステップ７０３では、変数ｉに０を代入する。その後はステップ７０４に移行する。
【００３３】
ステップ７０４では、変数ｉの値が２以上か否か判定する。この時点では、変数ｉは評価の対象とするトラックを管理するために用いている。このことから、右手、及び左手の両トラックに対する評価が終了した場合、判定はＹＥＳとなり、図１０に示すステップ７３６に移行する。そうでない場合には、判定はＮＯとなってステップ７０５に移行する。
【００３４】
ステップ７０５では、トラック（を構成するイベントデータ群によって表される演奏内容）を対象にした評価を開始するうえでの初期設定を行う。具体的には、変数ｉＴｒには配列要素ｃＣｈの変数ｉの値で指定される要素ｃＣｈ［ｉ］の値（変数ｉの値が０であれば右手トラックの先頭位置を示すアドレス）を代入し、各種評価用に用意した変数ｄｏＤｉｆｆｉｃｕｌｔｙ、ｄｏＲＤｉｆｆｉｃｕｌｔｙ、ｉＮＣｎｔ、ｄｏＭｅａｎ、及びｄｏＤＭａｘにはそれぞれ０を代入し、変数ｄｏＷａｏｎには１を代入する。それ以外には、変数ｍｅにはトラックの先頭に位置するイベントデータを指定する値（図中では先頭ノートポインターと表記）、変数ｎｅにはその次のイベントデータを指定する値をそれぞれ代入する。そのようにして初期設定を行った後はステップ７０６に移行する。
【００３５】
ステップ７０６〜図９のステップ７３５では、変数ｉの値で指定されるトラックを対象に、変数ｍｅの値を順次、更新しながら、配列変数ｄｏＤｉｆｆｉｃ、ｄｏＤｉｆｆｉｃａｘ、ｄｏＤｅｎｓｉｔｙ、及びｄｏＲＤｉｆｆｉｃで扱う評価結果を求めるための処理が行われる。
【００３６】
先ず、ステップ７０６では、変数ｉの値で指定されるトラックのなかで処理対象とするイベントデータが無くなったか否か判定する。指定されるイベントデータが無くなるまで変数ｍｅの値を更新したような場合、判定はＹＥＳとなってステップ７１０に移行する。そうでない場合には、判定はＮＯとなってステップ７０７に移行する。
【００３７】
ステップ７０７では、変数ｎｅの値で指定されるイベントデータ中のＩＴｉｍｅ（発音開始時間）から変数ｍｅの値で指定されるイベントデータ中のＩＴｉｍｅを減算して得られる値ａ（図中ではａ＝ｎｅ−＞ＩＴｉｍｅ−ｍｅ−＞ＩＴｉｍｅと表記）を、和音の判定用に設定した値の１０と比較する。その１０は、和音の構成音の１つが発音を開始してから全ての発音が開始するまでの時間間隔や、音符の発音持続時間などを考慮して設定した時間間隔（以降、便宜的に和音判定間隔と呼ぶ）を表す値である。このことから、値ａを１０と比較した結果、値ａが１０以下と判定した場合には、変数ｍｅ、ｎｅの各値で指定されるイベントデータが表す楽音が和音の構成音であるとしてステップ７０８に移行する。そうでないと判定、即ち値ａが１０より大きいと判定した場合には、図８のステップ７１６に移行する。
【００３８】
ステップ７０８では、変数ｄｏＷａｏｎに、それまでの値に２を掛けた値を代入する。続くステップ７０９では、変数ｎｅに、それまで指定していたイベントデータの次に位置するイベントデータを指定する値を代入する。その後はステップ７０７に戻る。
【００３９】
このようにして、本実施の形態では、ステップ７０７〜７０９で形成される処理ループを、変数ｎｅの値を随時、更新しながら、値ａが１０より大きいとステップ７０７で判定するまで繰り返し実行する。それにより、変数Ｗａｏｎの値は、和音の数が多いほど、その和音の構成音の数が多いほど、大きくなるように更新するようにしている。
【００４０】
そのステップ７０７で値ａが１０より大きいと判定した場合に移行する図８のステップ７１６では、変数ｐｅに、変数ｎｅの値で指定されるイベントデータの次に位置するイベントデータを指定する値を代入する。なお、このとき変数ｎｅの値で指定されるイベントデータが表す楽音は、変数ｍｅの値で指定されるイベントデータが表す楽音とは和音を構成するものではない。また、以降、特に断らない限り、イベントデータは楽音と同じ意味で用いることにする。
【００４１】
ステップ７１７では、変数ｐｅの値で指定されるイベントデータ中のＩＴｉｍｅ（発音開始時間）から変数ｎｅの値で指定されるイベントデータ中のＩＴｉｍｅを減算して得られる値ａ（図中ではａ＝ｐｅ−＞ＩＴｉｍｅ−ｎｅ−＞ＩＴｉｍｅと表記）を、和音判定間隔を表す値の１０と比較する。その比較の結果、値ａが１０以上と判定した場合、発音開始時間の間隔から、変数ｐｅの値で指定される楽音（イベントデータ）と、変数ｎｅの値で指定されるそれとが同じ和音を構成していないとして、ステップ７２１に移行する。そうでないと判定、即ち値ａが１０未満と判定した場合には、それらで指定される楽音（イベントデータ）は同じ和音を構成しているとして、ステップ７１８に移行する。
【００４２】
そのステップ７１８では、変数ｐｅの値で指定されるイベントデータ中のピッチデータ（音高を示す値）と変数ｍｅの値で指定されるイベントデータ中のピッチデータの差が、変数ｎｅ、ｍｅ間におけるそれより小さいか否か判定する。前者のピッチデータの差が後者のそれより小さい場合、判定はＹＥＳとなり、ステップ７１９で変数ｎｅに変数ｐｅの値を代入し、更にステップ７２０で変数ｐｅにそれまで指定していたイベントデータの次に位置するイベントデータを指定する値を代入した後、上記ステップ７１７に戻る。そうでない場合には、判定はＮＯとなってそのステップ７２０に移行する。
【００４３】
変数ｍｅの値で指定されるイベントデータが表す楽音が和音を構成し、その和音に続く形で別の和音が存在しているような場合、上記ステップ７１７〜７２０で形成される処理ループが実行される。それにより、変数ｎｅには、続く和音の構成音のなかで、変数ｍｅの値で指定される楽音（イベントデータ）との音程が最も小さい楽音を指定する値が代入されることになる。
【００４４】
ステップ７１７で値ａが１０以上と判定した場合に移行するステップ７２１では、変数ｐｅに、変数ｎｅの値で指定されるイベントデータの次に位置するイベントデータを指定する値を代入する。次に移行するステップ７２２では、変数ｐｅの値で指定されるイベントデータ中のＩＴｉｍｅ（発音開始時間）の値から変数ｎｅの値で指定されるイベントデータ中のＩＴｉｍｅの値を減算して得られる値ａ（図中ではａ＝ｐｅ−＞ＩＴｉｍｅ−ｎｅ−＞ＩＴｉｍｅと表記）を、和音判定間隔を表す値の１０と比較する。その比較の結果、値ａが１０以上と判定した場合、ステップ７２４に移行する。そうでないと判定、即ち値ａが１０未満と判定した場合には、ステップ７２３で変数ｐｅにそれまで指定していたイベントデータの次に位置するイベントデータを指定する値を代入した後、上記ステップ７２２に戻る。
【００４５】
このようにして、ステップ７２４に移行した時点では、和音は１つの楽音と見なして、変数ｍｅ、ｎｅ、及びｐｅの各値で指定される３つの楽音が特定される。ステップ７２４〜図９の７３５では、これまで更新した変数を用いて、各種評価用に用意した変数を更新するための処理が行われる。
【００４６】
先ず、ステップ７２４では、変数ｎｅ、ｍｅの値で指定される楽音間の発音開始時間の差が、変数ｐｅ、ｎｅの値で指定される楽音間のそれより大きいか否か判定する。前者の差が後者の差より大きい場合、判定はＹＥＳとなり、ステップ７２５において、変数ｄｏＲＶに、変数ｎｅの値で指定されるイベントデータ中のＩＴｉｍｅ（発音開始時間）の値から変数ｍｅの値で指定されるイベントデータ中のそれを引いた値を、変数ｐｅの値で指定されるイベントデータ中のＩＴｉｍｅ（発音開始時間）の値から変数ｎｅの値で指定されるイベントデータ中のそれを引いた値で割って得られる値を代入した後、図９のステップ７２７に移行する。そうでない場合には、判定はＮＯとなり、ステップ７２６において、変数ｄｏＲＶに、ステップ７２５とは分子と分母を逆にして求められる値を代入した後、そのステップ７２７に移行する。
【００４７】
変数ｍｅ、ｎｅ、及びｐｅの各値で指定される楽音をそれぞれ第１〜第３楽音とすると、上述したように求めて変数ｄｏＲＶに代入する値は、第１楽音と第２楽音間の発音開始時間の差と、第２楽音と第３楽音間におけるそれとの比率が大きくなるほど、或いは小さくなるほど、大きくなる。隣接する楽音間の発音開始時間の差が変動するほど、大きくなる。そのように変化する値を、リズムの複雑さを表すものとして変数ｄｏＲＶに代入している。
【００４８】
図９のステップ７２７では、変数ｉＮＣｎｔの値をインクリメントする。続くステップ７２８では、変数ｉＰｉｄＤに、変数ｎｅの値で指定されるイベントデータ中のピッチデータの値から、変数ｍｅの値で指定されるイベントデータ中のそれを引いた値の絶対値を代入する（図中では、ｉＰｉｄＤ＝ａｂｓ（ｎｅ−＞ｂｙＤａｔａ［１］−ｍｅ−＞ｂｙＤａｔａ［１］と表記）。その次に実行するステップ７２９では、変数ｄｏＷａｏｎ、ｄｏＴｅｍｐｏ、及び配列変数ｄｏＰｉｔＶａｌｕｅの変数ｉＰｉｄＤの値で指定される要素ｄｏＰｉｔＶａｌｕｅ［ｉＰｉｄＤ］の各値を掛けた値を、変数ｎｅ、ｍｅの各値で指定される楽音間の発音開始時間の差（図中ではｄｏＤｅｌｔａＴｉｍｅと表記）で割った値を求め、その求めた値（＝ｄｏＷａｏｎ＊ｄｏＴｅｍｐｏ＊ｄｏＰｉｔＶａｌｕｅ［ｉＰｉｄＤ］／ｄｏＤｅｌｔａＴｉｍｅ）を、次の楽音を鳴らすための移動コストを表す値として変数ｄｏＤに代入する。その後はステップ７３０に移行する。
【００４９】
隣接する楽音間の音程によって手指を運ぶ労力は変化する。上記配列変数ｄｏＰｉｔＶａｌｕｅは、音程に着目してその労力を評価するために用意したものであり、各要素には、それに対応する音程での労力を数値化した値が代入されている。その労力は、音程が大きくなるほど、言い換えれば手指を動かす量が大きくなるほど、大きなものとさせている。それにより、変数ｄｏＤに代入する値、即ち移動コストを表す値は、隣接する楽音間の音程が大きいほど、それらの間の発音開始時間の間隔が小さいほど、大きな値となるようにしている。
【００５０】
ステップ７３０では、変数ｄｏＤｉｆｆｉｃｕｌｔｙに、それまでの値に変数ｄｏＤの値を加算した値を代入する。そのようにして変数ｄｏＤｉｆｆｉｃｕｌｔｙに代入させている移動コストの累算値を更新すると、次にステップ７３１に移行して、局所的な変化の影響を低減するために定めた定数ｄｏＭｅａｎＳｉｇに変数ｄｏＭｅａｎの値を掛け、その掛けた値に、１から定数ｄｏＭｅａｎＳｉｇを引いた値を変数ｄｏＤの値に掛けた値を加算し、その加算結果を変数ｄｏＭｅａｎに代入する。その後にはステップ７３２に移行する。
【００５１】
ステップ７３２では、変数ｄｏＤＭａｘの値が変数ｄｏＭｅａｎの値以下か否か判定する。前者の値が後者の値以下であった場合、判定はＹＥＳとなり、ステップ７３３で変数ｄｏＤＭａｘに変数ｄｏＭｅａｎの値を代入し、更にステップ７３４で変数ｄｏＲＤｉｆｆｉｃｕｌｔｙに、それまでの値に変数ｄｏＲＶの値を加算した値を代入した後、ステップ７３５に移行する。そうでない場合には、判定はＮＯとなり、次にステップ７３４の処理を実行した後、そのステップ７３５に移行する。そのように変数ｄｏＲＤｉｆｆｉｃｕｌｔｙの値を更新することにより、リズムの複雑さを表す値の累算値が変数ｄｏＲＤｉｆｆｉｃｕｌｔｙに保持される。
【００５２】
ステップ７３５では、変数ｍｅに、それまで指定していたイベントデータの次に位置するイベントデータを指定する値を代入する。その後は図７のステップ７０６に戻る。
そのステップ７０６の判定がＹＥＳとなるとステップ７１０に移行する。そのステップ７１０〜７１５では、上述したように更新される各種変数を用いて、配列変数ｄｏＤｉｆｆｉｃ、ｄｏＤｉｆｆｉｃａｘ、ｄｏＤｅｎｓｉｔｙ、及びｄｏＲＤｉｆｆｉｃの変数ｉの値で指定される各要素に値を代入して保存するための処理が行われる。
【００５３】
先ず、ステップ７１０では、配列変数ｄｏＤｅｎｓｉｔｙの変数ｉの値で指定される要素ｄｏＤｅｎｓｉｔｙ［ｉ］に、変数ｉＮＣｎｔの値を変数ｕＬｅｎｇｔｈの値で割った値、即ち単位時間当たりに発音する楽音（音符）数を代入する。続くステップ７１１では、変数ｉＮＣｎｔの値が０より大きいか否か判定する。変数ｉの値で指定されるトラックに１つ以上の楽音の発音を表すイベントデータが存在していた場合、判定はＹＥＳとなってステップ７１２に移行する。そうでない場合には、判定はＮＯとなってステップ７１５に移行する。
【００５４】
ステップ７１２では、配列変数ｄｏＤｉｆｆｉｃの変数ｉの値で指定される要素ｄｏＤｉｆｆｉｃ［ｉ］に、変数ｄｏＤｉｆｆｉｃｕｌｔｙの値を変数ｉＮＣｎｔの値で割って得られる値を代入する。その次に移行するステップ７１３では、配列変数ｄｏＤｉｆｆｉｃａｘの変数ｉの値で指定される要素ｄｏＤｉｆｆｉｃａｘ［ｉ］に変数ｄｏＤＭａｘの値を代入する。その後に移行するステップ７１４では、配列変数ｄｏＲＤｉｆｆｉｃの変数ｉの値で指定される要素ｄｏＲＤｉｆｆｉｃ［ｉ］に、変数ｉＮＣｎｔの値に１００を掛けた値で変数ｄｏＲＤｉｆｆｉｃｕｌｔｙの値を割った値を代入する。その代入を行うと、ステップ７１５で変数ｉの値をインクリメントした後、上記ステップ７０４に戻る。
【００５５】
このようにして、各配列変数の変数ｉの値で指定される要素に値を代入し、それら各要素の値をＲＡＭ１０３に確保した領域に保存する。それにより、右手、或いは左手の評価結果として、移動コスト平均、移動コスト最大値、音符密度、及びリズムの複雑さ（を表す値）が保存される（図３参照）。
【００５６】
上記ステップ７０４でＹＥＳと判定された場合には、上述したように、図１０のステップ７３６に移行する。そのステップ７３６〜７５８では、配列変数ｄｏＤｉｆｆｉｃＫｅｙ、及びｄｏＤｉｆｆｉｃＭｏｄｅの各要素ｄｏＤｉｆｆｉｃＫｅｙ［０］、及びｄｏＤｉｆｆｉｃＭｏｄｅ［０］に値を代入して保存するための処理が行われる。
【００５７】
先ず、ステップ７３６では、変数ｉに０を代入するとともに、配列変数ｉＰｉｔｃｈＣｌａｓｓの各要素に０を代入する。続くステップ７３７では、変数ｉの値が２以上か否か判定する。変数ｉに２以上の値が代入されていた場合、判定はＹＥＳとなってステップ７４４に移行する。そうでない場合には、判定はＮＯとなってステップ７３８に移行する。なお、上記配列変数ｉＰｉｔｃｈＣｌａｓｓは、全音階上での各音高別に、その音高で鳴る楽音数をカウントするために用意したものである。
【００５８】
ステップ７３８では、変数ｉＴｒに、配列変数ｃＣｈの変数ｉの値で指定される要素ｃＣｈ［ｉ］の値（変数ｉの値が０であれば右手トラックの先頭位置を示すアドレス）を代入する。その次に実行するステップ７３９では、変数ｍｅに、変数ｉＴｒの値で先頭位置が示されるトラックの先頭に位置するイベントデータを指定する値を代入する。その後はステップ７４０に移行する。
【００５９】
ステップ７４０では、変数ｉの値で指定されるトラックのなかで処理対象とするイベントデータが無くなったか否か判定する。指定されるイベントデータが無くなるまで変数ｍｅの値を更新したような場合、判定はＹＥＳとなり、ステップ７４３で変数ｉの値をインクリメントした後、上記ステップ７３７に戻る。そうでない場合には、判定はＮＯとなってステップ７４１に移行する。
【００６０】
ステップ７４１では、変数ｍｅの値で指定されるイベントデータ中のピッチデータの値を１２で割った余りの値で指定される配列変数ｉＰｉｔｃｈＣｌａｓｓの要素ｉＰｉｔｃｈＣｌａｓｓ［ｍｅ−＞ｂｙＤａｔａ［１］ｍｏｄ  １２］の値をインクリメントする。その次に実行するステップ７４２では、変数ｍｅに、それまで指定していたイベントデータの次に位置するイベントデータを指定する値を代入する。その後は上記ステップ７４０に戻る。
【００６１】
上記ステップ７３７〜７４３で形成される処理ループは、ステップ７３７の判定がＹＥＳとなるまで繰り返し実行される。それにより、配列変数ｉＰｉｔｃｈＣｌａｓｓの各要素には、全音階上で対応する音高の楽音の総数が保持されることになる。ここでの総数は、右手、及び左手の各トラックを対象にしてのものである。
【００６２】
そのステップ７３７の判定がＹＥＳとなって移行するステップ７４４では、変数ｄｏＭａｘＶに０を代入する。次にステップ７４５において、変数ｉに０を代入する。その後はステップ７４６に移行する。
ステップ７４６〜７５８では、変数ｉの値を順次、インクリメントしながら、配列変数ｉＰｉｔｃｈＣｌａｓｓの各要素に代入された値を用いて要素ｄｏＤｉｆｆｉｃＫｅｙ［０］、及びｄｏＤｉｆｆｉｃＭｏｄｅ［０］の値を求めるための処理が行われる。
【００６３】
先ず、ステップ７４６では、変数ｉの値が１２以上か否か判定する。その変数ｉに１２以上の値が代入されていた場合、判定はＹＥＳとなり、ここで一連の処理を終了する。そうでない場合には、判定はＮＯとなってステップ７４７に移行する。
【００６４】
ステップ７４７では、変数Ｖ、及びＶＶにそれぞれ０を代入する。続くステップ７４８では、変数ｊに０を代入する。その後は、ステップ７４９に移行して、変数ｊの値が１２以上か否か判定する。その変数ｊに１２以上の値が代入されていた場合、判定はＹＥＳとなってステップ７５４に移行する。そうでない場合には、判定はＮＯとなってステップ７５０に移行する。
【００６５】
ステップ７５０では、１２から変数ｉの値を引いた値に変数ｊの値を加算し、その加算結果を１２で割った余りで指定される配列変数ｉＤｉａｔｏｎｉｃの要素ｉＤｉａｔｏｎｉｃ［（１２−ｉ＋ｊ）ｍｏｄ  １２］の値に変数ｊの値で指定される要素ｉＰｉｔｃｈＣｌａｓｓ［ｊ］の値を乗算し、その乗算結果をそれまでの値に加算した値を変数Ｖに代入する。その代入後にはステップ７５１に移行する。
【００６６】
ステップ７５１では、１２から変数ｉの値を引いた値に変数ｊの値を加算し、その加算結果を１２で割った余りで指定される配列変数ｉＤｉａｔｏｎｉｃの要素ｉＤｉａｔｏｎｉｃ［（１２−ｉ＋ｊ）ｍｏｄ  １２］の値が０か否か判定する。その余りに対応する音高が全音階上で変化音に対応していた場合、判定はＹＥＳとなり、ステップ７５２で変数ＶＶに、それまでの値に要素ｉＰｉｔｃｈＣｌａｓｓ［ｊ］の値を加算した値を代入し、更にステップ７５３で変数ｊの値をインクリメントした後、上記ステップ７４９に戻る。そうでない場合には、判定はＮＯとなり、次にそのステップ７５３の処理を実行する。
【００６７】
上記ステップ７４９〜７５３で形成される処理ループは、ステップ７４９の判定がＹＥＳとなるまで繰り返し実行される。それにより、変数Ｖ、及びＶＶには、全音階上で変数ｉの値に対応する音高に着目して、その音高の楽音数（要素ｉＰｉｔｃｈＣｌａｓｓ［ｉ］の値）を用いて算出される値が代入される。
【００６８】
そのステップ７４９の判定がＹＥＳとなって移行するステップ７５４では、変数ｄｏＭａｘＶの値が変数Ｖの値より小さいか否か判定する。今回、変数Ｖに代入された値がそれまでで最大であった場合、判定はＹＥＳとなってステップ７５５に移行する。そうでない場合には、判定はＮＯとなってステップ７５８に移行する。
【００６９】
ステップ７５５では、変数ｄｏＭａｘＶに変数Ｖの値を代入する。続くステップ７５６では、要素ｄｏＤｉｆｆｉｃＫｅｙ［０］に、配列変数ＫｅｙＤｉｆｆｉｃｕｌｔｙの変数ｉの値で指定される要素ＫｅｙＤｉｆｆｉｃｕｌｔｙ［ｉ］の値を代入する。その後はステップ７５７に移行する。
【００７０】
上記配列変数ＫｅｙＤｉｆｆｉｃｕｌｔｙは、楽曲において支配性を持つ全音階上の音高により生じる演奏上の難しさを表す数値を格納させておくために用意したものであり、各要素には、その音高に対応する数値が格納されている。それにより、本実施の形態では、必要に応じて、その要素の値を要素ｄｏＤｉｆｆｉｃＫｅｙ［０］に代入するようにしている。
【００７１】
ステップ７５７では、変数Ｖの値に変数ＶＶの値を加算し、その加算結果で変数ＶＶの値に１０を掛けた値を割った値を要素ｄｏＤｉｆｆｉｃＭｏｄｅ［０］に代入する。次に移行するステップ７５８では、変数ｉの値をインクリメントする。そのインクリメントを行った後に上記ステップ７４６に戻る。
【００７２】
上記ステップ７５５〜７５７は、上記ステップ７５４の判定がＹＥＳとなった場合にのみ実行する。それにより、本実施の形態では、全音階上の音高で最も楽音数の多い音高を主音と見なし、その主音と見なした音高で調の難しさ、及びモードの難しさを評価して、その評価結果をＲＡＭ１０３に保存している。
【００７３】
なお、本実施の形態では、図３に示すように、６種類の各種評価のために分析を行っているが、その分析の対象とする評価の種類や数、更には評価（分析）方法などはそれに限定されるものではない。適宜、変更しても良いものである。例えばモードの難しさの評価については、全音階上の音高で最も楽音数の多い音高に着目するのではなく、複数の音高に着目して行うようにしても良い。
【００７４】
上述したような楽曲分析装置の動作を実現させるようなプログラムは、ＲＯＭ、ＣＤ−ＲＯＭ、フロッピーディスク、或いは光磁気ディスク等の記録媒体に記録させて配布しても良い。或いは、公衆網等で用いられる伝送媒体を介して、そのプログラムの一部、若しくは全部を配信するようにしても良い。そのようにした場合には、ユーザはプログラムを取得して楽曲分析装置、或いはコンピュータなどのデータ処理装置にロードすることにより、それをロードした装置に本発明を適用させることができる。このことから、プログラムは、それを配信する装置がアクセスできるものであっても良い。
【００７５】
【発明の効果】
以上、説明したように本発明は、楽曲の演奏内容を表す楽曲データを取得して、それが表す演奏内容の分析を行い、該演奏内容を表す分析データを生成する。このため、ユーザは、実際の演奏を聴いたり、楽譜を見ることなく、その分析データを基に、楽曲の演奏内容を適切に判断することができる。
【図面の簡単な説明】
【図１】本実施の形態による楽曲分析装置の回路構成図である。
【図２】曲データの構成を説明する図である。
【図３】曲データの評価結果、及びその内容を説明する図である。
【図４】配列変数ｉＤｉａｔｏｎｉｃの各要素に格納された値を説明する図である。
【図５】全体処理のフローチャートである。
【図６】評価処理のフローチャートである。
【図７】１曲評価処理のフローチャートである。
【図８】１曲評価処理のフローチャートである（続き１）。
【図９】１曲評価処理のフローチャートである（続き２）。
【図１０】１曲評価処理のフローチャートである（続き３）。
【符号の説明】
１０１    ＣＰＵ
１０２    ＲＯＭ
１０３    ＲＡＭ
１０４    入力装置
１０５    モニター
１０６    バス
【図１】
0003915428.tif 000002
【図２】
0003915428.tif 000003
【図３】
0003915428.tif 000004
【図４】
0003915428.tif 000005
【図５】
0003915428.tif 000006
【図６】
0003915428.tif 000007
【図７】
0003915428.tif 000008
【図８】
0003915428.tif 000009
【図９】
0003915428.tif 000010
【図１０】
0003915428.tif 000011