(57)【要約】【課題】演奏ミスを犯し易い苦手箇所や、ユーザ自身が注意喚起したい箇所の演奏を間違えないように支援する演奏支援装置を実現する。【解決手段】電子楽器２０から演奏データがＭＩＤＩ入力される毎に、ＤＴＭ装置１０は課題曲の各音符を表す演奏情報ｐｌａｙｄａｔと比較して演奏の適否を判定した結果を練習結果データとして練習結果データベースｐａｒｃｔ＿ｒｅｃに履歴記録し、履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援するための分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔを作成したり、ユーザ自身が注意喚起したい箇所で演奏ミスしないように支援するための支援情報ｓｕｐ＿ｄａｔを設定する。そして、実際の演奏支援に供する分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔや支援情報ｓｕｐ＿ｄａｔを選定して演奏支援する。【選択図】  図１
2004318019.tif 000002
【特許請求の範囲】
【請求項１】
演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして履歴記録する練習結果データベース手段と、
前記練習結果データベース手段に履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生手段と、
前記支援情報発生手段が発生した第１の支援情報を演奏進行に応じて再生して演奏支援する支援手段と
を具備することを特徴とする演奏支援装置。
【請求項２】
演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして履歴記録する練習結果データベース手段と、
前記練習結果データベース手段に履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生手段と、
注意喚起したい箇所で演奏ミスしないように支援する第２の支援情報を設定する支援情報設定手段と、
前記１および第２の支援情報のいずれかを選択し、選択した側の支援情報を演奏進行に応じて再生して演奏支援する支援手段と
を具備することを特徴とする演奏支援装置。
【請求項３】
演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして履歴記録する練習結果データベース手段と、
前記練習結果データベース手段に履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生手段と、
注意喚起したい箇所で演奏ミスしないように支援する第２の支援情報を設定する支援情報設定手段と、
前記第１および第２の支援情報のいずれかを選択し、選択した側の支援情報から実際の演奏に供する支援項目を取捨選択してなる支援情報を演奏進行に応じて再生して演奏支援する支援手段と
を具備することを特徴とする演奏支援装置。
【請求項４】
演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして練習結果データベースに履歴記録する記録処理と、
この記録処理にて練習結果データベースに履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生処理と、
前記支援情報発生処理にて生成した第１の支援情報を演奏進行に応じて再生して演奏支援する支援処理と
をコンピュータで実行させることを特徴とする演奏支援プログラム。
【請求項５】
演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして練習結果データベースに履歴記録する記録処理と、
この記録処理にて練習結果データベースに履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生処理と、
注意喚起したい箇所で演奏ミスしないように支援する第２の支援情報を設定する支援情報設定処理と、
前記１および第２の支援情報のいずれかを選択し、選択した側の支援情報を演奏進行に応じて再生して演奏支援する支援処理と
をコンピュータで実行させることを特徴とする演奏支援プログラム。
【請求項６】
演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして練習結果データベースに履歴記録する記録処理と、
この記録処理にて練習結果データベースに履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生処理と、
注意喚起したい箇所で演奏ミスしないように支援する第２の支援情報を設定する支援情報設定処理と、
前記第１および第２の支援情報のいずれかを選択し、選択した側の支援情報から実際の演奏に供する支援項目を取捨選択してなる支援情報を演奏進行に応じて再生して演奏支援する支援処理と
をコンピュータで実行させることを特徴とする演奏支援プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、苦手とする演奏操作を支援する演奏支援装置および演奏支援プログラムに関する。
【０００２】
【従来の技術】
ユーザの演奏操作を支援する装置として、例えば特許文献１には、演奏入力された音高に応じて演奏曲中の演奏箇所を検出し、検出した演奏箇所に対応してディスプレイに表示される楽譜を更新したり、演奏入力された音高と演奏曲中の音符データとを比較した結果に基づいてユーザにテンポずれを指摘するようにした演奏支援装置が開示されている。
【０００３】
【特許文献１】
特許公開２００１−３３７６７５号公報
【０００４】
【発明が解決しようとする課題】
ところで、上述した従来の演奏支援装置では、単に演奏入力された音高と演奏曲中の音符データとを比較した結果に基づいて演奏支援するだけなので、演奏ミスを犯し易い苦手箇所や、ユーザ自身が注意喚起したい箇所の演奏を間違えないように支援することができない、という問題がある。
本発明は、このような事情に鑑みてなされたもので、演奏ミスを犯し易い苦手箇所や、ユーザ自身が注意喚起したい箇所の演奏を間違えないように支援することができる演奏支援装置および演奏支援プログラムを提供することを目的としている。
【０００５】
【課題を解決するための手段】
上記目的を達成するため、請求項１に記載の発明では、演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして履歴記録する練習結果データベース手段と、前記練習結果データベース手段に履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生手段と、前記支援情報発生手段が発生した第１の支援情報を演奏進行に応じて再生して演奏支援する支援手段とを具備することを特徴とする。
【０００６】
請求項２に記載の発明では、演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして履歴記録する練習結果データベース手段と、前記練習結果データベース手段に履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生手段と、注意喚起したい箇所で演奏ミスしないように支援する第２の支援情報を設定する支援情報設定手段と、前記１および第２の支援情報のいずれかを選択し、選択した側の支援情報を演奏進行に応じて再生して演奏支援する支援手段とを具備することを特徴とする。
【０００７】
請求項３に記載の発明では、演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして履歴記録する練習結果データベース手段と、前記練習結果データベース手段に履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生手段と、注意喚起したい箇所で演奏ミスしないように支援する第２の支援情報を設定する支援情報設定手段と、前記第１および第２の支援情報のいずれかを選択し、選択した側の支援情報から実際の演奏に供する支援項目を取捨選択してなる支援情報を演奏進行に応じて再生して演奏支援する支援手段とを具備することを特徴とする。
【０００８】
請求項４に記載の発明では、演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして練習結果データベースに履歴記録する記録処理と、この記録処理にて練習結果データベースに履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生処理と、前記支援情報発生処理にて生成した第１の支援情報を演奏進行に応じて再生して演奏支援する支援処理とをコンピュータで実行させることを特徴とする。
【０００９】
請求項５に記載の発明では、演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして練習結果データベースに履歴記録する記録処理と、この記録処理にて練習結果データベースに履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生処理と、注意喚起したい箇所で演奏ミスしないように支援する第２の支援情報を設定する支援情報設定処理と、前記１および第２の支援情報のいずれかを選択し、選択した側の支援情報を演奏進行に応じて再生して演奏支援する支援処理とをコンピュータで実行させることを特徴とする。
【００１０】
請求項６に記載の発明では、演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして練習結果データベースに履歴記録する記録処理と、この記録処理にて練習結果データベースに履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する支援情報発生処理と、注意喚起したい箇所で演奏ミスしないように支援する第２の支援情報を設定する支援情報設定処理と、前記第１および第２の支援情報のいずれかを選択し、選択した側の支援情報から実際の演奏に供する支援項目を取捨選択してなる支援情報を演奏進行に応じて再生して演奏支援する支援処理とをコンピュータで実行させることを特徴とする。
【００１１】
本発明では、演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして履歴記録し、履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する。そして、この第１の支援情報を演奏進行に応じて再生して演奏支援するので、演奏ミスを犯し易い苦手箇所の演奏を間違えないように支援することが可能になっている。
また、本発明では、演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして履歴記録し、履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する一方、注意喚起したい箇所で演奏ミスしないように支援する第２の支援情報を設定する。そして、前記１および第２の支援情報のいずれかを選択し、選択した側の支援情報を演奏進行に応じて再生して演奏支援するので、演奏ミスを犯し易い苦手箇所や、ユーザ自身が注意喚起したい箇所の演奏を間違えないよう支援することが可能になっている。
【００１２】
【発明の実施の形態】
以下、本発明の実施の一形態による演奏支援装置が搭載されたＤＴＭ（デスクトップミュージック）装置を実施例とし、これについて図面を参照して説明する。
【００１３】
Ａ．実施例の構成
（１）全体構成
図１は、本発明による実施例の構成を示すブロック図である。この図において、１０は構成要素１〜７からなるＤＴＭ装置、２０はＤＴＭ装置１０とＭＩＤＩ接続される電子楽器である。電子楽器２０は鍵盤を備え、この鍵盤を用いたユーザの演奏操作に応じて発生する演奏データをＭＩＤＩ出力する。ＤＴＭ装置１０では、電子楽器２０側から演奏データがＭＩＤＩ入力される毎に、課題曲の各音符を表す演奏情報と比較して演奏の適否を判定すると共に、その判定結果を演奏情報に対応させた練習結果情報として練習結果データベース（後述する）に記録する。また、ＤＴＭ装置１０では、練習結果データベースに記録された練習結果情報を分析して、演奏ミスを犯し易い苦手箇所の演奏を支援する支援項目を作成したり、ユーザ自身が注意喚起したい箇所の演奏をミスしないようする支援項目を作成し、これに基づき演奏支援する。
【００１４】
（２）ＤＴＭ装置１０の構成
次に、図１を参照してＤＴＭ装置１０の構成を説明する。図１において、１は装置各部を制御するＣＰＵである。ＣＰＵ１は、電子楽器２０側から演奏データがＭＩＤＩ入力される毎に演奏判定を行い、その判定結果を練習結果データベースに記録する。また、ＣＰＵ１では、練習結果データベースに記録された練習結果情報を分析して、演奏ミスを犯し易い苦手箇所の演奏を支援する支援項目を作成したり、ユーザ自身が注意喚起したい箇所の演奏をミスしないようする支援項目を作成し、これに基づき演奏支援する。こうした本発明の要旨に係わるＣＰＵ１の処理動作は追って詳述する。
【００１５】
２はプログラムエリアおよびデータエリアを有するＲＯＭである。ＲＯＭ２のプログラムエリアには、後述するメインルーチン、演奏開始処理、標準支援処理、特別支援処理、変更処理および分析処理を実行する各種制御プログラムが記憶される。ＲＯＭ２のデータエリアには、手本となる課題曲の演奏情報が複数曲分記憶されており、これら内から選曲指定される課題曲の演奏情報がＲＡＭ３のデータエリアに格納される。演奏情報のデータ構造については追って述べる。
３はワークエリアおよびデータエリアを備えるＲＡＭである。ＲＡＭ３のワークエリアには、ＣＰＵ１の処理に用いられる各種レジスタ・フラグデータが一時記憶される。ＲＡＭ３のデータエリアには、演奏情報ｐｌａｙｄａｔ、練習結果データベースｐｒａｃｔ＿ｒｅｃ、処理情報ｎｏｗｐｌａｙ、支援情報ｓｕｐ＿ｄａｔおよび分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔが格納される。これら情報のデータ構造については追って述べる。
【００１６】
ＭＩＤＩインタフェース４は、ＣＰＵ１の制御の下に、電子楽器２０側から送出される演奏データを取り込む一方、ＤＴＭ装置１０側で発生したノートオンイベントを電子楽器２０にＭＩＤＩ出力する。マウス５は右ボタンおよび左ボタンを備え、例えば表示画面上に配置されるアイコン上にマウスカーソルをポインティングさせた状態で左ボタンを押下する周知のクリック操作に応じてクリックイベントを発生する。キーボード６はキー入力操作に応じたイベントを発生する。キーボード６では、処理の開始を指示するスタートスイッチおよび処理の停止を指示するストップスイッチが所定のキースイッチに割り当てられている。表示部７はＬＣＤパネル等から構成され、ＣＰＵ１から供給される表示制御信号に応じて、演奏技術の完成度や向上度あるいは苦手箇所を画面表示する。
【００１７】
（３）データ構造
次に、図２〜図６を参照して、ＲＡＭ３のデータエリアに格納される演奏情報ｐｌａｙｄａｔ、練習結果データベースｐｒａｃｔ＿ｒｅｃ、処理情報ｎｏｗｐｌａｙ、支援情報ｓｕｐ＿ｄａｔおよび分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔのデータ構造を説明する。
【００１８】
図２は演奏情報ｐｌａｙｄａｔのデータ構造を示すメモリマップである。ＲＡＭ３のデータエリアに格納される演奏情報ｐｌａｙｄａｔは、課題曲を形成する各音符に対応した演奏情報ｐｌａｙｄａｔ［０］〜［ｎ］から構成される。演奏情報ｐｌａｙｄａｔ［０］〜［ｎ］は、曲進行順にアドレッシングされる。
演奏情報ｐｌａｙｄａｔ［ｉ］（ｉ＝０〜ｎ）は、課題曲中の音符を識別するノート識別番号ｎｏｔｅ＿ｉｄ（ｐｌａｙｄａｔ［ｉ］［０］）、音高を表すノート番号Ｎｏｔｅ＃（ｐｌａｙｄａｔ［ｉ］［１］）、曲頭からの経過時間で表現される発音タイミングＴｉｃｋ（ｐｌａｙｄａｔ［ｉ］［２］）、曲頭からの経過時間で表現される消音タイミングＥｎｄＴｉｃｋ（ｐｌａｙｄａｔ［ｉ］［３］）、処理状態を表すステイタスｓｔａｔｕｓ（ｐｌａｙｄａｔ［ｉ］［４］）および演奏入力される演奏データとの比較結果Ｒｅｓｕｌｔ（ｐｌａｙｄａｔ［ｉ］［５］）から構成される。
【００１９】
演奏情報ｐｌａｙｄａｔ［ｉ］［４］のステイタスｓｔａｔｕｓは、未発音の時に「０」、発音中に「１」、消音済みの時に「２」となる。また、演奏情報ｐｌａｙｄａｔ［ｉ］［５］の比較結果Ｒｅｓｕｌｔは、「−１」〜「３」のいずれかの整数値に設定される。
各値が意味するところは次の通りである。「−１」は正しく弾けていないことを表す。「０」は演奏範囲に無いことを表す。「１」は正しく弾かれたことを表す。「２」は演奏データが課題曲のノートデータの発音タイミングより早く押鍵されたことを表す。「３」は演奏データが課題曲のノートデータの発音タイミングより遅く押鍵されたことを表す。
【００２０】
次に、図３を参照して、ＲＡＭ３のデータエリアに格納される練習結果データベースｐｒａｃｔ＿ｒｅｃのデータ構造を説明する。練習結果データベースｐｒａｃｔ＿ｒｅｃは、演奏練習した課題曲毎の練習結果データｐｒａｃｔ＿ｒｅｃ［０］〜［ｎ］を履歴記憶する。
練習結果データｐｒａｃｔ＿ｒｅｃ［ｉ］は、演奏ミス（押鍵ミス）を累積したミスカウント数ＭｉｓｓＴｏｕｃｈＣｎｔ（ｐｒａｃｔ＿ｒｅｃ［ｉ］［０］）と、課題曲の演奏情報ｐｌａｙｄａｔ［０］〜［ｎ］の各比較結果Ｒｅｓｕｌｔを抽出した練習結果ｒｓｌｔ＿ｆｏｒ＿ｐｌａｙｄａｔ０〜ｒｓｌｔ＿ｆｏｒ＿ｐｌａｙｄａｔｎとから構成される。
【００２１】
練習結果ｒｓｌｔ＿ｆｏｒ＿ｐｌａｙｄａｔは、上述した演奏情報ｐｌａｙｄａｔ［ｉ］［５］の比較結果Ｒｅｓｕｌｔに相当する。つまり、正しく弾けていない場合に「−１」、演奏範囲に無い場合に「０」、正しく弾かれた場合に「１」、演奏データが課題曲のノートデータの発音タイミングより早く押鍵された場合に「２」、演奏データが課題曲のノートデータの発音タイミングより遅く押鍵された場合に「３」となる。
【００２２】
次に、図４を参照して、ＲＡＭ３のデータエリアに格納される処理情報ｎｏｗｐｌａｙのデータ構造を説明する。処理情報ｎｏｗｐｌａｙは、課題曲の再生に応じて行われる演奏支援の内容を表すデータであり、処理情報ｎｏｗｐｌａｙ［０］〜［ｎ］から構成される。
処理情報ｎｏｗｐｌａｙ［ｉ］（ｉ＝０〜ｎ）は、支援されている処理内容を表す処理タイプｐｌａｙｔｙｐｅ（ｎｏｗｐｌａｙ［ｉ］［０］）、曲頭からの経過時間で表現される支援開始時刻Ｔｉｃｋ（ｎｏｗｐｌａｙ［ｉ］［１］）、曲頭からの経過時間で表現される支援終了時刻ＥｎｄＴｉｃｋ（ｎｏｗｐｌａｙ［ｉ］［２］）、支援対象となる演奏情報ｐｌａｙｄａｔを指し示すポインタＯｒｉｇｉｎａｌＩｎｄｅｘ（ｎｏｗｐｌａｙ［ｉ］［３］）および次の処理情報を指し示すポインタＮｅｘｔＰｏｉｎｔｅｒ（ｎｏｗｐｌａｙ［ｉ］［４］）から構成される。
なお、処理タイプｐｌａｙｔｙｐｅ（ｎｏｗｐｌａｙ［ｉ］［０］）は「０」の場合に「ノート出力」を表し、「１」の場合に画面への文字出力を表し、「２」の場合に画面への画像出力を表し、「３」の場合に音声出力を表す。
【００２３】
次に、図５を参照して、ＲＡＭ３のデータエリアに格納される支援情報ｓｕｐ＿ｄａｔのデータ構造を説明する。支援情報ｓｕｐ＿ｄａｔは、後述する標準支援処理にて参照されるデータであり、支援情報ｓｕｐ＿ｄａｔ［０］〜［ｎ］から構成される。支援情報ｓｕｐ＿ｄａｔ［ｉ］（ｉ＝０〜ｎ）は、識別子ｓｕｐ＿ｉｄ（ｓｕｐ＿ｄａｔ［ｉ］［０］）、曲頭からの経過時間で表現される支援開始時刻Ｔｉｃｋ（ｓｕｐ＿ｄａｔ［ｉ］［１］）、曲頭からの経過時間で表現される支援終了時刻ＥｎｄＴｉｃｋ（ｓｕｐ＿ｄａｔ［ｉ］［２］）、支援タイプＳｕｐＴｙｐｅ（ｓｕｐ＿ｄａｔ［ｉ］［３］）、支援データｄａｔａ（ｓｕｐ＿ｄａｔ［ｉ］［４］）、支援の有効／無効を表すフラグｆｌｕｇ（ｓｕｐ＿ｄａｔ［ｉ］［５］）、楽譜上で表現される支援開始位置ＳｕｐＳｔａｒｔ（ｓｕｐ＿ｄａｔ［ｉ］［６］）および楽譜上で表現される支援終了位置ＳｕｐＥｎｄ（ｓｕｐ＿ｄａｔ［ｉ］［７］）から構成される。
【００２４】
支援タイプＳｕｐＴｙｐｅ（ｓｕｐ＿ｄａｔ［ｉ］［３］）は、「１」の場合に画面への文字列出力を表し、「２」の場合に画面への画像出力を表し、「３」の場合に音声出力を表す。支援データｄａｔａ（ｓｕｐ＿ｄａｔ［ｉ］［４］）には、文字列、画像表示用の制御コマンドあるいはファイル名等が用いられる。この支援データｄａｔａにて定義される支援内容が、支援タイプＳｕｐＴｙｐｅに従って文字列出力、画像出力あるいは音声出力される。フラグｆｌｕｇ（ｓｕｐ＿ｄａｔ［ｉ］［５］）は、有効の場合に「１」、無効の場合に「０」となる。
【００２５】
次に、図６を参照して、ＲＡＭ３のデータエリアに格納される分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔのデータ構造を説明する。分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔは、前述した練習結果データベースｐｒａｃｔ＿ｒｅｃ（図３参照）から派生するデータであって、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［０］〜［ｎ］から構成される。分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［０］〜［ｎ］は、後述の特別支援処理にて参照される。
【００２６】
分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉ］（ｉ＝０〜ｎ）は、図５に図示した支援情報ｓｕｐ＿ｄａｔ［ｉ］と同様、識別子ｓｕｐ＿ｉｄ（ａｎａｌｉｚｅｄ＿ｄａｔ［ｉ］［０］）、支援開始時刻Ｔｉｃｋ（ａｎａｌｉｚｅｄ＿ｄａｔ［ｉ］［１］）、支援終了時刻ＥｎｄＴｉｃｋ（ａｎａｌｉｚｅｄ＿ｄａｔ［ｉ］［２］）、支援タイプＳｕｐＴｙｐｅ（ａｎａｌｉｚｅｄ＿ｄａｔ［ｉ］［３］）、支援データｄａｔａ（ａｎａｌｉｚｅｄ＿ｄａｔ［ｉ］［４］）、フラグｆｌｕｇ（ａｎａｌｉｚｅｄ＿ｄａｔ［ｉ］［５］）、支援開始位置ＳｕｐＳｔａｒｔ（ａｎａｌｉｚｅｄ＿ｄａｔ［ｉ］［６］）および支援終了位置ＳｕｐＥｎｄ（ａｎａｌｉｚｅｄ＿ｄａｔ［ｉ］［７］）から構成される。
【００２７】
支援タイプＳｕｐＴｙｐｅ（ｓｕｐ＿ｄａｔ［ｉ］［３］）は、「１」の場合に画面への文字列出力を表し、「２」の場合に画面への画像出力を表し、「３」の場合に音声出力を表す。支援データｄａｔａ（ｓｕｐ＿ｄａｔ［ｉ］［４］）には、文字列、画像表示用の制御コマンドあるいはファイル名等が用いられる。この支援データｄａｔａにて定義される支援内容が、支援タイプＳｕｐＴｙｐｅに従って文字列出力、画像出力あるいは音声出力される。
【００２８】
Ｂ．実施例の動作
次に、図７〜図３７を参照して実施例の動作について説明する。以下では、最初にメインルーチンの動作について説明し、続いてメインルーチンからコールされる演奏開始処理、変更処理、分析処理、標準支援処理および特別支援処理の各動作を順番に説明して行く。
【００２９】
（１）メインルーチンの動作
ＤＴＭ装置１０において、メインルーチンが実行されると、ＣＰＵ１は図７に示すステップＳ１に進み、装置各部を初期化するイニシャライズを行った後、ステップＳ２に進む。ステップＳ２では、モード変更イベントの有無を判断する。モード変更イベントとは、例えば表示部７に画面表示されるメニュー画面（不図示）におけるモードアイコンのクリック操作に応じて発生するものである。
すなわち、図示していないが、メニュー画面には演奏モードアイコン、標準支援モードアイコン、特別支援モードアイコン、変更モードアイコンおよび分析モードアイコンが設けられており、これらアイコンにマウス５のマウスカーソルをポインティングさせてクリック操作することでモード変更イベントが発生する。
【００３０】
モード変更イベントが発生すると、ステップＳ２の判断結果が「ＹＥＳ」になり、次のステップＳ３に進み、発生したモード変更イベントに応じて処理モードを変更するモード変更処理を実行する。そして、ステップＳ３以降では、モード変更処理にて変更された処理モードが「演奏モード」、「標準支援モード」、「特別支援モード」、「変更モード」および「分析モード」のいずれであるかを判断し、該当する処理モードに遷移する。
【００３１】
変更された処理モードが演奏モードであると、ステップＳ４の判断結果が「ＹＥＳ」になり、ステップＳ５を介して演奏開始処理（後述する）を実行した後、その他の処理（ステップＳ１４）を経てステップＳ２に処理を戻す。
変更された処理モードが標準支援モードであると、ステップＳ６の判断結果が「ＹＥＳ」になり、ステップＳ７を介して標準支援処理（後述する）を実行した後、その他の処理（ステップＳ１４）を経てステップＳ２に処理を戻す。
【００３２】
変更された処理モードが特別支援モードであると、ステップＳ８の判断結果が「ＹＥＳ」になり、ステップＳ９を介して特別支援処理（後述する）を実行した後、その他の処理（ステップＳ１４）を経てステップＳ２に処理を戻す。
変更された処理モードが変更モードであると、ステップＳ１０の判断結果が「ＹＥＳ」になり、ステップＳ１１を介して変更処理（後述する）を実行した後、その他の処理（ステップＳ１４）を経てステップＳ２に処理を戻す。
変更された処理モードが分析モードであると、ステップＳ１２の判断結果が「ＹＥＳ」になり、ステップＳ１３を介して分析処理（後述する）を実行した後、その他の処理（ステップＳ１４）を経てステップＳ２に処理を戻す。
なお、モード変更イベントが発生しなければ、ステップＳ２、Ｓ４、Ｓ６、Ｓ８、Ｓ１０およびＳ１２の各判断結果がいずれも「ＮＯ」となり、その他の処理（ステップＳ１４）を経てステップＳ２に処理を戻す。
【００３３】
（２）演奏開始処理の動作
次に、図８〜図９を参照して演奏開始処理の動作を説明する。上述したメインルーチンのステップＳ５（図７参照）を介して演奏開始処理が実行されると、ＣＰＵ１は図８に示すステップＳＡ１に進み、スタートスイッチイベントの有無を判断する。ここで、ユーザが演奏開始処理をスタートさせるべくスタートスイッチをオン操作したとする。
そうすると、スタートスイッチイベントが発生して、ステップＳＡ１の判断結果が「ＹＥＳ」になり、ステップＳＡ２に進み、停止フラグをゼロリセットして処理スタートを表す。次いで、ステップＳＡ３に進み、現時刻をレジスタＳｔａｒｔＴｉｃｋにストアする。続いて、ステップＳＡ４では、ストップイベントの有無を判断する。
【００３４】
ストップイベントが無ければ、判断結果は「ＮＯ」になり、ステップＳＡ６に進み、停止フラグが「０」、つまりスタート状態に設定されているかどうかを判断する。スタート状態にあると、停止フラグは「０」なので、判断結果は「ＹＥＳ」になり、ステップＳＡ７に進む。ステップＳＡ７では現時刻からレジスタＳｔａｒｔＴｉｃｋに格納される時刻を差し引いた時刻を、演奏練習を開始し始めた時刻としてレジスタＮｏｗＴｉｃｋにストアする。次いで、ステップＳＡ８では、ＭＩＤＩイベント発生の有無を判断する。すなわち、電子楽器２０側から演奏データがＭＩＤＩ入力されたかどうかを判断する。ＭＩＤＩ入力が無いと、判断結果は「ＮＯ」になり、上述のステップＳＡ４に処理を戻す。
【００３５】
一方、電子楽器２０側から演奏データがＭＩＤＩ入力されると、判断結果が「ＹＥＳ」になり、ステップＳＡ９に進み、演奏判定保存処理を実行する。演奏判定保存処理では、後述するように、電子楽器２０側から演奏データがＭＩＤＩ入力される毎に、課題曲の各音符を表す演奏情報ｐｌａｙｄａｔと比較して演奏の適否を判定すると共に、その判定結果を演奏情報ｐｌａｙｄａｔに対応させた練習結果情報として練習結果データベースｐｒａｃｔ＿ｒｅｃ（図３参照）に記録する。
演奏判定保存処理が完了すると、上述したステップＳＡ４に処理を戻す。以後、ストップスイッチのオン操作に応じて、ストップイベントが発生する迄、ステップＳＡ４〜ＳＡ９を繰り返し、演奏練習の進行に従ってレジスタＮｏｗＴｉｃｋの時刻を更新させつつ、ＭＩＤＩ入力毎に演奏判定保存処理を実行して行く。
【００３６】
そして、課題曲を弾き終えて演奏練習を終了させるべく、ユーザがストップスイッチをオン操作したとする。そうすると、ストップイベントの発生に応じて、前述したステップＳＡ４の判断結果が「ＹＥＳ」になり、ステップＳＡ５に進み、停止フラグを「１」にセットする。こうして、ストップ状態になると、ステップＳＡ６の判断結果が「ＮＯ」になり、図９に示すステップＳＡ１０に処理を進める。
【００３７】
演奏練習の終了により、ステップＳＡ１０に進むと、ＣＰＵ１はＲＡＭ３のデータエリアに格納される練習結果データベースｐｒａｃｔ＿ｒｅｃの空きエリアを検索し、その空きエリアを示すポインタｉｐＤＢを取得する。次いで、ステップＳＡ１１では、レジスタｉＭｉｓｓＴｏｕｃｈＣｎｔに格納されるミスカウント数を、練習結果データｐｒａｃｔ＿ｒｅｃ［ｉｐＤＢ］［０］としてデータベース登録する。なお、レジスタｉＭｉｓｓＴｏｕｃｈＣｎｔに格納されるミスカウント数は、後述の演奏判定保存処理にて抽出されるようになっている。
そして、ステップＳＡ１２に進み、ポインタｉをゼロリセットし、続くステップＳＡ１３では、ポインタｉに対応する演奏情報ｐｌａｙｄａｔ［ｉ］の有無を判断する。演奏情報ｐｌａｙｄａｔ［ｉ］が無ければ、判断結果は「ＮＯ」となり、本処理を完了させる。
【００３８】
これに対し、演奏情報ｐｌａｙｄａｔ［ｉ］が存在する場合には、上記ステップＳＡ１４の判断結果が「ＹＥＳ」になり、ステップＳＡ１４に進む。ステップＳＡ１４では、ポインタｉに対応した演奏情報ｐｌａｙｄａｔ［ｉ］［５］に格納される比較結果Ｒｅｓｕｌｔを、練習結果データｐｒａｃｔ＿ｒｅｃ［ｉｐＤＢ］［ｉ＋１］にストアする。この後、ステップＳＡ１５に進み、ポインタｉをインクリメントして歩進させた後、ステップＳＡ１３に処理を戻す。
以後、歩進されたポインタｉに対応する演奏情報ｐｌａｙｄａｔ［ｉ］の有無を判断し、データが有れば、演奏情報ｐｌａｙｄａｔ［ｉ］［５］に格納される比較結果Ｒｅｓｕｌｔを練習結果データｐｒａｃｔ＿ｒｅｃ［ｉｐＤＢ］［ｉ＋１］に順次ストアして行く。
【００３９】
（３）演奏判定保存処理の動作
次に、図１０〜図１１を参照して演奏判定保存処理の動作を説明する。上述した演奏開始処理のステップＳＡ９（図８参照）を介して本処理が実行されると、ＣＰＵ１は図１０のステップＳＢ１に進み、ＭＩＤＩ入力されたイベントがノートオンイベントであるか否かを判断する。ノートオンイベント以外のイベントの場合には、判断結果が「ＮＯ」になり、本処理を完了させる。
【００４０】
ノートオンイベントであると、判断結果は「ＹＥＳ」になり、次のステップＳＢ２に進む。ステップＳＢ２では、ノートオンイベントに含まれるノート番号をレジスタｔｍｐＰｉｔｃｈにストアする。続いて、ステップＳＢ３では現時刻をレジスタＮｏｗＴｉｃｋにストアする。そして、ステップＳＢ４では、現在、ＭＩＤＩ入力されている演奏データ（ノートオンイベント）に対応した演奏情報ｐｌａｙｄａｔを指し示すポインタｉＰＤを取得する。
【００４１】
次いで、ステップＳＢ５では、取得したポインタｉＰＤが曲終端に達しているか否かを判断する。曲終端に達した場合には、判断結果が「ＹＥＳ」になり、次のステップＳＢ６に進み、停止フラグをゼロリセットして本処理を終える。
これに対し、取得したポインタｉＰＤが曲終端に達していなければ、上記ステップＳＢ５の判断結果は「ＮＯ」となり、ステップＳＢ７に進む。ステップＳＢ７では、現時点の演奏情報を指し示すポインタｉＰＤから所定の検索範囲ｉＬｏｏｋＵｐを減算した結果をレジスタｔｍｐＰＤにストアする。以後、レジスタｔｍｐＰＤをサーチポインタｔｍｐＰＤと記す。そして、ステップＳＢ８に進むと、サーチポインタｔｍｐＰＤがポインタｉＰＤと検索範囲ｉＬｏｏｋＵｐとの和を超えたか否か、つまり検索範囲を超えたかどうかを判断する。
【００４２】
サーチポインタｔｍｐＰＤが検索範囲を超えた場合、すなわちＭＩＤＩ入力された演奏データ（ノートオンイベント）と一致する演奏情報ｐｌａｙｄａｔが検索範囲（ｉＰＤ±ｉＬｏｏｋＵｐ）に存在しない状況であると、上記ステップＳＢ８の判断結果は「ＹＥＳ」となり、ステップＳＢ９に進み、押鍵ミスの回数をカウントするレジスタｉＭｉｓｓＴｏｕｃｈＣｎｔを歩進させてから本処理を完了させる。
【００４３】
一方、サーチポインタｔｍｐＰＤが検索範囲を超えていない場合には、上記ステップＳＢ８の判断結果が「ＮＯ」になり、図１１のステップＳＢ１０に進む。ステップＳＢ１０では、サーチポインタｔｍｐＰＤにて指定される演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］［４］（ステイタスｓｔａｔｕｓ）が「０」、つまり未発音であるかどうかを判断する。未発音でなければ、判断結果は「ＮＯ」となり、ステップＳＢ１１に進み、サーチポインタｔｍｐＰＤをインクリメントして歩進させた後、図１０のステップＳＢ８に処理を戻す。
【００４４】
これに対し、サーチポインタｔｍｐＰＤにて指定される演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］が未発音であると、上記ステップＳＢ１０の判断結果が「ＹＥＳ」になり、ステップＳＢ１２に進む。ステップＳＢ１２では、サーチポインタｔｍｐＰＤにて指定される演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］［１］のノート番号Ｎｏｔｅ＃と、レジスタｔｍｐＰｉｔｃｈに格納された演奏データのノート番号とが一致するか否かを判断する。一致しなければ、判断結果は「ＮＯ」となり、ステップＳＢ１１にてサーチポインタｔｍｐＰＤを歩進させた後、図１０のステップＳＢ８に処理を戻す。
【００４５】
一方、演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］のノート番号Ｎｏｔｅ＃と演奏データのノート番号とが一致すると、判断結果が「ＹＥＳ」になり、ステップＳＢ１３に進む。ステップＳＢ１３では、レジスタＮｏｗＴｉｃｋに格納される時刻から演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］［２］の発音タイミングＴｉｃｋを減算して得た押鍵タイミングをレジスタＩＴｉｃｋＤｉｓｔにストアする。
【００４６】
次いで、ステップＳＢ１４では、レジスタＩＴｉｃｋＤｉｓｔに格納される押鍵タイミングが所定の許容範囲ＩＯＫＯｆｆｓｅｔ以上であるかどうかを判断する。許容範囲ＩＯＫＯｆｆｓｅｔに収まる適正な押鍵タイミングであると、判断結果は「ＮＯ」になり、ステップＳＢ１５に進み、演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］［５］（比較結果Ｒｅｓｕｌｔ）に、正しく弾けた旨を表す値「１」をストアした後、本処理を完了させる。
これに対し、許容範囲ＩＯＫＯｆｆｓｅｔを超えた押鍵タイミングであると、上記ステップＳＢ１４の判断結果は「ＹＥＳ」になり、ステップＳＢ１６に進み、許容範囲ＩＴＭＯｆｆｓｅｔ以下であるかどうかを判断する。許容範囲ＩＴＭＯｆｆｓｅｔを超えると、判断結果は「ＮＯ」になり、ステップＳＢ１７に進み、演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］［５］（比較結果Ｒｅｓｕｌｔ）に、演奏範囲に無いことを表す値「０」をストアした後、本処理を完了させる。
【００４７】
一方、許容範囲ＩＴＭＯｆｆｓｅｔに収まると、上記ステップＳＢ１６の判断結果は「ＹＥＳ」になり、ステップＳＢ１８に進む。ステップＳＢ１８では、レジスタＩＴｉｃｋＤｉｓｔに格納される押鍵タイミングが「０」より大であるか否か、つまり演奏データが課題曲のノートデータの発音タイミングより遅く押鍵されたかどうかを判断する。そして、遅く押鍵された場合には、判断結果が「ＹＥＳ」となり、ステップＳＢ１９に進み、演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］［５］（比較結果Ｒｅｓｕｌｔ）に、課題曲のノートデータの発音タイミングより遅く押鍵された旨を表す値「３」をストアして本処理を完了させる。
これに対し、早く押鍵された場合には、上記ステップＳＢ１８の判断結果が「ＮＯ」になり、ステップＳＢ２０に進み、演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］［５］（比較結果Ｒｅｓｕｌｔ）に、課題曲のノートデータの発音タイミングより早く押鍵された旨を表す値「２」をストアして本処理を完了させる。
【００４８】
以上のように、演奏開始処理および演奏判定保存処理によれば、演奏操作に応じて電子楽器２０側から演奏データがＭＩＤＩ入力される毎に、課題曲の各音符を表す演奏情報ｐｌａｙｄａｔと比較して演奏の適否を判定し、その判定結果を演奏情報ｐｌａｙｄａｔに対応させた練習結果データとして練習結果データベースｐａｒｃｔ＿ｒｅｃに履歴記録するようになっている。
【００４９】
（４）変更処理の動作
次に、図１２を参照して変更処理の動作を説明する。前述したメインルーチンのステップＳ１１（図７参照）を介して本処理が実行されると、ＣＰＵ１は図１２のステップＳＣ１に進み、表示部７に変更画面を表示する。図示していないが、この変更画面には、終了アイコン、選択アイコンおよび編集アイコンが設けられており、これら各アイコンのオン操作（マウス５によるクリック操作）に応じて対応する処理を実行させるようになっている。
【００５０】
すなわち、終了アイコンがオン操作されると、ステップＳＣ２の判断結果が「ＹＥＳ」になり、ステップＳＣ３に進み、変更画面を消去して本処理を完了させる。選択アイコンがオン操作されると、ステップＳＣ４の判断結果が「ＹＥＳ」になり、ステップＳＣ５に進み、演奏支援の内容を選択する選択処理（後述する）を実行した後、本処理を完了させる。編集アイコンがオン操作されると、ステップＳＣ６の判断結果が「ＹＥＳ」になり、ステップＳＣ７に進み、演奏支援の内容を編集する編集処理（後述する）を実行した後、本処理を完了させる。
【００５１】
（５）選択処理の動作
次に、図１３〜図１４を参照して選択処理の動作を説明する。上記変更処理のステップＳＣ５（図１２参照）を介して本処理が実行されると、ＣＰＵ１は図１３のステップＳＤ１に進み、選択画面枠を表示部７に画面表示する。選択画面枠とは、図１４に図示する一例の選択画面ＳＥＧにおける支援項目リスト表示欄ＬＩＳＴを指す。
【００５２】
次いで、ステップＳＤ２〜ＳＤ５では、ポインタｉを歩進させながら、そのポインタｉに対応した支援情報ｓｕｐ＿ｄａｔ［ｉ］［０］〜［５］（図５参照）をＲＡＭ３のデータエリアから読み出し、それらを支援項目リスト表示欄ＬＩＳＴ中のｉ番目の枠内の対応するアイテムとして画面表示して選択画面ＳＥＧを形成する。
すなわち、識別子ｓｕｐ＿ｉｄ（ｓｕｐ＿ｄａｔ［ｉ］［０］）を「番号」、支援開始時刻Ｔｉｃｋ（ｓｕｐ＿ｄａｔ［ｉ］［１］）を「開始位置」、支援終了時刻ＥｎｄＴｉｃｋ（ｓｕｐ＿ｄａｔ［ｉ］［２］）を「終了位置」、支援タイプＳｕｐＴｙｐｅ（ｓｕｐ＿ｄａｔ［ｉ］［３］）を「タイプ」、支援データｄａｔａ（ｓｕｐ＿ｄａｔ［ｉ］［４］）を「内容」、フラグｆｌｕｇ（ｓｕｐ＿ｄａｔ［ｉ］［５］）を「再生の有無」に表示する。
【００５３】
こうして支援情報ｓｕｐ＿ｄａｔの内容がリスト表示される選択画面ＳＥＧでは、「再生の有無」のクリック枠をユーザがクリック操作することで支援項目を取捨選択し得るようになっている。すなわち、「再生の有無」のクリック枠がクリック操作されると、ステップＳＤ６の判断結果が「ＹＥＳ」になり、ステップＳＤ７に進み、クリック操作されたクリック枠のポインタｉをセットする。そして、ステップＳＤ８では、そのポインタｉに対応したｓｕｐ＿ｄａｔ［ｉ］［５］のフラグｆｌｕｇの値を反転する。続いて、ステップＳＤ９では、そのフラグ反転に応じて、ポインタｉに対応する「再生の有無」のクリック枠の表示を変更した後、ステップＳＤ６に処理を戻す。
【００５４】
これにより、図１４に図示する一例の選択画面ＳＥＧのように、選択された支援内容については「再生の有無」のクリック枠が黒く塗り潰された状態で表示され、選択されない支援内容については「再生の有無」のクリック枠が白抜きで表示される。そして、選択画面ＳＥＧにおける「再生の有無」のクリック枠をクリック操作して支援項目を取捨選択し終えた後、ＯＫアイコンをクリック操作すると、ステップＳＤ１０の判断結果が「ＹＥＳ」になり、ステップＳＤ１１に進み、選択画面ＳＥＧの表示を消去して本処理を完了させる。
【００５５】
（６）編集処理の動作
次に、図１５〜図１６を参照して編集処理の動作を説明する。上述した変更処理のステップＳＣ７（図１２参照）を介して本処理が実行されると、ＣＰＵ１は図１５のステップＳＥ１に進み、編集画面ＥＤＧを表示部７に画面表示する。編集画面ＥＤＧとは、図１６に示す一例のように、支援情報ｓｕｐ＿ｄａｔの内容を編集する際に用いられるＧＵＩ画面であり、支援箇所を入力するフィールドおよび支援内容を選択するフィールドを備える。
【００５６】
次いで、ステップＳＥ２では、編集画面ＥＤＧにデータ入力されたか否かを判断する。データ入力が無ければ、判断結果は「ＮＯ」になり、後述するステップＳＥ４に進む。一方、データ入力されると、判断結果が「ＹＥＳ」となり、次のステップＳＥ３に進み、入力されたデータをフィールド中に表示する。
そして、入力したデータを取り消すべくキャンセルアイコンがオン操作（クリック操作）された場合には、ステップＳＥ８の判断結果が「ＹＥＳ」になり、ステップＳＥ９に進み、入力データを消去すると共に、編集画面ＥＤＧを消去して本処理を完了させる。
【００５７】
一方、入力したデータを支援情報ｓｕｐ＿ｄａｔとして更新登録すべく、ＯＫアイコンがオン操作された場合には、ステップＳＥ４の判断結果が「ＹＥＳ」になり、ステップＳＥ５に進む。ステップＳＥ５では、入力された支援位置データ（Ｔｉｃｋ）に基づき、支援情報ｓｕｐ＿ｄａｔ内の挿入位置を検出し、それをポインタｉに設定する。次いで、ステップＳＥ６では、ポインタｉに対応した支援情報ｓｕｐ＿ｄａｔ［ｉ］に、入力されたデータｓｕｐ＿ｄａｔ［ｉ］［］を挿入する。この後、ステップＳＥ７に進み、入力データを消去した後、ステップＳＥ２に処理を戻す。
【００５８】
以上のように、選択処理および編集処理を備える変更処理では、編集処理にて新たな支援情報ｓｕｐ＿ｄａｔを設定したり、既存の支援情報ｓｕｐ＿ｄａｔを設定し、そうして編集された支援情報ｓｕｐ＿ｄａｔの内、実際の演奏支援に供する支援情報ｓｕｐ＿ｄａｔを選択処理にて選ぶようになっている。
【００５９】
（７）分析処理の動作
次に、図１７を参照して分析処理の動作を説明する。前述したメインルーチンのステップＳ１３（図７参照）を介して本処理が実行されると、ＣＰＵ１は図１７のステップＳＦ１に進む。ステップＳＦ１では、練習結果データベースｐｒａｃｔ＿ｒｅｃ（図３参照）に練習結果データｐｒａｃ＿ｒｅｃが登録されたか否かを判断する。練習結果データｐｒａｃ＿ｒｅｃが登録されていれば、判断結果は「ＹＥＳ」になり、ステップＳＦ２〜ＳＦ４を経て、線形近似処理、判定処理およびエリア分類・支援項目設定処理を実行する。
【００６０】
（８）線形近似処理の動作
次に、図１８〜図２１を参照して線形近似処理の動作を説明する。上述した分析処理（図１７参照）のステップＳＦ２を介して本処理が実行されると、ＣＰＵ１は図１８のステップＳＧ１に処理を進め、ポインタｉＤＢを初期化する。ポインタｉＤＢは、練習結果データベースｐｒａｃｔ＿ｒｅｃ中の練習結果データｐｒａｃ＿ｒｅｃ［０］〜［ｎ］を検索するためのポインタである。続いて、ステップＳＧ２では、線形近似に用いる各種レジスタを初期化する。
【００６１】
次いで、ステップＳＧ３では、練習結果データベースｐｒａｃｔ＿ｒｅｃ中を全て検索し終えたかどうかを判断する。検索し終えた場合には、判断結果が「ＹＥＳ」になり、後述するステップＳＧ４以降に処理を進める。練習結果データベースｐｒａｃｔ＿ｒｅｃ中を全て検索し終えていなければ、判断結果は「ＮＯ」となり、図１９に示すステップＳＧ９に進む。
【００６２】
ステップＳＧ９では、ポインタｉＮｏｔｅをゼロリセットする。次いで、ステップＳＧ１０では、ポインタｉＤＢで指定される練習結果データを検索し終えたか否かを判断する。検索し終えた場合には、判断結果が「ＹＥＳ」となり、ステップＳＧ１１に進み、ポインタｉＤＢを歩進させた後、図１８のステップＳＧ３に処理を戻す。
一方、ポインタｉＤＢで指定される練習結果データを検索し終えていなければ、上記ステップＳＧ１０の判断結果は「ＮＯ」になり、ステップＳＧ１２に進む。ステップＳＧ１２では、練習結果データｐｒａｃ＿ｒｅｃ［ｉＤＢ］［ｉＮｏｔｅ］、つまりミスカウント数ＭｉｓｓＴｏｕｃｈＣｎｔが「０」でないか否かを判断する。
【００６３】
ミスカウント数ＭｉｓｓＴｏｕｃｈＣｎｔが「０」、すなわちポインタｉＤＢで指定される練習結果データｐｒａｃ＿ｒｅｃ［ｉＤＢ］に演奏ミスが存在しない場合には、その練習結果データｐｒａｃ＿ｒｅｃ［ｉＤＢ］は線形近似の対象足り得ないので、判断結果が「ＹＥＳ」となり、ステップＳＧ２２に進み、ポインタｉＮｏｔｅを歩進させた後、ステップＳＧ１０に処理を戻す。
これに対し、ミスカウント数ＭｉｓｓＴｏｕｃｈＣｎｔが「０」でなく、ポインタｉＤＢで指定される練習結果データｐｒａｃ＿ｒｅｃ［ｉＤＢ］に演奏ミスが存在する場合には、ステップＳＧ１２の判断結果が「ＮＯ」となり、ステップＳＧ１３に進む。
【００６４】
ステップＳＧ１３では、演奏練習回数をポインタｉＮｏｔｅ毎にカウントするレジスタｉＡｎｌＣｎｔ［ｉＮｏｔｅ］をインクリメントして歩進させる。続いて、ステップＳＧ１４では、練習結果データ数をポインタｉＮｏｔｅ毎にカウントするレジスタｓｕｍ＿Ｔｉｍｅ［ｉＮｏｔｅ］にポインタｉＤＢの値を加算する。次に、ステップＳＧ１５では、練習結果データｐａｒｃｔ＿ｒｅｃ［ｉＤＢ］［ｉＮｏｔｅ＋１］の値、つまり練習結果ｒｓｌｔ＿ｆｏｒ＿ｐｌａｙｄａｔの値が「−１」、「１」、「２または３」のいずれであるかを判定する。
【００６５】
そして、正しく弾けていない旨を表す「−１」であると、ステップＳＧ１６に進み、レジスタｓｕｍ＿ｔｍｐに「０」をストアする。正しく弾けた旨を表す「１」であると、ステップＳＧ１７に進み、レジスタｓｕｍ＿ｔｍｐに「１」をストアする。適正タイミングより早い押鍵又は遅い押鍵であったことを表す「２または３」であると、ステップＳＧ１８に進み、レジスタｓｕｍ＿ｔｍｐに「０．５」をストアする。
【００６６】
次いで、ステップＳＧ１９に進むと、レジスタｓｕｍ＿ｔｍｐの値をレジスタｓｕｍ＿Ｒｓｌｔ［ｉＮｏｔｅ］に加算し、続くステップＳＧ２０では、レジスタｓｕｍ＿ｔｍｐの自乗値をレジスタｓｕｍ＿Ｒｓｑ［ｉＮｏｔｅ］にストアする。さらに、ステップＳＧ２１では、レジスタｓｕｍ＿ｔｍｐの値にポインタｉＤＢを乗算した値をレジスタｓｕｍ＿ＲＴ［ｉＮｏｔｅ］にストアする。
【００６７】
ここで、線形近似パラメータとして扱われる、レジスタｓｕｍ＿Ｒｓｌｔ［ｉＮｏｔｅ］、レジスタｓｕｍ＿Ｔｉｍｅ［ｉＮｏｔｅ］、レジスタｓｕｍ＿ＲＴ［ｉＮｏｔｅ］およびレジスタｓｕｍ＿Ｒｓｑ［ｉＮｏｔｅ］の各値が意図するところを説明する。
上記レジスタｓｕｍ＿ｔｍｐに格納される演奏結果は、正しく弾かれていない場合に「０」、早く押鍵もしくは遅く押鍵された場合に「０．５」、正しく弾かれた場合に「１」となる。そうした値の演奏結果をｘ軸に、この演奏結果に対応する練習回数をｙ軸に割り当て、例えば図２１（ロ）に図示するように演奏結果毎の度数分布を得る。
【００６８】
この度数分布では、正しく弾かれていない場合の値「０」に対応する練習回数、早く押鍵もしくは遅く押鍵された場合の値「０．５」に対応する練習回数および正しく弾かれた場合の値「１」に対応する練習回数を、順次積み上げる形で表現する。そのように表現された各度数分布間の相関を得るため、最小自乗法にて各度数分布を一次近似する。最小自乗法によれば、１次近似関数ｙ＝ａｘ＋ｂの傾きａおよび切片ｂは、次式（１）および（２）で表現される。
ａ＝ｎΣｘｉｙｉ−ΣｘｉΣｙｉ／ｎΣｘｉ２−（Σｘｉ）２  …（１）
ｂ＝Σｘｉ２Σｙｉ−ΣｘｉΣｘｉｙｉ／ｎΣｘｉ２−（Σｘｉ）２  …（２）
ここで、ｎはデータ数、ｘｉおよびｙｉはｉ番目の演奏結果、練習回数を表す。そして、上記（１），（２）式におけるデータ数ｎがレジスタｉＡｎｌＣｎｔ［ｉＮｏｔｅ］に、Σｘｉｙｉがレジスタｓｕｍ＿ＲＴ［ｉＮｏｔｅ］に、Σｘｉがレジスタｓｕｍ＿Ｒｓｌｔ［ｉＮｏｔｅ］に、Σｙｉがレジスタｓｕｍ＿Ｔｉｍｅ［ｉＮｏｔｅ］に、Σｘｉ２がレジスタｓｕｍ＿Ｒｓｑ［ｉＮｏｔｅ］にそれぞれ対応している。
【００６９】
こうした線形近似パラメータが上記ステップＳＧ１９〜ＳＧ２１にて更新されると、ステップＳＧ２２に処理を進め、ポインタｉＮｏｔｅをインクリメントして歩進させた後、上述のステップＳＧ１０に処理を戻す。
以後、ポインタｉＤＢで指定される練習結果データを読み出し終えるまでステップＳＧ１０〜ＳＧ２２を繰り返して線形近似パラメータを順次更新して行く。する。そして、ポインタｉＤＢで指定される練習結果データを読み出し終えると、ステップＳＧ１０の判断結果が「ＹＥＳ」となり、ステップＳＧ１１に進み、ポインタｉＤＢをインクリメントして歩進させる。この後、図１８に示すステップＳＧ３に処理を戻し、練習結果データベースｐｒａｃｔ＿ｒｅｃに記憶される練習結果データを全て読み出したかどうかを判断し、全て読み出し終えると、判断結果が「ＹＥＳ」になり、ステップＳＧ４に処理を進める。
【００７０】
図１８に示すステップＳＧ４〜ＳＧ８では、課題曲の各音符毎の演奏結果と練習回数とに応じて更新された線形近似パラメータに基づき、最小自乗法による１次近似関数ｙ＝ａｘ＋ｂの傾きａおよび切片ｂを、上述の式（１），（２）により算出する。
すなわち、ステップＳＧ４では、先ずポインタｉＮｏｔｅをゼロリセットし、続くステップＳＧ５では、線形近似パラメータを読み出し終えたかどうかを判断する。読み出し終えていなければ、判断結果は「ＮＯ」になり、次のステップＳＳＧ６に進む。ステップＳＧ６では、ポインタｉＮｏｔｅに対応したレジスタｉＡｎｌＣｎｔ［ｉＮｏｔｅ］の値（練習回数）が「０」、つまりポインタｉＮｏｔｅで指定される課題曲の音符が練習されているかどうかを判断する。練習されておらず、練習回数が「０」であると、判断結果は「ＹＥＳ」となり、後述するステップＳＧ８に進む。
【００７１】
一方、練習されている場合には、判断結果が「ＮＯ」になり、ステップＳＧ７に進み、算出処理を実行する。算出処理が実行されると、ＣＰＵ１は図２０のステップＳＧ７−１、ＳＧ７−２において、ポインタｉＮｏｔｅに対応した線形近似パラメータを前述の式（１），（２）に代入して最小自乗法による１次近似関数ｙ＝ａｘ＋ｂの傾きａおよび切片ｂを算出し、算出した傾きａをレジスタｇｒａｄ［ｉＮｏｔｅ］に、算出した切片ｂをレジスタｒｏｏｔ［ｉＮｏｔｅ］にストアする。この後、図１８のステップＳＧ８に進み、ポインタｉＮｏｔｅをインクリメントして歩進させた後、上述のステップＳＧ５に処理を戻す。
【００７２】
以後、全ての線形近似パラメータを読み出し終えるまでステップＳＧ５〜ＳＧ８を繰り返し、歩進されるポインタｉＮｏｔｅに対応した線形近似パラメータに基づき、課題曲の各音符毎の１次近似関数の傾きａおよび切片ｂを算出してレジスタｇｒａｄ［ｉＮｏｔｅ］、レジスタｒｏｏｔ［ｉＮｏｔｅ］にストアする。そして、全ての線形近似パラメータを読み出し終えると、ステップＳＧ５の判断結果が「ＹＥＳ」となり、本処理を完了させる。
このように、線形近似処理では、練習結果データベースｐｒａｃｔ＿ｒｅｃに履歴記録された各練習結果データに基づき、課題曲の各音符毎の演奏結果と練習回数とを抽出し、これに応じて更新された線形近似パラメータに従って最小自乗法による１次近似関数ｙ＝ａｘ＋ｂの傾きａおよび切片ｂを、課題曲の各音符毎に算出している。
【００７３】
（９）判定処理の動作
次に、図２２〜図２３を参照して判定処理の動作を説明する。前述した分析処理（図１７参照）のステップＳＦ３を介して本処理が実行されると、ＣＰＵ１は図２２のステップＳＨ１に処理を進め、課題曲の各音符毎の向上度判定結果を保持するレジスタｉＰｒｏｇｒｅｓｓ［］をゼロリセットする。次に、ステップＳＨ２では、ポインタｉＮｏｔｅをゼロリセットし、続くステップＳＨ３では、ノートデータ数分の向上度を判定し終えたかどうかを判断する。
【００７４】
判定し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＨ４に進む。ステップＳＨ４では、上述の線形近似処理にて得たレジスタｉＡｎｌＣｎｔ［ｉＮｏｔｅ］の値（練習回数）が「０」でないか否か、つまりポインタｉＮｏｔｅで指定されるノートデータが練習されているかどうかを判断する。ポインタｉＮｏｔｅで指定されるノートデータが練習されていない場合には、判断結果が「ＮＯ」になり、ステップＳＨ９にてポインタｉＮｏｔｅを歩進させてから再びステップＳＨ３に処理を戻す。
【００７５】
一方、ポインタｉＮｏｔｅで指定されるノートデータが練習されていると、上記ステップＳＨ４の判断結果が「ＹＥＳ」になり、ステップＳＨ５に進む。ステップＳＨ５では、上述の線形近似処理で求めた線形近似パラメータを、ｎΣｘｉ２−（Σｘｉ）２なる条件式（３）に代入したときの値が「０」か否かを判断する。この条件式（３）は、１次近似関数ｙ＝ａｘ＋ｂの傾きａを算出する式（１）の分母に相当するものである。したがって、このステップＳＨ５では線形近似の可否を判断することになる。以下、線形近似することが出来ない場合と出来る場合とに分けて動作説明を進める。
【００７６】
ａ．線形近似することが出来ない場合
この場合、条件式（３）の値が「０」になるので、ステップＳＨ５の判断結果は「ＹＥＳ」になり、次のステップＳＨ６に進む。ステップＳＨ６では、上述の線形近似処理で求めた線形近似パラメータを、Σｘｉ／ｎなる条件式（４）に代入したときの値が「１」か否かを判断する。条件式（４）は演奏結果の平均値を表しており、これが「１」になるケースは演奏ミスがなく全て正しく弾けたことを表す。
従って、演奏ミスがなく全て正しく弾けたノートデータ（音符）であると、ステップＳＨ６の判断結果は「ＹＥＳ」になり、ステップＳＨ７に進み、演奏ミスがなく全て正しく弾けた完了期を表す判定値「５」をレジスタｉＰｒｏｇｒｅｓｓにストアした後、ステップＳＨ９に進み、ポインタｉＮｏｔｅを歩進させてから前述のステップＳＨ３に処理を戻す。
【００７７】
一方、条件式（４）の値が「１」でない場合、つまり図２１（イ）に図示するように、適正タイミングより早く押鍵したり遅く押鍵した場合の演奏結果「０．５」の頻度分布しか存在しない場合には、ステップＳＨ６の判断結果が「ＮＯ」になり、ステップＳＨ８に進み、練習初期段階にある旨を表す判定値「１」をレジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］にストアする。この後、ステップＳＨ９にてポインタｉＮｏｔｅを歩進させてから前述のステップＳＨ３に処理を戻す。
【００７８】
ｂ．線形近似することが出来る場合
この場合、上述したステップＳＨ５の判断結果が「ＮＯ」になり、図２３に示すステップＳＨ１０以降に進み、前述した線形近似処理で求めた線形近似パラメータ、一次近似関数の傾きａ（レジスタｇｒａｄ［ｉＮｏｔｅ］）および切片ｂ（レジスタｒｏｏｔ［ｉＮｏｔｅ］）に基づき向上度を判定する。最初にステップＳＥ１０では、下記条件式（５）を満たすか否かを判断する。
ｇｒａｄ［ｉＮｏｔｅ］＞ＰａｒａｍＥｒｒ＋ｉＡｎｌＣｎｔ［ｉＮｏｔｅ］×２／３  ａｎｄ  ｒｏｏｔ［ｉＮｏｔｅ］＞ＰａｒａｍＥｒｒ＋ｉＡｎｌＣｎｔ［ｉＮｏｔｅ］／６  …（５）
ここで、ｇｒａｄ［ｉＮｏｔｅ］は傾きａ、ＰａｒａｍＥｒｒは許容誤差、ｉＡｎｌＣｎｔ［ｉＮｏｔｅ］は練習回数（Ｎｐｒａｃｔと記す）、ｒｏｏｔ［ｉＮｏｔｅ］は切片ｂを表す。
【００７９】
したがって、条件式（５）はポインタｉＮｏｔｅで指定されるノートデータについて得られた一次近似関数の傾きａが２×Ｎｐｒａｃ／３＋ＰａｒａｍＥｒｒより大きく、かつ一次近似関数の切片ｂがＮｐｒａｃ／６＋ＰａｒａｍＥｒｒより大きいか否か、つまり図２１（ロ）に図示する向上期に該当するかどうかを判断する。そして、向上期に該当する場合には、判断結果が「ＹＥＳ」になり、ステップＳＨ１１に進み、向上期段階にある旨を表す判定値「２」をレジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］にストアする。この後、図２２のステップＳＨ９にてポインタｉＮｏｔｅを歩進させてからステップＳＨ３に処理を戻す。
【００８０】
一方、条件式（５）を満たさず、向上期に該当しない場合には、ステップＳＨ１０の判断結果が「ＮＯ」となり、ステップＳＨ１２に進む。ステップＳＨ１２では、下記条件式（６）を満たすか否かを判断する。
ｇｒａｄ［ｉＮｏｔｅ］＜ｉＡｎｌＣｎｔ［ｉＮｏｔｅ］×２／３−ＰａｒａｍＥｒｒ  ａｎｄ  ｒｏｏｔ［ｉＮｏｔｅ］＜ｉＡｎｌＣｎｔ［ｉＮｏｔｅ］／６−ＰａｒａｍＥｒｒ  …（６）
【００８１】
したがって、条件式（６）はポインタｉＮｏｔｅで指定されるノートデータについて得られた一次近似関数の傾きａが２×Ｎｐｒａｃ／３−ＰａｒａｍＥｒｒより大きく、かつ一次近似関数の切片ｂがＮｐｒａｃ／６−ＰａｒａｍＥｒｒより大きいか否か、つまり図２１（ニ）に図示する完成期に該当するかどうかを判断する。そして、完成期に該当する場合には、判断結果が「ＹＥＳ」になり、ステップＳＥ１３に進み、完成期段階にある旨を表す判定値「４」をレジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］にストアする。この後、図２２のステップＳＨ９にてポインタｉＮｏｔｅを歩進させてからステップＳＨ３に処理を戻す。
【００８２】
これに対し、条件式（６）を満たさず、完成期に該当しない場合には、ステップＳＥ１２の判断結果が「ＮＯ」となり、ステップＳＥ１４に進む。ステップＳＥ１４では、下記条件式（７）を満たすか否かを判断する。
ｓｕｍ＿Ｒｓｌｔ［ｉＮｏｔｅ］／ｉＡｎｌＣｎｔ［ｉＮｏｔｅ］＞０．５  …（７）
条件式（７）は演奏結果の平均値（Σｘｉ／ｎ）を表しており、これが「０．５」より大きいか否か、つまり図２１（ハ）に図示する安定期に該当するかどうかを判断する。そして、安定期に該当する場合には、判断結果が「ＹＥＳ」になり、ステップＳＨ１５に進み、安定期段階にある旨を表す判定値「３」をレジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］にストアする。この後、図２２のステップＳＨ９にてポインタｉＮｏｔｅを歩進させてからステップＳＨ３に処理を戻す。一方、条件式（７）を満たさず、安定期に該当しない場合には、ステップＳＨ１４の判断結果が「ＮＯ」となり、ステップＳＨ１６に進み、向上期段階にある旨を表す判定値「２」をレジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］にストアした後、図２２のステップＳＨ９にてポインタｉＮｏｔｅを歩進させてからステップＳＨ３に処理を戻す。
【００８３】
以後、ポインタｉＮｏｔｅがノートデータ数ＮＯＴＥＳに達するまでステップＳＨ３以降を繰り返し、線形近似処理にて得た線形近似パラメータ、一次近似関数の傾きａ（レジスタｇｒａｄ［ｉＮｏｔｅ］）および切片ｂ（レジスタｒｏｏｔ［ｉＮｏｔｅ］）をポインタｉＮｏｔｅに応じて読み出し、これにより課題曲の各ノートデータ毎に「練習初期」、「向上期」、「安定期」、「完成期」および「完了期」のいずれの段階にあるのかを判定し、該当する段階を表す判定値を設定する。そして、全てについて判定し終えると、ステップＳＨ３（図２２）の判断結果が「ＹＥＳ」となり、本処理を完了させる。
【００８４】
（１０）エリア分類・支援項目設定処理の動作
次に、図２４〜図２７を参照してエリア分類・支援項目設定処理の動作を説明する。前述した分析処理（図１７参照）のステップＳＦ４を介して本処理が実行されると、ＣＰＵ１は図２４のステップＳＪ１に処理を進め、ポインタｉＣｎｔをゼロリセットし、続くステップＳＪ２では、ポインタｉＮｏｔｅをゼロリセットすると共に、検出フラグｉＦｏｕｎｄを「０」にセットする。次いで、ステップＳＪ３では、ポインタｉＮｏｔｅに応じて、各ノートデータ毎の判定値をレジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］から読み出し中か否かを判断する。読み出し中であると、判断結果は「ＹＥＳ」になり、ステップＳＪ４に進む。
【００８５】
ステップＳＪ４では、検出フラグｉＦｏｕｎｄが「０」でないか否か、未だ判定値を読み出していない状態であるかどうかを判断する。未だ判定値を読み出していない状態であると、判断結果は「ＮＯ」になり、図２５に示すステップＳＪ１２以降に進む。ステップＳＪ１２以降では、ポインタｉＮｏｔｅに応じてレジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］から読み出される判定値に対応した処理を実行する。以下、レジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］から読み出される判定値が「１」、「２まはた３」および「４」の各場合の動作を述べる。
【００８６】
ａ．判定値が「１」の場合（練習初期の場合）
レジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］から読み出される判定値が「１」であると、図２５に示すステップＳＪ１２の判断結果が「ＹＥＳ」になり、ステップＳＪ１３に進み、検出フラグｉＦｏｕｎｄに「１」をセットする。次いで、ステップＳＪ１４では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［２］（発音タイミングＴｉｃｋ）から定数ＤＡＴＡ＿ＮＧ＿ＧＡＴＥを減算した値を、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［６］（支援開始位置ＳｕｐＳｔａｒｔ）に格納する。つまり、「練習初期」用の支援開始位置ＳｕｐＳｔａｒｔを設定する。続いて、ステップＳＪ１５では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［２］（発音タイミングＴｉｃｋ）を分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［７］（支援終了位置ＳｕｐＥｎｄ）に格納して「練習初期」用の支援終了位置ＳｕｐＥｎｄを設定する。
【００８７】
次いで、ステップＳＪ１６では、「練習初期」用の出力形態を表すＤＡＴＡ＿ＮＧ＿ＴＹＰＥを、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［３］（支援タイプＳｕｐＴｙｐｅ）に格納する。そして、ステップＳＪ１７に進み、「練習初期」用の支援内容を表すＤＡＴＡ＿ＤＥＦＡＵＬＴ＿ＮＧを、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［４］（支援データｄａｔａ）に格納する。
次に、ステップＳＪ１８では、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［５］（フラグｆｌｕｇ）に「１」をセットする。ステップＳＪ１９では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［２］（発音タイミングＴｉｃｋ）を、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［１］（支援開始時刻Ｔｉｃｋ）に格納する。ステップＳＪ２０では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［３］（消音タイミングＥｎｄＴｉｃｋ）を、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［２］（支援終了時刻ＥｎｄＴｉｃｋ）に格納する。
【００８８】
こうして、「練習初期」に対応した分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［１］〜［７］が生成されると、ＣＰＵ１はステップＳＪ２１〜ＳＪ２５を実行する。ステップＳＪ２１〜ＳＪ２５では、ポインタｉＳｕｐを歩進させながら、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［２］（発音タイミングＴｉｃｋ）より遅いタイミングに設定されている支援情報ｓｕｐ＿ｄａｔ［ｉＳｕｐ］［２］（支援終了時刻ＥｎｄＴｉｃｋ）を検索する。
【００８９】
そして、該当する支援情報ｓｕｐ＿ｄａｔ［ｉＳｕｐ］［２］（支援終了時刻ＥｎｄＴｉｃｋ）が検索されたら、支援情報ｓｕｐ＿ｄａｔ［ｉＳｕｐ］［１］（支援開始時刻Ｔｉｃｋ）と演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［２］（発音タイミングＴｉｃｋ）とが一致するかどうかを判断し、一致する場合には支援情報ｓｕｐ＿ｄａｔ［ｉＳｕｐ］［５］（フラグｆｌｕｇ）を、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［５］（フラグｆｌｕｇ）にセットする。
これにより、支援情報ｓｕｐ＿ｄａｔと分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔとが競合する場合、支援情報ｓｕｐ＿ｄａｔを優先させる。そして、以上の競合箇所の検索が完了すると、ステップＳＪ２２の判断結果が「ＹＥＳ」になり、図２４のステップＳＪ３に処理を戻す。
【００９０】
ｂ．判定値が「２または３」の場合（向上期もしくは安定期の場合）
レジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］から読み出される判定値が「２または３」であると、図２６に示すステップＳＪ２６の判断結果が「ＹＥＳ」になり、ステップＳＪ２７に進み、検出フラグｉＦｏｕｎｄに「２」をセットする。次いで、ステップＳＪ２８では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［２］（発音タイミングＴｉｃｋ）から定数ＤＡＴＡ＿ＣＡＵＴ＿ＧＡＴＥを減算した値を、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［６］（支援開始位置ＳｕｐＳｔａｒｔ）に格納する。つまり、「向上期もしくは安定期」用の支援開始位置ＳｕｐＳｔａｒｔを設定する。
【００９１】
続いて、ステップＳＪ２９では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［２］（発音タイミングＴｉｃｋ）を分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［７］（支援終了位置ＳｕｐＥｎｄ）に格納して「向上期もしくは安定期」用の支援終了位置ＳｕｐＥｎｄを設定する。次いで、ステップＳＪ３０では、「向上期もしくは安定期」用の出力形態を表すＤＡＴＡ＿ＣＡＵＴ＿ＴＹＰＥを、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［３］（支援タイプＳｕｐＴｙｐｅ）に格納する。そして、ステップＳＪ３１に進み、「向上期もしくは安定期」用の支援内容を表すＤＡＴＡ＿ＤＥＦＡＵＬＴ＿ＣＡＵＴを、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［４］（支援データｄａｔａ）に格納する。
【００９２】
次に、ステップＳＪ３２では、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［５］（フラグｆｌｕｇ）に「１」をセットする。ステップＳＪ３３では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［２］（発音タイミングＴｉｃｋ）を、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［１］（支援開始時刻Ｔｉｃｋ）に格納する。ステップＳＪ３４では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［３］（消音タイミングＥｎｄＴｉｃｋ）を、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［２］（支援終了時刻ＥｎｄＴｉｃｋ）に格納する。こうして、「向上期もしくは安定期」に対応した分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［１］〜［７］が生成されると、ＣＰＵ１は図２４のステップＳＪ３に処理を戻す。
【００９３】
なお、上述した練習初期の場合には、支援情報ｓｕｐ＿ｄａｔと分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔとが競合すると、支援情報ｓｕｐ＿ｄａｔ側を優先するようにしたが、向上期もしくは安定期の場合、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔを優先するようになっている。また、向上期もしくは安定期においても支援情報ｓｕｐ＿ｄａｔと分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔとが競合した時、支援情報ｓｕｐ＿ｄａｔ側を優先させる態様としても構わない。
【００９４】
ｃ．判定値が「４」の場合（完成期の場合）
レジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］から読み出される判定値が「４」であると、図２７に示すステップＳＪ３５の判断結果が「ＹＥＳ」になり、ステップＳＪ３６に進み、検出フラグｉＦｏｕｎｄに「４」をセットする。次いで、ステップＳＪ３７では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［２］（発音タイミングＴｉｃｋ）から定数ＤＡＴＡ＿ＯＫ＿ＧＡＴＥを減算した値を、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［６］（支援開始位置ＳｕｐＳｔａｒｔ）に格納する。つまり、「完成期」用の支援開始位置ＳｕｐＳｔａｒｔを設定する。
【００９５】
続いて、ステップＳＪ３８では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［２］（発音タイミングＴｉｃｋ）を分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［７］（支援終了位置ＳｕｐＥｎｄ）に格納して「完成期」用の支援終了位置ＳｕｐＥｎｄを設定する。次いで、ステップＳＪ３９では、「完成期」用の出力形態を表すＤＡＴＡ＿ＯＫ＿ＴＹＰＥを、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［３］（支援タイプＳｕｐＴｙｐｅ）に格納する。そして、ステップＳＪ４０に進み、「完成期」用の支援内容を表すＤＡＴＡ＿ＤＥＦＡＵＬＴ＿ＯＫを、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［４］（支援データｄａｔａ）に格納する。
【００９６】
次に、ステップＳＪ４１では、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［５］（フラグｆｌｕｇ）に「１」をセットする。ステップＳＪ４２では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［２］（発音タイミングＴｉｃｋ）を、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［１］（支援開始時刻Ｔｉｃｋ）に格納する。ステップＳＪ４３では、演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ］［３］（消音タイミングＥｎｄＴｉｃｋ）を、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［２］（支援終了時刻ＥｎｄＴｉｃｋ）に格納する。こうして、「完成期」に対応した分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［１］〜［７］が生成されると、ＣＰＵ１は図２４のステップＳＪ３に処理を戻す。
【００９７】
なお、前述した練習初期の場合には、支援情報ｓｕｐ＿ｄａｔと分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔとが競合すると、支援情報ｓｕｐ＿ｄａｔ側を優先するようにしたが、完成期の場合、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔを優先するようになっている。また、完成期においても支援情報ｓｕｐ＿ｄａｔと分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔとが競合した時、支援情報ｓｕｐ＿ｄａｔ側を優先する態様としても構わない。
【００９８】
以上のようにして、判定値に応じた分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［１］〜［７］が生成されて図２４のステップＳＪ３に処理を戻した時、ポインタｉＮｏｔｅに応じた判定値の読み出しの最中であると、ステップＳＪ３の判断結果が「ＹＥＳ」になり、ステップＳＪ４以降に処理を進める。ステップＳＪ４では、検出フラグｉＦｏｕｎｄは「０」でないか否かを判断する。この場合、検出フラグｉＦｏｕｎｄは「０」でないので、判断結果が「ＹＥＳ」となり、ステップＳＪ５に進む。ステップＳＪ５では、レジスタｉＰｒｏｇｒｅｓｓ［ｉＮｏｔｅ］の判定値と検出フラグｉＦｏｕｎｄとが一致していないかどうかを判断する。一致していると、判断結果は「ＮＯ」になり、後述するステップＳＪ９に進むが、不一致ならば、判断結果が「ＹＥＳ」になり、ステップＳＪ６に進む。
【００９９】
ステップＳＪ６では、検出フラグｉＦｏｕｎｄをゼロリセットし、続くステップＳＪ７では、１つ前の演奏情報ｐｌａｙｄａｔ［ｉＮｏｔｅ−１］［３］（消音タイミングＥｎｄＴｉｃｋ）を、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［２］（支援終了時刻ＥｎｄＴｉｃｋ）に格納する。次いで、ステップＳＪ８では、ポインタｉＣｎｔを歩進させ、続くステップＳＪ９ではポインタｉＮｏｔｅを歩進させてステップＳＪ３に処理を戻す。
そして、ステップＳＪ３において、ポインタｉＮｏｔｅに応じた判定値の読み出しが完了すると、ここでの判断結果が「ＮＯ」になり、ステップＳＪ１０に進み、検出フラグｉＦｏｕｎｄが「０」でないか否かを判断する。検出フラグｉＦｏｕｎｄが「０」であれば、判断結果は「ＮＯ」になり、本処理を完了させる。一方、検出フラグｉＦｏｕｎｄが「０」でなければ、判断結果が「ＹＥＳ」となり、ステップＳＪ１１に進み、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＣｎｔ］［２］（支援終了時刻ＥｎｄＴｉｃｋ）に曲最後の時刻を格納して本処理を終える。
【０１００】
以上のように、線形近似処理、判定処理およびエリア分類・支援項目設定処理を含む分析処理では、練習結果データベースｐｒａｃｔ＿ｒｅｃに履歴記録された練習結果データを分析して、演奏ミスを犯し易い苦手箇所の演奏を支援する支援項目を作成するようになっている。
【０１０１】
（１１）標準支援処理の動作
次に、図２８〜図３３を参照して標準支援処理の動作を説明する。前述したメインルーチンのステップＳ７（図７参照）を介して標準支援処理が実行されると、ＣＰＵ１は図２８に示すステップＳＫ１に進み、スタートスイッチイベントの有無を判断する。ここで、ユーザが特別支援処理をスタートさせるべくスタートスイッチをオン操作したとする。
そうすると、スタートスイッチイベントが発生して、ステップＳＫ１の判断結果が「ＹＥＳ」になり、ステップＳＫ２に進み、特別支援処理のスタートを表す為、停止フラグをゼロリセットする。次いで、ステップＳＫ３に進み、現時刻をレジスタＳｔａｒｔＴｉｃｋにストアする。続いて、ステップＳＫ４では、ポインタｉＰＤ、ｉＳＤ、ｉＦｉｒｓｔおよびポインタｉＬａｓｔを各々ゼロリセットする。
【０１０２】
次に、ステップＳＫ５では、ストップイベントの有無を判断する。ストップイベントが無ければ、判断結果は「ＮＯ」になり、ステップＳＫ７に進み、停止フラグが「１」、つまりストップ状態に設定されているかどうかを判断する。スタート状態にあると、停止フラグは「０」なので、判断結果は「ＮＯ」になり、ステップＳＫ７に進む。
一方、ストップスイッチのオン操作に応じてストップイベントが発生した場合には、上記ステップＳＫ５の判断結果が「ＹＥＳ」になり、ステップＳＫ６に進み、停止フラグを「１」にセットする。停止フラグが「１」にセットされると、ステップＳＫ７の判断結果が「ＹＥＳ」になり、本処理を完了させる。
【０１０３】
さて、スタートスイッチのオン操作に応じて停止フラグが「０」になると、上記ステップＳＫ７の判断結果が「ＮＯ」になり、図２９に示すステップＳＫ８に処理を進める。ステップＳＫ８では、現時刻をレジスタＮｏｗＴｉｃｋにストアする。続いて、ステップＳＫ９では、ポインタｉＦｉｒｓｔの値をポインタｉにセットする。そして、ステップＳＫ１０では、ポインタｉとポインタｉＬａｓｔが一致するか否かを判断する。
初期化された時点では、両ポインタは一致するので、判断結果は「ＹＥＳ」になり、ステップＳＫ１１に処理を進める。ステップＳＫ１１では、現時刻が支援終了時刻ＥｎｄＴｉｃｋ（ｎｏｗｐｌａｙ［ｉ］［２］）を過ぎているか否かを判断する。現時刻が支援終了時刻ＥｎｄＴｉｃｋを過ぎていなければ、判断結果は「ＮＯ」になり、後述するステップＳＫ１６に進む。
【０１０４】
一方、現時刻が支援終了時刻ＥｎｄＴｉｃｋを過ぎていると、ステップＳＫ１１の判断結果は「ＹＥＳ」になり、ステップＳＫ１２に進み、支援停止処理を実行する。支援停止処理が実行されると、ＣＰＵ１は図３３のステップＳＫ１２−１に処理を進め、支援情報ｓｕｐ＿ｄａｔ（図５参照）中の支援データｄａｔａ（ｓｕｐ＿ｄａｔ［ｉ］［４］）が再生中であるか否かを判断する。再生していなければ、判断結果は「ＮＯ」になり、何も行わずに支援停止処理を完了させるが、再生中であると、判断結果が「ＹＥＳ」になり、ステップＳＫ１２−２に進み、支援データｄａｔａの再生を停止してから支援停止処理を完了させる。
【０１０５】
支援停止処理が完了すると、ＣＰＵ１は図２９のステップＳＫ１３に進み、支援対象となる演奏情報ｐｌａｙｄａｔを指し示すポインタＯｒｉｇｉｎａｌＩｎｄｅｘ（ｎｏｗｐｌａｙ［ｉ］［３］）を、ポインタｔｍｐＰＤにセットする。次いで、ステップＳＫ１４では、このポインタｔｍｐＰＤに対応した演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］［５］（比較結果Ｒｅｓｕｌｔ）の値が「０」であるか否かを判断する。
演奏範囲外を表す「０」でなければ、判断結果は「ＮＯ」になり、後述のステップＳＫ１６に進むが、「０」であると、判断結果が「ＹＥＳ」になり、ステップＳＫ１５に進み、演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］［５］（比較結果Ｒｅｓｕｌｔ）に、正しく弾けなかった旨を表す判定値「−１」をセットする。そして、ステップＳＫ１６に進み、次の処理情報を指し示すポインタ（ｎｏｗｐｌａｙ［ｉ］［４］）をポインタｉにセットして上述のステップＳＫ１０に処理を戻す。
【０１０６】
ポインタｉの歩進に応じて、ステップＳＫ１０の判断結果が「ＮＯ」になると、ＣＰＵ１は図３０に示すステップＳＫ１７に処理を進める。ステップＳＫ１７では、現時刻ＮｏｗＴｉｃｋが演奏情報ｐｌａｙｄａｔの発音タイミングＴｉｃｋ（ｐｌａｙｄａｔ［ｉＰＤ］［２］）を過ぎているか否かを判断する。現時刻ＮｏｗＴｉｃｋが発音タイミングＴｉｃｋ以前であると、判断結果は「ＮＯ」になり、図３１に示すステップＳＫ２２に進むが、発音タイミングＴｉｃｋを過ぎていると、判断結果が「ＹＥＳ」になり、ステップＳＫ１８に進む。
ステップＳＫ１８では、演奏情報ｐｌａｙｄａｔ［ｉＰＤ］［１］（ノート番号Ｎｏｔｅ＃）にて指定される音高の楽音を発音するよう電子楽器２０側に指示するノートオン処理を実行する。これにより、発音タイミングＴｉｃｋを過ぎても演奏されない演奏情報ｐｌａｙｄａｔ［ｉＰＤ］を再生する演奏支援が行われる。
【０１０７】
そして、ステップＳＫ１９に進み、処理情報ｎｏｗｐｌａｙにおける空きエリアを検索し、その空きエリアを指し示すポインタ値をポインタｉＳｅｔにセットする。次いで、ステップＳＫ２０では、上記ステップＳＫ１８にてノートオン処理を実行したのに伴い、処理情報ｎｏｗｐｌａｙ［ｉＳｅｔ］を更新登録する。すなわち、処理タイプｐｌａｙｔｙｐｅ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［０］）にノート出力を表す値「０」を、支援開始時刻Ｔｉｃｋ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［１］）に発音タイミングＴｉｃｋ（ｐｌａｙｄａｔ［ｉＰＤ］  ［２］）をストアする。
【０１０８】
また、支援終了時刻ＥｎｄＴｉｃｋ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［２］）に消音タイミングＥｎｄＴｉｃｋ（ｐｌａｙｄａｔ［ｉＰＤ］  ［３］）を、支援対象となる演奏情報ｐｌａｙｄａｔを指し示すポインタＯｒｉｇｉｎａｌＩｎｄｅｘ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［３］）にポインタｉＰＤをストアする。さらに、一つ前の処理情報ｎｏｗｐｌａｙ［ｉＬａｓｔ］［４］のポインタＮｅｘｔＰｏｉｎｔｅｒにポインタｉＳｅｔをストアした後、ポインタｉＬａｓｔをポインタｉＳｅｔに更新する。そして、ステップＳＫ２１に進み、ポインタｉＰＤを歩進させた後、図３１のステップＳＫ２２に進む。
【０１０９】
ステップＳＫ２２では、ポインタｉＰＤに対応した支援情報ｓｕｐ＿ｄａｔ［ｉＰＤ］［５］のフラグｆｌｕｇが「１」であって、かつ現時刻ＮｏｗＴｉｃｋが支援開始時刻Ｔｉｃｋ（ｓｕｐ＿ｄａｔ［ｉＰＤ］［１］）を過ぎているか否かを判断する。フラグｆｌｕｇが「０」に設定されて演奏支援の無効を表す場合、もしくは現時刻ＮｏｗＴｉｃｋが支援開始時刻Ｔｉｃｋ以前であると、ここでの判断結果は「ＮＯ」になり、図２８に示すステップＳＫ１に処理を戻す。
一方、フラグｆｌｕｇが「１」に設定されて演奏支援の有効を表し、しかも支援開始時刻Ｔｉｃｋを過ぎていると、判断結果が「ＹＥＳ」になり、ステップＳＫ２３に進み、支援開始処理を実行する。
【０１１０】
支援開始処理が実行されると、ＣＰＵ１は図３２のステップＳＫ３２−１に処理を進め、支援情報ｓｕｐ＿ｄａｔ［ｉＳＤ］［３］の支援タイプＳｕｐＴｙｐｅが「１」〜「３」のいずれであるかを判断する。支援タイプＳｕｐＴｙｐｅが「１」の場合には、ステップＳＫ２３−２に進み、支援情報ｓｕｐ＿ｄａｔ［ｉＳＤ］［４］の支援データｄａｔａを、表示部７の表示画面に文字列出力する。支援タイプＳｕｐＴｙｐｅが「２」の場合には、ステップＳＫ２３−３に進み、支援情報ｓｕｐ＿ｄａｔ［ｉＳＤ］［４］の支援データｄａｔａを、表示部７の表示画面に画像出力する。支援タイプＳｕｐＴｙｐｅが「３」の場合には、ステップＳＫ２３−４に進み、支援情報ｓｕｐ＿ｄａｔ［ｉＳＤ］［４］の支援データｄａｔａを音声出力する。
【０１１１】
こうして、支援情報ｓｕｐ＿ｄａｔ［ｉＳＤ］［４］の支援データｄａｔａによる演奏支援が行われると、ＣＰＵ１は図３１のステップＳＫ２４に進み、処理情報ｎｏｗｐｌａｙにおける空きエリアを検索し、その空きエリアを指し示すポインタ値をポインタｉＳｅｔにセットする。続いて、ステップＳＫ２５では、上記支援開始処理の実行に伴い、処理情報ｎｏｗｐｌａｙ［ｉＳｅｔ］を更新登録する。
【０１１２】
すなわち、処理タイプｐｌａｙｔｙｐｅ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［０］）に支援情報ｓｕｐ＿ｄａｔ［ｉＳＤ］［３］の支援タイプＳｕｐＴｙｐｅをストアする。支援開始時刻Ｔｉｃｋ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［１］）に支援情報ｓｕｐ＿ｄａｔ［ｉＳＤ］［１］の支援開始時刻Ｔｉｃｋをストアする。支援終了時刻ＥｎｄＴｉｃｋ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［２］）に支援情報ｓｕｐ＿ｄａｔ［ｉＳＤ］［２］の支援終了時刻ＥｎｄＴｉｃｋをストアする。支援対象となる演奏情報ｐｌａｙｄａｔを指し示すポインタＯｒｉｇｉｎａｌＩｎｄｅｘ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［３］）にポインタｉＳＤをストアする。一つ前の処理情報ｎｏｗｐｌａｙ［ｉＬａｓｔ］［４］のポインタＮｅｘｔＰｏｉｎｔｅｒにポインタｉＳｅｔをストアした後、ポインタｉＬａｓｔをポインタｉＳｅｔに更新する。そして、ステップＳＫ２６に進み、ポインタｉＳＤを歩進させてから図２８のステップＳＫ１に処理を戻す。以後、ストップスイッチがオン操作されるまで上述した動作を繰り返す。
【０１１３】
（１２）特別支援処理の動作
次に、図３４〜図３７を参照して特別支援処理の動作を説明する。前述したメインルーチンのステップＳ９（図７参照）を介して特別支援処理が実行されると、ＣＰＵ１は図３４に示すステップＳＬ１に進み、スタートスイッチイベントの有無を判断する。ここで、ユーザが特別支援処理をスタートさせるべくスタートスイッチをオン操作したとする。
そうすると、スタートスイッチイベントが発生して、ステップＳＬ１の判断結果が「ＹＥＳ」になり、ステップＳＬ２に進み、特別支援処理のスタートを表す為、停止フラグをゼロリセットする。次いで、ステップＳＬ３に進み、現時刻をレジスタＳｔａｒｔＴｉｃｋにストアする。続いて、ステップＳＬ４では、ポインタｉＰＤ、ｉＡＤ、ｉＦｉｒｓｔおよびｉＬａｓｔを各々ゼロリセットする。
【０１１４】
次に、ステップＳＬ５では、ストップイベントの有無を判断する。ストップイベントが無ければ、判断結果は「ＮＯ」になり、ステップＳＬ７に進み、停止フラグが「１」、つまりストップ状態に設定されているかどうかを判断する。スタート状態にあると、停止フラグは「０」なので、判断結果は「ＮＯ」になり、ステップＳＬ７に進む。
一方、ストップスイッチのオン操作に応じてストップイベントが発生した場合には、上記ステップＳＬ５の判断結果が「ＹＥＳ」になり、ステップＳＬ６に進み、停止フラグを「１」にセットする。停止フラグが「１」にセットされると、ステップＳＬ７の判断結果が「ＹＥＳ」になり、本処理を完了させる。
【０１１５】
さて、スタートスイッチのオン操作に応じて停止フラグが「０」になると、上記ステップＳＬ７の判断結果が「ＮＯ」になり、図３５に示すステップＳＬ８に進む。ステップＳＬ８では、現時刻をレジスタＮｏｗＴｉｃｋにストアする。続いて、ステップＳＬ９では、ポインタｉＦｉｒｓｔの値をポインタｉにセットする。そして、ステップＳＬ１０では、ポインタｉとポインタｉＬａｓｔが一致するか否かを判断する。
初期化された時点では、両ポインタは一致するので、判断結果は「ＹＥＳ」になり、ステップＳＬ１１に処理を進める。ステップＳＬ１１では、現時刻が支援終了時刻ＥｎｄＴｉｃｋ（ｎｏｗｐｌａｙ［ｉ］［２］）を過ぎているか否かを判断する。現時刻が支援終了時刻ＥｎｄＴｉｃｋを過ぎていなければ、判断結果は「ＮＯ」になり、後述するステップＳＫ１６に進む。
【０１１６】
一方、現時刻が支援終了時刻ＥｎｄＴｉｃｋを過ぎていると、ステップＳＬ１１の判断結果は「ＹＥＳ」になり、ステップＳＬ１２に進み、支援停止処理を実行する。特別支援処理にて実行される支援停止処理では、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ（図６参照）中の支援データｄａｔａ（ａｎａｌｉｚｅｄ＿ｄａｔ［ｉ］［４］）が再生中であるか否かを判断し、再生中の場合に支援データｄａｔａの再生を停止させるようになっている。
【０１１７】
支援停止処理が完了すると、ＣＰＵ１は図３５のステップＳＬ１３に進み、支援対象となる演奏情報ｐｌａｙｄａｔを指し示すポインタＯｒｉｇｉｎａｌＩｎｄｅｘ（ｎｏｗｐｌａｙ［ｉ］［３］）を、ポインタｔｍｐＰＤにセットする。次いで、ステップＳＬ１４では、このポインタｔｍｐＰＤに対応した演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］［５］（比較結果Ｒｅｓｕｌｔ）の値が「０」であるか否かを判断する。
演奏範囲外を表す「０」でなければ、判断結果は「ＮＯ」になり、後述のステップＳＬ１６に進むが、「０」であると、判断結果が「ＹＥＳ」になり、ステップＳＬ１５に進み、演奏情報ｐｌａｙｄａｔ［ｔｍｐＰＤ］［５］（比較結果Ｒｅｓｕｌｔ）に、正しく弾けなかった旨を表す判定値「−１」をセットする。そして、ステップＳＬ１６に進み、次の処理情報を指し示すポインタ（ｎｏｗｐｌａｙ［ｉ］［４］）をポインタｉにセットして上述のステップＳＬ１０に処理を戻す。
【０１１８】
ポインタｉの歩進に応じて、ステップＳＬ１０の判断結果が「ＮＯ」になると、ＣＰＵ１は図３６に示すステップＳＬ１７に処理を進める。ステップＳＬ１７では、現時刻ＮｏｗＴｉｃｋが演奏情報ｐｌａｙｄａｔの発音タイミングＴｉｃｋ（ｐｌａｙｄａｔ［ｉＰＤ］［２］）を過ぎているか否かを判断する。現時刻ＮｏｗＴｉｃｋが発音タイミングＴｉｃｋ以前であると、判断結果は「ＮＯ」になり、図３７に示すステップＳＬ２２に進むが、発音タイミングＴｉｃｋを過ぎていると、判断結果が「ＹＥＳ」になり、ステップＳＬ１８に進む。ステップＳＬ１８では、演奏情報ｐｌａｙｄａｔ［ｉＰＤ］［１］（ノート番号Ｎｏｔｅ＃）にて指定される音高の楽音を発音するよう電子楽器２０側に指示するノートオン処理を実行する。これにより、発音タイミングＴｉｃｋを過ぎても演奏されない演奏情報ｐｌａｙｄａｔ［ｉＰＤ］を再生する演奏支援が行われる。
【０１１９】
そして、ステップＳＬ１９に進み、処理情報ｎｏｗｐｌａｙにおける空きエリアを検索し、その空きエリアを指し示すポインタ値をポインタｉＳｅｔにセットする。次いで、ステップＳＬ２０では、上記ノートオン処理の実行に伴い、処理情報ｎｏｗｐｌａｙ［ｉＳｅｔ］を更新登録する。
【０１２０】
すなわち、処理タイプｐｌａｙｔｙｐｅ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［０］）にノート出力を表す値「０」をストアする。支援開始時刻Ｔｉｃｋ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［１］）に発音タイミングＴｉｃｋ（ｐｌａｙｄａｔ［ｉＰＤ］  ［２］）をストアする。支援終了時刻ＥｎｄＴｉｃｋ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［２］）に消音タイミングＥｎｄＴｉｃｋ（ｐｌａｙｄａｔ［ｉＰＤ］  ［３］）をストアする。支援対象となる演奏情報ｐｌａｙｄａｔを指し示すポインタＯｒｉｇｉｎａｌＩｎｄｅｘ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［３］）にポインタｉＰＤをストアする。一つ前の処理情報ｎｏｗｐｌａｙ［ｉＬａｓｔ］［４］のポインタＮｅｘｔＰｏｉｎｔｅｒにポインタｉＳｅｔをストアした後、ポインタｉＬａｓｔをポインタｉＳｅｔに更新する。そして、ステップＳＫ２１に進み、ポインタｉＰＤを歩進させた後、図３７のステップＳＬ２２に進む。
【０１２１】
ステップＳＬ２２では、ポインタｉＰＤに対応した分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＡＤ］［５］のフラグｆｌｕｇが「１」であって、かつ現時刻ＮｏｗＴｉｃｋが支援開始時刻Ｔｉｃｋ（ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＰＤ］［１］）を過ぎているか否かを判断する。フラグｆｌｕｇが「０」に設定されて演奏支援の無効を表す場合、もしくは現時刻ＮｏｗＴｉｃｋが支援開始時刻Ｔｉｃｋ以前であると、ここでの判断結果は「ＮＯ」になり、図３４のステップＳＬ１に処理を戻す。
一方、フラグｆｌｕｇが「１」に設定されて演奏支援の有効を表し、かつ支援開始時刻Ｔｉｃｋを過ぎていると、判断結果は「ＹＥＳ」になり、ステップＳＬ２３を介して支援開始処理を実行する。
【０１２２】
特別支援処理に対応する支援開始処理は、標準支援処理に対応した、図３２の支援開始処理と同様に、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＡＤ］［３］の支援タイプＳｕｐＴｙｐｅが「１」〜「３」のいずれであるかを判断し、支援タイプＳｕｐＴｙｐｅが「１」の場合には分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＡＤ］［４］の支援データｄａｔａを、表示部７の表示画面に文字列出力し、支援タイプＳｕｐＴｙｐｅが「２」の場合には分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＡＤ］［４］の支援データｄａｔａを、表示部７の表示画面に画像出力し、支援タイプＳｕｐＴｙｐｅが「３」の場合には分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＡＤ］［４］の支援データｄａｔａを音声出力する。
【０１２３】
こうして、分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＡＤ］［４］の支援データｄａｔａによる演奏支援が行われると、ＣＰＵ１は図３７のステップＳＬ２４に進み、処理情報ｎｏｗｐｌａｙにおける空きエリアを検索し、その空きエリアを指し示すポインタ値をポインタｉＳｅｔにセットする。続いて、ステップＳＬ２５では、上記支援開始処理の実行に伴い、処理情報ｎｏｗｐｌａｙ［ｉＳｅｔ］を更新登録する。
【０１２４】
すなわち、処理タイプｐｌａｙｔｙｐｅ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［０］）に分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＡＤ］［３］の支援タイプＳｕｐＴｙｐｅをストアする。支援開始時刻Ｔｉｃｋ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［１］）に分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＡＤ］［１］の支援開始時刻Ｔｉｃｋをストアする。支援終了時刻ＥｎｄＴｉｃｋ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［２］）に分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔ［ｉＡＤ］［２］の支援終了時刻ＥｎｄＴｉｃｋをストアする。支援対象となる演奏情報ｐｌａｙｄａｔを指し示すポインタＯｒｉｇｉｎａｌＩｎｄｅｘ（ｎｏｗｐｌａｙ［ｉＳｅｔ］［３］）にポインタｉＡＤをストアする。一つ前の処理情報ｎｏｗｐｌａｙ［ｉＬａｓｔ］［４］のポインタＮｅｘｔＰｏｉｎｔｅｒにポインタｉＳｅｔをストアした後、ポインタｉＬａｓｔをポインタｉＳｅｔに更新する。そして、ステップＳＬ２６に進み、ポインタｉＡＤを歩進させてから図３４のステップＳＬ１に処理を戻す。以後、ストップスイッチがオン操作されるまで上述した動作を繰り返す。
【０１２５】
以上説明したように、本実施例では、電子楽器２０側から演奏データがＭＩＤＩ入力される毎に、ＤＴＭ装置１０が課題曲の各音符を表す演奏情報ｐｌａｙｄａｔと比較して演奏の適否を判定し、その判定結果を演奏情報ｐｌａｙｄａｔに対応させた練習結果データとして練習結果データベースｐａｒｃｔ＿ｒｅｃに履歴記録し、その履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援するための分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔを作成したり、ユーザ自身が注意喚起したい箇所で演奏ミスしないように支援するための支援情報ｓｕｐ＿ｄａｔを設定する。
そして、実際の演奏支援に供する分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔや支援情報ｓｕｐ＿ｄａｔを選定して演奏支援させるので、練習履歴から抽出される苦手箇所や、ユーザ自身が注意喚起したい箇所で演奏ミスしないように支援する支援項目を演奏時に提示することが可能になっている。
【０１２６】
【発明の効果】
請求項１，４に記載の発明では、演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして履歴記録し、履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する。そして、この第１の支援情報を演奏進行に応じて再生して演奏支援するので、演奏ミスを犯し易い苦手箇所の演奏を間違えないように支援することができる。
請求項２，５に記載の発明では、演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして履歴記録し、履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する一方、注意喚起したい箇所で演奏ミスしないように支援する第２の支援情報を設定する。そして、前記１および第２の支援情報のいずれかを選択し、選択した側の支援情報を演奏進行に応じて再生して演奏支援するので、演奏ミスを犯し易い苦手箇所や、ユーザ自身が注意喚起したい箇所の演奏を間違えないよう支援することができる。
請求項３，６に記載の発明では、演奏操作に応じて発生する演奏データと、課題曲を形成する各音符を表す演奏情報とを比較して得た判定結果を、当該演奏情報に対応させた練習結果データとして履歴記録し、履歴記録された練習結果データを分析して演奏ミスを犯し易い苦手箇所の演奏を支援する第１の支援情報を発生する一方、注意喚起したい箇所で演奏ミスしないように支援する第２の支援情報を設定する。そして、前記第１および第２の支援情報のいずれかを選択し、選択した側の支援情報から実際の演奏に供する支援項目を取捨選択してなる支援情報を演奏進行に応じて再生して演奏支援する結果、ユーザ自身が必要とする支援項目の支援情報を用いた演奏支援を行うことができる。
【図面の簡単な説明】
【図１】本発明による実施例の構成を示すブロック図である。
【図２】ＲＡＭ３に設けられる演奏情報ｐｌａｙ＿ｄａｔのデータ構造を示す図である。
【図３】ＲＡＭ３に設けられる練習結果データベースｐａｒｃｔ＿ｒｅｃのデータ構造を示す図である。
【図４】ＲＡＭ３に設けられる処理情報ｎｏｗｐｌａｙのデータ構造を示す図である。
【図５】ＲＡＭ３に設けられる支援情報ｓｕｐ＿ｄａｔのデータ構造を示す図である。
【図６】ＲＡＭ３に設けられる分析支援情報ａｎａｌｉｚｅｄ＿ｄａｔのデータ構造を示す図である。
【図７】メインルーチンの動作を示すフローチャートである。
【図８】演奏開始処理の動作を示すフローチャートである。
【図９】演奏開始処理の動作を示すフローチャートである。
【図１０】演奏判定保存処理の動作を示すフローチャートである。
【図１１】演奏判定保存処理の動作を示すフローチャートである。
【図１２】変更処理の動作を示すフローチャートである。
【図１３】選択処理の動作を説明するための図である。
【図１４】選択画面ＳＥＧの一例を示す図である。
【図１５】編集処理の動作を示すフローチャートである。
【図１６】編集画面ＥＤＧの一例を示す図である。
【図１７】分析処理の動作を示すフローチャートである。
【図１８】線形近似処理の動作を示すフローチャートである。
【図１９】線形近似処理の動作を示すフローチャートである。
【図２０】算出処理の動作を示すフローチャートである。
【図２１】演奏結果毎の度数分布を一次近似した一例を示す図である。
【図２２】判定処理の動作を示すフローチャートである。
【図２３】判定処理の動作を示すフローチャートである。
【図２４】エリア分類・支援項目設定処理の動作を示すフローチャートである。
【図２５】エリア分類・支援項目設定処理の動作を示すフローチャートである。
【図２６】エリア分類・支援項目設定処理の動作を示すフローチャートである。
【図２７】エリア分類・支援項目設定処理の動作を示すフローチャートである。
【図２８】標準支援処理の動作を示すフローチャートである。
【図２９】標準支援処理の動作を示すフローチャートである。
【図３０】標準支援処理の動作を示すフローチャートである。
【図３１】標準支援処理の動作を示すフローチャートである。
【図３２】支援開始処理の動作を示すフローチャートである。
【図３３】支援停止処理の動作を示すフローチャートである。
【図３４】特別支援処理の動作を示すフローチャートである。
【図３５】特別支援処理の動作を示すフローチャートである。
【図３６】特別支援処理の動作を示すフローチャートである。
【図３７】特別支援処理の動作を示すフローチャートである。
【符号の説明】
１  ＣＰＵ
２  ＲＯＭ
３  ＲＡＭ
４  ＭＩＤＩインタフェース
５  マウス
６  キーボード
７  表示部
１０  ＤＴＭ装置
２０  電子楽器
【図１】
2004318019.tif 000003
【図２】
2004318019.tif 000004
【図３】
2004318019.tif 000005
【図４】
2004318019.tif 000006
【図５】
2004318019.tif 000007
【図６】
2004318019.tif 000008
【図７】
2004318019.tif 000009
【図８】
2004318019.tif 000010
【図９】
2004318019.tif 000011
【図１０】
2004318019.tif 000012
【図１１】
2004318019.tif 000013
【図１２】
2004318019.tif 000014
【図１３】
2004318019.tif 000015
【図１４】
2004318019.tif 000016
【図１５】
2004318019.tif 000017
【図１６】
2004318019.tif 000018
【図１７】
2004318019.tif 000019
【図１８】
2004318019.tif 000020
【図１９】
2004318019.tif 000021
【図２０】
2004318019.tif 000022
【図２１】
2004318019.tif 000023
【図２２】
2004318019.tif 000024
【図２３】
2004318019.tif 000025
【図２４】
2004318019.tif 000026
【図２５】
2004318019.tif 000027
【図２６】
2004318019.tif 000028
【図２７】
2004318019.tif 000029
【図２８】
2004318019.tif 000030
【図２９】
2004318019.tif 000031
【図３０】
2004318019.tif 000032
【図３１】
2004318019.tif 000033
【図３２】
2004318019.tif 000034
【図３３】
2004318019.tif 000035
【図３４】
2004318019.tif 000036
【図３５】
2004318019.tif 000037
【図３６】
2004318019.tif 000038
【図３７】
2004318019.tif 000039