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