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