"楽曲を構成する各音を表す曲データを記憶する記憶手段と、前記記憶手段に記憶される曲データを複数の区間に区分けし、区分けされた各区間の各々に比較元区間と比較先区間とを割り当て、それらの内でそれぞれ互いに異なる区間同士で比較元区間に対する比較先区間の一致度を判定する判定手段と、前記判定手段により各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出する検出手段とを具備することを特徴とする楽曲構造分析装置。前記検出手段は、検出した範囲の比較先区間を表す情報を記録する記録手段を備えることを特徴とする請求項1記載の楽曲構造分析装置。前記検出手段は、検出した比較先区間の範囲が長過ぎる場合、その比較先区間の範囲を分割する範囲分割手段を備えることを特徴とする請求項1記載の楽曲構造分析装置。前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音との音高が同一の場合および比較元音と比較先音とが共に存在しない場合に完全一致と判定する完全一致判定手段と、前記完全一致判定手段により完全一致と判定された時間幅を累算した完全一致期間を、区間長に相当する時間で除算して完全一致度を算出する完全一致度算出手段とを備え、前記検出手段は、前記完全一致度算出手段により算出された各比較先区間の完全一致度の中から閾値以上の完全一致度が連続する比較先区間の範囲を、重複範囲として検出する重複範囲検出手段を具備することを特徴とする請求項1記載の楽曲構造分析装置。前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元音と比較先音とが転調関係にある場合に相対一致と判定する相対一致判定手段と、前記相対一致判定手段により相対一致と判定された時間幅を累算した相対一致期間を、区間長に相当する時間で除算して相対一致度を算出する相対一致度算出手段とを備え、前記検出手段は、前記相対一致度算出手段により算出された各比較先区間の相対一致度の中から閾値以上の相対一致度が連続する比較先区間の範囲を、類似範囲として検出する類似範囲検出手段を具備することを特徴とする請求項1記載の楽曲構造分析装置。前記相対一致判定手段は、比較元区間の先頭音の音高と比較元音との音高差と、比較先区間の先頭音の音高と比較先音との音高差とが一致する場合に比較元音と比較先音とが転調関係にある相対一致と判定することを特徴とする請求項5記載の楽曲構造分析装置。前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元区間の先頭音の音高と比較元音との音高差の方向が、比較先区間の先頭音の音と比較先音との音高差との方向に一致する場合に相対方向一致と判定する相対方向一致判定手段と、前記相対方向一致判定手段により相対方向一致と判定された時間幅を累算した相対方向一致期間を、区間長に相当する時間で除算して相対方向一致度を算出する相対方向一致度算出手段とを備え、前記検出手段は、前記相対方向一致度算出手段により算出された各比較先区間の相対方向一致度の中から閾値以上の相対方向一致度が連続する比較先区間の範囲を、音高差類似範囲として検出する音高差類似範囲検出手段を具備することを特徴とする請求項1記載の楽曲構造分析装置。前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元音と比較先音との発音開始時間並びに消音時間の差が許容範囲内である場合および歩進された時間幅中に発音する比較元音および比較先音が共に存在せず、かつ現在判定対象となる比較元音および比較先音のそれぞれについて前音の消音時間と次音の発音開始時間とが許容範囲内にある場合にリズム一致と判定するリズム一致判定手段と、前記リズム一致判定手段によりリズム一致と判定された時間幅を累算したリズム一致期間を、区間長に相当する時間で除算してリズム一致度を算出するリズム一致度算出手段とを備え、前記検出手段は、前記リズム一致度算出手段により算出された各比較先区間のリズム一致度の中から閾値以上のリズム一致度が連続する比較先区間の範囲を、リズム一致範囲として検出するリズム一致範囲検出手段を具備することを特徴とする請求項1記載の楽曲構造分析装置。楽曲を構成する各音を表す曲データを複数の区間に区分けし、区分けされた各区間の各々に比較元区間と比較先区間とを割り当て、それらの内でそれぞれ互いに異なる区間同士で比較元区間に対する比較先区間の一致度を判定する判定処理と、前記判定処理により各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出する検出手処理とをコンピュータで実行させることを特徴とする楽曲構造分析装置処理プログラム。ところで、上記特許文献1,2に開示の技術は、単に曲のフレーズやグルーピング構造を分析するだけにとどまり、楽曲内でメロディが重複したり類似する範囲を検出することができない、という問題がある。本発明は、このような事情に鑑みてなされたもので、楽曲内でメロディが重複したり類似する範囲を検出することができる楽曲構造分析装置および楽曲構造分析処理プログラムを提供することを目的としている。上記目的を達成するため、請求項1に記載の発明では、楽曲を構成する各音を表す曲データを記憶する記憶手段と、前記記憶手段に記憶される曲データを複数の区間に区分けし、区分けされた各区間の各々に比較元区間と比較先区間とを割り当て、それらの内でそれぞれ互いに異なる区間同士で比較元区間に対する比較先区間の一致度を判定する判定手段と、前記判定手段により各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出する検出手段とを具備することを特徴とする。上記請求項1に従属する請求項2に記載の発明では、前記検出手段は、検出した範囲の比較先区間を表す情報を記録する記録手段を備えることを特徴としている。上記請求項1に従属する請求項3に記載の発明では、前記検出手段は、検出した比較先区間の範囲が長過ぎる場合、その比較先区間の範囲を分割する範囲分割手段を備えることを特徴とする。上記請求項1に従属する請求項4に記載の発明では、前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音との音高が同一の場合および比較元音と比較先音とが共に存在しない場合に完全一致と判定する完全一致判定手段と、前記完全一致判定手段により完全一致と判定された時間幅を累算した完全一致期間を、区間長に相当する時間で除算して完全一致度を算出する完全一致度算出手段とを備え、前記検出手段は、前記完全一致度算出手段により算出された各比較先区間の完全一致度の中から閾値以上の完全一致度が連続する比較先区間の範囲を、重複範囲として検出する重複範囲検出手段を具備することを特徴とする。上記請求項1に従属する請求項5に記載の発明では、前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元音と比較先音とが転調関係にある場合に相対一致と判定する相対一致判定手段と、前記相対一致判定手段により相対一致と判定された時間幅を累算した相対一致期間を、区間長に相当する時間で除算して相対一致度を算出する相対一致度算出手段とを備え、前記検出手段は、前記相対一致度算出手段により算出された各比較先区間の相対一致度の中から閾値以上の相対一致度が連続する比較先区間の範囲を、類似範囲として検出する類似範囲検出手段を具備することを特徴とする。上記請求項5に従属する請求項6に記載の発明では、前記相対一致判定手段は、比較元区間の先頭音の音高と比較元音との音高差と、比較先区間の先頭音の音高と比較先音との音高差とが一致する場合に比較元音と比較先音とが転調関係にある相対一致と判定することを特徴とする。上記請求項1に従属する請求項7に記載の発明では、前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元区間の先頭音の音高と比較元音との音高差の方向が、比較先区間の先頭音の音と比較先音との音高差との方向に一致する場合に相対方向一致と判定する相対方向一致判定手段と、前記相対方向一致判定手段により相対方向一致と判定された時間幅を累算した相対方向一致期間を、区間長に相当する時間で除算して相対方向一致度を算出する相対方向一致度算出手段とを備え、前記検出手段は、前記相対方向一致度算出手段により算出された各比較先区間の相対方向一致度の中から閾値以上の相対方向一致度が連続する比較先区間の範囲を、音高差類似範囲として検出する音高差類似範囲検出手段を具備することを特徴とする。上記請求項1に従属する請求項8に記載の発明では、前記判定手段は、区間の先頭から後端まで所定の時間幅で歩進させる毎に、その歩進された時間幅中に比較元区間で発音している比較元音と比較先区間で発音している比較先音とが存在し、かつ比較元音と比較先音との発音開始時間並びに消音時間の差が許容範囲内である場合および歩進された時間幅中に発音する比較元音および比較先音が共に存在せず、かつ現在判定対象となる比較元音および比較先音のそれぞれについて前音の消音時間と次音の発音開始時間とが許容範囲内にある場合にリズム一致と判定するリズム一致判定手段と、前記リズム一致判定手段によりリズム一致と判定された時間幅を累算したリズム一致期間を、区間長に相当する時間で除算してリズム一致度を算出するリズム一致度算出手段とを備え、前記検出手段は、前記リズム一致度算出手段により算出された各比較先区間のリズム一致度の中から閾値以上のリズム一致度が連続する比較先区間の範囲を、リズム一致範囲として検出するリズム一致範囲検出手段を具備することを特徴とする。請求項9に記載の発明では、楽曲を構成する各音を表す曲データを複数の区間に区分けし、区分けされた各区間の各々に比較元区間と比較先区間とを割り当て、それらの内でそれぞれ互いに異なる区間同士で比較元区間に対する比較先区間の一致度を判定する判定処理と、前記判定処理により各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出する検出手処理とをコンピュータで実行させることを特徴とする。本発明では、楽曲を構成する各音を表す曲データを複数の区間に区分けし、区分けされた各区間の各々に比較元区間と比較先区間とを割り当て、それらの内でそれぞれ互いに異なる区間同士で比較元区間に対する比較先区間の一致度を判定し、各比較元区間に対してそれぞれ判定された各比較先区間の一致度の中から閾値以上の一致度が連続する比較先区間の範囲を検出するので、楽曲内でメロディが重複したり類似する範囲を検出することができる。以下、図面を参照して本発明の実施の形態について説明する。[第1実施形態]A.構成1全体構成図1は、本発明の第1実施形態による楽曲構造分析装置の全体構成を示すブロック図である。楽曲構造分析装置は、CPU1、ROM2、RAM3、入力部4、表示部5およびMIDIインタフェース6を備える。CPU1は、入力部4が発生する操作イベントに応じて、ROM2に格納される各種プログラムを実行して装置各部を制御する。CPU1では、本発明の要旨に係わる処理として、外部の電子楽器7からMIDIインタフェース6を介して曲を構成する各音を表す曲データを取込み、取込んだ曲データの内からメロディが重複したり類似する範囲を検出する楽曲構造分析を実行する。ROM2は、CPU1にロードされる各種制御プログラムやテーブル等を記憶する。ここで言う各種制御プログラムとは、後述するメインルーチン、マトリクス処理およびグループラベルング処理を含む。RAM3は、CPU1の演算に用いられる各種レジスタフラグデータを一時記憶するワークエリアと、MIDIインタフェース6を介して外部の電子楽器7より取込むSMF形式の曲データMidiEventが格納される曲データエリアと、この曲データエリアに格納された曲データMidiEventから派生させた小節データMeasureを記憶する小節データエリアとを備える。これらRAM3に格納される主要なデータ構成については追って説明する。入力部4は、ユーザ操作に対応した操作イベントを発生してCPU1に供給する。表示部5は、CPU1の制御の下に、例えば曲データMidiEventを楽譜表示したり、表示された楽譜上に楽曲構造分析結果を表示する。2データ構成次に、図2~図3を参照してRAM3に格納される曲データMidiEventおよび小節データMeasureの構成を説明する。先ず図2は、RAM3の曲データエリアに格納される曲データMidiEventの構成を示す図である。曲データMidiEvent[0]~[N]は楽曲を構成する各音メロディを表し、その終端には曲の終わりを表すENDデータを備える。1つの曲データMidiEventは、曲開始時点からの経過時間で表現される発音開始時間ITime、発音期間を表す音長lGate、音高Pitch、音量Vel、ポインタprevおよびポインタnextから構成される。なお、ポインタprevは、1つ前の演奏データMidiEventのアドレスを指定する。ポインタnextは、次の演奏データMidiEventのアドレスを指定する。図3は、RAM3の小節データエリアに格納される小節データMeasureの構成を示す図である。小節データMeasure[0]~[N]は、各小節毎の属性を表す。1つの小節データMeasureは、曲開始時点からの経過時間で表現される開始時刻lTime、小節長lGate、小節に付与されるラベル番号iLavel、ラベルオプションiLvOption、ラベル内状態iLvStatus、ポインタprevおよびポインタnextから構成される。なお、ラベル番号iLavel、ラベルオプションiLvOptionおよびラベル内状態iLvStatusの内容については追って述べる。また、ポインタprevは、1つ前の小節データMeasureのアドレスを指定する。ポインタnextは、次の小節データMeasureのアドレスを指定する。B.動作次に、図4~図14を参照して第1実施形態の動作について説明する。以下では、CPU1が実行するメインルーチン、マトリクス処理およびグループラベリング処理の各動作について述べる。なお、マトリクス処理は小節間一致率算出処理を含み、小節間一致率算出処理は一致判定処理を含む。グループラベリング処理は、ラベリング処理およびラベリング検証処理から構成される。1メインルーチンの動作入力部4からCPU1にメイルーチンの実行を指示するイベントが供給されると、CPU1は図4に図示するメインルーチンを実行してステップSA1に進み、曲データの読み込みを実行する。すなわち、ステップSA1では、MIDIインタフェース6を介して外部の電子楽器7からSMF形式の曲データMidiEvent[0]~[N]を取込んでRAM3の曲データエリアに格納する。また、ステップSA1では、RAM3の曲データエリアに格納した曲データMidiEvent[0]~[N]に基づき、小節データMeasure[0]~[N]を派生させてRAM3の小節データエリアに格納する。なお、ここで派生される小節データMeasure[0]~[N]は、ラベルオプションiLvOptionおよびラベル状態iLvStatusを含まない。ラベルオプションiLvOptionおよびラベル状態iLvStatusは、後述するグループラベリング処理にて生成される。また、本実施の形態では、RAM3の曲データエリアに格納した曲データMidiEvent[0]~[N]から小節データMeasure[0]~[N]を派生するようにしたが、これに限らず、電子楽器7が備える小節データMeasure[0]~[N]をMIDIインタフェース6を介して取込む態様であっても構わない。次いで、ステップSA2では、マトリクス処理を実行する。マトリクス処理では、後述するように、RAM3の小節データエリアに格納された小節データMeasure[0]~[N]を参照して、RAM3の曲データエリアに格納した曲データMidiEvent[0]~[N]を、ポインタReで指定される比較元小節とポインタLuで指定される比較元小節とに区別し、ポインタReで指定される比較元小節を行要素、ポインタLuで指定される比較先小節を列要素としたマトリクス要素Mat1[Re][Lu]を生成する。マトリクス要素Mat1[Re][Lu]は、ポインタReで指定される比較元小節を構成する各比較元音の音高発音期間と、ポインタLuで指定される比較先小節を構成する各比較先音の音高発音期間との一致率を表す。続いて、ステップSA3では、グループラベリング処理を実行する。グループラベリング処理は、後述するように、ポインタReおよびポインタLuで指定されるマトリクス要素Mat1[Re][Lu]の中から閾値以上の一致率が規定数以上連続する範囲小節区間を探し出し、その範囲に対応する小節データMeasure中のラベル番号iLavelに同じ番号を付与すると共に、完全一致を表す値0をラベルオプションiLvOptionとして登録するラベリングを行った後、ラベリングされた小節区間が長過ぎる場合には、ラベリング先頭小節ポインタReと、そこから規定数以上連続した小節ポインタRetmpとで指定されるマトリクス要素Mat1[Re][Retmp]の一致率が閾値以上あれば、そのポインタRetmpで指定される小節の1つ前の小節を区間終端とするようにラベリングされた小節区間を分ける。この後、ステップSA4に進み、上記ステップSA3にて行われたグループラベリング処理の結果を表示部5に表示出力する。2マトリクス処理の動作次に、図5を参照してマトリクス処理の動作を説明する。前述したメインルーチンのステップSA2図4参照を介して本処理が実行されると、CPU1は図5に図示するステップSB1に進み、比較元となる小節を指定するポインタReに、曲先頭の小節を指定する値をセットする。次いで、ステップSB2では、ポインタReで指定される比較元小節が曲終端を超えたか否かを判断する。ポインタReで指定される比較元小節が曲終端を超えていなければ、判断結果はNOになり、ステップSB3に進み、比較先となる小節を指定するポインタLuに、曲先頭の小節を指定する値をセットする。続いて、ステップSB4では、ポインタLuで指定される比較先小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果はNOになり、ステップSB5を介して小節間一致率算出処理を実行する。小節間一致率算出処理では、後述するように、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の比較先音との一致期間を累算して得た積算時間を、比較先小節分の時間tで除算して一致率sum1/tを算出し、算出した一致率をポインタReとポインタLuとで指定されるマトリクス要素Mat1[Re][Lu]にストアする。次いで、ステップSB6では、ポインタLuを歩進させ、比較先小節を次の小節に設定した後、上述のステップSB4に処理を戻す。以後、曲終端を超えるまでポインタLuで指定される比較先小節を歩進させる毎に、ステップSB5の小節間一致率算出処理を繰り返し実行する。そして、ポインタLuで指定される比較先小節が曲終端を超えると、上記ステップSB4の判断結果がYESになり、ステップSB7に進み、ポインタReを歩進させ、比較元小節を次の小節に設定した後、上述のステップSB2に処理を戻す。以後、ポインタReが曲終端を超える迄、上述したステップSB3~SB7を繰り返す。そして、ポインタRe比較元小節が曲終端を超えると、前述したステップSB2の判断結果がYESとなり、本処理を終える。ここで、図8を参照してマトリクス処理の具体的な動作の一例を説明する。例えば、図8の上部に図示するように、ポインタReで指定される比較元小節が小節内時間t=0~6に発音されるC4音ノートナンバ60、小節内時間t=8~14に発音されるC4音60、小節内時間t=16~22に発音されるG4音67および小節内時間t=24~30に発音されるG4音67の各比較元音から構成され、一方、ポインタLuで指定される比較先小節が小節内時間t=0~6に発音されるC4音ノートナンバ60、小節内時間t=8~14に発音されるC4音60、小節内時間t=20~22に発音されるG4音67および小節内時間t=24~30に発音されるA4音69の各比較先音から構成されるする。そうした場合に、これら各比較元音の音高発音期間に対する各比較先音の音高発音期間の一致不一致を小節内時間t毎に判別すると、図8に図示する通り、小節内時間t=0~31の内、フラグs1が0となる不一致期間は、t=16~19およびt=23~30となる。これら不一致期間以外はフラグs1が1の一致期間になる。したがって、フラグs1が1となる一致期間の積算時間は20となり、これを小節分の総時間32t=0~31で除算することによって、比較元小節Reと比較先小節Luとの一致率62が得られ、得られた一致率をマトリクス要素Mat1[Re][Lu]にストアする。以上のように、マトリクス処理では、RAM3の小節データエリアに格納された小節データMeasure[0]~[N]を参照して、RAM3の曲データエリアに格納した曲データMidiEvent[0]~[N]を、ポインタReで指定される比較元小節とポインタLuで指定される比較元小節とに区別し、ポインタReで指定される比較元小節を行要素、ポインタLuで指定される比較先小節を列要素として、ポインタReで指定される比較元小節を構成する各比較元音の音高発音期間と、ポインタLuで指定される比較先小節を構成する各比較先音の音高発音期間との一致率を算出してマトリクス要素Mat1[Re][Lu]にストアする。なお、ポインタReで指定される比較元小節とポインタLuで指定される比較先小節とが同一の場合、マトリクス要素Mat1[Re][Lu]は100一致率となる。3小節間一致率算出処理の動作次に、図6を参照して小節間一致率算出処理の動作を説明する。上述したマトリクス処理のステップSB5図5参照を介して本処理が実行されると、図6に図示するステップSC1に処理を進め、小節内時間tを初期化する。すなわち、ポインタLuで指定される比較先小節の小節データMeasure中の開始時刻lTimeを小節内時間tにセットする。続いて、ステップSC2では、小節内時間tが小節を超えたか否か、つまりポインタLuで指定される比較先小節の小節データMeasure中の小節長lGateを超えたかどうかを判断する。小節内時間tが小節を超えていなければ、判断結果はNOいなり、ステップSC3に進む。ステップSC3では、一致判定処理を実行する。後述するように、一致判定処理では、ポインタReで指定される比較元小節の小節内時間tで発音している比較元音と、ポインタLuで指定される比較先小節の小節内時間tで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグs1を1にセットする。次いで、ステップSC4では、上記ステップSC3の一致判定処理により設定されるフラグs1の値を、レジスタsum1に加算する。そして、ステップSC5では、小節内時間tを歩進させた後、上述したステップSC2に処理を戻す。以後、歩進される小節内時間tが、ポインタLuで指定される比較先小節を超えるまで上述したステップSC2~SC5を繰り返す。これにより、レジスタsum1には、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の比較先音との一致期間を累算した積算時間が格納される。そして、歩進される小節内時間tが、ポインタLuで指定される比較先小節を超えると、上記ステップSC2の判断結果がYESとなり、ステップSC6に進む。ステップSC6では、レジスタsum1に格納される積算時間を比較先小節分の時間tで除算して得られる一致率sum1/tを、マトリクス要素Mat1[Re][Lu]にストアして本処理を終える。なお、ここで言うマトリクス要素Mat1[Re][Lu]とは、ポインタReとポインタLuとで配列要素を指定する2次元レジスタである。このように、小節間一致率算出処理では、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の各比較先音との一致期間を累算して得た積算時間を、比較先小節分の時間tで除算して一致率sum1/tを算出し、算出した一致率をポインタReとポインタLuとで指定されるマトリクス要素Mat1[Re][Lu]にストアする。4一致判定処理の動作次に、図7を参照して一致判定処理の動作を説明する。上述した小節間一致率算出処理のステップSC3図6参照を介して本処理が実行されると、図7に図示するステップSD1に進み、フラグs1をゼロリセットする。フラグs1は、比較元小節において小節内時間tで発音している音比較元音の音高と、比較先小節において小節内時間tで発音している音比較先音の音高とが一致している場合や、小節内時間tで発音する比較元音および比較先音が共に存在しない場合に1となる。一方、小節内時間tで発音している比較元音の音高と比較先音の音高とが一致しない場合や、小節内時間tで発音する比較元音あるいは比較先音のいずれかが存在しない場合には0となる。次いで、ステップSD2では、RAM3の曲データエリアに格納される曲データMidiEvent[0]~[N]の内に、ポインタReで指定される比較元小節の小節内時間tで発音している比較元音曲データMidiEventが存在する場合には、その音高PitchをレジスタmeReにストアし、比較元音が存在しない場合には該当音無しを表す値をレジスタmeReにストアする。続いて、ステップSD3では、RAM3の曲データエリアに格納される曲データMidiEvent[0]~[N]の内に、ポインタLuで指定される比較先小節の小節内時間tで発音している比較先音が存在する場合には、その音高PitchをレジスタmeLuにストアし、比較先音が存在しない場合には、該当音無しを表す値をレジスタmeLuにストアする。そして、ステップSD4では、レジスタmeReの内容に基づき比較元音の有無を判断する。レジスタmeReに比較元音の音高Pitchが格納されていると、判断結果はYESとなり、ステップSD5に進む。ステップSD5では、レジスタmeLuの内容に基づき比較先音の有無を判断する。レジスタmeLuに比較先音無しを表す値がストアされていると、判断結果はNOとなり、本処理を終える。一方、レジスタmeLuに比較先音の音高Pitchが格納されていれば、判断結果がYESとなり、ステップSD6に進む。ステップSD6では、レジスタmeReに格納される比較元音の音高Pitchと、レジスタmeLuに格納される比較先音の音高Pitchとが同一であるか否かを判断する。比較元音と比較先音とが同一音高でなければ、判断結果はNOとなり、本処理を終える。これに対し、比較元音と比較先音とが同一音高であると、上記ステップSD6の判断結果がYESになり、ステップSD7に進み、フラグs1に1をセットして本処理を終える。さて一方、レジスタmeReに比較元音無しを表す値がストアされていると、上記ステップSD4の判断結果がNOとなり、ステップSD8に進む。ステップSD8では、レジスタmeLuの内容に基づき比較先音の有無を判断する。レジスタmeLuに比較先音無しを表す値がストアされていると、判断結果はNOとなり、ステップSD9に進み、フラグs1に1をセットして本処理を終える。これに対し、レジスタmeLuに比較先音の音高Pitchが格納されていれば、判断結果がYESとなり、本処理を終える。このように、一致判定処理では、ポインタReで指定される比較元小節において小節内時間tで発音している比較元音と、ポインタLuで指定される比較先小節において小節内時間tで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグs1を1にセットするようになっている。5グループラベリング処理の動作次に、図9を参照してグループラベリング処理の動作を説明する。前述したメインルーチンのステップSA3図4参照を介して本処理が実行されると、CPU1は図9に図示するステップSE1を介してラベリング処理を実行する。後述するように、ラベリング処理では、ポインタReおよびポインタLuで指定されるマトリクス要素Mat1[Re][Lu]の中から閾値以上の一致率が規定数以上連続する範囲小節区間を探し出し、その範囲に対応する小節データMeasure中のラベル番号iLavelに同じ番号を付与すると共に、完全一致を表す値0をラベルオプションiLvOptionとして登録する。続いて、ステップSE2を介してラベリング検証処理を実行した後、本処理を終える。後述するように、ラベリング検証処理では、上記ラベリング処理によりラベリングされた小節区間が長過ぎると、ラベリング先頭小節ポインタReと、そこから規定数以上連続した小節ポインタRetmpとで指定されるマトリクス要素Mat1[Re][Retmp]の一致率が閾値以上の場合、そのポインタRetmpで指定される小節の1つ前の小節を区間終端とするようにラベリングされた小節区間を分割する。6ラベリング処理の動作上述したグループラベリング処理のステップSE1図9参照を介して本処理が実行されると、図10に図示するステップSF1に進み、先頭小節を指定する値をポインタReにセットする。続いて、ステップSF2では、ポインタReで指定される比較元小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果はNOとなり、ステップSF3に進む。ステップSF3では、ポインタReで指定される比較元小節にラベル付与されているか否かを判断する。ラベル付与とは、ポインタReおよびポインタLuで指定されるマトリクス要素Mat1[Re][Lu]の中で、閾値以上の一致率を有するマトリクス要素が連続する範囲小節区間を一致性の高いグループとし、そのグループにラベル番号後述するを付与することを意味する。そして、ポインタReで指定される比較元小節にラベル付与済みならば、上記ステップSF3の判断結果はNOになり、ステップSF13に進み、ポインタReを歩進させた後、上述のステップSF2に処理を戻す。一方、ポインタReで指定される比較元小節にラベル付与がなされていなければ、上記ステップSF3の判断結果がYESになり、ステップSF4に進み、先頭小節を指定する値をポインタReにセットする。次いで、ステップSF5では、ポインタLuで指定される比較先小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果はNOとなり、ステップSF6に進む。ステップSF6では、ポインタReおよびポインタLuで指定されるマトリクス要素Mat1[Re][Lu]の一致率が閾値以上であるかどうかを判断する。マトリクス要素Mat1[Re][Lu]の一致率が閾値未満ならば、判断結果はNOになり、ステップSF10に進み、ポインタLuを歩進させ、比較先小節を次の小節に設定した後、上述のステップSF5に処理を戻す。一方、マトリクス要素Mat1[Re][Lu]の一致率が閾値以上ならば、上記ステップSF6の判断結果はYESになり、ステップSF7に進む。ステップSF7では、閾値以上の一致率を有するマトリクス要素Mat1[Re][Lu]の範囲i小節数、すなわちMat1[Rei][Lui]を検出する。次いで、ステップSF8では、閾値以上の一致率が連続した小節数iを保存する。そして、ステップSF9では、現在のポインタLuに、閾値以上の一致率が連続した小節数iを加算してポインタLuを更新させた後、上述のステップSF5に処理を戻す。以後、更新されたポインタLuが曲終端を超える迄、一致率が連続して閾値を超える小節数iを検出する。そして、更新されたポインタLuが曲終端を超えると、上記ステップSF5の判断結果がYESになり、ステップSF11に進む。ステップSF11では、規定数以上の小節が閾値以上であるか否かを判断する。検出した小節数iが規定数未満であると、判断結果はNOになり、ステップSF13に進み、ポインタReを歩進させた後、前述したステップSF2に処理を戻す。これに対し、検出した小節数iが規定数以上ならば、上記ステップSF11の判断結果がYESになり、ステップSF12に進み、採番およびラベリングを行う。すなわち、ステップSF12では、RAM3の小節データエリアに格納される小節データMeasure[0]~[N]の内、閾値以上の一致率が連続した小節データMeasure中のラベル番号iLavelに同じ番号を付与すると共に、ラベルオプションiLvOptionとして、完全一致を表す値0をセットする。この後、ステップSF13に進み、ポインタReを歩進させた後、前述したステップSF2に処理を戻す。以後、歩進されたポインタReで指定される比較元小節が曲終端を超える迄、上述したステップSF3以降の動作を繰り返す。そして、歩進されたポインタReで指定される比較元小節が曲終端を超えると、ステップSF2の判断結果がYESとなり、本処理を終える。このように、ラベリング処理では、ポインタReおよびポインタLuで指定されるマトリクス要素Mat1[Re][Lu]の中から閾値以上の一致率が規定数以上連続する範囲小節区間を探し出し、その範囲に対応する小節データMeasure中のラベル番号iLavelに同じ番号を付与すると共に、完全一致を表す値0をラベルオプションiLvOptionとして登録する。なお、マトリクス要素Mat1[Re][Lu]中で閾値以上の一致率が規定数以上連続する範囲小節区間を検索し、該当する区間の各小節データMeasureにラベル番号iLavelを付与すると共に、完全一致を表す値0をラベルオプションiLvOptionに登録する処理操作全体をラベリングと称す。7ラベリング検証処理の動作前述したグループラベリング処理のステップSE2図9参照を介して本処理が実行されると、CPU1は図11に図示するステップSG1に処理を進め、先頭小節を指定する値をポインタReにセットする。続いて、ステップSG2では、ポインタReで指定される小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果はNOになり、ステップSG3に進む。ステップSG3では、ポインタReで指定される小節が、ラベリングされた区間の先頭小節以下、ラベリング先頭小節と称すであるか否かを判断する。ラベリング先頭小節でなければ、判断結果はNOになり、ステップSG4に進み、ポインタReを歩進させた後、上記ステップSG2に処理を戻す。以後、上記ステップSG2~SG4を繰り返すことによって、曲終端に達するまで、ポインタReを歩進させながらラベリング先頭小節を検索する。そして、ラベリング先頭小節が見つかると、上記ステップSG3の判断結果がYESになり、ステップSG5に進み、現在のポインタReを、ラベリング先頭小節を指定するポインタRetmpにセットする。次いで、ステップSG6では、ポインタRetmpがラベリングされた小節の後端以下、ラベリング後端小節と称すに達したか否かを判断し、続いて、図12に図示するステップSG7では、ポインタRetmpがラベリング先頭小節を指定するか否かを判断する。以下、ポインタRetmpがラベリング先頭小節を指定する場合と、ラベリング先頭後端を指定する場合とに分けて動作を説明する。<ポインタRetmpがラベリング先頭小節を指定する場合>上記ステップSG5図11参照を介して最初にステップSG6へ進むパスでは、ポインタRetmpがラベリング先頭小節を指定するので、上記ステップSG6の判断結果はNOになり、図12に図示するステップSG7に進み、ここでの判断結果がYESになり、ステップSG8に進む。ステップSG8では、ポインタReからポインタRetmpまでの小節数が規定数以上であるかどうかを判断する。初めてステップSG8に進むパスでは、ポインタReとポインタRetmpとが同一なので、判断結果はNOになり、ステップSG9に進む。ステップSG9では、ポインタRetmpで指定されるラベリング先頭小節の小節データMeasureに含まれるラベル内状態iLvStatusを0にセットして先頭の状態を解除する。なお、小節データMeasure中のラベル内状態iLvStatus図3参照は、ラベリングされた小節の先頭であることを表す場合に1、ラベリングされた小節の後端であることを表す場合に2、状態解除を表す場合に0となるフラグである。さて、こうして先頭の状態を解除し終えると、ステップSG10に進み、ポインタRetmpを歩進させた後、再び図11に図示するステップSG6に処理を戻す。以後、ポインタRetmpがラベリング先頭小節を指定し、かつポインタReからポインタRetmpまでの小節数が規定数以上存在するようになるまで、上述したステップSG6~SG10を繰り返す。そして、ポインタRetmpの歩進に応じて、上記条件を満たすと、ステップSG8の判断結果がYESになり、ステップSG11に進む。ステップSG11では、ポインタReとポインタRetmpとで指定されるマトリクス要素Mat1[Re][Lu]の一致率が閾値以上であるか否かを判断する。閾値未満ならば、判断結果がNOになり、上述したステップSG9に進む。一方、マトリクス要素Mat1[Re][Retmp]の一致率が閾値以上であると、上記ステップSG11の判断結果がYESになり、ステップSG12に進む。ステップSG12では、ポインタRetmpで指定される小節の1つ前の小節データMeasureに含まれるラベル内状態iLvStatusを2にセットしてラベリング後端小節に設定する。これによりラベリングされた小節区間が切断される。<ポインタRetmpがラベリングされた小節の後端に達した場合>以上のようにして、ラベリングされた小節区間が切断された後に、ステップSG10を介してポインタRetmpを歩進させた後、再び図11に図示するステップSG6に処理を戻す。そして、歩進されたポインタRetmpがラベリング後端小節に達すると、このステップSG6の判断結果がYESになり、図12に図示するステップSG13に進む。ステップSG13では、エラー状態の有無を判断する。エラー状態とは、ポインタRetmpで指定される小節のラベル番号iLavelと、次小節のラベル番号iLavelとが同じで、ポインタRetmpの次の小節の小節データMeasure中のラベル内状態iLvStatusが1先頭でない状態を指す。そして、エラー状態でなければ、判断結果はNOになり、ステップSG14に進み、ポインタRetmpをポインタReにセットした後、前述のステップSG3図11参照に処理を戻す。以後、上述した過程を実行し、ラベリング先頭小節から規定数以上存在し、かつポインタReとポインタRetmpとで指定されるマトリクス要素Mat1[Re][Retmp]の一致率が閾値以上であれば、ポインタRetmpで指定される小節の1つ前の小節データMeasureに含まれるラベル内状態iLvStatusを2にセットしてラベリングされた小節区間を切断する。一方、上記ステップSG13にてエラー状態が検出されると、当該ステップSG13の判断結果がYESになり、ステップSG15に進み、ポインタRetmpを歩進させる。次いで、ステップSG16では、ポインタReとポインタRetmpとで指定されるマトリクス要素Mat1[Re][Retmp]の一致率が閾値以上であるか否かを判断する。マトリクス要素Mat1[Re][Retmp]の一致率が閾値以上ならば、判断結果はYESになり、ステップSG17に進み、ポインタRetmpで指定される小節の小節データMeasureに含まれるラベル内状態iLvStatusを1にセットしてラベリング先頭小節に設定した後、上述のステップSG10に処理を戻す。これに対し、ポインタReとポインタRetmpとで指定されるマトリクス要素Mat1[Re][Retmp]の一致率が閾値未満であると、上記ステップSG16の判断結果がNOとなり、ステップSG18に進み、ポインタRetmpで指定される小節の小節データMeasureに含まれるラベル番号iLavelおよびラベル内状態iLvStatusを初期化してラベル解除する。そして、ステップSG19では、ポインタRetmpで指定される小節のラベル番号iLavelと、次小節のラベル番号iLavelとが同じになるか否か、つまりエラー状態が連続しているかどうかを判断する。エラー状態が連続していると、判断結果がYESになり、ステップSG20に進み、ポインタRetmpを歩進させた後、上記ステップSG17に処理を戻す。以後、エラー状態が連続すれば、ステップSG18~SG20を繰り返す。そして、エラー状態でなくなると、上記ステップSG19の判断結果がNOになり、上述したステップSG14に処理を進める。以上のように、ラベリング検証処理では、ラベリングされた小節区間が長過ぎる場合、つまりラベリング先頭小節から規定数以上存在する場合には、ポインタReとポインタRetmpとで指定されるマトリクス要素Mat1[Re][Retmp]を参照し、その一致率が閾値以上であれば、ポインタRetmpで指定される小節の1つ前の小節データMeasureに含まれるラベル内状態iLvStatusを2にセットしてラベリングされた小節区間を切断する。例えば、マトリクス要素Mat1[Re][Retmp]において、図13aに図示するように、ラベリングされた小節区間が長過ぎ、ラベリング先頭小節から規定数以上連続するような場合には、同図bに図示する通り、ポインタRetmpで指定される小節の1つ前の小節で分断するようになっている。8具体的動作例次に、図14を参照して第1実施形態の具体的な動作の一例について説明する。先ず、図14aに図示される楽譜として表される楽曲の曲データMidiEvent[0]~[N]および小節データMeasure[0]~[N]がRAM3に格納されている場合に、前述したマトリクス処理を実行すると、図14bに図示するマトリクス要素Mat1[Re][Lu]が生成される。次に、グループラベリング処理を実行すると、図14bに図示するマトリクス要素Mat1[Re][Lu]の中から閾値以上の一致率が規定数以上連続する範囲小節区間を探し出し、その範囲に対応する小節データMeasure中のラベル番号iLavelに同じ番号を付与すると共に、完全一致を表す値0をラベルオプションiLvOptionとして登録するラベリングを行う。また、グループラベリング処理では、ラベリングされた小節区間が長過ぎる場合にはその小節区間を分割するが、この動作例では分割の条件を満たさない為、図14bにおいて長円マークで囲われた部分がラベリングされた範囲小節区間となる。そして、結果出力として、例えば図14cに図示するように、RAM3に格納された曲データMidiEvent[0]~[N]および小節データMeasure[0]~[N]に基づき楽譜表示する際に、ラベリングされた範囲小節区間、すなわち小節M03~M06と小節M11~M14との一致および小節M07~M08と小節M09~M10との一致を楽譜上でマーク表示する。この結果、楽曲内でメロディが重複する範囲を検出し得るようになる。また、こうして楽曲内でメロディが重複する範囲を検出可能にすることによって、例えば曲データに基づき演奏練習する場合に、メロディが連続する繰り返し部分の削除や、重複部分のスキップなどの機能を実現させるための有用な判断材料を自動的に生成し得るようにすることも可能になる。[第2実施形態]次に、図15~図19を参照して第2実施形態について説明する。第2実施形態の構成は、前述した第1実施形態と同一なので、その説明については省略する。上述した第1実施形態では、楽曲内でメロディが重複する範囲を検出するようにしたが、第2実施形態では、これに加えて更に転調区間を検出する。以下では、こうした第2実施形態による小節間一致率算出処理、一致判定処理、グループラベリング処理、類似部分ラベリング補正処理およびラベル付け替え処理の各動作を説明する。1小節間一致率算出処理の動作図15は、第2実施形態による小節間一致率算出処理の動作を示すフローチャートである。前述した第1実施形態と同様に、マトリクス処理のステップSB5図5参照を介して本処理が実行されると、CPU1は図15に図示するステップSJ1に処理を進め、小節内時間tを初期化する。すなわち、ポインタLuで指定される比較先小節の小節データMeasure中の開始時刻lTimeを小節内時間tにセットする。続いて、ステップSJ2では、小節内時間tが小節を超えたか否か、つまりポインタLuで指定される比較先小節の小節データMeasure中の小節長lGateを超えたかどうかを判断する。小節内時間tが小節を超えなければ、判断結果はNOとなり、ステップSJ3に進む。ステップSJ3では、第2実施形態による一致判定処理を実行する。後述するように、一致判定処理では、ポインタReで指定される比較元小節において小節内時間tで発音している比較元音の音高と、ポインタLuで指定される比較先小節において小節内時間tで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグs1、s2を共に1にセットする。また、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間tで発音している比較元音と比較先音とが有り、かつ比較元音と基準音比較元小節の先頭音の音高との音高差と、比較先音と基準音比較先小節の先頭音の音高との音高差とが一致する場合にフラグs1を0、フラグs2に1をセットする。次いで、ステップSJ4では、上記ステップSJ3の一致判定処理により設定されるフラグs1の値をレジスタsum1に、フラグs2の値をレジスタsum2にそれぞれ加算する。そして、ステップSJ5では、小節内時間tを歩進させた後、上述のステップSJ2に処理を戻す。以後、歩進される小節内時間tが、ポインタLuで指定される比較先小節を超える迄、上述したステップSJ2~SJ5を繰り返す。これにより、レジスタsum1にはフラグs1が1となる完全一致期間を累算した積算時間が格納され、レジスタsum2にはフラグs2が1となる相対一致期間を累算した積算時間が格納される。そして、歩進される小節内時間tが、ポインタLuで指定される比較先小節を超えると、上記ステップSJ2の判断結果がYESとなり、ステップSJ6に進む。ステップSJ6では、レジスタsum1に格納される積算時間を比較先小節分の時間tで除算して得られる一致率sum1/tを、マトリクス要素Mat1[Re][Lu]にストアする。また、ステップSJ6では、レジスタsum2に格納される積算時間を比較先小節分の時間tで除算して得られる一致率sum2/tを、マトリクス要素Mat2[Re][Lu]にストアして本処理を終える。なお、ここで言うマトリクス要素Mat1[Re][Lu]、Mat2[Re][Lu]とは、それぞれポインタReとポインタLuとで配列要素を指定する2次元レジスタである。このように、小節間一致率算出処理では、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の比較先音との完全一致期間を累算して得た積算時間を、比較先小節分の時間tで除算して一致率sum1/tを算出し、算出した一致率をポインタReとポインタLuとで指定されるマトリクス要素Mat1[Re][Lu]にストアする。また、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の比較先音との相対一致期間を累算して得た積算時間を、比較先小節分の時間tで除算して一致率sum2/tを算出し、算出した一致率をポインタReとポインタLuとで指定されるマトリクス要素Mat2[Re][Lu]にストアする。2一致判定処理の動作図16は、第2実施形態による一致判定処理の動作を示すフローチャートである。上述した小節間一致率算出処理のステップSJ3図15参照を介して本処理が実行されると、図16に図示するステップSK1に進み、フラグs1、s2をそれぞれゼロリセットする。なお、フラグs1は、比較元小節において小節内時間tで発音している比較元音の音高と、比較先小節において小節内時間tで発音している比較先音の音高とが一致している場合や、小節内時間tで発音する比較元音および比較先音が共に存在しない場合に1となり、一方、小節内時間tで発音している比較元音の音高と比較先音の音高とが一致しない場合や、小節内時間tで発音する比較元音あるいは比較先音のいずれかが存在しない場合に0となるフラグである。また、フラグs2は、相対一致する場合に1、それ以外は0となるフラグである。相対一致とは、小節内時間tで発音している比較元音と比較先音とが有り、かつ比較元音と基準音例えば小節先頭の音の音高との音高差と、比較先音と基準音との音高差とが一致する場合、つまり比較元音と比較先音とが転調関係にあることを表す。次いで、ステップSK2では、RAM3の曲データエリアに格納される曲データMidiEvent[0]~[N]の内に、ポインタReで指定される比較元小節の小節内時間tで発音している比較元音曲データMidiEventが存在する場合には、その音高PitchをレジスタmeReにストアし、比較元音が存在しない場合には該当音無しを表す値をレジスタmeReにストアする。続いて、ステップSK3では、RAM3の曲データエリアに格納される曲データMidiEvent[0]~[N]の内に、ポインタLuで指定される比較先小節の小節内時間tで発音している比較先音が存在する場合には、その音高PitchをレジスタmeLuにストアし、比較先音が存在しない場合には、該当音無しを表す値をレジスタmeLuにストアする。そして、ステップSK4では、レジスタmeReの内容に基づき比較元音の有無を判断する。レジスタmeReに比較元音無しを表す値がストアされていると、判断結果はNOとなり、ステップSK5に進み、レジスタmeLuの内容に基づき比較先音の有無を判断する。レジスタmeLuに比較先音の音高Pitchが格納されていれば、判断結果はYESとなり、本処理を終える。これに対し、レジスタmeLuに比較先音無しを表す値がストアされていると、上記ステップSK5の判断結果はNOとなり、ステップSK6に進み、フラグs1、s2に共に1をセットして本処理を終える。さて一方、レジスタmeReに比較元音の音高Pitchが格納されていると、上記ステップSK4の判断結果がYESになり、ステップSK7に進む。ステップSK7では、レジスタmeLuの内容に基づき比較先音の有無を判断する。レジスタmeLuに比較先音無しを表す値がストアされていると、判断結果はNOとなり、本処理を終えるが、レジスタmeLuに比較先音の音高Pitchが格納されていると、上記ステップSK7の判断結果がYESとなり、ステップSK8に進む。ステップSK8では、レジスタmeReに格納される比較元音の音高Pitchと、レジスタmeLuに格納される比較先音の音高Pitchとが同一であるか否かを判断する。比較元音と比較先音とが同一音高ならば、上記ステップSK8の判断結果がYESになり、ステップSK9に進み、フラグs1、s2に共に1をセットして本処理を終える。これに対し、比較元音と比較先音とが同一音高でない場合には、上記ステップSK8の判断結果がNOとなり、ステップSK10に進む。ステップSK10では、基準音比較元小節の先頭音の音高とレジスタmeReに格納される比較元音の音高Pitchとの音高差と、基準音比較先小節の先頭音の音高とレジスタmeLuに格納される比較先音の音高Pitchとの音高差とが同一か否か、つまり比較元音と比較先音とが転調関係にある相対一致であるかどうかを判断する。相対一致でなければ、判断結果はNOになり、本処理を終える。一方、相対一致ならば、上記ステップSK10の判断結果はYESとなり、ステップSK11に進み、フラグs1に0、フラグs2に1をセットして本処理を終える。このように、一致判定処理では、ポインタReで指定される比較元小節において小節内時間tで発音している比較元音の音高と、ポインタLuで指定される比較先小節において小節内時間tで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグs1、s2を共に1にセットする。また、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間tで発音している比較元音と比較先音とが有り、かつ比較元音と基準音比較元小節の先頭音の音高との音高差と、比較先音と基準音比較先小節の先頭音の音高との音高差とが一致する場合にフラグs1を0、フラグs2に1をセットする。ここで、図8を参照して第2実施形態による一致判定処理の具体的な動作を説明する。例えば、ポインタReで指定される比較元小節が小節内時間t=0~6に発音されるC4音ノートナンバ60、小節内時間t=8~14に発音されるC4音60、小節内時間t=16~22に発音されるG4音67および小節内時間t=24~30に発音されるG4音67の各比較元音から構成され、ポインタLuで指定される比較先小節が小節内時間t=0~6に発音されるC4音ノートナンバ60、小節内時間t=8~14に発音されるC4音60、小節内時間t=20~22に発音されるG4音67および小節内時間t=24~30に発音されるA4音69の各比較先音から構成されているとする。そうして各比較元音と各比較先音との一致を小節内時間t毎に判別すると、図8に図示する通り、小節内時間t=0~31の内、フラグs1が0となる不一致期間は、t=16~19およびt=23~30となる。これら不一致期間以外はフラグs1が1の一致期間になる。したがって、フラグs1が1となる完全一致期間の積算時間は20となり、これを小節分の総時間32t=0~31で除算して得られる一致率62がマトリクス要素Mat1[Re][Lu]にストアされる。また、フラグs2が0となる期間は、t=16~19およびt=24~30となり、これら以外はフラグs2が1となる相対一致期間になる。したがって、フラグs2が1となる相対一致期間の積算時間は21となり、これを小節分の総時間32で除算することによって比較元小節に対する比較先小節の一致率65がマトリクス要素Mat2[Re][Lu]にストアされる。3グループラベリング処理の動作次に、図17を参照して第2実施形態によるグループラベリング処理の動作を説明する。第1実施形態と同様に、メインルーチンのステップSA3図4参照を介して本処理が実行されると、CPU1は図17に図示するステップSL1を介してラベリング処理を実行する。このラベリング処理では、前述した第1実施形態と同様、ポインタReおよびポインタLuで指定されるマトリクス要素Mat1[Re][Lu]の中から閾値以上の一致率が規定数以上連続する範囲小節区間を探し出し、その範囲に対応する小節データMeasure中のラベル番号iLavelに同じ番号を付与すると共に、完全一致を表す値0をラベルオプションiLvOptionとして登録する。次いで、ステップSL2に進み、類似部分ラベリング補正処理を実行する。後述するように、類似部分ラベリング補正処理では、ポインタReで指定される比較元小節とポインタLuで指定される比較先小節とに同じラベル番号iLavelが付与されておらず、しかもマトリクス要素Mat2[Re][Lu]の中から閾値以上の相対一致率が規定数以上連続する範囲、すなわち比較元小節と比較先小節とが転調関係にあると見られる小節区間を探し出し、それに該当する小節区間を類似性のある範囲と表すように、対応する小節データMeasureのラベル番号iLavelおよびラベルオプションiLvOptionを設定する。そして、ステップSL3を介してラベリング検証処理を実行する。このラベリング検証処理では、前述した第1実施形態と同様に、上記ラベリング処理によりラベリングされた小節区間が長過ぎると、ラベリング先頭小節ポインタReと、そこから規定数以上連続した小節ポインタRetmpとで指定されるマトリクス要素Mat1[Re][Retmp]の一致率が閾値以上の場合、そのポインタRetmpで指定される小節の1つ前の小節を区間終端とするようにラベリングされた小節区間を分けるようになっている。4類似部分ラベリング補正処理の動作図18は、類似部分ラベリング補正処理の動作を示すフローチャートである。上述したグループラベリング処理のステップSL2図17参照を介して本処理が実行されると、図18に図示するステップSM1に進み、比較元の先頭小節を指定する値をポインタReにセットする。続いて、ステップSM2では、ポインタReで指定される比較元小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果はNOとなり、ステップSM3に進む。ステップSM3では、比較先の先頭小節を指定する値をポインタLuにセットする。次いで、ステップSM4では、ポインタLuで指定される比較先小節が曲終端を超えたか否かを判断する。曲終端を超えていなければ、判断結果はNOとなり、ステップSM5に進む。ステップSM5では、ポインタReで指定される比較元小節とポインタLuで指定される比較先小節とに同じラベル番号iLavelが付与されていないかどうかを判断する。同じラベル番号iLavelが付与されていれば、判断結果はNOになり、ステップSM12に進み、ポインタLuを歩進させた後、上述のステップSM4に処理を戻す。一方、ポインタReで指定される比較元小節とポインタLuで指定される比較先小節とに同じラベル番号iLavelが付与されていない場合には、上記ステップSM5の判断結果がYESになり、ステップSM6に進む。ステップSM6では、ポインタReおよびポインタLuで指定されるマトリクス要素Mat2[Re][Lu]の相対一致率が閾値以上であるかどうかを判断する。マトリクス要素Mat2[Re][Lu]の相対一致率が閾値未満ならば、判断結果はNOになり、ステップSM12に進み、ポインタLuを歩進させた後、上述のステップSM4に処理を戻す。これに対し、マトリクス要素Mat2[Re][Lu]の相対一致率が閾値以上ならば、上記ステップSM6の判断結果がYESになり、ステップSM7に進む。ステップSM7では、閾値以上の相対一致率を有するマトリクス要素Mat2[Re][Lu]の範囲i小節数、すなわちMat2[Rei][Lui]を検出する。次いで、ステップSM8では、閾値以上の相対一致率が連続した小節数iを保存する。そして、ステップSM9では、上記ステップSM7にて検出した小節数iが規定小節以上であるか否かを判断する。検出した小節数iが規定小節未満ならば、判断結果はNOになり、ステップSM12に進み、ポインタLuを歩進させた後、上述のステップSM4に処理を戻す。一方、検出した小節数iが規定小節以上であると、上記ステップSM9の判断結果がYESになり、ステップSM10に進み、ラベル付け替え処理を実行する。ラベル付け替え処理では、後述するように、イ比較元小節Reおよび比較先小節Luの双方にラベル番号iLavelが付与されている場合には、比較先小節Luのラベル番号iLavelを比較元小節Reのラベル番号iLavelに書き換え、比較先小節LuのラベルオプションiLvOptionに類似相対一致を表す値1を設定する。ロ比較元小節Reだけにラベル番号iLavelが付与されている場合には、そのラベル番号iLavelを比較先小節Luのラベル番号iLavelに設定すると共に、比較先小節LuのラベルオプションiLvOptionに値1を設定する。ハ比較先小節Luだけにラベル番号iLavelが付与されている場合には、そのラベル番号iLavelを比較元小節Reのラベル番号iLavelに設定すると共に、比較元小節ReのラベルオプションiLvOptionに値1を設定する。ニ比較元小節Reおよび比較先小節Luの双方にラベル番号iLavelが付与されていない場合には、新たに採番したラベル番号を、比較元小節Reおよび比較先小節Luのラベル番号iLavelに設定すると共に、比較元小節ReのラベルオプションiLvOptionに値0を、比較先小節LuのラベルオプションiLvOptionに値1を設定する。そして、こうしたラベル付け替えが行われると、ステップSM11に進み、現在のポインタLuに、閾値以上の相対一致率が連続した小節数iを加算してポインタLuを更新させた後、上述のステップSM4に処理を戻す。以後、更新されたポインタLuで指定される比較先小節が曲終端を超える迄、相対一致率が規定小節以上連続して閾値を超える小節数iを探し出し、該当する小節区間についてラベル付け替えする処理を繰り返す。そして、更新されたポインタLuで指定される比較先小節が曲終端を超えると、上記ステップSM4の判断結果がYESになり、ステップSM13に進み、ポインタReを歩進させた後、上述のステップSM2に処理を戻す。以後、歩進されたポインタReで指定される比較元小節が曲終端を超える迄、上述したステップSM3以降の処理を繰り返す。そして、歩進されたポインタReで指定される比較元小節が曲終端を超えると、ステップSM2の判断結果がYESとなり、本処理を終える。このように、類似部分ラベリング補正処理では、ポインタReで指定される比較元小節とポインタLuで指定される比較先小節とに同じラベル番号iLavelが付与されておらず、しかもマトリクス要素Mat2[Re][Lu]の中から閾値以上の相対一致率が規定数以上連続する範囲、すなわち比較元小節と比較先小節とが転調関係にあると見られる小節区間を探し出し、該当する小節区間を類似性のある範囲と表すように対応する小節データMeasureのラベル番号iLavelおよびラベルオプションiLvOptionを設定する。5ラベル付け替え処理図19は、ラベル付け替え処理の動作を示すフローチャートである。上述した類似部分ラベリング補正処理のステップSM10図18参照を介して本処理が実行されると、図19に図示するステップSN1に進み、ポインタReで指定される比較元小節の小節データMeasureにラベル番号iLavelが付与されているか否かを判断する。ラベル番号iLavelが付与されていれば、判断結果はYESになり、ステップSN2に進む。ステップSN2では、ポインタLuで指定される比較先小節の小節データMeasureにラベル番号iLavelが付与されているか否かを判断する。ラベル番号iLavelが付与されていれば、判断結果はYESになり、ステップSN3に進む。ステップSN3では、ポインタLuで指定される比較先小節の小節データMeasureのラベル番号iLavelを、ポインタReで指定される比較元小節の小節データMeasureのラベル番号iLavelに書き換える一方、ポインタLuで指定される比較先小節の小節データMeasureのラベルオプションiLvOptionに、類似相対一致を表す値1を設定して本処理を終える。一方、ポインタLuで指定される比較先小節の小節データMeasureにラベル番号iLavelが付与されていない場合には、上記ステップSN2の判断結果がNOになり、ステップSN4に進む。ステップSN4では、ポインタReで指定される比較元小節の小節データMeasureのラベル番号iLavelを、ポインタLuで指定される比較先小節の小節データMeasureのラベル番号iLavelに設定すると共に、この比較先小節の小節データMeasureのラベルオプションiLvOptionに、類似相対一致を表す値1を設定して本処理を終える。さて一方、ポインタReで指定される比較元小節の小節データMeasureにラベル番号iLavelが付与されていない場合には、上記ステップSN1の判断結果がNOになり、ステップSN5に処理を進める。ステップSN5では、ポインタLuで指定される比較先小節の小節データMeasureにラベル番号iLavelが付与されているか否かを判断する。ラベル番号iLavelが付与されていれば、判断結果はYESになり、ステップSN6に進む。ステップSN6では、ポインタLuで指定される比較元小節の小節データMeasureのラベル番号iLavelを、ポインタReで指定される比較先小節の小節データMeasureのラベル番号iLavelに設定すると共に、この比較先小節の小節データMeasureのラベルオプションiLvOptionに、類似相対一致を表す値1を設定して本処理を終える。これに対し、ポインタLuで指定される比較先小節の小節データMeasureにラベル番号iLavelが付与されていない場合には、上記ステップSN5の判断結果がNOになり、ステップSN7に進む。ステップSN7では、新たに採番したラベル番号を、比較元小節Reおよび比較先小節Luのラベル番号iLaveに設定すると共に、ポインタReで指定される比較先小節の小節データMeasureのラベルオプションiLvOptionには完全一致を表す値0を設定し、ポインタLuで指定される比較元小節の小節データMeasureのラベルオプションiLvOptionには類似相対一致を表す値1を設定して本処理を終える。このように、ラベル付け替え処理では、イ比較元小節Reおよび比較先小節Luの双方にラベル番号iLavelが付与されていれば、比較先小節Luのラベル番号iLavelを比較元小節Reのラベル番号iLavelに書き換え、比較先小節LuのラベルオプションiLvOptionに類似相対一致を表す値1を設定し、ロ比較元小節Reだけにラベル番号iLavelが付与されていれば、そのラベル番号iLavelを比較先小節Luのラベル番号iLavelに設定すると共に、比較先小節LuのラベルオプションiLvOptionに値1を設定し、ハ比較先小節Luだけにラベル番号iLavelが付与されていれば、そのラベル番号iLavelを比較元小節Reのラベル番号iLavelに設定すると共に、比較元小節ReのラベルオプションiLvOptionに値1を設定し、ニ比較元小節Reおよび比較先小節Luの双方にラベル番号iLavelが付与されていなければ、新たに採番したラベル番号を、比較元小節Reおよび比較先小節Luのラベル番号iLavelに設定すると共に、比較元小節ReのラベルオプションiLvOptionに値0を、比較先小節LuのラベルオプションiLvOptionに値1を設定する。以上のように、第2実施形態では、比較元小節Reと比較先小節Luとに同じラベル番号iLavelが付与されておらず、しかもマトリクス要素Mat2[Re][Lu]の中から閾値以上の相対一致率が規定数以上連続する範囲、すなわち比較元小節と比較先小節とが転調関係にあると見られる小節区間を探し出し、その区間を類似性のある範囲と表すように対応する小節データMeasureのラベル番号iLavelおよびラベルオプションiLvOptionを設定するので、楽曲内の転調区間の検出が可能になる。また、楽曲中から転調区間を検出することにより、例えば曲データに基づき演奏練習する場合に、楽曲内の転調区間を繰り返し練習させたり、転調区間をスキップさせるなどの機能を実現させるための有用な判断材料を自動的に生成し得るようになる。[第3実施形態]次に、図20~図22を参照して第3実施形態について説明する。上述した第2実施形態では、楽曲内でメロディが重複したり転調する区間を検出するようにしたが、第3実施形態では、これに加えて更に楽曲内の類似区間を検出する。以下、こうした第3実施形態による小節間一致率算出処理、一致判定処理およびグループラベリング処理の各動作を説明する。1小節間一致率算出処理の動作図20は、第3実施形態による小節間一致率算出処理の動作を示すフローチャートである。前述した第1実施形態と同様に、マトリクス処理のステップSB5図5参照を介して本処理が実行されると、CPU1は図20に図示するステップSP1に処理を進め、小節内時間tを初期化する。すなわち、ポインタLuで指定される比較先小節の小節データMeasure中の開始時刻lTimeを小節内時間tにセットする。続いて、ステップSP2では、小節内時間tが小節を超えたか否か、つまりポインタLuで指定される比較先小節の小節データMeasure中の小節長lGateを超えたかどうかを判断する。小節内時間tが小節を超えなければ、判断結果はNOとなり、ステップSP3に進む。ステップSP3では、第3実施形態による一致判定処理を実行する。後述するように、一致判定処理では、ポインタReで指定される比較元小節において小節内時間tで発音している比較元音の音高と、ポインタLuで指定される比較先小節において小節内時間tで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグs1、s2、s3をそれぞれ1をセットする。また、一致判定処理では、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間tで発音している比較元音と比較先音とが有り、かつ比較元音と基準音比較元小節の先頭音の音高との音高差と、比較先音と基準音比較先小節の先頭音の音高との音高差とが一致する場合にフラグs1を0、フラグs2を1、フラグs3を1にセットする。さらに、一致判定処理では、比較元音と比較先音とが相対方向的に一致する場合、すなわち基準音比較元小節の先頭音の音高と比較元音との音高差の方向が、基準音比較先小節の先頭音の音高と比較先音との音高差との方向に一致する場合にフラグs1を0、フラグs2を0、フラグs3を1にセットする。次いで、ステップSP4では、上記ステップSP3の一致判定処理により設定されるフラグs1の値をレジスタsum1に、フラグs2の値をレジスタsum2に、フラグs3の値をレジスタsum3にそれぞれ加算する。そして、ステップSP5では、小節内時間tを歩進させた後、上述のステップSP2に処理を戻す。以後、歩進される小節内時間tが、ポインタLuで指定される比較先小節を超える迄、上述したステップSP2~SP5を繰り返す。これにより、レジスタsum1にはフラグs1が1となる完全一致期間を累算した積算時間が格納され、レジスタsum2にはフラグs2が1となる相対一致期間を累算した積算時間が格納され、さらにレジスタsum3にはフラグs3が1となる相対方向的一致期間を累算した積算時間が格納される。そして、歩進される小節内時間tが、ポインタLuで指定される比較先小節を超えると、上記ステップSP2の判断結果がYESとなり、ステップSP6に進む。ステップSP6では、レジスタsum1に格納される積算時間を比較先小節分の時間tで除算して得られる一致率sum1/tを、マトリクス要素Mat1[Re][Lu]にストアする。また、ステップSP6では、レジスタsum2に格納される積算時間を比較先小節分の時間tで除算して得られる一致率sum2/tを、マトリクス要素Mat2[Re][Lu]にストアして本処理を終える。さらに、ステップSP6では、レジスタsum3に格納される積算時間を比較先小節分の時間tで除算して得られる一致率sum3/tを、マトリクス要素Mat3[Re][Lu]にストアして本処理を終える。なお、ここで言うマトリクス要素Mat1[Re][Lu]、Mat2[Re][Lu]およびMat3[Re][Lu]とは、それぞれポインタReとポインタLuとで配列要素を指定する2次元レジスタである。このように、小節間一致率算出処理では、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の比較先音との完全一致期間を累算して得た積算時間を、比較先小節分の時間tで除算して一致率sum1/tを算出し、算出した一致率をポインタReとポインタLuとで指定されるマトリクス要素Mat1[Re][Lu]にストアする。また、小節間一致率算出処理では、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の比較先音との相対一致期間を累算して得た積算時間を、比較先小節分の時間tで除算して一致率sum2/tを算出し、算出した一致率をポインタReとポインタLuとで指定されるマトリクス要素Mat2[Re][Lu]にストアする。さらに、小節間一致率算出処理では、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の比較先音との相対方向的一致期間を累算して得た積算時間を、比較先小節分の時間tで除算して一致率sum3/tを算出し、算出した一致率をポインタReとポインタLuとで指定されるマトリクス要素Mat3[Re][Lu]にストアする。2一致判定処理の動作図21は、第3実施形態による一致判定処理の動作を示すフローチャートである。上述した小節間一致率算出処理のステップSP3図20参照を介して本処理が実行されると、CPU1は図21に図示するステップSQ1に進み、フラグs1、s2、s3をそれぞれゼロリセットする。なお、フラグs1は、比較元小節において小節内時間tで発音している比較元音の音高と、比較先小節において小節内時間tで発音している比較先音の音高とが一致している場合や、小節内時間tで発音する比較元音および比較先音が共に存在しない場合に1となり、一方、小節内時間tで発音している比較元音の音高と比較先音の音高とが一致しない場合や、小節内時間tで発音する比較元音あるいは比較先音のいずれかが存在しない場合に0となるフラグである。また、フラグs2は、相対一致する場合に1、それ以外は0となるフラグである。相対一致とは、小節内時間tで発音している比較元音と比較先音とが有り、かつ比較元音と基準音例えば小節先頭の音の音高との音高差と、比較先音と基準音との音高差とが一致する場合、つまり比較元音と比較先音とが転調関係にあることを表す。さらに、フラグs3は、相対方向的に一致する場合に1、それ以外は0となるフラグである。相対方向的に一致とは、小節内時間tで発音している比較元音と比較先音とが有り、かつ基準音比較元小節の先頭音の音高と比較元音との音高差の方向が、基準音比較先小節の先頭音の音高と比較先音との音高差の方向に一致する場合を指す。次いで、ステップSQ2では、RAM3の曲データエリアに格納される曲データMidiEvent[0]~[N]の内に、ポインタReで指定される比較元小節の小節内時間tで発音している比較元音曲データMidiEventが存在する場合には、その音高PitchをレジスタmeReにストアし、比較元音が存在しない場合には該当音無しを表す値をレジスタmeReにストアする。続いて、ステップSQ3では、RAM3の曲データエリアに格納される曲データMidiEvent[0]~[N]の内に、ポインタLuで指定される比較先小節の小節内時間tで発音している比較先音が存在する場合には、その音高PitchをレジスタmeLuにストアし、比較先音が存在しない場合には、該当音無しを表す値をレジスタmeLuにストアする。そして、ステップSQ4では、レジスタmeReの内容に基づき比較元音の有無を判断する。レジスタmeReに比較元音無しを表す値がストアされていると、判断結果はNOとなり、ステップSQ5に進み、レジスタmeLuの内容に基づき比較先音の有無を判断する。レジスタmeLuに比較先音の音高Pitchが格納されていれば、判断結果はYESとなり、本処理を終える。これに対し、レジスタmeLuに比較先音無しを表す値がストアされていると、上記ステップSQ5の判断結果はNOとなり、ステップSQ6に進み、フラグs1、s2、s3をそれぞれ1にセットして本処理を終える。さて一方、レジスタmeReに比較元音の音高Pitchが格納されていると、上記ステップSQ4の判断結果がYESになり、ステップSQ7に進む。ステップSQ7では、レジスタmeLuの内容に基づき比較先音の有無を判断する。レジスタmeLuに比較先音無しを表す値がストアされていると、判断結果はNOとなり、本処理を終えるが、レジスタmeLuに比較先音の音高Pitchが格納されていると、上記ステップSQ7の判断結果がYESとなり、ステップSQ8に進む。ステップSQ8では、レジスタmeReに格納される比較元音の音高Pitchと、レジスタmeLuに格納される比較先音の音高Pitchとが同一であるか否かを判断する。比較元音と比較先音とが同一音高ならば、上記ステップSQ8の判断結果がYESになり、ステップSQ9に進み、フラグs1、s2、s3にそれぞれ1をセットして本処理を終える。これに対し、比較元音と比較先音とが同一音高でない場合には、上記ステップSQ8の判断結果がNOとなり、ステップSQ10に進む。ステップSQ10では、基準音比較元小節の先頭音の音高とレジスタmeReに格納される比較元音の音高Pitchとの音高差と、基準音比較先小節の先頭音の音高とレジスタmeLuに格納される比較先音の音高Pitchとの音高差とが同一か否か、つまり比較元音と比較先音とが転調関係にある相対一致であるかどうかを判断する。相対一致ならば、判断結果がYESとなり、ステップSK11に進み、フラグs1を0、フラグs2を1、フラグs3を1にセットして本処理を終える。一方、相対一致でなければ、上記ステップSQ10の判断結果はNOになり、ステップSQ12に進む。ステップSQ12では、基準音比較元小節の先頭音の音高とレジスタmeReに格納される比較元音の音高Pitchとの音高差の方向が、基準音比較先小節の先頭音の音高とレジスタmeLuに格納される比較先音の音高Pitchとの音高差との方向に一致するか否か、つまり相対方向的に一致するかどうかを判断する。相対方向的に一致していなければ、判断結果はNOとなり、本処理を終えるが、相対方向的に一致していると、判断結果がYESになり、ステップSQ13に進み、フラグs1を0、フラグs2を0、フラグs3を1にセットして本処理を終える。このように、一致判定処理では、ポインタReで指定される比較元小節において小節内時間tで発音している比較元音の音高と、ポインタLuで指定される比較先小節において小節内時間tで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグs1、s2、s3をそれぞれ1をセットする。また、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間tで発音している比較元音と比較先音とが有り、かつ比較元音と基準音比較元小節の先頭音の音高との音高差と、比較先音と基準音比較先小節の先頭音の音高との音高差とが一致する場合にフラグs1を0、フラグs2を1、フラグs3を1にセットする。さらに、比較元音と比較先音とが相対方向的に一致する場合、すなわち基準音比較元小節の先頭音の音高と比較元音との音高差の方向が、基準音比較先小節の先頭音の音高と比較先音との音高差との方向に一致する場合にフラグs1を0、フラグs2を0、フラグs3を1にセットする。ここで、図8を参照して第3実施形態による一致判定処理の具体的な動作を説明する。例えば、ポインタReで指定される比較元小節が小節内時間t=0~6に発音されるC4音ノートナンバ60、小節内時間t=8~14に発音されるC4音60、小節内時間t=16~22に発音されるG4音67および小節内時間t=24~30に発音されるG4音67の各比較元音から構成され、ポインタLuで指定される比較先小節が小節内時間t=0~6に発音されるC4音ノートナンバ60、小節内時間t=8~14に発音されるC4音60、小節内時間t=20~22に発音されるG4音67および小節内時間t=24~30に発音されるA4音69の各比較先音から構成されているとする。そうして各比較元音と各比較先音との一致を小節内時間t毎に判別すると、図8に図示する通り、小節内時間t=0~31の内、フラグs1が0となる不一致期間は、t=16~19およびt=23~30となる。これら不一致期間以外はフラグs1が1の一致期間になる。したがって、フラグs1が1となる完全一致期間の積算時間は20となり、これを小節分の総時間32t=0~31で除算して得られる一致率62がマトリクス要素Mat1[Re][Lu]にストアされる。また、フラグs2が0となる期間は、t=16~19およびt=24~30となり、これら以外はフラグs2が1となる相対一致期間になる。したがって、フラグs2が1となる相対一致期間の積算時間は21となり、これを小節分の総時間32で除算することによって比較元小節に対する比較先小節の一致率65がマトリクス要素Mat2[Re][Lu]にストアされる。さらに、フラグs3が0となる期間は、t=16~19およびt=24~30となり、これら以外はフラグs3が1となる相対方向的一致期間になる。したがって、フラグs2が1となる相対方向的一致期間の積算時間は21となり、これを小節分の総時間32で除算することによって比較元小節に対する比較先小節の一致率65がマトリクス要素Mat3[Re][Lu]にストアされる。3グループラベリング処理の動作次に、図22を参照して第3実施形態によるグループラベリング処理の動作を説明する。第1実施形態と同様に、メインルーチンのステップSA3図4参照を介して本処理が実行されると、CPU1は図22に図示するステップSR1を介してラベリング処理を実行する。このラベリング処理では、前述した第1実施形態と同様、ポインタReおよびポインタLuで指定されるマトリクス要素Mat1[Re][Lu]の中から閾値以上の一致率が規定数以上連続する範囲小節区間を探し出し、その範囲に対応する小節データMeasure中のラベル番号iLavelに同じ番号を付与すると共に、完全一致を表す値0をラベルオプションiLvOptionとして登録する。次いで、ステップSR2に進み、類似部分ラベリング補正1処理を実行する。類似部分ラベリング補正1処理は、前述した第2実施形態による類似部分ラベリング補正処理図18参照と同一である。すなわち、ポインタReで指定される比較元小節とポインタLuで指定される比較先小節とに同じラベル番号iLavelが付与されておらず、しかもマトリクス要素Mat2[Re][Lu]の中から閾値以上の相対一致率が規定数以上連続する範囲、つまり比較元小節と比較先小節とが転調関係にあると見られる小節区間を探し出し、それに該当する小節区間を類似性のある範囲と表すように、対応する小節データMeasureのラベル番号iLavelおよびラベルオプションiLvOptionを設定する。続いて、ステップSR3を介して類似部分ラベリング補正2処理を実行する。類似部分ラベリング補正2処理は、上記ステップSR2の類似部分ラベリング補正1処理とほぼ同一であるであるので、その詳細な動作フローの説明については省略する。類似部分ラベリング補正2処理では、ポインタReで指定される比較元小節とポインタLuで指定される比較先小節とに同じラベル番号iLavelが付与されておらず、しかもマトリクス要素Mat3[Re][Lu]の中から閾値以上の相対方向的な一致率が規定数以上連続する範囲小節区間を探し出し、それに該当する小節区間を音高差が類似する範囲と表すように、対応する小節データMeasureのラベル番号iLavelおよびラベルオプションiLvOptionを設定する。そして、ステップSR4を介してラベリング検証処理を実行する。このラベリング検証処理では、前述した第1実施形態と同様に、上記ラベリング処理によりラベリングされた小節区間が長過ぎると、ラベリング先頭小節ポインタReと、そこから規定数以上連続した小節ポインタRetmpとで指定されるマトリクス要素Mat1[Re][Retmp]の一致率が閾値以上の場合、そのポインタRetmpで指定される小節の1つ前の小節を区間終端とするようにラベリングされた小節区間を分けるようになっている。以上のように、第3実施形態では、比較元小節Reと比較先小節Luとに同じラベル番号iLavelが付与されておらず、しかもマトリクス要素Mat3[Re][Lu]の中から閾値以上の相対方向的な一致率が規定数以上連続する範囲小節区間を探し出し、それに該当する小節区間を音高差が類似する範囲と表すように、対応する小節データMeasureのラベル番号iLavelおよびラベルオプションiLvOptionを設定するので、楽曲内の類似区間の検出が可能になる。[第4実施形態]次に、図23~図27を参照して第4実施形態について説明する。上述した第3実施形態では、楽曲内でメロディが重複したり転調する区間の他、類似する区間を検出するようにしたが、第4実施形態ではこれに加えて更に楽曲内でリズムが一致する区間を検出する。以下、こうした第4実施形態による小節間一致率算出処理、一致判定処理およびグループラベリング処理の各動作を説明する。1小節間一致率算出処理の動作図23は、第4実施形態による小節間一致率算出処理の動作を示すフローチャートである。前述した第1実施形態と同様に、マトリクス処理のステップSB5図5参照を介して本処理が実行されると、CPU1は図23に図示するステップSS1に処理を進め、小節内時間tを初期化する。すなわち、ポインタLuで指定される比較先小節の小節データMeasure中の開始時刻lTimeを小節内時間tにセットする。続いて、ステップSS2では、小節内時間tが小節を超えたか否か、つまりポインタLuで指定される比較先小節の小節データMeasure中の小節長lGateを超えたかどうかを判断する。小節内時間tが小節を超えなければ、判断結果はNOとなり、ステップSS3に進む。ステップSS3では、第4実施形態による一致判定処理を実行する。後述するように、一致判定処理では、ポインタReで指定される比較元小節において小節内時間tで発音している比較元音の音高と、ポインタLuで指定される比較先小節において小節内時間tで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合にフラグs1、s2、s3をそれぞれ1をセットする。また、一致判定処理では、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間tで発音している比較元音と比較先音とが有り、かつ比較元音と基準音比較元小節の先頭音の音高との音高差と、比較先音と基準音比較先小節の先頭音の音高との音高差とが一致する場合にフラグs1を0、フラグs2を1、フラグs3を1にセットする。さらに、一致判定処理では、比較元音と比較先音とが相対方向的に一致する場合、すなわち基準音比較元小節の先頭音の音高と比較元音との音高差の方向が、基準音比較先小節の先頭音の音高と比較先音との音高差との方向に一致する場合にフラグs1を0、フラグs2を0、フラグs3を1にセットする。加えて、一致判定処理では、比較元音と比較先音とがリズム一致する場合、すなわち小節内時間tで発音している比較元音と比較先音とが有り、かつ両音間の発音開始時間および消音時間の差が許容範囲内である場合や、小節内時間tで発音する比較元音および比較先音が共に存在せず、かつ現在一致判定の対象とされている比較元音および比較先音のそれぞれについて前音の消音時間と次音の発音開始時間とが許容範囲内にある場合にフラグs4を1にセットする。次いで、ステップSS4では、上記ステップSS3の一致判定処理により設定されるフラグs1の値をレジスタsum1に、フラグs2の値をレジスタsum2に、フラグs3の値をレジスタsum3に、フラグs4の値をレジスタsum4にそれぞれ加算する。そして、ステップSS5では、小節内時間tを歩進させた後、上述のステップSS2に処理を戻す。以後、歩進される小節内時間tが、ポインタLuで指定される比較先小節を超える迄、上述したステップSS2~SS5を繰り返す。これにより、レジスタsum1にはフラグs1が1となる完全一致期間を累算した積算時間が格納され、レジスタsum2にはフラグs2が1となる相対一致期間を累算した積算時間が格納され、レジスタsum3にはフラグs3が1となる相対方向的一致期間を累算した積算時間が格納され、さらにレジスタsum4にはフラグs4が1となるリズム一致期間を累算した積算時間が格納される。そして、歩進される小節内時間tが、ポインタLuで指定される比較先小節を超えると、上記ステップSS2の判断結果がYESとなり、ステップSS6に進む。ステップSS6では、レジスタsum1に格納される積算時間を比較先小節分の時間tで除算して得られる一致率sum1/tを、マトリクス要素Mat1[Re][Lu]にストアする。また、ステップSS6では、レジスタsum2に格納される積算時間を比較先小節分の時間tで除算して得られる一致率sum2/tを、マトリクス要素Mat2[Re][Lu]にストアする。さらに、ステップSS6では、レジスタsum3に格納される積算時間を比較先小節分の時間tで除算して得られる一致率sum3/tを、マトリクス要素Mat3[Re][Lu]にストアする。加えて、ステップSS6では、レジスタsum4に格納される積算時間を比較先小節分の時間tで除算して得られる一致率sum4/tを、マトリクス要素Mat4[Re][Lu]にストアして本処理を終える。なお、ここで言うマトリクス要素Mat1[Re][Lu]、Mat2[Re][Lu]、Mat3[Re][Lu]およびMat4[Re][Lu]とは、それぞれポインタReとポインタLuとで配列要素を指定する2次元レジスタである。このように、小節間一致率算出処理では、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の比較先音との完全一致期間を累算して得た積算時間を、比較先小節分の時間tで除算して一致率sum1/tを算出し、算出した一致率をポインタReとポインタLuとで指定されるマトリクス要素Mat1[Re][Lu]にストアする。また、小節間一致率算出処理では、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の比較先音との相対一致期間を累算して得た積算時間を、比較先小節分の時間tで除算して一致率sum2/tを算出し、算出した一致率をポインタReとポインタLuとで指定されるマトリクス要素Mat2[Re][Lu]にストアする。さらに、小節間一致率算出処理では、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の比較先音との相対方向的一致期間を累算して得た積算時間を、比較先小節分の時間tで除算して一致率sum3/tを算出し、算出した一致率をポインタReとポインタLuとで指定されるマトリクス要素Mat3[Re][Lu]にストアする。加えて、小節間一致率算出処理では、ポインタReで指定される比較元小節中の各比較元音と、ポインタLuで指定される比較先小節中の比較先音とのリズム一致期間を累算して得た積算時間を、比較先小節分の時間tで除算して一致率sum4/tを算出し、算出した一致率をポインタReとポインタLuとで指定されるマトリクス要素Mat4[Re][Lu]にストアする。2一致判定処理の動作図24は、第4実施形態による一致判定処理の動作を示すフローチャートである。上述した小節間一致率算出処理のステップSS3図23参照を介して本処理が実行されると、図24に図示するステップST1に進み、フラグs1~s4をそれぞれゼロリセットする。なお、フラグs1は、比較元小節において小節内時間tで発音している比較元音の音高と、比較先小節において小節内時間tで発音している比較先音の音高とが一致している場合や、小節内時間tで発音する比較元音および比較先音が共に存在しない場合に1となり、一方、小節内時間tで発音している比較元音の音高と比較先音の音高とが一致しない場合や、小節内時間tで発音する比較元音あるいは比較先音のいずれかが存在しない場合に0となるフラグである。フラグs2は、相対一致する場合に1、それ以外は0となるフラグである。相対一致とは、小節内時間tで発音している比較元音と比較先音とが有り、かつ比較元音と基準音例えば小節先頭の音の音高との音高差と、比較先音と基準音との音高差とが一致する場合、つまり比較元音と比較先音とが転調関係にあることを表す。フラグs3は、相対方向的に一致する場合に1、それ以外は0となるフラグである。相対方向的に一致とは、小節内時間tで発音している比較元音と比較先音とが有り、かつ基準音比較元小節の先頭音の音高と比較元音との音高差の方向が、基準音比較先小節の先頭音の音高と比較先音との音高差の方向に一致する場合を指す。フラグs4は、リズム一致する場合に1、それ以外は0となるフラグである。リズム一致とは、小節内時間tで発音している比較元音と比較先音とが有り、かつ両音間の発音開始時間および消音時間の差が許容範囲内である場合もしくは小節内時間tで発音する比較元音および比較先音が共に存在せず、かつ現在一致判定の対象とされている比較元音および比較先音のそれぞれについて前音の消音時間と次音の発音開始時間とが許容範囲内にある場合を指す。次いで、ステップST2では、RAM3の曲データエリアに格納される曲データMidiEvent[0]~[N]の内に、ポインタReで指定される比較元小節の小節内時間tで発音している比較元音曲データMidiEventが存在する場合には、その音高PitchをレジスタmeReにストアし、比較元音が存在しない場合には該当音無しを表す値をレジスタmeReにストアする。続いて、ステップST3では、RAM3の曲データエリアに格納される曲データMidiEvent[0]~[N]の内に、ポインタLuで指定される比較先小節の小節内時間tで発音している比較先音が存在する場合には、その音高PitchをレジスタmeLuにストアし、比較先音が存在しない場合には、該当音無しを表す値をレジスタmeLuにストアする。そして、ステップST4では、レジスタmeReの内容に基づき比較元音の有無を判断する。レジスタmeReに比較元音の音高Pitchが格納されていると、判断結果はYESになり、次のステップST5に進む。ステップST5では、レジスタmeLuの内容に基づき比較先音の有無を判断する。レジスタmeLuに比較先音無しを表す値がストアされていると、判断結果がNOとなり、本処理を終える。一方、レジスタmeLuに比較先音の音高Pitchが格納されていると、上記ステップST5の判断結果がYESとなり、ステップST6に進む。ステップST6では、レジスタmeReに格納される比較元音の音高Pitchと、レジスタmeLuに格納される比較先音の音高Pitchとが同じであるか否かを判断する。比較元音と比較先音とが同一音高ならば、判断結果はYESになり、ステップST7に進み、フラグs1、s2、s3にそれぞれ1をセットする。次いで、ステップST8では、レジスタmeReに格納される比較元音とレジスタmeLuに格納される比較先音との発音開始時間差および消音時間差が許容範囲内である否かを破断する。許容範囲内ならば、判断結果はYESになり、ステップST9に進み、フラグs4に1をセットして本処理を終える。これに対し、許容範囲を超える場合には、上記ステップST8の判断結果がNOになり、ステップST10に進み、フラグs4をゼロリセットして本処理を終える。一方、比較元音と比較先音とが同一音高でない場合には、上記ステップST6の判断結果がNOとなり、図25に図示するステップST11に進む。ステップST11では、基準音比較元小節の先頭音の音高とレジスタmeReに格納される比較元音の音高Pitchとの音高差と、基準音比較先小節の先頭音の音高とレジスタmeLuに格納される比較先音の音高Pitchとの音高差とが同一か否か、つまり比較元音と比較先音とが転調関係にある相対一致であるかどうかを判断する。相対一致ならば、判断結果がYESとなり、ステップST12に進み、フラグs1を0、フラグs2を1、フラグs3を1にセットした後、上述のステップST8図24参照に進む。これに対し、相対一致でない場合には、上記ステップST11の判断結果はNOになり、ステップST13に進む。ステップST13では、基準音比較元小節の先頭音の音高とレジスタmeReに格納される比較元音の音高Pitchとの音高差の方向が、基準音比較先小節の先頭音の音高とレジスタmeLuに格納される比較先音の音高Pitchとの音高差との方向に一致するか否か、つまり相対方向的に一致するかどうかを判断する。相対方向的に一致していると、判断結果がYESになり、ステップST14に進み、フラグs1を0、フラグs2を0、フラグs3を1にセットした後、上述のステップST8図24参照に進む。相対方向的に一致していなければ、上記ステップST13の判断結果はNOとなり、上述のステップST8図24参照に進む。さて一方、レジスタmeReに比較元音無しを表す値がストアされていると、上記ステップST4図24参照の判断結果がNOとなり、図26に図示するステップST15に進む。ステップST15では、レジスタmeLuの内容に基づき比較先音の有無を判断する。レジスタmeLuに比較先音の音高Pitchが格納されていれば、判断結果はYESとなり、本処理を終える。これに対し、レジスタmeLuに比較先音無しを表す値がストアされていると、上記ステップST15の判断結果はNOとなり、ステップST16に進む。ステップST16では、フラグs1、s2、s3をそれぞれ1にセットする。次いで、ステップST17では、レジスタmeReに格納される比較元音とレジスタmeLuに格納される比較先音とのそれぞれについて、前音の消音時間と次音の発音開始時間とが許容範囲内であるか否かを判断する。許容範囲内ならば、判断結果がYESになり、ステップST18に進み、フラグs4を1にセットして本処理を終える。一方、許容範囲を超える場合には、上記ステップST17の判断結果はNOになり、ステップST19に進み、フラグs4をゼロリセットして本処理を終える。このように、一致判定処理では、ポインタReで指定される比較元小節において小節内時間tで発音している比較元音の音高と、ポインタLuで指定される比較先小節において小節内時間tで発音している比較先音との有無を判断し、同一音高の比較元音と比較先音とが存在する場合や、比較元音と比較先音とが共に存在しない場合に、フラグs1、s2、s3にそれぞれ1をセットする。また、比較元音と比較先音とが転調関係にある相対一致の場合、すなわち小節内時間tで発音している比較元音と比較先音とが有り、かつ比較元音と基準音比較元小節の先頭音の音高との音高差と、比較先音と基準音比較先小節の先頭音の音高との音高差とが一致する場合に、フラグs1に0、フラグs2に1、フラグs3に1をセットする。さらに比較元音と比較先音とが相対方向的に一致する場合、すなわち基準音比較元小節の先頭音の音高と比較元音との音高差の方向が、基準音比較先小節の先頭音の音高と比較先音との音高差との方向に一致する場合に、フラグs1に0、フラグs2に0、フラグs3に1をセットする。また、比較元音と比較先音とがリズム一致する場合、すなわち小節内時間tで発音している比較元音と比較先音とが有り、かつ両音間の発音開始時間および消音時間の差が許容範囲内である場合や、小節内時間tで発音する比較元音および比較先音が共に存在せず、かつ現在一致判定の対象とされている比較元音および比較先音のそれぞれについて前音の消音時間と次音の発音開始時間とが許容範囲内にある場合に、フラグs4に1をセットする。ここで、図8を参照して第3実施形態による一致判定処理の具体的な動作を説明する。例えば、ポインタReで指定される比較元小節が小節内時間t=0~6に発音されるC4音ノートナンバ60、小節内時間t=8~14に発音されるC4音60、小節内時間t=16~22に発音されるG4音67および小節内時間t=24~30に発音されるG4音67の各比較元音から構成され、ポインタLuで指定される比較先小節が小節内時間t=0~6に発音されるC4音ノートナンバ60、小節内時間t=8~14に発音されるC4音60、小節内時間t=20~22に発音されるG4音67および小節内時間t=24~30に発音されるA4音69の各比較先音から構成されているとする。そして、各比較元音と各比較先音との一致を小節内時間t毎に判別すると、図8に図示する通り、小節内時間t=0~31の内、フラグs1が0となる不一致期間は、t=16~19およびt=23~30となる。これら不一致期間以外はフラグs1が1の一致期間になる。したがって、フラグs1が1となる完全一致期間の積算時間は20となり、これを小節分の総時間32t=0~31で除算して得られる一致率62がマトリクス要素Mat1[Re][Lu]にストアされる。また、フラグs2が0となる期間は、t=16~19およびt=24~30となり、これら以外はフラグs2が1となる相対一致期間になる。したがって、フラグs2が1となる相対一致期間の積算時間は21となり、これを小節分の総時間32で除算することによって比較元小節に対する比較先小節の一致率65がマトリクス要素Mat2[Re][Lu]にストアされる。さらに、フラグs3が0となる期間は、t=16~19およびt=24~30となり、これら以外はフラグs3が1となる相対方向的一致期間になる。したがって、フラグs3が1となる相対方向的一致期間の積算時間は21となり、これを小節分の総時間32で除算することによって比較元小節に対する比較先小節の一致率65がマトリクス要素Mat3[Re][Lu]にストアされる。加えて、フラグs4が0となる期間は、t=16~22となり、これら以外はフラグs4が1となるリズム一致期間になる。したがって、フラグs4が1となるリズム一致期間の積算時間は25となり、これを小節分の総時間32で除算することによって比較元小節に対する比較先小節の一致率78がマトリクス要素Mat4[Re][Lu]にストアされる。3グループラベリング処理の動作次に、図27を参照して第4実施形態によるグループラベリング処理の動作を説明する。第1実施形態と同様に、メインルーチンのステップSA3図4参照を介して本処理が実行されると、CPU1は図27に図示するステップSU1を介してラベリング処理を実行する。このラベリング処理では、前述した第1実施形態と同様、ポインタReおよびポインタLuで指定されるマトリクス要素Mat1[Re][Lu]の中から閾値以上の一致率が規定数以上連続する範囲小節区間を探し出し、その範囲に対応する小節データMeasure中のラベル番号iLavelに同じ番号を付与すると共に、完全一致を表す値0をラベルオプションiLvOptionとして登録する。次いで、ステップSU2に進み、類似部分ラベリング補正1処理を実行する。この類似部分ラベリング補正1処理は、前述した第2実施形態による類似部分ラベリング補正処理図18参照と同一である。すなわち、ポインタReで指定される比較元小節とポインタLuで指定される比較先小節とに同じラベル番号iLavelが付与されておらず、しかもマトリクス要素Mat2[Re][Lu]の中から閾値以上の相対一致率が規定数以上連続する範囲、つまり比較元小節と比較先小節とが転調関係にあると見られる小節区間を探し出し、それに該当する小節区間を類似性のある範囲と表すように、対応する小節データMeasureのラベル番号iLavelおよびラベルオプションiLvOptionを設定する。続いて、ステップSU3を介して類似部分ラベリング補正2処理を実行する。類似部分ラベリング補正2処理は、上記ステップSU2の類似部分ラベリング補正1処理とほぼ同一であるであるので、その詳細な動作フローの説明については省略する。類似部分ラベリング補正2処理では、ポインタReで指定される比較元小節とポインタLuで指定される比較先小節とに同じラベル番号iLavelが付与されておらず、しかもマトリクス要素Mat3[Re][Lu]の中から閾値以上の相対方向的な一致率が規定数以上連続する範囲小節区間を探し出し、それに該当する小節区間を音高差が類似する範囲と表すように、対応する小節データMeasureのラベル番号iLavelおよびラベルオプションiLvOptionを設定する。次に、ステップSU4を介して類似部分ラベリング補正3処理を実行する。類似部分ラベリング補正3処理は、上記ステップSU2の類似部分ラベリング補正1処理とほぼ同一であるであるので、その詳細な動作フローの説明については省略する。類似部分ラベリング補正3処理では、ポインタReで指定される比較元小節とポインタLuで指定される比較先小節とに同じラベル番号iLavelが付与されておらず、しかもマトリクス要素Mat4[Re][Lu]の中から閾値以上のリズム一致率が規定数以上連続する範囲小節区間を探し出し、それに該当する小節区間をリズムが一致する範囲と表すように、対応する小節データMeasureのラベル番号iLavelおよびラベルオプションiLvOptionを設定する。そして、ステップSU5を介してラベリング検証処理を実行する。このラベリング検証処理では、前述した第1実施形態と同様に、上記ラベリング処理によりラベリングされた小節区間が長過ぎると、ラベリング先頭小節ポインタReと、そこから規定数以上連続した小節ポインタRetmpとで指定されるマトリクス要素Mat1[Re][Retmp]の一致率が閾値以上の場合、そのポインタRetmpで指定される小節の1つ前の小節を区間終端とするようにラベリングされた小節区間を分けるようになっている。以上のように、第4実施形態では、比較元小節Reと比較先小節Luとに同じラベル番号iLavelが付与されておらず、しかもマトリクス要素Mat4[Re][Lu]の中から閾値以上のリズム一致率が規定数以上連続する範囲小節区間を探し出し、それに該当する小節区間をリズムが一致する範囲と表すように、対応する小節データMeasureのラベル番号iLavelおよびラベルオプションiLvOptionを設定するので、楽曲内でリズムが一致する区間の検出が可能になる。"