(57)【要約】【課題】演奏者の演奏のテンポに自動演奏のテンポを追随させることができ、特に演奏の盛り上がりや演奏表現によるテンポの揺れに対しても細やかにテンポ追随ができるようにすることを目的とする。【解決手段】演奏者が自由に演奏し入力されたノートから演奏された各音符の音価やリズムを類推し、テンポを選出する。例えば演奏者が演奏開始前に出すプリカウントからデフォルトの基準テンポを算出し、該基準テンポを元にノートの各音価の有効範囲を絶対時間で設定する。次のノートが入力された際、そのノートが何れかの範囲に収まっていればその値をもとに音価を判断し基準テンポを算出する。そして、各音価毎の有効範囲を再設定し、次の入力を待つ。再生処理は基準テンポで実行する。【選択図】  図１
2004287308.tif 000002
【特許請求の範囲】
【請求項１】
基準テンポに基づいてシーケンスデータの再生を行う再生手段と、
演奏入力手段と、
前記演奏入力手段による演奏入力の時間間隔に基づいて前記基準テンポを更新するテンポ更新手段と、
を備えることを特徴とする演奏制御装置。
【請求項２】
請求項１に記載の演奏制御装置において、
前記演奏入力が基準テンポ更新に有効であるか否か判定する判定手段をさらに備えるとともに、前記テンポ更新手段は、所定個数の有効演奏入力の時間間隔に基づいて、前記基準テンポを更新することを特徴とする演奏制御装置。
【請求項３】
請求項２に記載の演奏制御装置において、
複数種類の音価に相当する時間間隔範囲を規定する情報を記憶する記憶手段をさらに備えるとともに、前記判定手段は、演奏入力間の時間間隔が前記規定された何れかの音価の時間間隔範囲に収まっている場合に当該演奏入力が基準テンポ更新に有効であると判定するものであり、前記テンポ更新手段は、前記基準テンポに基づいて前記時間間隔範囲を規定する情報を更新するものであることを特徴とする演奏制御装置。
【請求項４】
基準テンポに基づいてシーケンスデータの再生を行う再生ステップと、
演奏入力ステップと、
前記演奏入力ステップによる演奏入力の時間間隔に基づいて前記基準テンポを更新するテンポ更新ステップと
を備えることを特徴とする演奏制御プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、演奏の盛り上がりや演奏表現によるテンポの揺れに追随することのできる演奏制御装置およびプログラムに関する。
【０００２】
【従来の技術】
従来より、与えられたシーケンスデータに基づいて自動演奏を行う自動演奏装置が知られている。自動演奏のテンポは、ユーザが所定の操作子を操作することで任意に調整できるようになっている。一方、操作子によるテンポの調整だけでは、自動演奏に合わせて演奏者が例えばメロディーを演奏する場合、演奏者は自動演奏のテンポに合わせて演奏しなくてはならない。このため、演奏者が演奏するテンポに合わせて自動演奏する機能が求められている。
【０００３】
例えば、特許文献１には、音程や発音タイミングに基づいた音楽アクセントを検出し、その音楽アクセントに基づいてテンポ変化を予測し、予測したテンポになるようにテンポ修正するテンポ検出装置が開示されている。
【０００４】
【特許文献１】特開平０６−３４８２７２号
【０００５】
【発明が解決しようとする課題】
上記特許文献１に記載の技術では、音楽アクセントに基づいてテンポを修正するだけであるので、演奏者が自由に演奏し入力された楽音から細やかなテンポ追随を行うことはできなかった。
【０００６】
この発明は、演奏者の演奏のテンポに自動演奏のテンポを追随させることができ、特に演奏の盛り上がりや演奏表現によるテンポの揺れに対しても細やかにテンポ追随ができるようにすることを目的とする。
【０００７】
【課題を解決するための手段】
この目的を達成するため、この発明は、演奏者が自由に演奏し入力されたノートから演奏された各音符の音価やリズムを類推し、テンポを選出することを特徴とする。また、例えば演奏者が演奏開始前に出すプリカウント（現行では２小節分８拍、任意の音数やリズムに変更可能）からデフォルトのテンポを算出し、それを基準テンポとして次に入力されるノートの各音価の有効範囲を絶対時間で設定する。次のノートが入力された際、そのノートが何れかの範囲に収まっていればその値をもとに音価を判断し、その時点の参考テンポ（前入力からの経過時間を４分音符あたりの時間に直したもの）を算出する。そして、各音価毎の有効範囲を再設定し、次の入力を待つ。なお、どの音価の有効範囲にも該当しないソートは対象外とみなし無視する。参考テンポが一定数（例えば４）蓄積されるとその平均値を出して新しい基準テンポとする。シーケンスの進行は、基準テンポをもとに現在の演奏位置を割り出し、次のコード切り替えタイミングまでの時間を算出することで行う。または、ポピュラー音楽の性質上入力抜けの確率の低い２拍目と４拍目をトリガーとし、その入力の有無によって判断するのでもよい。
【０００８】
【発明の実施の形態】
以下、図面を用いてこの発明の実施の形態を説明する。
【０００９】
図１は、この発明の実施の形態に係る自動演奏装置の概略構成を示す。この装置は、中央処理装置（ＣＰＵ）１０１、記憶手段１０２、入力手段１０３、出力手段１０４、および通信手段１０５を備える。１１０は各部を相互に接続するバスラインである。
【００１０】
ＣＰＵ１０１は、この装置の全体の動作を制御する処理装置である。記憶手段１０２は、ＣＰＵ１０１が実行するプログラムや各種のデータを記憶する。記憶手段１０２は、例えば半導体メモリ（ＲＯＭ、ＲＡＭ）、磁気記録媒体（フレキシブルディスク、テープデバイス、ハードディスクなど）、光記憶媒体（ＣＤ、ＣＤ−Ｒ／ＲＷ、ＤＶＤ、ＭＯなど）などを含む。入力手段１０３は、キーボードや各種スイッチなどのキーデバイス、マウスやタブレットなどのポインティングデバイス、マイクロホン、あるいはカメラなどを含むものとし、少なくとも複数の鍵を有する鍵盤などの演奏入力デバイスは備えているものとする。出力手段１０４は、表示手段（ＣＲＴ、ＬＣＤなど）、放音手段（音源、スピーカなど）、印刷手段（プリンタなど）などを含み、少なくとも放音手段は備えているものとする。通信手段１０５は、通信ネットワーク１０６と接続するためのものである、例えばＥｔｈｅｒｎｅｔ（登録商標）、ＩＥＥＥ１３９４、ＩＥＥＥ８０２．１１ｂ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、ＭＩＤＩなどの規格に基づくネットワークである。
【００１１】
図１の装置では、所定のプログラム（図２以降を参照して後述する）をＣＰＵ１０１で実行することにより、与えられたシーケンスデータ（自動演奏データ）に基づいて自動演奏を行うことができる。また、演奏入力デバイスの操作を検出して演奏者の演奏入力に応じた楽音を発音する。特に、本装置では、演奏者が自由に演奏し入力されたノートから演奏された各音符の音価（全音符、二部音符、四分音符などの区別）やリズムを類推し、演奏のテンポを算出する。そして、自動演奏のテンポを前記算出した演奏のテンポに追随させる。以下、本装置における処理手順を説明する。
【００１２】
図２は、本装置のメインルーチンの処理手順を示す。なお、以下ではオブジェクト指向プログラミングの手法で処理手順を説明する。メインルーチンが起動されると、ステップ２０１〜２０４で各オブジェクトを構築する。その後は、ステップ２１１〜２１４に示すように、構築された各オブジェクトがそれぞれ動作し、ステップ２０５でシーケンサオブジェクトからの終了通知を受けると処理終了する。メインルーチンは、シーケンサオブジェクトからの終了通知を検知するか、別途プログラムの終了が指示されるまで、テンポトレースおよび再生処理に関しては特に処理を必要としない。
【００１３】
構築された各オブジェクトの処理について説明する。タイマオブジェクト２１１は、システムクロックに基づいて実時刻情報を随時出力する。ノートイベントハンドラ２１２は、演奏者による演奏入力デバイスの操作を検出し、操作がなされていたときは、該操作に応じたノートイベントをノート時刻情報と共に発生する。発生したノートイベントに応じた楽音は放音手段により放音される。テンポトレースオブジェクト２１３は、ノートイベントハンドラ２１２から発生されるノート時刻情報（演奏者による演奏入力で発生したノートオンの時刻）に応じてテンポを検出しテンポ情報を出力する。シーケンサオブジェクト２１４は、テンポトレース２１３から出力されるテンポ情報に応じたテンポで、与えられたシーケンスデータに基づく自動演奏を行う。
【００１４】
各オブジェクトの処理についてさらに詳しく説明する。ただし、ここでは演奏者による演奏入力からテンポを検出しそのテンポに応じてシーケンスデータの再生のテンポを追随させる処理に着目して説明する。演奏者による演奏入力に応じた楽音の発生処理やシーケンスデータの再生制御処理については従来と同様であるので詳しく説明しない。
【００１５】
まず、ノートイベントハンドラ２１２について説明する。ノートイベントハンドラは、演奏入力デバイスからの入力状態を監視し、ノートイベントの入力時刻を所定のバッファに蓄積し、先入れ先出し方式でノート入力時刻を出力（ＧｅｔＮｏｔｅ（）関数による）する。
【００１６】
図３（ａ）は、ノートイベントハンドラ２１２が構築されたときに起動される処理（ＣＯＮＳＴＲＵＣＴ）３０１を示す。ステップ３０２で、ノート時刻ＦＩＦＯ（先入れ先出し方式）バッファを初期化し、未処理数（詳しくは未処理数を格納するワークレジスタ）を０とする。ステップ３０３でノートオンの入力があるか否か繰り返しチェックする。ノートオン入力があるときは、ステップ３０４でタイマ２１１から現在時刻を取得し、ステップ３０５でノート時刻ＦＩＦＯバッファの末尾にその時刻情報を追加し、ステップ３０６で未処理数をインクリメントして、ステップ３０３に戻る。
【００１７】
図３（ｂ）は、演奏入力の取得を指示するＧｅｔＮｏｔｅ（）関数３１１の処理を示す。ステップ３１２で、現在の未処理数が０か否か判定する。０であれば上記ＦＩＦＯバッファに格納されているノートオンはないということであるから、ステップ３１３で呼び出し元へヌル（ＮＵＬＬ）を返す。未処理数が０でないときは、ステップ３１４で未処理数をデクリメントし、ステップ３１５でＦＩＦＯバッファの先頭のノートオン情報を取り出して呼び出し元へ返す。
【００１８】
なお、上述のノート時刻ＦＩＦＯバッファとしては、オブジェクト構築時に、十分なサイズ（読み出し位置が書き込み位置を追い越さない程度）の配列を確保するものとする。また、ＦＩＦＯバッファの読み出しと書き込みは、ノートオン入力がある度に書き込みポインタをインクリメントし、ＧｅｔＮｏｔｅ（）関数が呼び出される度に読み出しポインタをインクリメントするようにしている。書き込みポインタや読み出しポインタがバッファの最後に到達したら先頭に戻り、これによりバッファをサイクリックに使用する。
【００１９】
次に、シーケンサオブジェクトについて説明する。図４（ａ）は、シーケンサオブジェクトの構築時の処理（ＣＯＮＳＴＲＵＣＴ）４０１を示す。ここではステップ４０２で読み出しポインタをセットするだけである。この読み出しポインタのセットは、自動演奏を行うためのシーケンスデータの先頭に読み出しポインタをセットし再生の開始が指示されたときの準備をしておくものである。この後、再生開始タイミングで下記のＩｎｉｔｉａｌｉｚｅ（）関数が起動されると、データの終端に到達するまでシーケンスデータの再生が行われる。
【００２０】
図４（ｂ）は、シーケンサオブジェクトのＩｎｉｔｉａｌｉｚｅ（）関数４１１の処理を示す。ステップ４１２で、テンポトレースオブジェクト２１３から基準テンポ（演奏者による演奏入力から算出したテンポ）を取得する。ステップ４１３では、基準テンポに基づくテンポで、シーケンスデータに基づく自動演奏の再生を順次行う。次にステップ４１４で、現時刻が２拍目かまたは４拍目か（詳しくはこれらの拍の先頭タイミング）を判定する。どちらでもないときはステップ４１３に戻る。２拍目または４拍目であるときは、ステップ４１５でテンポトレースオブジェクト２１３から最新の基準テンポを取得し、ステップ４１３に戻って自動演奏の再生を続ける。なお、ステップ４１３の再生処理では、２拍目または４拍目のタイミングで基準テンポが更新されたときすぐにその更新された基準テンポで再生するのでなく、更新前の基準テンポで再生を継続するものとし、次の拍タイミング（１拍目と３拍目の先頭タイミング）から更新後の基準テンポを適用して再生するものとする。なお、ステップ４１３の再生処理において、シーケンスデータの再生位置は、基準テンポ情報とタイマがカウントする時刻情報に基づいて制御する。
【００２１】
次に、テンポトレースオブジェクトについて説明する。テンポトレースオブジェクトは、演奏者により入力されたノートの時間間隔を常時監視し、４ノート入力毎に基準テンポの更新を行うものである。
【００２２】
図５（ａ）は、テンポトレースオブジェクトの構築時の処理（ＣＯＮＳＴＲＵＣＴ）５０１を示す。ステップ５０２で、ノートイベントハンドラ２１２のＧｅｔＮｏｔｅ（）関数３１１を用いてノート時刻を８回取得する。ステップ５０３で、最後の時間間隔（７回目入力から８回目入力までの時間）を基準テンポとして設定する。ステップ５０４で、シーケンサオブジェクト２１４を初期化し、音価テーブルを初期化する。ステップ５０２と５０３は、初期テンポの確定のために、最初の８個のノート入力（四分音符と見なす）をプリカウントと見なし、最後の（７個目と８個目との）時間間隔を初期基準テンポとして設定する処理である。ステップ５０４は、８個目のノート入力から基準テンポ（四分音符１拍分）だけ経過したタイミングが演奏開始タイミングとなるようにシーケンサオブジェクトを初期化して（すなわちシーケンサオブジェクトのＩｎｉｔｉａｌｉｚｅ（）関数４１１を起動して）再生を開始する処理である。
【００２３】
図６（ａ）を参照して、ステップ５０４の音価テーブルの初期化処理６０１について説明する。ステップ６０２で音価の有効範囲を計算し、ステップ６０３で計算結果に基づいて音価テーブルを更新する。
【００２４】
音価テーブルは、ユーザからの演奏入力間隔に基づいて、演奏された音価を推定するのに用いるテーブルである。ここでは、音価は、全音符（４拍）、付点二分音符（３拍）、二分音符（２拍）、付点四分音符（１．５拍）、四分音符（１拍）、八分音符（０．５拍）、および一六分音符（０．２５拍）の７種類とする。図６（ａ）中の「テンポ」とは基準テンポのことである。基準テンポは、演奏入力から決定される四分音符、すなわち１拍あたりの絶対時間である。この基準テンポを基に、上記７種類の音価の正確な時間（ジャストタイミング）が決定され、各音価のジャストタイミングから±１２．５％を有効範囲として設定する。例えば、全音符であれば、ジャストタイミングが「基準テンポ×４」であるので、これを−１２．５％した値「基準テンポ×４×０．８７５」を全音符の最小値（ｍｉｎ）とし、これを＋１２．５％した値「基準テンポ×４×１，１２５」を全音符の最大値（ｍａｘ）とする。他の音価についても同様である。
【００２５】
図５に戻って、ステップ５０４の後、ステップ５０５でワークレジスタｉを０に初期化する。ステップ５０６で、基準時刻（ワークレジスタ）に最後に取得したノート時刻を設定する。ステップ５０７では、ノートイベントハンドラ２１２のＧｅｔＮｏｔｅ（）関数３１１を用いてノート時刻の取得を行い、該取得が成功したか否か判定する。ノート時刻を取得できないということは、ノートイベントハンドラがヌル（ＮＵＬＬ）を返した場合であり、このときは再度ステップ５０７を繰り返す。ノート時刻の取得に成功したら、ステップ５０８で、レジスタΔｔにノート時刻−基準時刻（すなわち今回取得した演奏入力のノート時刻と直前の演奏入力のノート時刻との差）をセットする。次にステップ５０９で、Δｔが音価テーブルに定義された何れかの範囲に含まれているか否か判定する。Δｔが何れの音価にも当てはまらない場合は、演奏入力ミス、チャタリング、または和音構成音と見なし（すなわち、テンポ追従目的としては無効なノートと見なす）、ステップ５０７に戻る。Δｔが何れかの音価に当てはまるときは、今回の演奏入力をテンポ追従有効入力と見なし、ステップ５１０で、暫定テンポ（ワークレジスタ）にＡｖｅｒａｇｅ４（ｉ，Δｔ，音価種類）をセットする。この引数のうち「音価種類」は、ステップ５０９で音価テーブルを参照して判定した全音符、付点二分音符、…の種類である。
【００２６】
図６（ｂ）を参照して、Ａｖｅｒａｇｅ４関数６１１について説明する。Ａｖｅｒａｇｅ４関数は、ｉとΔｔと音価種類を引数とし、Δｔを四分音符に換算したした場合の平均値（すなわち四分音符の時間長＝テンポ値）を出力するものである。この実施の形態では、有効なノート入力４回毎の平均値を出力している。まず、ステップ６１２で引数ｉが０か否か判定する。０であるときはステップ６１３でレジスタａｖを０に初期化し、ステップ６１４に進む。ｉが０でないときはそのままステップ６１４に進む。ステップ６１４では、レジスタｄｔに、音価種類に応じてΔｔを四分音符に換算した時間をセットする。例えば、全音符ならΔｔを１／４倍し、付点二分音符なら１／３倍するということである。ステップ６１５で、ａｖ＝ａｖ＋ｄｔ／４を求める。ステップ６１６でａｖの値をリターンする。これにより、ｉ＝０から開始して４回Ａｖｅｒａｇｅ４関数を呼ぶことにより、その４回分の有効演奏入力を四分音符に換算した時間の平均値が出力される。
【００２７】
図５（ａ）に戻って、ステップ５１０の後、ステップ５１１ではレジスタｉが３か否か判定する。３でないときはｉをインクリメントし、ステップ５０６に戻る。ｉが３であるときは、ステップ５１２で暫定テンポの値を基準テンポにセットし、ステップ５１３で音価テーブルを初期化して（すなわち図６（ａ）の呼び出し）、ステップ５０５に戻る。以上により、有効なノートが４回検出される度に、基準テンポを暫定テンポで更新し、音価テーブルを新たな基準テンポに基づいて再初期化する。
【００２８】
図５（ｂ）は、ＧｅｔＴｅｍｐｏ（）関数５２１の処理を示す。これは他ルーチンから呼び出されたとき、最新の基準テンポを返す関数である。ステップ５２２で、基準テンポをリターンする。
【００２９】
図７（ａ）は、本実施形態における基準テンポの更新の具体例を示す。７１１は演奏者により演奏入力された音符を示す。これらの音符にはｎ０１からの通し記号を付してある。ｎの添字は幾つめの入力であるかを示す。７１２は各演奏入力間の時間間隔（ｍｓｅｃ）を示す。まず、図７（１）の１拍目と３拍目で再生テンポを切り替える例を説明する。再生小節位置の１−１，１−２，…，２−１，２−２，…は、それぞれ、１小節目の１拍目、１小節目の２拍目、…、２小節目の１拍目、２小節目の２拍目、…を示す。再生テンポは、自動演奏でシーケンスデータが実際に再生されるテンポを示す。
【００３０】
ノートｎ０１〜ｎ０８はプリカウントのための演奏入力である。最後の時間間隔（ｎ０７からｎ０８までの５００ｍｓｅｃ）を基準テンポとして設定するので、ｎ０８のタイミングから５００ｍｓｅｃ経過した矢印７０１のタイミングからシーケンスデータに基づく自動演奏が再生開始する。このときの基準テンポは５００ｍｓｅｃであり、自動演奏の再生テンポも５００ｍｓｅｃである。作成される音価テーブルは、この基準テンポの値を基に計算されるので、図７（ｂ）のようになる。なお、図７（ｂ）および（ｃ）では、各音価の有効範囲の最小値（ｍｉｎ）からジャストタイミングの時間値を挟んで最大値（ｍａｘ）までの範囲を示した。
【００３１】
ノートｎ０８からノートｎ０９までの時間間隔は５５０ｍｓｅｃであり、図７（ｂ）の音価テーブルから四分音符の音価有効範囲に収まる。ノートｎ０９からノートｎ１０までは５６０ｍｓｅｃであり、四分音符の音価有効範囲に収まる。ノートｎ１０からノートｎ１１までは２７０ｍｓｅｃであり、八分音符の音価有効範囲に収まる。ノートｎ１１からノートｎ１２までは２７５ｍｓｅｃであり、八分音符の音価有効範囲に収まる。ノートｎ１２が有効と判定された時点で、有効ノート入力が４回となったので、基準テンポの更新を行う（矢印７０２）。新しい基準テンポは、（５５０＋５６０＋２７０×２＋２７５×２）／４＝５５０ｍｓｅｃとなる。この新しい基準テンポに基づき、音価テーブルの更新を行う。図７（ｃ）が更新後の音価テーブルである。矢印７０２の時点では、第１小節の３拍目の途中の演奏データを再生中であるので、再生テンポは以前の５００ｍｓｅｃが維持されている。また、矢印７０２のタイミングでの基準テンポの更新はテンポトレースオブジェクト内での更新（ステップ５１２）であり、その時点では当該更新後の基準テンポは未だシーケンサオブジェクトには伝えられていない。第１小節の４拍目（の先頭）に至ったとき、シーケンサオブジェクト内の基準テンポが上記新しい基準テンポ５５０ｍｓｅｃに更新される（ステップ４１５）。さらに、図４（ｂ）で説明したように、再生処理では各小節の１，３拍目のタイミングで新たな基準テンポが適用されるから、第２小節の１拍目（の先頭）から実際の再生テンポが５５０ｍｓｅｃとなる。
【００３２】
引き続き、ノートｎ１２からノートｎ１３までは２８０ｍｓｅｃであり、図７（ｃ）の音価テーブルから八分音符の音価有効範囲に収まる。ノートｎ１３からノートｎ１４までは７０ｍｓｅｃであり、何れの音価有効範囲にも収まらないので無効と見なす。ノートｎ１３からノートｎ１５までは７０＋２１０＝２８０ｍｓｅｃであり、八分音符の音価有効範囲に収まる。ノートｎ１５からノートｎ１６までは６２０ｍｓｅｃであり、何れの音価有効範囲にも収まらないので無効と見なす。ノートｎ１５からノートｎ１７までは６２０＋３００＝９２０ｍｓｅｃであり、付点四分音符の音価有効範囲に収まる。ノートｎ１７からノートｎ１８までは１５４ｍｓｅｃであり、一六分音符の音価有効範囲に収まる。ノートｎ１８が有効と判定された時点で、有効ノート入力が４回となったので、基準テンポの更新を行う（矢印７０３）。新しい基準テンポは、（２８０×２＋（７０＋２１０）×２＋（６２０＋３００）×２＋１５４×４）／４＝５８７ｍｓｅｃとなる。この新しい基準テンポに基づき、音価テーブルの更新を行う。矢印７０３の時点では、第２小節の２拍目の途中の演奏データを再生中であるので、再生テンポは以前の５５０ｍｓｅｃが維持されている。第２小節の４拍目（の先頭）に至ったとき、シーケンサオブジェクト内の基準テンポが新しい基準テンポ５８７ｍｓｅｃに更新され、さらに第３小節の１拍目（の先頭）から実際の再生テンポが５８７ｍｓｅｃとなる。
【００３３】
上述の図７（１）では１拍目と３拍目で再生テンポを切り替えたが、図７（２）のように基準テンポを更新した後の次拍タイミングで切り替えてもよい。図７（２）では、基準テンポを更新した矢印７０２や７０３の次の拍タイミングで再生テンポを切り替えている。さらに図７（３）のように基準テンポを更新したとき直ちに再生テンポを切り替えるようにしてもよい。図７（３）では、基準テンポを更新した矢印７０２や７０３のタイミングですぐに再生テンポを切り替えている。また、さらに別のタイミングで切り替えるようにしてもよい。
【００３４】
次に、上記実施の形態の第１の変形例を説明する。この変形例は、上記実施の形態における図５（ａ）のテンポトレースオブジェクトでの処理を一部変形したものである。
【００３５】
テンポトレースオブジェクトでの処理ではΔｔが音価テーブルで定義された音価の有効範囲に入るか否か判定している。音価の有効範囲に入らないノートは、チャタリングあるいは和音構成音等のほぼ同時に演奏入力されるノート、または演奏技能・音楽能力が未熟なことに起因する演奏タイミングのずれたノート、の２種類に大別される。前者は先着のノートのみを有効とし、上記実施の形態と同様に後着のノートは無視すべきである。後者の場合、必ずしも無視してよいとは限らない場合がある。例えば、入力タイミングがずれたものと、有効範囲に収まったものが連続する等の場合、本来有効範囲に収まっていたノートまでもが無効として判定される可能性がある。例えば、上記実施形態の図７（ａ）の具体例では、ノートｎ１６が無効になるので、次にノートｎ１５〜ノートｎ１７の区間を６２０＋３００＝９２０ｍｓｅｃと求め、これが音価有効範囲に収まるのでノートｎ１７を有効な入力と判定した。ここで、もしノートｎ１６〜ノートｎ１７までの時間間隔が３０９ｍｓｅｃであった場合、この間隔自体は本来八分音符の有効範囲（図７（ｃ））に入るが、ノートｎ１６が無効ノートであるので、ノートｎ１５〜ノートｎ１７の区間全体の時間間隔６２０＋３０９＝９２９ｍｓｅｃを音価テーブルから探すことになり、これはどの音価有効範囲にも入らないので無効と判定されてしまう。
【００３６】
そこで、本変形例では、上記２種類の「有効範囲に入らないノート」を区別して扱うようにした。図８は、テンポトレース処理の変形例の手順を示す。図５のステップ５０６〜５０９を、ステップ８０１〜８０５に置き換えるものとする。ステップ８０１，８０２，８０３，８０５は、ステップ５０６，５０７，５０８，５０９と同じ処理である。ステップ８０４では、Δｔが所定の閾値以上か判定する。閾値以上でないときは、チャタリングあるいは和音構成音等のほぼ同時に演奏入力されるノートと見なし、先着のノートのみを有効とし今回のノートは無効とするため、ステップ８０２に戻る。ステップ８０５でΔｔが音価有効範囲に入らなかったときは、演奏技能・音楽能力が未熟なことに起因する演奏タイミングのずれたノートと見なし、先着のノートを無効とし今回のノートから次のノートまでの時間を求めるため、ステップ８０１に戻る。
【００３７】
図７（ａ）の具体例の場合、ノートｎ１４はチャタリングとして無視され、ノートｎ１３〜ノートｎ１５までの時間間隔と音価の有効範囲とが対比される。一方、ノートｎ１６はミスノートとして扱われ、ノートｎ１５〜ノートｎ１７までの時間間隔ではなく、ノートｎ１６〜ノートｎ１７までの時間間隔と音価の有効範囲とが対比される。この場合、２度目のテンポ更新によるテンポ値は５８７ｍｓｅｃではなく、５４９ｍｓｅｃとなる。
【００３８】
次に、第２の変形例について説明する。ミスノートが連続するなどした場合、長期間にわたりテンポの検出が行われないことがある。上記実施形態の方式では、全音符に相当する時間を超えて有効なノートが検出されなかった場合、有効な音価として全音符以上の長さを音価テーブルに定義していないためそれ以降のテンポ検出が不可能である。その対応として、本変形例では、全音符に相当する時間有効なノートが検出されなかった場合は、例えば「テンポ追従のループ処理（５０５〜５１４）においてｉ＝−１にセットし、次の有効ノートからテンポトレースを仕切り直す。」等の例外処理を行う。あるいは、テンポ追従が不可能になった時点で演奏をストップするようにしてもよい。
【００３９】
なお、上記実施形態では、有効とする音価を７種類としたが、これ以外の音価（例えば三連符（１／３拍）等）を含めてもよい。この場合、隣接する音価との区別が困難な場合（三連符と十六分音符は時間間隔が近いため、有効範囲を±１２．５％で定義すると有効範囲が重複する）は、何れの音価の有効範囲を適用するか選択できるようにするとよい。
【００４０】
各音価の有効時間範囲は、各音価のジャストタイム±１２．５％としたが、例えば各音価共通の有効範囲（１００ｍｓｅｃで固定したり、基準テンポ四分音符の１２．５％等）としてもよい。また、ジャストタイムを中心とした正方向の有効範囲と負方向の有効範囲を非対称としてもよい。また、音価に応じて有効時間範囲幅を変更してもよい（例えば、四分音符は±５％だが、全音符は±１２．５％とする等、演奏誤差の発生しやすさに応じて有効幅を設定してもよい）。
【００４１】
初期基準テンポの特定については、例えば以下のような変形例がありうる。第１に、プリカウント中の特定区間の時間間隔を初期基準テンポに採用する（上記実施形態含む）。第２に、プリカウント（８個の演奏入力）間の時間間隔の平均を初期基準テンポに採用する。第３に、別途、設定パネル等において固定的に設定しておく。また、上記実施形態ではプリカウントを四分音符８個分の演奏入力としたが、プリカウントのリズムあるいはプリカウントの個数は他の数であってかまわない。基準テンポの更新は、有効入力４回毎としたが他の数（２，３，５等）でもよい。
【００４２】
再生シーケンス処理において、基準テンポを不連続に切り替えているが、所定の期間（例えば０．３拍）で徐々に変化するよう処理してもよい。あるいは所定の変化量（テンポ変化の傾き）でテンポを徐々に変更するよう処理してもよい。さらに、現在の基準テンポを報知する手段（演奏テンポの数値表示・ＬＥＤやインジケータの明滅・メトロノーム音の発生等）を備えてもよい。
【００４３】
上記実施形態では、演奏データシーケンスの再生を行うもので説明をしたが、他のシーケンスデータ（伴奏コードを指定するコードシーケンス、電子楽器の種々の設定状態を保持するレジストレーションデータを時間的に並べたレジストシーケンス、伴奏（演奏）パターンの再生順序を定めたパターンシーケンス、映像効果の制御データ等の順序を定めた映像シーケンス等）であってもよい。こういったシーケンスを再生する場合、次の拍タイミングに到達する前に（例えば次の拍タイミングの０．３拍前に）シーケンスの進行を行うように処理することが演奏上望ましい（ジャストタイミングで進行すると、演奏者はシーケンス進行に追従できない）。
【００４４】
上記例示する他のシーケンスデータの場合、さらに、特定のタイミング（例えば基準テンポに基づいて推定される２拍目や４拍目等）に演奏入力があったことを検知した場合にのみ、シーケンスを進行させるようにしてもよい。音楽ジャンルによっては演奏入力の確率の高い特定のタイミングがあり（例えば所謂ポップスジャンルにおいては２拍目、４拍目といったアフタービート）、このような変形例は演奏指導等の教育的利用に効果的である。
【００４５】
本発明は、いわゆる電子楽器のほか、ＰＣ、ゲーム機、ＳＴＢ（Ｓｅｔ−Ｔｏｐ  Ｂｏｘ）、あるいはＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）などのコンピュータ機器のソフトウェアに適用することも可能である。
【００４６】
【発明の効果】
以上説明したように、この発明によれば、演奏者が再生テンポに追従するのではなく、演奏者のペースに再生テンポが追従する演奏システムを提供することができる。また、基準テンポの算出は拍毎あるいは小節毎ではなく、入力されたノート一定数分毎（例えば４音毎）に行うことにより、拍毎や小節毎に算出するのに比べてより細やかなテンポ追随が可能となる。
【図面の簡単な説明】
【図１】実施の形態の自動演奏装置の概略構成図
【図２】本装置のメインルーチンの処理手順を示す図
【図３】ノートイベントハンドラの処理手順を示す図
【図４】シーケンサオブジェクトの処理手順を示す図
【図５】テンポトレースオブジェクトの処理手順を示す図
【図６】音価テーブルの初期化処理とＡｖｅｒａｇｅ４関数の処理手順を示す図
【図７】基準テンポの更新の具体例を示す図
【図８】テンポトレース処理の変形例を示す図
【符号の説明】
１０１…中央処理装置（ＣＰＵ）、１０２…記憶手段、１０３…入力手段、１０４…出力手段、１０５…通信手段、１１０…バスライン。
【図１】
2004287308.tif 000003
【図２】
2004287308.tif 000004
【図３】
2004287308.tif 000005
【図４】
2004287308.tif 000006
【図５】
2004287308.tif 000007
【図６】
2004287308.tif 000008
【図７】
2004287308.tif 000009
【図８】
2004287308.tif 000010