(57)【特許請求の範囲】
【請求項１】
自動演奏装置に搭載され、該自動演奏装置が自動演奏を行うテンポの値を制御する装置であって、
ユーザが動かす物体の動きを検出する動き検出手段と、
前記動き検出手段が検出した物体の動きに基づいて、前記テンポの値を変更するテンポ変更手段と、
前記動き検出手段が物体の検出を行う時間間隔を変化させて該動き検出手段に物体を検出させる制御手段と、
を具備したことを特徴とするテンポ制御装置。
【請求項２】
前記制御手段は、前記時間間隔を、予め定めた演奏単位を周期として変化させる、
ことを特徴とする請求項１記載のテンポ制御装置。
【請求項３】
前記制御手段は、前記演奏単位の先頭に位置する期間、及び最終に位置する期間の時間間隔を、それら以外の期間の時間間隔と比較して長くさせる、
ことを特徴とする請求項１記載のテンポ制御装置。
【請求項４】
前記演奏単位は拍である、
ことを特徴とする請求項１、２、または３記載のテンポ制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ユーザが動かす物体（例えば手）の動きを検出してテンポ（の値）を変更する技術に関する。
【０００２】
【従来の技術】
現在、自動演奏装置は専用の装置としてだけでなく、電子楽器やシンセサイザ、或いはコントローラ等の楽音発生装置にも幅広く搭載されている。その自動演奏装置は、演奏データを処理することで演奏（ここでは伴奏を含む意味で用いる）を行う装置であり、その演奏は設定されたテンポで行われる。テンポ制御装置は、そのような自動演奏装置に、ユーザに任意のテンポの値を設定させるための装置として搭載される。
【０００３】
上記テンポ制御装置の多くは、新たに設定するテンポの値をユーザに指定させる方法として、スイッチ等を操作させてテンポの値をユーザに直接的に指定させる方法が採用されている。しかし、テンポ制御装置のなかには、物体（例えば手）の動かし方によりテンポの値をユーザに指定させる方法が採用されたものがある。その方法では、物体の動きからテンポの値を指定する情報を抽出することから、以降、便宜的にテンポ抽出方法と呼ぶことにする。テンポの値を指定する情報については、以降、便宜的にテンポ情報と呼ぶことにする。
【０００４】
テンポ抽出方法を採用したテンポ制御装置には、ユーザが動かす物体の動きを検出するために、例えばＬＥＤ（発光ダイオード）等の光源やフォトセンサが備えられている。テンポ制御装置は、それらを用いて、例えば以下のようにテンポ情報を抽出する。
【０００５】
上記フォトセンサは、光源から放射された光、或いはそれを物体が反射した光を受光させるために用いられる。そのような光の何れかをフォトセンサに受光させることにより、その受光量から物体がフォトセンサで検出される位置に存在しているか否か判定する。
【０００６】
ユーザが物体を動かしている場合、フォトセンサの受光量に基づく物体の有無の判定結果は、有から無、無から有、といったように順次、交互に変化する。そのことに着目し、判定結果が変化する時間間隔、例えば有と判定してから再び有と判定するまでの時間間隔（周期）を計時し、その計時した時間間隔をテンポ情報として抽出する。新たに設定すべきテンポの値は、そのようにして抽出したテンポ情報を基に決定する。
【０００７】
【発明が解決しようとする課題】
テンポ抽出方法を採用したテンポ制御装置では、フォトセンサに光源が放射した光、或いはその反射光を受光させるために、光源を駆動しなければならない。その光源は、消費電力を抑えたり、電灯等の外乱光の影響を避けるために、普通、間欠駆動される。
【０００８】
従来のテンポ制御装置は、その間欠駆動を、予め定められた時間間隔が経過する度に光源を駆動することで行い、その光源を駆動するタイミングでフォトセンサの受光量を標本化（検出）し、その受光量からテンポの変更を行っていた。このため、光源を駆動する時間間隔によって、以下のような問題点があった。
【０００９】
時間間隔を比較的に長く設定した場合には、物体の動きを検出するタイミングが全体として遅れるようになり、テンポ情報を抽出する精度が低下する。このため、ユーザが所望するテンポの値を高精度に設定することができないという問題点があった。
【００１０】
一方、時間間隔を比較的に短く設定した場合には、物体のぶれといった僅かな動きを検出してしまい、ユーザの意図に関わらずにテンポの値を変更してしまうという問題点があった。
【００１１】
このように、従来のテンポ制御装置では、何れにしても、ユーザが意図したようにテンポの値を変更させることが困難であった。このため、それらの問題点を共に回避することが強く望まれていた。
【００１２】
本発明の課題は、ユーザの意図に沿って所望のテンポ値に高精度に変更できるテンポ制御装置を提供することにある。
【００１３】
【課題を解決するための手段】
本発明のテンポ制御装置は、自動演奏装置に搭載され、該自動演奏装置が自動演奏を行うテンポの値を制御することを前提とし、ユーザが動かす物体の動きを検出する動き検出手段と、動き検出手段が検出した物体の動きに基づいて、テンポの値を変更するテンポ変更手段と、動き検出手段が物体の検出を行う時間間隔を変化させて該動き検出手段に物体を検出させる制御手段と、を具備する。
【００１４】
なお、上記の構成において、制御手段は、時間間隔を、予め定めた演奏単位を周期として変化させる、ことが望ましい。また、制御手段は、演奏単位の先頭に位置する期間、及び最終に位置する期間の時間間隔を、それら以外の期間の時間間隔と比較して長くさせる、ことが望ましい。その演奏単位は拍である、ことが望ましい。
【００１５】
本発明では、物体を検出するタイミングの時間間隔に変化を設け、そのタイミングで物体を検出した場合に、そのタイミングに基づいてテンポ値の変更を行う。
【００１６】
時間間隔に変化を設けることで、或る定められた期間のなかで物体の検出を行う精度に変化をつけることになる。このことから、その期間を、必要な精度に応じて時間間隔を調整することにより、ユーザの意図に反するテンポ値の変更は回避し、意図したテンポ値の変更は高精度に行えるようになる。
【００１７】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図１は、本実施の形態によるテンポ制御装置を搭載した自動演奏装置の回路構成図である。
【００１８】
その自動演奏装置は、図１に示すように、装置全体の制御を行うＣＰＵ１０１と、プログラムや自動演奏用の演奏データ（シーケンスデータ）、及び各種制御データ等を格納したＲＯＭ１０２と、ＣＰＵ１０１がワーク用に用いるＲＡＭ１０３と、各種の操作子からなる操作子群１０４、各種楽音の波形データを格納した波形メモリ１０５と、ＣＰＵ１０１の指示に従って、波形メモリ１０５から波形データを読み出し、それに必要な処理を施して出力する音源ＬＳＩ１０６と、音源ＬＳＩ１０６が出力した波形データをＤ／Ａ変換してアナログのオーディオ信号を出力するＤ／Ａ変換器１０７と、そのオーディオ信号を増幅する音響増幅器１０８と、音響増幅器１０８が出力したオーディオ信号を入力して楽音を放音するスピーカー１０９と、光を放射する光源としてＬＥＤ１１０を有する発光部１１１と、ＣＰＵ１０１から送られる信号（発光信号）の電流（或いは電圧）増幅を行い、それを発光部１１１に出力して駆動するドライバ回路１１２と、フォトセンサ（フォトダイオード）１１３を有する受光部１１４と、その受光部１１４から出力された受光信号をＡ／Ｄ変換してそのデジタル値を出力するＡ／Ｄ変換器１１５と、を備えて構成されている。
【００１９】
上記操作子群１０４は、各種操作子の他に、それらの操作状態を検出する回路を含めて表したものである。その検出回路は、例えばスキャン（走査）することで各操作子の操作状態を検出し、各操作子毎にその検出結果を操作情報としてＣＰＵ１０１に送出する。操作子としては、特に図示しないが、自動演奏（ここでは自動伴奏を含む）のスタート、或いはストップを指示するためのスタート／ストップスイッチ、自動演奏する曲を指定するための複数の数値キー、テンポ値を指定するためのテンポボタン、予め用意されているモードのなかから一つのモードを選択するためのモードスイッチ等が配設されている。発光部１１１（ＬＥＤ１１０）、及び受光部１１４は、そのモードスイッチにより所定のモードが選択された場合に、自動演奏を行っている間、駆動される。その所定のモードについては、以降、便宜的に、テンポ抽出モードと呼ぶことにする。
【００２０】
フォトセンサ１１３は、発光部１１１のＬＥＤ１１０と並べた形で配設させている。それにより、ＬＥＤ１１０から放射され、反射物１２０で反射された光をフォトセンサ１１３に受光させるようにしている。このことから、ユーザは、反射物１２０をＬＥＤ１１０から放射される光の光路に沿って、或いはその光路の交差方向に移動（普通は往復移動）させてテンポを指定することになる。なお、反射物１２０は、具体的にはユーザの手、或いは指揮棒等である。
【００２１】
以上の構成において、その動作を説明する。
特に図示しない電源スイッチへの操作によって電源がオンされると、ＣＰＵ１０１は、ＲＯＭ１０２に格納されたプログラムを読み出して実行することにより、装置全体の制御を開始する。その制御は、ＲＡＭ１０３をワーク用に使用しながら、操作子群１０４へのユーザの操作に応じて行う。
【００２２】
各操作子に対して行ったユーザの操作を検出するために、ＣＰＵ１０１は、操作子群１０４の検出回路に制御コマンドを送出し、検出回路に各操作子をスキャンさせて、その走査結果（各操作子の操作状態を示す操作情報）を受け取る。その走査結果（操作情報）を解析することにより、状態が変化した操作子、及びその変化内容を判別する。上記制御は、その操作子に割り当てた機能、及び変化内容に応じて行う。
【００２３】
例えば、走査結果を解析した結果、上記数値キー、テンポボタン、或いはモードスイッチが操作されたと判別した場合、ＣＰＵ１０１は、操作されたと判別した操作子の種類に応じて、ＲＡＭ１０３に格納した変数の値を書き換る。それにより、自動演奏させる曲やテンポ値の変更、モードの切り換えを行う。このとき、テンポ値を変更すると、自動演奏を実行する際に参照する変数ＴＥＭＰＯＶＡＬＵＥには、変更後のテンポ値に対応する自動演奏実行上の値が代入される。
【００２４】
一方、上記スタート／ストップスイッチが操作されたと判別した場合には、ＣＰＵ１０１は、例えば自動演奏を実行中か否かを管理するための変数（以降、便宜的に自動演奏フラグと呼ぶ）の値を書き換える。それにより、例えばそれまでの値が１であれば０、それまでの値が０であれば１に変更する。そのような書き換えを行った後の自動演奏フラグの値から、自動演奏を現在行っているか否か判定し、その判定結果に応じて以下のような制御を行う。
【００２５】
なお、自動演奏を行うために処理する演奏データは、例えば演奏上のイベントの内容を表すイベントデータに、それを処理すべきタイミングを表す時間データが付加されて構成されたものである。
【００２６】
自動演奏を現在行っていないと判定した場合、ＣＰＵ１０１は、ＲＡＭ１０３に保持させた変数を参照して、ユーザが再生を指定した曲の演奏データをＲＯＭ１０２から読み出す。その後は、例えば、ＲＯＭ１０２から読み出した演奏データ中のイベントデータを制御コマンドとして、それに付加された時間データに従って音源ＬＳＩ１０６に順次送出していくことで、自動演奏を実行する。
【００２７】
音源ＬＳＩ１０６は、その制御コマンドで指示された内容に従って、波形データの出力や音色の変更、或いは音響効果の付加といった処理を行う。例えば制御コマンドが楽音の発音を指示する内容であった場合には、発音指示された楽音の音色の波形データを波形メモリ１０５から読み出し、それに必要に応じた操作を施した後、Ｄ／Ａ変換器１０７に出力する。Ｄ／Ａ変換器１０７が音源ＬＳＩ１０６から入力した波形データをアナログのオーディオ信号に変換し、音響増幅器１０８がそのオーディオ信号を増幅してスピーカー１０９に出力することにより、楽音がスピーカー１０９から発音されることになる。
【００２８】
反対に、自動演奏を現在行っていると判定した場合には、ＣＰＵ１０１は、演奏データの処理を中止することで自動演奏をストップさせる。音源ＬＳＩ１０６に対しては、例えば発音中の全楽音の消音を指示する制御コマンドを送出して、スピーカー１０９から楽音が発音されるのを止めさせる。
【００２９】
自動演奏は、基本的に、ユーザがテンポボタンを介して指定したテンポ値で行われる。しかし、ユーザがテンポ抽出モードを選択している状態で自動演奏の実行を指示、即ちスタート／ストップスイッチを操作した場合には、ＣＰＵ１０１は以下のようにしてテンポ値を変更する。そのテンポ値の変更方法について、図２及び図３を参照して説明する。
【００３０】
図２は、発光部１１１（ＬＥＤ１１０）、及び受光部１１４（フォトセンサ１１３）の駆動タイミングを説明する図である。
図２において、発光タイミングは、ＣＰＵ１０１がドライバ回路１１２に発光信号を出力するタイミングと一致し、有効受光タイミングは、Ａ／Ｄ変換器１１５が受光部１１４のフォトセンサ１１３の信号出力をサンプリングしたなかで、ＣＰＵ１０１がテンポ値の変更を有効とするタイミングのことである。図２中に示す線は、それぞれ、一つのタイミングを表している。有効受光タイミングでは、拍の頭と一致するタイミングを太線で表している。
【００３１】
本実施の形態では、発光部１１１（ＬＥＤ１１０）を短く一定の時間間隔で駆動している。具体的には、１拍当たり４８回駆動している。このように発光部１１１（ＬＥＤ１１０）を駆動（発光）させるのに対し、Ａ／Ｄ変換器１１５の出力は、図２に示すように、基本的には発光部１１１の発光タイミングに合わせて有効とするが、拍を変化の周期として、有効とするタイミングの間隔を変化させている。具体的には、拍の頭の近傍では他の部分よりも大きな間隔でタイミングを有効としている。それにより、例えば２拍目の頭の近傍では、小節の頭を基準に発光部１１１の駆動回数で表現すると、４３、４５〜４７、４９〜５１、及び５３回目に発光部１１１が駆動するタイミングではＡ／Ｄ変換器１１５の出力を有効としないようにしている。なお、Ａ／Ｄ変換器１１５の出力を有効とするタイミングは、以降も小節の頭を基準にした発光部１１１の駆動回数で表現することにする。
【００３２】
ＣＰＵ１０１は、テンポ値を変更するためのテンポ情報を、ユーザが動かす反射物１２０をフォトセンサ１１３で検出してから再び検出するまでの時間間隔を計時することで取得する。その時間間隔の計時は、有効受光タイミングを考慮しつつ行う。それにより、有効としていないタイミングでフォトセンサ１１３が反射物１２０を検出すると、そのタイミングの近傍の有効としているタイミングで反射物１２０を検出したとしてテンポ情報を抽出する。このようにして取得したテンポ情報は、ユーザが新たに指定した１拍の時間間隔であるとして、テンポ値を変更する。
【００３３】
上述したようにして変更したテンポ値は、直ちに自動演奏に反映させる。その場合、テンポの変更タイミングと反射物１２０の動きが連動（同期）していないとユーザに不自然な印象を与える。それを回避するために、拍を単位とした演奏の進行は、反射物１２０の検出に合わせて行うようにさせている。
【００３４】
図３は、反射物１２０の検出タイミングを説明する図である。ユーザが反射物１２０として手を動かした場合を例にとって、有効受光タイミングと対応させて手を検出するタイミングを示したものである。比較のために、受光タイミングの時間間隔が短い従来例（以降、第１の従来例と呼ぶ）、及びその時間間隔が長い従来例（以降、第２の従来例と呼ぶ）の受光タイミングと手の検出タイミングも合わせて示している。この図３を参照して、反射物１２０（ここでは手）を検出するタイミング、及びそれの従来との相違について具体的に説明する。
【００３５】
なお、図３において、（ａ）は第１の従来例の受光タイミング、（ｂ）は第２の従来例の受光タイミング、（ｃ）は本実施の形態の有効受光タイミング、（ｄ）は反射物１２０である手の動き、（ｅ）は第１の従来例での検出タイミング、（ｆ）は第２の従来例での検出タイミング、（ｇ）は本実施の形態での検出タイミングである。図２と同様に、図３（ａ）〜（ｃ）で示す線は、それぞれ、受光タイミングを表し、太線は受光タイミングのなかで拍の頭と一致するタイミングを表す。その拍の頭のタイミングは、手を検出するタイミングに応じて変化するが、ここでは便宜上、そのことを無視して受光タイミングを示している。１〜４の数値は小節の先頭から何番目に位置する拍であるかを示す。
【００３６】
図３に示すように、拍の頭と一致するタイミングでユーザが手を検出できる位置（以降、検出可能位置と呼ぶ）に移動させた場合、第１及び第２の従来例、本実施の形態ともにそのタイミングで手を検出する。しかし、検出可能位置に手を移動させるタイミングが僅かでも遅れると、受光タイミングの時間間隔が短い第１の従来例では、そのタイミングで手を検出する。これに対し、第２の従来例と本実施の形態では、拍（３拍目である）の頭のタイミングで手を検出する。手を検出してから再び手を検出するまでの時間間隔（以降、拍間隔と呼ぶ）は、第１の従来例では時間ａとなるのに対し、第２の従来例および本実施の形態では時間ｂとなる。
【００３７】
人間が手（反射物１２０）を動かしている以上、多少のズレがどうしても存在する。そのズレは、テンポ値の変更を意志していなくても生じる。このことは、それまでのテンポ値を僅かに変えるような変化が手の動きにあっても、その手の動きの変化をユーザがテンポの変更を意図して行うことは少ないということを意味する。第１の従来例では、そのズレを検出してテンポ情報の変化として扱われるため、一定のテンポを維持することが非常に困難である。これに対し、本実施の形態では、結果としてそのようなズレを無視するため、ユーザの意図しないテンポの変更を回避して、一定のテンポを容易に維持することができる。
【００３８】
一方、拍の頭の近傍でないタイミングでユーザが手を検出可能位置に移動させた場合には、第１の従来例および本実施の形態ではそのタイミングで手を検出するのに対し、第２の従来例では、そのタイミングから遅れて手を検出する。
【００３９】
拍の頭の近傍でないタイミングで手を検出したということは、検出可能位置にあった手を移動させて再び検出可能位置に移動させるまでの時間間隔をユーザが比較的に大きく変化させたことを意味する。従って、その手の動きの変化をユーザがテンポの変更を意図して行った可能性が非常に高いと云える。第２の従来例では、基本的に手の動きを高精度に検出できないため、ユーザが所望するテンポ値を設定することができない。これに対し、本実施の形態では、そのような手の動きは有効受光タイミングの時間間隔が短い期間で検出するため、手の動きの変化を高精度に検出することができる。それにより、ユーザの所望するテンポ値も高精度に設定することができる。
【００４０】
上記したように、拍の頭の近傍のタイミングでユーザが手を検出可能位置に移動させた場合、第１の従来例と第２の従来例および本実施の形態とで手を検出するタイミングが異なる。このため、手の動きの比較的大きな変化が生じると、拍間隔は第１及び第２の従来例、本実施の形態で全て異なってくる。第１の従来例では時間ｃ、第２の従来例ではｄ、本実施の形態ではｅとなる。このことから、第１及び第２の従来例では、本実施の形態のように、ユーザの意図に沿って所望のテンポ値に高精度に変更することができないことが分かる。
【００４１】
次に、上述したＣＰＵ１０１の動作について、図４、図５、及び図７に示す各種動作フローチャート、及び図６に示す説明図を参照して詳細に説明する。
図４は、ユーザがスタート／ストップスイッチを操作して自動演奏の実行を指示した場合に実行されるタイマインタラプト処理の動作フローチャートである。図４を参照して、始めにその処理について詳細に説明する。
【００４２】
なお、そのタイマインタラプト処理は、例えばＣＰＵ１０１内蔵のハードタイマから出力される割り込み信号によって所定の時間間隔毎に実行される処理である。ＣＰＵ１０１は、その割り込み信号が出力された場合、それに対応するプログラムをＲＯＭ１０２から読み出し、それに制御を移すことでタイマインタラプト処理を実行する。また、便宜上、ここでは、テンポ抽出モードが選択されたことを前提としてタイマインタラプト処理について説明することにする。１小節の拍数は４とする。
【００４３】
上述したように、本実施の形態では、１／４８拍の時間間隔で発光部１１１のＬＥＤ１１０を発光させるようにしている。その時間間隔は、テンポ値に応じて変化する。タイマインタラプト処理は、所定の時間間隔毎に実行される。このことから、上記変数ＴＥＭＰＯＶＡＬＵＥには、タイマインタラプト処理の実行間隔を単位としたテンポ値に応じた値を代入させている。
【００４４】
先ず、ステップ４０１では、その変数ＴＥＭＰＯＶＡＬＵＥの値と変数ＳＫＹの値が等しいか否か判定する。それら変数の値が等しい場合、その判定はＹＥＳとなってステップ４０２に移行する。そうでない場合には、その判定はＮＯとなってステップ４０９に移行する。
【００４５】
上記変数ＳＫＹは、１／４８拍の時間間隔を特定するためにタイマインタラプト処理の実行回数のカウント用に用意した変数である。ステップ４０２では、その変数ＳＫＹに０を代入する。このように変数ＳＫＹに０を代入することで、ステップ４０１では、１／４８拍に対応する時間間隔毎にＹＥＳと判定することになる。
【００４６】
ステップ４０２に続くステップ４０３では、小節単位で自動演奏を進行するために用意した変数Ｘの値をインクリメントする。それが終了した後、ステップ４０４に移行する。なお、その変数Ｘは、後述するように、有効受光タイミングを判別するために参照される。
【００４７】
ステップ４０４では、変数Ｘの値が１９２（＝４８×４）と等しいか否か判定する。変数Ｘのカウント数は１拍当たりの４８であることから、１小節の拍数が４のときには１９２となる。このため、１小節分のカウントを行った場合、その判定はＹＥＳとなり、ステップ４０５に移行して変数Ｘに０を代入した後、ステップ４０６に移行する。そうでない場合には、その判定はＮＯとなってステップ４０６に移行する。
【００４８】
ステップ４０６では、時間データに従ってイベントデータを処理することにより自動演奏を行う自動演奏処理を実行する。続くステップ４０７では、発光部１１１のＬＥＤ１１０を発光させる発光処理を実行する。それが終了した後、ステップ４０８に移行する。
【００４９】
上記イベントデータの処理は、例えばＣＰＵ１０１が、それを音源ＬＳＩ１０６に送出することで行われる。また、上記発光処理は、ＣＰＵ１０１がドライバ回路１１２に発光信号を送出することで行われる。
【００５０】
ステップ４０８では、Ａ／Ｄ変換器１１５から受光部１１４のフォトセンサ１１３の受光量を表す値（受光値）を入力して、テンポ情報の抽出、更にはテンポ値の変更を行う受光処理を実行する。その後、一連の処理を終了する。
【００５１】
一方、ステップ４０１の判定がＮＯ、即ち変数ＳＫＹの値と変数ＴＥＭＰＯＶＡＬＵＥの値が異なる場合に移行するステップ４０９では、変数ＳＫＹの値をインクリメントする。そのインクリメントを行った後、上記ステップ４０８に移行する。
【００５２】
このように、タイマインタラプト処理では、１／４８拍に対応する時間間隔毎に、ステップ４０６の自動演奏処理、ステップ４０７の発光処理を実行するようになっている。そのため、自動演奏は、設定されているテンポ値で行われることになり、ＬＥＤ１１０は１／４８拍の時間間隔毎に発光することになる。
【００５３】
図５は、上記ステップ４０８として実行される受光処理の動作フローチャートであり、図６は、テンポ情報の抽出方法を説明するための図である。次に、図５、及び図６を参照して、受光処理について詳細に説明する。
【００５４】
始めに、受光処理で行われるテンポ情報の抽出について、図６を参照して説明する。
図６において、縦軸はＡ／Ｄ変換器１１５の出力値、横軸は時間であり、グラフはＡ／Ｄ変換器１１５の出力値の時間変化を示している。縦軸に示すＡ、及びＢは、予め定めた閾値である。具体的には、閾値Ａは、フォトセンサ１１３が反射物１２０を検出したか否かを判定するために定めた閾値であり、閾値Ｂは、反射物１２０が移動してフォトセンサ１１３により検出されなくなったか否か判定するために定めた閾値である。
【００５５】
テンポ情報は、基本的に、反射物１２０を検出してからそれを再び検出するまでの時間間隔を計時して取得するようになっている。その時間間隔を計時するために、本実施の形態では、変数ＯＮＦＬＡＧを用意している。その変数ＯＮＦＬＡＧは、Ａ／Ｄ変換器１１５の出力値が閾値Ａより大きくなるとセット、即ち１を代入し、その出力値が閾値Ｂより小さくなるとリセット、即ち０を代入している。
【００５６】
変数ＯＮＦＬＡＧを上記したタイミングでリセットするのは、次にＡ／Ｄ変換器１１５の出力値が閾値Ａより大きくなったときにセットできるようにするためである。そのように変数ＯＮＦＬＡＧのセットやリセットを行うことで、本実施の形態では、変数ＯＮＦＬＡＧをセットしてから次にセットするまでの期間を計時してテンポ情報を取得するようにしている。
【００５７】
図５に示す受光処理の説明に移る。
先ず、ステップ５０１では、Ａ／Ｄ変換器１１５の出力値を取り込んで、それを変数Ｙに代入する。続くステップ５０２では、その変数Ｙの値が、閾値Ａより大きいか否か判定する。その閾値Ａよりも変数Ｙの値が大きかった場合、即ち反射物１２０が検出可能位置に移動してフォトセンサ１１３がそれを検出したような場合、その判定はＹＥＳとなってステップ５０３に移行する。そうでない場合には、その判定はＮＯとなってステップ５０７に移行する。
【００５８】
ステップ５０３では、変数ＯＮＦＬＡＧの値が１か否か判定する。その変数ＯＮＦＬＡＧに１が代入されていた場合、その判定はＹＥＳとなってステップ５０９に移行し、そうでない場合には、その判定はＮＯとなってステップ５０４に移行する。
【００５９】
ステップ５０４では、変数ＯＮＦＬＡＧに１を代入する。変数ＯＮＦＬＡＧをセットすることは、反射物１２０の検出に伴ってテンポ情報が取得されたことを意味する。このため、続くステップ５０５では、その取得したテンポ情報、及び有効受光タイミングに基づきテンポ値を変更する間引き処理を実行する。それが終了すると、ステップ５０６に移行し、テンポ情報取得用、即ち反射物１２０の検出間隔を計時するために用意した変数ＣＯＵＮＴＥＲに０を代入した後、一連の処理を終了する。
【００６０】
一方、ステップ５０２の判定がＮＯ、即ちＡ／Ｄ変換器１１５の出力値が閾値Ａ以下と判定した場合に移行するステップ５０７では、その出力値が閾値Ｂより小さいか否か判定する。反射物１２０が検出可能位置から離れてフォトセンサ１１３の受光量が減少した、或いは小さい場合、Ａ／Ｄ変換器１１５の出力値は閾値Ｂより小さくなることから、その判定はＹＥＳとなり、ステップ５０８に移行して変数ＯＮＦＬＡＧをリセットした後、ステップ５０９に移行する。そうでない場合には、その判定はＮＯとなってステップ５０９に移行する。
【００６１】
ステップ５０９では、変数ＣＯＵＮＴＥＲの値をインクリメントする。そのインクリメントを行った後、一連の処理を終了する。
受光処理では、Ａ／Ｄ変換器１１５の出力値が閾値Ａより大きくなって変数ＯＮＦＬＡＧをセットする場合を除き、その処理を実行する度に変数ＣＯＵＮＴＥＲの値をインクリメントするようになっている。それにより、変数ＣＯＵＮＴＥＲには、受光処理の実行間隔、即ち図４に示すタイマインタラプト処理の実行間隔を単位として、変数ＯＮＦＬＡＧがセットされてから再びセットされるまでの期間を表す値が代入されることになる。
【００６２】
図７は、上記ステップ５０５として実行される間引き処理の動作フローチャートである。次に、図７を参照して、間引き処理について詳細に説明する。
本実施の形態では、上述したように、拍の頭の近傍では有効受光タイミングの時間間隔を比較的に大きくし、その間で反射物１２０を検出した場合には、その検出したタイミングは無視し、それの近傍の有効受光タイミング（ここでは、拍の頭のタイミング）で検出したとしてテンポ値の変更を行っている。反射物１２０を検出したタイミングが有効受光タイミングか否かは、変数Ｘの値を参照して判定している。このことから、間引き処理は、変数Ｘの値に応じてテンポ値の変更を行うようになっている。
【００６３】
先ず、ステップ７０１では、変数Ｘの値が０以上６未満か否か判定する。変数Ｘの値がその間の値であった場合、その判定はＹＥＳとなってステップ７０２に移行し、そうでない場合には、その判定はＮＯとなってステップ７０３に移行する。
【００６４】
ステップ７０２では、変数Ｘの値が０、或いは４か否か、即ち変数Ｘの値が有効受光タイミングを表しているか否か判定する。有効受光タイミングでフォトセンサ１１３が反射物１２０を検出した場合、即ちＡ／Ｄ変換器１１５の出力値が閾値Ａより大きくなった場合、その判定はＹＥＳとなってステップ７１１に移行し、そうでない場合には、その判定はＮＯとなって一連の処理を終了する。
【００６５】
ステップ７０３〜７１０では、上記と同様にして、有効受光タイミングでフォトセンサ１１３が反射物１２０を検出したか否か判定し、その有効受光タイミングでフォトセンサ１１３が反射物を検出したと判定した場合には、ステップ７１１に移行する。そうでない場合には、テンポ値、即ち変数ＴＥＭＰＯＶＡＬＵＥの値を変更することなく一連の処理を終了する。
【００６６】
そのステップ７１１では、変数ＴＥＭＰＯＶＡＬＵＥに、変数ＣＯＵＮＴＥＲの値を４８で割って得られる値を代入する。それにより、テンポ値を変更する。その後、一連の処理を終了する。
【００６７】
図８は、テンポ変更例を説明する図である。上述したようにして行われるテンポ値の変更によって、反射物１２０を検出するタイミングに応じて拍の時間間隔が変化する様子を有効受光タイミングで表したものである。図中の「受光あり」は、反射物１２０を検出したタイミング、即ちＡ／Ｄ変換器１１５の出力値が閾値Ａより大きくなったタイミングを示している。１〜４の数値は、小節の先頭から何番目に位置した拍であるかを示す。
【００６８】
図８に示すように、２拍目の頭のタイミングとなるまえに反射物１２０を検出した場合、その反射物１２０を検出したタイミング以降は、時間ｆが１拍の演奏期間となるようにテンポが変更される。１拍の残りの部分を変更後のテンポで経過する時間となると、２拍目の演奏に移行するが、その３拍目の頭のタイミングで反射物１２０が検出されたため、その検出によるテンポ値の変更は回避されている。それにより、２拍目の演奏期間は、時間ｆとなっている。
【００６９】
なお、本実施の形態では、テンポ値の変更は速くなるほうのみを想定しているが、遅くなるほうのみを想定してテンポ値を変更するようにしても良い。当然のことながら、そのどちらにもテンポ値を変更できるようにしても良い。
【００７０】
また、本実施の形態では、図８に示すように、反射物１２０を検出したタイミングでテンポ値のみを変更するようにしているが、テンポ値を変更する場合には、図９に示すように、必要に応じて拍単位で自動演奏を進行させるようにしても良い。
【００７１】
有効受光タイミングは、図２に示すように、本実施の形態では、拍の頭の近傍では粗く、それ以外では密としているが、微妙なテンポ値の変更を可能とするために、その逆としても良い。即ち拍の頭の近傍では密に、それ以外では粗くするようにしても良い。その有効受光タイミングは、本実施の形態ではプログラム中のデータから判別するようにしているが、幾つか有効受光タイミングのパターンを制御データとしてＲＯＭ１０２に用意しておき、そのなかからユーザが所望するパターンを選択させるようにしても良い。電池等を電源とする装置に対応するために、全体としてタイミングの時間間隔が異なるパターンを複数用意し、そのなかから電源の電圧に応じてパターンを自動的に選択するようにしても良い。
【００７２】
本実施の形態では、有効受光タイミングではないタイミングでもＬＥＤ１１０やフォトセンサ１１３の駆動（Ａ／Ｄ変換器１１５の出力値の読み込み）を行っているが、有効受光タイミングでのみそれらを駆動するようにしても良い。何れにしても、有効受光タイミングで反射物１２０を検出した場合にのみ、テンポ値の変更を行うようにしていれば良い。
【００７３】
また、本実施の形態によるテンポ制御装置は、自動演奏装置に搭載させているが、搭載できる装置は自動演奏装置に限定されるものではない。電子楽器やコントローラ、シンセサイザ等に幅広く搭載させることができる。反射物１２０を検出する機能を既に備えたテンポ制御装置には、基本的に、上述したような動作を実現させるプログラムを搭載させるだけで本発明を適用させることができる。
【００７４】
【発明の効果】
以上、説明したように本発明は、物体を検出するタイミングの時間間隔に変化を設け、そのタイミングで物体を検出した場合に、そのタイミングに基づいてテンポ値の変更を行う。このため、ユーザの意図に反するテンポ値の変更は回避しつつ、意図したテンポ値の変更は高精度に行うことができる。
【図面の簡単な説明】
【図１】本実施の形態によるテンポ制御装置を搭載した自動演奏装置の回路構成図である。
【図２】発光部、及び受光部の駆動タイミングを説明する図である。
【図３】反射物の検出タイミングを説明する図である。
【図４】タイマインタラプト処理の動作フローチャートである。
【図５】受光処理の動作フローチャートである。
【図６】テンポ情報の抽出方法を説明するための図である。
【図７】間引き処理の動作フローチャートである。
【図８】テンポ変更例を説明する図である。
【図９】他の実施の形態におけるテンポ変更方法を説明する図である。
【符号の説明】
１０１    ＣＰＵ
１０２    ＲＯＭ
１０３    ＲＡＭ
１０４    操作子群
１０５    波形メモリ
１０６    音源ＬＳＩ
１１０    ＬＥＤ
１１１    発光部
１１２    ドライバ回路
１１３    フォトセンサ
１１４    受光部
１１５    Ａ／Ｄ変換器
１２０    反射物
【図１】
0003757641.tif 000002
【図２】
0003757641.tif 000003
【図３】
0003757641.tif 000004
【図４】
0003757641.tif 000005
【図５】
0003757641.tif 000006
【図６】
0003757641.tif 000007
【図７】
0003757641.tif 000008
【図８】
0003757641.tif 000009
【図９】
0003757641.tif 000010