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