(57)【要約】      （修正有）【課題】楽曲内でメロディが重複したり類似する範囲を検出する楽曲構造分析装置を実現する。【解決手段】小節データを参照して曲データを行要素の比較元小節と列要素の比較元小節とに区別し、比較元小節を構成する各比較元音の音高・発音期間と、比較元小節を構成する各比較先音の音高・発音期間との一致率を算出してマトリクス要素として格納する。マトリクス要素の中から閾値以上の一致率が規定数以上連続する小節区間の範囲を検出する。【選択図】図１４
2011138153.tif 000002
【特許請求の範囲】
【請求項１】
楽曲を構成する各音を表す曲データを記憶する記憶手段と、
前記記憶手段に記憶される曲データを複数の区間に区分けし、区分けされた各区間の各々に比較元区間と比較先区間とを割り当て、それらの内でそれぞれ互いに異なる区間同士で比較元区間に対する比較先区間の一致度を判定する判定手段と、
前記判定手段により各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出する検出手段と
を具備することを特徴とする楽曲構造分析装置。
【請求項２】
前記検出手段は、検出した範囲の比較先区間を表す情報を記録する記録手段を備えることを特徴とする請求項１記載の楽曲構造分析装置。
【請求項３】
前記検出手段は、検出した比較先区間の範囲が長過ぎる場合、その比較先区間の範囲を分割する範囲分割手段を備えることを特徴とする請求項１記載の楽曲構造分析装置。
【請求項４】
前記判定手段は、
区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音との音高が同一の場合および比較元音と比較先音とが共に存在しない場合に完全一致と判定する完全一致判定手段と、
前記完全一致判定手段により完全一致と判定された時間幅を累算した完全一致期間を、区間長に相当する時間で除算して完全一致度を算出する完全一致度算出手段とを備え、
前記検出手段は、
前記完全一致度算出手段により算出された各比較先区間の完全一致度の中から閾値以上の完全一致度が連続する比較先区間の範囲を、重複範囲として検出する重複範囲検出手段を具備することを特徴とする請求項１記載の楽曲構造分析装置。
【請求項５】
前記判定手段は、
区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元音と比較先音とが転調関係にある場合に相対一致と判定する相対一致判定手段と、
前記相対一致判定手段により相対一致と判定された時間幅を累算した相対一致期間を、区間長に相当する時間で除算して相対一致度を算出する相対一致度算出手段とを備え、
前記検出手段は、
前記相対一致度算出手段により算出された各比較先区間の相対一致度の中から閾値以上の相対一致度が連続する比較先区間の範囲を、類似範囲として検出する類似範囲検出手段を具備することを特徴とする請求項１記載の楽曲構造分析装置。
【請求項６】
前記相対一致判定手段は、比較元区間の先頭音の音高と比較元音との音高差と、比較先区間の先頭音の音高と比較先音との音高差とが一致する場合に比較元音と比較先音とが転調関係にある相対一致と判定することを特徴とする請求項５記載の楽曲構造分析装置。
【請求項７】
前記判定手段は、
区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元区間の先頭音の音高と比較元音との音高差の方向が、比較先区間の先頭音の音と比較先音との音高差との方向に一致する場合に相対方向一致と判定する相対方向一致判定手段と、
前記相対方向一致判定手段により相対方向一致と判定された時間幅を累算した相対方向一致期間を、区間長に相当する時間で除算して相対方向一致度を算出する相対方向一致度算出手段とを備え、
前記検出手段は、前記相対方向一致度算出手段により算出された各比較先区間の相対方向一致度の中から閾値以上の相対方向一致度が連続する比較先区間の範囲を、音高差類似範囲として検出する音高差類似範囲検出手段を具備することを特徴とする請求項１記載の楽曲構造分析装置。
【請求項８】
前記判定手段は、
区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元音と比較先音との発音開始時間並びに消音時間の差が許容範囲内である場合および歩進された時間幅中に発音する比較元音および比較先音が共に存在せず、かつ現在判定対象となる比較元音および比較先音のそれぞれについて前音の消音時間と次音の発音開始時間とが許容範囲内にある場合にリズム一致と判定するリズム一致判定手段と、
前記リズム一致判定手段によりリズム一致と判定された時間幅を累算したリズム一致期間を、区間長に相当する時間で除算してリズム一致度を算出するリズム一致度算出手段とを備え、
前記検出手段は、
前記リズム一致度算出手段により算出された各比較先区間のリズム一致度の中から閾値以上のリズム一致度が連続する比較先区間の範囲を、リズム一致範囲として検出するリズム一致範囲検出手段を具備することを特徴とする請求項１記載の楽曲構造分析装置。
【請求項９】
楽曲を構成する各音を表す曲データを複数の区間に区分けし、区分けされた各区間の各々に比較元区間と比較先区間とを割り当て、それらの内でそれぞれ互いに異なる区間同士で比較元区間に対する比較先区間の一致度を判定する判定処理と、
前記判定処理により各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出する検出手処理と
をコンピュータで実行させることを特徴とする楽曲構造分析装置処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、楽曲中でメロディが重複したり類似する範囲を検出する楽曲構造分析装置および楽曲構造分析処理プログラムに関する。
【背景技術】
【０００２】
近年、楽曲を構成する各音を表す曲データに基づき、その曲のフレーズやグルーピング構造を分析する技術が知られている。例えば特許文献１には、マッチング元およびマッチング対象の両フレーズをそれぞれ所定の単位時間長のステップに分割し、同じタイミングの両ステップを対応させて各ステップにおける音程（音高差）を求め、同音程となるステップの組数を音程毎に合計し、その中で合計値が最大の音程の、合計値の全体に対する比率を一致度とし、この一致度を閾値と比較して両フレーズの一致、類似および非類似を判定するフレーズ分析装置が開示されている。
【０００３】
また、特許文献２には、楽曲を構成する各音を表す曲データの内から、連続した個々の音の特性が変化するメロディの局所的境界を検出し、検出した局所的境界に基づいてメロディを分割することによりメロディの階層的なグルーピング構造を分析する分析装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−２６８６３２号公報
【特許文献２】特開２００６−４７７２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、上記特許文献１，２に開示の技術は、単に曲のフレーズやグルーピング構造を分析するだけにとどまり、楽曲内でメロディが重複したり類似する範囲を検出することができない、という問題がある。
【０００６】
本発明は、このような事情に鑑みてなされたもので、楽曲内でメロディが重複したり類似する範囲を検出することができる楽曲構造分析装置および楽曲構造分析処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、請求項１に記載の発明では、楽曲を構成する各音を表す曲データを記憶する記憶手段と、前記記憶手段に記憶される曲データを複数の区間に区分けし、区分けされた各区間の各々に比較元区間と比較先区間とを割り当て、それらの内でそれぞれ互いに異なる区間同士で比較元区間に対する比較先区間の一致度を判定する判定手段と、前記判定手段により各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出する検出手段とを具備することを特徴とする。
【０００８】
上記請求項１に従属する請求項２に記載の発明では、前記検出手段は、検出した範囲の比較先区間を表す情報を記録する記録手段を備えることを特徴としている。
【０００９】
上記請求項１に従属する請求項３に記載の発明では、前記検出手段は、検出した比較先区間の範囲が長過ぎる場合、その比較先区間の範囲を分割する範囲分割手段を備えることを特徴とする。
【００１０】
上記請求項１に従属する請求項４に記載の発明では、前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音との音高が同一の場合および比較元音と比較先音とが共に存在しない場合に完全一致と判定する完全一致判定手段と、前記完全一致判定手段により完全一致と判定された時間幅を累算した完全一致期間を、区間長に相当する時間で除算して完全一致度を算出する完全一致度算出手段とを備え、前記検出手段は、前記完全一致度算出手段により算出された各比較先区間の完全一致度の中から閾値以上の完全一致度が連続する比較先区間の範囲を、重複範囲として検出する重複範囲検出手段を具備することを特徴とする。
【００１１】
上記請求項１に従属する請求項５に記載の発明では、前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元音と比較先音とが転調関係にある場合に相対一致と判定する相対一致判定手段と、前記相対一致判定手段により相対一致と判定された時間幅を累算した相対一致期間を、区間長に相当する時間で除算して相対一致度を算出する相対一致度算出手段とを備え、前記検出手段は、前記相対一致度算出手段により算出された各比較先区間の相対一致度の中から閾値以上の相対一致度が連続する比較先区間の範囲を、類似範囲として検出する類似範囲検出手段を具備することを特徴とする。
【００１２】
上記請求項５に従属する請求項６に記載の発明では、前記相対一致判定手段は、比較元区間の先頭音の音高と比較元音との音高差と、比較先区間の先頭音の音高と比較先音との音高差とが一致する場合に比較元音と比較先音とが転調関係にある相対一致と判定することを特徴とする。
【００１３】
上記請求項１に従属する請求項７に記載の発明では、前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元区間の先頭音の音高と比較元音との音高差の方向が、比較先区間の先頭音の音と比較先音との音高差との方向に一致する場合に相対方向一致と判定する相対方向一致判定手段と、前記相対方向一致判定手段により相対方向一致と判定された時間幅を累算した相対方向一致期間を、区間長に相当する時間で除算して相対方向一致度を算出する相対方向一致度算出手段とを備え、前記検出手段は、前記相対方向一致度算出手段により算出された各比較先区間の相対方向一致度の中から閾値以上の相対方向一致度が連続する比較先区間の範囲を、音高差類似範囲として検出する音高差類似範囲検出手段を具備することを特徴とする。
【００１４】
上記請求項１に従属する請求項８に記載の発明では、前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元音と比較先音との発音開始時間並びに消音時間の差が許容範囲内である場合および歩進された時間幅中に発音する比較元音および比較先音が共に存在せず、かつ現在判定対象となる比較元音および比較先音のそれぞれについて前音の消音時間と次音の発音開始時間とが許容範囲内にある場合にリズム一致と判定するリズム一致判定手段と、前記リズム一致判定手段によりリズム一致と判定された時間幅を累算したリズム一致期間を、区間長に相当する時間で除算してリズム一致度を算出するリズム一致度算出手段とを備え、前記検出手段は、前記リズム一致度算出手段により算出された各比較先区間のリズム一致度の中から閾値以上のリズム一致度が連続する比較先区間の範囲を、リズム一致範囲として検出するリズム一致範囲検出手段を具備することを特徴とする。
【００１５】
請求項９に記載の発明では、楽曲を構成する各音を表す曲データを複数の区間に区分けし、区分けされた各区間の各々に比較元区間と比較先区間とを割り当て、それらの内でそれぞれ互いに異なる区間同士で比較元区間に対する比較先区間の一致度を判定する判定処理と、前記判定処理により各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出する検出手処理とをコンピュータで実行させることを特徴とする。
【発明の効果】
【００１６】
本発明では、楽曲を構成する各音を表す曲データを複数の区間に区分けし、区分けされた各区間の各々に比較元区間と比較先区間とを割り当て、それらの内でそれぞれ互いに異なる区間同士で比較元区間に対する比較先区間の一致度を判定し、各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出するので、楽曲内でメロディが重複したり類似する範囲を検出することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明による第１実施形態の構成を示すブロック図である。
【図２】曲データＭｉｄｉＥｖｅｎｔの構成を示す図である。
【図３】小節データＭｅａｓｕｒｅの構成を示す図である。
【図４】メインルーチンの動作を示すフローチャートである。
【図５】マトリクス処理の動作を示すフローチャートである。
【図６】小節間一致率算出処理の動作を示すフローチャートである。
【図７】一致判定処理の動作を示すフローチャートである。
【図８】一致判定処理および小節間一致率算出処理を含むマトリクス処理の具体的な動作の一例を説明するための図である。
【図９】グループラベリング処理の動作を示すフローチャートである。
【図１０】ラベリング処理の動作を示すフローチャートである。
【図１１】ラベリング検証処理の動作を示すフローチャートである。
【図１２】ラベリング検証処理の動作を示すフローチャートである。
【図１３】ラベリング検証処理の動作を説明するための図である。
【図１４】具体的動作の一例を示す図である。
【図１５】第２実施形態による小節間一致率算出処理の動作を示すフローチャートである。
【図１６】第２実施形態による一致判定処理の動作を示すフローチャートである。
【図１７】第２実施形態によるグループラベリング処理の動作を示すフローチャートである。
【図１８】類似部分ラベリング補正処理の動作を示すフローチャートである。
【図１９】ラベル付け替え処理の動作を示すフローチャートである。
【図２０】第３実施形態による小節間一致率算出処理の動作を示すフローチャートである。
【図２１】第３実施形態による一致判定処理の動作を示すフローチャートである。
【図２２】第３実施形態によるグループラベリング算出処理の動作を示すフローチャートである。
【図２３】第４実施形態による小節間一致率算出処理の動作を示すフローチャートである。
【図２４】第４実施形態による一致判定処理の動作を示すフローチャートである。
【図２５】第４実施形態による一致判定処理の動作を示すフローチャートである。
【図２６】第４実施形態による一致判定処理の動作を示すフローチャートである。
【図２７】第４実施形態によるグループラベリング処理の動作を示すフローチャートである。
【発明を実施するための形態】
【００１８】
以下、図面を参照して本発明の実施の形態について説明する。
［第１実施形態］ 
Ａ．構成 
（１）全体構成 
図１は、本発明の第１実施形態による楽曲構造分析装置の全体構成を示すブロック図である。楽曲構造分析装置は、ＣＰＵ１、ＲＯＭ２、ＲＡＭ３、入力部４、表示部５およびＭＩＤＩインタフェース６を備える。ＣＰＵ１は、入力部４が発生する操作イベントに応じて、ＲＯＭ２に格納される各種プログラムを実行して装置各部を制御する。ＣＰＵ１では、本発明の要旨に係わる処理として、外部の電子楽器７からＭＩＤＩインタフェース６を介して曲を構成する各音を表す曲データを取込み、取込んだ曲データの内からメロディが重複したり類似する範囲を検出する楽曲構造分析を実行する。
【００１９】
ＲＯＭ２は、ＣＰＵ１にロードされる各種制御プログラムやテーブル等を記憶する。ここで言う各種制御プログラムとは、後述するメインルーチン、マトリクス処理およびグループラベルング処理を含む。ＲＡＭ３は、ＣＰＵ１の演算に用いられる各種レジスタ・フラグデータを一時記憶するワークエリアと、ＭＩＤＩインタフェース６を介して外部の電子楽器７より取込むＳＭＦ形式の曲データＭｉｄｉＥｖｅｎｔが格納される曲データエリアと、この曲データエリアに格納された曲データＭｉｄｉＥｖｅｎｔから派生させた小節データＭｅａｓｕｒｅを記憶する小節データエリアとを備える。これらＲＡＭ３に格納される主要なデータ構成については追って説明する。入力部４は、ユーザ操作に対応した操作イベントを発生してＣＰＵ１に供給する。表示部５は、ＣＰＵ１の制御の下に、例えば曲データＭｉｄｉＥｖｅｎｔを楽譜表示したり、表示された楽譜上に楽曲構造分析結果を表示する。
【００２０】
（２）データ構成
次に、図２〜図３を参照してＲＡＭ３に格納される曲データＭｉｄｉＥｖｅｎｔおよび小節データＭｅａｓｕｒｅの構成を説明する。先ず図２は、ＲＡＭ３の曲データエリアに格納される曲データＭｉｄｉＥｖｅｎｔの構成を示す図である。曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］は楽曲を構成する各音（メロディ）を表し、その終端には曲の終わりを表すＥＮＤデータを備える。
【００２１】
１つの曲データＭｉｄｉＥｖｅｎｔは、曲開始時点からの経過時間で表現される発音開始時間ＩＴｉｍｅ、発音期間を表す音長ｌＧａｔｅ、音高Ｐｉｔｃｈ、音量Ｖｅｌ、ポインタｐｒｅｖおよびポインタｎｅｘｔから構成される。なお、ポインタｐｒｅｖは、１つ前の演奏データＭｉｄｉＥｖｅｎｔのアドレスを指定する。ポインタｎｅｘｔは、次の演奏データＭｉｄｉＥｖｅｎｔのアドレスを指定する。
【００２２】
図３は、ＲＡＭ３の小節データエリアに格納される小節データＭｅａｓｕｒｅの構成を示す図である。小節データＭｅａｓｕｒｅ［０］〜［Ｎ］は、各小節毎の属性を表す。１つの小節データＭｅａｓｕｒｅは、曲開始時点からの経過時間で表現される開始時刻ｌＴｉｍｅ、小節長ｌＧａｔｅ、小節に付与されるラベル番号ｉＬａｖｅｌ、ラベルオプションｉＬｖＯｐｔｉｏｎ、ラベル内状態ｉＬｖＳｔａｔｕｓ、ポインタｐｒｅｖおよびポインタｎｅｘｔから構成される。
【００２３】
なお、ラベル番号ｉＬａｖｅｌ、ラベルオプションｉＬｖＯｐｔｉｏｎおよびラベル内状態ｉＬｖＳｔａｔｕｓの内容については追って述べる。また、ポインタｐｒｅｖは、１つ前の小節データＭｅａｓｕｒｅのアドレスを指定する。ポインタｎｅｘｔは、次の小節データＭｅａｓｕｒｅのアドレスを指定する。
【００２４】
Ｂ．動作 
次に、図４〜図１４を参照して第１実施形態の動作について説明する。以下では、ＣＰＵ１が実行するメインルーチン、マトリクス処理およびグループラベリング処理の各動作について述べる。なお、マトリクス処理は小節間一致率算出処理を含み、小節間一致率算出処理は一致判定処理を含む。グループラベリング処理は、ラベリング処理およびラベリング検証処理から構成される。
【００２５】
（１）メインルーチンの動作 
入力部４からＣＰＵ１にメイルーチンの実行を指示するイベントが供給されると、ＣＰＵ１は図４に図示するメインルーチンを実行してステップＳＡ１に進み、曲データの読み込みを実行する。すなわち、ステップＳＡ１では、ＭＩＤＩインタフェース６を介して外部の電子楽器７からＳＭＦ形式の曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］を取込んでＲＡＭ３の曲データエリアに格納する。また、ステップＳＡ１では、ＲＡＭ３の曲データエリアに格納した曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］に基づき、小節データＭｅａｓｕｒｅ［０］〜［Ｎ］を派生させてＲＡＭ３の小節データエリアに格納する。
【００２６】
なお、ここで派生される小節データＭｅａｓｕｒｅ［０］〜［Ｎ］は、ラベルオプションｉＬｖＯｐｔｉｏｎおよびラベル状態ｉＬｖＳｔａｔｕｓを含まない。ラベルオプションｉＬｖＯｐｔｉｏｎおよびラベル状態ｉＬｖＳｔａｔｕｓは、後述するグループラベリング処理にて生成される。
【００２７】
また、本実施の形態では、ＲＡＭ３の曲データエリアに格納した曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］から小節データＭｅａｓｕｒｅ［０］〜［Ｎ］を派生するようにしたが、これに限らず、電子楽器７が備える小節データＭｅａｓｕｒｅ［０］〜［Ｎ］をＭＩＤＩインタフェース６を介して取込む態様であっても構わない。
【００２８】
次いで、ステップＳＡ２では、マトリクス処理を実行する。マトリクス処理では、後述するように、ＲＡＭ３の小節データエリアに格納された小節データＭｅａｓｕｒｅ［０］〜［Ｎ］を参照して、ＲＡＭ３の曲データエリアに格納した曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］を、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較元小節とに区別し、ポインタＲｅで指定される比較元小節を行要素、ポインタＬｕで指定される比較先小節を列要素としたマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］を生成する。マトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］は、ポインタＲｅで指定される比較元小節を構成する各比較元音の音高・発音期間と、ポインタＬｕで指定される比較先小節を構成する各比較先音の音高・発音期間との一致率を表す。
【００２９】
続いて、ステップＳＡ３では、グループラベリング処理を実行する。グループラベリング処理は、後述するように、ポインタＲｅおよびポインタＬｕで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の中から閾値以上の一致率が規定数以上連続する範囲（小節区間）を探し出し、その範囲に対応する小節データＭｅａｓｕｒｅ中のラベル番号ｉＬａｖｅｌに同じ番号を付与すると共に、完全一致を表す値「０」をラベルオプションｉＬｖＯｐｔｉｏｎとして登録するラベリングを行った後、ラベリングされた小節区間が長過ぎる場合には、ラベリング先頭小節（ポインタＲｅ）と、そこから規定数以上連続した小節（ポインタＲｅｔｍｐ）とで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］の一致率が閾値以上あれば、そのポインタＲｅｔｍｐで指定される小節の１つ前の小節を区間終端とするようにラベリングされた小節区間を分ける。この後、ステップＳＡ４に進み、上記ステップＳＡ３にて行われたグループラベリング処理の結果を表示部５に表示出力する。
【００３０】
（２）マトリクス処理の動作 
次に、図５を参照してマトリクス処理の動作を説明する。前述したメインルーチンのステップＳＡ２（図４参照）を介して本処理が実行されると、ＣＰＵ１は図５に図示するステップＳＢ１に進み、比較元となる小節を指定するポインタＲｅに、曲先頭の小節を指定する値をセットする。次いで、ステップＳＢ２では、ポインタＲｅで指定される比較元小節が曲終端を超えたか否かを判断する。ポインタＲｅで指定される比較元小節が曲終端を超えていなければ、判断結果は「ＮＯ」になり、ステップＳＢ３に進み、比較先となる小節を指定するポインタＬｕに、曲先頭の小節を指定する値をセットする。
【００３１】
続いて、ステップＳＢ４では、ポインタＬｕで指定される比較先小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果は「ＮＯ」になり、ステップＳＢ５を介して小節間一致率算出処理を実行する。小節間一致率算出処理では、後述するように、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の比較先音との一致期間を累算して得た積算時間を、比較先小節分の時間ｔで除算して一致率（ｓｕｍ１／ｔ）を算出し、算出した一致率をポインタＲｅとポインタＬｕとで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアする。
【００３２】
次いで、ステップＳＢ６では、ポインタＬｕを歩進させ、比較先小節を次の小節に設定した後、上述のステップＳＢ４に処理を戻す。以後、曲終端を超えるまでポインタＬｕで指定される比較先小節を歩進させる毎に、ステップＳＢ５の小節間一致率算出処理を繰り返し実行する。そして、ポインタＬｕで指定される比較先小節が曲終端を超えると、上記ステップＳＢ４の判断結果が「ＹＥＳ」になり、ステップＳＢ７に進み、ポインタＲｅを歩進させ、比較元小節を次の小節に設定した後、上述のステップＳＢ２に処理を戻す。以後、ポインタＲｅが曲終端を超える迄、上述したステップＳＢ３〜ＳＢ７を繰り返す。そして、ポインタＲｅ（比較元小節）が曲終端を超えると、前述したステップＳＢ２の判断結果が「ＹＥＳ」となり、本処理を終える。
【００３３】
ここで、図８を参照してマトリクス処理の具体的な動作の一例を説明する。例えば、図８の上部に図示するように、ポインタＲｅで指定される比較元小節が小節内時間ｔ＝０〜６に発音される「Ｃ４音（ノートナンバ＃６０）」、小節内時間ｔ＝８〜１４に発音される「Ｃ４音（＃６０）」、小節内時間ｔ＝１６〜２２に発音される「Ｇ４音（＃６７）」および小節内時間ｔ＝２４〜３０に発音される「Ｇ４音（＃６７）」の各比較元音から構成され、一方、ポインタＬｕで指定される比較先小節が小節内時間ｔ＝０〜６に発音される「Ｃ４音（ノートナンバ＃６０）」、小節内時間ｔ＝８〜１４に発音される「Ｃ４音（＃６０）」、小節内時間ｔ＝２０〜２２に発音される「Ｇ４音（＃６７）」および小節内時間ｔ＝２４〜３０に発音される「Ａ４音（＃６９）」の各比較先音から構成されるする。
【００３４】
そうした場合に、これら各比較元音の音高・発音期間に対する各比較先音の音高・発音期間の一致・不一致を小節内時間ｔ毎に判別すると、図８に図示する通り、小節内時間ｔ＝０〜３１の内、フラグｓ１が「０」となる不一致期間は、ｔ＝１６〜１９およびｔ＝２３〜３０となる。これら不一致期間以外はフラグｓ１が「１」の一致期間になる。したがって、フラグｓ１が「１」となる一致期間の積算時間は「２０」となり、これを小節分の総時間「３２（ｔ＝０〜３１）」で除算することによって、比較元小節Ｒｅと比較先小節Ｌｕとの一致率「６２％」が得られ、得られた一致率をマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアする。
【００３５】
以上のように、マトリクス処理では、ＲＡＭ３の小節データエリアに格納された小節データＭｅａｓｕｒｅ［０］〜［Ｎ］を参照して、ＲＡＭ３の曲データエリアに格納した曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］を、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較元小節とに区別し、ポインタＲｅで指定される比較元小節を行要素、ポインタＬｕで指定される比較先小節を列要素として、ポインタＲｅで指定される比較元小節を構成する各比較元音の音高・発音期間と、ポインタＬｕで指定される比較先小節を構成する各比較先音の音高・発音期間との一致率を算出してマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアする。なお、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較先小節とが同一の場合、マトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］は１００％（一致率）となる。
【００３６】
（３）小節間一致率算出処理の動作 
次に、図６を参照して小節間一致率算出処理の動作を説明する。上述したマトリクス処理のステップＳＢ５（図５参照）を介して本処理が実行されると、図６に図示するステップＳＣ１に処理を進め、小節内時間ｔを初期化する。すなわち、ポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅ中の開始時刻ｌＴｉｍｅを小節内時間ｔにセットする。続いて、ステップＳＣ２では、小節内時間ｔが小節を超えたか否か、つまりポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅ中の小節長ｌＧａｔｅを超えたかどうかを判断する。小節内時間ｔが小節を超えていなければ、判断結果は「ＮＯ」いなり、ステップＳＣ３に進む。
【００３７】
ステップＳＣ３では、一致判定処理を実行する。後述するように、一致判定処理では、ポインタＲｅで指定される比較元小節の小節内時間ｔで発音している比較元音と、ポインタＬｕで指定される比較先小節の小節内時間ｔで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグｓ１を「１」にセットする。次いで、ステップＳＣ４では、上記ステップＳＣ３の一致判定処理により設定されるフラグｓ１の値を、レジスタｓｕｍ１に加算する。そして、ステップＳＣ５では、小節内時間ｔを歩進させた後、上述したステップＳＣ２に処理を戻す。
【００３８】
以後、歩進される小節内時間ｔが、ポインタＬｕで指定される比較先小節を超えるまで上述したステップＳＣ２〜ＳＣ５を繰り返す。これにより、レジスタｓｕｍ１には、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の比較先音との一致期間を累算した積算時間が格納される。そして、歩進される小節内時間ｔが、ポインタＬｕで指定される比較先小節を超えると、上記ステップＳＣ２の判断結果が「ＹＥＳ」となり、ステップＳＣ６に進む。
【００３９】
ステップＳＣ６では、レジスタｓｕｍ１に格納される積算時間を比較先小節分の時間ｔで除算して得られる一致率（ｓｕｍ１／ｔ）を、マトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアして本処理を終える。なお、ここで言うマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］とは、ポインタＲｅとポインタＬｕとで配列要素を指定する２次元レジスタである。
【００４０】
このように、小節間一致率算出処理では、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の各比較先音との一致期間を累算して得た積算時間を、比較先小節分の時間ｔで除算して一致率（ｓｕｍ１／ｔ）を算出し、算出した一致率をポインタＲｅとポインタＬｕとで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアする。
【００４１】
（４）一致判定処理の動作 
次に、図７を参照して一致判定処理の動作を説明する。上述した小節間一致率算出処理のステップＳＣ３（図６参照）を介して本処理が実行されると、図７に図示するステップＳＤ１に進み、フラグｓ１をゼロリセットする。フラグｓ１は、比較元小節において小節内時間ｔで発音している音（比較元音）の音高と、比較先小節において小節内時間ｔで発音している音（比較先音）の音高とが一致している場合や、小節内時間ｔで発音する比較元音および比較先音が共に存在しない場合に「１」となる。一方、小節内時間ｔで発音している比較元音の音高と比較先音の音高とが一致しない場合や、小節内時間ｔで発音する比較元音あるいは比較先音のいずれかが存在しない場合には「０」となる。
【００４２】
次いで、ステップＳＤ２では、ＲＡＭ３の曲データエリアに格納される曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］の内に、ポインタＲｅで指定される比較元小節の小節内時間ｔで発音している比較元音（曲データＭｉｄｉＥｖｅｎｔ）が存在する場合には、その音高ＰｉｔｃｈをレジスタｍｅＲｅにストアし、比較元音が存在しない場合には該当音無しを表す値をレジスタｍｅＲｅにストアする。
【００４３】
続いて、ステップＳＤ３では、ＲＡＭ３の曲データエリアに格納される曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］の内に、ポインタＬｕで指定される比較先小節の小節内時間ｔで発音している比較先音が存在する場合には、その音高ＰｉｔｃｈをレジスタｍｅＬｕにストアし、比較先音が存在しない場合には、該当音無しを表す値をレジスタｍｅＬｕにストアする。
【００４４】
そして、ステップＳＤ４では、レジスタｍｅＲｅの内容に基づき比較元音の有無を判断する。レジスタｍｅＲｅに比較元音の音高Ｐｉｔｃｈが格納されていると、判断結果は「ＹＥＳ」となり、ステップＳＤ５に進む。ステップＳＤ５では、レジスタｍｅＬｕの内容に基づき比較先音の有無を判断する。レジスタｍｅＬｕに比較先音無しを表す値がストアされていると、判断結果は「ＮＯ」となり、本処理を終える。
【００４５】
一方、レジスタｍｅＬｕに比較先音の音高Ｐｉｔｃｈが格納されていれば、判断結果が「ＹＥＳ」となり、ステップＳＤ６に進む。ステップＳＤ６では、レジスタｍｅＲｅに格納される比較元音の音高Ｐｉｔｃｈと、レジスタｍｅＬｕに格納される比較先音の音高Ｐｉｔｃｈとが同一であるか否かを判断する。比較元音と比較先音とが同一音高でなければ、判断結果は「ＮＯ」となり、本処理を終える。これに対し、比較元音と比較先音とが同一音高であると、上記ステップＳＤ６の判断結果が「ＹＥＳ」になり、ステップＳＤ７に進み、フラグｓ１に「１」をセットして本処理を終える。
【００４６】
さて一方、レジスタｍｅＲｅに比較元音無しを表す値がストアされていると、上記ステップＳＤ４の判断結果が「ＮＯ」となり、ステップＳＤ８に進む。ステップＳＤ８では、レジスタｍｅＬｕの内容に基づき比較先音の有無を判断する。レジスタｍｅＬｕに比較先音無しを表す値がストアされていると、判断結果は「ＮＯ」となり、ステップＳＤ９に進み、フラグｓ１に「１」をセットして本処理を終える。これに対し、レジスタｍｅＬｕに比較先音の音高Ｐｉｔｃｈが格納されていれば、判断結果が「ＹＥＳ」となり、本処理を終える。
【００４７】
このように、一致判定処理では、ポインタＲｅで指定される比較元小節において小節内時間ｔで発音している比較元音と、ポインタＬｕで指定される比較先小節において小節内時間ｔで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグｓ１を「１」にセットするようになっている。
【００４８】
（５）グループラベリング処理の動作 
次に、図９を参照してグループラベリング処理の動作を説明する。前述したメインルーチンのステップＳＡ３（図４参照）を介して本処理が実行されると、ＣＰＵ１は図９に図示するステップＳＥ１を介してラベリング処理を実行する。後述するように、ラベリング処理では、ポインタＲｅおよびポインタＬｕで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の中から閾値以上の一致率が規定数以上連続する範囲（小節区間）を探し出し、その範囲に対応する小節データＭｅａｓｕｒｅ中のラベル番号ｉＬａｖｅｌに同じ番号を付与すると共に、完全一致を表す値「０」をラベルオプションｉＬｖＯｐｔｉｏｎとして登録する。
【００４９】
続いて、ステップＳＥ２を介してラベリング検証処理を実行した後、本処理を終える。後述するように、ラベリング検証処理では、上記ラベリング処理によりラベリングされた小節区間が長過ぎると、ラベリング先頭小節（ポインタＲｅ）と、そこから規定数以上連続した小節（ポインタＲｅｔｍｐ）とで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］の一致率が閾値以上の場合、そのポインタＲｅｔｍｐで指定される小節の１つ前の小節を区間終端とするようにラベリングされた小節区間を分割する。
【００５０】
（６）ラベリング処理の動作 
上述したグループラベリング処理のステップＳＥ１（図９参照）を介して本処理が実行されると、図１０に図示するステップＳＦ１に進み、先頭小節を指定する値をポインタＲｅにセットする。続いて、ステップＳＦ２では、ポインタＲｅで指定される比較元小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果は「ＮＯ」となり、ステップＳＦ３に進む。
【００５１】
ステップＳＦ３では、ポインタＲｅで指定される比較元小節にラベル付与されているか否かを判断する。ラベル付与とは、ポインタＲｅおよびポインタＬｕで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の中で、閾値以上の一致率を有するマトリクス要素が連続する範囲（小節区間）を一致性の高いグループとし、そのグループにラベル番号（後述する）を付与することを意味する。そして、ポインタＲｅで指定される比較元小節にラベル付与済みならば、上記ステップＳＦ３の判断結果は「ＮＯ」になり、ステップＳＦ１３に進み、ポインタＲｅを歩進させた後、上述のステップＳＦ２に処理を戻す。
【００５２】
一方、ポインタＲｅで指定される比較元小節にラベル付与がなされていなければ、上記ステップＳＦ３の判断結果が「ＹＥＳ」になり、ステップＳＦ４に進み、先頭小節を指定する値をポインタＲｅにセットする。次いで、ステップＳＦ５では、ポインタＬｕで指定される比較先小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果は「ＮＯ」となり、ステップＳＦ６に進む。
【００５３】
ステップＳＦ６では、ポインタＲｅおよびポインタＬｕで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の一致率が閾値以上であるかどうかを判断する。マトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の一致率が閾値未満ならば、判断結果は「ＮＯ」になり、ステップＳＦ１０に進み、ポインタＬｕを歩進させ、比較先小節を次の小節に設定した後、上述のステップＳＦ５に処理を戻す。
【００５４】
一方、マトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の一致率が閾値以上ならば、上記ステップＳＦ６の判断結果は「ＹＥＳ」になり、ステップＳＦ７に進む。ステップＳＦ７では、閾値以上の一致率を有するマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の範囲ｉ（小節数）、すなわちＭａｔ１［Ｒｅ＋ｉ］［Ｌｕ＋ｉ］を検出する。次いで、ステップＳＦ８では、閾値以上の一致率が連続した小節数ｉを保存する。そして、ステップＳＦ９では、現在のポインタＬｕに、閾値以上の一致率が連続した小節数ｉを加算してポインタＬｕを更新させた後、上述のステップＳＦ５に処理を戻す。
【００５５】
以後、更新されたポインタＬｕが曲終端を超える迄、一致率が連続して閾値を超える小節数ｉを検出する。そして、更新されたポインタＬｕが曲終端を超えると、上記ステップＳＦ５の判断結果が「ＹＥＳ」になり、ステップＳＦ１１に進む。ステップＳＦ１１では、規定数以上の小節が閾値以上であるか否かを判断する。検出した小節数ｉが規定数未満であると、判断結果は「ＮＯ」になり、ステップＳＦ１３に進み、ポインタＲｅを歩進させた後、前述したステップＳＦ２に処理を戻す。
【００５６】
これに対し、検出した小節数ｉが規定数以上ならば、上記ステップＳＦ１１の判断結果が「ＹＥＳ」になり、ステップＳＦ１２に進み、採番およびラベリングを行う。すなわち、ステップＳＦ１２では、ＲＡＭ３の小節データエリアに格納される小節データＭｅａｓｕｒｅ［０］〜［Ｎ］の内、閾値以上の一致率が連続した小節データＭｅａｓｕｒｅ中のラベル番号ｉＬａｖｅｌに同じ番号を付与すると共に、ラベルオプションｉＬｖＯｐｔｉｏｎとして、完全一致を表す値「０」をセットする。
【００５７】
この後、ステップＳＦ１３に進み、ポインタＲｅを歩進させた後、前述したステップＳＦ２に処理を戻す。以後、歩進されたポインタＲｅで指定される比較元小節が曲終端を超える迄、上述したステップＳＦ３以降の動作を繰り返す。そして、歩進されたポインタＲｅで指定される比較元小節が曲終端を超えると、ステップＳＦ２の判断結果が「ＹＥＳ」となり、本処理を終える。
【００５８】
このように、ラベリング処理では、ポインタＲｅおよびポインタＬｕで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の中から閾値以上の一致率が規定数以上連続する範囲（小節区間）を探し出し、その範囲に対応する小節データＭｅａｓｕｒｅ中のラベル番号ｉＬａｖｅｌに同じ番号を付与すると共に、完全一致を表す値「０」をラベルオプションｉＬｖＯｐｔｉｏｎとして登録する。なお、マトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］中で閾値以上の一致率が規定数以上連続する範囲（小節区間）を検索し、該当する区間の各小節データＭｅａｓｕｒｅにラベル番号ｉＬａｖｅｌを付与すると共に、完全一致を表す値「０」をラベルオプションｉＬｖＯｐｔｉｏｎに登録する処理操作全体をラベリングと称す。
【００５９】
（７）ラベリング検証処理の動作 
前述したグループラベリング処理のステップＳＥ２（図９参照）を介して本処理が実行されると、ＣＰＵ１は図１１に図示するステップＳＧ１に処理を進め、先頭小節を指定する値をポインタＲｅにセットする。続いて、ステップＳＧ２では、ポインタＲｅで指定される小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果は「ＮＯ」になり、ステップＳＧ３に進む。ステップＳＧ３では、ポインタＲｅで指定される小節が、ラベリングされた区間の先頭小節（以下、ラベリング先頭小節と称す）であるか否かを判断する。
【００６０】
ラベリング先頭小節でなければ、判断結果は「ＮＯ」になり、ステップＳＧ４に進み、ポインタＲｅを歩進させた後、上記ステップＳＧ２に処理を戻す。以後、上記ステップＳＧ２〜ＳＧ４を繰り返すことによって、曲終端に達するまで、ポインタＲｅを歩進させながらラベリング先頭小節を検索する。そして、ラベリング先頭小節が見つかると、上記ステップＳＧ３の判断結果が「ＹＥＳ」になり、ステップＳＧ５に進み、現在のポインタＲｅを、ラベリング先頭小節を指定するポインタＲｅｔｍｐにセットする。
【００６１】
次いで、ステップＳＧ６では、ポインタＲｅｔｍｐがラベリングされた小節の後端（以下、ラベリング後端小節と称す）に達したか否かを判断し、続いて、図１２に図示するステップＳＧ７では、ポインタＲｅｔｍｐがラベリング先頭小節を指定するか否かを判断する。以下、ポインタＲｅｔｍｐがラベリング先頭小節を指定する場合と、ラベリング先頭後端を指定する場合とに分けて動作を説明する。
【００６２】
＜ポインタＲｅｔｍｐがラベリング先頭小節を指定する場合＞ 
上記ステップＳＧ５（図１１参照）を介して最初にステップＳＧ６へ進むパスでは、ポインタＲｅｔｍｐがラベリング先頭小節を指定するので、上記ステップＳＧ６の判断結果は「ＮＯ」になり、図１２に図示するステップＳＧ７に進み、ここでの判断結果が「ＹＥＳ」になり、ステップＳＧ８に進む。
【００６３】
ステップＳＧ８では、ポインタＲｅからポインタＲｅｔｍｐまでの小節数が規定数以上であるかどうかを判断する。初めてステップＳＧ８に進むパスでは、ポインタＲｅとポインタＲｅｔｍｐとが同一なので、判断結果は「ＮＯ」になり、ステップＳＧ９に進む。ステップＳＧ９では、ポインタＲｅｔｍｐで指定されるラベリング先頭小節の小節データＭｅａｓｕｒｅに含まれるラベル内状態ｉＬｖＳｔａｔｕｓを「０」にセットして先頭の状態を解除する。
【００６４】
なお、小節データＭｅａｓｕｒｅ中のラベル内状態ｉＬｖＳｔａｔｕｓ（図３参照）は、ラベリングされた小節の先頭であることを表す場合に「１」、ラベリングされた小節の後端であることを表す場合に「２」、状態解除を表す場合に「０」となるフラグである。
【００６５】
さて、こうして先頭の状態を解除し終えると、ステップＳＧ１０に進み、ポインタＲｅｔｍｐを歩進させた後、再び図１１に図示するステップＳＧ６に処理を戻す。以後、ポインタＲｅｔｍｐがラベリング先頭小節を指定し、かつポインタＲｅからポインタＲｅｔｍｐまでの小節数が規定数以上存在するようになるまで、上述したステップＳＧ６〜ＳＧ１０を繰り返す。そして、ポインタＲｅｔｍｐの歩進に応じて、上記条件を満たすと、ステップＳＧ８の判断結果が「ＹＥＳ」になり、ステップＳＧ１１に進む。
【００６６】
ステップＳＧ１１では、ポインタＲｅとポインタＲｅｔｍｐとで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の一致率が閾値以上であるか否かを判断する。閾値未満ならば、判断結果が「ＮＯ」になり、上述したステップＳＧ９に進む。一方、マトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］の一致率が閾値以上であると、上記ステップＳＧ１１の判断結果が「ＹＥＳ」になり、ステップＳＧ１２に進む。ステップＳＧ１２では、ポインタＲｅｔｍｐで指定される小節の１つ前の小節データＭｅａｓｕｒｅに含まれるラベル内状態ｉＬｖＳｔａｔｕｓを「２」にセットしてラベリング後端小節に設定する。これによりラベリングされた小節区間が切断される。
【００６７】
＜ポインタＲｅｔｍｐがラベリングされた小節の後端に達した場合＞ 
以上のようにして、ラベリングされた小節区間が切断された後に、ステップＳＧ１０を介してポインタＲｅｔｍｐを歩進させた後、再び図１１に図示するステップＳＧ６に処理を戻す。そして、歩進されたポインタＲｅｔｍｐがラベリング後端小節に達すると、このステップＳＧ６の判断結果が「ＹＥＳ」になり、図１２に図示するステップＳＧ１３に進む。
【００６８】
ステップＳＧ１３では、エラー状態の有無を判断する。エラー状態とは、ポインタＲｅｔｍｐで指定される小節のラベル番号ｉＬａｖｅｌと、次小節のラベル番号ｉＬａｖｅｌとが同じで、ポインタＲｅｔｍｐの次の小節の小節データＭｅａｓｕｒｅ中のラベル内状態ｉＬｖＳｔａｔｕｓが「１（先頭）」でない状態を指す。そして、エラー状態でなければ、判断結果は「ＮＯ」になり、ステップＳＧ１４に進み、ポインタＲｅｔｍｐをポインタＲｅにセットした後、前述のステップＳＧ３（図１１参照）に処理を戻す。
【００６９】
以後、上述した過程を実行し、ラベリング先頭小節から規定数以上存在し、かつポインタＲｅとポインタＲｅｔｍｐとで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］の一致率が閾値以上であれば、ポインタＲｅｔｍｐで指定される小節の１つ前の小節データＭｅａｓｕｒｅに含まれるラベル内状態ｉＬｖＳｔａｔｕｓを「２」にセットしてラベリングされた小節区間を切断する。
【００７０】
一方、上記ステップＳＧ１３にてエラー状態が検出されると、当該ステップＳＧ１３の判断結果が「ＹＥＳ」になり、ステップＳＧ１５に進み、ポインタＲｅｔｍｐを歩進させる。次いで、ステップＳＧ１６では、ポインタＲｅとポインタＲｅｔｍｐとで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］の一致率が閾値以上であるか否かを判断する。
【００７１】
マトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］の一致率が閾値以上ならば、判断結果は「ＹＥＳ」になり、ステップＳＧ１７に進み、ポインタＲｅｔｍｐで指定される小節の小節データＭｅａｓｕｒｅに含まれるラベル内状態ｉＬｖＳｔａｔｕｓを「１」にセットしてラベリング先頭小節に設定した後、上述のステップＳＧ１０に処理を戻す。
【００７２】
これに対し、ポインタＲｅとポインタＲｅｔｍｐとで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］の一致率が閾値未満であると、上記ステップＳＧ１６の判断結果が「ＮＯ」となり、ステップＳＧ１８に進み、ポインタＲｅｔｍｐで指定される小節の小節データＭｅａｓｕｒｅに含まれるラベル番号ｉＬａｖｅｌおよびラベル内状態ｉＬｖＳｔａｔｕｓを初期化してラベル解除する。
【００７３】
そして、ステップＳＧ１９では、ポインタＲｅｔｍｐで指定される小節のラベル番号ｉＬａｖｅｌと、次小節のラベル番号ｉＬａｖｅｌとが同じになるか否か、つまりエラー状態が連続しているかどうかを判断する。エラー状態が連続していると、判断結果が「ＹＥＳ」になり、ステップＳＧ２０に進み、ポインタＲｅｔｍｐを歩進させた後、上記ステップＳＧ１７に処理を戻す。以後、エラー状態が連続すれば、ステップＳＧ１８〜ＳＧ２０を繰り返す。そして、エラー状態でなくなると、上記ステップＳＧ１９の判断結果が「ＮＯ」になり、上述したステップＳＧ１４に処理を進める。
【００７４】
以上のように、ラベリング検証処理では、ラベリングされた小節区間が長過ぎる場合、つまりラベリング先頭小節から規定数以上存在する場合には、ポインタＲｅとポインタＲｅｔｍｐとで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］を参照し、その一致率が閾値以上であれば、ポインタＲｅｔｍｐで指定される小節の１つ前の小節データＭｅａｓｕｒｅに含まれるラベル内状態ｉＬｖＳｔａｔｕｓを「２」にセットしてラベリングされた小節区間を切断する。
【００７５】
例えば、マトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］において、図１３（ａ）に図示するように、ラベリングされた小節区間が長過ぎ、ラベリング先頭小節から規定数以上連続するような場合には、同図（ｂ）に図示する通り、ポインタＲｅｔｍｐで指定される小節の１つ前の小節で分断するようになっている。
【００７６】
（８）具体的動作例 
次に、図１４を参照して第１実施形態の具体的な動作の一例について説明する。先ず、図１４（ａ）に図示される楽譜として表される楽曲の曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］および小節データＭｅａｓｕｒｅ［０］〜［Ｎ］がＲＡＭ３に格納されている場合に、前述したマトリクス処理を実行すると、図１４（ｂ）に図示するマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］が生成される。
【００７７】
次に、グループラベリング処理を実行すると、図１４（ｂ）に図示するマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の中から閾値以上の一致率が規定数以上連続する範囲（小節区間）を探し出し、その範囲に対応する小節データＭｅａｓｕｒｅ中のラベル番号ｉＬａｖｅｌに同じ番号を付与すると共に、完全一致を表す値「０」をラベルオプションｉＬｖＯｐｔｉｏｎとして登録するラベリングを行う。また、グループラベリング処理では、ラベリングされた小節区間が長過ぎる場合にはその小節区間を分割するが、この動作例では分割の条件を満たさない為、図１４（ｂ）において長円マークで囲われた部分がラベリングされた範囲（小節区間）となる。
【００７８】
そして、結果出力として、例えば図１４（ｃ）に図示するように、ＲＡＭ３に格納された曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］および小節データＭｅａｓｕｒｅ［０］〜［Ｎ］に基づき楽譜表示する際に、ラベリングされた範囲（小節区間）、すなわち小節Ｍ０３〜Ｍ０６と小節Ｍ１１〜Ｍ１４との一致および小節Ｍ０７〜Ｍ０８と小節Ｍ０９〜Ｍ１０との一致を楽譜上でマーク表示する。この結果、楽曲内でメロディが重複する範囲を検出し得るようになる。また、こうして楽曲内でメロディが重複する範囲を検出可能にすることによって、例えば曲データに基づき演奏練習する場合に、メロディが連続する繰り返し部分の削除や、重複部分のスキップなどの機能を実現させるための有用な判断材料を自動的に生成し得るようにすることも可能になる。
【００７９】
［第２実施形態］ 
次に、図１５〜図１９を参照して第２実施形態について説明する。第２実施形態の構成は、前述した第１実施形態と同一なので、その説明については省略する。上述した第１実施形態では、楽曲内でメロディが重複する範囲を検出するようにしたが、第２実施形態では、これに加えて更に転調区間を検出する。以下では、こうした第２実施形態による「小節間一致率算出処理」、「一致判定処理」、「グループラベリング処理」、「類似部分ラベリング補正処理」および「ラベル付け替え処理」の各動作を説明する。
【００８０】
（１）小節間一致率算出処理の動作 
図１５は、第２実施形態による小節間一致率算出処理の動作を示すフローチャートである。前述した第１実施形態と同様に、マトリクス処理のステップＳＢ５（図５参照）を介して本処理が実行されると、ＣＰＵ１は図１５に図示するステップＳＪ１に処理を進め、小節内時間ｔを初期化する。すなわち、ポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅ中の開始時刻ｌＴｉｍｅを小節内時間ｔにセットする。
【００８１】
続いて、ステップＳＪ２では、小節内時間ｔが小節を超えたか否か、つまりポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅ中の小節長ｌＧａｔｅを超えたかどうかを判断する。小節内時間ｔが小節を超えなければ、判断結果は「ＮＯ」となり、ステップＳＪ３に進む。ステップＳＪ３では、第２実施形態による一致判定処理を実行する。
【００８２】
後述するように、一致判定処理では、ポインタＲｅで指定される比較元小節において小節内時間ｔで発音している比較元音の音高と、ポインタＬｕで指定される比較先小節において小節内時間ｔで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグｓ１、ｓ２を共に「１」にセットする。
【００８３】
また、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間ｔで発音している比較元音と比較先音とが有り、かつ比較元音と基準音（比較元小節の先頭音の音高）との音高差と、比較先音と基準音（比較先小節の先頭音の音高）との音高差とが一致する場合にフラグｓ１を「０」、フラグｓ２に「１」をセットする。
【００８４】
次いで、ステップＳＪ４では、上記ステップＳＪ３の一致判定処理により設定されるフラグｓ１の値をレジスタｓｕｍ１に、フラグｓ２の値をレジスタｓｕｍ２にそれぞれ加算する。そして、ステップＳＪ５では、小節内時間ｔを歩進させた後、上述のステップＳＪ２に処理を戻す。
【００８５】
以後、歩進される小節内時間ｔが、ポインタＬｕで指定される比較先小節を超える迄、上述したステップＳＪ２〜ＳＪ５を繰り返す。これにより、レジスタｓｕｍ１にはフラグｓ１が「１」となる完全一致期間を累算した積算時間が格納され、レジスタｓｕｍ２にはフラグｓ２が「１」となる相対一致期間を累算した積算時間が格納される。
【００８６】
そして、歩進される小節内時間ｔが、ポインタＬｕで指定される比較先小節を超えると、上記ステップＳＪ２の判断結果が「ＹＥＳ」となり、ステップＳＪ６に進む。ステップＳＪ６では、レジスタｓｕｍ１に格納される積算時間を比較先小節分の時間ｔで除算して得られる一致率（ｓｕｍ１／ｔ）を、マトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアする。
【００８７】
また、ステップＳＪ６では、レジスタｓｕｍ２に格納される積算時間を比較先小節分の時間ｔで除算して得られる一致率（ｓｕｍ２／ｔ）を、マトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］にストアして本処理を終える。なお、ここで言うマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］、Ｍａｔ２［Ｒｅ］［Ｌｕ］とは、それぞれポインタＲｅとポインタＬｕとで配列要素を指定する２次元レジスタである。
【００８８】
このように、小節間一致率算出処理では、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の比較先音との完全一致期間を累算して得た積算時間を、比較先小節分の時間ｔで除算して一致率（ｓｕｍ１／ｔ）を算出し、算出した一致率をポインタＲｅとポインタＬｕとで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアする。また、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の比較先音との相対一致期間を累算して得た積算時間を、比較先小節分の時間ｔで除算して一致率（ｓｕｍ２／ｔ）を算出し、算出した一致率をポインタＲｅとポインタＬｕとで指定されるマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］にストアする。
【００８９】
（２）一致判定処理の動作 
図１６は、第２実施形態による一致判定処理の動作を示すフローチャートである。上述した小節間一致率算出処理のステップＳＪ３（図１５参照）を介して本処理が実行されると、図１６に図示するステップＳＫ１に進み、フラグｓ１、ｓ２をそれぞれゼロリセットする。
【００９０】
なお、フラグｓ１は、比較元小節において小節内時間ｔで発音している比較元音の音高と、比較先小節において小節内時間ｔで発音している比較先音の音高とが一致している場合や、小節内時間ｔで発音する比較元音および比較先音が共に存在しない場合に「１」となり、一方、小節内時間ｔで発音している比較元音の音高と比較先音の音高とが一致しない場合や、小節内時間ｔで発音する比較元音あるいは比較先音のいずれかが存在しない場合に「０」となるフラグである。
【００９１】
また、フラグｓ２は、相対一致する場合に「１」、それ以外は「０」となるフラグである。相対一致とは、小節内時間ｔで発音している比較元音と比較先音とが有り、かつ比較元音と基準音（例えば小節先頭の音の音高）との音高差と、比較先音と基準音との音高差とが一致する場合、つまり比較元音と比較先音とが転調関係にあることを表す。
【００９２】
次いで、ステップＳＫ２では、ＲＡＭ３の曲データエリアに格納される曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］の内に、ポインタＲｅで指定される比較元小節の小節内時間ｔで発音している比較元音（曲データＭｉｄｉＥｖｅｎｔ）が存在する場合には、その音高ＰｉｔｃｈをレジスタｍｅＲｅにストアし、比較元音が存在しない場合には該当音無しを表す値をレジスタｍｅＲｅにストアする。
【００９３】
続いて、ステップＳＫ３では、ＲＡＭ３の曲データエリアに格納される曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］の内に、ポインタＬｕで指定される比較先小節の小節内時間ｔで発音している比較先音が存在する場合には、その音高ＰｉｔｃｈをレジスタｍｅＬｕにストアし、比較先音が存在しない場合には、該当音無しを表す値をレジスタｍｅＬｕにストアする。
【００９４】
そして、ステップＳＫ４では、レジスタｍｅＲｅの内容に基づき比較元音の有無を判断する。レジスタｍｅＲｅに比較元音無しを表す値がストアされていると、判断結果は「ＮＯ」となり、ステップＳＫ５に進み、レジスタｍｅＬｕの内容に基づき比較先音の有無を判断する。レジスタｍｅＬｕに比較先音の音高Ｐｉｔｃｈが格納されていれば、判断結果は「ＹＥＳ」となり、本処理を終える。これに対し、レジスタｍｅＬｕに比較先音無しを表す値がストアされていると、上記ステップＳＫ５の判断結果は「ＮＯ」となり、ステップＳＫ６に進み、フラグｓ１、ｓ２に共に「１」をセットして本処理を終える。
【００９５】
さて一方、レジスタｍｅＲｅに比較元音の音高Ｐｉｔｃｈが格納されていると、上記ステップＳＫ４の判断結果が「ＹＥＳ」になり、ステップＳＫ７に進む。ステップＳＫ７では、レジスタｍｅＬｕの内容に基づき比較先音の有無を判断する。レジスタｍｅＬｕに比較先音無しを表す値がストアされていると、判断結果は「ＮＯ」となり、本処理を終えるが、レジスタｍｅＬｕに比較先音の音高Ｐｉｔｃｈが格納されていると、上記ステップＳＫ７の判断結果が「ＹＥＳ」となり、ステップＳＫ８に進む。
【００９６】
ステップＳＫ８では、レジスタｍｅＲｅに格納される比較元音の音高Ｐｉｔｃｈと、レジスタｍｅＬｕに格納される比較先音の音高Ｐｉｔｃｈとが同一であるか否かを判断する。比較元音と比較先音とが同一音高ならば、上記ステップＳＫ８の判断結果が「ＹＥＳ」になり、ステップＳＫ９に進み、フラグｓ１、ｓ２に共に「１」をセットして本処理を終える。
【００９７】
これに対し、比較元音と比較先音とが同一音高でない場合には、上記ステップＳＫ８の判断結果が「ＮＯ」となり、ステップＳＫ１０に進む。ステップＳＫ１０では、基準音（比較元小節の先頭音の音高）とレジスタｍｅＲｅに格納される比較元音の音高Ｐｉｔｃｈとの音高差と、基準音（比較先小節の先頭音の音高）とレジスタｍｅＬｕに格納される比較先音の音高Ｐｉｔｃｈとの音高差とが同一か否か、つまり比較元音と比較先音とが転調関係にある相対一致であるかどうかを判断する。相対一致でなければ、判断結果は「ＮＯ」になり、本処理を終える。一方、相対一致ならば、上記ステップＳＫ１０の判断結果は「ＹＥＳ」となり、ステップＳＫ１１に進み、フラグｓ１に「０」、フラグｓ２に「１」をセットして本処理を終える。
【００９８】
このように、一致判定処理では、ポインタＲｅで指定される比較元小節において小節内時間ｔで発音している比較元音の音高と、ポインタＬｕで指定される比較先小節において小節内時間ｔで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグｓ１、ｓ２を共に「１」にセットする。
【００９９】
また、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間ｔで発音している比較元音と比較先音とが有り、かつ比較元音と基準音（比較元小節の先頭音の音高）との音高差と、比較先音と基準音（比較先小節の先頭音の音高）との音高差とが一致する場合にフラグｓ１を「０」、フラグｓ２に「１」をセットする。
【０１００】
ここで、図８を参照して第２実施形態による一致判定処理の具体的な動作を説明する。例えば、ポインタＲｅで指定される比較元小節が小節内時間ｔ＝０〜６に発音される「Ｃ４音（ノートナンバ＃６０）」、小節内時間ｔ＝８〜１４に発音される「Ｃ４音（＃６０）」、小節内時間ｔ＝１６〜２２に発音される「Ｇ４音（＃６７）」および小節内時間ｔ＝２４〜３０に発音される「Ｇ４音（＃６７）」の各比較元音から構成され、ポインタＬｕで指定される比較先小節が小節内時間ｔ＝０〜６に発音される「Ｃ４音（ノートナンバ＃６０）」、小節内時間ｔ＝８〜１４に発音される「Ｃ４音（＃６０）」、小節内時間ｔ＝２０〜２２に発音される「Ｇ４音（＃６７）」および小節内時間ｔ＝２４〜３０に発音される「Ａ４音（＃６９）」の各比較先音から構成されているとする。
【０１０１】
そうして各比較元音と各比較先音との一致を小節内時間ｔ毎に判別すると、図８に図示する通り、小節内時間ｔ＝０〜３１の内、フラグｓ１が「０」となる不一致期間は、ｔ＝１６〜１９およびｔ＝２３〜３０となる。これら不一致期間以外はフラグｓ１が「１」の一致期間になる。したがって、フラグｓ１が「１」となる完全一致期間の積算時間は「２０」となり、これを小節分の総時間「３２（ｔ＝０〜３１）」で除算して得られる一致率「６２％」がマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアされる。
【０１０２】
また、フラグｓ２が「０」となる期間は、ｔ＝１６〜１９およびｔ＝２４〜３０となり、これら以外はフラグｓ２が「１」となる相対一致期間になる。したがって、フラグｓ２が「１」となる相対一致期間の積算時間は「２１」となり、これを小節分の総時間「３２」で除算することによって比較元小節に対する比較先小節の一致率「６５％」がマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］にストアされる。
【０１０３】
（３）グループラベリング処理の動作 
次に、図１７を参照して第２実施形態によるグループラベリング処理の動作を説明する。第１実施形態と同様に、メインルーチンのステップＳＡ３（図４参照）を介して本処理が実行されると、ＣＰＵ１は図１７に図示するステップＳＬ１を介してラベリング処理を実行する。
【０１０４】
このラベリング処理では、前述した第１実施形態と同様、ポインタＲｅおよびポインタＬｕで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の中から閾値以上の一致率が規定数以上連続する範囲（小節区間）を探し出し、その範囲に対応する小節データＭｅａｓｕｒｅ中のラベル番号ｉＬａｖｅｌに同じ番号を付与すると共に、完全一致を表す値「０」をラベルオプションｉＬｖＯｐｔｉｏｎとして登録する。
【０１０５】
次いで、ステップＳＬ２に進み、類似部分ラベリング補正処理を実行する。後述するように、類似部分ラベリング補正処理では、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較先小節とに同じラベル番号ｉＬａｖｅｌが付与されておらず、しかもマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］の中から閾値以上の相対一致率が規定数以上連続する範囲、すなわち比較元小節と比較先小節とが転調関係にあると見られる小節区間を探し出し、それに該当する小節区間を「類似性のある範囲」と表すように、対応する小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌおよびラベルオプションｉＬｖＯｐｔｉｏｎを設定する。
【０１０６】
そして、ステップＳＬ３を介してラベリング検証処理を実行する。このラベリング検証処理では、前述した第１実施形態と同様に、上記ラベリング処理によりラベリングされた小節区間が長過ぎると、ラベリング先頭小節（ポインタＲｅ）と、そこから規定数以上連続した小節（ポインタＲｅｔｍｐ）とで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］の一致率が閾値以上の場合、そのポインタＲｅｔｍｐで指定される小節の１つ前の小節を区間終端とするようにラベリングされた小節区間を分けるようになっている。
【０１０７】
（４）類似部分ラベリング補正処理の動作 
図１８は、類似部分ラベリング補正処理の動作を示すフローチャートである。上述したグループラベリング処理のステップＳＬ２（図１７参照）を介して本処理が実行されると、図１８に図示するステップＳＭ１に進み、比較元の先頭小節を指定する値をポインタＲｅにセットする。続いて、ステップＳＭ２では、ポインタＲｅで指定される比較元小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果は「ＮＯ」となり、ステップＳＭ３に進む。
【０１０８】
ステップＳＭ３では、比較先の先頭小節を指定する値をポインタＬｕにセットする。次いで、ステップＳＭ４では、ポインタＬｕで指定される比較先小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果は「ＮＯ」となり、ステップＳＭ５に進む。ステップＳＭ５では、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較先小節とに同じラベル番号ｉＬａｖｅｌが付与されていないかどうかを判断する。同じラベル番号ｉＬａｖｅｌが付与されていれば、判断結果は「ＮＯ」になり、ステップＳＭ１２に進み、ポインタＬｕを歩進させた後、上述のステップＳＭ４に処理を戻す。
【０１０９】
一方、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較先小節とに同じラベル番号ｉＬａｖｅｌが付与されていない場合には、上記ステップＳＭ５の判断結果が「ＹＥＳ」になり、ステップＳＭ６に進む。ステップＳＭ６では、ポインタＲｅおよびポインタＬｕで指定されるマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］の相対一致率が閾値以上であるかどうかを判断する。マトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］の相対一致率が閾値未満ならば、判断結果は「ＮＯ」になり、ステップＳＭ１２に進み、ポインタＬｕを歩進させた後、上述のステップＳＭ４に処理を戻す。
【０１１０】
これに対し、マトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］の相対一致率が閾値以上ならば、上記ステップＳＭ６の判断結果が「ＹＥＳ」になり、ステップＳＭ７に進む。ステップＳＭ７では、閾値以上の相対一致率を有するマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］の範囲ｉ（小節数）、すなわちＭａｔ２［Ｒｅ＋ｉ］［Ｌｕ＋ｉ］を検出する。次いで、ステップＳＭ８では、閾値以上の相対一致率が連続した小節数ｉを保存する。そして、ステップＳＭ９では、上記ステップＳＭ７にて検出した小節数ｉが規定小節以上であるか否かを判断する。
【０１１１】
検出した小節数ｉが規定小節未満ならば、判断結果は「ＮＯ」になり、ステップＳＭ１２に進み、ポインタＬｕを歩進させた後、上述のステップＳＭ４に処理を戻す。一方、検出した小節数ｉが規定小節以上であると、上記ステップＳＭ９の判断結果が「ＹＥＳ」になり、ステップＳＭ１０に進み、ラベル付け替え処理を実行する。
【０１１２】
ラベル付け替え処理では、後述するように、
（イ）比較元小節Ｒｅおよび比較先小節Ｌｕの双方にラベル番号ｉＬａｖｅｌが付与されている場合には、比較先小節Ｌｕのラベル番号ｉＬａｖｅｌを比較元小節Ｒｅのラベル番号ｉＬａｖｅｌに書き換え、比較先小節ＬｕのラベルオプションｉＬｖＯｐｔｉｏｎに類似（相対一致）を表す値「１」を設定する。
【０１１３】
（ロ）比較元小節Ｒｅだけにラベル番号ｉＬａｖｅｌが付与されている場合には、そのラベル番号ｉＬａｖｅｌを比較先小節Ｌｕのラベル番号ｉＬａｖｅｌに設定すると共に、比較先小節ＬｕのラベルオプションｉＬｖＯｐｔｉｏｎに値「１」を設定する。
【０１１４】
（ハ）比較先小節Ｌｕだけにラベル番号ｉＬａｖｅｌが付与されている場合には、そのラベル番号ｉＬａｖｅｌを比較元小節Ｒｅのラベル番号ｉＬａｖｅｌに設定すると共に、比較元小節ＲｅのラベルオプションｉＬｖＯｐｔｉｏｎに値「１」を設定する。
【０１１５】
（ニ）比較元小節Ｒｅおよび比較先小節Ｌｕの双方にラベル番号ｉＬａｖｅｌが付与されていない場合には、新たに採番したラベル番号を、比較元小節Ｒｅおよび比較先小節Ｌｕのラベル番号ｉＬａｖｅｌに設定すると共に、比較元小節ＲｅのラベルオプションｉＬｖＯｐｔｉｏｎに値「０」を、比較先小節ＬｕのラベルオプションｉＬｖＯｐｔｉｏｎに値「１」を設定する。
【０１１６】
そして、こうしたラベル付け替えが行われると、ステップＳＭ１１に進み、現在のポインタＬｕに、閾値以上の相対一致率が連続した小節数ｉを加算してポインタＬｕを更新させた後、上述のステップＳＭ４に処理を戻す。以後、更新されたポインタＬｕで指定される比較先小節が曲終端を超える迄、相対一致率が規定小節以上連続して閾値を超える小節数ｉを探し出し、該当する小節区間についてラベル付け替えする処理を繰り返す。
【０１１７】
そして、更新されたポインタＬｕで指定される比較先小節が曲終端を超えると、上記ステップＳＭ４の判断結果が「ＹＥＳ」になり、ステップＳＭ１３に進み、ポインタＲｅを歩進させた後、上述のステップＳＭ２に処理を戻す。以後、歩進されたポインタＲｅで指定される比較元小節が曲終端を超える迄、上述したステップＳＭ３以降の処理を繰り返す。そして、歩進されたポインタＲｅで指定される比較元小節が曲終端を超えると、ステップＳＭ２の判断結果が「ＹＥＳ」となり、本処理を終える。
【０１１８】
このように、類似部分ラベリング補正処理では、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較先小節とに同じラベル番号ｉＬａｖｅｌが付与されておらず、しかもマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］の中から閾値以上の相対一致率が規定数以上連続する範囲、すなわち比較元小節と比較先小節とが転調関係にあると見られる小節区間を探し出し、該当する小節区間を「類似性のある範囲」と表すように対応する小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌおよびラベルオプションｉＬｖＯｐｔｉｏｎを設定する。
【０１１９】
（５）ラベル付け替え処理 
図１９は、ラベル付け替え処理の動作を示すフローチャートである。上述した類似部分ラベリング補正処理のステップＳＭ１０（図１８参照）を介して本処理が実行されると、図１９に図示するステップＳＮ１に進み、ポインタＲｅで指定される比較元小節の小節データＭｅａｓｕｒｅにラベル番号ｉＬａｖｅｌが付与されているか否かを判断する。ラベル番号ｉＬａｖｅｌが付与されていれば、判断結果は「ＹＥＳ」になり、ステップＳＮ２に進む。
【０１２０】
ステップＳＮ２では、ポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅにラベル番号ｉＬａｖｅｌが付与されているか否かを判断する。ラベル番号ｉＬａｖｅｌが付与されていれば、判断結果は「ＹＥＳ」になり、ステップＳＮ３に進む。ステップＳＮ３では、ポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌを、ポインタＲｅで指定される比較元小節の小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌに書き換える一方、ポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅのラベルオプションｉＬｖＯｐｔｉｏｎに、類似（相対一致）を表す値「１」を設定して本処理を終える。
【０１２１】
一方、ポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅにラベル番号ｉＬａｖｅｌが付与されていない場合には、上記ステップＳＮ２の判断結果が「ＮＯ」になり、ステップＳＮ４に進む。ステップＳＮ４では、ポインタＲｅで指定される比較元小節の小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌを、ポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌに設定すると共に、この比較先小節の小節データＭｅａｓｕｒｅのラベルオプションｉＬｖＯｐｔｉｏｎに、類似（相対一致）を表す値「１」を設定して本処理を終える。
【０１２２】
さて一方、ポインタＲｅで指定される比較元小節の小節データＭｅａｓｕｒｅにラベル番号ｉＬａｖｅｌが付与されていない場合には、上記ステップＳＮ１の判断結果が「ＮＯ」になり、ステップＳＮ５に処理を進める。ステップＳＮ５では、ポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅにラベル番号ｉＬａｖｅｌが付与されているか否かを判断する。ラベル番号ｉＬａｖｅｌが付与されていれば、判断結果は「ＹＥＳ」になり、ステップＳＮ６に進む。
【０１２３】
ステップＳＮ６では、ポインタＬｕで指定される比較元小節の小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌを、ポインタＲｅで指定される比較先小節の小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌに設定すると共に、この比較先小節の小節データＭｅａｓｕｒｅのラベルオプションｉＬｖＯｐｔｉｏｎに、類似（相対一致）を表す値「１」を設定して本処理を終える。
【０１２４】
これに対し、ポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅにラベル番号ｉＬａｖｅｌが付与されていない場合には、上記ステップＳＮ５の判断結果が「ＮＯ」になり、ステップＳＮ７に進む。ステップＳＮ７では、新たに採番したラベル番号を、比較元小節Ｒｅおよび比較先小節Ｌｕのラベル番号ｉＬａｖｅに設定すると共に、ポインタＲｅで指定される比較先小節の小節データＭｅａｓｕｒｅのラベルオプションｉＬｖＯｐｔｉｏｎには完全一致を表す値「０」を設定し、ポインタＬｕで指定される比較元小節の小節データＭｅａｓｕｒｅのラベルオプションｉＬｖＯｐｔｉｏｎには類似（相対一致）を表す値「１」を設定して本処理を終える。
【０１２５】
このように、ラベル付け替え処理では、（イ）比較元小節Ｒｅおよび比較先小節Ｌｕの双方にラベル番号ｉＬａｖｅｌが付与されていれば、比較先小節Ｌｕのラベル番号ｉＬａｖｅｌを比較元小節Ｒｅのラベル番号ｉＬａｖｅｌに書き換え、比較先小節ＬｕのラベルオプションｉＬｖＯｐｔｉｏｎに類似（相対一致）を表す値「１」を設定し、（ロ）比較元小節Ｒｅだけにラベル番号ｉＬａｖｅｌが付与されていれば、そのラベル番号ｉＬａｖｅｌを比較先小節Ｌｕのラベル番号ｉＬａｖｅｌに設定すると共に、比較先小節ＬｕのラベルオプションｉＬｖＯｐｔｉｏｎに値「１」を設定し、（ハ）比較先小節Ｌｕだけにラベル番号ｉＬａｖｅｌが付与されていれば、そのラベル番号ｉＬａｖｅｌを比較元小節Ｒｅのラベル番号ｉＬａｖｅｌに設定すると共に、比較元小節ＲｅのラベルオプションｉＬｖＯｐｔｉｏｎに値「１」を設定し、（ニ）比較元小節Ｒｅおよび比較先小節Ｌｕの双方にラベル番号ｉＬａｖｅｌが付与されていなければ、新たに採番したラベル番号を、比較元小節Ｒｅおよび比較先小節Ｌｕのラベル番号ｉＬａｖｅｌに設定すると共に、比較元小節ＲｅのラベルオプションｉＬｖＯｐｔｉｏｎに値「０」を、比較先小節ＬｕのラベルオプションｉＬｖＯｐｔｉｏｎに値「１」を設定する。
【０１２６】
以上のように、第２実施形態では、比較元小節Ｒｅと比較先小節Ｌｕとに同じラベル番号ｉＬａｖｅｌが付与されておらず、しかもマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］の中から閾値以上の相対一致率が規定数以上連続する範囲、すなわち比較元小節と比較先小節とが転調関係にあると見られる小節区間を探し出し、その区間を「類似性のある範囲」と表すように対応する小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌおよびラベルオプションｉＬｖＯｐｔｉｏｎを設定するので、楽曲内の転調区間の検出が可能になる。
【０１２７】
また、楽曲中から転調区間を検出することにより、例えば曲データに基づき演奏練習する場合に、楽曲内の転調区間を繰り返し練習させたり、転調区間をスキップさせるなどの機能を実現させるための有用な判断材料を自動的に生成し得るようになる。
【０１２８】
［第３実施形態］ 
次に、図２０〜図２２を参照して第３実施形態について説明する。上述した第２実施形態では、楽曲内でメロディが重複したり転調する区間を検出するようにしたが、第３実施形態では、これに加えて更に楽曲内の類似区間を検出する。以下、こうした第３実施形態による「小節間一致率算出処理」、「一致判定処理」および「グループラベリング処理」の各動作を説明する。
【０１２９】
（１）小節間一致率算出処理の動作 
図２０は、第３実施形態による小節間一致率算出処理の動作を示すフローチャートである。前述した第１実施形態と同様に、マトリクス処理のステップＳＢ５（図５参照）を介して本処理が実行されると、ＣＰＵ１は図２０に図示するステップＳＰ１に処理を進め、小節内時間ｔを初期化する。すなわち、ポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅ中の開始時刻ｌＴｉｍｅを小節内時間ｔにセットする。
【０１３０】
続いて、ステップＳＰ２では、小節内時間ｔが小節を超えたか否か、つまりポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅ中の小節長ｌＧａｔｅを超えたかどうかを判断する。小節内時間ｔが小節を超えなければ、判断結果は「ＮＯ」となり、ステップＳＰ３に進む。ステップＳＰ３では、第３実施形態による一致判定処理を実行する。
【０１３１】
後述するように、一致判定処理では、ポインタＲｅで指定される比較元小節において小節内時間ｔで発音している比較元音の音高と、ポインタＬｕで指定される比較先小節において小節内時間ｔで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグｓ１、ｓ２、ｓ３をそれぞれ「１」をセットする。
【０１３２】
また、一致判定処理では、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間ｔで発音している比較元音と比較先音とが有り、かつ比較元音と基準音（比較元小節の先頭音の音高）との音高差と、比較先音と基準音（比較先小節の先頭音の音高）との音高差とが一致する場合にフラグｓ１を「０」、フラグｓ２を「１」、フラグｓ３を「１」にセットする。
【０１３３】
さらに、一致判定処理では、比較元音と比較先音とが相対方向的に一致する場合、すなわち基準音（比較元小節の先頭音の音高）と比較元音との音高差の方向が、基準音（比較先小節の先頭音の音高）と比較先音との音高差との方向に一致する場合にフラグｓ１を「０」、フラグｓ２を「０」、フラグｓ３を「１」にセットする。
【０１３４】
次いで、ステップＳＰ４では、上記ステップＳＰ３の一致判定処理により設定されるフラグｓ１の値をレジスタｓｕｍ１に、フラグｓ２の値をレジスタｓｕｍ２に、フラグｓ３の値をレジスタｓｕｍ３にそれぞれ加算する。そして、ステップＳＰ５では、小節内時間ｔを歩進させた後、上述のステップＳＰ２に処理を戻す。
【０１３５】
以後、歩進される小節内時間ｔが、ポインタＬｕで指定される比較先小節を超える迄、上述したステップＳＰ２〜ＳＰ５を繰り返す。これにより、レジスタｓｕｍ１にはフラグｓ１が「１」となる完全一致期間を累算した積算時間が格納され、レジスタｓｕｍ２にはフラグｓ２が「１」となる相対一致期間を累算した積算時間が格納され、さらにレジスタｓｕｍ３にはフラグｓ３が「１」となる相対方向的一致期間を累算した積算時間が格納される。
【０１３６】
そして、歩進される小節内時間ｔが、ポインタＬｕで指定される比較先小節を超えると、上記ステップＳＰ２の判断結果が「ＹＥＳ」となり、ステップＳＰ６に進む。ステップＳＰ６では、レジスタｓｕｍ１に格納される積算時間を比較先小節分の時間ｔで除算して得られる一致率（ｓｕｍ１／ｔ）を、マトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアする。
【０１３７】
また、ステップＳＰ６では、レジスタｓｕｍ２に格納される積算時間を比較先小節分の時間ｔで除算して得られる一致率（ｓｕｍ２／ｔ）を、マトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］にストアして本処理を終える。さらに、ステップＳＰ６では、レジスタｓｕｍ３に格納される積算時間を比較先小節分の時間ｔで除算して得られる一致率（ｓｕｍ３／ｔ）を、マトリクス要素Ｍａｔ３［Ｒｅ］［Ｌｕ］にストアして本処理を終える。
【０１３８】
なお、ここで言うマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］、Ｍａｔ２［Ｒｅ］［Ｌｕ］およびＭａｔ３［Ｒｅ］［Ｌｕ］とは、それぞれポインタＲｅとポインタＬｕとで配列要素を指定する２次元レジスタである。
【０１３９】
このように、小節間一致率算出処理では、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の比較先音との完全一致期間を累算して得た積算時間を、比較先小節分の時間ｔで除算して一致率（ｓｕｍ１／ｔ）を算出し、算出した一致率をポインタＲｅとポインタＬｕとで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアする。
【０１４０】
また、小節間一致率算出処理では、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の比較先音との相対一致期間を累算して得た積算時間を、比較先小節分の時間ｔで除算して一致率（ｓｕｍ２／ｔ）を算出し、算出した一致率をポインタＲｅとポインタＬｕとで指定されるマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］にストアする。
【０１４１】
さらに、小節間一致率算出処理では、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の比較先音との相対方向的一致期間を累算して得た積算時間を、比較先小節分の時間ｔで除算して一致率（ｓｕｍ３／ｔ）を算出し、算出した一致率をポインタＲｅとポインタＬｕとで指定されるマトリクス要素Ｍａｔ３［Ｒｅ］［Ｌｕ］にストアする。
【０１４２】
（２）一致判定処理の動作 
図２１は、第３実施形態による一致判定処理の動作を示すフローチャートである。上述した小節間一致率算出処理のステップＳＰ３（図２０参照）を介して本処理が実行されると、ＣＰＵ１は図２１に図示するステップＳＱ１に進み、フラグｓ１、ｓ２、ｓ３をそれぞれゼロリセットする。
【０１４３】
なお、フラグｓ１は、比較元小節において小節内時間ｔで発音している比較元音の音高と、比較先小節において小節内時間ｔで発音している比較先音の音高とが一致している場合や、小節内時間ｔで発音する比較元音および比較先音が共に存在しない場合に「１」となり、一方、小節内時間ｔで発音している比較元音の音高と比較先音の音高とが一致しない場合や、小節内時間ｔで発音する比較元音あるいは比較先音のいずれかが存在しない場合に「０」となるフラグである。
【０１４４】
また、フラグｓ２は、相対一致する場合に「１」、それ以外は「０」となるフラグである。相対一致とは、小節内時間ｔで発音している比較元音と比較先音とが有り、かつ比較元音と基準音（例えば小節先頭の音の音高）との音高差と、比較先音と基準音との音高差とが一致する場合、つまり比較元音と比較先音とが転調関係にあることを表す。
【０１４５】
さらに、フラグｓ３は、相対方向的に一致する場合に「１」、それ以外は「０」となるフラグである。相対方向的に一致とは、小節内時間ｔで発音している比較元音と比較先音とが有り、かつ基準音（比較元小節の先頭音の音高）と比較元音との音高差の方向が、基準音（比較先小節の先頭音の音高）と比較先音との音高差の方向に一致する場合を指す。
【０１４６】
次いで、ステップＳＱ２では、ＲＡＭ３の曲データエリアに格納される曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］の内に、ポインタＲｅで指定される比較元小節の小節内時間ｔで発音している比較元音（曲データＭｉｄｉＥｖｅｎｔ）が存在する場合には、その音高ＰｉｔｃｈをレジスタｍｅＲｅにストアし、比較元音が存在しない場合には該当音無しを表す値をレジスタｍｅＲｅにストアする。
【０１４７】
続いて、ステップＳＱ３では、ＲＡＭ３の曲データエリアに格納される曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］の内に、ポインタＬｕで指定される比較先小節の小節内時間ｔで発音している比較先音が存在する場合には、その音高ＰｉｔｃｈをレジスタｍｅＬｕにストアし、比較先音が存在しない場合には、該当音無しを表す値をレジスタｍｅＬｕにストアする。
【０１４８】
そして、ステップＳＱ４では、レジスタｍｅＲｅの内容に基づき比較元音の有無を判断する。レジスタｍｅＲｅに比較元音無しを表す値がストアされていると、判断結果は「ＮＯ」となり、ステップＳＱ５に進み、レジスタｍｅＬｕの内容に基づき比較先音の有無を判断する。レジスタｍｅＬｕに比較先音の音高Ｐｉｔｃｈが格納されていれば、判断結果は「ＹＥＳ」となり、本処理を終える。これに対し、レジスタｍｅＬｕに比較先音無しを表す値がストアされていると、上記ステップＳＱ５の判断結果は「ＮＯ」となり、ステップＳＱ６に進み、フラグｓ１、ｓ２、ｓ３をそれぞれ「１」にセットして本処理を終える。
【０１４９】
さて一方、レジスタｍｅＲｅに比較元音の音高Ｐｉｔｃｈが格納されていると、上記ステップＳＱ４の判断結果が「ＹＥＳ」になり、ステップＳＱ７に進む。ステップＳＱ７では、レジスタｍｅＬｕの内容に基づき比較先音の有無を判断する。レジスタｍｅＬｕに比較先音無しを表す値がストアされていると、判断結果は「ＮＯ」となり、本処理を終えるが、レジスタｍｅＬｕに比較先音の音高Ｐｉｔｃｈが格納されていると、上記ステップＳＱ７の判断結果が「ＹＥＳ」となり、ステップＳＱ８に進む。
【０１５０】
ステップＳＱ８では、レジスタｍｅＲｅに格納される比較元音の音高Ｐｉｔｃｈと、レジスタｍｅＬｕに格納される比較先音の音高Ｐｉｔｃｈとが同一であるか否かを判断する。比較元音と比較先音とが同一音高ならば、上記ステップＳＱ８の判断結果が「ＹＥＳ」になり、ステップＳＱ９に進み、フラグｓ１、ｓ２、ｓ３にそれぞれ「１」をセットして本処理を終える。
【０１５１】
これに対し、比較元音と比較先音とが同一音高でない場合には、上記ステップＳＱ８の判断結果が「ＮＯ」となり、ステップＳＱ１０に進む。ステップＳＱ１０では、基準音（比較元小節の先頭音の音高）とレジスタｍｅＲｅに格納される比較元音の音高Ｐｉｔｃｈとの音高差と、基準音（比較先小節の先頭音の音高）とレジスタｍｅＬｕに格納される比較先音の音高Ｐｉｔｃｈとの音高差とが同一か否か、つまり比較元音と比較先音とが転調関係にある相対一致であるかどうかを判断する。相対一致ならば、判断結果が「ＹＥＳ」となり、ステップＳＫ１１に進み、フラグｓ１を「０」、フラグｓ２を「１」、フラグｓ３を「１」にセットして本処理を終える。
【０１５２】
一方、相対一致でなければ、上記ステップＳＱ１０の判断結果は「ＮＯ」になり、ステップＳＱ１２に進む。ステップＳＱ１２では、基準音（比較元小節の先頭音の音高）とレジスタｍｅＲｅに格納される比較元音の音高Ｐｉｔｃｈとの音高差の方向が、基準音（比較先小節の先頭音の音高）とレジスタｍｅＬｕに格納される比較先音の音高Ｐｉｔｃｈとの音高差との方向に一致するか否か、つまり相対方向的に一致するかどうかを判断する。相対方向的に一致していなければ、判断結果は「ＮＯ」となり、本処理を終えるが、相対方向的に一致していると、判断結果が「ＹＥＳ」になり、ステップＳＱ１３に進み、フラグｓ１を「０」、フラグｓ２を「０」、フラグｓ３を「１」にセットして本処理を終える。
【０１５３】
このように、一致判定処理では、ポインタＲｅで指定される比較元小節において小節内時間ｔで発音している比較元音の音高と、ポインタＬｕで指定される比較先小節において小節内時間ｔで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグｓ１、ｓ２、ｓ３をそれぞれ「１」をセットする。
【０１５４】
また、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間ｔで発音している比較元音と比較先音とが有り、かつ比較元音と基準音（比較元小節の先頭音の音高）との音高差と、比較先音と基準音（比較先小節の先頭音の音高）との音高差とが一致する場合にフラグｓ１を「０」、フラグｓ２を「１」、フラグｓ３を「１」にセットする。
【０１５５】
さらに、比較元音と比較先音とが相対方向的に一致する場合、すなわち基準音（比較元小節の先頭音の音高）と比較元音との音高差の方向が、基準音（比較先小節の先頭音の音高）と比較先音との音高差との方向に一致する場合にフラグｓ１を「０」、フラグｓ２を「０」、フラグｓ３を「１」にセットする。
【０１５６】
ここで、図８を参照して第３実施形態による一致判定処理の具体的な動作を説明する。例えば、ポインタＲｅで指定される比較元小節が小節内時間ｔ＝０〜６に発音される「Ｃ４音（ノートナンバ＃６０）」、小節内時間ｔ＝８〜１４に発音される「Ｃ４音（＃６０）」、小節内時間ｔ＝１６〜２２に発音される「Ｇ４音（＃６７）」および小節内時間ｔ＝２４〜３０に発音される「Ｇ４音（＃６７）」の各比較元音から構成され、ポインタＬｕで指定される比較先小節が小節内時間ｔ＝０〜６に発音される「Ｃ４音（ノートナンバ＃６０）」、小節内時間ｔ＝８〜１４に発音される「Ｃ４音（＃６０）」、小節内時間ｔ＝２０〜２２に発音される「Ｇ４音（＃６７）」および小節内時間ｔ＝２４〜３０に発音される「Ａ４音（＃６９）」の各比較先音から構成されているとする。
【０１５７】
そうして各比較元音と各比較先音との一致を小節内時間ｔ毎に判別すると、図８に図示する通り、小節内時間ｔ＝０〜３１の内、フラグｓ１が「０」となる不一致期間は、ｔ＝１６〜１９およびｔ＝２３〜３０となる。これら不一致期間以外はフラグｓ１が「１」の一致期間になる。したがって、フラグｓ１が「１」となる完全一致期間の積算時間は「２０」となり、これを小節分の総時間「３２（ｔ＝０〜３１）」で除算して得られる一致率「６２％」がマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアされる。
【０１５８】
また、フラグｓ２が「０」となる期間は、ｔ＝１６〜１９およびｔ＝２４〜３０となり、これら以外はフラグｓ２が「１」となる相対一致期間になる。したがって、フラグｓ２が「１」となる相対一致期間の積算時間は「２１」となり、これを小節分の総時間「３２」で除算することによって比較元小節に対する比較先小節の一致率「６５％」がマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］にストアされる。
【０１５９】
さらに、フラグｓ３が「０」となる期間は、ｔ＝１６〜１９およびｔ＝２４〜３０となり、これら以外はフラグｓ３が「１」となる相対方向的一致期間になる。したがって、フラグｓ２が「１」となる相対方向的一致期間の積算時間は「２１」となり、これを小節分の総時間「３２」で除算することによって比較元小節に対する比較先小節の一致率「６５％」がマトリクス要素Ｍａｔ３［Ｒｅ］［Ｌｕ］にストアされる。
【０１６０】
（３）グループラベリング処理の動作 
次に、図２２を参照して第３実施形態によるグループラベリング処理の動作を説明する。第１実施形態と同様に、メインルーチンのステップＳＡ３（図４参照）を介して本処理が実行されると、ＣＰＵ１は図２２に図示するステップＳＲ１を介してラベリング処理を実行する。
【０１６１】
このラベリング処理では、前述した第１実施形態と同様、ポインタＲｅおよびポインタＬｕで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の中から閾値以上の一致率が規定数以上連続する範囲（小節区間）を探し出し、その範囲に対応する小節データＭｅａｓｕｒｅ中のラベル番号ｉＬａｖｅｌに同じ番号を付与すると共に、完全一致を表す値「０」をラベルオプションｉＬｖＯｐｔｉｏｎとして登録する。
【０１６２】
次いで、ステップＳＲ２に進み、類似部分ラベリング補正１処理を実行する。類似部分ラベリング補正１処理は、前述した第２実施形態による類似部分ラベリング補正処理（図１８参照）と同一である。すなわち、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較先小節とに同じラベル番号ｉＬａｖｅｌが付与されておらず、しかもマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］の中から閾値以上の相対一致率が規定数以上連続する範囲、つまり比較元小節と比較先小節とが転調関係にあると見られる小節区間を探し出し、それに該当する小節区間を「類似性のある範囲」と表すように、対応する小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌおよびラベルオプションｉＬｖＯｐｔｉｏｎを設定する。
【０１６３】
続いて、ステップＳＲ３を介して類似部分ラベリング補正２処理を実行する。類似部分ラベリング補正２処理は、上記ステップＳＲ２の類似部分ラベリング補正１処理とほぼ同一であるであるので、その詳細な動作フローの説明については省略する。類似部分ラベリング補正２処理では、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較先小節とに同じラベル番号ｉＬａｖｅｌが付与されておらず、しかもマトリクス要素Ｍａｔ３［Ｒｅ］［Ｌｕ］の中から閾値以上の相対方向的な一致率が規定数以上連続する範囲（小節区間）を探し出し、それに該当する小節区間を「音高差が類似する範囲」と表すように、対応する小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌおよびラベルオプションｉＬｖＯｐｔｉｏｎを設定する。
【０１６４】
そして、ステップＳＲ４を介してラベリング検証処理を実行する。このラベリング検証処理では、前述した第１実施形態と同様に、上記ラベリング処理によりラベリングされた小節区間が長過ぎると、ラベリング先頭小節（ポインタＲｅ）と、そこから規定数以上連続した小節（ポインタＲｅｔｍｐ）とで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］の一致率が閾値以上の場合、そのポインタＲｅｔｍｐで指定される小節の１つ前の小節を区間終端とするようにラベリングされた小節区間を分けるようになっている。
【０１６５】
以上のように、第３実施形態では、比較元小節Ｒｅと比較先小節Ｌｕとに同じラベル番号ｉＬａｖｅｌが付与されておらず、しかもマトリクス要素Ｍａｔ３［Ｒｅ］［Ｌｕ］の中から閾値以上の相対方向的な一致率が規定数以上連続する範囲（小節区間）を探し出し、それに該当する小節区間を「音高差が類似する範囲」と表すように、対応する小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌおよびラベルオプションｉＬｖＯｐｔｉｏｎを設定するので、楽曲内の類似区間の検出が可能になる。
【０１６６】
［第４実施形態］ 
次に、図２３〜図２７を参照して第４実施形態について説明する。上述した第３実施形態では、楽曲内でメロディが重複したり転調する区間の他、類似する区間を検出するようにしたが、第４実施形態ではこれに加えて更に楽曲内でリズムが一致する区間を検出する。以下、こうした第４実施形態による「小節間一致率算出処理」、「一致判定処理」および「グループラベリング処理」の各動作を説明する。
【０１６７】
（１）小節間一致率算出処理の動作 
図２３は、第４実施形態による小節間一致率算出処理の動作を示すフローチャートである。前述した第１実施形態と同様に、マトリクス処理のステップＳＢ５（図５参照）を介して本処理が実行されると、ＣＰＵ１は図２３に図示するステップＳＳ１に処理を進め、小節内時間ｔを初期化する。すなわち、ポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅ中の開始時刻ｌＴｉｍｅを小節内時間ｔにセットする。
【０１６８】
続いて、ステップＳＳ２では、小節内時間ｔが小節を超えたか否か、つまりポインタＬｕで指定される比較先小節の小節データＭｅａｓｕｒｅ中の小節長ｌＧａｔｅを超えたかどうかを判断する。小節内時間ｔが小節を超えなければ、判断結果は「ＮＯ」となり、ステップＳＳ３に進む。ステップＳＳ３では、第４実施形態による一致判定処理を実行する。
【０１６９】
後述するように、一致判定処理では、ポインタＲｅで指定される比較元小節において小節内時間ｔで発音している比較元音の音高と、ポインタＬｕで指定される比較先小節において小節内時間ｔで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグｓ１、ｓ２、ｓ３をそれぞれ「１」をセットする。
【０１７０】
また、一致判定処理では、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間ｔで発音している比較元音と比較先音とが有り、かつ比較元音と基準音（比較元小節の先頭音の音高）との音高差と、比較先音と基準音（比較先小節の先頭音の音高）との音高差とが一致する場合にフラグｓ１を「０」、フラグｓ２を「１」、フラグｓ３を「１」にセットする。
【０１７１】
さらに、一致判定処理では、比較元音と比較先音とが相対方向的に一致する場合、すなわち基準音（比較元小節の先頭音の音高）と比較元音との音高差の方向が、基準音（比較先小節の先頭音の音高）と比較先音との音高差との方向に一致する場合にフラグｓ１を「０」、フラグｓ２を「０」、フラグｓ３を「１」にセットする。
【０１７２】
加えて、一致判定処理では、比較元音と比較先音とがリズム一致する場合、すなわち小節内時間ｔで発音している比較元音と比較先音とが有り、かつ両音間の発音開始時間および消音時間の差が許容範囲内である場合や、小節内時間ｔで発音する比較元音および比較先音が共に存在せず、かつ現在一致判定の対象とされている比較元音および比較先音のそれぞれについて前音の消音時間と次音の発音開始時間とが許容範囲内にある場合にフラグｓ４を「１」にセットする。
【０１７３】
次いで、ステップＳＳ４では、上記ステップＳＳ３の一致判定処理により設定されるフラグｓ１の値をレジスタｓｕｍ１に、フラグｓ２の値をレジスタｓｕｍ２に、フラグｓ３の値をレジスタｓｕｍ３に、フラグｓ４の値をレジスタｓｕｍ４にそれぞれ加算する。そして、ステップＳＳ５では、小節内時間ｔを歩進させた後、上述のステップＳＳ２に処理を戻す。
【０１７４】
以後、歩進される小節内時間ｔが、ポインタＬｕで指定される比較先小節を超える迄、上述したステップＳＳ２〜ＳＳ５を繰り返す。これにより、レジスタｓｕｍ１にはフラグｓ１が「１」となる完全一致期間を累算した積算時間が格納され、レジスタｓｕｍ２にはフラグｓ２が「１」となる相対一致期間を累算した積算時間が格納され、レジスタｓｕｍ３にはフラグｓ３が「１」となる相対方向的一致期間を累算した積算時間が格納され、さらにレジスタｓｕｍ４にはフラグｓ４が「１」となるリズム一致期間を累算した積算時間が格納される。
【０１７５】
そして、歩進される小節内時間ｔが、ポインタＬｕで指定される比較先小節を超えると、上記ステップＳＳ２の判断結果が「ＹＥＳ」となり、ステップＳＳ６に進む。ステップＳＳ６では、レジスタｓｕｍ１に格納される積算時間を比較先小節分の時間ｔで除算して得られる一致率（ｓｕｍ１／ｔ）を、マトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアする。また、ステップＳＳ６では、レジスタｓｕｍ２に格納される積算時間を比較先小節分の時間ｔで除算して得られる一致率（ｓｕｍ２／ｔ）を、マトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］にストアする。
【０１７６】
さらに、ステップＳＳ６では、レジスタｓｕｍ３に格納される積算時間を比較先小節分の時間ｔで除算して得られる一致率（ｓｕｍ３／ｔ）を、マトリクス要素Ｍａｔ３［Ｒｅ］［Ｌｕ］にストアする。加えて、ステップＳＳ６では、レジスタｓｕｍ４に格納される積算時間を比較先小節分の時間ｔで除算して得られる一致率（ｓｕｍ４／ｔ）を、マトリクス要素Ｍａｔ４［Ｒｅ］［Ｌｕ］にストアして本処理を終える。なお、ここで言うマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］、Ｍａｔ２［Ｒｅ］［Ｌｕ］、Ｍａｔ３［Ｒｅ］［Ｌｕ］およびＭａｔ４［Ｒｅ］［Ｌｕ］とは、それぞれポインタＲｅとポインタＬｕとで配列要素を指定する２次元レジスタである。
【０１７７】
このように、小節間一致率算出処理では、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の比較先音との完全一致期間を累算して得た積算時間を、比較先小節分の時間ｔで除算して一致率（ｓｕｍ１／ｔ）を算出し、算出した一致率をポインタＲｅとポインタＬｕとで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアする。
【０１７８】
また、小節間一致率算出処理では、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の比較先音との相対一致期間を累算して得た積算時間を、比較先小節分の時間ｔで除算して一致率（ｓｕｍ２／ｔ）を算出し、算出した一致率をポインタＲｅとポインタＬｕとで指定されるマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］にストアする。
【０１７９】
さらに、小節間一致率算出処理では、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の比較先音との相対方向的一致期間を累算して得た積算時間を、比較先小節分の時間ｔで除算して一致率（ｓｕｍ３／ｔ）を算出し、算出した一致率をポインタＲｅとポインタＬｕとで指定されるマトリクス要素Ｍａｔ３［Ｒｅ］［Ｌｕ］にストアする。
【０１８０】
加えて、小節間一致率算出処理では、ポインタＲｅで指定される比較元小節中の各比較元音と、ポインタＬｕで指定される比較先小節中の比較先音とのリズム一致期間を累算して得た積算時間を、比較先小節分の時間ｔで除算して一致率（ｓｕｍ４／ｔ）を算出し、算出した一致率をポインタＲｅとポインタＬｕとで指定されるマトリクス要素Ｍａｔ４［Ｒｅ］［Ｌｕ］にストアする。
【０１８１】
（２）一致判定処理の動作 
図２４は、第４実施形態による一致判定処理の動作を示すフローチャートである。上述した小節間一致率算出処理のステップＳＳ３（図２３参照）を介して本処理が実行されると、図２４に図示するステップＳＴ１に進み、フラグｓ１〜ｓ４をそれぞれゼロリセットする。
【０１８２】
なお、フラグｓ１は、比較元小節において小節内時間ｔで発音している比較元音の音高と、比較先小節において小節内時間ｔで発音している比較先音の音高とが一致している場合や、小節内時間ｔで発音する比較元音および比較先音が共に存在しない場合に「１」となり、一方、小節内時間ｔで発音している比較元音の音高と比較先音の音高とが一致しない場合や、小節内時間ｔで発音する比較元音あるいは比較先音のいずれかが存在しない場合に「０」となるフラグである。
【０１８３】
フラグｓ２は、相対一致する場合に「１」、それ以外は「０」となるフラグである。相対一致とは、小節内時間ｔで発音している比較元音と比較先音とが有り、かつ比較元音と基準音（例えば小節先頭の音の音高）との音高差と、比較先音と基準音との音高差とが一致する場合、つまり比較元音と比較先音とが転調関係にあることを表す。
【０１８４】
フラグｓ３は、相対方向的に一致する場合に「１」、それ以外は「０」となるフラグである。相対方向的に一致とは、小節内時間ｔで発音している比較元音と比較先音とが有り、かつ基準音（比較元小節の先頭音の音高）と比較元音との音高差の方向が、基準音（比較先小節の先頭音の音高）と比較先音との音高差の方向に一致する場合を指す。
【０１８５】
フラグｓ４は、リズム一致する場合に「１」、それ以外は「０」となるフラグである。リズム一致とは、小節内時間ｔで発音している比較元音と比較先音とが有り、かつ両音間の発音開始時間および消音時間の差が許容範囲内である場合もしくは小節内時間ｔで発音する比較元音および比較先音が共に存在せず、かつ現在一致判定の対象とされている比較元音および比較先音のそれぞれについて前音の消音時間と次音の発音開始時間とが許容範囲内にある場合を指す。
【０１８６】
次いで、ステップＳＴ２では、ＲＡＭ３の曲データエリアに格納される曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］の内に、ポインタＲｅで指定される比較元小節の小節内時間ｔで発音している比較元音（曲データＭｉｄｉＥｖｅｎｔ）が存在する場合には、その音高ＰｉｔｃｈをレジスタｍｅＲｅにストアし、比較元音が存在しない場合には該当音無しを表す値をレジスタｍｅＲｅにストアする。
【０１８７】
続いて、ステップＳＴ３では、ＲＡＭ３の曲データエリアに格納される曲データＭｉｄｉＥｖｅｎｔ［０］〜［Ｎ］の内に、ポインタＬｕで指定される比較先小節の小節内時間ｔで発音している比較先音が存在する場合には、その音高ＰｉｔｃｈをレジスタｍｅＬｕにストアし、比較先音が存在しない場合には、該当音無しを表す値をレジスタｍｅＬｕにストアする。
【０１８８】
そして、ステップＳＴ４では、レジスタｍｅＲｅの内容に基づき比較元音の有無を判断する。レジスタｍｅＲｅに比較元音の音高Ｐｉｔｃｈが格納されていると、判断結果は「ＹＥＳ」になり、次のステップＳＴ５に進む。ステップＳＴ５では、レジスタｍｅＬｕの内容に基づき比較先音の有無を判断する。レジスタｍｅＬｕに比較先音無しを表す値がストアされていると、判断結果が「ＮＯ」となり、本処理を終える。一方、レジスタｍｅＬｕに比較先音の音高Ｐｉｔｃｈが格納されていると、上記ステップＳＴ５の判断結果が「ＹＥＳ」となり、ステップＳＴ６に進む。
【０１８９】
ステップＳＴ６では、レジスタｍｅＲｅに格納される比較元音の音高Ｐｉｔｃｈと、レジスタｍｅＬｕに格納される比較先音の音高Ｐｉｔｃｈとが同じであるか否かを判断する。比較元音と比較先音とが同一音高ならば、判断結果は「ＹＥＳ」になり、ステップＳＴ７に進み、フラグｓ１、ｓ２、ｓ３にそれぞれ「１」をセットする。次いで、ステップＳＴ８では、レジスタｍｅＲｅに格納される比較元音とレジスタｍｅＬｕに格納される比較先音との発音開始時間差および消音時間差が許容範囲内である否かを破断する。許容範囲内ならば、判断結果は「ＹＥＳ」になり、ステップＳＴ９に進み、フラグｓ４に「１」をセットして本処理を終える。これに対し、許容範囲を超える場合には、上記ステップＳＴ８の判断結果が「ＮＯ」になり、ステップＳＴ１０に進み、フラグｓ４をゼロリセットして本処理を終える。
【０１９０】
一方、比較元音と比較先音とが同一音高でない場合には、上記ステップＳＴ６の判断結果が「ＮＯ」となり、図２５に図示するステップＳＴ１１に進む。ステップＳＴ１１では、基準音（比較元小節の先頭音の音高）とレジスタｍｅＲｅに格納される比較元音の音高Ｐｉｔｃｈとの音高差と、基準音（比較先小節の先頭音の音高）とレジスタｍｅＬｕに格納される比較先音の音高Ｐｉｔｃｈとの音高差とが同一か否か、つまり比較元音と比較先音とが転調関係にある相対一致であるかどうかを判断する。相対一致ならば、判断結果が「ＹＥＳ」となり、ステップＳＴ１２に進み、フラグｓ１を「０」、フラグｓ２を「１」、フラグｓ３を「１」にセットした後、上述のステップＳＴ８（図２４参照）に進む。
【０１９１】
これに対し、相対一致でない場合には、上記ステップＳＴ１１の判断結果は「ＮＯ」になり、ステップＳＴ１３に進む。ステップＳＴ１３では、基準音（比較元小節の先頭音の音高）とレジスタｍｅＲｅに格納される比較元音の音高Ｐｉｔｃｈとの音高差の方向が、基準音（比較先小節の先頭音の音高）とレジスタｍｅＬｕに格納される比較先音の音高Ｐｉｔｃｈとの音高差との方向に一致するか否か、つまり相対方向的に一致するかどうかを判断する。相対方向的に一致していると、判断結果が「ＹＥＳ」になり、ステップＳＴ１４に進み、フラグｓ１を「０」、フラグｓ２を「０」、フラグｓ３を「１」にセットした後、上述のステップＳＴ８（図２４参照）に進む。相対方向的に一致していなければ、上記ステップＳＴ１３の判断結果は「ＮＯ」となり、上述のステップＳＴ８（図２４参照）に進む。
【０１９２】
さて一方、レジスタｍｅＲｅに比較元音無しを表す値がストアされていると、上記ステップＳＴ４（図２４参照）の判断結果が「ＮＯ」となり、図２６に図示するステップＳＴ１５に進む。ステップＳＴ１５では、レジスタｍｅＬｕの内容に基づき比較先音の有無を判断する。レジスタｍｅＬｕに比較先音の音高Ｐｉｔｃｈが格納されていれば、判断結果は「ＹＥＳ」となり、本処理を終える。
【０１９３】
これに対し、レジスタｍｅＬｕに比較先音無しを表す値がストアされていると、上記ステップＳＴ１５の判断結果は「ＮＯ」となり、ステップＳＴ１６に進む。ステップＳＴ１６では、フラグｓ１、ｓ２、ｓ３をそれぞれ「１」にセットする。次いで、ステップＳＴ１７では、レジスタｍｅＲｅに格納される比較元音とレジスタｍｅＬｕに格納される比較先音とのそれぞれについて、前音の消音時間と次音の発音開始時間とが許容範囲内であるか否かを判断する。許容範囲内ならば、判断結果が「ＹＥＳ」になり、ステップＳＴ１８に進み、フラグｓ４を「１」にセットして本処理を終える。一方、許容範囲を超える場合には、上記ステップＳＴ１７の判断結果は「ＮＯ」になり、ステップＳＴ１９に進み、フラグｓ４をゼロリセットして本処理を終える。
【０１９４】
このように、一致判定処理では、ポインタＲｅで指定される比較元小節において小節内時間ｔで発音している比較元音の音高と、ポインタＬｕで指定される比較先小節において小節内時間ｔで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合に、フラグｓ１、ｓ２、ｓ３にそれぞれ「１」をセットする。
【０１９５】
また、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間ｔで発音している比較元音と比較先音とが有り、かつ比較元音と基準音（比較元小節の先頭音の音高）との音高差と、比較先音と基準音（比較先小節の先頭音の音高）との音高差とが一致する場合に、フラグｓ１に「０」、フラグｓ２に「１」、フラグｓ３に「１」をセットする。
【０１９６】
さらに比較元音と比較先音とが相対方向的に一致する場合、すなわち基準音（比較元小節の先頭音の音高）と比較元音との音高差の方向が、基準音（比較先小節の先頭音の音高）と比較先音との音高差との方向に一致する場合に、フラグｓ１に「０」、フラグｓ２に「０」、フラグｓ３に「１」をセットする。
【０１９７】
また、比較元音と比較先音とがリズム一致する場合、すなわち小節内時間ｔで発音している比較元音と比較先音とが有り、かつ両音間の発音開始時間および消音時間の差が許容範囲内である場合や、小節内時間ｔで発音する比較元音および比較先音が共に存在せず、かつ現在一致判定の対象とされている比較元音および比較先音のそれぞれについて前音の消音時間と次音の発音開始時間とが許容範囲内にある場合に、フラグｓ４に「１」をセットする。
【０１９８】
ここで、図８を参照して第３実施形態による一致判定処理の具体的な動作を説明する。例えば、ポインタＲｅで指定される比較元小節が小節内時間ｔ＝０〜６に発音される「Ｃ４音（ノートナンバ＃６０）」、小節内時間ｔ＝８〜１４に発音される「Ｃ４音（＃６０）」、小節内時間ｔ＝１６〜２２に発音される「Ｇ４音（＃６７）」および小節内時間ｔ＝２４〜３０に発音される「Ｇ４音（＃６７）」の各比較元音から構成され、ポインタＬｕで指定される比較先小節が小節内時間ｔ＝０〜６に発音される「Ｃ４音（ノートナンバ＃６０）」、小節内時間ｔ＝８〜１４に発音される「Ｃ４音（＃６０）」、小節内時間ｔ＝２０〜２２に発音される「Ｇ４音（＃６７）」および小節内時間ｔ＝２４〜３０に発音される「Ａ４音（＃６９）」の各比較先音から構成されているとする。
【０１９９】
そして、各比較元音と各比較先音との一致を小節内時間ｔ毎に判別すると、図８に図示する通り、小節内時間ｔ＝０〜３１の内、フラグｓ１が「０」となる不一致期間は、ｔ＝１６〜１９およびｔ＝２３〜３０となる。これら不一致期間以外はフラグｓ１が「１」の一致期間になる。したがって、フラグｓ１が「１」となる完全一致期間の積算時間は「２０」となり、これを小節分の総時間「３２（ｔ＝０〜３１）」で除算して得られる一致率「６２％」がマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］にストアされる。
【０２００】
また、フラグｓ２が「０」となる期間は、ｔ＝１６〜１９およびｔ＝２４〜３０となり、これら以外はフラグｓ２が「１」となる相対一致期間になる。したがって、フラグｓ２が「１」となる相対一致期間の積算時間は「２１」となり、これを小節分の総時間「３２」で除算することによって比較元小節に対する比較先小節の一致率「６５％」がマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］にストアされる。
【０２０１】
さらに、フラグｓ３が「０」となる期間は、ｔ＝１６〜１９およびｔ＝２４〜３０となり、これら以外はフラグｓ３が「１」となる相対方向的一致期間になる。したがって、フラグｓ３が「１」となる相対方向的一致期間の積算時間は「２１」となり、これを小節分の総時間「３２」で除算することによって比較元小節に対する比較先小節の一致率「６５％」がマトリクス要素Ｍａｔ３［Ｒｅ］［Ｌｕ］にストアされる。
【０２０２】
加えて、フラグｓ４が「０」となる期間は、ｔ＝１６〜２２となり、これら以外はフラグｓ４が「１」となるリズム一致期間になる。したがって、フラグｓ４が「１」となるリズム一致期間の積算時間は「２５」となり、これを小節分の総時間「３２」で除算することによって比較元小節に対する比較先小節の一致率「７８％」がマトリクス要素Ｍａｔ４［Ｒｅ］［Ｌｕ］にストアされる。
【０２０３】
（３）グループラベリング処理の動作 
次に、図２７を参照して第４実施形態によるグループラベリング処理の動作を説明する。第１実施形態と同様に、メインルーチンのステップＳＡ３（図４参照）を介して本処理が実行されると、ＣＰＵ１は図２７に図示するステップＳＵ１を介してラベリング処理を実行する。
【０２０４】
このラベリング処理では、前述した第１実施形態と同様、ポインタＲｅおよびポインタＬｕで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｌｕ］の中から閾値以上の一致率が規定数以上連続する範囲（小節区間）を探し出し、その範囲に対応する小節データＭｅａｓｕｒｅ中のラベル番号ｉＬａｖｅｌに同じ番号を付与すると共に、完全一致を表す値「０」をラベルオプションｉＬｖＯｐｔｉｏｎとして登録する。
【０２０５】
次いで、ステップＳＵ２に進み、類似部分ラベリング補正１処理を実行する。この類似部分ラベリング補正１処理は、前述した第２実施形態による類似部分ラベリング補正処理（図１８参照）と同一である。すなわち、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較先小節とに同じラベル番号ｉＬａｖｅｌが付与されておらず、しかもマトリクス要素Ｍａｔ２［Ｒｅ］［Ｌｕ］の中から閾値以上の相対一致率が規定数以上連続する範囲、つまり比較元小節と比較先小節とが転調関係にあると見られる小節区間を探し出し、それに該当する小節区間を「類似性のある範囲」と表すように、対応する小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌおよびラベルオプションｉＬｖＯｐｔｉｏｎを設定する。
【０２０６】
続いて、ステップＳＵ３を介して類似部分ラベリング補正２処理を実行する。類似部分ラベリング補正２処理は、上記ステップＳＵ２の類似部分ラベリング補正１処理とほぼ同一であるであるので、その詳細な動作フローの説明については省略する。類似部分ラベリング補正２処理では、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較先小節とに同じラベル番号ｉＬａｖｅｌが付与されておらず、しかもマトリクス要素Ｍａｔ３［Ｒｅ］［Ｌｕ］の中から閾値以上の相対方向的な一致率が規定数以上連続する範囲（小節区間）を探し出し、それに該当する小節区間を「音高差が類似する範囲」と表すように、対応する小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌおよびラベルオプションｉＬｖＯｐｔｉｏｎを設定する。
【０２０７】
次に、ステップＳＵ４を介して類似部分ラベリング補正３処理を実行する。類似部分ラベリング補正３処理は、上記ステップＳＵ２の類似部分ラベリング補正１処理とほぼ同一であるであるので、その詳細な動作フローの説明については省略する。類似部分ラベリング補正３処理では、ポインタＲｅで指定される比較元小節とポインタＬｕで指定される比較先小節とに同じラベル番号ｉＬａｖｅｌが付与されておらず、しかもマトリクス要素Ｍａｔ４［Ｒｅ］［Ｌｕ］の中から閾値以上のリズム一致率が規定数以上連続する範囲（小節区間）を探し出し、それに該当する小節区間を「リズムが一致する範囲」と表すように、対応する小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌおよびラベルオプションｉＬｖＯｐｔｉｏｎを設定する。
【０２０８】
そして、ステップＳＵ５を介してラベリング検証処理を実行する。このラベリング検証処理では、前述した第１実施形態と同様に、上記ラベリング処理によりラベリングされた小節区間が長過ぎると、ラベリング先頭小節（ポインタＲｅ）と、そこから規定数以上連続した小節（ポインタＲｅｔｍｐ）とで指定されるマトリクス要素Ｍａｔ１［Ｒｅ］［Ｒｅｔｍｐ］の一致率が閾値以上の場合、そのポインタＲｅｔｍｐで指定される小節の１つ前の小節を区間終端とするようにラベリングされた小節区間を分けるようになっている。
【０２０９】
以上のように、第４実施形態では、比較元小節Ｒｅと比較先小節Ｌｕとに同じラベル番号ｉＬａｖｅｌが付与されておらず、しかもマトリクス要素Ｍａｔ４［Ｒｅ］［Ｌｕ］の中から閾値以上のリズム一致率が規定数以上連続する範囲（小節区間）を探し出し、それに該当する小節区間を「リズムが一致する範囲」と表すように、対応する小節データＭｅａｓｕｒｅのラベル番号ｉＬａｖｅｌおよびラベルオプションｉＬｖＯｐｔｉｏｎを設定するので、楽曲内でリズムが一致する区間の検出が可能になる。
【符号の説明】
【０２１０】
１  ＣＰＵ
２  ＲＯＭ
３  ＲＡＭ
４  入力部
５  表示部
６  ＭＩＤＩインタフェース
７  電子楽器
【図１】
2011138153.tif 000003
【図２】
2011138153.tif 000004
【図３】
2011138153.tif 000005
【図４】
2011138153.tif 000006
【図５】
2011138153.tif 000007
【図６】
2011138153.tif 000008
【図７】
2011138153.tif 000009
【図８】
2011138153.tif 000010
【図９】
2011138153.tif 000011
【図１０】
2011138153.tif 000012
【図１１】
2011138153.tif 000013
【図１２】
2011138153.tif 000014
【図１３】
2011138153.tif 000015
【図１４】
2011138153.tif 000016
【図１５】
2011138153.tif 000017
【図１６】
2011138153.tif 000018
【図１７】
2011138153.tif 000019
【図１８】
2011138153.tif 000020
【図１９】
2011138153.tif 000021
【図２０】
2011138153.tif 000022
【図２１】
2011138153.tif 000023
【図２２】
2011138153.tif 000024
【図２３】
2011138153.tif 000025
【図２４】
2011138153.tif 000026
【図２５】
2011138153.tif 000027
【図２６】
2011138153.tif 000028
【図２７】
2011138153.tif 000029
【手続補正書】
【提出日】平成23年2月28日(2011.2.28)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】変更
【補正の内容】
【０００７】
上記目的を達成するため、請求項１に記載の発明では、楽曲を構成する各音を表す曲データを記憶する記憶手段と、前記記憶手段に記憶される曲データを複数の区間に区分けし、当該区分けされたひとつの区間に比較元区間を割り当てるとともに残りの他の区間に比較先区間を割り当てて当該比較元区間に対する比較先区間夫々の一致度を判定する動作を、前記曲データに含まれる区間全てに比較元区間が割り当てられるまで繰り返す判定手段と、前記判定手段により各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出する検出手段と、を具備し、前記判定手段は、前記区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音との音高が同一の場合および比較元音と比較先音とが共に存在しない場合に完全一致と判定する完全一致判定手段と、前記完全一致判定手段により完全一致と判定された時間幅を累算した完全一致期間を、区間長に相当する時間で除算して完全一致度を算出する完全一致度算出手段とを備え、前記検出手段は、前記完全一致度算出手段により算出された各比較先区間の完全一致度の中から閾値以上の完全一致度が連続する比較先区間の範囲を、重複範囲として検出する重複範囲検出手段を具備することを特徴とする。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】削除
【補正の内容】
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】削除
【補正の内容】
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】削除
【補正の内容】
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】削除
【補正の内容】
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】削除
【補正の内容】
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００１３
【補正方法】削除
【補正の内容】
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】削除
【補正の内容】
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００１５
【補正方法】変更
【補正の内容】
【００１５】
請求項２に記載の発明では、楽曲を構成する各音を表す曲データを複数の区間に区分けし、当該区分けされたひとつの区間に比較元区間を割り当てるとともに残りの他の区間に比較先区間を割り当てて当該比較元区間に対する比較先区間夫々の一致度を判定する動作として、前記区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音との音高が同一の場合および比較元音と比較先音とが共に存在しない場合に完全一致と判定する完全一致判定処理と、完全一致と判定された時間幅を累算した完全一致期間を、区間長に相当する時間で除算して完全一致度を算出する完全一致度算出処理とを、前記曲データに含まれる区間全てに比較元区間が割り当てられるまで繰り返す判定処理と、前記完全一致度算出処理により算出された各比較先区間の完全一致度の中から閾値以上の完全一致度が連続する比較先区間の範囲を、重複範囲として検出する重複範囲検出処理と、をコンピュータで実行させることを特徴とする。
【手続補正１０】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
楽曲を構成する各音を表す曲データを記憶する記憶手段と、
前記記憶手段に記憶される曲データを複数の区間に区分けし、当該区分けされたひとつの区間に比較元区間を割り当てるとともに残りの他の区間に比較先区間を割り当てて当該比較元区間に対する比較先区間夫々の一致度を判定する動作を、前記曲データに含まれる区間全てに比較元区間が割り当てられるまで繰り返す判定手段と、
前記判定手段により各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出する検出手段と、
を具備し、
前記判定手段は、
前記区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音との音高が同一の場合および比較元音と比較先音とが共に存在しない場合に完全一致と判定する完全一致判定手段と、
前記完全一致判定手段により完全一致と判定された時間幅を累算した完全一致期間を、区間長に相当する時間で除算して完全一致度を算出する完全一致度算出手段とを備え、
前記検出手段は、
前記完全一致度算出手段により算出された各比較先区間の完全一致度の中から閾値以上の完全一致度が連続する比較先区間の範囲を、重複範囲として検出する重複範囲検出手段を具備することを特徴とする楽曲構造分析装置。
【請求項２】
楽曲を構成する各音を表す曲データを複数の区間に区分けし、当該区分けされたひとつの区間に比較元区間を割り当てるとともに残りの他の区間に比較先区間を割り当てて当該比較元区間に対する比較先区間夫々の一致度を判定する動作として、前記区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音との音高が同一の場合および比較元音と比較先音とが共に存在しない場合に完全一致と判定する完全一致判定処理と、完全一致と判定された時間幅を累算した完全一致期間を、区間長に相当する時間で除算して完全一致度を算出する完全一致度算出処理とを、前記曲データに含まれる区間全てに比較元区間が割り当てられるまで繰り返す判定処理と、
前記完全一致度算出処理により算出された各比較先区間の完全一致度の中から閾値以上の完全一致度が連続する比較先区間の範囲を、重複範囲として検出する重複範囲検出処理と、
をコンピュータで実行させることを特徴とする楽曲構造分析処理プログラム。