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