(57)【特許請求の範囲】
【請求項１】
検出対象の物理的な動きを検出し、該動作に係る物理量を取得するステップと、
前記物理量に応じて、前記検出対象が動作中であること、および停止したことを、判定する判定ステップと、
あらかじめ記憶手段に記憶されている、前記検出対象に対応する演奏イベントおよび対応しない演奏イベント、並びにそれら演奏イベントの演奏タイミングを含む曲データを、再生し、前記演奏タイミングで前記演奏イベントを発生する演奏イベント発生ステップと、
前記演奏イベントの発生時に、前記判定ステップにより前記検出対象が動作中であると判定されたとき、前記演奏イベントが前記検出対象に対応したものである場合にのみ、前記演奏イベントに基づく楽音制御を行なう第１制御ステップと、
前記判定ステップにより前記物理的な動きが停止したと判定されたとき、
（１）前記第１制御ステップによる楽音制御が行なわれていなかった場合は、前記物理的な動きの停止に基づき所定の楽音制御を行ない、
（２）前記第１制御ステップによる楽音制御が行なわれていた場合は、前記所定の楽音制御を行なわない
第２制御ステップと、
前記演奏イベント発生ステップで発生した演奏イベントのうち前記検出対象に対応しない演奏イベントに基づいて楽音制御を行なう第３制御ステップと
を備えたことを特徴とする電子楽器の音源制御方法。
【請求項２】
請求項１に記載の電子楽器の音源制御方法において、
前記第１制御ステップは、前記判定ステップにより前記物理的な動きが停止したと判定された時点から所定時間経過するまでに前記演奏イベントの発生があったとき、その演奏イベントが前記検出対象に対応したものである場合には、前記演奏イベントに基づく楽音制御を行なうものであることを特徴とする電子楽器の音源制御方法。
【請求項３】
検出対象の物理的な動きを検出し、該動作に係る物理量を取得する手段と、
前記物理量に応じて、前記検出対象が動作中であること、および停止したことを、判定する判定手段と、
あらかじめ記憶手段に記憶されている、前記検出対象に対応する演奏イベントおよび対応しない演奏イベント、並びにそれら演奏イベントの演奏タイミングを含む曲データを、再生し、前記演奏タイミングで前記演奏イベントを発生する演奏イベント発生手段と、
前記演奏イベントの発生時に、前記判定手段により前記検出対象が動作中であると判定されたとき、前記演奏イベントが前記検出対象に対応したものである場合にのみ、前記演奏イベントに基づく楽音制御を行なう第１制御手段と、
前記判定手段により前記物理的な動きが停止したと判定されたとき、
（１）前記第１制御手段による楽音制御が行なわれていなかった場合は、前記物理的な動きの停止に基づき所定の楽音制御を行ない、
（２）前記第１制御手段による楽音制御が行なわれていた場合は、前記所定の楽音制御を行なわない
第２制御手段と、
前記演奏イベント発生手段で発生した演奏イベントのうち前記検出対象に対応しない演奏イベントに基づいて楽音制御を行なう第３制御と
を備えたことを特徴とする電子楽器の音源制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、人体の腕や肘などの物理的な動きを検出して楽音発生を指示する電子楽器の音源制御方法に関する。
【０００２】
【従来の技術】
従来より、人体の所定の部分の動きを検出して楽音発生を指示する音源制御装置が知られている。例えば、手で持つグリップ型の演奏操作子と肩、肘、手首などの関節に装着する角度センサを備え、グリップ型の演奏操作子が操作されたとき、あるいは各関節の曲げ動作が停止したときや所定の設定位置を横切ったときなどのタイミングで楽音を発生する装置が知られている。これにより、演奏者の肩や肘などの動きに応じて楽音を発生することができ、視覚的な効果がある。
【０００３】
【発明が解決しようとする課題】
ところが、このような関節などの動きに応じて楽音を発生する電子楽器では、通常の楽器のように演奏操作する対象物が存在しないため、リアクションに乏しく（発音時の視覚的、感覚的な情報が乏しい）、発音タイミングを正確に合わせることは非常に難しい。そのため、曲に合わせて演奏する場合、どうしてもタイミングがずれてしまうという問題がある。
【０００４】
この発明は、人体の関節などの動きに基づいて楽音発生を指示する電子楽器の音源制御方法において、多少演奏動作がずれても正確なタイミングで楽音を発音することができ、初心者でもタイミングの合った演奏ができるようにすることを目的とする。
【０００５】
【課題を解決するための手段】
この目的を達成するため、請求項１に係る楽音制御方法は、検出対象の物理的な動きを検出し、該動作に係る物理量を取得するステップと、前記物理量に応じて、前記検出対象が動作中であること、および停止したことを、判定する判定ステップと、あらかじめ記憶手段に記憶されている、前記検出対象に対応する演奏イベントおよび対応しない演奏イベント、並びにそれら演奏イベントの演奏タイミングを含む曲データを、再生し、前記演奏タイミングで前記演奏イベントを発生する演奏イベント発生ステップと、前記演奏イベントの発生時に、前記判定ステップにより前記検出対象が動作中であると判定されたとき、前記演奏イベントが前記検出対象に対応したものである場合にのみ、前記演奏イベントに基づく楽音制御を行なう第１制御ステップと、前記判定ステップにより前記物理的な動きが停止したと判定されたとき、（１）前記第１制御ステップによる楽音制御が行なわれていなかった場合は、前記物理的な動きの停止に基づき所定の楽音制御を行ない、（２）前記第１制御ステップによる楽音制御が行なわれていた場合は、前記所定の楽音制御を行なわない第２制御ステップと、前記演奏イベント発生ステップで発生した演奏イベントのうち前記検出対象に対応しない演奏イベントに基づいて楽音制御を行なう第３制御ステップとを備えたことを特徴とする。
【０００６】
請求項２に係る発明は、請求項１に記載の電子楽器の音源制御方法において、前記第１制御ステップは、前記判定ステップにより前記物理的な動きが停止したと判定された時点から所定時間経過するまでに前記演奏イベントの発生があったとき、その演奏イベントが前記検出対象に対応したものである場合には、前記演奏イベントに基づく楽音制御を行なうものであることを特徴とする。
【０００７】
請求項３に係る発明は、検出対象の物理的な動きを検出し、該動作に係る物理量を取得する手段と、前記物理量に応じて、前記検出対象が動作中であること、および停止したことを、判定する判定手段と、あらかじめ記憶手段に記憶されている、前記検出対象に対応する演奏イベントおよび対応しない演奏イベント、並びにそれら演奏イベントの演奏タイミングを含む曲データを、再生し、前記演奏タイミングで前記演奏イベントを発生する演奏イベント発生手段と、前記演奏イベントの発生時に、前記判定手段により前記検出対象が動作中であると判定されたとき、前記演奏イベントが前記検出対象に対応したものである場合にのみ、前記演奏イベントに基づく楽音制御を行なう第１制御手段と、前記判定手段により前記物理的な動きが停止したと判定されたとき、（１）前記第１制御手段による楽音制御が行なわれていなかった場合は、前記物理的な動きの停止に基づき所定の楽音制御を行ない、（２）前記第１制御手段による楽音制御が行なわれていた場合は、前記所定の楽音制御を行なわない第２制御手段と、前記演奏イベント発生手段で発生した演奏イベントのうち前記検出対象に対応しない演奏イベントに基づいて楽音制御を行なう第３制御とを備えたことを特徴とする。
【０００８】
【発明の実施の形態】
以下、図面を用いてこの発明の実施の形態を説明する。
【０００９】
図１は、この発明に係る音源制御方法を適用した電子楽器の全体構成を示すブロック図である。この電子楽器は、右側ショルダ（肩）センサ１０１Ｒ、右側エルボ（肘）センサ１０２Ｒ、右側リスト（手首）センサ１０３Ｒ、右側グリップ操作子１０４Ｒ、左側ショルダセンサ１０１Ｌ、左側エルボセンサ１０２Ｌ、左側リストセンサ１０３Ｌ、左側グリップ操作子１０４Ｌ、検出回路１０５Ｒ，１０５Ｌ、表示器１０６、パネルスイッチ（ＳＷ）１０７、中央処理装置（ＣＰＵ）１０８、リードオンリメモリ（ＲＯＭ）１０９、ランダムアクセスメモリ（ＲＡＭ）１１０、タイマ１１１、および入出力（Ｉ／Ｏ）処理部１１２を備えている。検出回路１０５Ｒ，１０５Ｌ、表示器１０６、パネルＳＷ１０７、ＣＰＵ１０８、ＲＯＭ１０９、ＲＡＭ１１０、タイマ１１１、およびＩ／Ｏ処理部１１２は、バスライン１１３に接続されている。
【００１０】
右側ショルダセンサ１０１Ｒは、右肩に装着され、右肩の関節の曲げ角度を検出する角度センサである。同様に、右側エルボセンサ１０２Ｒ、右側リストセンサ１０３Ｒ、左側ショルダセンサ１０１Ｌ、左側エルボセンサ１０２Ｌ、および左側リストセンサ１０３Ｌは、それぞれ、右肘、右手首、左肩、左肘、および左手首に装着され、それらの部分の関節の曲げ角度を検出する角度センサである。グリップ操作子１０４Ｒは、右手で操作するための複数のスイッチなどを備えた操作子である。左側グリップ操作子１０４Ｌは、左手で操作するための複数のスイッチなどを備えた操作子である。右側センサ１０１Ｒ〜１０３Ｒおよび右側グリップ操作子１０４Ｒは、検出回路１０５Ｒに接続されている。検出回路１０５Ｒは、各右側センサ１０１Ｒ〜１０３Ｒの出力から角度値を検出し、またグリップ操作子１０４Ｒの各スイッチの操作を検出して、それらの検出結果をバスライン１１３を介してＣＰＵ１０８に出力する。左側についても同様であり、検出回路１０５Ｌは、各左側センサ１０１Ｌ〜１０３Ｌの出力から角度値を検出し、またグリップ操作子１０４Ｌの各スイッチの操作を検出して、それらの検出結果をバスライン１１３を介してＣＰＵ１０８に出力する。
【００１１】
ＣＰＵ１０８は、この電子楽器全体の動作を制御する。ＲＯＭ１０９は、ＣＰＵ１０８が実行する制御プログラムなどを格納する。ＲＡＭ１１０は、ＣＰＵ１０８が使用するレジスタやバッファを確保するワーク用のメモリである。また、ＲＡＭ１１０には、自動演奏用の曲データが格納される。曲データは、不図示の任意の方法によりＲＡＭ１１０に読み込まれる。タイマ１１１は時間をカウントするためのタイマであり、ＣＰＵ１０８から任意の時間をセットすることにより、タイマ１１１からその時間間隔でタイマ割込イベントを発生させることができる。表示器１０６は、各種の情報を表示するための表示器である。
【００１２】
パネルスイッチ１０７は、ユーザが音色設定など各種の設定を行なうためのスイッチ類である。特に、パネルスイッチ１０７は、ＲＡＭ１１０に格納されている曲データに基づく自動演奏を開始させるための自動演奏スタートスイッチ、自動演奏を停止させるための自動演奏ストップスイッチ、および曲データ中の所定のパートのマイナスワンを指定するためのマイナスワンスイッチを備えている。マイナスワンについては後述する。自動演奏スタートスイッチと自動演奏ストップスイッチは、１つのスイッチでスタートとストップとがトグルで切り替わるようなものでもよい。Ｉ／Ｏ処理部１１２は、外部にある音源との間で電波による通信を行なうトランスミッタを含む入出力処理部である。ＣＰＵ１０８は、発音すべきタイミングであると判断したとき、Ｉ／Ｏ処理部１１２を介して外部音源にノートオンを出力し、発音を行なわせる。
【００１３】
図１の各部のうち、センサ１０１Ｒ〜１０３Ｒ，１０１Ｌ〜１０３Ｌおよびグリップ操作子１０４Ｒ，１０４Ｌ以外の部分は、ベルト部に設けられている。ユーザは、ベルト部を腰に装着し、それぞれの角度センサを左右の手首、肘、および肩に装着し、グリップ操作子を手に持って演奏を行なう。特に、この電子楽器では、角度センサが装着された部位の動作が開始されたのちその動作が停止（ストップイベントの検出）されたタイミングで楽音を発音するのが基本動作であるが、楽音の発音タイミングが正確になるような制御を行なっている。具体的には、以下のようにしている。
【００１４】
あらかじめ肩や肘に装着する角度センサにはそれぞれ音色を割り当てておく。ここでは、右肩にバスドラム、右肘にハイハットというように、ドラムの音色を割り当てるものとする。一方、あらかじめ自動演奏用の曲データを用意しておき、その曲データ中には、角度センサに割り当てた音色のパートを、例えばバスドラムのパートやハイハットのパートというように用意しておく（完全に同じ音色でなく、同グループ同系統の音色でもよい）。それらの各パートは、正確な発音タイミングのデータを含むものである。そして、例えば右肘を例に説明すると、右肘の曲げ動作が開始されてからそのストップイベントが来たのち所定時間（本例では５０msec）経過後までの間に曲データ中の同音色（ハイハット）のパートの発音タイミングが来たらその時点で発音を行なう。また、右肘の動作が開始されそのストップイベントが来たとき、その間に曲データ中のハイハットのパートの発音タイミングが無ければ、ストップイベントの時点で発音を行なう。右肘の動作が開始されてからストップイベントまでの間に曲データ中のハイハットのパートの発音タイミングで発音がなされたときは、ストップイベントでは発音を行なわない。また曲データ中のハイハットのパートの発音タイミングが来ても、その時点で右肘が動作していないときは発音を行なわない。右肘だけでなく他の部位の角度センサについても同様にすることにより、ユーザの動作タイミングが若干ずれても正確なタイミングで発音される。なお、例えば右肘の動作開始からそのストップイベントまでに曲データ中のハイハットのパートの発音タイミングが無ければストップイベントの時点で発音され、さらにそのストップイベントから５０msecまでの間に曲データ中のハイハットのパートの発音タイミングがあればそのタイミングでも発音されることになる。
【００１５】
次に、この電子楽器で使用しているレジスタなどの記憶領域やそこに記憶するデータについて説明する。
（１）ｔ：１ミリ秒（msec）間隔で発生するタイマ割込イベントごとにカウントアップされるカウンタであり、その値で現タイミングを示す。初期値は０である。
（２）ＥＤ（ｔ）：カウンタｔの時点における角度センサの検出値（以下、角度センサ値と呼ぶ）を格納する配列である。
（３）ＥＶ（ｔ）：角度センサ値の変化速度を格納する配列である。カウンタｔの時点における変化速度ＥＶ（ｔ）は、ＥＶ（ｔ）＝ＥＤ（ｔ）−ＥＤ（ｔ−１４）で求める。この速度ＥＶ（ｔ）は、発音するのに必要な最低速度に至ったか否かを判定するために用いる。なお、ＥＤ（ｔ）−ＥＤ（ｔ−１４）を、１４[msec]微分値と呼ぶ。同様に、１４msec以外の時間間隔Ｔmsecで角度センサ値ＥＤの差分を取ったものはＴ[msec]微分値と呼ぶ。これらの「速度」や「微分」の定義は、厳密には一般的な数学・物理学での定義とは異なるが、それらと同等の意味を持つものである。
【００１６】
（４）ＥＭＦ：角度センサが装着された部位が動作中か否かを示す動作中フラグである。初期値は０であり、角度センサ値の変化速度の絶対値｜ＥＶ（ｔ）｜が所定値ε以上になったとき、角度センサが装着された部位が動作開始したものとして、１がセットされる。１がセットされた後は、ストップイベントが検出されたとき、再び０にリセットされる。ストップイベントとは、角度センサが装着された部位が動作を停止したこと（停止した後、折り返す動作に移った場合も含む）を示すイベントである。
（５）ＥＳＥ：角度センサが装着された部位が動作開始したとき１がセットされ、ストップイベントが検出された後の所定時間（本例では５０msec）の間はその１が保持され、ストップイベント検出後に該所定時間が経過したとき０にリセットされるサウンドイネーブルフラグである。このフラグが１のとき、自動演奏の曲データの発音タイミングが来たら発音を行なう。
【００１７】
（６）ＥＳＦ：角度センサが装着された部位が動作開始してからそのストップイベントが来たのち所定時間（本例では５０msec）経過後までの間に、曲データに基づく発音タイミングでの発音がなされたか否かを示す発音フラグである。角度センサが装着された部位が動作開始したとき０にリセットされ、前記のような発音がなされたとき１がセットされる。
（７）Ｅmax：角度センサが装着された部位が動作開始してからストップイベントが検出されるまでの速度ＥＶ（ｔ）の絶対値の最大値（以下、速度最大値と呼ぶ）を格納するレジスタである。
（８）ＥＭnow：現タイミングｔにおけるストップイベント判定用の４[msec]微分値ＥＤ（ｔ）−ＥＤ（ｔ−４）を格納するレジスタである。
【００１８】
（９）ＥＭold：上記ＥＭnowを設定したとき、それまでのＥＭnowを待避するためのレジスタである。
（１０）ＲＵＮ：自動演奏が開始されているか否かを示す自動演奏フラグである。その値は、自動演奏が開始されているとき１、停止されているとき０をとる。
（１１）曲データ：曲の先頭から順にノートイベントデータとデュレーションデータを並べたデータである。ノートイベントデータは発音する楽音の種類（音色など）や強さ（ベロシティ）などを規定するデータであり、デュレーションデータはノートイベントの間隔（次のノートイベント発生までの時間間隔）を規定するデータである。
【００１９】
なお、上記各記憶領域を示す記号は、レジスタなどの記憶領域そのものを示すとともに、当該記憶領域に格納されたデータをも示すものとする。例えば、ｔというときは、カウンタであるレジスタそのものを示すとともに、そのレジスタに格納されたカウント値（現タイミング値）をも示すものとする。また、上記の各記憶領域は、角度センサごとに別々に用意されているものとする。
【００２０】
次に、図２〜図６のフローチャートを参照して、この電子楽器の動作を詳しく説明する。
【００２１】
図２は、メインルーチンを示す。電子楽器の電源がオンされると、ＣＰＵ１０８は、ステップ２０１で各種レジスタなどの初期設定を行なう。特に、カウンタｔ、動作中フラグＥＭＦ、発音フラグＥＳＦ、および自動演奏フラグＲＵＮは０に、それぞれ初期設定する。また、１msecごとにタイマ割込イベントが発生するようにタイマ１１１を設定する。
【００２２】
次に、ステップ２０２でイベント検出を行ない、ステップ２０３でイベントがあるときはステップ２０４に進む。イベントがないときはステップ２０２に戻る。ステップ２０４では、検出したイベントに応じて分岐する。パネルスイッチ１０７またはグリップ操作子１０４Ｒ，１０４Ｌのスイッチの操作イベントが検出されたときは、ステップ２０５に進み、イベントのあったスイッチに対応する処理（音色の設定など）を行ない、ステップ２０２に戻る。タイマ割込イベントが検出されたときは、ステップ２０６に進み、そのタイマ割込が１msecごとの割込であったときはセンサ処理（図４）を行ない、そのタイマ割込がαmsecごとの割込であったときは自動演奏処理（図６）を行なう。なお、αmsecごとのタイマ割込イベントは、自動演奏のための割込であり、自動演奏の開始が指示されて後述の図３（ａ）のステップ３０３が実行されるとαmsecごとに発生するようになる。ステップ２０６の後、ステップ２０２に戻る。その他のイベントが発生したときは、ステップ２０７に進み、その他の処理を行なった後、ステップ２０２に戻る。
【００２３】
図３（ａ）は、図２のステップ２０５のＳＷ処理のうち、自動演奏スタートスイッチの操作があったときに実行される自動演奏スタート処理ルーチンを示す。まずステップ３０１で、演奏する曲データを指定する。次にステップ３０２で再生準備を行なう。再生準備は、曲データ中の最初のデュレーションデータ（一番始めのノートイベント発生までの時間を示すデータ）を読み出してカウントダウンの対象に設定する処理などである。次にステップ３０３で、再生開始する。再生開始は、αmsecごとにタイマ割込イベントが発生するようにタイマ１１１を設定する処理である。これにより、αmsecごとに後述する自動演奏処理（図６）が実行されるようになる。αの値はユーザが自由に設定でき、この値により自動演奏の曲データの再生速度（曲のテンポ）が規定される。次にステップ３０４で、自動演奏フラグＲＵＮに１をセットして自動演奏開始状態とし、処理を終了する。
【００２４】
図３（ｂ）は、図２のステップ２０５のＳＷ処理のうち、自動演奏ストップスイッチの操作があったときに実行される自動演奏ストップ処理ルーチンを示す。ステップ３１１で再生停止し、ステップ３１２で自動演奏フラグＲＵＮを０にリセットして自動演奏停止状態とし、処理を終了する。再生停止は、αmsecごとのタイマ割込イベントが発生しなくなるようにタイマ１１１を設定する処理である。これにより、αmsecごとの自動演奏処理（図６）の実行は停止する。
【００２５】
図３（ｃ）は、図２のステップ２０５のＳＷ処理のうち、マイナスワンスイッチの操作があったときに実行されるマイナスワン処理ルーチンを示す。ステップ３２１で、指定されている曲データ中の所定のパートのマイナスワンを指定し、処理を終了する。マイナスワンで指定されたパートは、ユーザの演奏動作により発音されるパート（角度センサの出力に基づいて発音タイミングを制御して発音されるパート）になる。マイナスワンで指定されたパートは、ユーザの演奏動作に応じて、かつ、楽音の発音タイミングが正確になるように制御されて、発音される。マイナスワンで指定されたパート以外のパートは通常通り自動演奏される。一方、マイナスワンを指定しない場合は、曲データ中の全パートが通常通り自動演奏され、角度センサに対してはストップイベントに基づく発音制御が行なわれる。
【００２６】
なお、ユーザは、肩や肘に装着する各角度センサにそれぞれ音色を割当てることができる。割当てた音色をセンサ音色と呼ぶ。各センサ音色を割当てる処理は、ステップ２０５のＳＷ処理の中で行なう。ユーザが指定するセンサ音色は、マイナスワンで指定されたパートの音色と同グループの音色とする必要がある。同グループにしないと発音がなされない。ここではセンサ音色はバスドラム、スネア、ハイハットなどのドラムの音色とする。曲データには、センサ音色と同グループの音色のパートのほか、メロディパートやベースなどの伴奏パートが含まれる。
【００２７】
図４は、図２のステップ２０６で１msecごとに繰り返し実行されるセンサ処理ルーチンを示す。ここでは、右エルボセンサ１０２Ｒの処理について説明するが、他のセンサについても同様の処理を行なうものとする。
【００２８】
まずステップ４０１で、カウンタｔをインクリメントする。次にステップ４０２で、右エルボセンサ１０２Ｒの角度センサ値を取込み、ＥＤ（ｔ）に格納する。ステップ４０３では、ｍｏｄ（ｔ／４）が０であるか否か判定する。ｍｏｄ（ｔ／４）はカウンタｔを４で割った余りを示す。ｍｏｄ（ｔ／４）＝０のときはステップ４０４に進み、それ以外のときは処理を終了する。結果として、４msecごとにステップ４０４に進むことになる。ステップ４０４では、現タイミングｔにおける１４[msec]微分値を求め、ＥＶ（ｔ）に格納する。これにより、ＥＶ（ｔ）には、角度センサ値の変化速度が設定されたことになる。
【００２９】
ステップ４０５では、ＥＶ（ｔ）の絶対値｜ＥＶ（ｔ）｜が所定のしきい値ε以上になったか否か、すなわち角度センサ値の変化速度の絶対値が所定値ε以上になったか否かを判定する。ε以上になったとき（動き始めが検出されたとき）はステップ４０６に進み、そうでないときはステップ４０７に進む。ステップ４０６では、動作中フラグＥＭＦが０か否か判定する。ＥＭＦ＝０なら、それまで動いていなかった右エルボの動き始めを検出したということだから、ステップ４０８で、動作中フラグＥＭＦおよびサウンドイネーブルフラグＥＳＥに１をセットし、発音フラグＥＳＦを０にリセットし、速度最大値Ｅmaxに現タイミングの速度ＥＶ（ｔ）をセットし、４[msec]微分値をレジスタＥＭnowとＥＭoldにセットし、処理を終了する。
【００３０】
ステップ４０６でＥＭＦ＝１なら、現在右エルボは動作中ということだから、ステップ４０９で、ノートオン判定処理（図５（ａ））を行ない、処理を終了する。ステップ４０５で｜ＥＶ（ｔ）｜≧εでないときは、ステップ４０７で動作中フラグＥＭＦが１か否か判定する。ＥＭＦ＝１なら、右エルボは動作中であるということだから、ステップ４０９に進む。ＥＭＦ＝０なら、右エルボは動作開始していないから、そのまま処理を終了する。
【００３１】
図５（ａ）は、ステップ４０９のノートオン判定処理ルーチンを示す。まず、ステップ５０１で角度センサ値の変化速度の絶対値｜ＥＶ（ｔ）｜の値に応じて速度最大値Ｅmaxを更新する。次にステップ５０２で、４[msec]微分値を求めてレジスタＥＭnowにセットする。次に、ステップ５０３でストップイベント発生の条件判定を行なう。具体的には、▲１▼現タイミングにおける４[msec]微分値ＥＭnowが０であるか、または、▲２▼前回の４[msec]微分値ＥＭoldと今回の４[msec]微分値ＥＭnowとの符号が異なるか、の２つの条件を判定する。▲１▼の条件は、右エルボの動作が停止して速度が０になったか否かを判定するものである。▲２▼の条件は、右エルボを動かし始めてから停止してさらに逆方向に戻した（腕を素早く戻したとき）ことを判定するものである。サンプリング間隔の関係から▲１▼の条件だけでは不充分なため、▲２▼の条件も判定している。
【００３２】
なお、動き始めを検出するときにはステップ４０４で１４[msec]微分値を用い、ストップイベントを検出するときにはステップ５０２で４[msec]微分値を用いているが、前者はある程度大きくしないと微分値の精度が得られないという観点から決定し、後者は少しでも早く条件成立をチェックするという観点から決定しているものである。
【００３３】
次に、ステップ５０４で、４[msec]微分値ＥＭnowをレジスタＥＭoldにセットする。ステップ５０５では、ステップ５０３における条件判定の結果、ストップイベントが発生したか否かを判定する。ストップイベントが発生していたらステップ５０６に進み、発生していなかったらそのまま処理を終了する。ステップ５０６で動作中フラグＥＭＦを０に初期化し、ステップ５０７でオフタイマをスタートさせる。オフタイマのスタートは、ストップイベント検出から５０msec経過した時点でオフタイマ割込がかかるようにタイマ１１１を設定する処理である。
【００３４】
次に、ステップ５０８で、発音フラグＥＳＦが０か否かを判定する。発音フラグＥＳＦが０でないときは（すなわちＥＳＦ＝１）、すでに後述する図６の自動演奏処理ルーチンで発音がなされているということだから、発音は行なわず処理を終了する。発音フラグＥＳＦが０のときは、ステップ５０９で、Ｉ／Ｏ処理部１１２を介して外部音源に対し、右エルボセンサに割り当てられたセンサ音色のノートオンを送出し（ベロシティとしては速度最大値Ｅmaxを送る）発音を行なわせ、処理を終了する。
【００３５】
図５（ｂ）は、ステップ５０７でスタートしたオフタイマによる割込がかかったとき（すなわち、ストップイベント検出から５０msec経過した時点）に実行されるオフタイマ割込ルーチンを示す。ステップ５１１でサウンドイネーブルフラグＥＳＥを０にリセットして、処理を終了する。
【００３６】
なお、上記図４および図５の処理により、マイナスワンが指定されていない場合でも、角度センサ処理ではストップイベントに基づく発音制御が行なわれる。
【００３７】
図６は、自動演奏がスタートした後、図２のステップ２０６でαmsecごとに繰り返し実行される自動演奏処理ルーチンを示す。まずステップ６０１で、自動演奏フラグＲＵＮが１か否か、すなわち自動演奏開始状態か否かを判定する。ＲＵＮが１でないなら、自動演奏停止状態であるからそのまま処理を終了する。ＲＵＮが１なら、ステップ６０２で、イベントタイミングであるか否かを判定する。イベントタイミングならステップ６０３に進み、そうでなければそのまま処理を終了する。イベントタイミングであるか否かは、現在読み出されてカウントダウンの対象になっているデュレーションデータをカウントダウンし、それが０になったか否かで判別する。
【００３８】
ステップ６０３では、イベントタイミングになったイベントデータがマイナスワンのパートのイベントであるか否か判定する。マイナスワンのパートであるときはステップ６０５に進み、そうでないときはステップ６０４に進む。なお、マイナスワンのパートが指定されていない場合は、常にステップ６０４に進む。ステップ６０４では、そのイベントデータを用いて通常のイベント再生処理を実行し、Ｉ／Ｏ処理部１１２を介して外部音源に対する発音制御を行なう。その後、ステップ６１１で、曲データから次のデュレーションデータを読み出してカウントダウンの対象に設定し、次イベントまでの時間を計測開始して、処理を終了する。
【００３９】
ステップ６０５では、当該イベントデータがノートオンイベントであるか否かを判別する。ノートオンイベントであるときはステップ６０６に進み、そうでないときはステップ６０４に進む。ステップ６０６では、サウンドイネーブルフラグＥＳＥが１であるか否か判別する。ＥＳＥ＝１のときは、発音を行なうため、ステップ６０７で当該イベントデータから再生するイベントの音色を検出し、ステップ６０８に進む。ステップ６０８では、ステップ６０７で検出した音色がセンサ音色（詳しくは、現時点でＥＳＥ＝１になっている角度センサ（動作中のもの）にユーザが割当てた音色）と同グループの音色であるか否かを判別する。同グループの音色であったときは、ステップ６０９で、外部音源に対し当該イベントデータの音色のノートオンを送出して発音を行なう。なお、ノートオンに付けるベロシティの値としては、読み出されたイベントデータに含まれているベロシティ値ＶＥＬを速度最大値Ｅmaxの値でスケーリングした値を用いる。例えば、ＶＥＬ×Ｅmax／Ｅo（ただしＥoは所定の基準値）などである。次に、ステップ６１０で発音フラグＥＳＦを１としステップ６１１に進む。ステップ６０６でＥＳＥ＝１でないとき、およびステップ６０８で再生するイベントの音色がセンサ音色と同グループの音色でないときは、ステップ６１１に進む。ステップ６１１では、曲データから次イベントまでの時間（デュレーションデータ）を読み出して計測を開始し、処理を終了する。
【００４０】
なお、同タイミングで同グループの音色の楽音を複数発生する場合は、複数のイベントデータが連続するが、それら複数のイベントデータについてはまとめてステップ６０７や６０９の処理を行なうようにしている。
【００４１】
以上では右エルボに着目した処理を説明したが、同様の処理を、右ショルダ、右リスト、左ショルダ、左エルボ、および左リストのそれぞれに対しても行なう。これにより、各関節の動きに応じて適正なタイミングで楽音の発生が行なわれる。また、スネアの連打などは１音１音を別々の演奏動作で発音する場合は演奏が難しくなるが、上記実施の形態によれば、あらかじめ曲データ中に連打のデータを用意しておけば、例えば腕を１振りする間に連打音を続けて発音でき演奏の動作も容易になる。
【００４２】
なお、計算間隔や速度検出の際の微分時間間隔などは上記実施の形態に限らず任意である。また上記実施の形態では、ストップイベント検出時から５０msec経過した時点でサウンドイネーブルフラグＥＳＥを０にリセットしているが、ストップイベント検出時に直ちにＥＳＥ＝０にしてもよい。上記実施の形態で、ストップイベントが検出された時点でオフタイマをスタートさせる代わりに、｜ＥＶ（ｔ）｜≧εがＮｏと判定された時点でオフタイマをスタートするようにしてもよい。ストップイベントの判定は、ＥＭnow＝０の代わりに、ＥＭnowが微少値γより小になったときストップイベントの発生としてもよい。
【００４３】
上記実施の形態では、曲データとまったく同じタイミングで発音を行なうようにしているが、一定の範囲内で曲データのタイミングを演奏者の動作タイミングに基づいて変更し、変更後のタイミングで発音を行なうようにしてもよい。また、上記実施の形態では、センサ音色と同グループの音色の曲データで発音するようにしたが、センサ音色と曲データの音色がまったく同じ場合にのみ発音するようにしてもよいし、逆に音色は無視して（ステップ６０８のチェックを行なわないでステップ６０９に進む）処理してもよい。
【００４４】
上記実施の形態では、曲データのタイミングで発音するようにしているが、曲データを用いずに、音源ユニットで作成されるクロックに合わせるなど、いわゆるクオンタイズを行なうようにしてもよい。例えば、ユーザの腕の振りのストップのタイミングが小節中の拍のタイミングの近くだったときにその拍のタイミングに合わせて発音するなどである。また、上記実施の形態では、センサの動作中に、対応する演奏イベントが複数発生すれば複数の発音制御を行なうようになっているが、この部分を１回の動作で１発音だけというように変更してもよい。
【００４５】
また、上記実施の形態では、人体の腕や肘に取り付けた角度センサの出力を取得して楽音発生のタイミングを判定し楽音発生しているが、人体の他の部位の動きを検出して用いてもよいし、人体でなく何らかの物理的な動きを検出した物理量を取得して用いてもよい。また、本発明は、鍵盤の鍵の押下やレバーなどの動きを検出して楽音を発生するものに適用することもできる。
【００４６】
なお、上記実施の形態は、演奏者の関節に取り付けられたセンサの出力に基づいて楽音を制御する電子楽器であったが、本発明は、その他の電子鍵盤楽器、電子管楽器、電子弦楽器などの電子楽器においても同様に実施できる。それぞれの電子楽器で、曲データに基づいて発生した発音イベントのタイミング近傍で、対応する演奏操作があったか無かったかを判定し、演奏操作があった場合にその該イベントのタイミングで楽音を発音指示するようにすれば良い。
【００４７】
【発明の効果】
以上説明したように、この発明によれば、関節などの動きに基づいて楽音発生を指示する楽音制御方法において、実際には弾けなくても、一見、弾けているような演技を行なうことができ、さらに演奏者の操作に係る物理量に応じて楽音制御を行なえば、より本当っぽい演技ができる。また、多少演奏動作がずれても正確なタイミングで楽音を発音することができ、初心者でもタイミングの合った演奏を行なうことができる。特に、ダンサーが踊る振り付けが演奏動作になっているような場合は、踊りの完成度に集中できるため、視覚的にもよい効果が得られる。また、連打などの演奏動作が難しい曲でも、１振りの動作で連打できるなど、簡単に演奏できるようになる。
【図面の簡単な説明】
【図１】この発明に係る音源制御方法を適用した電子楽器の全体構成を示すブロック図
【図２】メインルーチンを示すフローチャート図
【図３】スイッチ処理中の各種イベント処理ルーチンのフローチャート図
【図４】センサ処理ルーチンのフローチャート図
【図５】ノートオン判定処理ルーチンおよびオフタイマ割込ルーチンのフローチャート図
【図６】自動演奏処理ルーチンのフローチャート図
【符号の説明】
１０１Ｒ…右側ショルダ（肩）センサ、１０２Ｒ…右側エルボ（肘）センサ、１０３Ｒ…右側リスト（手首）センサ、１０４Ｒ…右側グリップ操作子、１０１Ｌ…左側ショルダセンサ、１０２Ｌ…左側エルボセンサ、１０３Ｌ…左側リストセンサ、１０４Ｌ…左側グリップ操作子、１０５Ｒ，１０５Ｌ…検出回路、１０６…表示器、１０７…パネルスイッチ（ＳＷ）、１０８…中央処理装置（ＣＰＵ）、１０９…リードオンリメモリ（ＲＯＭ）、１１０…ランダムアクセスメモリ（ＲＡＭ）、１１１…タイマ、１１２…入出力（Ｉ／Ｏ）処理部、１１３…バスライン。
【図１】
0003849133.tif 000002
【図２】
0003849133.tif 000003
【図３】
0003849133.tif 000004
【図４】
0003849133.tif 000005
【図５】
0003849133.tif 000006
【図６】
0003849133.tif 000007