(57)【特許請求の範囲】
【請求項１】
ユーザが保持可能な保持部材と、
前記保持部材の互いに直交する３軸それぞれの方向に生じる加速度を検出する加速度センサと、
前記直交する３軸それぞれを中心として回転した場合に生じる角速度を検出する角速度センサと、
前記角速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる角速度に基づいて、演奏操作中の前記保持部材の角速度の最大値を取得する第１取得手段と、
前記加速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる加速度に基づいて、前記保持部材の加速度の最大値を取得する第２取得手段と、
前記加速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる加速度に基づいて、前記保持部材の速度の最大値を取得する第３取得手段と、
前記第１取得手段により取得された前記角速度の最大値と、前記第２取得手段により取得された前記加速度の最大値と、前記第３取得手段により取得された前記速度の最大値とに基づいて、発音する楽音の音量を制御する音量制御手段と、を備える、
ことを特徴とする演奏装置。
【請求項２】
ユーザが保持可能な保持部材と、前記保持部材の互いに直交する３軸のそれぞれの方向に生じる加速度を検出する加速度センサと、前記直交する３軸それぞれを中心として回転した場合に生じる角速度を検出する角速度センサと、を有する演奏装置が実行する方法であって、
前記角速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる角速度に基づいて、演奏操作中の前記保持部材の角速度の最大値を取得する第１取得ステップと、
前記加速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる加速度に基づいて、前記保持部材の加速度の最大値を取得する第２取得ステップと、
前記加速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる加速度に基づいて、前記保持部材の速度の最大値を取得する第３取得ステップと、
前記第１取得ステップにて取得された前記角速度の最大値と、前記第２取得ステップにて取得された前記加速度の最大値と、前記第３取得ステップにより取得された前記速度の最大値とに基づいて、発音する楽音の音量を制御する音量制御ステップと、
を含む方法。
【請求項３】
ユーザが保持可能な保持部材と、前記保持部材の互いに直交する３軸のそれぞれの方向に生じる加速度を検出する加速度センサと、前記直交する３軸それぞれを中心として回転した場合に生じる角速度を検出する角速度センサと、を有する演奏装置として用いられるコンピュータに、
前記角速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる角速度に基づいて、演奏操作中の前記保持部材の角速度の最大値を取得する第１取得ステップと、
前記加速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる加速度に基づいて、前記保持部材の加速度の最大値を取得する第２取得ステップと、
前記加速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる加速度に基づいて、前記保持部材の速度の最大値を取得する第３取得ステップと、
前記第１取得ステップにて取得された前記角速度の最大値と、前記第２取得ステップにて取得された前記加速度の最大値と、前記第３取得ステップにより取得された前記速度の最大値とに基づいて、発音する楽音の音量を制御する音量制御ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演奏装置、方法及びプログラムに関する。
【背景技術】
【０００２】
従来、演奏者の演奏動作を検知すると、演奏動作に応じた音を発音する演奏装置が提案されている。例えば、スティック状の部材のみからなる構成で打楽器音を発音する演奏装置が知られており、この演奏装置では、スティック状の部材にセンサが設けられ、演奏者が、部材を手で保持して振ることで、センサがその演奏動作を検知して、打楽器音を発音する。
このような仮想的な演奏装置によれば、現実の楽器を必要とせずに当該楽器の楽音を発音することができるため、演奏者は、演奏場所や演奏スペースに制約を受けずに演奏を楽しむことができる。
【０００３】
上述のような仮想的演奏装置として、例えば、特許文献１には、スティック状の部材に加速度センサを設け、この部材を振ることにより加速度センサから得られる出力（加速度値）が所定の閾値に達した後、楽音を発音するように構成された演奏装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２５６７３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１では、発音する際の音量の決定についての記載はなく、特許文献１の発明をそのまま適用するならば、加速度の大きさに応じて音量を決定しなければならない。ところが、ショットの強さは減速方向の加速度に応じて決定されるが、速度は、加速度を積分して求めるため、加速度に誤差が生じると誤差を積分することになり、スティックが動きっぱなしになると、速度の精度が著しく悪化してしまい、減速と加速の区別がつかなくなる。
【０００６】
そのため、仮想的な音源を仮想的な水平面上にのみ配置する制約を設け、重力方向と逆方向が減速方向であるので、その方向の加速度成分からスティックの発音量を決定する方法が提案されている。しかし、この方法では、仮想的な音源が仮想空間内に垂直に配置されている場合は応用できない問題があった。
【０００７】
本発明は、このような状況に鑑みてなされたものであり、仮想的な音源が仮想空間内に垂直に配置されている場合であっても、スイング動作の強さを反映して適切な音量制御が可能な演奏装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明の一態様の演奏装置は、
ユーザが保持可能な保持部材と、
前記保持部材の互いに直交する３軸それぞれの方向に生じる加速度を検出する加速度センサと、
前記直交する３軸それぞれを中心として回転した場合に生じる角速度を検出する角速度センサと、
前記角速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる角速度に基づいて、演奏操作中の前記保持部材の角速度の最大値を取得する第１取得手段と、
前記加速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる加速度に基づいて、前記保持部材の加速度の最大値を取得する第２取得手段と、
前記加速度センサが検出した前記保持部材の振り下ろし動作に対応して生じる加速度に基づいて、前記保持部材の速度の最大値を取得する第３取得手段と、
前記第１取得手段により取得された前記角速度の最大値と、前記第２取得手段により取得された前記加速度の最大値と、前記第３取得手段により取得された前記速度の最大値とに基づいて、発音する楽音の音量を制御する音量制御手段と、を備える、
ことを特徴とする。
【発明の効果】
【０００９】
本発明によれば、仮想的な音源が仮想空間内に垂直に配置されている場合であっても、スイング動作の強さを反映して適切な音量制御が可能となる。
【図面の簡単な説明】
【００１０】
【図１】本発明の演奏装置の一実施形態の概要を示す図である。
【図２】上記演奏装置のスティック部の構成を示すブロック図である。
【図３】上記演奏装置の発音部の構成を示すブロック図である。
【図４】上記演奏装置のスティック部についての詳細を説明する図である。
【図５】本発明の演奏装置の一実施形態に係るワールド座標系について説明する図である。
【図６】上記スティック部のＣＰＵが実行する処理の流れを示すフローチャートである。
【図７】姿勢センサと姿勢の初期化処理の流れを示すフローチャートである。
【図８】姿勢推定処理の流れを示すフローチャートである。
【図９】位置推定処理の流れを示すフローチャートである。
【図１０】先端動き予測処理の流れを示すフローチャートである。
【図１１】上記スティック部のスティック先端回転軸とスイング方向との関係を示す図である。
【図１２】第１の実施例における発音タイミング検出処理の流れを示すフローチャートである。
【図１３】第２の実施例における発音タイミング検出処理の流れを示すフローチャートである。
【図１４】上記スティック部の動作状態の遷移を示す図である。
【図１５】発音量検出処理の流れを示すフローチャートである。
【図１６】ノートイベント生成処理の流れを示すフローチャートである。
【図１７】変形例におけるサウンド探索処理の流れを示すフローチャートである。
【図１８】発音処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態について、図面を用いて説明する。
【００１２】
以下、添付図面を参照して、本発明の実施形態について説明する。
図１は、本発明の一実施形態の演奏装置１の概要を示す図である。図１に示すように本発明の演奏装置１は、スティック部１０と、発音部３０とから構成される。
スティック部１０は、長手方向に延びるスティック状の部材である。演奏者は、スティック部１０の一端（根元側）を手に持ち手首などを中心とした振り上げ及び振り下ろし動作を行うことで、演奏動作を行う。このような演奏者の演奏動作を検知するため、スティック部１０の他端（先端側）には、姿勢センサ１２が設けられている（図２参照）。
【００１３】
発音部３０は、楽音を発音する。
このような演奏装置１では、スティック部１０を用いた演奏動作、すなわち、スティック部１０の振り下ろし動作に応じて、発音部３０は、所定の楽音を発音する。これにより、演奏者による演奏が行われる。
【００１４】
［演奏装置１の構成］
初めに、図２及び図３を参照して、本実施形態の演奏装置１の各構成要素、具体的には、スティック部１０、及び発音部３０の構成について説明する。
【００１５】
［スティック部１０の構成］
図２は、スティック部１０の構成を示すブロック図である。図２に示すように、スティック部１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１、姿勢センサ１２、Ｉ／Ｆ（インタフェース）装置１３、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１４、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１５、入力部１６、無線通信装置１７及びＬＥＤ１８から構成される。
姿勢センサ１２は、地磁気方向を計測する３軸の磁気センサ１２１、スティックに加わる加速度を測定するための３軸の加速度センサ１２２、及びスティックの回転動作を計測する３軸の角速度センサ１２３から構成される。各センサは３つの軸ｘ、ｙ、ｚの軸方向の計測が可能になっている。
【００１６】
図４を参照して、本実施形態では、スティック部１０の長手方向の軸と一致する軸をｙ軸とし、姿勢センサ１２が配置された基板（図示せず）と平行で、かつ、ｙ軸と直交する軸をｘ軸とし、ｘ軸及びｙ軸と直交する軸をｚ軸としている。磁気センサ１２１は、地磁気ベクトルのｘ軸、ｙ軸、ｚ軸のそれぞれの成分の地磁気値を取得できる。また、加速度センサ１２２は、ｘ軸、ｙ軸、ｚ軸のそれぞれの成分の加速度値を取得できる。また角速度センサ１２３は軸それぞれを中心とする角速度の成分の値（ωｘ、ωｙ、ωｚ）を取得できる。
ここで、演奏者は、スティック部１０の一端（根元側）を保持し、手首などを中心とした振り上げ及び振り下ろし動作を行うことで、スティック部１０に対して回転運動や平行運動などを生じさせる。これらの動きを姿勢センサ１２で検出をおこない、ＣＰＵ１１に送り出す。
【００１７】
図２に戻り、ＣＰＵ１１は、姿勢センサ１２が検出した加速度値、角速度値、地磁気方向と強度を読み出し、これらの値に応じて、スティックの姿勢、及び、発音のタイミング検出を行う。これにより、ＣＰＵ１１は、その発音に対応するノートオンイベントの生成を行い、Ｉ／Ｆ装置１３及び無線通信装置１７を介してノートオンイベントを発音部３０に送信する。ここで、ノートオンイベントとは、楽音の発音を音源部３７１（図３参照）に対して指示するコマンド情報であり、本実施形態においては、発音する楽音の音色や音高の情報に加えて、さらに楽音の音量などの情報を含むものである。
【００１８】
このように、ＣＰＵ１１は、スティック部１０が有する姿勢センサ１２の各センサ値に基づいて発音部３０にノートオンイベントを送信することで、発音部３０は、スティック部１０を用いた演奏動作に基づいて所定の楽音を発音することができる。
【００１９】
ＲＯＭ１４は、ＣＰＵ１１が実行する各種処理の処理プログラム、すなわち、前述したように、姿勢センサ１２によるデータの取得、ノートオンイベントの生成処理、ノートオンイベントの送信処理などの処理プログラムを格納する。ＲＡＭ１５は、姿勢センサ１２の各センサ値、処理において取得され或いは生成された値を格納する。Ｉ／Ｆ１３は、ＣＰＵ１１からの指示にしたがって無線通信装置１７にデータを出力する。
【００２０】
また、入力部１６は、各種スイッチ（図示せず）を有し、演奏者からの各種指示入力を受け付ける。
【００２１】
無線通信装置１７は、発音部３０との間で所定の無線通信を行う。所定の無線通信は、任意の方法で行うこととしてよく、本実施形態では、無線通信装置１７は、赤外線通信により発音部３０との間で無線通信を行う。ＬＥＤ１８は、ＣＰＵ１１からの制御に応じて発光及び消灯する。なお、ＬＥＤ１８は、スティックの姿勢の初期化などのスティックの処理状態を示すためなどに用いられる。
【００２２】
［発音部３０の構成］
【００２３】
次に、図３を参照して、発音部３０の構成について説明する。図３は、発音部３０の構成を示すブロック図である。図３に示すように、発音部３０は、ＣＰＵ３１、Ｉ／Ｆ（インタフェース）３２、ＲＯＭ３３、ＲＡＭ３４、表示部３５、入力部３６及びサウンドシステム３７から構成される。発音部３０のＩ／Ｆ３２は、スティック部１０からのデータ（例えば、楽音を発音する制御データであるノートオンイベント）を受け入れて、ＲＡＭ３４に格納するとともに、ＣＰＵ３１にデータの受け入れを通知する。本実施形態においては、スティック部１０に無線通信装置１７が、発音部３０に赤外線通信装置３８が設けられている。Ｉ／Ｆ３２は、スティック部１０の無線通信装置１７が発した無線信号を、赤外線通信装置３８で受信することで、スティック部１０からデータを受信する。
【００２４】
ＣＰＵ３１は、演奏装置１全体の制御、特に、発音部３０の制御、入力部３６を構成するキースイッチ（図示せず）の操作の検出、Ｉ／Ｆ３２を介して受信したスティック部１０からのノートオンイベントに基づく楽音の発音など、種々の処理を実行する。
【００２５】
ＲＯＭ３３は、演奏装置１全体の制御、特に、発音部３０の制御、入力部３６を構成するキースイッチ（図示せず）の操作の検出、Ｉ／Ｆ３２を介して受信したノートオンイベントに基づく楽音の発音など、種々の処理プログラムを格納する。また、ＲＯＭ３３は、種々の音色の波形データ、例えば、フルート、サックス、トランペットなどの管楽器、ピアノなどの鍵盤楽器、ギターなどの弦楽器、バスドラム、ハイハット、スネア、シンバル、タムなど打楽器の波形データを格納する波形データエリアを含む。
【００２６】
ＲＡＭ３４は、ＲＯＭ３３から読み出されたプログラムや、処理の過程で生じたデータやパラメータを記憶する。処理の過程で生じたデータには、入力部３６のスイッチの操作状態、Ｉ／Ｆ３２を介して受信したノートオンイベントや演奏者の身体動作の状態（前進フラグや変位量）などが含まれる。
【００２７】
表示部３５は、例えば、液晶表示装置で構成され、選択された音色や音量、演奏者の身体動作の状態（基準位置からの変位量）などを画像として表示する。また、入力部３６は、各種スイッチ（図示せず）を有し、演奏者からの各種情報の入力を受け付ける。
【００２８】
サウンドシステム３７は、音源部３７１、オーディオ回路３７２及びスピーカ３７３を含む。音源部３７１は、ＣＰＵ３１からの指示にしたがって、ＲＯＭ３３の波形データエリアから波形データを読み出して、楽音データを生成して出力する。オーディオ回路３７２は、音源部３７１から出力された楽音データをアナログ信号に変換するとともに、変換したアナログ信号を増幅してスピーカ３７３に出力する。これによりスピーカ３７３から楽音が出力される。
【００２９】
［座標系の説明］
次に本実施形態におけるスティックの姿勢、及びワールド座標系について図５を参照して説明する。ここでワールド座標とは、演奏者を中心とした座標系のことをいう。図５にあるように演奏者から見て右水平方向をＸ軸、前方水平方向をＹ軸、天頂方向をＺ軸と定義する。図４で記載したスティック部１０の３軸であるｘ軸、ｙ軸、ｚ軸とは異なる。本実施形態では、スティック部１０の３軸を、ローカル座標系と呼び小文字で表すのに対して、ワールド座標系では３軸を大文字で表す。演奏者がスティック部１０をスイングさせると時間とともにローカル座標とワールド座標との関係が変わっていく。ワールド座標系から見て、スティック部１０のローカル座標系の向きがどのようになっているかをスティックの姿勢と呼ぶ。
【００３０】
また、スティック部１０が移動すると、ワールド座標系の原点からみたローカル座標系の原点も移動する。ワールド座標系から見たローカル座標系の原点をスティック部１０の位置と呼ぶ。
【００３１】
［演奏装置１の処理］
【００３２】
続いて、本実施形態の演奏装置１の処理について説明する。初めに、図６を参照しながらスティック部１０において実行される処理について概要説明をする。
【００３３】
図６は、スティック部１０のＣＰＵ１１が実行する処理の流れを示すフローチャートである。ＣＰＵ１１は、ＲＯＭ１４からプログラムコードを読みだして実行する。
【００３４】
まず、ＣＰＵ１１は、姿勢センサ１２が有する各種センサの初期化とＲＡＭ１５のデータのクリアなどを含むイニシャライズ処理を実行する（ステップＳ１１）。イニシャライズ処理が終了すると、ＣＰＵ１１は、姿勢センサ１２が有する各種センサのもつデバイスのばらつきや温度によって変化するオフセットやゲイン調整などを実行する（ステップＳ１２）。次に、ＣＰＵ１１は、入力部３６のスイッチの状態を読み出してＲＡＭ１５に保存する（ステップＳ１４）。ＲＡＭ１５に保存された当該スイッチの状態は、後述する位置検出の補助などに用いられる。
【００３５】
次に、ＣＰＵ１１は、ユーザがスティック部１０をスイングしたとき、そのスイングに応じて発音させる処理を実行する（ステップＳ１６〜Ｓ２４））。まず、ＣＰＵ１１は、姿勢センサ１２の加速度値、角速度値、及び地磁気の方向と強度をＲＡＭ１５に保存する（ステップＳ１６）。
【００３６】
ＣＰＵ１１は、この読みだした値に応じてスティック部１０の姿勢の推定を実行し（ステップＳ１７）、次に、スティック部１０の平行移動の位置推定を実行する（ステップＳ１８）。さらに、ＣＰＵ１１は、スティック部１０の先端の動き予測を実行し（ステップＳ１９）、この予測された動きを用いて、発音タイミングの検出を実行する（ステップＳ２０）。さらに、ＣＰＵ１１は、発音量の検出を実行する（ステップＳ２１）。ステップＳ２０において発音タイミングである（動作状態が後述する「ＳＨＯＴ」である）場合（ステップＳ２２でＹＥＳと判定された場合）、ＣＰＵ１１は、スティック部１０の姿勢及び位置に応じて楽音の音色や音高を決定してノートオンイベントを生成し（ステップＳ２３）、生成されたノートオンイベントを発音部３０に送信する（ステップＳ２４）。
【００３７】
［姿勢センサと姿勢の初期化］
図７を参照して、図６のステップＳ１２の姿勢センサと姿勢の初期化処理の詳細説明を行う。
【００３８】
図７は、姿勢センサと姿勢の初期化処理の流れを示すフローチャートである。
まず、ＣＰＵ１１は、ユーザにスティック部１０の先端を前方方向に向けて静止してもらうように表示を行う（ステップＳ７１）。表示の例としては、ＣＰＵ１１は、ＬＥＤ１８を緑色に点灯させる。
【００３９】
次に、ＣＰＵ１１は、角速度センサ１２３の各軸のデータを読み出す。角速度センサ１２３は通常、デバイスのばらつきや温度変動により、角速度０であるときのオフセット値が変動する。ＣＰＵ１１は、角速度センサ１２３の値をオフセット値としてＲＡＭ１５に記憶する（ステップＳ７２）。以降のステップでは、ＣＰＵ１１は、角速度センサ１２３の値を読み出したとき、読み出した値からこのオフセット値を引くことで、スティック部１０が静止しているときの角速度が０となるように調整する。
【００４０】
次に、ＣＰＵ１１は、加速度センサ１２２の各軸のデータを読み出して、前回の加速度と比較し重力方向の変化を検出したか否かを判断する（ステップＳ７４）。具体的には、スティック部１０の静止状態では、加速度センサ１２２の値は重力方向の各軸成分のみを示すことになるので、ＣＰＵ１１は、各軸成分の値に変化がない場合に、スティックが静止状態であることを検出できる。本実施形態では、ＣＰＵ１１は、１秒程度変化がない場合に、スティックが静止状態であることを検出する。ＣＰＵ１１は、スティックが静止状態であることを検出した場合には、角速度のオフセット値の登録を完了して、ステップＳ７５に処理を移す。一方、ＣＰＵ１１は、スティックが動作したことを検出した場合、ステップＳ７２に処理を移し、再度オフセット値の登録をやり直す。
【００４１】
続いて、ＣＰＵ１１は、姿勢の初期化を行う（ステップＳ７５）。具体的には、ＣＰＵ１１は、ユーザが前方方向にスティック部１０の先端部を向けた状態で、スティック部１０の先端部が向いている方向が、ワールド座標系の前方（Ｙ軸方向）になるようにワールド座標系とローカル座標系の関係を初期化する。また、ＣＰＵ１１は、当該初期化時点における角速度、加速度及び地磁気の各軸成分をＲＡＭ１５に記憶する。
【００４２】
続いて、ＣＰＵ１１は、ユーザにスティック部１０を様々な方向に向ける動作をさせるための表示を行う（ステップＳ７６）。例えば、ＣＰＵ１１は、ＬＥＤ１８を赤色で点滅させる。
【００４３】
さらに、ＣＰＵ１１は、磁気センサ１２１のオフセットとゲインの補正データを求める（ステップＳ７７）。具体的には、ＣＰＵ１１は、ステップＳ７６の処理に応じて、ユーザが様々な方向にスティック部１０を向けたときの地磁気の値を磁気センサ１２１により計測し、計測した地磁気の値を用いて補正データを求める。オフセットとゲインの値の求め方の例としては、ＣＰＵ１１は、磁気センサ１２１の各軸の最大値及び最小値からその中央値を算出し、算出した中央値を各軸のオフセット値とする。
【００４４】
また、ＣＰＵ１１は、各軸の中央から最大値までの値が同じになるようにゲイン補正値を算出し、算出したオフセット値とゲイン補正値をＲＡＭ１５に記憶する。以降のステップにおいて、ＣＰＵ１１は、磁気センサ１２１の値を読み出したとき、読み出した値からオフセット値を引いて、さらに補正ゲインを掛けることで、地磁気の値を補正して検出値とする。
【００４５】
続いて、ＣＰＵ１１は、検出された地磁気の値が一般の地上で検出される値であるか否かを判定する（ステップＳ７８）。検出された地磁気の値が一般の地上で検出される値ではない場合には、ＣＰＵ１１は、処理をステップＳ７６に戻し、再度、磁気センサ１２１のオフセット値とゲインの補正データを求める。検出された地磁気の値が一般の地上で検出される値である場合には、ＣＰＵ１１は、処理をステップＳ７９に移行させ、ヨー補正モードを地磁気モードにセットする。
【００４６】
また、ＣＰＵ１１は、ステップＳ７８の処理を所定回数（例えば、５回など）実行しても検出された地磁気の値が一般の地上で検出される値ではない場合には、処理をステップＳ８０に移行させ、ヨー補正モードをショットモードにセットする。ステップＳ７９又はステップＳ８０の処理が終了すると、ＣＰＵ１１は、ステップＳ８１に処理を移行させ、ヨー補正モードが地磁気モードであるかショットモードであるかを表示する。例えば、ＣＰＵ１１は、ショットモードの場合にはＬＥＤ１８を赤色で点灯させ、地磁気モードである場合にはＬＥＤ１８を緑色で点灯させる。なお、角速度センサ１２３及び磁気センサ１２１のセンサ値の補正処理の順番は、入れ替わってもよい。
【００４７】
［姿勢推定］
図８を参照して、図６のステップＳ１７の姿勢推定処理の詳細説明を行う。
【００４８】
図８は、姿勢推定処理の流れを示すフローチャートである。
ワールド座標系から見たローカル座標系のｘ軸、ｙ軸、ｚ軸の基底ベクトルをｅｘ，ｅｙ，ｅｚとして、各基底ベクトルを列に並べた行列ＴＬ→Ｗ＝（ｅｘｅｙｅｚ）を定義すると、ローカル座標系の点ｐ＝（ｘｙｚ）Ｔと、この点ｐに対応するワールド座標系の点Ｐ＝（ＸＹＺ）Ｔとの間には、次の関係式（１）、（２）が成り立つ（演算記号Ｔは転置行列を意味する）。
Ｐ＝ＴＬ→Ｗｐ    （１）      ｐ＝ＴＬ→ＷＴＰ      （２）
【００４９】
このように、ＴＬ→Ｗは２つの座標系の関係を示すものであるので、このように、２つの座標系同士の関係などを用いて現在のスティック姿勢状態を表すことができる。なお、姿勢の表現方法としては、ピッチ、ヨー、ロールなどの角度を用いてもよい。
【００５０】
ところで、今回時刻ｔで読み取った角速度センサ１２３の値からローカル座標系の各軸成分を持つ３次の角速度ベクトルを取得できる。この３次の角速度ベクトルの各軸成分の値に角速度センサ１２３のサンプリング時間であるδＴを掛け算することで、回転角ベクトルθｔ＝（θｘｔθｙｔθｚｔ）Ｔを求められる。
【００５１】
この回転角ベクトルによってスティックの姿勢を求めることができる。具体的には、時刻ｔにおける姿勢ＴＬ→Ｗｔは、ｘ軸を中心としたθｘｔの回転、ｙ軸を中心としたθｙｔの回転、及びｚ軸を中心としたθｚｔの回転の合成行列Ｒａｌｌ（θｔ）と、前回の姿勢ＴＬ→Ｗｔ−１とを用いて、ＴＬ→Ｗｔ＝Ｒａｌｌ（θｔ）・ＴＬ→Ｗｔ−１と推定できる。このように、ＣＰＵ１１は、今回の角速度センサ１２３の値に基づいて、前回の姿勢を更新させて、今回の姿勢を推定する（ステップＳ１０１）。
【００５２】
ところが、このようにして求めた姿勢は誤差が累積していく。また、姿勢が一度間違ってしまうと、その後の姿勢推定の精度が著しく悪化する。例えば、スティック部１０を前方水平からまっすぐに右水平に向かって回転したことを考える。最初に水平でなく垂直方向の回転に誤差が入るとスティックの先端の軌跡は斜めに上がりながら回転することになる、その後、この姿勢に関してまた、新しい回転が加わっていくので加速的に本来の姿勢からずれる。したがって、重力推定をおこなうことで、姿勢推定の補正を行い、姿勢の精度を高める。
【００５３】
加速度センサ１２２で検出される加速度ベクトルはローカル座標系での各軸の成分から構成される。この加速度ベクトルをステップＳ１０１で求めた姿勢情報を用いて、ワールド座標系ベクトルで表す。
【００５４】
外力が加わらなければ、加速度センサ１２２は重力のみを検出することになるので、加速度センサ１２２が検出したローカル座標系での加速度ベクトルをワールド座標系に変換すると、常に同じ方向を示すことになる。しかし、スティック部１０の動作中は遠心力などの外力が加わるので常に同じ方向を向くとは限らない。ところが、ユーザは止まった状態でスティック部１０をスイングしているので、スティック部１０の位置は動かない。また、スティック部１０を振り上げたときや、振り下げたときなど、いたるときに速度は０になる。すなわち、加速度ベクトルから重力成分を除いた外力の積分はいたるときに０になる。よってワールド座標系の加速度ベクトルを積分したベクトルは概ね重力方向を示すことになる。この性質を用いてワールド座標系の重力方向を推定する。
【００５５】
具体的には、ＣＰＵ１１は、今回時刻ｔで読み取った加速度センサ１２２が取得した各軸成分の加速度値をＬＡＴ＝（ＡｘｔＡｙｔＡｚｔ）Ｔとし、これはローカル座標系であるので、式（３）に基づいて、ワールド座標系に変換算出する（ステップＳ１０２）。
ＷＡＴ＝ＴＬ→Ｗｔ・ＬＡＴ      （３）
【００５６】
次に、ＣＰＵ１１は、ワールド座標系に変換された加速度ベクトルの値について各成分について、現時刻から所定時間前までの平均値を算出して、平均加速度ベクトルを求める。所定時間はスイング状態などで実験的に決定される。ＣＰＵ１１は、この平均加速度ベクトルを重力方向ベクトルＷｅｇｔと推定する（ステップＳ１０３）。
具体的には、下記の式（式（４））を定義し、再帰加算によって累算を行う。Ｋｇはダンピング係数で、スイング状態などで実験的に決定される。
Ｇｗｔ＝ｋｇ・Ｇｗｔ−１＋ＷＡｔ      （４）
このＧｗｔからワールド座標系の重力方向ベクトルＷｅｇｔをＷｅｇｔ＝Ｇｗｔ／｜Ｇｗｔ｜と推定する。
【００５７】
次に、ＣＰＵ１１は、この重力方向ベクトルＷｅｇｔがＺ軸の負の方向ベクトル（０  ０  −１）Ｔになるように、姿勢パラメータＴＬ→Ｗｔを修正する（ステップＳ１０４）。具体的には、ＣＰＵ１１は、重力方向ベクトルＷｅｇｔと負の方向ベクトル（０  ０  −１）Ｔとの２つのベクトルに直行する軸を中心に、これら２つのベクトルのなす角度分を回転する操作を行うことで、姿勢パラメータＴＬ→Ｗｔを修正する。これにより、重力方向の補正がおこなわれるので、姿勢推定の精度が向上する。
【００５８】
前述した姿勢補正は重力方向のみであるので、Ｚ軸を中心としたヨー角の誤差累積が残る。本実施形態では、ヨー角の補正は、ユーザによるスイッチ操作と、地磁気を用いた補正との２つの方法を提案する。
【００５９】
まず、ユーザによるスイッチ操作による補正について説明する。この補正は、ユーザが、スティック部１０が前方を向いているタイミングで、スティック部１０が備える入力部１６（例えば、スイッチ）を、定期的に押すことにより、ＣＰＵ１１が、ヨー角の補正を行うというものである。ＣＰＵ１１は、ヨー方向強制スイッチがＯＮされたか否かを判断する（ステップＳ１０９）。この処理では、ＣＰＵ１１は、入力部１６から、ヨー方向強制スイッチがＯＮされたことを示す信号を受信したか否かを判断する。
【００６０】
ステップＳ１０９での判断がＹＥＳの場合、ＣＰＵ１１は、スティック部１０の先端のワールド座標系の方向ベクトルをワールド座標系のＹ軸の方向ベクトルと一致させるような回転行列を求め、この回転行列を用いて姿勢パラメータの補正を行う（ステップＳ１１０）。これにより、スティック部１０の先端のヨー角が０度にセットされる。
この回転行列は、例えば、２つのベクトルをなす角度の長さであって、２つのベクトルに直交するベクトル方向を向いた回転角ベクトルを考える。この回転角ベクトルを角速度センサ１２３の姿勢補正の合成回転行列を求めた方法と同じ方法で合成行列変換を求めることができる。
【００６１】
次に、地磁気を用いた補正について説明する。
【００６２】
ステップＳ１０９での判断がＮＯの場合、ＣＰＵ１１は、ヨー方向補正モードが地磁気モードによる補正モードであるか否かを判定する（ステップＳ１０５）。地磁気モードによる補正モードでない場合は、ＣＰＵ１１は、姿勢推定処理を終了する。
地磁気モードによる補正モードである場合には、ＣＰＵ１１は、今回時刻ｔで読み取った磁気センサ１２１から求めた地磁気ベクトルの値をＬＭＴ＝（ＭｘｔＭｙｔＭｚｔ）Ｔとし、これはローカル座標系であるので、式（５）に基づいて、ワールド座標系に変換する（ステップＳ１０６）。
ＷＭＴ＝ＴＬ→Ｗｔ・ＬＭＴ      （５）
【００６３】
次に、ＣＰＵ１１は、例えばＩＩＲ（Ｉｎｆｉｎｉｔｅ  Ｉｍｐｕｌｓｅ  Ｒｅｓｐｏｎｓｅ）フィルタを実行し平滑化をおこなう。この平滑して得られた方向を現在の地磁気方向Ｗｅｍｔと推定する（ステップＳ１０７）。
具体的には、下記のＩＩＲフィルタ演算（式（６））を実行し平滑化を行う。ｋｍはフィルタ係数でスイング状態などで実験的に決定される。
Ｍｗｔ＝（１−ｋｍ）・Ｍｗｔ−１＋ｋｍ・ＷＡｔ      （６）
このＭｗｔからワールド座標系の現在の地磁気方向ベクトルＷｅｍｔを
Ｗｅｍｔ＝Ｍｗｔ／｜Ｍｗｔ｜と推定する。
【００６４】
続いて、ＣＰＵ１１は、初期状態でのワールド座標系における地磁気の方向Ｗｅｍ０
をＲＡＭ１５に記録し、現在の地磁気方向Ｗｅｍｔと、初期状態でのワールド座標系における地磁気の方向Ｗｅｍ０
の方向とが、ワールド座標系のＸＹ平面で同じ方向を向くような回転行列を求め、この回転行列を用いて姿勢パラメータＴＬ→Ｗｔの補正を行う（ステップＳ１０８）。これにより、地磁気方向の補正が行われるので、姿勢推定の精度が向上する。
この回転行列は、具体的には、各ベクトルのＺ成分を０にしたベクトルを考え、その２つのベクトル方向から、重力補正と同様、中心に２つのベクトルをなす角度の長さの２つのベクトルに直交するベクトル方向を向いたベクトルを考え、この各成分の値の回転の合成行列変換で表現できる。
【００６５】
［位置推定］
図９を参照して、図６のステップＳ１８の位置推定処理の詳細説明を行う。
【００６６】
図９は、位置推定処理の流れを示すフローチャートである。
姿勢推定する際に、図８のステップＳ１０３において、ワールド座標の重力方向Ｗｅｇｔを推定した。ＣＰＵ１１は、ワールド座標系の加速度ベクトルからその重力方向Ｗｅｇｔの成分を除いたベクトルを求め、このベクトルを外力による加速度ＷＦＴと定義する（ステップＳ２０１）。さらに、ＣＰＵ１１は、外力による加速度ＷＦＴを積分して移動速度Ｗｖｔを求め、さらにこの移動速度Ｗｖｔを積分して水平面の移動量ＷＤｔを求める（ステップＳ２０２）。
【００６７】
なお、積分は完全積分では誤差累積の影響が出るので不完全積分を用いるのが望ましい。ダンピング係数（時定数）は実験にて調整をおこなう。このようにして求めた値は後のノートイベント生成処理（図１６参照）で利用される、
【００６８】
［先端動き予測］
図１０及び図１１を参照して、図６のステップＳ１９の先端動き予測処理の詳細説明を行う。
【００６９】
発音の強弱はスティック先端の速度で制御をおこなうことが望ましい。速度を予測するのに加速度センサから求める方法があるが精度上問題がある。また、角速度だけではスティックのスイングはひじや肩を中心とした回転運動またはひじなどを伸ばしながらスイングするので、角速度と速度が比例関係になるともいえない。そのため、本実施形態では、先端の角速度と角加速度で速度予測する。
【００７０】
図１０は、先端動き予測処理の流れを示すフローチャートである。
求め方の一例として、まず、ＣＰＵ１１は、角速度ベクトルからｙ軸周りの成分を除いた角速度をスティック先端の角速度の観測値ωＶｔ＝（ωｘｔ０  ωｚｔ）Ｔとし、その値をカルマンフィルタなどを用いて角速度ωｓ及び角加速度δωｓと推定する（ステップＳ２１０）。
【００７１】
例えば、それぞれの角速度成分は、前回の角速度成分に角加速度成分を加えたもの、角加速度成分は、前回と同じ角加速度成分に駆動ノイズが加わるような状態モデルを利用して求めることができる。ＣＰＵ１１は、このようにして得られたスティック先端の角速度を用いて、その角速度の直近の平均したベクトル方向をスティック先端速度回転軸ｅｒとして推定する（ステップＳ２１１）。
【００７２】
本実施例ではカルマンフィルタで実現したが、ＩＩＲフィルタを用いてセンサの値及びその差分をスムージングしてそれぞれ角速度、角加速度を求めても良い。
【００７３】
スティック先端回転軸とスティックの方向ｙ軸と直行する方向（外積方向、図１１参照）をスイング方向ｅｓと定義する。先端の回転運動の接線方向はこの方向を向く。ＣＰＵ１１は、加速度ベクトルＬＡｔのスイング方向の成分ＬＡｓｔを、ＬＡｔとｅｓとの内積を計算することで求める（ステップＳ２１２）。
【００７４】
［発音タイミング検出処理］
図１２又は図１３を参照して、図６のステップＳ２０の発音タイミング検出処理の詳細説明を行う。
【００７５】
［発音タイミング検出処理（第１の実施例）］
図１２は、第１の実施例における発音タイミング検出処理の流れを示すフローチャートである。
まず、ＣＰＵ１１は、動作状態に応じて分岐を行う（ステップＳ３０２）。動作状態にはＩＤＬＥ、ＡＣＴＩＯＮ、ＳＨＯＴ及びＤＯＮＥの４状態がある。ＣＰＵ１１は、ＩＤＬＥの場合には、処理をステップＳ３０３に移行させ、ＡＣＴＩＯＮの場合には、処理をステップＳ３２０に移行させ、ＳＨＯＴの場合には、処理をステップＳ３３０に移行させ、ＤＯＮＥの場合には、処理をステップＳ３４０に移行させる。
【００７６】
ここで、標準的な動作状態の遷移を図１４に示す。図１４は、横軸は、時間軸を示しており、縦軸は、図Ａでは角速度の大きさ（ベクトルの長さ）を示している。符号はあまり意味がないが、便宜上、スティック部１０を振り始めた方向を正とする。また、縦軸は、図Ｂでは角加速度の大きさ（ベクトルの長さ）を示している。符号は角速度の正方向と同じ向きを正とする。図Ｃは動作状態の遷移を示している。
【００７７】
スティックが停止している状態はＩＤＬＥであり、初期状態で動作状態はＩＤＬＥに初期化されている。初期状態の時刻ｔ０では動作状態はＩＤＬＥである。このときＣＰＵ１１は、スティック部１０の角加速度が正でない場合には、発音タイミング検出処理を終了する（ステップＳ３０３）。スティック部１０の角加速度が正の場合であってもスティック部１０の角速度が「閾値１」以下の場合には、ＣＰＵ１１は、発音タイミング検出処理を終了する（ステップＳ３０４）。スティック部１０の角速度が「閾値１」の値を超えた場合、ＣＰＵ１１は、ステップＳ３０５に処理を移行させる（ステップＳ３０４）。図１４では、ｔ２の時刻で、「閾値１」を超えたことが示されている。ステップＳ３０５では、ＣＰＵ１１は、動作状態をＡＣＴＩＯＮに変更させ（ステップＳ３０５）、最大角速度を０に初期化して（ステップＳ３０６）、発音タイミング検出処理を終了する。
動作状態がＡＣＴＩＯＮになると、しばらくスティックは加速し続け、この間は、角加速度が正であるので、ＣＰＵ１１は、ステップＳ３２０でＹＥＳと判断し、現在の角速度が保持されている最大角速度と比較し（ステップＳ３２１）、角速度が最大角速度より大きい場合には、最大角速度を更新して（ステップＳ３２２）、「閾値２」を更新する（ステップＳ３２３）。角速度が最大角速度より小さい場合には、ＣＰＵ１１は、発音タイミング検出処理を終了する。
【００７８】
「閾値２」は最大角速度の値によって決定されるようになっている。例えば、「閾値２」＝（最大角速度）×Ｃで求める、ここで、Ｃは、０〜１の値で実験的に決定される。通常は０．１程度が望ましい。この「閾値２」はショットを検出してから音が発音するまでの遅延時間に相当する事前の角速度を想定している。無線の伝達遅延や、後に述べる発音処理に遅延が生じるので、その遅延分を保証するために本来の音の鳴らすタイミングより、事前に音を鳴らすためである。一般にショットの角速度のカーブは音の強弱に比例した形であることを想定し、角速度の最大値から、閾値を決定している。
【００７９】
スティック部１０が減速状態に変わると（ｔ３）、スティック部１０の角加速度は０以下となるので、ＣＰＵ１１は、ステップＳ３２０でＮＯと判断する。ステップＳ３２４では、ＣＰＵ１１は、現在の角速度の絶対値が「閾値２」より小さいか否か比較する。スティックがまだ十分に減速されていない間は、ＣＰＵ１１は、ステップＳ３２４でＮＯと判断し、発音タイミング検出処理を終了して、ショットタイミングを待つことになる。
【００８０】
スティックが十分に減速し、「閾値２」より小さくなると、ＣＰＵ１１は、ショットタイミングに近づいたと判定し、ステップＳ３２４でＹＥＳと判断し（ｔ４のタイミング）、動作状態をＳＨＯＴに設定し（ステップＳ３２５）、ショット通過時間を０に初期化する（ステップＳ３２６）。その後、ＣＰＵ１１は、発音タイミング検出処理を終了する。このＳＨＯＴ状態は発音タイミングを知らせるものであり、図６のステップＳ２２の発音タイミングの判断に用いられる。
【００８１】
動作状態がＳＨＯＴの場合には、ＣＰＵ１１は、動作状態をステップＳ３３０においてＤＯＮＥに更新して、発音タイミング検出処理を終了する。
【００８２】
動作状態がＤＯＮＥの場合には、ＣＰＵ１１は、角速度が「閾値３」以下であるか否かを判断し（ステップＳ３４０）、角速度が「閾値３」以下であると判断した場合には、動作状態をＩＤＬＥに変更し（ステップＳ３４１）、発音タイミング検出処理を終了する。ステップＳ３４０において、ＣＰＵ１１は、角速度が「閾値３」より大きいと判断した場合には、ショット通過時間が「閾値４」以下であるか否かを判断し（ステップＳ３４２）、ショット通過時間が「閾値４」以下であると判断した場合には、発音タイミング検出処理を終了する。一方、ＣＰＵ１１は、ショット通過時間が「閾値４」を超えたと判断した場合には、動作状態をＩＤＬＥに変更し（ステップＳ３４１）、発音タイミング検出処理を終了する。
【００８３】
すなわち、ＤＯＮＥ状態は角速度が「閾値３」以下になるまで保持される。これは停止時に複数音が鳴ったりする誤動作を防止するためである。しかし、角速度がゆっくりと減速されて、角速度が「閾値３」以下になるまでのショット通過時間が「閾値４」を超えた場合には、動作状態はＤＯＮＥからＩＤＬＥに変更される。
【００８４】
［発音タイミング検出処理（第２の実施例）］
【００８５】
図１３は、第２の実施例における発音タイミング検出処理の流れを示すフローチャートである。
まず、ＣＰＵ１１は、動作状態に応じて分岐を行う（ステップＳ３５２）。動作状態にはＩＤＬＥ、ＡＣＴＩＯＮ、ＳＨＯＴ及びＤＯＮＥの４状態がある。ＣＰＵ１１は、ＩＤＬＥの場合には、処理をステップＳ３５３に移行させ、ＡＣＴＩＯＮの場合には、処理をステップＳ３７０に移行させ、ＳＨＯＴの場合には、処理をステップＳ３８０に移行させ、ＤＯＮＥの場合には、処理をステップＳ３９０に移行させる。ここで、標準的な動作状態の遷移は図１４に示したとおり第１の実施例と同様である。
【００８６】
ＣＰＵ１１は、スティック部１０の角加速度が正でない場合には、発音タイミング検出処理を終了する（ステップＳ３５３）。スティック部１０の角加速度が正の場合であってもスティック部１０の角速度が「閾値１」以下の場合には、ＣＰＵ１１は、発音タイミング検出処理を終了する（ステップＳ３５４）。スティック部１０の角速度が「閾値１」の値を超えた場合、ＣＰＵ１１は、ステップＳ３５５に処理を移行させる（ステップＳ３５４）。図１４では、ｔ２の時刻で、「閾値１」を超えたことが示されている。ステップＳ３５５では、ＣＰＵ１１は、動作状態をＡＣＴＩＯＮに変更させ（ステップＳ３５５）、発音タイミング検出処理を終了する。
【００８７】
動作状態がＡＣＴＩＯＮになると、しばらくスティックは加速し続け、この間は、角加速度が正であるので、ＣＰＵ１１は、ステップＳ３７０でＹＥＳと判断し、発音タイミング検出処理を終了する。
【００８８】
スティック部１０が減速状態に変わると（ｔ３）、スティック部１０の角加速度は０以下となるので、ＣＰＵ１１は、ステップＳ３７０でＮＯと判断する。ＣＰＵ１１は、ステップＳ３７１で、現在のスティック先端角速度ωｓｔ、角加速度δωｓｔから角速度が０になるまでの時間を推測する。その推測された時間をＴｒｅｍとすると、
Ｔｒｅｍ＝｜ωｓｔ｜／｜δωｓｔ｜でおよその時間を推定できる。
【００８９】
続いて、ＣＰＵ１１は、推定した時間が「閾値５」以下であるかを判定する（ステップＳ３７２）。例えばこの「閾値５」は１０ｍ秒程度とする。
【００９０】
この「閾値５」はショットを検出してから音が発音するまでの遅延時間として設定されている。無線の伝達遅延や、後に述べる発音処理に遅延が生じるので、その遅延分を保証するために本来の音の鳴らすタイミングより、事前に音を鳴らすためである。ＣＰＵ１１は、スティック部１０が十分に減速するまでは、ステップＳ３７２ではＮＯと判断して発音タイミング検出処理を終了する。やがてスティック部１０の角速度が０に近くなると、停止（角速度０）までの推定時間が「閾値５」以下となり、ＣＰＵ１１は、ステップＳ３７２ではＹＥＳと判断し（ｔ４のタイミング）、動作状態をＳＨＯＴに設定し（ステップＳ３７３）、ＳＨＯＴ通過時間を０に初期化する（ステップＳ３７４）。このＳＨＯＴ状態は発音タイミングを知らせるものであり、図６のステップＳ２２の発音タイミングの判断に用いられる。
【００９１】
動作状態がＳＨＯＴの場合には、ＣＰＵ１１は、動作状態をステップＳ３８０においてＤＯＮＥに更新して、発音タイミング検出処理を終了する。
【００９２】
動作状態がＤＯＮＥの場合には、ＣＰＵ１１は、角速度が「閾値３」以下であるか否かを判断し（ステップＳ３９０）、角速度が「閾値３」以下であると判断した場合には、動作状態をＩＤＬＥに変更し（ステップＳ３９１）、発音タイミング検出処理を終了する。ステップＳ３９０において、ＣＰＵ１１は、角速度が「閾値３」より大きいと判断した場合には、ショット通過時間が「閾値４」以下であるか否かを判断し（ステップＳ３９２）、ショット通過時間が「閾値４」以下であると判断した場合には、発音タイミング検出処理を終了する。一方、ＣＰＵ１１は、ショット通過時間が「閾値４」を超えたと判断した場合には、動作状態をＩＤＬＥに変更し（ステップＳ３９１）、発音タイミング検出処理を終了する。
【００９３】
すなわち、ＤＯＮＥ状態は角速度が「閾値３」以下になるまで保持される。これは停止時に複数音が鳴ったりする誤動作を防止するためである。しかし、角速度がゆっくりと減速されて、角速度が「閾値３」以下になるまでのショット通過時間が「閾値４」を超えた場合には、動作状態はＤＯＮＥからＩＤＬＥに変更される。
【００９４】
［発音量検出］
図１５を参照して、図６のステップＳ２１の発音量検出処理の詳細説明を行う。
【００９５】
図１５は、発音量検出処理の流れを示すフローチャートである。
ＣＰＵ１１は、動作状態を判定し、動作状態がＤＯＮＥ又はＩＤＬＥである場合には、ステップＳ４０２に処理を移行させ、動作状態がＡＣＴＩＯＮ又はＳＨＯＴである場合には、ステップＳ４０６に処理を移行させる。
【００９６】
動作状態がＤＯＮＥ又はＩＤＬＥである場合には、ＣＰＵ１１は、ピーク角速度値（スカラー量）ωｓ  ｐｅａｋ、シフト速度ｖｓｔ、ピークシフト速度ｖｓｐｅａｋ、及びピークシフト加速度ａｓｐｅａｋを０に初期化する（ステップＳ４０２〜Ｓ４０５）。
【００９７】
ピーク角速度値ωｓ  ｐｅａｋは、スティックが発音スイング中に検出した角速度の最大値、シフト速度ｖｓｔはスティックの先端の平行移動分の速度成分、現在のピークシフト速度ｖｓｐｅａｋはシフト速度ＬＶｓｔの最大値を保持している値である。発音タイミング検出（図１２のステップＳ３０５、又は図１３のステップＳ３５５）においてスティックのスイングが検出され、動作状態がＡＣＴＩＯＮ又はＳＨＯＴになると、ＣＰＵ１１は、現在のスティック先端角速度ベクトルのスカラー量｜ωｓｔ｜とピーク角速度値ωｓ  ｐｅａｋとを比較し、｜ωｓｔ｜の方が大きい場合、ωｓ  ｐｅａｋを｜ωｓｔ｜の値に更新する（ステップＳ４０６）。
【００９８】
次に、ＣＰＵ１１は、図１０のステップＳ２１２で求めたスイング方向の加速度成分ＬＡｓｔのシフト加速度のピーク値ａｓｐｅａｋの保持と更新を行う（ステップＳ４０７）。
【００９９】
続いて、ＣＰＵ１１は、図１０のステップＳ２１２で求めたスイング方向の加速度成分ＬＡｓｔを不完全積分し、スイング方向の速度ＬＶｓｔを得る（ステップＳ４０８）。
【０１００】
ＣＰＵ１１は、前記のスイング方向速度ＬＶｓｔとピーク角速度値ｖｓｐｅａｋとを比較し、ＬＶｓｔの方が大きい場合、ｖｓｐｅａｋをＬＶｓｔの値に更新する（ステップＳ４０９）。
【０１０１】
次に、ＣＰＵ１１は、３つのピーク値からスティックの速度（音量）を求める。例えば、次の式（５）ような重み付き加算等で求める。
Ｐｓｈｏｔ＝ａ１・ωｓ  ｐｅａｋ＋ａ２・ｖｓｐｅａｋ＋ａ３・ａｓｐｅａｋ      （５）
ここで、ａ１，ａ２，ａ３はミキシングパラメータであり、実験にて決定される。
このＰｓｈｏｔは、ショットの音の大きさとして利用される。
【０１０２】
［ノートイベント生成］
図１６を参照して、図６のステップＳ２３のノートイベント生成処理の詳細説明を行う。
【０１０３】
図１６は、ノートイベント生成処理の流れを示すフローチャートである。
ショット時に、空間上に仮想的に配列された音源のどれを鳴らすかが決定されるが、ショットタイミングはシステムの遅延を考慮して先行して検出されているので、ＣＰＵ１１は、音が鳴るときのスティック部１０の位置の推定を行う（ステップＳ５０１）。スティック部１０の先端の角速度と角加速度がわかっているので、ＣＰＵ１１は、Ｔｒｅｍ後のスティックの姿勢を求めることにより位置を推定できる。具体的には、ＣＰＵ１１は、Ｔｒｅｍをさらに時間を細分化し、その時間間隔をＴとし、各時間の角速度ベクトルを前回の角速度ベクトル及び角加速度ベクトルから求める。さらに、ＣＰＵ１１は、この角速度ベクトルで、各時間間隔の回転角ベクトルを求め、この回転角ベクトルを用いて、合成回転行列を求め、次の姿勢を予測する。これをＴｒｅｍまで繰り返すことでＴｒｅｍ秒後の姿勢をＴＬ→Ｗｔ＋Ｔｒｅｍと予測することができる。この姿勢パラメータからスティック部１０の先端方向ｙ軸のワールド座標系の位置Ｐｙ＝（ＰｙＸＰｙＹＰｙＺ）Ｔを得ることができる。
【０１０４】
音源がワールド座標系に６つマップ（配置）されている場合、それぞれの音源の位置（ワールド座標系）を、例えば、
音源１：（０，１，０）前方
音源２：（ｓｉｎ６０，ｃｏｓ６０，０）前方右６０度方向
音源３：（−ｓｉｎ６０，ｃｏｓ６０，０）前方左６０度方向
音源４：（０，ｃｏｓ４５，ｓｉｎ４５）前方上部４５度方向
音源５：（ｃｏｓ４５ｓｉｎ６０，ｃｏｓ４５ｃｏｓ６０，ｓｉｎ４５）前方右６０度、上部４５度方向
音源６：（−ｃｏｓ４５ｓｉｎ６０，ｃｏｓ４５ｃｏｓ６０，ｓｉｎ４５）前方左６０度、上部４５度方向
とする。
【０１０５】
この各音源の位置情報と各音源番号に対応する音色は、ＲＯＭ１４のメモリ上に予め記憶されている。
ＣＰＵ１１は、ステップＳ５０１で推定した発音時のスティック部１０の位置Ｐｙとそれぞれの音源位置Ｐｓｉ＝（ＰｓｉＸＰｓｉＹＰｓｉＺ）Ｔとの距離を求め、一番近いものを今回のショット対象の音源とする（ステップＳ５０２）。
【０１０６】
距離測定は、ユークリッド距離を算出する。または、スイング方向軸の距離には鈍感になるような成分毎に重みつきユークリッド距離を用いることも有効である。スイング方向は移動方向なので精度が悪いので、回転軸方向より重みを大きくした距離を用いた方が望ましい。
【０１０７】
または、方位はピッチ、ヨー、ロール角度表現に変換できる。この角度表記で音源位置、スティックの位置を角度表記に変換し、距離を求めても良い。この際、ピッチ方向とヨー方向で重みを変えた距離を用いても良い。ロール成分の重みは０が望ましい。
【０１０８】
ステップＳ５０２でショット対象とした音源番号、又は、図１７を参照して後述するサウンド探索処理において決定された音源番号をｉとすると、ＣＰＵ１１は、ｉ番目の音源に対応するノートをテーブルから読み出し（ステップＳ５０３）、発音するノートを得ることができる。
【０１０９】
次に、ＣＰＵ１１は、図７のステップＳ７９又はＳ８０で判定されたヨー方向補正モードをチェックする（ステップＳ５０４）。ヨー方向補正モードが地磁気モードである場合、ＣＰＵ１１は、ノートイベント生成処理を終了する。他方、ヨー補正モードがショットモードである場合、ＣＰＵ１１は、音源とスティック部１０とがなすヨー角エラーを求める（ステップＳ５０５）。具体的には、ＣＰＵ１１は、スティックの方向ベクトルは姿勢パラメータから求め、音源の方向ベクトルは前述したワールド座標系の音源の位置情報を用い、これら２つのベクトルのＸＹ成分からなるベクトルの角度の差がヨー角エラーとして求める。このヨー角エラーはＺ軸まわりの回転エラーであるので、ＣＰＵ１１は、Ｚ軸を回転軸とした回転行列を求め、この回転行列を用いて姿勢の補正をおこなう（ステップＳ５０６）。
［サウンド探索］
図１７を参照して、図１６のステップＳ５０２の変形例であるサウンド探索処理の詳細説明を行う。
【０１１０】
図１７は、図１６のステップＳ５０２の変形例であるサウンド探索処理の流れを示すフローチャートである。本処理は、図１６のステップＳ５０２の処理に替えて実行される。すなわち、本処理は、図１５のステップＳ５０１の処理の後に実行され、本処理のステップＳ６１３が終了すると、ＣＰＵ１１は、図１６のステップＳ５０３に処理を移行させる。
【０１１１】
まず、ＣＰＵ１１は、図１６のステップＳ５０２と同様のサウンド探索方法にて、各サウンドマップから一番近い音源を探し出す（ステップＳ６０１）。
次に、ＣＰＵ１１は、探し出した音源番号ｉを今回の音源選択番号としてＲＡＭ１５に記憶しておく（ステップＳ６０２）。続いて、ＣＰＵ１１は、前回の音源番号を読み出し、その音源番号の位置座標と今回の音源の位置座標とを比較する。このとき、垂直方向Ｚ軸を除いた、Ｘ，Ｙ座標を比較する（ステップＳ６０３）。垂直方向は本実施例では補正しない。
【０１１２】
さらに、ＣＰＵ１１は、同じ方位であるか否か判断し（ステップＳ６０４）、同じ方位であると判断した時は、図９のＳ２０２で求めた移動量の水平成分の値が予め決められた正の閾値より大きいかを判定する（ステップＳ６０５）。この判定がＹＥＳの場合、ＣＰＵ１１は、予め決められた水平方向の回転角度分スティック部１０の先端方向の位置Ｐｙを正方向に回転する（ステップＳ６０６）。ステップＳ６０５での判定がＮＯの場合、ＣＰＵ１１は、閾値を−１倍した負の閾値と当該移動量の水平成分とを比較して負の閾値より小さいかを判定する（ステップＳ６０７）。この判定がＹＥＳの場合、ＣＰＵ１１は、予め決められた水平方向の回転角度分スティック部１０の先端方向の位置Ｐｙを負方向に回転する（ステップＳ６０８）。
【０１１３】
ＣＰＵ１１は、このようにスティックの先端方向の方位を補正し、再度、図１６のＳ５０２と同様のサウンド探索方法にて、各サウンドマップから一番近い音源を探し出す（ステップＳ６０９）。ＣＰＵ１１は、音源が探せたか否か判断し（ステップＳ６１０）、探せた場合（ステップＳ６１０でＹＥＳと判断された）には、新たに見つかった音源を今回の音源番号に更新しＲＡＭ１５に記憶する（ステップＳ６１１）。探せなかった場合（ステップＳ６１０でＮＯと判断された）には、以前の音源番号が保持されることになる。
【０１１４】
次に、ＣＰＵ１１は、次回のショットと今回のショットとの間の移動量をもとめるため、移動量の値を０にリセットする（ステップＳ６１２）。さらに、ＣＰＵ１１は、今回採用した音源番号を前回の音源番号としてＲＡＭ１５に記憶する（ステップＳ６１３）。
【０１１５】
［発音処理］
図１８を参照して、発音部３０において実行される発音処理について説明する。
【０１１６】
図１８は、発音部３０において実行される発音処理の流れを示すフローチャートである。
【０１１７】
図１８に示すように、発音部３０のＣＰＵ３１は、電源投入時において、ＲＡＭ３４のデータのクリア、表示部３５の画面に表示された画像のクリア、音源部３７１のクリアなどを含むイニシャライズ処理を実行する（ステップＳ７０１）。次いで、ＣＰＵ３１は、スイッチ処理を実行する（ステップＳ７０２）。スイッチ処理では、例えば、入力部３６のスイッチ操作にしたがって、演奏者が所望する音量ボリュウム値及び音色を特定し、ＲＡＭ３４に格納する。
【０１１８】
続いて、ＣＰＵ３１は、Ｉ／Ｆ３２が、ノートオンイベントを新たに受信しているかを判断する（ステップＳ７０３）。ステップＳ７０３でＹｅｓと判断された場合には、ＣＰＵ３１は、この受信されたノートオンイベントに基づき、設定された音量ボリュウム値及び設定された音色の楽音の発音を音源部３７１に指示する処理を実行する（ステップＳ７０４）。ステップＳ７０４の処理が終了すると、ＣＰＵ３１は、処理をステップＳ７０２に戻す。
【０１１９】
以上、本実施形態の演奏装置１の構成及び処理について説明した。
本実施形態においては、ＣＰＵ１１は、加速度センサ１２２が検出した加速度及び角速度センサ１２３が検出した角速度を一定タイミング毎に取得するとともに、スティック部１０の初期の静止状態において、加速度センサ１２２により検出された重力による加速度を含み、当該初期静止状態における姿勢パラメータをＲＡＭ１５に記憶する。そして一定タイミング毎に角速度センサ１２３が検出した角速度に応じて、この姿勢パラメータを更新を行い、この更新された姿勢パラメータに基づいて、検出された加速度から重力方向の加速度を算出する。さらに、この算出された加速度を所定区間毎に累算し、累算された加速度を、ＲＡＭ１５に記憶された加速度と一致するように補正する。
よって、スティック部１０を高速に動作させた場合において、重力方向を補正することで、スティック部１０の姿勢推定の精度を向上させることができる。
【０１２０】
また、本実施形態においては、ＣＰＵ１１は、スティック部１０の初期の静止状態において、磁気センサ１２１によって、スティック部１０の長手方向の軸を含めた互いに直交する３軸それぞれの方向の地磁気成分を検出し、前述の姿勢パラメータに基づいて別の３軸方向の地磁気成分に変換してＲＡＭ１５に記憶する。そして、磁気センサ１２１が検出する各軸の地磁気成分を一定タイミング毎に取得し、取得した一定タイミング毎の各軸の地磁気成分を姿勢パラメータに基づいて、前述の異なる３軸方向の地磁気成分に変換する。さらこの変換された各地磁気成分を所定区間毎に累算し、この累算された各地磁気成分を、ＲＡＭ１５に記憶された各地磁気成分に一致させるように補正する。
よって、スティック部１０を高速に動作させた場合において、地磁気方向を補正することで、スティック部１０の姿勢推定の精度を向上させることができる。
【０１２１】
また、本実施形態では、ＣＰＵ１１は、角速度センサ１２３が取得した角速度の値が「閾値１」を超えた後、「閾値２」を下回った場合に、ノートオンイベントを発音部３０に送信する。また、「閾値２」は、角速度センサ１２３が取得した角速度の値が「閾値１」を超えた後の最大値に応じた値（具体的には、当該最大値に一定比率値を乗算した値）である。
よって、発音遅延時間を考慮して本来のショットタイミングよりも一定時間前に発音タイミングを生成することで、発音の精度を向上できる。
【０１２２】
また、本実施形態では、ＣＰＵ１１は、角速度センサ１２３が取得した角速度の値が「閾値１」を超えた後、０になるまでの時間を推定し、推定された時間が「閾値５」を下回った場合に、ノートオンイベントを発音部３０に送信する。
よって、発音遅延時間を考慮して本来のショットタイミングよりも一定時間前に発音タイミングを生成することで、発音の精度を向上できる。
【０１２３】
また、本実施形態では、ＣＰＵ１１は、角速度センサ１２３が取得した角速度に基づいてスティック部１０の先端部の角速度及び角加速度を算出し、算出されたスティック部１０の先端部の角速度及び角加速度に基づいて、角速度センサ１２３が取得した角速度の値が「閾値１」を超えた後、０になるまでの時間を推定する。
よって、角速度の値が０になるまでの時間の推定精度を向上できる。
【０１２４】
また、本実施形態では、ＣＰＵ１１は、角速度センサ１２３が取得した角速度に基づいて、演奏操作中のスティック部１０の回転軸方向を推定し、角速度センサ１２３が取得した角速度からスティック部１０の長手方向の軸成分を除いた角速度に基づいて、スティック部１０の先端部の角速度を算出し、推定された直近の回転軸方向、及び算出されたスティック部１０の先端部の直近の角速度に基づいて、所定時間後のスティック部１０のワールド座標系の位置を算出し、音源マップの複数の領域のうち、算出された当該位置に最も近い領域に対応する楽音のノートオンイベントを発音部３０に送信する。
よって、スティック部１０が斜めにスイングされた場合であっても、本来のショットタイミングでのスティック部１０の位置の音色で発音できる。
【０１２５】
また、本実施形態では、ＣＰＵ１１は、角速度センサ１２３が取得した角速度に基づいて、演奏操作中のスティック部１０の回転軸方向を推定し、角速度センサ１２３が取得した角速度からスティック部１０の長手方向の軸成分を除いた角速度に基づいて、スティック部１０の先端部の角速度を算出し、推定された直近の回転軸方向、及び算出されたスティック部１０の先端部の直近の角速度に基づいて、所定時間後のスティック部１０のワールド座標系の位置を算出し、加速度センサ１２２が取得した加速度に基づいて、移動距離を算出し、算出された当該位置、及び算出された当該移動距離に基づいて、所定時間後のスティック部１０のワールド座標系の位置を補正し、音源マップの複数の領域のうち、補正された当該位置に最も近い領域に対応する楽音のノートオンイベントを発音部３０に送信する。
よって、スティック部１０が斜めにスイングされ、かつ平行移動した場合であっても、本来のショットタイミングでのスティック部１０の位置の音色で発音できる。
【０１２６】
また、本実施形態では、ＣＰＵ１１は、角速度センサ１２３が取得した角速度に基づいて、演奏操作中のスティック部１０の角速度の最大値を算出し、加速度センサ１２２が取得した加速度に基づいて、演奏操作中のスティック部１０の加速度の最大値を算出し、算出された角速度の最大値と、加速度の最大値とに基づいて、発音する楽音の音量を制御する。
よって、仮想的な音源がワールド座標系に垂直に配置されている場合であっても、スイング動作の強さを反映して適切な音量制御が可能となる。
【０１２７】
以上、本発明の実施形態について説明したが、実施形態は例示に過ぎず、本発明の技術的範囲を限定するものではない。本発明はその他の様々な実施形態を取ることが可能であり、さらに、本発明の要旨を逸脱しない範囲で、省略や置換など種々の変更を行うことができる。これら実施形態やその変形は、本明細書などに記載された発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【０１２８】
以下に、本願の出願当初の特許請求の範囲に記載された発明を付記する。
［付記１］
ユーザが保持可能な保持部材と、
前記保持部材の互いに直交する３軸それぞれの方向に生じる加速度を検出する加速度センサと、
前記直交する３軸それぞれを中心とする角速度を検出する角速度センサと、
前記角速度センサが検出した角速度に基づいて、演奏操作中の前記演奏部材の角速度の最大値を算出する第１算出手段と、
前記加速度センサが検出した加速度に基づいて、前記保持部材の加速度の最大値を算出する第２算出手段と、
前記第１算出手段により算出された前記角速度の最大値と、前記第２算出手段により算出された前記加速度の最大値とに基づいて、発音する楽音の音量を制御する音量制御手段と、を備える、
ことを特徴とする演奏装置。
［付記２］
ユーザが保持可能な保持部材と、前記保持部材の互いに直交する３軸のそれぞれの方向に生じる加速度を検出する加速度センサと、前記直交する３軸それぞれを中心とする角速度を検出する角速度センサと、を有する演奏装置が実行する方法であって、
前記角速度センサが検出した角速度に基づいて、演奏操作中の前記演奏部材の角速度の最大値を算出する第１算出ステップと、
前記加速度センサが検出した加速度に基づいて、前記保持部材の加速度の最大値を算出する第２算出ステップと、
前記第１算出ステップにて算出された前記角速度の最大値と、前記第２算出ステップにて算出された前記加速度の最大値とに基づいて、発音する楽音の音量を制御する音量制御ステップと、
を含む方法。
［付記３］
ユーザが保持可能な保持部材と、前記保持部材の互いに直交する３軸のそれぞれの方向に生じる加速度を検出する加速度センサと、前記直交する３軸それぞれを中心とする角速度を検出する角速度センサと、を有する演奏装置として用いられるコンピュータに、
前記角速度センサが検出した角速度に基づいて、演奏操作中の前記演奏部材の角速度の最大値を算出する第１算出ステップと、
前記加速度センサが検出した加速度に基づいて、前記保持部材の加速度の最大値を算出する第２算出ステップと、
前記第１算出ステップにて算出された前記角速度の最大値と、前記第２算出ステップにて算出された前記加速度の最大値とに基づいて、発音する楽音の音量を制御する音量制御ステップと、
を実行させるプログラム。
【符号の説明】
【０１２９】
１・・・演奏装置、１０・・・スティック部、１１・・・ＣＰＵ、１２・・・姿勢センサ、１３・・・Ｉ／Ｆ装置、１４・・・ＲＯＭ、１５・・・ＲＡＭ、１６・・・入力部、１７・・・無線通信装置、１８・・・ＬＥＤ、１２１・・・磁気センサ、１２２・・・か速度センサ、１２３・・・角速度センサ、３０・・・発音部、３１・・・ＣＰＵ、３２・・・Ｉ／Ｆ、３３・・ＲＯＭ、３４・・・ＲＡＭ、３５・・・表示部、３６・・・入力部、３７・・・サウンドシステム、３８・・・赤外線通信装置、３７１・・・音源部、３７２・・・オーディオ回路、３７３・・・スピーカ
【図１】
0006031801.tif 000002
【図２】
0006031801.tif 000003
【図３】
0006031801.tif 000004
【図４】
0006031801.tif 000005
【図５】
0006031801.tif 000006
【図６】
0006031801.tif 000007
【図７】
0006031801.tif 000008
【図８】
0006031801.tif 000009
【図９】
0006031801.tif 000010
【図１０】
0006031801.tif 000011
【図１１】
0006031801.tif 000012
【図１２】
0006031801.tif 000013
【図１３】
0006031801.tif 000014
【図１４】
0006031801.tif 000015
【図１５】
0006031801.tif 000016
【図１６】
0006031801.tif 000017
【図１７】
0006031801.tif 000018
【図１８】
0006031801.tif 000019