(57)【要約】【課題】演奏者にとって練習しやすい演奏動作の表示をすることができる演奏動作表示装置、方法及びプログラムを提供すること。【解決手段】演奏動作表示装置１は、演奏において、繰返し再生する際に演奏を開始する時刻としての指示時刻を受け付ける入力部１５と、演奏情報に基づいて、指示時刻から繰返し再生される動作の終了時刻を特定し、指示時刻と特定された終了時刻とに基づいて演奏を繰返し再生する区間を設定するＣＰＵ１１と、を備える。ＣＰＵ１１は、演奏情報、動作情報、鍵盤データ、構造データに基づいて、繰返し再生する区間における各時刻について、当該時刻における鍵盤の押鍵位置を示す前記手指の動作画像を表示部１６に繰返し描画する。【選択図】図１
2013160950.tif 000002
【特許請求の範囲】
【請求項１】
演奏における、発音開始時刻、発音継続時間、音高、及び使用する指を示すデータを格納する演奏情報と、
前記演奏情報に基づく鍵盤の押鍵状態を格納する鍵盤データを記憶する鍵盤データと、
手指の構造を示す構造データとを記憶する構造データと、
前記発音開始時刻に対応して前記構造データを表示させるためデータを記憶する動作情報と、を記憶する記憶手段と、
演奏において、繰返し再生する際に演奏を開始する時刻としての指示時刻を受け付ける受付手段と、
前記演奏情報に基づいて、前記指示時刻から繰返し再生される動作の終了時刻を特定し、前記指示時刻と特定された終了時刻とに基づいて演奏を繰返し再生する区間を設定する設定手段と、
前記演奏情報、前記動作情報、前記鍵盤データ、前記構造データに基づいて、前記区間における各時刻について、当該時刻における鍵盤の押鍵位置を示す前記手指の動作画像を表示手段に繰返し描画する描画手段と、
を備えることを特徴とする演奏動作表示装置。
【請求項２】
前記描画手段は、区間における前記手指の動作画像の表示態様を、前記手指の動作画像を繰り返し描画しない場合の手指の動作画像の表示態様に比べて変化させることを特徴とする、
請求項１に記載の演奏動作表示装置。
【請求項３】
演奏動作表示装置が、演奏動作表示を行う方法であって、
前記演奏動作表示装置は、演奏における、発音開始時刻、発音継続時間、音高、及び使用する指を示すデータを格納する演奏情報と、前記演奏情報に基づく鍵盤の押鍵状態を格納する鍵盤データを記憶する鍵盤データと、手指の構造を示す構造データとを記憶する構造データと、前記発音開始時刻に対応して前記構造データを表示させるためデータを記憶する動作情報と、を記憶する記憶手段を備え、
前記方法は、
演奏において、繰返し再生する際に演奏を開始する時刻としての指示時刻を受け付ける受付ステップと、
前記演奏情報に基づいて、前記指示時刻から繰返し再生される動作の終了時刻を特定し、前記指示時刻と特定された終了時刻とに基づいて演奏を繰返し再生する区間を設定する設定ステップと、
前記演奏情報、前記動作情報、前記鍵盤データ、前記構造データに基づいて、前記区間における各時刻について、当該時刻における鍵盤の押鍵位置を示す前記手指の動作画像を表示手段に繰返し描画する描画ステップと、
を含むことを特徴とする方法。
【請求項４】
演奏における、発音開始時刻、発音継続時間、音高、及び使用する指を示すデータを格納する演奏情報と、前記演奏情報に基づく鍵盤の押鍵状態を格納する鍵盤データを記憶する鍵盤データと、手指の構造を示す構造データとを記憶する構造データと、前記発音開始時刻に対応して前記構造データを表示させるためデータを記憶する動作情報と、を記憶する記憶手段を備えた演奏動作表示装置に、演奏動作を表示する処理を実行させるプログラムであって、
演奏において、繰返し再生する際に演奏を開始する時刻としての指示時刻を受け付ける受付ステップと、
前記演奏情報に基づいて、前記指示時刻から繰返し再生される動作の終了時刻を特定し、前記指示時刻と特定された終了時刻とに基づいて演奏を繰返し再生する区間を設定する設定ステップと、
前記演奏情報、前記動作情報、前記鍵盤データ、前記構造データに基づいて、前記区間における各時刻について、当該時刻における鍵盤の押鍵位置を示す前記手指の動作画像を表示手段に繰返し描画する描画ステップと、
を前記演奏動作表示装置に実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子楽器の演奏動作を表示する演奏動作表示装置、方法及びプログラムに関する。
【背景技術】
【０００２】
従来、演奏の進行に応じて押鍵（操作）すべき鍵に対して、押鍵に使用する指をユーザに通知するナビゲーション機能を備えた演奏動作表示装置が提案されている。例えば、特許文献１には、演奏時に演奏動作として鍵盤に対する手指の位置を表示部に表示させることにより、押鍵に使用する指をユーザに通知するナビゲーション機能を備えた演奏動作表示装置が提案されている。また、特許文献１で提案される演奏動作表示装置では、演奏の各パートにおいて、演奏動作の表示方式の変更操作を受け付けたことに応じて、手指のサイズの拡大及び縮小、手指の透過表示、手指をワイヤーフレームとした表示、視点（表示角度）の変更等を実行することが提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第３５２８０５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１の演奏動作表示装置は、演奏における所定区間の演奏動作を確認する場合、演奏者が演奏曲全体を再生して当該区間になるまで待ったり、演奏者自身が、当該区間の始点と終点とを設定したりする必要がある。特に、演奏者自身が当該区間の始点と終点とを設定する場合、演奏者は、設定画面から、演奏したい箇所を正確に設定するために、区間の微調整等を行う必要があり、設定作業が煩雑なものとなっていた。これにより、演奏者が、局所的な区間について効率よく練習することができない可能性があった。
【０００５】
本発明は、このような状況に鑑みてなされたものであり、演奏者にとって練習しやすい演奏動作の表示をすることができる演奏動作表示装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明の一態様の演奏動作表示装置は、演奏における、発音開始時刻、発音継続時間、音高、及び使用する指を示すデータを格納する演奏情報と、前記演奏情報に基づく鍵盤の押鍵状態を格納する鍵盤データを記憶する鍵盤データと、手指の構造を示す構造データとを記憶する構造データと、前記発音開始時刻に対応して前記構造データを表示させるためデータを記憶する動作情報と、を記憶する記憶手段と、演奏において、繰返し再生する際に演奏を開始する時刻としての指示時刻を受け付ける受付手段と、前記演奏情報に基づいて、前記指示時刻から繰返し再生される動作の終了時刻を特定し、前記指示時刻と特定された終了時刻とに基づいて演奏を繰返し再生する区間を設定する設定手段と、前記演奏情報、前記動作情報、前記鍵盤データ、前記構造データに基づいて、前記区間における各時刻について、当該時刻における鍵盤の押鍵位置を示す前記手指の動作画像を表示手段に繰返し描画する描画手段と、を備えることを特徴とする。
【発明の効果】
【０００７】
本発明によれば、演奏者にとって練習しやすい演奏動作の表示をすることができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の一実施形態に係る第１実施形態としての演奏動作表示装置及び電子楽器のハードウェアの構成を示すブロック図である。
【図２】演奏動作表示の例を説明する図である。
【図３】表示部に演奏動作表示を行う場合における、それぞれの用語を説明する図である。
【図４】制御変数の構造を示す図である。
【図５】演奏情報の構造を示す図である。
【図６】構造データの構造を示す図である。
【図７】鍵盤データの構造を示す図である。
【図８】動作情報の構造を示す図である。
【図９】演奏動作表示のメイン処理の流れを示すフローチャートである。
【図１０】再生処理の流れを示すフローチャートである。
【図１１】演奏情報検索処理の流れを示すフローチャートである。
【図１２】離鍵チェック処理の流れを示すフローチャートである。
【図１３】再生区間設定処理の流れを示すフローチャートである。
【図１４】描画処理の流れを示すフローチャートである。
【図１５】鍵盤描画処理の流れを示すフローチャートである。
【図１６】腕描画処理の流れを示すフローチャートである。
【図１７】対象動作情報取得処理の流れを示すフローチャートである。
【図１８】表示色設定処理の流れを示すフローチャートである。
【図１９】手指描画処理の流れを示すフローチャートである。
【図２０】第２実施形態の演奏動作表示装置における再生区間設定処理の流れを示すフローチャートである。
【図２１】図２０に続くフローチャートである。
【図２２】第２実施形態の演奏動作表示装置における表示色設定処理の流れを示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態について、図面を用いて説明する。
【００１０】
［第１実施形態］
図１は、本発明の一実施形態に係る第１実施形態としての演奏動作表示装置及び電子楽器のハードウェアの構成を示すブロック図である。
演奏動作表示装置１は、例えば、表示部を備えて構成される。
【００１１】
演奏動作表示装置１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１３と、バス１４と、入力部１５と、表示部１６と、ＭＩＤＩ（Ｍｕｓｉｃａｌ  Ｉｎｓｔｒｕｍｅｎｔ  Ｄｉｇｉｔａｌ  Ｉｎｔｅｒｆａｃｅ）インターフェース１７と、を備えている。
【００１２】
ＣＰＵ１１は、演奏動作表示装置１の全体を制御し、ＲＯＭ１２に記憶されているプログラム、又は、ＲＯＭ１２からＲＡＭ１３に読み出されたプログラムに従って各種の処理を実行する。
【００１３】
ＲＯＭ１２は、ＣＰＵ１１が実行する各種処理の処理プログラムを格納する。
ＲＡＭ１３は、ＲＯＭ１２から読み出されたプログラム等を格納する。
【００１４】
バス１４は、接続される各機能部から出力された各種情報を伝送する。バス１４には、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、入力部１５、表示部１６及びＭＩＤＩインターフェース１７が接続されている。
これにより、ＣＰＵ１１、ＲＯＭ１２及びＲＡＭ１３は、バス１４を介して相互に接続されている。
【００１５】
入力部１５は、例えばボタン等により構成されており、ユーザからの操作指示に応じて各種情報の入力を受け付ける。
表示部１６は、ＣＰＵ１１の制御に従って各種設定情報や演奏動作に係る情報等を表示する。
ＭＩＤＩインターフェース１７は、電子楽器２に接続されている。ＭＩＤＩインターフェース１７は、電子楽器２に対して模範演奏等に係る演奏データを送信する。
【００１６】
電子楽器２は、ＭＩＤＩインターフェース２１と、鍵盤２２と、音源・サウンドシステム２３と、を備える。
ＭＩＤＩインターフェース２１は、鍵盤２２及び音源・サウンドシステム２３に接続されている。ＭＩＤＩインターフェース２１は、演奏動作表示装置１から模範演奏等に係る演奏データを受信し、この演奏データに対応する演奏信号を音源・サウンドシステム２３に出力する。また、ＭＩＤＩインターフェース２１は、鍵盤２２から楽器の操作入力を受け付け、この操作入力に対応した演奏信号を音源・サウンドシステム２３に出力する。
【００１７】
このような演奏動作表示装置１は、ユーザの演奏の上達を補助するために、演奏時の腕、手及び指の模範的な動作を表示部１６に表示する。
以下、図２（ａ）に示すような演奏時の腕、手及び指の模範的な動作の表示部１６への表示を通常演奏動作表示という。また、図２（ｂ）に示すような演奏時の腕、手及び指の模範的な動作の表示部１６への拡大表示を拡大演奏動作表示という。また、図２（ｃ）に示すような演奏時の腕、手及び指の模範的な動作の斜め方向からの拡大表示を演奏テクニック表示という。
【００１８】
なお、以下の説明において、図２（ａ）に示すような鍵盤を正面から視認した場合の横方向（低音の鍵から高音の鍵に向かう方向）をｘ軸方向とする。また、鍵盤を正面から視認した場合に正面から鍵盤に向かって延びる方向をｙ軸方向とする。また、鍵盤を正面から視認した場合の上方向をｚ軸方向とする。
【００１９】
図３は、表示部１６に演奏動作表示を行う場合に用いられる用語を説明する図である。
まず、表示部１６に表示される画像の領域を視野Ｐとする。この視野Ｐの中心位置を視野の中心という。また、視野の中心からレンダリングを行う場合における視点に向かって延びるベクトルを目線ベクトルという。また、視野の上端における中間と、視野の下端における中間とのそれぞれから視点に向かって線を引いた場合に、視点において２本の線が成す角度を高さ方向視野角という。
【００２０】
以下に、通常演奏動作表示に必要な情報について説明する。この演奏動作表示に必要な情報は、ＲＯＭ１２に記憶されている。これらの情報は、演奏時に、ＣＰＵ１１によってＲＯＭ１２から適宜複写され、ＲＡＭ１３に一時的に記憶される。
【００２１】
図４は、制御変数の構造を示す図である。この制御変数は、演奏動作表示装置１において通常演奏動作表示及び拡大演奏動作表示を行うために用いられる。
制御変数には、変数として、ｗｉｄｔｈと、ｈｅｉｇｈｔと、ｆ０ｖｙと、Ｔｉｍｅと、Ｓｔａｔｕｓと、Ｃｅｎｔｅｒ［３］と、Ｅｙｅ［３］と、ＥｙｅＶｅｃｔｏｒ［３］と、ＮｏｔｅＲ［］と、ＳｔｒｕｃｔＲ［］と、ＭｏｔｉｏｎＲ［］と、ＮｏｔｅＬ［］と、ＳｔｒｕｃｔＬ［］と、ＭｏｔｉｏｎＬ［］と、が定義されている。
【００２２】
なお、構造を示す図において、末尾に添え字として［］が設けられている変数は、配列を示している。例えば、Ｃｅｎｔｅｒ［３］は、３つの変数から構成される配列である。また、構造を示す図において、配列の要素数が空欄の配列は、演奏する曲によってそれぞれ異なることを示している。
【００２３】
ｗｉｄｔｈは、表示部１６に表示する画面の幅を示す変数である。
ｈｅｉｇｈｔは、表示部１６に表示する画面の高さを示す変数である。
ｆ０ｖｙは、高さ方向視野角（図３参照）を示す変数である。
Ｔｉｍｅは、描画時刻を示す変数である。
Ｓｔａｔｕｓは、描画状態フラグを示す変数である。この変数は、０、１、２のいずれかの値を取ることができる。変数の値が０の場合、通常（強調）演奏状態を示す。変数の値が１の場合、演奏時の演奏ループの区間内を示す。変数の値が２の場合、演奏時の演奏ループの区間外を示す。
Ｃｅｎｔｅｒ［３］は、表示部１６に表示する画面における視界の中心座標を示す変数である。Ｃｅｎｔｅｒ［３］には、それぞれの要素に対して、３次元座標系（ｘ，ｙ，ｚ）における各座標値が含まれており、３次元座標系における位置を示している。
Ｅｙｅ［３］は、表示部１６に表示する画面における視点の座標を示す変数である。Ｅｙｅ［３］は、Ｃｅｎｔｅｒ［３］と同様に３次元座標系における位置を示している。
ＥｙｅＶｅｃｔｏｒ［３］は、視線ベクトルを示す変数である。ＥｙｅＶｅｃｔｏｒ［３］は、Ｅｙｅ［３］からＣｅｎｔｅｒ［３］を減算することで得られる。
【００２４】
ＮｏｔｅＲ［］は、右手の演奏情報が格納される配列変数である。詳細は後述する。
ＳｔｒｕｃｔＲ［］は、右手の構造データが格納される配列変数である。構造データとは、指、手及び腕の構造を示す図である。ＳｔｒｕｃｔＲ［］は、表示部１６に表示する画面において、右手に対応する指、手及び腕をレンダリングする際に用いられる。
ＭｏｔｉｏｎＲ［］は、演奏時における右手の動作を示す動作情報が格納される配列変数である。
【００２５】
ＮｏｔｅＬ［］は、左手の演奏情報が格納される配列変数である。
ＳｔｒｕｃｔＬ［］は、左手の構造データが格納される配列変数である。ＳｔｒｕｃｔＬ［］は、表示部１６に表示する画面において、左手に対応する指、手及び腕をレンダリングする際に用いられる。
ＭｏｔｉｏｎＬ［］は、演奏時における左手の動作を示す動作情報が格納される配列変数である。
【００２６】
図５は、演奏情報の構造を示す図である。
演奏情報は、上述したように、右手の演奏情報を示すＮｏｔｅＲ［］と、左手の演奏情報を示すＮｏｔｅＬ［］と、から構成される。
ＮｏｔｅＲ［］と、ＮｏｔｅＬ［］とは構成が同一であるため、図５では、これらＮｏｔｅＲ［］と、ＮｏｔｅＬ［］とをまとめて、Ｎｏｔｅ［］として説明する。
【００２７】
図５に示すように、Ｎｏｔｅ［］におけるそれぞれの要素（Ｎｏｔｅ［０］、Ｎｏｔｅ［１］、・・・Ｎｏｔｅ［Ｎ］、・・・）には、Ｔｉｍｅと、Ｇａｔｅと、Ｐｉｔｃｈと、Ｆｉｎｇｅｒと、ＦｉｇＴｅｃｈ［］と、が定義されている。
【００２８】
Ｔｉｍｅは、発音を開始する時刻（発音開始時刻）を示す変数である。
Ｇａｔｅは、発音を継続する時間を示す変数である。
Ｐｉｔｃｈは、発音される音の音高（周波数）を示す変数である。
【００２９】
Ｆｉｎｇｅｒは、指の番号を示す変数であり、親指、人差し指、中指、薬指、小指に対応している。
ＦｉｇＴｅｃｈ［］は、演奏テクニックフラグを示す配列変数である。ＦｉｇＴｅｃｈ［］は、演奏テクニックにおいて定義されている動作ステップの数だけ要素数が設けられる。
【００３０】
図６は、構造データの構造を示す図である。
構造データは、上述したように、右手の構造データを示すＳｔｒｕｃｔＲ［］と、左手の構造データを示すＳｔｒｕｃｔＬ［］と、から構成される。
ＳｔｒｕｃｔＲ［］と、ＳｔｒｕｃｔＬ［］とは構成が同一であるため、図６では、これらＳｔｒｕｃｔＲ［］と、ＳｔｒｕｃｔＬ［］とをまとめて、Ｓｔｒｕｃｔ［］として説明する。
【００３１】
図６に示すように、Ｓｔｒｕｃｔ［］におけるそれぞれの要素には、Ｉｎｄｅｘと、Ｐａｒｅｎｔと、Ｃｈｉｌｄｒｅｎと、Ｃｈｉｌｄ［］と、Ｖｅｒｔｉｃｅｓ［］［３］と、Ｌｅｎｇｔｈと、Ｔｈｅｔａ［］と、Ｐｈｉ［］と、Ｌａｍｂｄａ［］と、が定義されている。
【００３２】
Ｉｎｄｅｘは、構造データのインデックスを示す変数である。
Ｐａｒｅｎｔは、親データとなる構造データのインデックスを示す変数である。例えば、Ｐａｒｅｎｔの値が２である場合には、インデックスが２である構造データが親データとなる。なお、Ｐａｒｅｎｔの値が−１である場合は、親データが無いことを示す。
Ｃｈｉｌｄｒｅｎは、親の構造に対して子となる構造物の数を示す変数である。
Ｖｅｒｔｉｃｅｓ［］［３］は、親の構造を示し、表示部１６に表示されるポリゴンにおける各頂点の３次元座標を示す配列変数である。Ｖｅｒｔｉｃｅｓ［］［３］の［］は、ポリゴンにおける頂点の数に対応しており、この頂点の数だけ要素が定義される。また、Ｖｅｒｔｉｃｅｓ［］［３］の［３］は、ポリゴンを形成するためのそれぞれの頂点の３次元座標に対応している。
Ｌｅｎｇｔｈは、親の構造の長さを示す変数である。
【００３３】
Ｔｈｅｔａ［］は、親の構造のｘ軸回転角を示す変数であり、後述の動作情報の要素数と同数の要素が定義される。
Ｐｈｉ［］は、親の構造のｙ軸回転角を示す変数であり、後述の動作情報の要素数と同数の要素が定義される。
Ｌａｍｂｄａ［］は、親の構造のｚ軸回転角を示す変数であり、後述の動作情報の要素数と同数の要素が定義される。
【００３４】
図７は、鍵盤データの構造を示す図である。
鍵盤データとしてのＫｅｙ［］は、表示部１６に表示される鍵盤を構成する白鍵及び黒鍵のそれぞれの情報を格納している。Ｋｅｙ［］には、最も低音の鍵から順に、それぞれの鍵の情報が格納されている。例えば、Ｋｅｙ［０］は、最も左に位置する白鍵に対応しており、この白鍵より半音高い鍵がＫｅｙ［１］に対応している。
【００３５】
図７に示すように、Ｋｅｙ［］におけるそれぞれの要素には、Ｐｉｔｃｈと、ｉｓＢｌａｃｋと、Ｖｅｒｔｉｃｅｓ［］［３］と、Ｓｔａｔｕｓと、ＮｏｔｅＯｆｆと、が定義されている。
【００３６】
Ｐｉｔｃｈは、発音される音の音高（周波数）を示す変数である。
ｉｓＢｌａｃｋは、黒鍵か白鍵かを示すフラグである。具体的には、ｉｓＢｌａｃｋは、０の場合に白鍵を示し、１の場合に黒鍵を示す。
Ｖｅｒｔｉｃｅｓ［］［３］は、鍵の構造データ（ポリゴンデータ）を示し、表示部１６に表示されるポリゴンにおける各頂点の３次元座標を示す配列変数である。
Ｓｔａｔｕｓは、鍵の状態を示す変数である。例えば、Ｓｔａｔｕｓが０の場合に離鍵状態を示し、＋の場合に押鍵状態を示し、−の場合に離鍵中を示す。
ＮｏｔｅＯｆｆは、発音されてから消音されるまでの時間である消音時間を示す変数である。
【００３７】
図８は、動作情報の構造を示す図である。
動作情報は、上述したように、右手の動作情報を示すＭｏｔｉｏｎＲ［］と、左手の動作情報を示すＭｏｔｉｏｎＬ［］と、から構成される。
ＭｏｔｉｏｎＲ［］と、ＭｏｔｉｏｎＬ［］とは構成が同一であるため、図８では、これらＭｏｔｉｏｎＲ［］と、ＭｏｔｉｏｎＬ［］とをまとめて、Ｍｏｔｉｏｎ［］として説明する。
【００３８】
図８に示すように、Ｍｏｔｉｏｎ［］におけるそれぞれの要素には、Ｔｉｍｅと、ＲｏｏｔＰｏｓ［３］と、が定義されている。
Ｔｉｍｅは、演奏時における各フレームが開始される時刻を示す変数である。
ＲｏｏｔＰｏｓ［３］は、表示部１６に構造物を描画する際に起点となる構造物の３次元座標（起点関節の３次元座標）である。
【００３９】
続いて、演奏動作表示の処理の流れについて説明する。
図９は、演奏動作表示のメイン処理の流れを示すフローチャートである。このメイン処理は、通常演奏動作表示、拡大演奏動画表示、及び演奏テクニック表示において共通する処理である。
【００４０】
ステップＳ１において、ＣＰＵ１１は、データ初期化／読込処理を実行する。
すなわち、ＣＰＵ１１は、ＲＡＭ１３に一時的に記憶されているデータの初期化を行うとともに、ＲＯＭ１２に記憶されている各種情報を読み込み、その後、入力部１５を介してユーザからの指示を受け付ける。各種情報としては、制御変数、演奏情報、構造データ、鍵盤データ、動作情報が挙げられる。また、ＣＰＵ１１は、データの初期化において、ＲＡＭ１３に描画終了フラグを記憶させる。この描画終了フラグの初期値は、ＯＦＦに設定されている。
【００４１】
ステップＳ２において、ＣＰＵ１１は、表示部１６に鍵盤等の描画を行う描画処理を実行する。描画処理の詳細は、図１４で詳述する。
【００４２】
ステップＳ３において、ＣＰＵ１１は、入力部１５を介してユーザから終了指示を受け付けたか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、メイン処理を終了し、この判定がＮＯの場合、ステップＳ４に処理を移す。
【００４３】
ステップＳ４において、ＣＰＵ１１は、入力部１５を介してユーザから楽曲の再生指示を受け付けたか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ５に処理を移し、この判定がＮＯの場合、ステップＳ６に処理を移す。
【００４４】
ステップＳ５において、ＣＰＵ１１は、ユーザから指示された楽曲の再生処理を実行する。再生処理の詳細は、図１０で詳述する。ＣＰＵ１１は、ステップＳ５の処理が終了すると、ステップＳ３に処理を移す。
ステップＳ６において、ＣＰＵ１１は、入力部１５を介してユーザから再生の停止指示を受け付けたか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ７に処理を移し、この判定がＮＯの場合、ステップＳ３に処理を移す。
ステップＳ７において、ＣＰＵ１１は、演奏されている楽曲の再生を終了する。ＣＰＵ１１は、ステップＳ７の処理が終了すると、ステップＳ３に処理を移す。
ステップＳ８において、ＣＰＵ１１は、表示部１６への描画を終了する。具体的には、ＣＰＵ１１は、描画終了フラグをＯＮにする。
【００４５】
図１０は、再生処理の流れを示すフローチャートである。
ステップＳ１１において、ＣＰＵ１１は、再生区間設定処理を実行する。再生区間設定処理の詳細は、図１３で詳述する。
ステップＳ１２において、ＣＰＵ１１は、現在時刻を指示時刻に設定する。指示時刻は、再生区間設定処理において取得される。
【００４６】
ステップＳ１３において、ＣＰＵ１１は、図示しないタイマーからシステム時刻を取得し、前回の検索時刻にシステム時刻を設定する。
ステップＳ１４において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている再生終了フラグがＯＮであるか否かを判定する。ＣＰＵ１１は、再生終了フラグがＯＮである場合、再生処理を終了する。ＣＰＵ１１は、再生終了フラグがＯＦＦである場合、ステップＳ１５に処理を移す。
【００４７】
ステップＳ１５において、ＣＰＵ１１は、図示しないタイマーからシステム時刻を取得し、検索時刻にシステム時刻を設定する。
ステップＳ１６において、ＣＰＵ１１は、検索時刻と前回検索時刻の差分を算出することで、前回検索時刻から経過した時間を算出する。ＣＰＵ１１は、算出した差分を検索時刻現在時刻に加算する。
【００４８】
ステップＳ１７において、ＣＰＵ１１は、現在時刻がループ再生区間内であるか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ１８に処理を移し、この判定がＮＯの場合、ステップＳ２４に処理を移す。
ステップＳ１８において、ＣＰＵ１１は、演奏時間がループの区間内であるものとして、制御変数の描画状態フラグ（Ｓｔａｔｕｓ）に「１」を設定する。
【００４９】
ステップＳ１９において、ＣＰＵ１１は、演奏時間が強調再生区間内であるか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ２０に処理を移し、この判定がＮＯの場合、ステップＳ２１に処理を移す。
ステップＳ２０において、ＣＰＵ１１は、演奏時間が強調区間であるものとして、生業変数の描画状態フラグ（Ｓｔａｔｕｓ）に「０」を設定する。
【００５０】
ステップＳ２１において、ＣＰＵ１１は、右手パートの演奏情報の検索を行う処理である右手パート演奏情報検索処理を実行する。右手パート演奏情報検索処理の詳細は、図１１で詳述する。
ステップＳ２２において、ＣＰＵ１１は、左手パートの演奏情報の検索を行う処理である左手パート演奏情報検索処理を実行する。左手パート演奏情報検索処理の詳細は、図１１で詳述する。
【００５１】
ステップＳ２３において、ＣＰＵ１１は、離鍵チェック処理を実行する。離鍵チェック処理の詳細は、図１２で詳述する。ＣＰＵ１１は、ステップＳ１９の処理が終了すると、ステップＳ２８に処理を移す。
【００５２】
ステップＳ２４において、ＣＰＵ１１は、演奏時間がループの区間外であるものとして、制御変数の描画状態フラグ（Ｓｔａｔｕｓ）に「２」を設定する。
ステップＳ２５において、ＣＰＵ１１は、現在時刻が繰返し終了時刻にオフセット値を加算した時間を超過したか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ２６に処理を移し、この判定がＮＯの場合、ステップＳ２８に処理を移す。
【００５３】
ステップＳ２６において、ＣＰＵ１１は、現在時刻を繰返し再生開始時刻に設定する。これにより、繰返し開始時刻を超過した場合、現在時刻に再生開始時刻が再設定される。
ステップＳ２７において、ＣＰＵ１１は、全ての鍵盤を離鍵する処理を行う。
ステップＳ２８において、ＣＰＵ１１は、図示しないタイマーからシステム時刻を取得し、前回の検索時刻にシステム時刻を設定する。ＣＰＵ１１は、この処理が終了すると、ステップＳ１４に処理を移す。
【００５４】
図１１は、演奏情報検索処理の流れを示すフローチャートである。
なお、本フローチャートにおいて説明するＮｏｔｅ［］は、右手パート動作情報検索処理を実行する場合、ＮｏｔｅＲ［］に置き換えるものとし、左手パート動作情報検索処理を実行する場合、ＮｏｔｅＬ［］に置き換えるものとする。
【００５５】
ステップＳ３１において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている制御変数（ｈａｎｄＣｔｒｌ）から、ＲＡＭ１３に記憶されている演奏情報のインデックス（添え字）を参照して、前回検索したＮｏｔｅ［］を描画対象の演奏情報として取得する。また、ＣＰＵ１１は、メイン処理が開始されてから初めて演奏情報を取得する場合、Ｎｏｔｅ［０］を取得する。
【００５６】
ステップＳ３２において、ＣＰＵ１１は、ステップＳ３１において取得された描画対象の演奏情報に基づいて、全ての演奏情報を取得したか否かを判定する。すなわち、ＣＰＵ１１は、ステップＳ３１において取得されたＮｏｔｅ［］の添え字が、ＲＯＭ１２に記憶されているＮｏｔｅ［］の添え字の最大値と等しいか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、演奏情報検索処理を終了し、この判定がＮＯの場合、ステップＳ３３に処理を移す。
【００５７】
ステップＳ３３において、ＣＰＵ１１は、図１０のステップＳ１２において設定された現在時刻が、Ｎｏｔｅ［］の発音開始時刻に到達したか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ３５に処理を移し、この判定がＮＯの場合、ステップＳ３４に処理を移す。
【００５８】
ステップＳ３４において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている制御変数（ｈａｎｄＣｔｒｌ）に格納されている演奏情報のインデックス（添え字）を、ＲＡＭ１３に記憶させる。ＣＰＵ１１は、この処理が終了すると、演奏情報検索処理を終了する。
【００５９】
ステップＳ３５において、ＣＰＵ１１は、図１０のステップＳ１２において設定された現在時刻に発音されているか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ３６に処理を移し、この判定がＮＯの場合、ステップＳ３７に処理を移す。
【００６０】
ステップＳ３６において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている鍵盤データ（Ｋｅｙ［］）において、該当する鍵の状態（Ｓｔａｔｕｓ）を“＋”（押鍵状態）に更新するとともに、当該鍵盤データにおける消音時間（ＮｏｔｅＯｆｆ）を更新する。ここで、ＣＰＵ１１は、制御変数に格納されている演奏情報のＰｉｔｃｈを参照して、ステップＳ３１において取得されたＮｏｔｅ［］のＰｉｔｃｈに対応する鍵を特定する。
【００６１】
ステップＳ３７において、ＣＰＵ１１は、次の演奏情報を取得する。ＣＰＵ１１は、この処理が終了すると、ステップＳ３２に処理を移す。
【００６２】
図１２は、離鍵チェック処理の流れを示すフローチャートである。
ステップＳ４１において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている鍵盤データ（Ｋｅｙ［］）から、最初の鍵の情報を取得する。ここで、最初の鍵の情報とは、例えば、最も低音の鍵の情報（Ｋｅｙ［０］）である。
【００６３】
ステップＳ４２において、ＣＰＵ１１は、全ての鍵の情報のチェックが完了したか否かを判定する。すなわち、ＣＰＵ１１は、Ｋｅｙ［］の添え字が、ＲＯＭ１２に記憶されているＫｅｙ［］の添え字の最大値と等しいか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、離鍵チェック処理を終了し、この判定がＮＯの場合、ステップＳ４３に処理を移す。
【００６４】
ステップＳ４３において、ＣＰＵ１１は、ステップＳ４１又はステップＳ４５において取得された鍵の情報に含まれる消音時間（Ｎｏｔｅｏｆｆ）に消音時間を示す情報が記憶されている場合、図１１のステップＳ４４において更新された現在時刻が、当該消音を行う時間を経過しているか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ４４に処理を移し、この判定がＮＯの場合、ステップＳ４５に処理を移す。
【００６５】
ステップＳ４４において、ＣＰＵ１１は、該当する鍵の状態（Ｓｔａｔｕｓ）を“−”（離鍵状態）に更新するとともに、当該鍵盤データにおける消音時間（ＮｏｔｅＯｆｆ）に記憶されている情報を消去する。ＣＰＵ１１は、ステップＳ４４の処理が終了すると、ステップＳ４５に処理を移す。
【００６６】
ステップＳ４５において、ＣＰＵ１１は、次の鍵の情報を取得する。ＣＰＵ１１は、ステップＳ４５の処理が終了すると、ステップＳ４２に処理を移す。
【００６７】
図１３は、再生区間設定処理の流れを示すフローチャートである。
ステップＳ５１において、ＣＰＵ１１は、入力部１５により、演奏において再生する時刻の指示を受け付けることにより指示時刻を取得する。
ステップＳ５２において、ＣＰＵ１１は、演奏データから、発音開始時刻が指示時刻に最も近い演奏情報（Ｎｏｔｅ［］）を検索する。
【００６８】
ステップＳ５３において、ＣＰＵ１１は、ステップＳ５２において、演奏情報を取得できたか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ５４に処理を移し、この判定がＮＯの場合、ステップＳ５５に処理を移す。
【００６９】
ステップＳ５４において、ＣＰＵ１１は、強調区間と繰返し区間とを設定する。具体的には、ＣＰＵ１１は、ステップＳ５２において取得された演奏情報（Ｎｏｔｅ［］）の発音開始時刻（Ｔｉｍｅ）に発音継続時間（Ｇａｔｅ）を加算して得られる消音時刻から、当該消音時刻に所定時間（繰返す時間）を経過させた時刻までを強調区間とする。また、ＣＰＵ１１は、繰返し区間を、強調区間と同一の区間に設定する。
【００７０】
ステップＳ５５において、ＣＰＵ１１は、強調区間と繰返し区間とを設定する。具体的には、ＣＰＵ１１は、ステップＳ５１において取得された指示時刻から、この指示時刻に所定時間（繰返す時間）経過した時刻までを強調区間に設定する。また、ＣＰＵ１１は、繰返し区間を、強調区間と同一の区間に設定する。
【００７１】
ステップＳ５６において、ＣＰＵ１１は、ステップＳ５２において検索された演奏情報の発音開始時刻（Ｔｉｍｅ）の直前の演奏情報を特定し、この特定された演奏情報に含まれる発音開始時刻と発音継続時間とに基づいて、消音時刻を検索する。
【００７２】
ステップＳ５７において、ＣＰＵ１１は、ステップＳ５６における消音時間の検索結果があるか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ５８に処理を移し、この判定がＮＯの場合、ステップＳ５９に処理を移す。
ステップＳ５８において、ＣＰＵ１１は、繰返し開始時刻を、検索結果の消音時刻に設定する。
【００７３】
ステップＳ５９において、ＣＰＵ１１は、消音時刻以降で発音開始時刻（Ｔｉｍｅ）が、当該消音時刻に最も近い演奏情報（Ｎｏｔｅ［］）を検索する。
ステップＳ６０において、ＣＰＵ１１は、ステップＳ５９の検索結果があるか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ６１に処理を移し、この判定がＮＯの場合、再生区間設定処理を終了する。
【００７４】
ステップＳ６１において、ＣＰＵ１１は、強調区間の終了時刻をステップＳ５９における検索結果の発音開始時刻（Ｔｉｍｅ）に設定する。
ステップＳ６１において、ＣＰＵ１１は、繰返し区間の終了時刻をステップＳ５９における検索結果の発音開始時刻（Ｔｉｍｅ）に発音継続時間（Ｇａｔｅ）を加算して得られる消音時刻に設定する。
【００７５】
図１４は、描画処理の流れを示すフローチャートである。
ステップＳ７１において、ＣＰＵ１１は、描画終了フラグがＯＮであるか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、描画処理を終了し、この判定がＮＯの場合、ステップＳ７２に処理を移す。
【００７６】
ステップＳ７２において、ＣＰＵ１１は、視点設定処理を実行する。なお、ＣＰＵ１１は、入力部１５により所定の操作を受け付けたことに応じて、割り込み処理を行い、演奏の再生中に視点設定処理を実行することができる。これにより、演奏動作表示装置１は、演奏の再生中に、視点を変更することができる。
すなわち、ＣＰＵ１１は、ＲＡＭ１３に記憶されている制御変数（ｈａｎｄＣｔｒｌ）に格納されている高さ方向の視野角（ｆ０ｖｙ）、視界の中心座標（Ｃｅｎｔｅｒ［３］）、及び視点（Ｅｙｅ［３］）に基づいて、表示部１６に表示する画面における視点を設定する。
ステップＳ７３において、ＣＰＵ１１は、鍵盤描画処理を実行する。鍵盤描画処理の詳細は、図１５で詳述する。
【００７７】
ステップＳ７４において、ＣＰＵ１１は、右腕描画処理を実行する。右腕描画処理の詳細は、図１６で詳述する。
ステップＳ７５において、ＣＰＵ１１は、左腕描画処理を実行する。左腕描画処理の詳細は、図１６で詳述する。ＣＰＵ１１は、この処理が終了すると、ステップＳ７１に処理を移す。
【００７８】
図１５は、鍵盤描画処理の流れを示すフローチャートである。
ステップＳ８１において、ＣＰＵ１１は、鍵盤を描画するために、鍵の構造データを行列スタックにプッシュする。ここで、行列スタックとは、構造データの描画を行うために用いられるデータ構造である。
ステップＳ８２において、ＣＰＵ１１は、鍵盤を所定角度回転させて描画する際の中心点を原点とする座標系に移動させる。
ステップＳ８３において、ＲＡＭ１３に記憶されている鍵盤データ（Ｋｅｙ［］）から、最初の鍵の構造データを取得する。ここで、最初の鍵の構造データとは、例えば、最も低音の鍵の情報（Ｋｅｙ［０］）に対応する構造データ（Ｖｅｒｔｉｃｅｓ［］［３］）である。
【００７９】
ステップＳ８４において、ＣＰＵ１１は、全ての鍵の描画が完了したか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ８２に処理を移し、この判定がＮＯの場合、ステップＳ８５に処理を移す。
【００８０】
ステップＳ８５において、ＣＰＵ１１は、取得した鍵の構造データに対応する鍵の状態が、“＋”（押鍵状態）又は“−”（離鍵状態）であるか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ８６に処理を移し、この判定がＮＯの場合、ステップＳ９０に処理を移す。
【００８１】
ステップＳ８６において、ＣＰＵ１１は、ステップＳ８３又はステップＳ９１において取得された鍵の構造データを行列スタックにプッシュする。
【００８２】
ステップＳ８７において、ＣＰＵ１１は、ステップＳ８６において行列スタックにプッシュされた構造データの座標系を所定角度だけ回転させる。この状態で描画されることにより、鍵の状態が、“＋”（押鍵状態）又は“−”（離鍵状態）の鍵は、押鍵されているように表示される。
【００８３】
ステップＳ８８において、ＣＰＵ１１は、行列スタックにプッシュされている鍵の構造データをポリゴン描画する。
ステップＳ８９において、ＣＰＵ１１は、ステップＳ６６においてプッシュされた鍵の構造データをポップ（クリア）する。
ステップＳ９０において、ＣＰＵ１１は、行列スタックにプッシュされている鍵の構造データをポリゴン描画する。
【００８４】
ステップＳ９１において、ＣＰＵ１１は、次の鍵の構造データを取得する。なお、ＣＰＵ１１は、直前に取得した鍵の構造データが、最後の鍵（最も高音の鍵）である場合、当該取得されている鍵の構造データを取得した状態を維持する。ＣＰＵ１１は、ステップＳ７１の処理が終了すると、ステップＳ８４に処理を移す。
ステップＳ９２において、ＣＰＵ１１は、ステップＳ８１においてプッシュされた鍵の構造データをポップ（クリア）する。
【００８５】
図１６は、腕描画処理の流れを示すフローチャートである。
ステップＳ１０１において、ＣＰＵ１１は、描画を行う動作情報を取得する処理である対象動作情報取得処理を実行する。対象動作情報取得処理の詳細は、図１７で詳述する。
【００８６】
ステップＳ１０２において、ＣＰＵ１１は、手、指及び腕の表示色を設定する処理である表示色設定処理を実行する。表示色設定処理の詳細は、図１８で詳述する。
ステップＳ１０３において、ＣＰＵ１１は、ステップＳ１０１において取得した起点となる構造物（右腕又は左腕）の構造データを取得して、行列スタックにプッシュする。
ステップＳ１０４において、ＣＰＵ１１は、肩位置から描画を行うために、肩位置を原点とする座標系に移動する。
【００８７】
ステップＳ１０５において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている構造データ（Ｓｔｒｕｃｔ［］）のＣｈｉｌｄ［］を参照して、下位の構造データを取得する。ここでは、ＣＰＵ１１は、右手又は左手の構造データを取得する。
ステップＳ１０６において、ＣＰＵ１１は、手指動画処理を実行する。手指動画処理の詳細は、図１９で詳述する。
ステップＳ１０７において、ＣＰＵ１１は、行列スタックにプッシュされている構造物（右腕又は左腕）の構造データをポップする。
【００８８】
図１７は、対象動作情報取得処理の流れを示すフローチャートである。なお、本フローチャートにおいて説明するＭｏｔｉｏｎ［］は、右腕描画処理を実行する場合、ＭｏｔｉｏｎＲ［］に置き換えるものとし、左腕描画処理を実行する場合、ＭｏｔｉｏｎＬ［］に置き換えるものとする。
【００８９】
ステップＳ１１１において、ＣＰＵ１１は、描画時刻を取得する。
ステップＳ１１２において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている最初の動作情報（Ｍｏｔｉｏｎ［０］）から、描画対象動作情報を取得する。すなわち、ＣＰＵ１１は、Ｍｏｔｉｏｎ［］に格納されているＲｏｏｔＰｏｓ［３］から、表示部１６に構造物を描画する際に起点となる構造物の３次元座標を取得する。
【００９０】
ステップＳ１１３において、ＣＰＵ１１は、動作情報（Ｍｏｔｉｏｎ［］）を全て取得したか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ１１４に処理を移し、この判定がＮＯの場合、ステップＳ１１５に処理を移す。
ステップＳ１１４において、ＣＰＵ１１は、対象動作情報取得処理の戻り値に、最後の動作情報を設定する。最後の動作情報は、動作情報（Ｍｏｔｉｏｎ［］）の添え字が最も大きい動作情報である。ＣＰＵ１１は、この処理が終了すると、対象動作情報取得処理を終了する。
【００９１】
ステップＳ１１５において、ＣＰＵ１１は、図１０のステップＳ１２において設定された現在時刻が、動作情報（Ｍｏｔｉｏｎ［］）に格納されているＴｉｍｅを超過しているか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ１１６に処理を移し、この判定がＮＯの場合、ステップＳ１１７に処理を移す。
【００９２】
ステップＳ１１６において、ＣＰＵ１１は、対象動作情報取得処理の戻り値に、最後に取得された動作情報を設定する。ＣＰＵ１１は、この処理が終了すると、対象動作情報取得処理を終了する。
ステップＳ１１７において、ＣＰＵ１１は、次の動作情報を取得する。なお、ＣＰＵ１１は、直前に取得した動作情報が、最も添え字の値が大きい動作情報である場合、当該取得されている動作情報を取得した状態を維持する。ＣＰＵ１１は、ステップＳ１１７の処理が終了すると、ステップＳ１１３に処理を移す。
【００９３】
図１８は、表示色設定処理の流れを示すフローチャートである。
ステップＳ１２１において、ＣＰＵ１１は、手指の表示色の値を初期値に設定する。例えば、初期値は、肌色に対応する値である。
【００９４】
ステップＳ１２２において、ＣＰＵ１１は、描画状態フラグが「１：ループ区間内」であるか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ１２３に処理を移し、この判定がＮＯの場合、ステップＳ１２４に処理を移す。
ステップＳ１２３において、ＣＰＵ１１は、表示色をループ内表示色に変更する。ループ内表示色は予め定められており、ＲＯＭ１２に記憶されている。この処理により、ループ区間内の演奏動作が強調表示される。ＣＰＵ１１は、この処理が終了すると、表示色設定処理を終了する。
【００９５】
ステップＳ１２４において、ＣＰＵ１１は、描画状態フラグが「２：ループ区間外」であるか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ１２５に処理を移し、この判定がＮＯの場合、表示色設定処理を終了する。
ステップＳ１２５において、表示色の値を初期値に比べて薄い色に変更する。例えば、ＣＰＵ１１は、以下に示す（１）式に従って表示色を変更する。
表示色の値＝ループ内表示色の値＋（ループ外表示色の値−ループ内表示色の値）＊［オフセット比＋現在時刻とループ区分の差分／オフセット時間］・・・（１）
【００９６】
図１９は、手指描画処理の流れを示すフローチャートである。なお、本フローチャートにおいて説明するＳｔｒｕｃｔ［］は、右手に対応する手指描画処理を実行する場合、ＳｔｒｕｃｔＲ［］に置き換えるものとし、左手に対応する手指描画処理を実行する場合、ＳｔｒｕｃｔＬ［］に置き換えるものとする。
【００９７】
ステップＳ１３１において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている構造データ（Ｓｔｒｕｃｔ［］）を参照して、Ｌａｍｂｄａ［］の値（ｚ軸回転角）を取得する。そして、ＣＰＵ１１は、取得したｚ軸回転角に基づいて、座標系においてｚ軸の描画角度を回転させる。
【００９８】
ステップＳ１３２において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている構造データ（Ｓｔｒｕｃｔ［］）を参照して、Ｐｈｉ［］の値（ｙ軸回転角）を取得する。そして、ＣＰＵ１１は、取得したｙ軸回転角に基づいて、座標系においてｙ軸の描画角度を回転させる。
【００９９】
ステップＳ１３３において、ＣＰＵ１１は、図１６のステップＳ１０５において取得された手の構造データを行列スタックにプッシュする。ここで、ＣＰＵ１１は、当該手の構造データに対して、既に図１６のステップＳ１０３において行列スタックにプッシュされている腕の構造データの値を乗算し、その後、乗算した結果を行列スタックにプッシュする。この状態において手の構造データを描画すると、手が腕に連結された状態で描画される。
【０１００】
ステップＳ１３４において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている構造データ（Ｓｔｒｕｃｔ［］）を参照して、Ｔｈｅｔａ［］の値（ｘ軸回転角）を取得する。そして、ＣＰＵ１１は、取得したｘ軸回転角に基づいて、座標系においてｘ軸の描画角度を回転させる。
【０１０１】
ステップＳ１３５において、ＣＰＵ１１は、行列スタックに格納されている手の構造データのポリゴン描画を行う。上述したように、手が腕に連結された状態で描画される。
ステップＳ１３６において、ＣＰＵ１１は、行列スタックから手構造データをポップする。
【０１０２】
ステップＳ１３７において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている構造データ（Ｓｔｒｕｃｔ［］）から、Ｌｅｎｇｔｈの値（構造の長さ）を取得する。そして、ＣＰＵ１１は、座標系をｘ軸方向に構造の長さ分移動する。
【０１０３】
ステップＳ１３８において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている構造データ（Ｓｔｒｕｃｔ［］）のＣｈｉｌｄｒｅｎの値を参照して、子構造があるか判定する。ここで、子構造は指を示す情報である。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ１３９に処理を移し、この判定がＮＯの場合、手指描画処理を終了する。
【０１０４】
ステップＳ１３９において、ＣＰＵ１１は、ＲＡＭ１３に記憶されている構造データ（Ｓｔｒｕｃｔ［］）のＣｈｉｌｄ［］の値を参照して、最初の指構造データを取得する。例えば、指構造データを親指から小指に向かって順に取得する場合、ＣＰＵ１１は、最初の指構造データとして、親指の親構造データを取得する。
【０１０５】
ステップＳ１４０において、ＣＰＵ１１は、全ての指の描画が完了したか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、手指描画処理を終了し、この判定がＮＯの場合、ステップＳ１４１に処理を移す。
【０１０６】
ステップＳ１４１において、ＣＰＵ１１は、ステップＳ１３９又はステップＳ１４４において取得された指構造データを行列スタックにプッシュする。ここで、ＣＰＵ１１は、当該指の構造データに対して、手の構造データの値を乗算し、その後、乗算した結果を行列スタックにプッシュする。この状態において指の構造データを描画すると、指が手に連結された状態で描画される。
【０１０７】
ステップＳ１４２において、ＣＰＵ１１は、ステップＳ１４１において行列スタックにプッシュされた構造データに基づいて、子構造の描画、ここでは例えば指の構造データの描画を行う。
ステップＳ１４３において、ＣＰＵ１１は、ステップＳ１４２において子構造描画が行われた構造データを行列スタックからポップする。
ステップＳ１４４において、ＣＰＵ１１は、次の指構造データを取得する。例えば、直前に親指の構造データが取得されている場合、ＣＰＵ１１は、人差し指に対応する構造データを取得する。また、例えば、直前に小指の構造データが取得されている場合、ＣＰＵ１１は、小指に対応する構造データを再取得する。ＣＰＵ１１は、この処理が終了するとステップＳ１４０に処理を移す。
【０１０８】
以上説明したように、第１実施形態では、入力部１５により、演奏において、繰返し再生する際に演奏を開始する時刻としての指示時刻を受け付ける。そして、ＣＰＵ１１により、演奏情報に基づいて、指示時刻から繰返し再生される動作の終了時刻を特定し、指示時刻と特定された終了時刻とに基づいて演奏を繰返し再生する区間である繰返し区間を設定し、演奏情報、動作情報、鍵盤データ、構造データに基づいて、繰返し区間における各時刻について、当該時刻における鍵盤の押鍵位置を示す前記手指の動作画像を表示部１６に繰返し描画する。
【０１０９】
このように、演奏動作表示装置１は、指示時刻と終了時刻とによって設定された繰返し区間に基づいて、演奏動作画像を表示するため、演奏者が、局所的な動作について、容易に確認することができる。また、演奏動作表示装置１は、例えば、演奏中に演奏箇所を追跡する機能（装置）と連携し、演奏中につまずいた場合において繰返し区間の再生を行うことによって、演奏者の演奏を支援することができる。よって、演奏動作表示装置１は、演奏者にとって練習しやすい演奏動作の表示をすることができる。
【０１１０】
特に、演奏動作表示装置１では、ＣＰＵ１１は、繰返し区間における手指の動作画像の表示態様を、手指の動作画像を繰り返し描画しない場合の手指の動作画像の表示態様に比べて変化させる。これにより、演奏動作表示装置１は、繰返し区間の再生を強調することができ、演奏者に練習を集中させやすくできる。
【０１１１】
［第２実施形態］
続いて、第２実施形態について説明する。
第２実施形態の演奏動作表示装置は、第１実施形態の演奏動作表示装置１と異なり、演奏テクニックフラグに基づいて、繰返し区間の消音時刻を設定する。
【０１１２】
第２実施形態の演奏動画表示装置のハードウェア構成及び機能的構成は、第１実施形態のものと同様であり、図１に示すとおりのものであるため、ここではその説明を省略する。
【０１１３】
以下、図２０から図２２を参照して、第２実施形態の演奏動作表示装置が実行する再生区間設定処理と表示色設定処理について説明する。
図２０及び図２１は、第２実施形態の演奏動作表示装置における再生区間設定処理の流れを示すフローチャートである。
【０１１４】
ステップＳ５１からステップＳ６２までの処理は第１実施形態の再生区間設定処理におけるステップＳ５１からステップＳ６２までの処理と同一の処理であるので、説明を省略する。
図２１に移り、ステップＳ６３において、ＣＰＵ１１は、消音時刻以降で、所定オフセット範囲内において、テクニックフラグがＯＮとなっている演奏情報を検索する。
ステップＳ６４において、ＣＰＵ１１は、ステップＳ６３における演奏情報の検索結果があるか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ６５に処理を移し、この判定がＮＯの場合、再生区間設定処理を終了する。
【０１１５】
ステップＳ６５において、ＣＰＵ１１は、繰返し区間の終了時刻を、検索された演奏情報の発音開始時刻（Ｔｉｍｅ）に発音継続時間（Ｇａｔｅ）を加算して得られる消音時刻に設定する。
なお、第２実施形態の演奏動作表示装置では、テクニックフラグの有無に基づいて消音時刻の変更をするか否かの設定を受け付け、この設定情報に基づいて、消音時刻の設定方法を決定するようにしてもよい。
【０１１６】
ステップＳ６６において、ＣＰＵ１１は、演奏テクニック検知フラグをＯＮにする。なお、演奏テクニック検知フラグは、メイン処理のステップＳ１における初期化処理において、予めＲＡＭ１３に読み込まれ、ＯＦＦに設定されているものについて、ＯＮに設定されるものとする。
【０１１７】
図２２は、第２実施形態の演奏動作表示装置における表示色設定処理の流れを示すフローチャートである。
ステップＳ１２１からステップＳ１２３までの処理は、第１実施形態の表示色設定処理のステップＳ１２１からステップＳ１２３までの処理と同一の処理であるので、説明を省略する。
【０１１８】
ステップＳ１２４において、ＣＰＵ１１は、描画状態フラグが「２：ループ区間外」であるか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ１２６に処理を移し、この判定がＮＯの場合、表示色設定処理を終了する。
ステップＳ１２６において、ＣＰＵ１１は、ＲＡＭ１３に記憶されているテクニック検知フラグがＯＮであるか否かを判定する。ＣＰＵ１１は、この判定がＹＥＳの場合、ステップＳ１２７に処理を移し、この判定がＮＯの場合、ステップＳ１２８に処理を移す。
【０１１９】
ステップＳ１２７において、ＣＰＵ１１は、表示色の値をテクニック表示色に変更する。例えば、ＣＰＵ１１は、以下に示す（２）式に従って表示色を変更する。
表示色の値＝ループ内表示色の値＋（テクニック表示色の値−ループ内表示色の値）＊［オフセット比＋現在時刻とテクニック発音時間の差分／オフセット時間］・・・（２）
【０１２０】
ステップＳ１２８において、ＣＰＵ１１は、表示色の値を初期値に比べて薄い色に変更する。例えば、ＣＰＵ１１は、以下に示す（３）式に従って表示色を変更する。
表示色の値＝ループ内表示色の値＋（ループ外表示色の値−ループ内表示色の値）＊［オフセット比＋現在時刻とループ区分の差分／オフセット時間］・・・（３）
【０１２１】
以上説明したように、第２実施形態では、演奏動作表示装置は、繰返し区間の消音時刻以降で、所定オフセット範囲内において、テクニックフラグがＯＮとなっている演奏情報がある場合に、繰返し区間の消音時刻を延長する。よって、ユーザが指示した指示時刻の近辺に演奏が難しくテクニックフラグがＯＮになっている演奏についても繰返し再生の対象とするので、演奏者は、演奏が難しい箇所についても同時に確認することができる。
【０１２２】
また、上述の実施形態では、本発明が適用される演奏動作表示装置は、演奏動作表示装置１を例として説明したが、特にこれに限定されない。
例えば、本発明は、鍵盤と演奏動作表示機能とを有する電子楽器一般に適用することができる。具体的には、例えば、本発明は、電子ピアノ、電子オルガン等に適用可能である。
【０１２３】
上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもできる。
換言すると、図１の構成は例示に過ぎず、特に限定されない。すなわち、上述した一連の処理を全体として実行できる機能が演奏動作表示装置１に備えられていれば足り、この機能を実現するためにどのような構成を構築するのかは特に図１の例に限定されない。
【０１２４】
一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、コンピュータ等にネットワークや記録媒体からインストールされる。
このコンピュータは、専用のハードウェアに組み込まれているコンピュータであってもよい。また、コンピュータは、各種のプログラムをインストールすることで、各種の機能を実行することが可能なコンピュータであってもよい。
【０１２５】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、その順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的或いは個別に実行される処理をも含むものである。
また、本明細書において、システムの用語は、複数の装置や複数の手段等より構成される全体的な装置を意味するものとする。
【０１２６】
以上、本発明の実施形態について説明したが、この実施形態は、例示に過ぎず、本発明の技術的範囲を限定するものではない。本発明はその他の様々な実施形態を取ることが可能であり、さらに、本発明の要旨を逸脱しない範囲で、省略や置換等種々の変更を行うことができる。これら実施形態やその変形は、本明細書等に記載された発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【０１２７】
以下に、本願の出願当初の特許請求の範囲に記載された発明を付記する。
［付記１］
演奏における、発音開始時刻、発音継続時間、音高、及び使用する指を示すデータを格納する演奏情報と、
前記演奏情報に基づく鍵盤の押鍵状態を格納する鍵盤データを記憶する鍵盤データと、
手指の構造を示す構造データとを記憶する構造データと、
前記発音開始時刻に対応して前記構造データを表示させるためデータを記憶する動作情報と、を記憶する記憶手段と、
演奏において、繰返し再生する際に演奏を開始する時刻としての指示時刻を受け付ける受付手段と、
前記演奏情報に基づいて、前記指示時刻から繰返し再生される動作の終了時刻を特定し、前記指示時刻と特定された終了時刻とに基づいて演奏を繰返し再生する区間を設定する設定手段と、
前記演奏情報、前記動作情報、前記鍵盤データ、前記構造データに基づいて、前記区間における各時刻について、当該時刻における鍵盤の押鍵位置を示す前記手指の動作画像を表示手段に繰返し描画する描画手段と、
を備えることを特徴とする演奏動作表示装置。
［付記２］
前記描画手段は、区間における前記手指の動作画像の表示態様を、前記手指の動作画像を繰り返し描画しない場合の手指の動作画像の表示態様に比べて変化させることを特徴とする、
付記１に記載の演奏動作表示装置。
［付記３］
演奏動作表示装置が、演奏動作表示を行う方法であって、
前記演奏動作表示装置は、演奏における、発音開始時刻、発音継続時間、音高、及び使用する指を示すデータを格納する演奏情報と、前記演奏情報に基づく鍵盤の押鍵状態を格納する鍵盤データを記憶する鍵盤データと、手指の構造を示す構造データとを記憶する構造データと、前記発音開始時刻に対応して前記構造データを表示させるためデータを記憶する動作情報と、を記憶する記憶手段を備え、
前記方法は、
演奏において、繰返し再生する際に演奏を開始する時刻としての指示時刻を受け付ける受付ステップと、
前記演奏情報に基づいて、前記指示時刻から繰返し再生される動作の終了時刻を特定し、前記指示時刻と特定された終了時刻とに基づいて演奏を繰返し再生する区間を設定する設定ステップと、
前記演奏情報、前記動作情報、前記鍵盤データ、前記構造データに基づいて、前記区間における各時刻について、当該時刻における鍵盤の押鍵位置を示す前記手指の動作画像を表示手段に繰返し描画する描画ステップと、
を含むことを特徴とする方法。
［付記４］
演奏における、発音開始時刻、発音継続時間、音高、及び使用する指を示すデータを格納する演奏情報と、前記演奏情報に基づく鍵盤の押鍵状態を格納する鍵盤データを記憶する鍵盤データと、手指の構造を示す構造データとを記憶する構造データと、前記発音開始時刻に対応して前記構造データを表示させるためデータを記憶する動作情報と、を記憶する記憶手段を備えた演奏動作表示装置に、演奏動作を表示する処理を実行させるプログラムであって、
演奏において、繰返し再生する際に演奏を開始する時刻としての指示時刻を受け付ける受付ステップと、
前記演奏情報に基づいて、前記指示時刻から繰返し再生される動作の終了時刻を特定し、前記指示時刻と特定された終了時刻とに基づいて演奏を繰返し再生する区間を設定する設定ステップと、
前記演奏情報、前記動作情報、前記鍵盤データ、前記構造データに基づいて、前記区間における各時刻について、当該時刻における鍵盤の押鍵位置を示す前記手指の動作画像を表示手段に繰返し描画する描画ステップと、
を前記演奏動作表示装置に実行させることを特徴とするプログラム。
【符号の説明】
【０１２８】
１・・・演奏動作表示装置、２・・・電子楽器、１１・・・ＣＰＵ、１２・・・ＲＯＭ、１３・・・ＲＡＭ、１４・・・バス、１５・・・入力部、１６・・・表示部、１７、２１・・・ＭＩＤＩインターフェース、２２・・・鍵盤、２３・・・音源・サウンドシステム
【図１】
2013160950.tif 000003
【図２】
2013160950.tif 000004
【図３】
2013160950.tif 000005
【図４】
2013160950.tif 000006
【図５】
2013160950.tif 000007
【図６】
2013160950.tif 000008
【図７】
2013160950.tif 000009
【図８】
2013160950.tif 000010
【図９】
2013160950.tif 000011
【図１０】
2013160950.tif 000012
【図１１】
2013160950.tif 000013
【図１２】
2013160950.tif 000014
【図１３】
2013160950.tif 000015
【図１４】
2013160950.tif 000016
【図１５】
2013160950.tif 000017
【図１６】
2013160950.tif 000018
【図１７】
2013160950.tif 000019
【図１８】
2013160950.tif 000020
【図１９】
2013160950.tif 000021
【図２０】
2013160950.tif 000022
【図２１】
2013160950.tif 000023
【図２２】
2013160950.tif 000024