(57)【要約】【課題】仲間を募ってバンドで共演するような演奏の楽しさや面白味を持たせて練習意欲を向上させる演奏練習装置を実現する。【解決手段】ＣＰＵ１１は、課題曲の演奏パートの曲データと、ユーザが当該演奏パートを演奏して発生する演奏データとの比較に基づきユーザの評価値を取得する。課題曲の演奏パートの難易度と演評価値とで得られる演奏得点に応じてユーザの演奏技量を更新する。更新されたユーザの演奏技量と各メンバ（伴奏パートを擬人化した呼称）の演奏技量とを比較し、更新によりユーザの演奏技量がレベルアップした場合にはユーザよりも演奏技量の高いメンバから「褒められる」評価を与え、一方、更新によりユーザの演奏技量がレベルダウンした場合にはユーザよりも演奏技量の高いメンバから「叱られる」評価を与える。これにより、あたかもバンドで共演するような演奏の楽しさや面白味を持たせて練習意欲の向上を図ることが出来る。【選択図】図１
2013054254.tif 000002
【特許請求の範囲】
【請求項１】
演奏パートおよび複数の伴奏パートから成る課題曲を構成する各音を表す曲データと、課題曲の演奏パートの難易度とを記憶する曲情報記憶手段と、
課題曲の演奏パートを演奏練習するユーザの演奏技量と、前記伴奏パート毎に割り当てられたメンバ夫々の演奏技量とを記憶する演奏技量記憶手段と、
曲進行に応じて前記曲情報記憶手段から読み出される課題曲の各伴奏パートの曲データを再生するメンバ伴奏手段と、
曲進行に応じて前記曲情報記憶手段から読み出される課題曲の演奏パートの曲データと、ユーザが当該演奏パートを演奏して発生する演奏データとの比較に基づきユーザの演奏を評価する評価値を取得する演奏評価値取得手段と、
前記曲情報記憶手段に記憶される課題曲の演奏パートの難易度と、前記演奏評価値取得手段により取得された評価値とで得られる演奏得点に応じて、前記演奏技量記憶手段に記憶されるユーザの演奏技量を更新するユーザ演奏技量更新手段と、
前記ユーザ演奏技量更新手段により更新されたユーザの演奏技量及び前記演奏技量記憶手段に記憶される各伴奏パートに割り当てられたメンバの演奏技量の相対関係に基づいた評価を与えるメンバ評価手段と、
を具備することを特徴とする演奏練習装置。
【請求項２】
前記メンバ評価手段は、前記ユーザ演奏技量更新手段により更新されたユーザの演奏技量と、前記演奏技量記憶手段に記憶される各メンバの演奏技量とを比較し、更新によりユーザの演奏技量がレベルアップした場合にはユーザよりも演奏技量の高いメンバから「褒められる」評価を与え、一方、更新によりユーザの演奏技量がレベルダウンした場合にはユーザよりも演奏技量の高いメンバから「叱られる」評価を与えることを特徴とする請求項１記載の演奏練習装置。
【請求項３】
前記演奏評価値取得手段は、少なくとも正答率、正しく弾けた音符における押鍵時間差および正しく弾けた音符における押鍵時間差の絶対値を、評価値として取得することを特徴とする請求項１記載の演奏練習装置。
【請求項４】
前記ユーザ演奏技量更新手段は、前記曲情報記憶手段に記憶される課題曲の演奏パートの難易度に、前記演奏評価値取得手段により取得された正答率を乗じて演奏得点を算出し、算出した演奏得点よりもユーザの演奏技量が高ければ、当該ユーザの演奏技量をレベルアップさせ、一方、算出した演奏得点よりもユーザの演奏技量が低ければ、当該ユーザの演奏技量をレベルダウンさせることを特徴とする請求項１記載の演奏練習装置。
【請求項５】
前記ユーザ演奏技量更新手段は、正しく弾けた音符における押鍵時間差および正しく弾けた音符における押鍵時間差の絶対値に基づき適正押鍵タイミング率を算出し、この適正押鍵タイミング率が所定値より小さく、かつユーザの演奏技量が前記曲情報記憶手段に記憶される課題曲の演奏パートの難易度より高ければ、ユーザの演奏技量をレベルアップさせ、一方、適正押鍵タイミング率が所定値より大きいか、あるいはユーザの演奏技量が前記曲情報記憶手段に記憶される課題曲の演奏パートの難易度より低ければ、ユーザの演奏技量をレベルダウンさせることを特徴とする請求項１記載の演奏練習装置。
【請求項６】
前記演奏技量記憶手段は、ユーザに対する各メンバの忠誠度を記憶し、
前記メンバ評価手段は、更新によりユーザの演奏技量がレベルアップした場合には、前記演奏技量記憶手段に記憶される各メンバの忠誠度の内、ユーザよりも演奏技量の低いメンバの忠誠度を上げ、一方、更新によりユーザの演奏技量がレベルダウンした場合には、前記演奏技量記憶手段に記憶される各メンバの忠誠度の内、ユーザよりも演奏技量の低いメンバの忠誠度を下げる忠誠度更新手段を備えることを特徴とする請求項１記載の演奏練習装置。
【請求項７】
前記演奏技量記憶手段に記憶される各メンバの忠誠度の内、所定値より小さい忠誠度のメンバを、ユーザとの共演から脱退を希望する脱退希望メンバとして検出する脱退希望メンバ検出手段を更に備えることを特徴とする請求項６記載の演奏練習装置。
【請求項８】
前記演奏技量記憶手段にユーザと共演する各メンバの他に、ユーザと共演しない他のメンバの演奏技量を記憶しておき、これら他のメンバの内、ユーザの演奏技量とのレベル差が所定以上のメンバを入替候補メンバとして抽出する入替候補メンバ抽出手段を更に備えることを特徴とする請求項６記載の演奏練習装置。
【請求項９】
演奏パートおよび複数の伴奏パートから成る課題曲を構成する各音を表す曲データと、課題曲の演奏パートの難易度とを記憶する曲情報記憶手段と、
課題曲の演奏パートを演奏練習するユーザの演奏技量と、前記伴奏パート毎に割り当てられたメンバ夫々の演奏技量とを記憶する演奏技量記憶手段とを備えた装置のコンピュータで実行されるプログラムであって、
曲進行に応じて前記曲情報記憶手段から読み出される課題曲の各伴奏パートの曲データを再生するメンバ伴奏ステップと、
曲進行に応じて前記曲情報記憶手段から読み出される課題曲の演奏パートの曲データと、ユーザが当該演奏パートを演奏して発生する演奏データとの比較に基づきユーザの演奏を評価する評価値を取得する演奏評価値取得ステップと、
前記曲情報記憶手段に記憶される課題曲の演奏パートの難易度と、前記演奏評価値取得ステップにより取得された評価値とで得られる演奏得点に応じて、前記演奏技量記憶手段に記憶されるユーザの演奏技量を更新するユーザ演奏技量更新ステップと、
前記ユーザ演奏技量更新手段により更新されたユーザの演奏技量及び前記演奏技量記憶手段に記憶される各伴奏パートに割り当てられたメンバの演奏技量の相対関係に基づいた評価を与えるメンバ評価手段ステップと
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子楽器などに用いて好適な演奏練習装置およびプログラムに関する。
【背景技術】
【０００２】
曲進行に同期して読み出される練習曲の曲データと、その練習曲の演奏操作に応じて発生する演奏データとを比較し、曲データと演奏データとが相違する演奏ミスを検出した場合に演奏練習態様を変化させる演奏練習装置が知られている。この種の装置として、例えば特許文献１には曲データと演奏データとを比較して演奏操作の誤りを検出した場合に、間違った箇所の演奏操作を繰り返し練習させる技術が開示され、また特許文献２には、練習する曲の自然な流れに対応したフレーズ中、最も間違った演奏をしたフレーズの先頭から演奏練習させる技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平７−２１９５３５号公報
【特許文献２】特開２００４−２０５９０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上記特許文献１，２に開示の技術は、間違えた箇所の演奏を繰り返したり、間違えたフレーズを先頭からやり直したりする独習に終始する為、単調で面白味に欠け、練習意欲の低下を招致する。言い換えれば、仲間を募ってバンドで共演するような演奏の楽しさや面白味を持たせて練習意欲の向上を図ることが出来ない、という問題がある。
【０００５】
本発明は、このような事情に鑑みてなされたもので、仲間を募ってバンドで共演するような演奏の楽しさや面白味を持たせて練習意欲の向上を図ることができる演奏練習装置およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明による演奏練習装置は、演奏パートおよび複数の伴奏パートから成る課題曲を構成する各音を表す曲データと、課題曲の演奏パートの難易度とを記憶する曲情報記憶手段と、課題曲の演奏パートを演奏練習するユーザの演奏技量と、前記伴奏パート毎に割り当てられたメンバ夫々の演奏技量とを記憶する演奏技量記憶手段と、曲進行に応じて前記曲情報記憶手段から読み出される課題曲の各伴奏パートの曲データを再生するメンバ伴奏手段と、曲進行に応じて前記曲情報記憶手段から読み出される課題曲の演奏パートの曲データと、ユーザが当該演奏パートを演奏して発生する演奏データとの比較に基づきユーザの演奏を評価する評価値を取得する演奏評価値取得手段と、前記曲情報記憶手段に記憶される課題曲の演奏パートの難易度と、前記演奏評価値取得手段により取得された評価値とで得られる演奏得点に応じて、前記演奏技量記憶手段に記憶されるユーザの演奏技量を更新するユーザ演奏技量更新手段と、前記ユーザ演奏技量更新手段により更新されたユーザの演奏技量及び前記演奏技量記憶手段に記憶される各伴奏パートに割り当てられたメンバの演奏技量の相対関係に基づいた評価を与えるメンバ評価手段とを具備することを特徴とする。
【発明の効果】
【０００７】
本発明では、仲間を募ってバンドで共演するような演奏の楽しさや面白味を持たせて練習意欲の向上を図ることが出来る。
【図面の簡単な説明】
【０００８】
【図１】実施の一形態による演奏練習装置１００の全体構成を示すブロック図である。
【図２】ＲＡＭ１３のメモリ構成を示すメモリマップである。
【図３】ユーザデータベースＵＤＢのデータ構成を示す図である。
【図４】メンバデータベースＭＤＢのデータ構成を示す図である。
【図５】曲データエリアＳＤＥのデータ構成を示す図である。
【図６】トラックデータエリアＰＤＥのデータ構成を示す図である。
【図７】音符データエリアＭＤＥのデータ構成を示す図である。
【図８】再生制御データエリアＲＣＤのデータ構成を示す図である。
【図９】発音中バッファＮＯＢのデータ構成を示す図である。
【図１０】メインルーチンの動作を示すフローチャートである。
【図１１】演奏モード処理の動作を示すフローチャートである。
【図１２】伴奏パート選択処理の動作を示すフローチャートである。
【図１３】再生処理スレッドの動作を示すフローチャートである。
【図１４】Ｔｉｃｋ時刻計算処理の動作を示すフローチャートである。
【図１５】発音処理の動作を示すフローチャートである。
【図１６】発音処理の動作を示すフローチャートである。
【図１７】消音処理の動作を示すフローチャートである。
【図１８】ＭＩＤＩ入力スレッドの動作を示すフローチャートである。
【図１９】発音中バッファ検索処理の動作を示すフローチャートである。
【図２０】パートデータ検索処理の動作を示すフローチャートである。
【図２１】評価結果計算処理の動作を示すフローチャートである。
【図２２】評価結果計算処理の動作を示すフローチャートである。
【図２３】メンバによる評価処理の動作を示すフローチャートである。
【図２４】メンバによる評価処理の動作を示すフローチャートである。
【図２５】メンバ入替候補処理の動作を示すフローチャートである。
【図２６】メンバ入替候補処理の動作を示すフローチャートである。
【図２７】演奏評価画面ＰＥＤの一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、図面を参照して本発明の実施形態について説明する。
Ａ．全体構成  
図１は、本発明の実施の一形態による演奏練習装置１００の全体構成を示すブロック図である。この図において、操作部１０は、装置動作を終了させる終了スイッチ、演奏モード処理（後述する）の実行を指示する演奏スイッチおよび訓練モード処理（後述する）の実行を指示する訓練スイッチなどを備え、これらスイッチの各操作に応じた操作イベントを発生してＣＰＵ１１に供給する。ＣＰＵ１１は、ＲＯＭ１２に格納される各種プログラムを実行して装置各部を制御する。本発明の要旨に係わるＣＰＵ１１の特徴的名処理動作については追って述べる。
【００１０】
ＲＯＭ１２は、ＣＰＵ１１にロードされる各種制御プログラムを記憶する。各種制御プログラムとは、後述するメインルーチンおよび当該メインルーチンからコールされる演奏モード処理を含む。演奏モード処理は、伴奏パート選択処理、再生処理スレッド、ＭＩＤＩ入力スレッド、評価結果計算処理、メンバによる評価処理およびメンバ入替候補処理から構成される。なお、再生処理スレッドはＴｉｃｋ時刻計算処理、発音処理および消音処理を含む。ＭＩＤＩ入力処理スレッドは、発音中バッファ検索処理およびパートデータ検索処理を含む。
【００１１】
ＲＡＭ１３は、図２に図示するように、ＣＰＵ１１の処理に用いられる各種レジスタ・フラグデータを一時記憶するワークエリアＷＥの他、ユーザデータベースＵＤＢ、メンバデータベースＭＤＢ、曲データエリアＳＤＥ、トラックデータエリアＰＤＥ、音符データエリアＭＤＥ、再生制御データＲＣＤおよび発音中バッファＮＯＢを備える。ワークエリアＷＥを除く上記各エリアに格納される主要なデータ構成については追って述べる。
【００１２】
表示部１４は、ＣＰＵ１１の制御の下に、例えば演奏練習する曲データを楽譜表示したり、図２７〜図２８に図示する一例の演奏評価画面ＰＤＥ１、ＰＥＤ２を画面表示する。ＭＩＤＩインタフェース部１５は、課題となる曲を演奏練習するユーザの演奏操作に応じて、外部のＭＩＤＩ楽器から出力される演奏データ（ＭＩＤＩイベント）を、ＣＰＵ１１の制御の下に取り込む。音源１６は、公知の波形メモリ読み出し方式で構成され、ＣＰＵ１１の制御の下に、ＭＩＤＩインタフェース部１５を介して取り込まれた演奏データ（ＭＩＤＩイベント）に応じた楽音データを発生する。サウンドシステム１７は、音源１６が生成した楽音データをアナログ形式の楽音信号に変換すると共に、その楽音信号に対してノイズ除去やレベル制御を施した後、スピーカから楽音として発音させる。
【００１３】
Ｂ．ＲＡＭ１３のデータ構成
次に、図３〜図９を参照してＲＡＭ１３のユーザデータベースＵＤＢ、メンバデータベースＭＤＢ、曲データエリアＳＤＥ、トラックデータエリアＰＤＥ、音符データエリアＭＤＥ、再生制御データｐｌａｙｅｒおよび発音中バッファエリアＯＢＥにそれぞれ格納される各種データの構成について説明する。
【００１４】
（１）ユーザデータベースＵＤＢの構成
図３は、ＲＡＭ１３のユーザデータベースＵＤＢの構成を示す図である。ユーザデータベースＵＤＢは、本装置１００を使用する各ユーザの属性を表すユーザデータｕｓｅｒ［０］〜ｕｓｅｒ［Ｎ］から構成される。１つのユーザデータｕｓｅｒ［  ］は、識別データＩＤ、ユーザ名Ｎａｍｅ、フレーズ演奏技量（熟練度）を表すフレーズスキルＰｈｒａｓｅＬｖ、リズム演奏技量（熟練度）を表すリズムスキルＲｈｙｔｈｍＬｖ、練習回数ＰｒａｃｔｉｃｅＣｎｔ、練習ポイントＰｒａｃｔｉｃｅＰｔ、メンバＭｅｍｂｅｒ（後述する）、前ユーザデータを指定するポインタｐｒｅｖおよび次ユーザデータを指定するポインタｎｅｘｔから構成される。
【００１５】
メンバＭｅｍｂｅｒとは、伴奏パートを擬人化した呼称であり、ユーザが演奏パートを演奏練習する際に、あたかもバンドで共演するかのように複数のメンバ（伴奏パート）が登録される。１つのメンバＭｅｍｂｅｒｓ［  ］は、メンバ忠誠度Ｌｏｙａｌｔｙおよびメンバ状態Ｓｔａｔｕｓを備える。メンバ忠誠度Ｌｏｙａｌｔｙは、「−」の場合に低い忠誠度（メンバから脱退したい）を表し、「０」の場合に中立の忠誠度を表し、「＋」の場合に高い忠誠度（メンバを続けたい）を表す。メンバ状態Ｓｔａｔｕｓは、「−１」の場合にメンバからの脱退希望の状態を表し、「０」の場合に特に無しの状態を表し、「１」の場合にメンバ参加に前向きの状態を表す。
【００１６】
（２）メンバデータベースＭＤＢの構成
図４は、メンバデータベースＭＤＢの構成を示す図である。メンバデータベースＭＤＢは、擬人化した伴奏パートの属性を表すメンバデータＭｅｍｂｅｒｓ[０]〜Ｍｅｍｂｅｒｓ[Ｎ]から構成される。１つのメンバデータＭｅｍｂｅｒｓ［  ］は、識別データＩＤ、メンバ名Ｎａｍｅ、楽器番号ＩｎｓｔｒＩＤ、パートデータ配列番号ｉＴｒａｃｋＩＤ、フレーズスキルＰｈｒａｓｅＬｖ、リズムスキルＲｈｙｔｈｍＬｖ、フラグｉＦｌａｇ、演奏評価ＬａｓｔＣｏｍｍｅｎｔおよび性格Ｃｈａｒａｃｔｅｒを備える。
【００１７】
（３）曲データエリアＳＤＥの構成
図５は、曲データエリアＳＤＥの構成を示す図である。曲データエリアＳＤＥは、演奏練習の課題となる曲の内容を表す曲データＳｏｎｇｓ[０]〜Ｓｏｎｇｓ[Ｎ]から構成される。１つの曲データＳｏｎｇｓ[  ]は、識別データＩＤ、曲名Ｎａｍｅ、フレーズスキルＰｈｒａｓｅＬｖ、リズムスキルＲｈｙｔｈｍＬｖ、演奏パートトラックポインタＰｌａｙＴｒａｃｋ、伴奏パートトラックポインタＡｃｃｏｍｐＴｒａｃｋ、マスタートラックポインタＭａｓｔｅｒＴｒａｃｋ、次の曲データを指定するポインタｐｒｅｖおよび次の曲データを指定するポインタｎｅｘｔから構成される。
【００１８】
（４）トラックデータエリアＰＤＥの構成
図６は、トラックデータエリアＰＤＥの構成を示す図である。トラックデータエリアＰＤＥは、曲データＳｏｎｇｓ中の演奏パートトラックポインタＰｌａｙＴｒａｃｋおよび伴奏パートトラックポインタＡｃｃｏｍｐＴｒａｃｋで指定されるパートトラックと、曲データＳｏｎｇｓ中のマスタートラックポインタＭａｓｔｅｒＴｒａｃｋで指定されるマスタートラックとから構成される。
【００１９】
パートトラックは、パートトラックデータＴｒａｃｋ[０]〜Ｔｒａｃｋ[Ｎ]から構成される。１つのパートトラックデータＴｒａｃｋ[  ]は、配列番号ＴｒａｃｋＩＤ、トラック種類ｉＴｒａｃｋＴｙｐｅ（１：演奏パート、２：伴奏パート）、トラック選択状況ｉＰｌａｙＴｙｐｅ（０：選択なし、１：演奏パート、２：伴奏パート）、トラック先頭の音符データを指定する音符ポインタｐＦｉｒｓｔＭｅ、楽器番号ＩｎｓｔｒＩＤ、フレーズスキルＰｈｒａｓｅＬｖおよびリズムスキルＲｈｙｔｈｍＬｖから構成される。
【００２０】
マスタートラックは、テンポデータＴｅｍｐｏ[０]〜Ｔｅｍｐｏ[Ｎ]から構成される。１つのテンポデータＴｅｍｐｏ[  ]は、テンポ変更Ｔｉｃｋ時間ｌＴｉｍｅ、テンポ値ｉＴｅｍｐｏ、前のテンポデータを指定するポインタｐｒｅｖおよび次のテンポデータを指定するポインタｎｅｘｔから構成される。
【００２１】
（５）音符データエリアＭＤＥの構成
図７は、音符データエリアＭＤＥの構成を示す図である。音符データエリアＭＤＥは、音符データＭｉｄｉＥｖｅｎｔ[０]〜ＭｉｄｉＥｖｅｎｔ[Ｎ]から構成される。１つの音符データＭｉｄｉＥｖｅｎｔ[  ]は、発音開始ティックｌＴｉｍｅ、ゲートタイムｌＧａｔｅ、ピッチＰｉｔｃｈ、ベロシティＶｅｌ、前音符データを指定するポインタｐｒｅｖおよび次音符データを指定するポインタｎｅｘｔから構成される。
【００２２】
（６）再生制御データｐｌａｙｅｒの構成
図８は、再生制御データｐｌａｙｅｒの構成を示す図である。再生制御データｐｌａｙｅｒは、現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋ、各トラックの次の音符データＭｉｄｉＥｖｅｎｔｓ[  ]、テンポ値ｉＮｏｅＴｅｍｐｏ、最後にＴｉｃｋ時刻を更新したシステム時刻ｌＴｉｃｋＵｐｄａｔｅ、再生中断用フラグｉｎｔｅｒｒｕｐｔｉｏｎ、再生中に発音した伴奏パートの音符数ｉＮｏｔｅＣｏｕｎｔ、再生中に正しく弾けた音符数ｉＯＫＣｏｕｎｔ、再生中に正しく弾けた音符における押鍵時間差ｌＫｅｙＯｎＤｉｆ、再生中に正しく弾けた音符における押鍵時間差（絶対値）ｌＫｅｙＯｎＡＢＳＤｉｆ、発音中バッファエリアＯＢＥの音符データｍｅＰｌａｙｉｎｇ[  ]および状態フラグｉＳｔａｔｕｓ（０：再生停止、１：再生中）から構成される。
【００２３】
（７）発音中バッファエリアＯＢＥの構成
図９は、発音中バッファエリアＯＢＥの構成を示す図である。発音中バッファエリアＯＢＥには、発音中の音符データｍｅＰｌａｙｉｎｇ[０]〜ｍｅＰｌａｙｉｎｇ[Ｎ]が格納される。１つの音符データｍｅＰｌａｙｉｎｇ[  ]は、音符データエリアＭＤＥ中で該当する音符データＭｉｄｉＥｖｅｎｔを指定する音符ポインタｐＭｅおよび押鍵フラグｉＳｔａｔｕｓ（０：押鍵なし、１：押鍵有り）から構成される。
【００２４】
Ｂ．動作
次に、図１０〜図２８を参照して上記構成による演奏練習装置１００の動作について説明する。以下では、演奏練習装置１００のＣＰＵ１１が実行するメインルーチンおよび当該メインルーチンからコールされる演奏モード処理の各動作を説明する。なお、演奏モード処理は、伴奏パート選択処理、再生処理スレッド、ＭＩＤＩ入力処理スレッド、評価結果計算処理、メンバによる評価処理およびメンバ入替候補処理から構成される。また、再生処理スレッドはＴｉｃｋ時刻計算処理、発音処理および消音処理を含み、ＭＩＤＩ入力処理スレッドは発音中バッファ検索処理およびパートデータ検索処理を含む。
【００２５】
（１）メインルーチンの動作
上記構成による演奏練習装置１００がパワーオンされると、ＣＰＵ１１は図１０に図示するメインルーチンを実行してステップＳＡ１に進み、ＲＡＭ１３のワークエリアＷＥに格納される各種レジスタやフラグデータをゼロリセットしたり初期値セットしたりするイニシャライズを行う。イニシャライズが完了すると、ステップＳＡ２に進み、ＲＡＭ１３のユーザデータベースＵＤＢに登録されるユーザデータｕｓｅｒ［０］〜ｕｓｅｒ［Ｎ］の内、演奏練習するユーザ自身のユーザデータｕｓｅｒ［  ］を選択する。
【００２６】
続いて、ステップＳＡ３〜ＳＡ４では、操作部１０に配設される終了スイッチ、演奏スイッチおよび訓練スイッチの操作の有無を判別する。ユーザが終了スイッチをオン操作した場合には、ステップＳＡ３の判断結果が「ＹＥＳ」になり、本処理を終える。ユーザが演奏スイッチをオン操作した場合には、ステップＳＡ４の判断結果が「ＹＥＳ」になり、ステップＳＡ６に進み、脱退希望メンバの存在の有無を判断する。メンバとは、伴奏パートを擬人化した呼称である。メンバの脱退希望とは、演奏練習の評価結果で得られるユーザの演奏技量（フレーズスキルＰｈｒａｓｅＬｖ、リズムスキルＲｈｙｔｈｍＬｖ）がメンバより低い状態が継続し、メンバから「がっかり」される評価を一定量以上与えられた場合に、ユーザに対して更なる演奏練習の必要性を促す為にメンバがバンドからの脱退を言い渡すものである。
【００２７】
そして、脱退希望メンバが存在すると、上記ステップＳＡ６の判断結果が「ＹＥＳ」になり、ステップＳＡ７に進み、ユーザの演奏技量を向上させる訓練モード処理を実行した後、上述のステップＳＡ３に処理を戻す。一方、脱退希望メンバが存在しない場合には、上記ステップＳＡ６の判断結果は「ＮＯ」になり、ステップＳＡ８を介して演奏モード処理（後述する）を実行した後、上述のステップＳＡ３に処理を戻す。
【００２８】
（２）演奏モード処理の動作
次に、図１１を参照して演奏モード処理の動作を説明する。上述したメインルーチンのステップＳＡ８（図１０参照）を介して本処理が実行されると、ＣＰＵ１１は図１１に図示するステップＳＢ１に進み、ＲＡＭ１３の曲データエリアＳＤＥに記憶される曲データＳｏｎｇｓ[０]〜Ｓｏｎｇｓ[Ｎ]の中からユーザが指定するレベルの演奏技量（フレーズスキルＰｈｒａｓｅＬｖ、リズムスキルＲｈｙｔｈｍＬｖ）を備える曲データＳｏｎｇｓ[  ]を選択する。
【００２９】
次いで、ステップＳＢ２では、選択した曲データＳｏｎｇｓ[  ]の内容、すなわち図５に図示する識別データＩＤ、曲名Ｎａｍｅ、フレーズスキルＰｈｒａｓｅＬｖ、リズムスキルＲｈｙｔｈｍＬｖ、演奏パートトラックポインタＰｌａｙＴｒａｃｋ、伴奏パートトラックポインタＡｃｃｏｍｐＴｒａｃｋ、マスタートラックポインタＭａｓｔｅｒＴｒａｃｋ、次の曲データを指定するポインタｐｒｅｖおよび次の曲データを指定するポインタｎｅｘｔを読み込みＲＡＭ１３のワークエリアＷＥに一時記憶する。
【００３０】
続いて、ステップＳＢ３に進むと、ユーザに登録された全てのメンバに伴奏パートをアサインする伴奏パート選択処理を実行する。この後、ステップＳＢ４に進み、再生処理スレッドを起動させる。再生処理スレッドでは、後述するように、課題曲の演奏パートおよび伴奏パートの進行を管理すると共に、伴奏パートトラックの各音を再生する。
【００３１】
次いで、ステップＳＢ５では、ＭＩＤＩ入力処理スレッドを起動させる。ＭＩＤＩ入力処理スレッドでは、後述するように、演奏練習するユーザの演奏操作に従って外部ＭＩＤＩ楽器が出力する演奏情報（ノートオンメッセージ）を受信し、当該演奏情報に応じた楽音を発音させる一方、受信した演奏情報（ノートオンメッセージ）が演奏パートの音符データと一致するかどうかを発音中バッファおよびパートトラックの双方から検索し、その検索結果に基づきユーザの演奏を評価するための評価値（正しく弾けた音符数ｉＯＫＣｏｕｎｔ、正しく弾けた音符における押鍵時間差ｌＫｅｙＯｎＤｉｆおよび正しく弾けた音符における押鍵時間差（絶対値）ｌＫｅｙＯｎＡＢＳＤｉｆ）を算出する。
【００３２】
続いて、ステップＳＢ６では、課題終端（曲の終わり）まで演奏したか否かを判断する。課題終端に達していなければ、判断結果は「ＮＯ」になり、ステップＳＢ７に進み、ユーザによる中断指示の有無を判断する。中断指示が無ければ、判断結果は「ＮＯ」になり、上記ステップＳＢ６に処理を戻す。以後、課題終端に達するか、あるいは中断指示が発生するまでステップＳＢ６〜ＳＢ７を繰り返す。そして、課題終端に達するか、あるいは中断指示が発生すると、上記ステップＳＢ６、ＳＢ７の何れかの判断結果が「ＹＥＳ」になり、ステップＳＢ８に進む。
【００３３】
ステップＳＢ８では、評価結果計算処理を実行する。評価結果計算処理では、後述するように、課題曲の演奏パートの難易度に相当するフレーズスキルＰｈｒａｓｅＬｖに、演奏練習したユーザの正答率（ｐｌａｙｅｒ．ｉＯＫＣｏｕｎｔ／ｐｌａｙｅｒ．ｉＮｏｔｅＣｏｕｎｔ）を乗じて算出した演奏評価スコアｉＳｃｏｒｅよりユーザのフレーズスキルＰｈｒａｓｅＬｖが高ければ、ユーザのフレーズスキルＰｈｒａｓｅＬｖをレベルアップ（＋１）させ、一方、演奏評価スコアｉＳｃｏｒｅよりユーザのフレーズスキルＰｈｒａｓｅＬｖが低いと、ユーザのフレーズスキルＰｈｒａｓｅＬｖをレベルダウン（−１）させる。
【００３４】
また、正しく弾けた一音符当たりの平均押鍵時間差（再生制御データｐｌａｙｅｒ中のｉＯＫＣｏｕｎｔ／再生制御データｐｌａｙｅｒ中のｌＫｅｙＯｎＡＢＳＤｉｆ）を判定許容時間で除した値を「１」から減算して適正押鍵タイミング率ｉＳｃｏｒｅを算出し、この適正押鍵タイミング率ｉＳｃｏｒｅが「０．５」より小さく、かつユーザのリズムスキルＲｈｙｔｈｍＬｖが演奏パートのリズムスキルＲｈｙｔｈｍＬｖより高ければ、ユーザのリズムスキルＲｈｙｔｈｍＬｖをレベルアップ（＋１）させ、一方、適正押鍵タイミング率ｉＳｃｏｒｅが「０．５」より大きいか、あるいはユーザのリズムスキルＲｈｙｔｈｍＬｖが演奏パートのリズムスキルＲｈｙｔｈｍＬｖより低いと、ユーザのリズムスキルＲｈｙｔｈｍＬｖをレベルダウン（−１）させる。
【００３５】
次いで、ステップＳＢ９では、上記ステップＳＢ８の評価結果計算処理によってユーザのフレーズ演奏技量（フレーズスキルＰｈｒａｓｅＬｖ）又はリズム演奏技量（リズムスキルＲｈｙｔｈｍＬｖ）の何れかがレベルアップしたと評価された場合には、ユーザよりもスキルの低いメンバの忠誠度Ｌｏｙａｌｔｙを上げ、ユーザよりもスキルの高いメンバから「褒められる」評価を与え、一方、ユーザのフレーズ演奏技量又はリズム演奏技量の何れかがレベルダウンしたと評価された場合には、ユーザよりもスキルの低いメンバの忠誠度Ｌｏｙａｌｔｙを下げ、ユーザよりもスキルの高いメンバから「叱られる」評価を与えるメンバによる評価処理を実行する。
【００３６】
続いて、ステップＳＢ１０では、メンバ入替候補処理を実行する。メンバ入替候補処理では、後述するように、ユーザのバンドに参加しているメンバ（ユーザデータｕｓｅｒに登録されたメンバＭｅｍｂｅｒ）の中からメンバ忠誠度Ｌｏｙａｌｔｙが閾値ＤＲＡＷＡＬより小さい脱退希望メンバを探し出して脱退希望リストに登録する一方、ユーザデータｕｓｅｒに未登録（バンド不参加）のメンバの内、メンバの演奏技量とユーザの演奏技量の差が入替レベル差ＣＮＧ＿ＬＶを超えるメンバを入替候補として探し出し、この入替候補の中からフレーズ演奏技量又はリズム演奏技量の何れかがレベルアップしたユーザよりも優れた演奏技量を持つメンバや、フレーズ演奏技量又はリズム演奏技量の何れかがレベルダウンしたユーザよりも劣る演奏技量を持つメンバを参加希望リストに登録する。
【００３７】
そして、ステップＳＢ１１に進むと、上記ステップＳＢ１０において脱退希望リストあるいは参加希望リストに登録されたメンバが生じた場合に、メンバの脱退あるいは新規参加させるメンバ変更指示する操作イベントの有無を判断する。メンバ変更指示する操作イベントが発生しなければ、判断結果は「ＮＯ」となり、本処理を終えるが、メンバ変更指示する操作イベントが発生すると、ステップＳＢ１２に進み、ユーザデータｕｓｅｒに登録されたメンバＭｅｍｂｅｒの脱退や新たなメンバＭｅｍｂｅｒを登録するプロファイル更新を行った後、本処理を終える。
【００３８】
（３）伴奏パート選択処理の動作
次に、図１２を参照して伴奏パート選択処理の動作を説明する。上述した演奏モード処理のステップＳＢ３を介して本処理が実行されると、ＣＰＵ１１は図１２に図示するステップＳＣ１に進み、ユーザ自身のユーザデータｕｓｅｒ中のメンバデータＭｅｍｂｅｒｓ（図３参照）を指定するポインタｕｓｅｒ．Ｍｅｍｂｅｒｓを、メンバ検索ポインタｍｅｍにセットする。続いて、ステップＳＣ２では、メンバ検索ポインタｍｅｍが「ＮＵＬＬ」、つまりユーザに登録されたメンバの全てを検索し終えたか否かを判断する。
【００３９】
ユーザに登録されたメンバの全てを検索し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＣ３に進む。ステップＳＣ３では、メンバ検索ポインタｍｅｍで指定されるメンバデータＭｅｍｂｅｒｓ中のパートデータ配列番号ｉＴｒａｃｋＩＤで表されるパートトラックデータＴｒａｃｋ[ｍｅｍ．ｉＴｒａｃｋＩＤ]をポインタｔｒにセットする。そして、ステップＳＣ４では、このポインタｔｒで指定されるパートトラックデータＴｒａｃｋ中のトラック選択状況ｉＰｌａｙＴｙｐｅ（ｔｒ．ｉＰｌａｙＴｙｐｅ）に伴奏パートを示す「２」をストアする。
【００４０】
次いで、ステップＳＣ５に進むと、次のメンバを検索すべくメンバ検索ポインタｍｅｍを更新（ｍｅｍ．ｎｅｘｔ）した後、上述のステップＳＣ２に処理を戻す。以後、ユーザに登録されたメンバの全てを検索し終える迄、上記ステップＳＣ２〜ＳＣ５を繰り返すことによって、ユーザに登録された全てのメンバのに伴奏パートをアサインする。そして、更新されたメンバ検索ポインタｍｅｍ．ｎｅｘｔで指定されるデータが「ＮＵＬＬ」となり、ユーザに登録されたメンバの全てを検索し終えると、上記ステップＳＣ２の判断結果が「ＹＥＳ」となり、本処理を終える。
【００４１】
（４）再生処理スレッドの動作
次に、図１３を参照して再生処理スレッドの動作を説明する。前述した演奏モード処理のステップＳＢ４（図１１参照）を介して本処理が起動されると、ＣＰＵ１１は図１３に図示するステップＳＤ１に進み、再生用変数を初期化し、続くステップＳＤ２では、再生開始Ｔｉｃｋ時刻を、再生制御データｐｌａｙｅｒ中の現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋ（図８参照）にストアする。次いで、ステップＳＤ３では、トラック検索ポインタｉＴｒに初期値「０」をセットする。
【００４２】
そして、ステップＳＤ４に進むと、トラック検索ポインタｉＴｒが最大トラック数ＭＡＸ＿ＴＲＡＣＫより小さいか否か、すなわちトラック検索中であるかどうかを判断する。トラック検索中ならば、判断結果は「ＹＥＳ」になり、ステップＳＤ５に進み、トラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ［ｉＴｒ］中の音符ポインタｐＦｉｒｓｔＭｅ（Ｔｒａｃｋ［ｉＴｒ］．ｐＦｉｒｓｔＭｅ）、つまりトラック検索ポインタｉＴｒで指定されるパートトラック先頭の音符データを指定するポインタをポインタｍｅにストアする。
【００４３】
続いて、ステップＳＤ６では、ポインタｍｅで指定される音符データＭｉｄｉＥｖｅｎｔ中の発音開始ティックｌＴｉｍｅ（ｍｅ．ｌＴｉｍｅ）が、再生制御データｐｌａｙｅｒ中の現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋ（ｐｌａｙｅｒ．ｌＮｏｗＴｉｃｋ）より小さいか否か、つまりポインタｍｅで指定される音符データＭｉｄｉＥｖｅｎｔが未発音であるかどうかを判断する。
【００４４】
ポインタｍｅで指定される音符データＭｉｄｉＥｖｅｎｔが発音タイミングを過ぎて発音済みならば、上記ステップＳＤ６の判断結果は「ＮＯ」になり、ステップＳＤ７に進み、次の音符データＭｉｄｉＥｖｅｎｔを指定させるべくポインタｍｅを更新（ｍｅ．ｎｅｘｔ）させた後、上記ステップＳＤ６に処理を戻す。
【００４５】
そして、ポインタｍｅで指定される音符データＭｉｄｉＥｖｅｎｔが発音タイミングに達しておらず未発音であると、上記ステップＳＤ６の判断結果が「ＹＥＳ」になり、ステップＳＤ８に進む。ステップＳＤ８では、ポインタｍｅを、再生制御データｐｌａｙｅｒ中の、トラック検索ポインタｉＴｒで指定されるトラックの次の音符データＭｉｄｉＥｖｅｎｔｓ[ｉＴｒ]としてストアする。
【００４６】
この後、ステップＳＤ９に進み、次のパートトラックについて検索する為、トラック検索ポインタｉＴｒをインクリメントして歩進させた後、上述のステップＳＤ４に処理を戻す。以後、歩進されたトラック検索ポインタｉＴｒが最大トラック数ＭＡＸ＿ＴＲＡＣＫを超える迄、上述のステップＳＤ５〜ＳＤ６の処理を繰り返すことによって、各パートトラックにおける次の音符データＭｉｄｉＥｖｅｎｔを指定するポインタｍｅが再生制御データｐｌａｙｅｒ．ＭｉｄｉＥｖｅｎｔｓ［ｉＴｒ］としてセットされる。
【００４７】
そして、トラック検索ポインタｉＴｒが最大トラック数ＭＡＸ＿ＴＲＡＣＫを超えてトラック検索が完了すると、上記ステップＳＤ４の判断結果が「ＮＯ」になり、ステップＳＤ１０に進む。ステップＳＤ１０では、再生制御データｐｌａｙｅｒ中の現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋ（ｐｌａｙｅｒ．ｌＮｏｗＴｉｃｋ）が、曲データ末尾以前であるか否かを判断する。曲データ末尾を超えて演奏練習の終了になると、判断結果は「ＮＯ」になり、ステップＳＤ１５に進み、オールノートオフを音源１６に指示して発音中の全ての楽音を消音させて本処理を終える。
【００４８】
一方、再生制御データｐｌａｙｅｒ中の現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋ（ｐｌａｙｅｒ．ｌＮｏｗＴｉｃｋ）が、曲データ末尾以前の場合、すなわち演奏練習中であると、上記ステップＳＤ１０の判断結果は「ＹＥＳ」になり、ステップＳＤ１１に進む。ステップＳＤ１１では、曲の進行を管理するＴｉｃｋ時刻を生成するＴｉｃｋ時刻計算処理（後述する）を実行する。続いて、ステップＳＤ１２では、発音タイミングとなった伴奏パートトラックの各音を発音させながら、発音した伴奏パートの音符数ｉＮｏｔｅＣｏｕｎｔを計数する発音処理（後述する）を実行する。次いで、ステップＳＤ１３では、消音タイミングとなった伴奏パートトラックの各音を消音させる消音処理（後述する）を実行する。
【００４９】
そして、ステップＳＤ１４に進むと、再生制御データｐｌａｙｅｒ中の再生中断用フラグｉｎｔｅｒｒｕｐｔｉｏｎ（図８参照）が「ＦＡＬＳＥ」であるか否か、すなわちユーザにより再生中断操作が為されていないかどうかを判断する。再生中断操作が為されていない場合には、判断結果が「ＹＥＳ」になり、上述のステップＳＤ１０に処理を戻すが、再生中断操作が為された場合には、判断結果が「ＮＯ」になり、ステップＳＤ１５に進み、音源１６にオールノートオフを指示して本処理を終える。
【００５０】
（５）Ｔｉｃｋ時刻計算処理の動作
次に、図１４を参照してＴｉｃｋ時刻計算処理の動作を説明する。上述した再生処理スレッドのステップＳＤ１１（図１３参照）を介して本処理が実行されると、ＣＰＵ１１は図１４に図示するステップＳＥ１に進み、再生制御データｐｌａｙｅｒにおける発音中の音符データｍｅＰｌａｙｉｎｇ[  ]にて指定される発音中バッファの押鍵フラグｉＳｔａｔｕｓが「１」、つまり発音すべき音が押鍵されているかどうかを判断する。押鍵されていなければ、判断結果は「ＮＯ」になり、本処理を終えるが、押鍵されていると、判断結果は「ＹＥＳ」になり、ステップＳＥ２に進む。
【００５１】
ステップＳＥ２では、ＣＰＵ１１が計時するシステム時刻から再生制御データｐｌａｙｅｒ中のシステム時刻ｉＴｉｃｋＵｐｄａｔｅ（ｐｌａｙｅｒ．ｌＴｉｃｋＵｐｄａｔｅ：最後にＴｉｃｋ時刻を更新したシステム時刻）を差し引いた時刻差ｌＳｙｓＧａｔｅを算出する。続いて、ステップＳＥ３では、次式（１）に基づき上記ステップＳＥ２で算出した時刻差ｌＳｙｓＧａｔｅを、テンポ値Ｔｅｍｐｏに応じたＴｉｃｋ値（ｌＴｉｃｋＴｍｐ）に変換する。
ｌＴｉｃｋＴｍｐ＝（６００００／Ｔｅｍｐｏ／Ｒｅｓｏｌｕｔｉｏｎ／ｌＳｙｓＧａｔｅ）…（１）
なお、上記（１）式において、Ｒｅｓｏｌｕｔｉｏｎは分解能を表す。
【００５２】
次いで、ステップＳＥ４では、上記ステップＳＥ３において算出されたｌＴｉｃｋＴｍｐが「０」より大きいか否かを判断する。算出されたｌＴｉｃｋＴｍｐが「０」より小さければ、判断結果は「ＮＯ」になり、本処理を終えるが、「０」より大きいと、判断結果は「ＹＥＳ」になり、ステップＳＥ５に進み、再生制御データｐｌａｙｅｒ中のシステム時刻ｉＴｉｃｋＵｐｄａｔｅ（ｐｌａｙｅｒ．ｌＴｉｃｋＵｐｄａｔｅ）をシステム時刻に更新する。そして、ステップＳＥ６に進み、再生制御データｐｌａｙｅｒ中の現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋに、上記ステップＳＥ３で算出したｌＴｉｃｋＴｍｐを加算し、当該現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋを更新して本処理を終える。これにより、演奏開始時点からの経過時間を表す現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋが生成される。
【００５３】
（６）発音処理の動作
次に、図１５〜図１６を参照して発音処理の動作を説明する。前述した再生処理スレッドのステップＳＤ１２（図１３参照）を介して本処理が実行されると、ＣＰＵ１１は図１５に図示するステップＳＦ１に進み、トラック検索ポインタｉＴｒをゼロリセットし、続くステップＳＦ２では、トラック検索ポインタｉＴｒが最大トラック数ＭＡＸ＿ＴＲＡＣＫより小さいか否か、すなわちトラック検索中であるかどうかを判断する。全てのパートトラックについて検索し終えると、判断結果が「ＮＯ」となり、本処理を終えるが、トラック検索中であれば、判断結果は「ＹＥＳ」になり、ステップＳＦ３に進み、トラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]中のトラック選択状況ｉＰｌａｙＴｙｐｅが「２」、つまり選択された曲の伴奏パートであるかどうかを判断する。
【００５４】
トラック検索ポインタｉＴｒで指定されるパートが選択された曲の伴奏パートでなければ、判断結果は「ＮＯ」となり、ステップＳＦ４に進み、トラック検索ポインタｉＴｒをインクリメントして歩進させた後、上述のステップＳＦ２に処理を戻す。そして、例えば歩進されたトラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]中のトラック選択状況ｉＰｌａｙＴｙｐｅが「２」、つまり選択された曲の伴奏パートであると、上記ステップＳＦ３の判断結果は「ＹＥＳ」になり、ステップＳＦ５に進む。
【００５５】
ステップＳＦ５では、再生制御データｐｌａｙｅｒ中の音符データＭｉｄｉＥｖｅｎｔｓ[ｉＴｒ]をポインタｍｅにセットする。このポインタｍｅは、トラック検索ポインタｉＴｒで指定されるパートトラックにおける次の音符データを指し示す。この後、図１６に図示するステップＳＦ６に進み、ポインタｍｅで指定される音符データＭｉｄｉＥｖｅｎｔ中の発音開始ティックｌＴｉｍｅが、再生制御データｐｌａｙｅｒ中の現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋより小さいか否か、つまり発音タイミング前であるかどうかを判断する。発音タイミング後であれば、上記ステップＳＦ６の判断結果は「ＮＯ」になり、前述のステップＳＦ４（図１５参照）に処理を戻してトラック検索ポインタｉＴｒを歩進させ、次のトラック検索を進める。
【００５６】
一方、発音タイミング前ならば、上記ステップＳＦ６の判断結果は「ＹＥＳ」になり、ステップＳＦ７に進み、バッファ検索ポインタｉをゼロリセットする。続いて、ステップＳＦ８では、バッファ検索ポインタｉの値が、再生制御データｐｌａｙｅｒ中の音符データｍｅＰｌａｙｉｎｇ[  ]の配列数（発音数）より小さいか否かを判断する。バッファ検索ポインタｉの値が発音数を超えると、判断結果は「ＮＯ」になり、後述のステップＳＦ１２に進むが、バッファ検索ポインタｉの値が発音数より小さければ、判断結果は「ＹＥＳ」になり、ステップＳＦ９に進む。
【００５７】
ステップＳＦ９では、再生制御データｐｌａｙｅｒ中の音符データｍｅＰｌａｙｉｎｇ[ｉ]をポインタｍｅｐ１にストアする。次いで、ステップＳＦ１０では、発音中バッファエリアＯＢＥにおいてポインタｍｅｐ１で指定される音符データｍｅＰｌａｙｉｎｇ[ｍｅｐ１]の音符ポインタｐＭｅが「ＮＵＬＬ」であるか否か、つまり音符ポインタｐＭｅで指定される音符の音が消音されているかどうかを判断する。音符ポインタｐＭｅで指定される音符の音が消音されていると、判断結果は「ＹＥＳ」になり、ステップＳＦ１１に進み、ポインタｉをインクリメントして歩進させた後、上述のステップＳＦ８に処理を戻す。
【００５８】
これに対し、音符ポインタｐＭｅで指定される音符の音が消音されていなければ、上記ステップＳＦ１０の判断結果は「ＮＯ」になり、ステップＳＦ１２に進み、発音中バッファエリアＯＢＥにおいてポインタｍｅｐ１で指定される音符データｍｅＰｌａｙｉｎｇ[ｍｅｐ１]の押鍵フラグｉＳｔａｔｕｓを「１」（押鍵有り）にセットする。次いで、ステップＳＦ１３では、ポインタｍｅで指定される音符データＭｉｄｉＥｖｅｎｔ中のベロシティＶｅｌを、レジスタｍｅｐ１．ｉＶｅｌｏｓｉｔｙにストアする。
【００５９】
そして、ステップＳＦ１４に進むと、トラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]中のトラック選択状況ｉＰｌａｙＴｙｐｅが「２」、つまり伴奏パートであるかどうかを判断する。伴奏パートでなければ、判断結果は「ＮＯ」になり、ステップＳＦ１７に進み、ポインタｍｅを、次音符を指定するポインタｍｅ．ｎｅｘｔに更新させた後、前述のステップＳＦ６に処理を戻す。
【００６０】
一方、トラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]が伴奏パートであると、上記ステップＳＦ１４の判断結果が「ＹＥＳ」となり、ステップＳＦ１５に進み、ポインタｍｅｐ１で指定される音符データＭｉｄｉＥｖｅｎｔの発音を音源１６に指示する。これにより、伴奏パートが再生される。そして、ステップＳＦ１６に進むと、再生制御データｐｌａｙｅｒに含まれ、再生中に発音した伴奏パートの音符数ｉＮｏｔｅＣｏｕｎｔをインクリメントして歩進させる。この後、ステップＳＦ１７に進み、ポインタｍｅを、次音符を指定するポインタｍｅ．ｎｅｘｔに更新させた後、前述のステップＳＦ６に処理を戻す。
【００６１】
（７）消音処理の動作
次に、図１７を参照して消音処理の動作を説明する。前述した再生処理スレッドのステップＳＤ１３（図１３参照）を介して本処理が実行されると、ＣＰＵ１１は図１７に図示するステップＳＧ１に進み、バッファ検索ポインタｉをゼロリセットする。続いて、ステップＳＧ２では、バッファ検索ポインタｉの値が、再生制御データｐｌａｙｅｒ中の音符データｍｅＰｌａｙｉｎｇ[  ]の配列数（発音数）より小さいか否かを判断する。バッファ検索ポインタｉの値が発音数を超えると、判断結果は「ＮＯ」になり、本処理を終えるが、バッファ検索ポインタｉの値が発音数より小さければ、判断結果は「ＹＥＳ」になり、ステップＳＧ３に進む。
【００６２】
ステップＳＧ３では、再生制御データｐｌａｙｅｒ中の音符データｍｅＰｌａｙｉｎｇ[ｉ]をポインタｍｅｐ１にストアし、続くステップＳＧ４では、発音中バッファエリアＯＢＥにおいてポインタｍｅｐ１で指定される音符データｍｅＰｌａｙｉｎｇ[ｍｅｐ１]の音符ポインタｐＭｅが「ＮＵＬＬ」であるか否か、つまり音符ポインタｐＭｅで指定される音符が消音されているかどうかを判断する。音符ポインタｐＭｅで指定される音符が消音されていると、判断結果は「ＹＥＳ」になり、ステップＳＧ５に進み、バッファ検索ポインタｉをインクリメントして歩進させた後、上述のステップＳＧ２に処理を戻す。
【００６３】
一方、音符ポインタｐＭｅで指定される音符が消音されていなければ、上記ステップＳＧ４の判断結果は「ＮＯ」になり、ステップＳＧ６に進む。ステップＳＧ６では、ポインタｍｅｐ１で指定される発音中バッファエリアＯＢＥ中の音符データｍｅＰｌａｙｉｎｇ[ｍｅｐ１]における音符ポインタｐＭｅを介して指定される音符データＭｉｄｉＥｖｅｎｔの発音開始ティックｌＴｉｍｅとゲートタイムｌＧａｔｅとを加算した時刻が、再生制御データｐｌａｙｅｒ中の現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋを過ぎているか否か、つまり消音タイミングに達したかどうかを判断する。消音タイミングに達していなければ、判断結果は「ＮＯ」になり、ステップＳＧ５に進み、ポインタｉをインクリメントして歩進させた後、前述のステップＳＧ２に処理を戻す。
【００６４】
これに対し、発音開始ティックｌＴｉｍｅとゲートタイムｌＧａｔｅとを加算した時刻が現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋを過ぎ、消音タイミングに達していると、上記ステップＳＧ６の判断結果が「ＹＥＳ」となり、ステップＳＧ７に進み、ポインタｍｅｐ１で指定される発音中バッファエリアＯＢＥ中の音符データｍｅＰｌａｙｉｎｇ[ｍｅｐ１]における音符ポインタｐＭｅを介して指定される音符データＭｉｄｉＥｖｅｎｔの消音を音源１６に指示し、続くステップＳＧ８では、発音中バッファエリアＯＢＥにおいてポインタｍｅｐ１で指定される音符データｍｅＰｌａｙｉｎｇ[ｍｅｐ１]の音符ポインタｐＭｅを「ＮＵＬＬ」にして消音を表した後、ステップＳＧ５に進み、ポインタｉをインクリメントして歩進させた後、前述のステップＳＧ２に処理を戻す。
【００６５】
（８）ＭＩＤＩ入力処理スレッドの動作
次に、図１８を参照してＭＩＤＩ入力処理スレッドの動作を説明する。前述した演奏モード処理のステップＳＢ５（図１１参照）を介して本処理が実行されると、ＣＰＵ１１は図１８に図示するステップＳＨ１に進み、外部ＭＩＤＩ楽器からノートオンメッセージを受信したか否かを判断する。ノートオンメッセージを受信しない場合には、判断結果が「ＮＯ」になり、後述のステップＳＨ７に処理を進めるが、演奏練習するユーザの演奏操作に応じて外部ＭＩＤＩ楽器からノートオンメッセージを受信した場合には、判断結果が「ＹＥＳ」となり、ステップＳＨ２に進む。
【００６６】
ステップＳＨ２では、受信したノートオンメッセージから音高ｐｉｔｃｈおよびベロシティｖｅｌを取得する。次いで、ステップＳＨ３では、取得した音高ｐｉｔｃｈおよびベロシティｖｅｌをレジスタｍｅＰｌａｙにストアする。そして、ステップＳＨ４では、受信した演奏情報（ノートオンメッセージ）が演奏パートの音符データと一致するかどうかを発音中バッファから検索し、その検索結果に基づきユーザの演奏を評価するための評価値（正しく弾けた音符数ｉＯＫＣｏｕｎｔ、正しく弾けた音符における押鍵時間差ｌＫｅｙＯｎＤｉｆおよび正しく弾けた音符における押鍵時間差（絶対値）ｌＫｅｙＯｎＡＢＳＤｉｆ）を算出する発音中バッファ検索処理（後述する）を実行する。
【００６７】
続いて、ステップＳＨ５では、受信した演奏情報（ノートオンメッセージ）が演奏パートの音符データと一致するかどうかをパートトラックから検索し、その検索結果に基づきユーザの演奏を評価するための評価値（正しく弾けた音符数ｉＯＫＣｏｕｎｔ、正しく弾けた音符における押鍵時間差ｌＫｅｙＯｎＤｉｆおよび正しく弾けた音符における押鍵時間差（絶対値）ｌＫｅｙＯｎＡＢＳＤｉｆ）を算出するパートデータ検索処理（後述する）を実行する。
【００６８】
そして、ステップＳＨ６に進み、上記ステップＳＨ２において取得したピッチおよびベロシティの楽音を発音するよう音源１６に指示する。続いて、ステップＳＨ７では、再生制御データｐｌａｙｅｒ中の再生中断用フラグｉｎｔｅｒｒｕｐｔｉｏｎ（図８参照）が「ＦＡＬＳＥ」であるか否か、すなわちユーザにより再生中断操作が為されていないかどうかを判断する。
【００６９】
再生中断操作が為されると、判断結果は「ＮＯ」になり、本処理を終えるが、再生中断操作が為されていなければ、判断結果が「ＹＥＳ」になり、ステップＳＨ８に進む。ステップＳＨ８では、再生制御データｐｌａｙｅｒ中の状態フラグｉＳｔａｔｕｓ（図８参照）が「０」でないか、つまり再生中であるかどうかを判断する。再生中であると、判断結果は「ＹＥＳ」になり、上述のステップＳＨ１に処理を戻すが、再生停止ならば、判断結果が「ＮＯ」になり、本処理を終える。
【００７０】
（９）発音中バッファ検索処理の動作
次に、図１９を参照して発音中バッファ検索処理の動作を説明する。上述したＭＩＤＩ入力処理スレッドのステップＳＨ４（図１８参照）を介して本処理が実行されると、ＣＰＵ１１は図１９に図示するステップＳＪ１に進み、バッファ検索ポインタｉをゼロリセットする。続いて、ステップＳＪ２では、バッファ検索ポインタｉの値が、再生制御データｐｌａｙｅｒ中の音符データｍｅＰｌａｙｉｎｇ[  ]の配列数（発音数）より小さいか否かを判断する。バッファ検索ポインタｉの値が発音数を超えると、判断結果は「ＮＯ」になり、本処理を終えるが、バッファ検索ポインタｉの値が発音数より小さければ、判断結果は「ＹＥＳ」になり、ステップＳＪ３に進む。
【００７１】
ステップＳＪ３では、再生制御データｐｌａｙｅｒ中の音符データｍｅＰｌａｙｉｎｇ[ｉ]をポインタｍｅｐ１にストアし、続くステップＳＪ４では、発音中バッファエリアＯＢＥにおいてポインタｍｅｐ１で指定される音符データｍｅＰｌａｙｉｎｇ[ｍｅｐ１]の押鍵フラグｉＳｔａｔｕｓが「０」、つまり押鍵無しであるかどうかを判断する。押鍵されていなければ、判断結果は「ＹＥＳ」になり、ステップＳＪ５に進み、バッファ検索ポインタｉをインクリメントして歩進させた後、上述のステップＳＪ２に処理を戻す。
【００７２】
一方、押鍵されていると、上記ステップＳＪ４の判断結果は「ＹＥＳ」になり、ステップＳＪ６に進む。ステップＳＪ６では、ポインタｍｅｐ１で指定される発音中バッファエリアＯＢＥ中の音符データｍｅＰｌａｙｉｎｇ[ｍｅｐ１]における音符ポインタｐＭｅを介して指定される音符データＭｉｄｉＥｖｅｎｔの発音開始ティックｌＴｉｍｅと、再生制御データｐｌａｙｅｒ中の現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋとの差が許容時間内であるか否かを判断する。許容時間を超えていると、判断結果は「ＮＯ」になり、ステップＳＪ５に進み、バッファ検索ポインタｉをインクリメントして歩進させた後、上述のステップＳＪ２に処理を戻す。
【００７３】
これに対し、発音タイミング（発音開始ティックｌＴｉｍｅ）と押鍵タイミング（現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋ）との差が許容時間内ならば、上記ステップＳＪ６の判断結果は「ＹＥＳ」になり、ステップＳＪ７に進み、ポインタｍｅｐ１で指定される発音中バッファエリアＯＢＥ中の音符データｍｅＰｌａｙｉｎｇ[ｍｅｐ１]における音符ポインタｐＭｅを介して指定される音符データＭｉｄｉＥｖｅｎｔの音高ｐｉｔｃｈと、レジスタｍｅＰｌａｙにストアした音高ｐｉｔｃｈとが一致するか否かを判断する。
【００７４】
不一致ならば、判断結果は「ＮＯ」になり、ステップＳＪ５に進み、バッファ検索ポインタｉをインクリメントして歩進させた後、上述のステップＳＪ２に処理を戻すが、一致すると、判断結果が「ＹＥＳ」になり、ステップＳＪ８に進む。ステップＳＪ８では、ポインタｍｅｐ１で指定される発音中バッファエリアＯＢＥ中の音符データｍｅＰｌａｙｉｎｇ[ｍｅｐ１]における音符ポインタｐＭｅを介して指定される音符データＭｉｄｉＥｖｅｎｔを、レジスタｍｅｐｌａｙにストアする。
【００７５】
次いで、ステップＳＪ９に進むと、許容時間内に音高ミス無く行われた適正な押鍵に対応して、再生制御データｐｌａｙｅｒ中の、正しく弾けた音符数ｉＯＫＣｏｕｎｔをインクリメントして歩進させる。続いて、ステップＳＪ１０では、上記ステップＳＪ６で取得した発音タイミング（発音開始ティックｌＴｉｍｅ）と押鍵タイミング（現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋ）との時間差を再生制御データｐｌａｙｅｒ中のｌＫｅｙＯｎＤｉｆに加算し、これにより再生中に正しく弾けた音符における押鍵時間差ｌＫｅｙＯｎＤｉｆを更新すると共に、発音タイミング（発音開始ティックｌＴｉｍｅ）と押鍵タイミング（現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋ）との時間差（絶対値）を再生制御データｐｌａｙｅｒ中のｌＫｅｙＯｎＡＢＳＤｉｆに加算し、これにより再生中に正しく弾けた音符における押鍵時間差（絶対値）ｌＫｅｙＯｎＤｉｆを更新して本処理を終える。
【００７６】
（１０）パートデータ検索処理の動作
次に、図２０を参照してパートデータ検索処理の動作を説明する。前述したＭＩＤＩ入力処理スレッドのステップＳＨ５（図１８参照）を介して本処理が実行されると、ＣＰＵ１１は図２０に図示するステップＳＫ１に進み、レジスタｍｅｐｌａｙの内容が「ＮＵＬＬ」、つまり演奏情報（ノートオンメッセージ）から取得した音高ｐｉｔｃｈおよびベロシティｖｅｌがストアされていない状態であるかどうかを判断する。押鍵に応じた演奏情報がレジスタｍｅｐｌａｙにストアされていなければ、判断結果は「ＹＥＳ」になり、本処理を終えるが、押鍵に応じた演奏情報がレジスタｍｅｐｌａｙにストアされていると、判断結果が「ＮＯ」になり、ステップＳＫ２に進む。
【００７７】
ステップＳＫ２では、トラック検索ポインタｉＴｒをゼロリセットし、続くステップＳＫ３では、トラック検索ポインタｉＴｒが最大トラック数ＭＡＸ＿ＴＲＡＣＫより小さいか否か、すなわちトラック検索中であるかどうかを判断する。全てのパートトラックについて検索し終えると、判断結果が「ＮＯ」となり、本処理を終えるが、トラック検索中ならば、判断結果は「ＹＥＳ」になり、ステップＳＫ４に進み、トラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]中のトラック選択状況ｉＰｌａｙＴｙｐｅが「１」、つまり選択された曲の演奏パートであるかどうかを判断する。
【００７８】
トラック検索ポインタｉＴｒで指定されるパートが選択された曲の演奏パートでなければ、判断結果は「ＮＯ」となり、ステップＳＫ５に進み、トラック検索ポインタｉＴｒをインクリメントして歩進させた後、上述のステップＳＫ３に処理を戻す。そして、例えば歩進されたトラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]中のトラック選択状況ｉＰｌａｙＴｙｐｅが「１」、つまり選択された曲の演奏パートならば、上記ステップＳＫ４の判断結果が「ＹＥＳ」になり、ステップＳＫ６に進む。
【００７９】
ステップＳＫ６では、再生制御データｐｌａｙｅｒ中の音符データＭｉｄｉＥｖｅｎｔｓ[ｉＴｒ]をポインタｍｅｐにセットする。このポインタｍｅｐは、トラック検索ポインタｉＴｒで指定されるパートトラックにおける次の音符データＭｉｄｉＥｖｅｎｔを指し示す。そして、ステップＳＫ７に進むと、ポインタｍｅｐで指定される音符データＭｉｄｉＥｖｅｎｔが「ＮＵＬＬ」、すなわち曲終端であるかどうかを判断する。曲終端でなければ、判断結果が「ＮＯ」になり、ステップＳＫ８に進む。
【００８０】
ステップＳＫ８では、再生制御データｐｌａｙｅｒ中の現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋと、ポインタｍｅｐで指定される音符データＭｉｄｉＥｖｅｎｔの発音開始ティックｌＴｉｍｅとの差が許容時間内であるか否かを判断する。許容時間を超えていると、判断結果は「ＮＯ」になり、本処理を終えるが、許容時間内ならば、判断結果は「ＹＥＳ」になり、ステップＳＫ９に進む。ステップＳＫ９では、ポインタｍｅｐで指定される音符データＭｉｄｉＥｖｅｎｔの音高ｐｉｔｃｈと、レジスタｍｅｐｌａｙにストアした音高ｐｉｔｃｈとが一致するか否かを判断する。
【００８１】
不一致ならば、判断結果は「ＮＯ」になり、ステップＳＫ１３に進み、ポインタｍｅｐを歩進（ｍｅｐ．ｎｅｘｔ）させた後、上述のステップＳＫ７に処理を戻すが、一致すると、上記ステップＳＫ９の判断結果が「ＹＥＳ」になり、ステップＳＫ１０に進み、演奏パートのトラックＴｒａｃｋ［ｉＴｒ］においてポインタｍｅｐにより指定される音符データＭｉｄｉＥｖｅｎｔを、レジスタｍｅｐｌａｙにストアする。
【００８２】
次いで、ステップＳＫ１１に進むと、許容時間内に音高ミス無く行われた適正な押鍵に対応して、再生制御データｐｌａｙｅｒ中の、正しく弾けた音符数ｉＯＫＣｏｕｎｔをインクリメントして歩進させる。続いて、ステップＳＫ１２では、上記ステップＳＫ８で取得した発音開始ティックｌＴｉｍｅと現在Ｔｉｃｋ時刻ｌＮｏｗＴｉｃｋとの時間差を再生制御データｐｌａｙｅｒ中のｌＫｅｙＯｎＤｉｆに加算し、これにより再生中に正しく弾けた音符における押鍵時間差ｌＫｅｙＯｎＤｉｆを更新すると共に、その時間差（絶対値）を再生制御データｐｌａｙｅｒ中のｌＫｅｙＯｎＡＢＳＤｉｆに加算し、これにより再生中に正しく弾けた音符における押鍵時間差（絶対値）ｌＫｅｙＯｎＡＢＳＤｉｆを更新する。この後、ステップＳＫ１３に進み、ポインタｍｅｐを歩進（ｍｅｐ．ｎｅｘｔ）させた後、上述のステップＳＫ７に処理を戻す。そして、歩進されたポインタｍｅｐが曲終端に達すると、ステップＳＫ７の判断結果が「ＹＥＳ」となり、本処理を終える。
【００８３】
（１１）評価結果計算処理の動作
次に、図２１〜図２２を参照して評価結果計算処理の動作を説明する。前述した演奏モード処理のステップＳＢ８を介して本処理が実行されると、ＣＰＵ１１は図２１に図示するステップＳＬ１に進み、トラック検索ポインタｉＴｒをゼロリセットし、続くステップＳＬ２では、トラック検索ポインタｉＴｒが最大トラック数ＭＡＸ＿ＴＲＡＣＫより小さいか否か、すなわちトラック検索中であるかどうかを判断する。全てのパートトラックについて検索し終えると、判断結果が「ＮＯ」となり、本処理を終えるが、トラック検索中ならば、判断結果は「ＹＥＳ」になり、ステップＳＬ３に進む。
【００８４】
ステップＳＬ３では、トラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]中のトラック選択状況ｉＰｌａｙＴｙｐｅが「１」、つまり選択された曲の演奏パートであるかどうかを判断する。トラック検索ポインタｉＴｒで指定されるパートが選択された曲の演奏パートでなければ、判断結果は「ＮＯ」となり、ステップＳＬ４に進み、トラック検索ポインタｉＴｒをインクリメントして歩進させた後、上述のステップＳＬ２に処理を戻す。そして、例えば歩進されたトラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]中のトラック選択状況ｉＰｌａｙＴｙｐｅが「１」、つまり選択された曲の演奏パートであれば、上記ステップＳＬ３の判断結果は「ＹＥＳ」になり、ステップＳＬ５に進む。
【００８５】
ステップＳＬ５では、トラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]中のフレーズスキルＰｈｒａｓｅＬｖに、正答率（ｐｌａｙｅｒ．ｉＯＫＣｏｕｎｔ／ｐｌａｙｅｒ．ｉＮｏｔｅＣｏｕｎｔ）を乗じて演奏評価スコアｉＳｃｏｒｅを算出する。次いで、ステップＳＬ６では、自己（演奏練習するユーザ自身）のユーザデータｕｓｅｒ中のフレーズスキルＰｈｒａｓｅＬｖが、算出した演奏評価スコアｉＳｃｏｒｅより低いか否かを判断する。
【００８６】
フレーズスキルＰｈｒａｓｅＬｖが演奏評価スコアｉＳｃｏｒｅより高ければ、判断結果は「ＮＯ」になり、ステップＳＬ７に進み、自己のユーザデータｕｓｅｒ中のフレーズスキルＰｈｒａｓｅＬｖをインクリメントしてレベルアップさせる。そして、ステップＳＬ８に進み、フレーズ変更フラグｉＰＬｖＣｎｇを「１」にセットした後、図２２に図示するステップＳＬ１１に進む。
【００８７】
一方、フレーズスキルＰｈｒａｓｅＬｖが演奏評価スコアｉＳｃｏｒｅより低いと、上記ステップＳＬ６の判断結果は「ＹＥＳ」になり、ステップＳＬ９に進み、自己のユーザデータｕｓｅｒ中のフレーズスキルＰｈｒａｓｅＬｖをデクリメントしてレベルダウンさせる。そして、ステップＳＬ１０に進み、フレーズ変更フラグｉＰＬｖＣｎｇを「−１」にセットした後、図２２に図示するステップＳＬ１１に進む。
【００８８】
ステップＳＬ１１では、正しく弾けた一音符当たりの平均押鍵時間差（再生制御データｐｌａｙｅｒ中のｉＯＫＣｏｕｎｔ／再生制御データｐｌａｙｅｒ中のｌＫｅｙＯｎＡＢＳＤｉｆ）を判定許容時間で除した値を「１」から減算して適正押鍵タイミング率ｉＳｃｏｒｅを算出する。次いで、ステップＳＬ１２では、自己のユーザデータｕｓｅｒ中のリズムスキルＲｈｙｔｈｍＬｖが、トラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]中のリズムスキルＲｈｙｔｈｍＬｖより高く、かつ上記ステップＳＬ１１で算出した適正押鍵タイミング率ｉＳｃｏｒｅが「０．５」より小さいか否かを判断する。
【００８９】
自己のユーザデータｕｓｅｒ中のリズムスキルＲｈｙｔｈｍＬｖが、トラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]中のリズムスキルＲｈｙｔｈｍＬｖより高く、かつ適正押鍵タイミング率ｉＳｃｏｒｅが「０．５」より小さければ、判断結果は「ＹＥＳ」になり、ステップＳＬ１３に進み、自己のユーザデータｕｓｅｒ中のリズムスキルＲｈｙｔｈｍＬｖをインクリメントしてレベルアップさせる。そして、ステップＳＬ１４に進み、リズム変更フラグｉＲＬｖＣｎｇを「１」にセットして本処理を終える。
【００９０】
これに対し、自己のユーザデータｕｓｅｒ中のリズムスキルＲｈｙｔｈｍＬｖが、トラック検索ポインタｉＴｒで指定されるパートトラックデータＴｒａｃｋ[ｉＴｒ]中のリズムスキルＲｈｙｔｈｍＬｖより低いか、あるいは適正押鍵タイミング率ｉＳｃｏｒｅが「０．５」より大きいと、上記ステップＳＬ１２の判断結果が「ＮＯ」になり、ステップＳＬ１５に進み、自己のユーザデータｕｓｅｒ中のリズムスキルＲｈｙｔｈｍＬｖをデクリメントしてレベルダウンさせる。そして、ステップＳＬ１６に進み、リズム変更フラグｉＲＬｖＣｎｇを「−１」にセットして本処理を終える。
【００９１】
（１２）メンバによる評価処理の動作
次に、図２３〜図２４を参照してメンバによる評価処理の動作を説明する。前述した演奏モード処理のステップＳＢ９（図１１参照）を介して本処理が実行されると、ＣＰＵ１１は図２３に図示するステップＳＭ１に進み、自己のユーザデータｕｓｅｒ中のメンバＭｅｍｂｅｒを指定するポインタをメンバ検索ポインタｍｅｍにセットする。次いで、ステップＳＭ２では、メンバ検索ポインタｍｅｍで指定されるメンバＭｅｍｂｅｒが「ＮＵＬＬ」でないか否か、すなわち自己のユーザデータＵｓｅｒに登録された全てのメンバＭｅｍｂｅｒについて検索し終えたかどうかを判断する。
【００９２】
登録された全てのメンバＭｅｍｂｅｒについて検索し終えていなければ、上記ステップＳＭ２の判断結果は「ＹＥＳ」になり、ステップＳＭ３に進む。ステップＳＭ３では、フレーズ変更フラグｉＰＬｖＣｎｇ又はリズム変更フラグｉＲＬｖＣｎｇの何れかが「０」より大きいか、つまりユーザのフレーズ演奏技量又はリズム演奏技量の何れかがレベルアップしたか否かを判断する。
【００９３】
ユーザのフレーズ演奏技量又はリズム演奏技量の何れかがレベルアップした場合には、上記ステップＳＭ３の判断結果が「ＹＥＳ」になり、ステップＳＭ４に進む。ステップＳＭ４では、下記条件１，２の何れかを満足するか否かを判断する。
条件１：メンバ検索ポインタｍｅｍで指定されるメンバデータＭｅｍｂｅｒｓ中のフレーズスキルＰｈｒａｓｅＬｖが自己のユーザデータｕｓｅｒ中のフレーズスキルＰｈｒａｓｅＬｖより高いか？
条件２：メンバ検索ポインタｍｅｍで指定されるメンバデータＭｅｍｂｅｒｓ中のリズムスキルＲｈｙｔｈｍＬｖが自己のユーザデータｕｓｅｒ中のリズムスキルＲｈｙｔｈｍＬｖより高いか？
【００９４】
上記の条件１，２の何れも満足しなければ、上記ステップＳＭ４の判断結果は「ＮＯ」になり、ステップＳＭ５に進み、メンバ検索ポインタｍｅｍで指定されるメンバＭｅｍｂｅｒのメンバ忠誠度Ｌｏｙａｌｔｙをインクリメントしてレベルアップさせた後、後述のステップＳＭ７に進む。
【００９５】
一方、上記の条件１，２の何れかを満足すると、上記ステップＳＭ４の判断結果が「ＹＥＳ」になり、ステップＳＭ６に進む。ステップＳＭ６では、メンバ検索ポインタｍｅｍで指定されるメンバデータＭｅｍｂｅｒｓ中の演奏評価ＬａｓｔＣｏｍｍｅｎｔ（前回評価）が褒める内容の成果コメントｇＣｏｍ［］であるか否かを判断する。演奏評価ＬａｓｔＣｏｍｍｅｎｔ（前回評価）が褒める内容の成果コメントｇＣｏｍ［］であると、判断結果は「ＹＥＳ」になり、ステップＳＭ５に進み、メンバ検索ポインタｍｅｍで指定されるメンバＭｅｍｂｅｒのメンバ忠誠度Ｌｏｙａｌｔｙをインクリメントしてレベルアップさせた後、後述のステップＳＭ７に進む。
【００９６】
これに対し、演奏評価ＬａｓｔＣｏｍｍｅｎｔ（前回評価）が褒める内容の成果コメントｇＣｏｍ［］でなければ、上記ステップＳＭ６の判断結果が「ＮＯ」になり、ステップＳＭ７に進む。ステップＳＭ７では、メンバ検索ポインタｍｅｍで指定されるメンバデータＭｅｍｂｅｒｓ中の演奏評価ＬａｓｔＣｏｍｍｅｎｔを、今回の評価結果として褒める内容の成果コメントｇＣｏｍ［］に更新する。この後、図２４に図示するステップＳＭ１２に進み、メンバ検索ポインタｍｅｍを歩進（ｍｅｍ．ｎｅｘｔ）させた後、前述のステップＳＭ２に処理を戻す。
【００９７】
さて一方、ユーザのフレーズ演奏技量又はリズム演奏技量の何れかがレベルダウンした場合には、上述したステップＳＭ３の判断結果が「ＮＯ」になり、図２４に図示するステップＳＭ８に進み、下記条件１，２の何れかを満足するか否かを判断する。
条件１：メンバ検索ポインタｍｅｍで指定されるメンバデータＭｅｍｂｅｒｓ中のフレーズスキルＰｈｒａｓｅＬｖが自己のユーザデータｕｓｅｒ中のフレーズスキルＰｈｒａｓｅＬｖより高いか？
条件２：メンバ検索ポインタｍｅｍで指定されるメンバデータＭｅｍｂｅｒｓ中のリズムスキルＲｈｙｔｈｍＬｖが自己のユーザデータｕｓｅｒ中のリズムスキルＲｈｙｔｈｍＬｖより高いか？
【００９８】
上記の条件１，２の何れも満足しなければ、上記ステップＳＭ８の判断結果は「ＮＯ」になり、ステップＳＭ９に進み、メンバ検索ポインタｍｅｍで指定されるメンバＭｅｍｂｅｒのメンバ忠誠度Ｌｏｙａｌｔｙをデクリメントしてレベルダウンさせた後、後述のステップＳＭ１１に進む。
【００９９】
一方、上記の条件１，２の何れかを満足すると、上記ステップＳＭ８の判断結果が「ＹＥＳ」になり、ステップＳＭ１０に進む。ステップＳＭ１０では、メンバ検索ポインタｍｅｍで指定されるメンバデータＭｅｍｂｅｒｓ中の演奏評価ＬａｓｔＣｏｍｍｅｎｔ（前回評価）が叱る内容の成果コメントｂＣｏｍ［］であるか否かを判断する。演奏評価ＬａｓｔＣｏｍｍｅｎｔ（前回評価）が叱る内容の成果コメントｂＣｏｍ［］であると、判断結果は「ＹＥＳ」になり、ステップＳＭ９に進み、メンバ検索ポインタｍｅｍで指定されるメンバＭｅｍｂｅｒのメンバ忠誠度Ｌｏｙａｌｔｙをデクリメントしてレベルダウンさせた後、後述のステップＳＭ１１に進む。
【０１００】
これに対し、演奏評価ＬａｓｔＣｏｍｍｅｎｔ（前回評価）が叱る内容の成果コメントｂＣｏｍ［］でなければ、上記ステップＳＭ１０の判断結果が「ＮＯ」になり、ステップＳＭ１１に進む。ステップＳＭ１１では、メンバ検索ポインタｍｅｍで指定されるメンバデータＭｅｍｂｅｒｓ中の演奏評価ＬａｓｔＣｏｍｍｅｎｔを、今回の評価結果として叱る内容の成果コメントｂＣｏｍ［］に更新する。この後、ステップＳＭ１２に進み、メンバ検索ポインタｍｅｍを歩進（ｍｅｍ．ｎｅｘｔ）させた後、前述のステップＳＭ２に処理を戻す。そして、登録された全てのメンバＭｅｍｂｅｒについて検索し終えると、このステップＳＭ２の判断結果が「ＮＯ」になり、本処理を終える。
【０１０１】
（１３）メンバ入替候補処理の動作
次に、図２５〜図２６を参照してメンバ入替候補処理の動作を説明する。前述した演奏モード処理のステップＳＢ１０（図１１参照）を介して本処理が実行されると、ＣＰＵ１１は図２５に図示するステップＳＮ１に進み、自己（演奏練習するユーザ自身）のユーザデータｕｓｅｒ中のメンバＭｅｍｂｅｒを指定するポインタをメンバ検索ポインタｍｅｍにセットする。次いで、ステップＳＭ２では、メンバ検索ポインタｍｅｍで指定されるメンバＭｅｍｂｅｒが「ＮＵＬＬ」でないか否か、すなわち自己のユーザデータＵｓｅｒに登録された全てのメンバＭｅｍｂｅｒについて検索し終えたかどうかを判断する。
【０１０２】
登録された全てのメンバＭｅｍｂｅｒについて検索し終えていなければ、上記ステップＳＮ２の判断結果は「ＹＥＳ」になり、ステップＳＮ３に進む。ステップＳＮ３では、メンバ検索ポインタｍｅｍで指定されるメンバデータＭｅｍｂｅｒｓ中のメンバ忠誠度Ｌｏｙａｌｔｙが閾値ＤＲＡＷＡＬより小さいか否かを判断する。メンバ忠誠度Ｌｏｙａｌｔｙが閾値ＤＲＡＷＡＬより大きければ、判断結果は「ＮＯ」になり、後述のステップＳＮ６に処理を進める。
【０１０３】
一方、メンバ忠誠度Ｌｏｙａｌｔｙが閾値ＤＲＡＷＡＬより小さいと、上記ステップＳＮ３の判断結果は「ＹＥＳ」になり、ステップＳＮ４に進み、低い忠誠度（メンバから脱退したい）を表す値「−１」を、メンバ検索ポインタｍｅｍで指定されるメンバデータＭｅｍｂｅｒｓ中のメンバ忠誠度Ｌｏｙａｌｔｙにストアする。続いて、ステップＳＮ５では、メンバ忠誠度Ｌｏｙａｌｔｙが「−１」となったメンバデータＭｅｍｂｅｒｓを脱退希望リスト（後述する）に登録する。
【０１０４】
そして、ステップＳＮ６に進むと、メンバ検索ポインタｍｅｍを歩進（ｍｅｍ．ｎｅｘｔ）させた後、前述のステップＳＮ２に処理を戻す。以後、自己のユーザデータｕｓｅｒに登録された全てのメンバＭｅｍｂｅｒの中からメンバ忠誠度Ｌｏｙａｌｔｙが閾値ＤＲＡＷＡＬより小さい脱退希望メンバを探し出して脱退希望リストに登録する処理を進め、全てのメンバＭｅｍｂｅｒについて検索し終えると、上記ステップＳＮ２の判断結果が「ＮＯ」になり、ステップＳＮ７に進み、メンバ識別ポインタｉｄをゼロリセットする。
【０１０５】
次いで、図２６に図示するステップＳＮ８に進み、メンバ識別ポインタｉｄがメンバデータベースＭＤＢ（図４参照）の末端まで達していなかどうかを判断する。末端まで達していなければ、判断結果は「ＹＥＳ」になり、ステップＳＮ９に進み、メンバ識別ポインタｉｄで指定されるメンバデータＭｅｍｂｅｒｓ［ｉｄ］が、自己（演奏練習するユーザ自身）のユーザデータｕｓｅｒ中のメンバＭｅｍｂｅｒとして登録済みであるか否かを判断する。既にメンバ登録済みならば、判断結果は「ＹＥＳ」になり、ステップＳＮ１９に進み、メンバ識別ポインタｉｄを歩進させた後、上述のステップＳＮ８に処理を戻す。
【０１０６】
一方、メンバ識別ポインタｉｄで指定されるメンバデータＭｅｍｂｅｒｓ［ｉｄ］が、自己のユーザデータｕｓｅｒ中のメンバＭｅｍｂｅｒとして登録されていなければ、上記ステップＳＮ９の判断結果は「ＮＯ」になり、ステップＳＮ１０に進む。ステップＳＮ１０では、メンバ識別ポインタｉｄで指定されるメンバデータＭｅｍｂｅｒｓ［ｉｄ］中のフレーズスキルＰｈｒａｓｅＬｖをレジスタＰＬｖに、メンバ識別ポインタｉｄで指定されるメンバデータＭｅｍｂｅｒｓ［ｉｄ］中のリズムスキルＲｈｙｔｈｍＬｖをレジスタＲＬｖにそれぞれストアする。
【０１０７】
次いで、ステップＳＮ１１では、レジスタＰＬｖに格納したメンバデータＭｅｍｂｅｒｓ［ｉｄ］のフレーズスキルＰｈｒａｓｅＬｖと自己のユーザデータｕｓｅｒ中のフレーズスキルＰｈｒａｓｅＬｖとの差分絶対値ａｂｓ（ＰＬｖ−ｕｓｅｒ．ＰｈｒａｓｅＬｖ）と、レジスタＲＬｖに格納したメンバデータＭｅｍｂｅｒｓ［ｉｄ］のリズムスキルＲｈｙｔｈｍＬｖと自己のユーザデータｕｓｅｒ中のフレーリズムスキルＲｈｙｔｈｍＬｖとの差分絶対値ａｂｓ（ＲＬｖ−ｕｓｅｒ．ＲｈｙｔｈｍＬｖ）との加算値が、入替レベル差ＣＮＧ＿ＬＶより大きいか否かを判断する。
【０１０８】
メンバの演奏技量とユーザの演奏技量の差が小さく、入替レベル差ＣＮＧ＿ＬＶを超えなければ、メンバ入替の対象とならない為、判断結果は「ＮＯ」になり、ステップＳＮ１９に進み、メンバ識別ポインタｉｄを歩進させた後、前述のステップＳＮ８に処理を戻す。
【０１０９】
これに対し、メンバの演奏技量とユーザの演奏技量の差が大きく、入替レベル差ＣＮＧ＿ＬＶを超えると、メンバ入替の対象となる為、上記ステップＳＮ１１の判断結果が「ＹＥＳ」になり、ステップＳＮ１２に進む。
【０１１０】
そして、ステップＳＮ１２では、下記条件１，２の何れかを満足するか否かを判断する。
条件１：レジスタＰＬｖに格納したメンバデータＭｅｍｂｅｒｓ［ｉｄ］のフレーズスキルＰｈｒａｓｅＬｖが自己のユーザデータｕｓｅｒ中のフレーズスキルＰｈｒａｓｅＬｖより高いか？
条件２：レジスタＲＬｖに格納したメンバデータＭｅｍｂｅｒｓ［ｉｄ］のリズムスキルＲｈｙｔｈｍＬｖが自己のユーザデータｕｓｅｒ中のリズムスキルＲｈｙｔｈｍＬｖより高いか？
【０１１１】
上記の条件１，２の何れかを満足する場合、すなわちユーザよりメンバのフレーズ演奏技量又はリズム演奏技量が優れている場合には、上記ステップＳＮ１２の判断結果が「ＹＥＳ」になり、ステップＳＮ１３に進む。ステップＳＮ１３では、フレーズ変更フラグｉＰＬｖＣｎｇ又はリズム変更フラグｉＲＬｖＣｎｇの何れかが「０」より大きいか、つまりユーザのフレーズ演奏技量又はリズム演奏技量の何れかがレベルアップしたか否かを判断する。ユーザのフレーズ演奏技量又はリズム演奏技量の何れかがレベルダウンしていれば、判断結果は「ＮＯ」になり、ステップＳＮ１９に進み、メンバ識別ポインタｉｄを歩進させた後、上述のステップＳＮ８に処理を戻す。
【０１１２】
これに対し、ユーザのフレーズ演奏技量又はリズム演奏技量の何れかがレベルアップすると、上記ステップＳＮ１３の判断結果が「ＹＥＳ」になり、ステップＳＮ１４に進む。ステップＳＮ１４では、メンバ識別ポインタｉｄで指定されるメンバデータＭｅｍｂｅｒｓ［ｉｄ］中のフラグｉＦｌａｇに「１」をセットすると共に、メンバ識別ポインタｉｄで指定されるメンバデータＭｅｍｂｅｒｓ［ｉｄ］中の演奏評価ＬａｓｔＣｏｍｍｅｎｔに、ユーザに対して上から目線で述べる参加コメントｕＣｏｍ［］をセットする。そして、ステップＳＮ１５に進み、メンバ識別ポインタｉｄで指定されるメンバデータＭｅｍｂｅｒｓ［ｉｄ］を参加希望リスト（後述する）に追加する。この後、ステップＳＮ１９に進み、メンバ識別ポインタｉｄを歩進させた後、上述のステップＳＮ８に処理を戻す。
【０１１３】
さて一方、上記条件１，２の何れも満足しない場合、すなわちメンバよりユーザのフレーズ演奏技量又はリズム演奏技量が優れている場合には、上記ステップＳＮ１２の判断結果は「ＮＯ」になり、ステップＳＮ１６に進む。ステップＳＮ１６では、フレーズ変更フラグｉＰＬｖＣｎｇ又はリズム変更フラグｉＲＬｖＣｎｇの何れかが「０」より小さいか、つまりユーザのフレーズ演奏技量又はリズム演奏技量の何れかがレベルダウンしたか否かを判断する。ユーザのフレーズ演奏技量又はリズム演奏技量の何れかがレベルアップしていれば、判断結果は「ＮＯ」になり、ステップＳＮ１９に進み、メンバ識別ポインタｉｄを歩進させた後、上述のステップＳＮ８に処理を戻す。
【０１１４】
これに対し、ユーザのフレーズ演奏技量又はリズム演奏技量の何れかがレベルダウンすると、上記ステップＳＮ１６の判断結果が「ＹＥＳ」になり、ステップＳＮ１７に進む。ステップＳＮ１７では、メンバ識別ポインタｉｄで指定されるメンバデータＭｅｍｂｅｒｓ［ｉｄ］中のフラグｉＦｌａｇに「−１」をセットすると共に、メンバ識別ポインタｉｄで指定されるメンバデータＭｅｍｂｅｒｓ［ｉｄ］中の演奏評価ＬａｓｔＣｏｍｍｅｎｔに、ユーザに対して下から目線で述べる参加コメントｌＣｏｍ［］をセットする。そして、ステップＳＮ１８に進み、メンバ識別ポインタｉｄで指定されるメンバデータＭｅｍｂｅｒｓ［ｉｄ］を参加希望リスト（後述する）に追加する。この後、ステップＳＮ１９に進み、メンバ識別ポインタｉｄを歩進させた後、上述のステップＳＮ８に処理を戻す。
【０１１５】
以上説明したように、本実施の形態では、ユーザが弾きたい課題曲を選択し、ユーザと共演するメンバに課題曲の伴奏パートを割り当てると、曲進行に応じて各メンバの伴奏パートが再生されると同時に、曲進行に応じて読み出される課題曲の演奏パートの音符データと、その演奏パートを演奏して発生する演奏データとの比較に基づきユーザの演奏を評価するための評価値（正しく弾けた音符数ｉＯＫＣｏｕｎｔ、正しく弾けた音符における押鍵時間差ｌＫｅｙＯｎＤｉｆおよび正しく弾けた音符における押鍵時間差（絶対値）ｌＫｅｙＯｎＡＢＳＤｉｆ）を取得する演奏練習が行われる。
【０１１６】
そして、演奏パートを弾き終えて演奏練習が完了すると、課題曲の演奏パートの難易度に相当するフレーズスキルＰｈｒａｓｅＬｖに、演奏練習したユーザの正答率（ｐｌａｙｅｒ．ｉＯＫＣｏｕｎｔ／ｐｌａｙｅｒ．ｉＮｏｔｅＣｏｕｎｔ）を乗じて演奏評価スコアｉＳｃｏｒｅを算出し、算出した演奏評価スコアｉＳｃｏｒｅよりユーザのフレーズ演奏技量（フレーズスキルＰｈｒａｓｅＬｖ）が高ければ、ユーザのフレーズ演奏技量をレベルアップさせ、一方、演奏評価スコアｉＳｃｏｒｅよりユーザのフレーズ演奏技量が低ければ、ユーザのフレーズ演奏技量をレベルダウンさせる。
【０１１７】
また、正しく弾けた一音符当たりの平均押鍵時間差（再生制御データｐｌａｙｅｒ中のｉＯＫＣｏｕｎｔ／再生制御データｐｌａｙｅｒ中のｌＫｅｙＯｎＡＢＳＤｉｆ）を判定許容時間で除した値を「１」から減算して適正押鍵タイミング率ｉＳｃｏｒｅを算出し、この適正押鍵タイミング率ｉＳｃｏｒｅが「０．５」より小さく、かつユーザのリズム演奏技量（リズムスキルＲｈｙｔｈｍＬｖ）が演奏パートのリズムスキルＲｈｙｔｈｍＬｖより高ければ、ユーザのリズム演奏技量をレベルアップさせ、一方、適正押鍵タイミング率ｉＳｃｏｒｅが「０．５」より大きいか、あるいはユーザのリズム演奏技量が演奏パートのリズムスキルＲｈｙｔｈｍＬｖより低いと、ユーザのリズム演奏技量をレベルダウンさせる。
【０１１８】
ユーザのフレーズ演奏技量（フレーズスキルＰｈｒａｓｅＬｖ）又はリズム演奏技量（リズムスキルＲｈｙｔｈｍＬｖ）の何れかがレベルアップしたと評価された場合には、ユーザよりもスキルの低いメンバの忠誠度Ｌｏｙａｌｔｙを上げ、ユーザよりもスキルの高いメンバから「褒められる」評価を与え、一方、ユーザのフレーズ演奏技量又はリズム演奏技量の何れかがレベルダウンしたと評価された場合には、ユーザよりもスキルの低いメンバの忠誠度Ｌｏｙａｌｔｙを下げ、ユーザよりもスキルの高いメンバから「叱られる」評価を与える。これにより、仲間を募ってバンドで共演するような演奏の楽しさや面白味を持たせて練習意欲の向上を図ることが出来る。
【０１１９】
そして、ユーザのバンドに参加しているメンバ（ユーザデータｕｓｅｒに登録されたメンバＭｅｍｂｅｒ）の中からメンバ忠誠度Ｌｏｙａｌｔｙが閾値ＤＲＡＷＡＬより小さい脱退希望メンバがいると、そのメンバを脱退希望リストに登録する。脱退希望リストに登録されると、図２７に図示する一例の演奏評価画面ＰＥＤの表示エリアＤＥ１に、脱退希望メンバからの評価コメント（例えば『リズム感が悪いな。もう少し練習した方がいいんじゃないか？』）が表示される。こうしてユーザに更なる練習の必要性を問うことによって、仲間を募ってバンドで共演するような演奏の楽しさや面白味を持たせて練習意欲の向上を図ることが出来る。
【０１２０】
さらに、ユーザデータｕｓｅｒに未登録（バンド不参加）のメンバの内、メンバの演奏技量とユーザの演奏技量の差が入替レベル差ＣＮＧ＿ＬＶを超えるメンバを入替候補として探し出し、この入替候補の中からフレーズ演奏技量又はリズム演奏技量の何れかがレベルアップしたユーザよりも優れた演奏技量を持つメンバや、フレーズ演奏技量又はリズム演奏技量の何れかがレベルダウンしたユーザよりも劣る演奏技量を持つメンバを参加希望リストに登録する。参加希望リストに登録されると、図２７に図示する一例の演奏評価画面ＰＥＤの表示エリアＤＥ２に、参加希望メンバからの評価コメント（例えば『一緒に練習しながらやりませんか？』）が表示される。こうしてユーザを練習に誘う為、仲間を募ってバンドで共演するような演奏の楽しさや面白味を持たせて練習意欲の向上を図ることが出来る。
【０１２１】
以上、本発明の実施の一形態について説明したが、本発明はそれに限定されるものではなく、本願出願の特許請求の範囲に記載された発明とその均等の範囲に含まれる。以下では、本願出願当初の特許請求の範囲に記載された各発明について付記する。
【０１２２】
（付記）
［請求項１］
演奏パートおよび複数の伴奏パートから成る課題曲を構成する各音を表す曲データと、課題曲の演奏パートの難易度とを記憶する曲情報記憶手段と、
課題曲の演奏パートを演奏練習するユーザの演奏技量と、前記伴奏パート毎に割り当てられたメンバ夫々の演奏技量とを記憶する演奏技量記憶手段と、
曲進行に応じて前記曲情報記憶手段から読み出される課題曲の各伴奏パートの曲データを再生するメンバ伴奏手段と、
曲進行に応じて前記曲情報記憶手段から読み出される課題曲の演奏パートの曲データと、ユーザが当該演奏パートを演奏して発生する演奏データとの比較に基づきユーザの演奏を評価する評価値を取得する演奏評価値取得手段と、
前記曲情報記憶手段に記憶される課題曲の演奏パートの難易度と、前記演奏評価値取得手段により取得された評価値とで得られる演奏得点に応じて、前記演奏技量記憶手段に記憶されるユーザの演奏技量を更新するユーザ演奏技量更新手段と、
前記ユーザ演奏技量更新手段により更新されたユーザの演奏技量及び前記演奏技量記憶手段に記憶される各伴奏パートに割り当てられたメンバの演奏技量の相対関係に基づいた評価を与えるメンバ評価手段と、
を具備することを特徴とする演奏練習装置。
【０１２３】
［請求項２］
前記メンバ評価手段は、前記ユーザ演奏技量更新手段により更新されたユーザの演奏技量と、前記演奏技量記憶手段に記憶される各メンバの演奏技量とを比較し、更新によりユーザの演奏技量がレベルアップした場合にはユーザよりも演奏技量の高いメンバから「褒められる」評価を与え、一方、更新によりユーザの演奏技量がレベルダウンした場合にはユーザよりも演奏技量の高いメンバから「叱られる」評価を与えることを特徴とする請求項１記載の演奏練習装置。
【０１２４】
［請求項３］
前記演奏評価値取得手段は、少なくとも正答率、正しく弾けた音符における押鍵時間差および正しく弾けた音符における押鍵時間差の絶対値を、評価値として取得することを特徴とする請求項１記載の演奏練習装置。
【０１２５】
［請求項４］
前記ユーザ演奏技量更新手段は、前記曲情報記憶手段に記憶される課題曲の演奏パートの難易度に、前記演奏評価値取得手段により取得された正答率を乗じて演奏得点を算出し、算出した演奏得点よりもユーザの演奏技量が高ければ、当該ユーザの演奏技量をレベルアップさせ、一方、算出した演奏得点よりもユーザの演奏技量が低ければ、当該ユーザの演奏技量をレベルダウンさせることを特徴とする請求項１記載の演奏練習装置。
【０１２６】
［請求項５］
前記ユーザ演奏技量更新手段は、正しく弾けた音符における押鍵時間差および正しく弾けた音符における押鍵時間差の絶対値に基づき適正押鍵タイミング率を算出し、この適正押鍵タイミング率が所定値より小さく、かつユーザの演奏技量が前記曲情報記憶手段に記憶される課題曲の演奏パートの難易度より高ければ、ユーザの演奏技量をレベルアップさせ、一方、適正押鍵タイミング率が所定値より大きいか、あるいはユーザの演奏技量が前記曲情報記憶手段に記憶される課題曲の演奏パートの難易度より低ければ、ユーザの演奏技量をレベルダウンさせることを特徴とする請求項１記載の演奏練習装置。
【０１２７】
［請求項６］
前記演奏技量記憶手段は、ユーザに対する各メンバの忠誠度を記憶し、
前記メンバ評価手段は、更新によりユーザの演奏技量がレベルアップした場合には、前記演奏技量記憶手段に記憶される各メンバの忠誠度の内、ユーザよりも演奏技量の低いメンバの忠誠度を上げ、一方、更新によりユーザの演奏技量がレベルダウンした場合には、前記演奏技量記憶手段に記憶される各メンバの忠誠度の内、ユーザよりも演奏技量の低いメンバの忠誠度を下げる忠誠度更新手段を備えることを特徴とする請求項１記載の演奏練習装置。
【０１２８】
［請求項７］
前記演奏技量記憶手段に記憶される各メンバの忠誠度の内、所定値より小さい忠誠度のメンバを、ユーザとの共演から脱退を希望する脱退希望メンバとして検出する脱退希望メンバ検出手段を更に備えることを特徴とする請求項６記載の演奏練習装置。
【０１２９】
［請求項８］
前記演奏技量記憶手段にユーザと共演する各メンバの他に、ユーザと共演しない他のメンバの演奏技量を記憶しておき、これら他のメンバの内、ユーザの演奏技量とのレベル差が所定以上のメンバを入替候補メンバとして抽出する入替候補メンバ抽出手段を更に備えることを特徴とする請求項６記載の演奏練習装置。
【０１３０】
［請求項９］
演奏パートおよび複数の伴奏パートから成る課題曲を構成する各音を表す曲データと、課題曲の演奏パートの難易度とを記憶する曲情報記憶手段と、
課題曲の演奏パートを演奏練習するユーザの演奏技量と、前記伴奏パート毎に割り当てられたメンバ夫々の演奏技量とを記憶する演奏技量記憶手段とを備えた装置のコンピュータで実行されるプログラムであって、
曲進行に応じて前記曲情報記憶手段から読み出される課題曲の各伴奏パートの曲データを再生するメンバ伴奏ステップと、
曲進行に応じて前記曲情報記憶手段から読み出される課題曲の演奏パートの曲データと、ユーザが当該演奏パートを演奏して発生する演奏データとの比較に基づきユーザの演奏を評価する評価値を取得する演奏評価値取得ステップと、
前記曲情報記憶手段に記憶される課題曲の演奏パートの難易度と、前記演奏評価値取得ステップにより取得された評価値とで得られる演奏得点に応じて、前記演奏技量記憶手段に記憶されるユーザの演奏技量を更新するユーザ演奏技量更新ステップと、
前記ユーザ演奏技量更新手段により更新されたユーザの演奏技量及び前記演奏技量記憶手段に記憶される各伴奏パートに割り当てられたメンバの演奏技量の相対関係に基づいた評価を与えるメンバ評価手段ステップと
を実行させることを特徴とするプログラム。
【符号の説明】
【０１３１】
１０  操作部
１１  ＣＰＵ
１２  ＲＯＭ
１３  ＲＡＭ
１４  表示部
１５  ＭＩＤＩインタフェース部
１６  音源
１７  サウンドシステム
１００  演奏練習装置
【図１】
2013054254.tif 000003
【図２】
2013054254.tif 000004
【図３】
2013054254.tif 000005
【図４】
2013054254.tif 000006
【図５】
2013054254.tif 000007
【図６】
2013054254.tif 000008
【図７】
2013054254.tif 000009
【図８】
2013054254.tif 000010
【図９】
2013054254.tif 000011
【図１０】
2013054254.tif 000012
【図１１】
2013054254.tif 000013
【図１２】
2013054254.tif 000014
【図１３】
2013054254.tif 000015
【図１４】
2013054254.tif 000016
【図１５】
2013054254.tif 000017
【図１６】
2013054254.tif 000018
【図１７】
2013054254.tif 000019
【図１８】
2013054254.tif 000020
【図１９】
2013054254.tif 000021
【図２０】
2013054254.tif 000022
【図２１】
2013054254.tif 000023
【図２２】
2013054254.tif 000024
【図２３】
2013054254.tif 000025
【図２４】
2013054254.tif 000026
【図２５】
2013054254.tif 000027
【図２６】
2013054254.tif 000028
【図２７】
2013054254.tif 000029