(57)【特許請求の範囲】
【請求項１】
第１クロックを循環的に第１のカウント値までカウントする第１のカウント処理と、前記第１のカウント処理によるカウントが前記第１のカウント値に達する毎に音響効果が付加された音響信号を出力する音響信号出力処理と、を実行する第１の処理部と、
第２クロックを循環的に第２のカウント値までカウントする第２のカウント処理と、前記第２のカウント処理によるカウントが前記第２のカウント値に達する毎に自動演奏を進行させる自動演奏制御処理と、前記第２のカウント処理によるカウントが前記第２のカウント値に達したタイミングと前記第１のカウント処理によるカウントが前記第１のカウント値に達したタイミングとの差分時間を循環的に検出する検出処理と、前記検出処理により検出される差分時間を小さくするように前記第２のカウント値を変更する補正処理と、を実行する第２の処理部と、
を備えた音響処理装置。
【請求項２】
前記音響処理装置さらに、前記自動演奏のテンポを指定するテンポ指定部を有し、
前記第１のカウント値及び前記第２のカウント値は、前記指定されたテンポに対応して決定される、請求項１に記載の音響処理装置。
【請求項３】
前記音響処理装置はさらに、複数種の自動演奏のテンポ夫々に対応して前記第１及び第２のカウント値を記憶するテーブルを有し、
前記第２の処理部はさらに、指定された自動演奏のテンポに対応する前記第１及び第２のカウント値を前記テーブルから読み出すとともに、前記第１のカウント値を前記第１の処理部に設定するカウント値設定処理を実行する、請求項１または２に記載の音響処理装置。
【請求項４】
前記第１の処理部は、前記第１のカウント処理によりカウントされたカウント値が前記第１のカウント値に達するまでの時間の自然数倍及び所定自然数分の１倍のいずれか一方の関係の時間に同期したタイミングで、供給される音響信号に対して音響効果を付加する処理を実行し、前記音響信号出力処理は、前記タイミングで前記音響効果が付加された音響信号を出力する、請求項１乃至３のいずれかに記載の音響処理装置。
【請求項５】
前記第１の処理部は、供給される音響信号に対してエコー効果を付加するディレイ処理を実行し、前記音響信号出力処理は、前記エコー効果が付加された音響信号を出力する、請求項１乃至４のいずれかに記載の音響処理装置。
【請求項６】
前記第１の処理部は、供給される音響信号に対してビブラート効果及びトレモロ効果の少なくとも一方を付加するためのＬＦＯを生成する処理を実行し、前記音響信号出力処理は、前記ビブラート効果及びトレモロ効果の少なくとも一方が付加された音響信号を出力する、請求項１乃至５いずれかに記載の音響処理装置。
【請求項７】
第１の処理部及び第２の処理部を有する音響処理装置に用いられる音響処理方法であって、
前記第１の処理部に、
第１クロックを循環的に第１のカウント値までカウントする第１のカウント処理と、
前記第１のカウント処理によるカウントが前記第１のカウント値に達する毎に音響効果が付加された音響信号を出力する音響信号出力処理と、
を実行させ、
前記第２の処理部に、
第２クロックを循環的に第２のカウント値までカウントする第２のカウント処理と、
前記第２のカウント処理によるカウントが前記第２のカウント値に達する毎に自動演奏を進行させる自動演奏制御処理と、
前記第２のカウント処理によるカウントが前記第２のカウント値に達したタイミングと前記第１のカウント処理によるカウントが前記第１のカウント値に達したタイミングとの差分時間を循環的に検出する検出処理と、
前記検出処理により検出される差分時間を小さくするように前記第２のカウント値を変更する補正処理と、
を実行させる音響処理方法。
【請求項８】
音響処理装置として用いられるコンピュータに、
第１クロックを循環的に第１のカウント値までカウントする第１のカウント処理と、
前記第１のカウント処理によるカウントが前記第１のカウント値に達する毎に音響効果が付加された音響信号を出力する音響信号出力処理と、
第２クロックを循環的に第２のカウント値までカウントする第２のカウント処理と、
前記第２のカウント処理によるカウントが前記第２のカウント値に達する毎に自動演奏を進行させる自動演奏制御処理と、
前記第２のカウント処理によるカウントが前記第２のカウント値に達したタイミングと前記第１のカウント処理によるカウントが前記第１のカウント値に達したタイミングとの差分時間を循環的に検出する検出処理と、
前記検出処理により検出される差分時間を小さくするように前記第２のカウント値を変更する補正処理と、
を実行させるプログラム。
【請求項９】
請求項１乃至６のいずれかに記載の音響処理装置と、
発生すべき楽音の音高を指定する演奏操作子と、
前記演奏操作子で指定された音高の楽音波形を音響波形信号として生成して、前記第１の処理部に供給する波形発生器と、
を備えた電子楽器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、２つの音響処理プロセッサ間の処理を同期させるための音響処理装置、音響処理方法、プログラム、並びに当該音響処理装置を用いた電子楽器に関する。
【背景技術】
【０００２】
電子楽器に内蔵され入力信号に対してエコー効果を与えるディレイ機能を搭載した音響効果装置において、従来、電子楽器の自動演奏（伴奏、シーケンサ、アルペジオ等）のテンポの設定に応じて、遅延信号が音楽のリズムと同期するようにディレイタイムを自動的に設定するテンポ同期ディレイという技術が知られている（例えば特許文献１に記載の技術）。更に、楽曲の演奏中であっても、演奏のテンポを変更させるための操作をするとエフェクト処理の内容を変更させるようにした従来技術も知られている（例えば特許文献２に記載の技術）。
【０００３】
テンポ同期型ディレイ機能において、ディレイタイムを１拍の時間の倍数、例えば１／４拍、１／３拍、１／２拍、２／３拍、１拍、３／２拍、２拍、３拍などに設定することで、より音楽的に合致したエコー効果を得ることができる。更に、このディレイ機能を利用して、同じ演奏を何度も繰り返して演奏するサンプルルーパーという機能も一般的に知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−９４１８０号公報
【特許文献２】特開２０１１−２１５３６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のテンポ同期型ディレイ機能におけるディレイタイムは、完全に自動演奏のテンポと同期しているわけではなく、可能な範囲でテンポに同期するための近似値に設定されているだけであり、厳密には少しずれているのが実情である。ディレイのフィードバック量が少なくリピート回数が比較的少ないときにはこのずれ量は気にならない。しかし、ディレイのフィードバック量を多くしてリピート回数を多くしたり、更にはフィードバック量を１００%にしてサンプルルーパーとして何度も同じ演奏を繰り返し再生する場合、繰返し回数分のずれ量が蓄積してしまい、人間の耳でも聞き取れるまで誤差が拡大することが起こりうるという問題点があった。
そこで、本発明は、自動演奏処理と音響効果処理の処理タイミングのずれを補正可能とすることを目的とする。
【課題を解決するための手段】
【０００６】
態様の一例の音響処理装置は、
第１クロックを循環的に第１のカウント値までカウントする第１のカウント処理と、前記第１のカウント処理によるカウントが前記第１のカウント値に達する毎に音響効果が付加された音響信号を出力する音響信号出力処理と、を実行する第１の処理部と、
第２クロックを循環的に第２のカウント値までカウントする第２のカウント処理と、前記第２のカウント処理によるカウントが前記第２のカウント値に達する毎に自動演奏を進行させる自動演奏制御処理と、前記第２のカウント処理によるカウントが前記第２のカウント値に達したタイミングと前記第１のカウント処理によるカウントが前記第１のカウント値に達したタイミングとの差分時間を循環的に検出する検出処理と、前記検出処理により検出される差分時間を小さくするように前記第２のカウント値を変更する補正処理と、を実行する第２の処理部と、
を備える。
【発明の効果】
【０００７】
本発明によれば、自動演奏処理と音響効果処理の処理タイミングのずれを補正することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】本発明による電子鍵盤楽器１００の実施形態の外観図である。
【図２】電子鍵盤楽器１００の実施形態のハードウェア構成例を示す図である。
【図３】ＣＰＵ２０１が内蔵するカウンタ回路の構成例を示す図である。
【図４】ＤＳＰ２０６が実行するディレイ処理の説明図である。
【図５】テンポ−カウントテーブル（ＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬ）と補助情報テーブルのデータ構成例を示す図である。
【図６】ＤＳＰ２０６が備えるディレイタイム割込み発生処理を実行する機構及びアドレスポインタを生成する機構の例を示すブロック図である。
【図７】同期拍数テーブル（ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ）と補助情報テーブルのデータ構成例を示す図である。
【図８】本実施形態の動作説明図である。
【図９】ＣＰＵ  ＲＯＭ２０２又はＣＰＵ  ＲＡＭ２０３が記憶する各種データのデータ構成例を示す図である。
【図１０】ＣＰＵ２０１及びＤＳＰ２０６のレジスタのデータ構成例を示す図である。
【図１１】ＣＰＵ２０１が実行する電子楽器制御処理の全体処理例を示すフローチャートである。
【図１２】初期化処理の詳細例を示すフローチャートである。
【図１３】テンポ設定処理の詳細例を示すフローチャートである。
【図１４】ディレイ設定処理の詳細例を示すフローチャートである。
【図１５】ディレイホールドモード設定処理（ＨＯＬＤ処理）、ディレイタイム背亭処理（ＴＩＭＥ処理）、ディレイフィードバック設定処理（ＦＥＥＤＢＡＣＫ処理）、及びディレイレベル設定処理（ＬＥＶＥＬ処理）の詳細例を示すフローチャートである。
【図１６】ディレイテンポシンクロナイズドモード設定処理（ＳＹＮＣ処理）及びディレイ同期拍モードｒ（ＢＥＡＴ処理）の詳細例を示すフローチャートである。
【図１７】自動演奏定常処理の詳細例を示すフローチャートである。
【図１８】シーケンスクロック割込み処理の例を示すフローチャートである。
【図１９】ディレイタイム割込み処理の例を示すフローチャートである。
【図２０】シーケンスクロック補正処理の詳細例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
従来、ディレイ処理のディレイタイムを自動演奏のテンポに完全に同期させることができなかったのは、以下の理由による。まず、自動演奏を進行させる自動演奏制御処理は、一般的に、ＣＰＵ（中央演算処理装置）により実行される。ＣＰＵは、ハードウェアタイマすなわちシステムクロックを、ゼロから、指定されたテンポの１拍を所定数分割、例えば４８０分割した時間に対応するシーケンスクロックカウント上限値まで、循環的にカウントするシーケンスクロックカウンタを実装する。このシーケンスクロックカウンタは、システムクロックのカウント値が、シーケンスクロックカウント上限値に達する毎に、シーケンスクロック割込みを発生する。ＣＰＵは、このシーケンスクロック割込みに同期して自動演奏を進行させる自動演奏制御処理を実行する。これに対して、ディレイ処理は、一般的に、デジタル音声処理を専用のハードウェアと専用のソフトウェアにより実行するＤＳＰ（デジタルシグナルプロセッサ）を用いて実現される。このディレイ処理におけるディレイタイムは、ＤＳＰにおいて、指定されたテンポの１拍に対して所定自然数倍又は所定自然数分の１倍の関係を有するように、例えば１／４拍、１／３拍、１／２拍、２／３拍、１拍、３／２拍、２拍、３拍などの値に設定される。このとき、ディレイタイムは、サンプリングクロックの何クロック分にあたるかというサンプル数で与えられる。ＤＳＰは、音響信号を１サンプルずつ記憶するディレイ用リングバッファメモリの書込みアドレスと読出しアドレスの差を、上記ディレイタイムのサンプル数に設定する。そして、ＤＳＰは、ディレイ用リングバッファメモリに書き込んだ音響信号を、上記ディレイタイムに対応するサンプル数分だけ遅延させて読み出すことによって、テンポの拍に同期したディレイ効果を実現する。ここで、ＤＳＰにおけるサンプリングクロックと、ＣＰＵにおけるシステムクロックは、それぞれ異なる発振子から生成されているため、従来は、ディレイ処理のディレイタイムを自動演奏のテンポに完全に同期させることができなかった。この結果、従来例えば、ディレイ処理で出力される音響信号を入力側にフィードバックして音響信号の書込みと遅延読出しを繰り返す、いわゆるサンプルルーパー等の処理を実行したような場合に、自動演奏のテンポがディレイ処理後の音響信号のテンポからずれていってしまい、聴感上違和感を生じてしまっていた。
【００１０】
本実施形態は、以下に説明する動作を実行するディレイタイム割込み発生処理と、シーケンスクロック補正処理の機能を備える処理同期部を、例えば第１又は第２の音響処理プロセッサ内に実装することにより、ＣＰＵにおける自動演奏制御処理をＤＳＰにおけるディレイ処理に同期させることを可能とするものである。
【００１１】
ディレイタイム割込み発生処理は、例えばＤＳＰにより実行される。まず、ＤＳＰ内に、サンプリングクロックをゼロからディレイタイムサンプリング数まで循環的にカウントするディレイタイムカウンタが実装される。このディレイタイムカウンタは、サンプリングクロックのカウント値がカウント上限値であるディレイタイムサンプリング数に達する毎に、ＣＰＵに対してディレイタイム割込みを発生させる。
【００１２】
一方、シーケンスクロック補正処理は、例えばＣＰＵにより実行される。この処理において、ＣＰＵは、前述のシーケンスクロック割込みがディレイタイムに対応する回数だけ発生する毎の時刻と、ＤＳＰからディレイタイム割込みが発生する毎の時刻との時間差を計測する。そして、ＣＰＵは、その時間差が小さくなるように前述のシーケンスクロックカウンタにセットするシーケンスクロックカウント上限値を増加又は減少させる。この結果、次回のディレイ処理においては、ＣＰＵにおいてディレイタイム分だけ進行する自動演奏の時間と、ＤＳＰにおけるディレイタイム分のディレイ処理の時間とのずれが無くなることが期待される。
【００１３】
上述の機能を実現する本発明を実施するための形態について、図面を参照しながら以下に詳細に説明する。図１は、本発明による電子鍵盤楽器の実施形態の外観図である。本実施形態は、音響処理プロセッサ（ＣＰＵとＤＳＰ）間の処理同期装置を備えた電子楽器である電子鍵盤楽器１００として実施される。電子鍵盤楽器１００は、発生すべき楽音の音高を指定する演奏操作子としての複数の鍵からなる鍵盤１０１と、楽音にディレイ効果を与えるエフェクト機能を指定するための機能選択操作子１０２と、伴奏やシーケンサ、オートアルペジオなどの自動演奏機能や音色選択操作子としての音色選択を行うための音色選択ボタン１０３からなるスイッチ・パネルと、ピッチベンドやトレモロ、ビブラート等の各種モジュレーション（演奏効果）を付加するベンダ／モジュレーション・ホイール１０４、及び音色や音色以外の各種設定情報を表示するＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶ディスプレイ）１０５等を備える。また、電子鍵盤楽器１００は、特には図示しないが、演奏により生成された楽音を放音するスピーカを裏面部、側面部、又は背面部等に備える。
【００１４】
機能選択操作子１０２は、図１に示されるように、テンポ（ＴＥＭＰＯ）を指定するためのＤＯＷＮボタン、ＵＰボタン、ディレイ効果を与えるエフェクト機能（ＤＥＬＡＹ）を指定するためのＨＯＬＤボタン、ＴＩＭＥノブ、ＲＥＰＥＡＴノブ、ＬＥＶＥＬノブ、ＳＹＮＣボタン、及びＢＥＡＴノブを備える。これらの詳細については後述する。
【００１５】
図２は、図１の電子鍵盤楽器１００の実施形態のハードウェア構成例を示す図である。図２において、電子鍵盤楽器１００は、ＣＰＵ（中央演算処理装置）２０１、ＣＰＵ  ＲＯＭ（リードオンリーメモリ）２０２、ＣＰＵ  ＲＡＭ（ランダムアクセスメモリ）２０３、音源ＬＳＩ（大規模集積回路）２０４、キー・スキャナ２１１、Ａ／Ｄコンバータ２１２、及びＭＩＤＩ  Ｉ／Ｆ（（Ｍｕｓｉｃａｌ  Ｉｎｓｔｒｕｍｅｎｔ  Ｄｉｇｉｔａｌ  Ｉｎｔｅｒｆａｃｅ  Ｉｎｔｅｒｆａｃｅ）２１４が、それぞれシステムバス２１６に接続される構成を備える。ＣＰＵ２０１にはシステムクロックを供給する発振子２０９が接続され、音源ＬＳＩ２０４にはサンプリングクロックを供給する発振子２１０が接続される。音源ＬＳＩ２０４は、波形発生器２０５とＤＳＰ２０６とＣＰＵ  Ｉ／Ｆ２１５を内蔵する。波形発生器２０５には、波形メモリである音源ＲＯＭ２０７が接続される。ＤＳＰ２０６には、遅延メモリであるＤＳＰ  ＲＡＭ２０８が接続される。本実施形態においては、このＤＳＰ２０６及びＤＳＰ  ＲＡＭ２０８により、第１の処理部２０６ａを構成する。キー・スキャナ２１１には、図１の鍵盤１０５と図１の機能選択操作子１０２及び音色選択ボタン１０３からなるスイッチ・パネルとが接続される。Ａ／Ｄコンバータ２１２には、図１のベンダ／モジュレーション・ホイール１０４が接続される。ＬＣＤコントローラ２１３には、図１のＬＣＤ１０５が接続される。ＬＣＤコントローラ２１３、ＭＩＤＩ  Ｉ／Ｆ２１４は、ＭＩＤＩ入力を受け付ける。また、音源ＬＳＩ２０５内のＤＳＰ２０６から出力されるデジタル楽音波形データは、Ｄ／Ａコンバータ２１７によりアナログ楽音波形信号に変換され、アンプ２１８で増幅された後に、特には図示しないスピーカ又は出力端子から出力される。
【００１６】
ＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３をワークメモリとして使用しながらＣＰＵ  ＲＯＭ２０２に記憶された制御プログラムを実行することにより、図１の電子鍵盤楽器１００の制御動作を実行する。ＣＰＵ２０１は、システムバス２１６からキー・スキャナ２１１又はＡ／Ｄコンバータ２１２を介して、図１の鍵盤１０１、機能選択操作子１０２、音色選択ボタン１０３、ベンダ／モジュレーション・ホイール１０４等の演奏指示を受け取る。または、ＣＰＵ２０１は、ＭＩＤＩ  Ｉ／Ｆ２１４を介して、外部の図示しない機器から、演奏指示を示すＭＩＤＩ入力を受け取る。ＣＰＵ２０１は、これらの演奏指示に基づいて、音源ＬＳＩ２０４に対して、楽音の発音／消音の指示、ディレイ効果の付与指示等を出力する。また、ＣＰＵ２０１は、ＣＰＵ  ＲＯＭ２０２に記憶された自動演奏データに基づいて、自動演奏による楽音の発音／消音の指示等を出力する。
本実施形態においては、このＣＰＵ２０１により第１の処理部を構成する。
【００１７】
音源ＬＳＩ２０４に内蔵される波形発生器２０５は、ＣＰＵ２０１からの楽音の発音／消音指示に従って、波形メモリである音源ＲＯＭ２０７から楽音波形データを読出し、ＤＳＰ２０６に音響信号として供給する。
【００１８】
音源ＬＳＩ２０４に内蔵されるＤＳＰ２０６は、波形発生器２０５から入力する楽音波形データに対して、ＤＳＰ  ＲＡＭ２０８を遅延メモリとして使用しながらディレイ効果を付加し、その結果得られる楽音波形データをＤ／Ａコンバータ２１７に出力する。ディレイ効果の設定は、ＣＰＵ２０１から設定される。
【００１９】
音源ＬＳＩ２０４に内蔵されるＣＰＵ  Ｉ／Ｆ２１５は、ＣＰＵ２０１との間の各種データの通信および割込み指示を処理する。ＣＰＵ  Ｉ／Ｆ２１５により、ＣＰＵ２０１からはＤＳＰ２０６が単なるメモリとして見え、ＤＳＰ２０６からもＣＰＵ２０１がメモリとして見えるように制御される。一方がメモリに書込みを行うと、他方がそれを読むことができる仕組みになっている。
【００２０】
発振子２０９は、ＣＰＵ２０１に対して基準クロックであるシステムクロックを供給する。発振子２１０は、音源ＬＳＩ２０４内の波形発生器２０５及びＤＳＰ２０６に対してサンプリングクロックを生成するための基準クロックを供給する。音源ＬＳＩ２０４が内蔵する波形発生器２０５及びＤＳＰ２０６は、音源ＬＳＩ２０４専用の発振子２１０からサンプリングクロックを生成するための共通の基準クロックが供給されるため、完全に同期して動作する。一方、ＣＰＵ２０１は、専用の発振子２０９からシステムクロックを供給されて動作する。このため、ＣＰＵ２０１の動作は基本的には、波形発生器２０５及びＤＳＰ２０６の動作とは同期しない。しかしながら、本実施形態では、後述する処理同期機能により、ＣＰＵ２０１が実行する自動演奏制御処理のテンポは、ＤＳＰ２０６が実行するディレイ処理におけるディレイタイムに同期するように制御される。
本実施形態においては、発振子２１０により第１のクロック発生部を構成し、発振子２０９により第２のクロック発生部を構成する。
【００２１】
キー・スキャナ２０７は、鍵盤１０５や機能選択操作子１０２又は音色選択ボタン１０３等のスイッチ・パネルの状態を走査して、ＣＰＵ２０１に通知するＩＣ（集積回路）である。Ａ／Ｄコンバータ２０８は、ベンダ／モジュレーション・ホイール１０４の操作位置を示すアナログ信号をデジタル信号として検出するＩＣである。ＬＣＤコントローラ２０９は、ＬＣＤ１０５を制御するＩＣである。
【００２２】
図３は、図２のＣＰＵ２０１が内蔵するカウンタ回路の構成例を示す図である。ＣＰＵ２０１は、発振子２０９が発振するシステムクロックを分周して計数を行うシーケンスクロックカウンタ３０１と、時計として時刻を参照するためのフリーランニングタイマカウンタ３０２を内蔵する。これらのタイマカウンタは共に、１μｓｅｃ（マイクロ秒）単位で値をインクリメントする。シーケンスクロックカウンタ３０１は、発振子２０９が発振するシステムクロックを、ゼロから、指定されたテンポの１拍を４８０分割した時間に対応するシーケンスクロックカウント上限値まで、循環的にカウントする。シーケンスクロックカウンタ３０１は、システムクロックのカウント値がシーケンスクロックカウント上限値に達する毎に、ＣＰＵ２０１に対してシーケンスクロック割込みを発生する。シーケンスクロックカウンタ３０１は、カウント値がシーケンスクロックカウント上限値に達すると、カウント値を０に戻って係数を循環的に繰り返す。
本実施形態においては、このシーケンスクロックカウンタ３０１が第２のカウンタに対応し、シーケンスクロックカウント上限値が第２のカウント値に対応する。
【００２３】
ＣＰＵ２０１は、シーケンスクロックカウンタ３０１が発生させるシーケンスクロック割込みに同期して、自動演奏を進行させる自動演奏制御処理を実行する。すなわち、自動演奏制御処理は、指定されたテンポの１拍を４８０分割したシーケンスクロック割込みを基準として動作する。テンポの１拍の間に４８０回のシーケンスクロック割込みのトリガ信号が発生され、それに併せて自動演奏が進行する。演奏のテンポは、このシーケンスクロック割込みの発生頻度に依存する。自動演奏のテンポは、図１の機能選択操作子１０２中のＴＥＭＰＯエリアのＤＯＷＮボタン１０２ａ又はＵＰボタン１０２ｂによって、上下させることができる。このＤＯＷＮボタン１０２ａおよびＵＰボタン１０２ｂにより、本実施形態においては、テンポ指定部を構成する。テンポは、最低値３０ＢＰＭ（Ｂｅａｔ  Ｐｅｒ  Ｍｉｎｕｔｅ）から、１ＢＰＭ刻みで、最高値３００ＢＰＭまで設定できる。これに同期して、シーケンスクロック割込みの時間間隔が決定される。
【００２４】
フリーランニングタイマカウンタ３０２は、３２ビットのデータ幅を持ち、最大値を超えると０に戻って計数を繰り返す時計であり、参照した時点の時刻をカウンタ値で知ることができる。ＣＰＵ２０１は、後述するように、シーケンスクロック割込みが音源ＬＳＩ２０４内のＤＳＰ２０６で実行されるディレイ処理において設定されているディレイタイムに対応する回数だけ発生する毎に、フリーランニングタイマカウンタ３０２を参照することにより、各発生時刻を取得してＤＳＰ２０６におけるディレイ処理との同期制御を実行する。
【００２５】
次に、音源ＬＳＩ２０４内での音響信号の流れについて説明する。図２に示されるように、波形発生器２０５から出力される音響信号は、ＤＳＰ２０６に送られて、このＤＳＰ２０６内でディレイ効果を付加される。波形発生器２０５から出力される音響信号のうち、ユーザ（演奏者）による鍵盤１０１の演奏に基づいて波形発生器２０５で生成される音響信号に対してディレイ効果が付加される。一方、ＣＰＵ２０１による自動演奏制御処理に基づいて波形発生器２０５で生成される音響信号については、ディレイ効果が付加されずにＤＳＰ２０６の出力段でディレイ効果が付加された音響信号と混合されて出力されてもよいし、ディレイ効果が付加されてもよい。音源ＬＳＩ２０４内部での音響信号の受け渡し、及びＤＳＰ２０６から出力される音響信号はいずれも、同じサンプリングクロックに基づいて例えば４４．１ＫＨｚ（キロヘルツ）というサンプリング周波数でサンプリングされ、処理される。このサンプリングクロックは、音源ＬＳＩ２０４に接続される発振子２１０が発生させる基準クロックを音源ＬＳＩ２０４内部で分周することにより生成されており、発振子２１０の発振周波数とサンプリング周波数は完全に比例関係にある。発振子２１０の発振周波数に変動が起これば、同じ比率でサンプリング周波数に影響が及ぶ。
【００２６】
音源ＬＳＩ２０４内の波形発生器２０５は、一般的な波形読出し方式による楽音波形の生成機能を備える。具体的には、波形発生器２０５は、波形メモリとして機能する音源ＲＯＭ２０７から、ＣＰＵ２０１から予め指示された種別の楽音波形データを、ＣＰＵ２０１から逐次指定されるノートオン指示で指定された音高に対応する読出し速度で補間を行いながら読み出すことにより、音響信号を生成する。
【００２７】
図４（ａ）は、音源ＬＳＩ２０４内のＤＳＰ２０６が実行するディレイ処理の機能ブロック図である。まず、波形発生器２０５から入力された音響信号４０７が分岐させられ、一方はダイレクトに出力側の加算器４０６へ送られ、もう一方はアンプ４０２及び加算器４０５から遅延装置４０１に送られ、遅延処理が実行される。遅延装置４０１の出力は、アンプ４０３を介して加算器４０６で、原音である上記ダイレクトの音響信号４０７と混合される。このときの原音に対する遅延音のレベルは、ディレイ入力音量調整用のアンプ４０２とディレイ出力音量調整用のアンプ４０３によって調整することができる。遅延装置４０１の出力はフィードバック量調整用のアンプ４０４によって設定された量だけ、加算器４０５を介して遅延装置４０１の入力側にフィードバックすることができる。アンプ４０４における増幅率を１．０倍に近づけるほど、音響信号のリピート回数が多くなる。
【００２８】
また、このディレイ処理にはディレイホールドモードという特殊モードが用意されている。ユーザが図１の機能選択操作子１０２内のＨＯＬＤボタンを押下してそのＬＥＤを点灯させることにより、ディレイホールドモードが設定される。この状態になると、フィードバック量調整用のアンプ４０４のゲインは１．０倍となり、ユーザが再びＨＯＬＤボタンを押下してそのＬＥＤを消灯させてこの状態を解除するまで、遅延装置４０１が出力する遅延された音響信号を減衰させずに永遠に繰り返し出力することができる。このモードがオンされた瞬間に、通常１．０倍に設定されているディレイ入力音量調整用のアンプ４０２の増幅率は０倍に設定され、それ以降入力された音響信号４０７にディレイ効果がかからない状態になる。その結果、このモードがオンされる直前まで遅延装置４０１に入力していた音響信号が遅延装置４０１で繰り返し遅延させられる音響信号と、入力された音響信号４０７を加算器４０６でそのまま混合した音響信号が出力される。この機能は、いわゆるサンプルルーパーと呼ばれる。
【００２９】
図４（ｂ）は、図４（ａ）の遅延装置４０１の説明図である。遅延装置４０１は、ＤＳＰ２０６がＤＳＰ  ＲＡＭ２０８にアクセスする機能として実現される。ＤＳＰ  ＲＡＭ２０８は、ディレイ用リングバッファメモリとして動作し、概念的にはリングバッファと呼ばれる形式で管理され、バッファエリアの最終アドレス４１４のメモリ領域は先頭アドレス４１３のメモリ領域と仮想的に連続しているように、最終アドレス４１４の次のアドレスにおいて、アドレスを指定するライトポインタ４１０及びリードポインタ４１１の値の折り返しが行われる。このディレイ用リングバッファメモリ上のライトポインタ４１０の値が示す書込みアドレスとリードポインタ４１１の値が示す読出しアドレスを一定の間隔で設定しておき、サンプリングクロックの一周期ごとに、各ポインタの値を１アドレスずつインクリメントし、加算器４０５から入力された音響信号の値の書込みと、出力側に送る音響信号の値の読出しが行われる。また、図４（ｃ）に示されるように、ディレイ用リングバッファメモリにおいて、ライトポインタ４１０又はリードポインタ４１１が最終アドレス４１４を指し示している場合、次に指し示すのは先頭アドレス４１３となる。このアドレス移動は、機器が動作している限り無限に繰り返される。
【００３０】
この結果、図４（ｂ）又は（ｃ）に示されるように、上記書込みが行われてから読出しが行われるまでディレイ用リングバッファメモリ上の各アドレスに一時記憶されている音響信号の各１６ビットの波高値が、遅延中の音響信号４１２となる。また、上記ライトポインタ４１０とリードポインタ４１１の相対的なアドレス差が、遅延量を示すディレイタイムとなる。１アドレス離れるごとに、下記（１）式で示される遅延が発生する。
【００３１】
（１÷４４．１ＫＨｚ）ｓｅｃ≒約２２．７μｓｅｃ  ・・（１）
【００３２】
本実施例では、例えば、３０００００×２バイト（３０００００ワード）のディレイ用リングバッファメモリを有し、１サンプルは１ワード（２バイト＝１６ビット）なので、最大で２２．７μｓｅｃ×３０００００≒約６．８ｓｅｃのディレイタイムが実現できる。例えば、１ｓｅｃのディレイタイムを発生させたい場合には、ライトポインタ４１０はリードポインタ４１１よりも、４４．１ＫＨｚ×１０００×１ｓｅｃ＝４４１００アドレス少ない値に設定しておけば良い。図４（ｂ）又は（ｃ）に示される設定例では、ディレイ用リングバッファメモリの約１／４の記憶領域が遅延中の音響信号４１２となっているため、６．８ｓｅｃ÷４＝約１．７ｓｅｃのディレイタイムが発生するように設定されている。従って、ライトポインタ４１０とリードポインタ４１１の差は、４４１００×１．７ｓｅｃ＝７４９７０アドレスとなる。
【００３３】
上述のディレイタイムを含むディレイ効果指定は、図１の機能選択操作子１０２のＤＥＬＡＹエリアに示される操作子群によって、下記のように行うことができる。
【００３４】
・ＳＹＮＣボタン（ＬＥＤインジケータ付き）：この操作子により、ディレイタイムをテンポに同期させるモードであるディレイテンポシンクロナイズドモードを使用するか否かが切り替えられる。ユーザは、このモードをオンした場合には、後述するＢＥＡＴノブにより、ディレイタイムをテンポに同期させる設定を行うことができるようになる。なお、このモードがオフの場合には、ディレイタイムは後述するＴＩＭＥノブにより自由な値に設定することができる。
・ＨＯＬＤボタン（ＬＥＤインジケータ付き）：この操作子により、前述のディレイホールドモードを使用するか否かが切り替えられる。
・ＢＥＡＴノブ：ディレイテンポシンクロナイズドモードがオンされたときに、この操作子により、ディレイタイムがテンポの何拍に同期するかを設定する。ノブの位置に応じて、設定値０（１／４拍）、設定値１（１／３拍）、設定値２（１／２拍）、設定値３（２／３拍）、設定値４（１拍）、設定値５（３／２拍）、設定値６（２拍）、設定値７（３拍）の８種類から選択できる。ディレイテンポシンクロナイズドモードがオフのときには、ＢＥＡＴノブの操作は無視される。
・ＴＩＭＥノブ：ディレイテンポシンクロナイズドモードがオンされないときに、この操作子により、ディレイタイムが直接指定される。例えば、０〜１２３１６（２ｓｅｃ）の間で調整できる。ディレイテンポシンクロナイズドモードがオンのときには、ＴＩＭＥノブの操作は無視される。
・ＲＥＰＥＡＴノブ：ディレイホールドモードがオンされていないときに、この操作子により、ディレイのフィードバック量が調整される。ここで指定された値により、図４（ａ）のフィードバック量調整用のアンプ４０４のゲインが決定される。ディレイホールドモードがオンのときには、上記フィードバック量は強制的に１００％に設定される。
・ＬＥＶＥＬノブ：この操作子により、ディレイ信号のレベルが調整される。ここで指定された値により、図４（ａ）のディレイ出力音量調整用のアンプ４０３のゲインが決定される。
【００３５】
上記ＢＥＡＴ、ＴＩＭＥ、ＲＥＰＥＡＴ、ＬＥＶＥＬの４つのノブは、割り当てられたパラメータの値を、設定位置（角度）に応じて最大値と最小値の間で設定することができる。例えば中央の位置に操作すれば最大値と最小値の中央の値に設定される。
【００３６】
次に、本実施形態においてＣＰＵ２０１が実行する自動演奏制御処理を音源ＬＳＩ２０４内のＤＳＰ２０６が実行するディレイ処理に同期させるための制御動作について説明する。前述したように、ＣＰＵ２０１が実行する自動演奏制御処理のタイミングは、ＣＰＵ２０１内のシーケンスクロックカウンタ３０１が、発振子２０９からのシステムクロックを、指定されたテンポ（ＢＰＭ）の１拍を４８０分割した時間に対応するシーケンスクロックカウント上限値まで循環的にカウントする毎に発生するシーケンスクロック割込みに基いて、制御される。ここで、ディレイテンポシンクロナイズドモード、すなわちディレイタイムを指定されたテンポに同期させるモードが指定されたときには、ＣＰＵ２０１が、ＤＳＰ２０６が実現する遅延装置４０１（図４（ａ）参照）に設定されるサンプリングクロックに同期したディレイタイムと、上記シーケンスクロック割込みに同期したディレイタイムに対応する時間とのずれを逐次監視して、そのずれを補正するようにシーケンスクロック割込みの発生タイミングを調整しながら動作する。音源ＬＳＩ２０４が発生するサンプリングクロックをそのまま自動演奏制御処理の基準クロックとして使用することも理論的には可能である。しかし、現実的には４４．１ＫＨｚというサンプリングレート、すなわち２２．７μｓｅｃという単位で１拍を４８０分の１に分割したシーケンスクロック割込みに変化をつけるには精度が荒すぎるのと、ＣＰＵ２０１が生成した１μｓｅｃ単位でされたシステムクロックとの差が広がって認識可能なレベルになるのは数１０拍も演奏してからの現象であることを考えると、ディレイ処理と自動演奏制御処理とを別々のクロックで動作させて、随時補正するのが現実的であると考えられる。そこで、本実施形態では、ディレイテンポシンクロナイズドモードにおいて指定されたテンポに対して自然数倍又は自然数分の１倍の関係を有するように設定されたディレイタイムについて、ＤＳＰ２０６上でサンプリングクロックを単位として計測した時間と、ＣＰＵ２０１上でシーケンスクロック割込みの回数として計測した時間とを、ＣＰＵ２０１が比較する。そして、ＣＰＵ２０１で計測された時間のほうが、遅れている場合はシーケンスクロックカウンタ３０１のカウントが上限に達するシーケンスクロックカウント上限値を減少させてシーケンスクロック割込みのタイミングを少し速め、逆に進んでいる場合はシーケンスクロックカウント上限値を増加させてシーケンスクロック割込みのタイミングを遅くすることにより、徐々に近づくような調整操作を自動的に行う。
【００３７】
ディレイ時間と音楽の周期が一致するだけでなく、音楽とディレイ効果によって発音する１つ１つの楽音の位相が合わなければ音楽的には成立しないが、本実施形態での上記調整操作により、ディレイの周期が合うだけでなく、位相も一致させることができる。
【００３８】
図５（ａ）は、ＣＰＵ  ＲＯＭ２０２が記憶するテンポ−カウントテーブル（以下「ＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬ」とも表記する）のデータ構成例を示す図であり、また、図５（ｂ）は、ＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬの説明に使用する補助情報テーブルのデータ構成例を示す図である。なお、補助情報テーブルは、本実施形態においてＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬを説明する便宜上図示したものであり、実装されるものではない。図５（ａ）に例示されるＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬは、ＴＥＭＰＯ、ＤＥＬＡＹ＿ＣＯＵＮＴ、ＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴの各項目を有する。ＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬの各行は、３０〜３００（ＢＰＭ：Ｂｅａｔ  Ｐｅｒ  Ｍｉｎｕｔｅ、時間１分あたりの拍数）まで１刻みで指定されるＴＥＭＰＯ項目値の各々について、ＤＥＬＡＹ＿ＣＯＵＮＴ項目値とＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴ項目値が設定されるエントリを示している。なお、以下の説明では、ＴＥＭＰＯ項目、ＤＥＬＡＹ＿ＣＯＵＮＴ項目、又はＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴ項目の各値そのものを、ＴＥＭＰＯ、ＤＥＬＡＹ＿ＣＯＵＮＴ、又はＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴと表記する場合もある。
【００３９】
ＤＥＬＡＹ＿ＣＯＵＮＴは、ＤＳＰ２０６（図２）内の遅延装置４０１（図４（ａ）参照）に設定されるディレイタイムを指定されたテンポ値（ＴＥＭＰＯ）の１拍に同期させたときに、そのディレイタイムを音源ＬＳＩ２０４に接続される図２の発振子２１０に基づいて生成されるサンプリングクロックでカウントしたときの、サンプリングクロック数を示している。例えばサンプリングクロックの周波数を４４．１ＫＨｚとすれば、ＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬのＴＥＭＰＯ毎のエントリに設定されるＤＥＬＡＹ＿ＣＯＵＮＴは、下記（２）式により計算される値である。
【００４０】
ＤＥＬＡＹ＿ＣＯＵＮＴ＝
（６０／ＴＥＭＰＯ）／｛（１／（４４．１×１０００）｝  ・・（２）
【００４１】
ＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴは、ＣＰＵ２０１に接続される発振子２０９からのシステムクロックによりカウントアップされるＣＰＵ２０１内のシーケンスクロックカウンタ３０１（図３）が発生する、指定されたテンポ値（ＴＥＭＰＯ）の１拍を４８０分割するシーケンスクロック割込みの発生に要する、システムクロック数を示している。システムクロックの１周期を例えば１μｓｅｃとすれば、ＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴは、１シーケンスクロックをＣＰＵ２０１のシステムクロックでカウントしたときの所要時間（μｓｅｃ）となる。ＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬのＴＥＭＰＯ毎のエントリに設定されるＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴ（μｓｅｃ）は、下記（３）式により計算される値である。
【００４２】
ＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴ＝
｛（６０／ＴＥＭＰＯ）／４８０｝×１００００００  ・・（３）
【００４３】
次に、図５（ｂ）の補助情報１は、ＤＥＬＡＹ＿ＣＯＵＮＴが示すサンプリングクロック数分をサンプリングするのに要する所要時間、すなわちＤＳＰ２０６におけるサンプリングクロックを基準としたディレイタイムの時間（ｍｓｅｃ）を示す。この補助情報１は、図５（ａ）に例示されるＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬのＤＥＬＡＹ＿ＣＯＵＮＴ値を用いて、下記（４）式により計算される。
【００４４】
補足情報１＝
｛１／（４４．１×１０００）×ＤＥＬＡＹ＿ＣＯＵＮＴ×１０００  ・・（４）
【００４５】
次に、図５（ｂ）の補助情報２は、上記補助情報１として算出されるＤＥＬＡＹ＿ＣＯＵＮＴのサンプリング所要時間と、ＣＰＵ２０１内でのシーケンスクロック割込みで１拍分をカウントしたときの所要時間の時間差（ｍｓｅｃ）を示す。すなわち、ディレイタイムを指定されたテンポ値ＴＥＭＰＯの１拍に同期させた場合における、ＤＳＰ２０６におけるサンプリングクロックを基準としたときの所要時間と、ＣＰＵ２０１におけるシーケンスクロック割込みを基準としたときの所要時間との時間差である。この補助情報２は、上記補助情報１（ｍｓｅｃ）と、図５（ａ）に例示されるＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬのＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴ値（μｓｅｃ）とを用いて、下記（５）式により計算される。
【００４６】
補足情報２＝補足情報１−
（ＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴ／１０００）×４８０  ・・（５）
【００４７】
更に、図５（ｂ）の補助情報３は、指定されたテンポ値ＴＥＭＰＯの１拍に同期するディレイタイムについて算出された上記時間差の、４分の４拍子で３２小節分の自動演奏楽曲が演奏された場合における累積値を示す。この補助情報３は、上記補助情報２を用いて、下記（６）式により計算される。
【００４８】
補足情報３＝補足情報２×４×３２  ・・・（６）
【００４９】
図５（ｂ）において、補助情報２から知見されるように、指定されたテンポ値ＴＥＭＰＯの１拍に同期するディレイタイムの１ディレイ程度では、ＤＳＰ２０６のサンプリングクロックに基づく制御と、ＣＰＵ２０１でのシーケンスクロック割込みに基づく制御とでは、大きな時間差は生じない。しかし、例えばディレイホールドモードにして前述したサンプルルーパーが実施されるような場合においては、ディレイされた音響信号が何小節にもわたって繰返し使用される。このような場合には、補助情報３から知見されるように、人間の耳で認識できるほどの大きな時間差が生じることがわかる。また、これは発振子の精度は無視した理論値であり、実際には上記の誤差発振の精度（±０．１％〜±０．００１％）程度の差を加えて考える必要がある。
【００５０】
上記（５）式及び（６）式の関係より、図５（ｂ）の補助情報２又は３においてプラス値が発生した場合には、ＣＰＵ２０１におけるシーケンスクロックに基づくディレイタイムのカウント値ＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴのほうが、ＤＳＰ２０６におけるサンプリングクロックに基づくディレイタイムのカウント値ＤＥＬＡＹ＿ＣＯＵＮＴよりも大きいことを示している。従って、この場合にはＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴの値を上記プラス値の分だけ減少させれば、次回のディレイ処理時に、ＤＳＰ２０６のサンプリングクロックに基づく制御とＣＰＵ２０１でのシーケンスクロック割込みに基づく制御との間の時間差が０に近づくことが期待できる。
【００５１】
一方、補助情報２又は３において、マイナス値が発生した場合には、ＣＰＵ２０１におけるシーケンスクロックに基づくディレイタイムのカウント値ＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴのほうが、ＤＳＰ２０６におけるサンプリングクロックに基づくディレイタイムのカウント値ＤＥＬＡＹ＿ＣＯＵＮＴよりも小さいことを示している。従って、この場合にはＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴの値を上記マイナス値だけ増加させれば、次回のディレイ処理時に、ＤＳＰ２０６のサンプリングクロックに基づく制御とＣＰＵ２０１でのシーケンスクロック割込みに基づく制御との間の時間差が０に近づくことが期待できる。
【００５２】
以上の制御処理を実現するために、本実施形態はまず、ＤＳＰ２０６内に、ＣＰＵ２０１に対してディレイタイム割込みを発生する機構と、ＤＳＰ２０６に接続されるＤＳＰ  ＲＡＭ２０８にアクセスするためのアドレスポインタを生成する機構とを備える。図６は、ＤＳＰ２０６が備えるディレイタイム割込み発生処理を実行する機構及びディレイ処理のためのアドレスポインタを生成する機構の例を示すブロック図である。図６において、ＤＳＰ２０６は、ディレイタイムカウンタ６０１と、ディレイタイムサンプリング数レジスタ６０２と、符号反転器６０３と、加算器６０４と、ライトポインタ生成部６０５と、アドレス折返し部６０６と、データアクセス部６０７とを備える。
本実施形態においては、このディレイタイムカウンタ６０１が第１のカウンタを構成している。
さらに、ＤＳＰ２０６内の符号反転器６０３と、加算器６０４と、ライトポインタ生成部６０５と、アドレス折返し部６０６と、データアクセス部６０７と、このＤＳＰ２０６に接続されるＤＳＰ  ＲＡＭ２０８とにより、音響効果回路６１０を構成する。
【００５３】
ユーザが図１の機能選択操作子１０２のＤＥＬＡＹエリアのＳＹＮＣボタンを押下してＬＥＤインジケータを点灯させると、ディレイタイムをテンポに同期させるディレイテンポシンクロナイズドモードが設定される。このモードの場合、ＣＰＵ２０１はまず、ＣＰＵ  ＲＯＭ２０２に記憶されている図５（ａ）に例示されているＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬのユーザによって指定されたテンポ値がＴＥＭＰＯ項目に設定されているエントリから、ＤＥＬＡＹ＿ＣＯＵＮＴ項目値、すなわち、ディレイタイムを指定されたテンポ値（ＴＥＭＰＯ）の１拍に同期させたときのサンプリングクロック数を取得する。ただし、このＤＥＬＡＹ＿ＣＯＵＮＴは、指定されたテンポの１拍と同期させた場合の基準値であるので、ＣＰＵ２０１は実際には、機能選択操作子１０２のＤＥＬＡＹエリアのＢＥＡＴノブで設定された同期拍数の分周比率である、１／４拍、  １／３拍、  １／２拍、  ２／３拍、１拍、  ３／２拍、２拍、３拍のいずれかをＤＥＬＡＹ＿ＣＯＵＮＴに乗算することにより、指定されたテンポの指定された同期拍数のディレイタイムに対応するディレイタイムサンプリング数６０８を算出する。例えば、同期拍数として１／２拍が指定されれば、ＣＰＵ２０１は、ＤＥＬＡＹ＿ＣＯＵＮＴに１／２を乗算する。
【００５４】
ＣＰＵ２０１は、以上のようにして算出したディレイタイムサンプリング数６０８を、システムバス２１６、ＣＰＵ  Ｉ／Ｆ２１５、及び音源ＬＳＩ２０４を介して、ＤＳＰ２０６内のディレイタイムサンプリング数レジスタ６０２にセットする。
【００５５】
ディレイタイムサンプリング数レジスタ６０２にセットされたディレイタイムサンプリング数６０８は、ディレイタイムカウンタ６０１にカウント上限値としてセットされる。ディレイタイムカウンタ６０１は、サンプリングクロックをゼロからディレイタイムサンプリング数６０８まで循環的にカウントするカウンタであり、サンプリングクロックのカウント値がこの上限値に達する毎にＣＰＵ２０１に対してディレイタイム割込み６０９を発生させて、同期拍数の値に設定されたディレイタイムが一周期経過したことを知らせ、その後カウント値を０にリセットしてカウント動作を繰り返す。
本実施形態においては、このディレイタイムカウンタ６０１のカウント上限値が第１のカウンタ値に相当する。
【００５６】
ライトポインタ生成部６０５は、図４（ｂ）及び（ｃ）で説明したライトポインタ４１０を生成する部分である。ライトポインタ生成部６０５は、サンプリングクロックに従って図４の先頭アドレス４１３から最終アドレス４１４まで＋１ずつ値が増加するアドレス値を生成し、このアドレス値が最終アドレス４１４に達すると次にこのアドレス値を先頭アドレス４１３に戻し、以後同様の動作を繰り返す。このようにして生成されたライトポインタ４１０のアドレス値が、ＤＳＰ２０６に接続されるＤＳＰ  ＲＡＭ２０８（図２参照）に、書込みアドレスとして供給される。
【００５７】
ディレイタイムサンプリング数レジスタ６０２にセットされたディレイタイムサンプリング数６０８は、符号反転器６０３でマイナス値に変換された後、加算器６０４に入力する。加算器６０４は、ライトポインタ生成部６０５が生成したライトポインタ４１０の値にディレイタイムサンプリング数６０８のマイナス値を加算、すなわち、ライトポインタ４１０の値からディレイタイムサンプリング数６０８の値を減算することによって、図４（ｂ）及び（ｃ）で説明したリードポインタ４１１を生成する。アドレス折返し部６０６は、リードポインタ４１１の値が図４（ｃ）の先頭アドレス４１３の値未満となった場合に、リードポインタ４１１の値に（最終アドレス４１４の値−先頭アドレス４１３の値＋１）を加算することにより、最終アドレス４１４に近い側のアドレスに折り返す。このようにして最終的に生成されたリードポインタ４１１のアドレス値が、ＤＳＰ２０６に接続されるＤＳＰ  ＲＡＭ２０８に、読出しアドレスとして供給される。
【００５８】
データアクセス部６０７は、サンプリングクロック毎に、ライトポインタ生成部６０５からＤＳＰ  ＲＡＭ２０８に供給される書込みアドレスに波形発生部２０５から供給される音響波形信号及びＤＳＰ  ＲＡＭ２０８から読み出された音響波形信号の少なくとも一方を書き込み、アドレス折返し部６０６からＤＳＰ  ＲＡＭ２０８に供給される読出しアドレスから音響波形信号を読み出してＤ／Ａコンバータ２１７（図２参照）に出力する（図４（ｂ）又は（ｃ）参照）。これにより、図４（ａ）の遅延装置４０１の機能が実現される。このように、ＤＳＰ２０６は、波形発生器２０５（図２参照）から入力される音響信号に対して、上述の遅延装置４０１の動作を含む図４（ａ）のブロック図で示される処理を実行し、加算器４０６から出力される音響信号を、出力４０８としてＤ／Ａコンバータ２１７に出力する。
【００５９】
上述のＤＳＰ２０６の構成に加えて、本実施形態では、ＣＰＵ２０１内に、シーケンスクロック補正処理を実行する機構を備える。前述したディレイテンポシンクロナイズドモードの場合、ＣＰＵ２０１はまず、ＣＰＵ  ＲＯＭ２０２に記憶されている図５（ａ）に例示されているＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬのユーザによって指定されたテンポ値がＴＥＭＰＯ項目に設定されているエントリから、ＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴ項目値、すなわち、指定されたテンポ（ＴＥＭＰＯ）の１拍を４８０分割するシーケンスクロック割込みの発生に要するシステムクロック数(μｓｅｃ)を取得し、ＣＰＵ２０１内のシーケンスクロックカウンタ３０１（図３参照）にシーケンスクロックカウント上限値としてセットする。前述したように、シーケンスクロックカウンタ３０１は、発振子２０９が発振するシステムクロックを、ゼロからシーケンスクロックカウント上限値まで循環的にカウントする。シーケンスクロックカウンタ３０１は、システムクロックのカウント値がシーケンスクロックカウント上限値に達する毎に、ＣＰＵ２０１に対してシーケンスクロック割込みを発生させて、指定テンポの１拍を４８０分割したシーケンスクロック周期が経過したことを知らせ、その後カウント値を０にリセットしてカウント動作を繰り返す。
【００６０】
ＣＰＵ２０１は、機能選択操作子１０２のＤＥＬＡＹエリアのＢＥＡＴノブで設定された設定値に対応する同期拍数に応じた回数のシーケンスクロック割込みをシーケンスクロックカウンタ３０１から受けると、その時点の時刻をフリーランニングタイマカウンタ３０２（図３）のカウンタ値として読み取って記録する。ＣＰＵ２０１は、この回数を、ＣＰＵ  ＲＯＭ２０２が記憶する同期拍数テーブルから読みとる。図７（ａ）は、この同期拍数テーブル（以下「ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ」とも表記する）のデータ構成例を示す図である。また、図７（ｂ）は、ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬの説明上使用する補助情報テーブルのデータ構成例を示す図である。図５（ｂ）の補助情報テーブルと同様に、図７（ｂ）の補助情報テーブルも、本実施形態においてＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬを説明する便宜上図示したものであり、実装されるものではない。ユーザが、ＢＥＡＴノブで、８種類の同期拍数の設定値０、１、２、３、４、５、６、７のうちのいずれか１つを設定すると、ＣＰＵ２０１は、その設定値を設定値項目に有するＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬのエントリを参照し、分子（ＮＵＭＥＲＡＴＯＲ）項目の値と分母（ＤＥＮＯＭＩＮＡＴＯＲ）項目の値を取得する。なお、以下の説明では、ＮＵＭＥＲＡＴＯＲ項目、ＤＥＮＯＭＩＮＡＴＯＲ項目の各値そのものを、ＮＵＭＥＲＡＴＯＲ、ＤＥＮＯＭＩＮＡＴＯＲと表記する場合もある。ＣＰＵ２０１は、これらの値に基づいて、「ＮＵＭＥＲＡＴＯＲ／ＤＥＮＯＭＩＮＡＴＯＲ」の値として、同期拍数を決定する。図７（ｂ）の補助情報テーブルには、設定値毎の同期拍数の値を示してある。このようにして、設定値０、１、２、３、４、５、６、７のそれぞれに対応して、１／４拍、  １／３拍、  １／２拍、  ２／３拍、１拍、  ３／２拍、２拍、３拍という同期拍数が算出されることになる。また、図７（ｂ）の補助情報テーブルには、各同期拍数に対して、シーケンスクロック割込みによってカウントされるべき回数（以下「同期シーケンスクロック数」と表記）を示してある。例えば、設定値＝４の場合には、ＮＵＭＥＲＡＴＯＲ＝１、ＤＥＮＯＭＩＮＡＴＯＲ＝１であるから、同期拍数＝１／１＝１である。そして、シーケンスクロック割込みは１拍を４８０分割したものであるから、同期拍数が１の場合の同期シーケンスクロック数は４８０となる。また、設定値＝０の場合は、ＮＵＭＥＲＡＴＯＲ＝１、ＤＥＮＯＭＩＮＡＴＯＲ＝４であるから、同期拍数＝１／４であり、同期シーケンスクロック数は、４８０×１／４＝１２０となる。具体的には、ＣＰＵ２０１は、ＢＥＡＴノブで指定された設定値に対応するエントリのＮＵＭＥＲＡＴＯＲ項目値とＤＥＮＯＭＩＮＡＴＯＲ項目値を取得し、下記（７）式に従って同期拍数ｂを計算し、更に、下記（８）式に従って同期シーケンスクロック数ｓ、すなわち、フリーランニングタイマカウンタ３０２から時刻を読みとるべきシーケンスクロック割込みの回数を決定する。
【００６１】
ｂ＝ＮＵＭＥＲＡＴＯＲ／ＤＥＮＯＭＩＮＡＴＯＲ  ・・（７）
【００６２】
ｓ＝４８０×ｂ  ・・（８）
【００６３】
一方、ＣＰＵ２０１は、ＤＳＰ２０６内のディレイタイムカウンタ６０１から、ディレイタイム割込み６０９を受けると、その時点の時刻もフリーランニングタイマカウンタ３０２（図３）のカウンタ値として読み取って記録する。前述したように、ディレイタイム割込み６０９は、ＤＳＰ２０６におけるディレイ処理において同期拍数に設定されたディレイタイムがサンプリングクロックによって一周期分カウントされる毎に、ＤＳＰ２０６からＣＰＵ２０１に通知される。
【００６４】
以上のようにして、ＣＰＵ２０１内で同期拍数に応じた回数（＝ｓ回）分のシーケンスクロック割込みが受け取られた時点の時刻（以下このＣＰＵ２０１側の時刻を「ＬＡＳＴ＿ＢＥＡＴ＿ＴＩＭＥ」と表記）と、ＤＳＰ２０６から同期拍数に対応するディレイタイムに対するサンプリングクロックによる一周期分のカウントにより発生するディレイタイム割込み６０９が受け取られた時点の時刻（以下このＤＳＰ２０６側の時刻を「ＬＡＳＴ＿ＤＥＬＡＹ＿ＴＩＭＥ」と表記）が揃うと、ＣＰＵ２０１は、両方の時刻の時間差ｄを、下記（９）式により計算する。
【００６５】
ｄ＝ＬＡＳＴ＿ＢＥＡＴ＿ＴＩＭＥ−ＬＡＳＴ＿ＤＥＬＡＹ＿ＴＩＭＥ
・・（９）
【００６６】
ＣＰＵ２０１は、この時間差が小さくなるように、図３のシーケンスクロックカウンタ３０１にセットするシーケンスクロックカウント上限値を増加又は減少させる。具体的には、ＣＰＵ２０１は、時間差がプラス値である、すなわち、ＬＡＳＴ＿ＢＥＡＴ＿ＴＩＭＥのほうがＬＡＳＴ＿ＤＥＬＡＹ＿ＴＩＭＥよりも後の時刻の場合には、ＣＰＵ２０１内のシーケンスクロックカウンタ３０１においてカウント上限値に達してシーケンスクロック割込みが発生するまでの時間がかかりすぎているため、シーケンスクロックカウント上限値から上記時間差のプラス値を１同期拍数（＝１ディレイタイム）分に換算した値を減算して、シーケンスクロックカウント上限値を小さくさせる。一方、時間差がマイナス値である、すなわち、ＬＡＳＴ＿ＢＥＡＴ＿ＴＩＭＥのほうがＬＡＳＴ＿ＤＥＬＡＹ＿ＴＩＭＥよりも先の時刻の場合には、ＣＰＵ２０１内のシーケンスクロックカウンタ３０１においてカウント上限値に達してシーケンスクロック割込みが発生するまでの時間が早すぎるため、シーケンスクロックカウント上限値から上記時間差のマイナス値を１同期拍数（＝１ディレイタイム）分に換算した値を減算して、シーケンスクロックカウント上限値を大きくする。つまり、ＣＰＵ２０１は、上記（７）式によって計算される同期拍数ｂと、上記（９）式によって計算される時間差ｄとを用いて、下記（１０）式によりシーケンスクロックカウント上限値の補正値ｃを計算する。
【００６７】
ｃ＝ｄ／（４８０×ｂ）  ・・（１０）
【００６８】
ＣＰＵ２０１は、このようにして算出した補正値ｃをシーケンスクロックカウント上限値から減算して、シーケンスクロックカウンタ３０１にセットする。この結果、次回のディレイ処理においては、ＣＰＵ２０１においてシーケンスクロック割込みに従ってディレイタイム分だけ進行する自動演奏の時間と、ＤＳＰ２０６におけるディレイタイム分のディレイ処理の時間とのずれが無くなることが期待される。以上の本実施形態による一連の制御処理を、ディレイ同期処理（処理同期手段）と呼ぶ。
【００６９】
なお、上記（１０）式で計算される補正値ｃは、整数値であるので、少数以下の切り捨て処理をした場合は、補正値ｃは時間差ｄが同期シーケンスクロック数に収まっている限り０となり、何の補正も行われないことになる。しかしながら、本実施形態で問題としているのは１０ｍｓｅｃ、２０ｍｓｅｃといった認知可能な蓄積されたずれであり、数百μｓｅｃといった微小なずれは補正する意味がほとんど無いので、問題となることはない。例えば、同期拍数が１／２の場合、同期シーケンスクロック数は２４０回であるが、シーケンスクロックカウンタ３０１のカウンタ上限値であるこの同期シーケンスクロック数を１増やすとシーケンスクロック割込みの間隔は１μｓｅｃ長くなり、次のディレイとの同期タイミングまでには、この２４０倍の２４０μｓｅｃを補正することになる。２４０μｓｅｃ未満のズレの場合は何も行わないが、音楽的には認知不能な領域であるので問題ない。図８は、本実施形態の動作説明図である。図８（ａ）は、指定テンポに対して所定の同期拍数として「一拍」がディレイタイムとして設定されたサンプルルーパーのディレイ処理がＤＳＰ２０６で実行されることにより、同じ音響信号波形が繰返し再生される様子を示している。図８（Ｂ）は、「０」から「一拍」に対応して設定されたディレイタイムサンプリング数６０８を、第１のカウント値、つまり上限カウント値までのカウントを繰り返すディレイタイムカウンタ６０１のカウント状態を表わす。このディレイタイムカウンタ６０１のカウント値が上限カウント値に到達するタイミングに応答して音響信号波形が繰返し再生されるとともに、図８（Ｃ）に示すように、割り込み信号６０９が発生する。
これに対して、ＣＰＵ２０１では、指定テンポに対して生成されるシーケンスクロックに従って自動演奏制御処理が実行される。より具体的には、シーケンスクロックカウンタ３０１が、シーケンスクロックを「０」から「一拍」に対応して設定されたシーケンスクロックのカウント上限値までカウントを繰り返すことにより、この自動演奏の拍のタイミングが得られる。しかしながら、このシーケンスクロックと上述のサンプリングクロックとは周期も異なり、かつ同期もしていないため、本実施形態のディレイ同期処理が実行されない場合には、音響信号波形が繰り返されるに従い、シーケンスクロックカウンタ３０１のカウントが第２のカウント値、つまりカウント上限値まで到達するタイミングが、図８（Ｄ）に示されるように、音響信号波形の繰返しタイミング（図８中の破線のタイミング）に対して徐々にずれていってしまう。
このため、このタイミングを自動演奏の拍タイミングとして自動演奏を進行させると、自動演奏の拍タイミングと音響信号波形の繰り返しタイミングとのずれが大きくなってしまう（図８（Ｅ））。
一方、本実施形態のディレイ同期処理が実行された場合、割り込み信号６０９の発生タイミングとシーケンスクロックカウンタ３０１がカウント上限値までカウントするタイミングとの差分時間を求め、この差分時間が少なくなるように、シーケンスクロックカウンタ３０１がカウント上限値を増加あるいは減少させている（図８（Ｆ））。
これにより、シーケンスクロックカウンタ３０１のカウントがカウント上限値まで到達するタイミングである自動演奏の拍タイミングは、図８（Ｇ）に示されるように、音響信号波形の繰返しタイミングに対して常に同期させることができる。このようにして、本実施形態では、ＣＰＵ２０１の負荷が軽いにもかかわらず、ＤＳＰ２０６でのディレイ処理に対する長期的なずれを回避することできるのである。
【００７０】
図２のＣＰＵ２０１がＣＰＵ  ＲＯＭ２０２に記憶されたディレイ同期プログラムに従って、以上の基本動作を実現するディレイ同期処理を含む電子楽器制御処理について、以下に詳細に説明する。
【００７１】
図９（ａ）は、ＣＰＵ  ＲＯＭ２０２が記憶する、前述した図５（ａ）に例示したＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬ（テンポ−カウントテーブル）と、前述した図７（ａ）に例示したＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（同期拍数テーブル）の各データ構成例（定数値）を示す図である。図９（ｂ）は、ＣＰＵ  ＲＡＭ２０３に記憶される、ＣＰＵ２０１による主にディレイ同期処理において使用される主要変数の一覧を示す図である。図１０（ａ）は、前述したＣＰＵ２０１内のフリーランニングタイマカウンタ３０２の値を示すレジスタＣＰＵ＿ＦＲＥＥ＿ＴＩＭＥＲと、ＣＰＵ２０１内のシーケンスクロックカウンタ３０１に設定されるシーケンスクロックカウント上限値を示すレジスタＣＰＵ＿ＴＩＭＥＲ＿ＣＯＵＮＴを示す図である。図１０（ｂ）は、ＣＰＵ２０１がＤＳＰ２０６と通信する場合のＤＳＰ２０６側のレジスタの一覧を示す図である。これらのレジスタは、ＣＰＵ  Ｉ／Ｆ２１５（図２参照）により、ＣＰＵ２０１側からはメモリとしてアクセスすることができる。以上の各データ構成の詳細については、後述する。
【００７２】
図１１は、本実施形態において、ＣＰＵ２０１が実行する電子楽器制御処理の全体処理例を示すフローチャートである。
【００７３】
電源投入後、ＣＰＵ２０１は、まず初期化処理を実行する（ステップＳ１１０１）。この初期化処理の詳細については、図１２のフローチャートの説明で後述する。
【００７４】
初期化処理の後、ＣＰＵ２０１は、ステップＳ１１０２からステップＳ１１１０までの各処理を順番に繰り返す無限ループに入る。ＣＰＵ２０１はまず、ユーザーインターフェース処理（以下「ユーザＩ／Ｆ処理」と表記）を実行し、図１の鍵盤１０１、機能選択操作子１０２、音色選択ボタン１０３、ベンダ／モジュレーション・ホイール１０４に対するユーザによる操作を検知する（ステップＳ１１０２）。
【００７５】
次にＣＰＵ２０１は、ステップＳ１１０２でのユーザＩ／Ｆ処理の結果、ユーザが図１の機能選択操作子１０２のＴＥＭＰＯエリアのＤＯＷＮボタン又はＵＰボタンを操作することにより、テンポ設定イベントが発生したか否かを判定する（ステップＳ１１０３）。この判定結果が肯定的（以下「Ｙｅｓ」と表記）の場合には、ＣＰＵ２０１は、テンポ設定処理を実行する（ステップＳ１１０４）。このとき、ＣＰＵ２０１は、ユーザが機能選択操作子１０２のＴＥＭＰＯエリアのＤＯＷＮボタン又はＵＰボタンを押下することにより、キー・スキャナ２１１を介して取得したテンポ変化量を、ＣＰＵ  ＲＡＭ２０３上の変数Ｄにセットする。ＵＰボタンが押下された場合にはＤ＝＋１がセットされ、ＤＯＷＮボタンが押下された場合いはＤ＝−１がセットされる。テンポ設定処理の詳細については、図１３のフローチャートの説明で後述する。ステップＳ１１０３の判定結果が否定的（以下「Ｎｏ」と表記）の場合には、ＣＰＵ２０１は、ステップＳ１１０４のテンポ設定処理は実行せずにスキップする。
【００７６】
次にＣＰＵ２０１は、ステップＳ１１０２でのユーザＩ／Ｆ処理の結果、ユーザが機能選択操作子１０２のＤＥＬＡＹエリアの各ボタン又はノブを操作することにより、ディレイ設定イベントが発生したか否かを判定する（ステップＳ１１０５）。この判定結果がＹｅｓの場合には、ＣＰＵ２０１は、ディレイ設定処理を実行する（ステップＳ１１０６）。このとき、ＣＰＵ２０１は、ユーザが機能選択操作子１０２のＤＥＬＡＹエリアの各ボタン又はノブを操作することにより、キー・スキャナ２１１を介して取得した変更されたボタン又はノブに対応する操作種別とその値をそれぞれ、ＣＰＵ  ＲＡＭ２０３上の変数ｐ及び変数ｖにセットする。ディレイ設定処理の詳細については、図１４〜図１６のフローチャートの説明で後述する。ステップＳ１１０６の判定結果がＮｏの場合には、ＣＰＵ２０１は、ステップＳ１１０６のディレイ設定変更処理は実行せずにスキップする。
【００７７】
次にＣＰＵ２０１は、ステップＳ１１０２でのユーザＩ／Ｆ処理の結果、ユーザが鍵盤１０１を操作することにより演奏イベントが発生したか否か、又はＭＩＤＩ  Ｉ／Ｆ２１４を介して押鍵又は離鍵のＭＩＤＩ入力が受信されたか否かを判定する（ステップＳ１１０７）。この判定結果がＹｅｓの場合には、ＣＰＵ２０１は、押鍵／離鍵処理を実行する（ステップＳ１１０８）。ＣＰＵ２０１は、例えばユーザが鍵盤１０１を操作することによりキー・スキャナ２１１を介して取得した音高情報及びベロシティ情報に基づいて、又はＭＩＤＩ  Ｉ／Ｆ２１４を介して取得したノートオンイベントのＭＩＤＩデータの音高情報及びベロシティ情報に基づいて、音源ＬＳＩ２０４内の波形発生器２０５に対して、発音指示であるノートオンイベントや、消音指示であるノートオフイベントを発行する。この処理は、一般的な処理であるため、その詳細は省略する。ステップＳ１１０７の判定結果がＮｏの場合には、ＣＰＵ２０１は、ステップＳ１１０８のディレイ設定変更処理は実行せずにスキップする。
【００７８】
次にＣＰＵ２０１は、自動演奏定常処理を実行する（ステップＳ１１０９）。自動演奏定常処理は、前述したシーケンスクロック割込みに基づいて、自動演奏を進行させる処理である。自動演奏定常処理の詳細については、図１７のフローチャートの説明で後述する。
【００７９】
最後にＣＰＵ２０１は、音源定常処理を実行する（ステップＳ１１１０）。音源定常処理では、例えば図１の音色選択ボタン１０３が押された場合に対応する音色変更の処理や、図１のベンダ／モジュレーション・ホイール１０４が操作された場合に対応するベロシティ変更やピッチ変更の処理等の、音源ＬＳＩ２０４に対して指示を行う処理が実行される。この処理は、一般的な処理であるため、その詳細は省略する。
【００８０】
図１２は、図１１のステップＳ１１０１の初期化処理の詳細例を示すフローチャートである。
【００８１】
図１２において、ＣＰＵ２０１はまず、ＣＰＵ  Ｉ／Ｆ２１５を介して、ディレイ処理を実行する音源ＬＳＩ２０４内のＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＩＮＩＴ（図１０（ｂ）参照）に、値１を書き込む（ステップＳ１２０１）。ＤＳＰ２０６は、レジスタＤＳＰ＿ＤＥＬＡＹ＿ＩＮＩＴの値が１になると、ＤＳＰ２０６に接続されるＤＳＰ  ＲＡＭ２０８（遅延メモリ）の内容や、ライトポインタ生成部６０５で生成されるポインタ値等を初期化し、レジスタＤＳＰ＿ＤＥＬＡＹ＿ＩＮＩＴの値を０に戻す。
【００８２】
次にＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３の変数領域の各変数値（図９（ｂ）の一覧を参照）を０に初期化する（ステップＳ１２０２）。この結果、自動演奏を行っている状態か否かを示す変数ＳＥＱ＿ＲＵＮ（図９（ｂ）参照）の値が０に初期化されることにより、自動演奏は停止状態にされる。また、ディレイホールドモードか否かを示す変数ＤＥＬＡＹ＿ＨＯＬＤ（図９（ｂ）参照）の値が０に初期化されることにより、ディレイホールドモードはオフにされる。更に、ディレイテンポシンクロナイズドモードか否かを示す変数ＤＥＬＡＹ＿ＳＹＮＣ（図９（ｂ）参照）の値が０に初期化されることにより、ディレイテンポシンクロナイズドモードはオフにされる。また自動演奏を司るシーケンスクロック割込みの割込み回数を示すシーケンスカウンタ変数ＳＥＱ＿ＣＬＯＣＫ（図９（ｂ）参照）の値が０に初期化される。なお、テンポを示す変数ＴＥＭＰＯ（図９（ｂ）参照）については、初期値として１２０（ＢＰＭ）が設定される。
【００８３】
その後、ＣＰＵ２０１は、テンポ設定処理を実行する。このとき、ＣＰＵ２０１は、テンポ変化量＝０をＣＰＵ  ＲＡＭ２０３上の変数Ｄにセットする。テンポ設定処理の詳細については、図１３のフローチャートの説明で後述するが、この処理において、ＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３の変数ＴＥＭＰＯ（図９（ｂ）参照）に設定されたテンポ初期値１２０（ＢＰＭ）によって、ＣＰＵ  ＲＯＭ２０２に記憶されるＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬ（図９（ａ））を参照することにより、ＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴ項目の値＝１０４２を取得し（図５（ａ）参照）、その値をＣＰＵ２０１のレジスタＣＰＵ＿ＴＩＭＥＲ＿ＣＯＵＮＴ（図１０（ａ）参照）にセットする（後述する図１３のステップＳ１３０６参照）。このレジスタＣＰＵ＿ＴＩＭＥＲ＿ＣＯＵＮＴの値として、ＣＰＵ２０１内のシーケンスクロックカウンタ３０１にシーケンスクロックカウント上限値＝１０４２が初期設定される。
【００８４】
次にＣＰＵ２０１は、図１の機能選択操作子１０２のＤＥＬＡＹエリアのＴＩＭＥノブの操作位置を、図２のキー・スキャナ２１１を介して読み込み、ディレイタイムを示すＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＴＩＭＥ（図９（ｂ）参照）に格納する（ステップＳ１２０４）。ディレイタイムの値域は、０〜ＦＦＦＦＨ（「Ｈ」は１６進数を表す）の範囲であり、この範囲が０〜２０００ｍｓｅｃの時間範囲に対応する。従って、ＤＥＬＡＹ＿ＴＩＭＥをｍｓｅｃで表現するためには、下記（１１）式の変換を行えばよい。
【００８５】
ディレイタイム（ｍｓｅｃ）＝
ＤＥＬＡＹ＿ＴＩＭＥ×２０００／ＦＦＦＦＨ  ・・（１１）
【００８６】
次にＣＰＵ２０１は、図１の機能選択操作子１０２のＤＥＬＡＹエリアのＲＥＰＥＡＴノブの操作位置を、図２のキー・スキャナ２１１を介して読み込み、ディレイのフィードバック量を示すＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫ（図９（ｂ）参照）に格納する（ステップＳ１２０５）。
【００８７】
次にＣＰＵ２０１は、図１の機能選択操作子１０２のＤＥＬＡＹエリアのＬＥＶＥＬノブの操作位置を、図２のキー・スキャナ２１１を介して読み込み、ディレイ音のレベルを示すＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＬＥＶＥＬ（図９（ｂ）参照）に格納する（ステップＳ１２０６）。
【００８８】
次にＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３上のパラメータ変数ｐに、ディレイホールドモードを示す文字列‘ＤＥＬＡＹ＿ＨＯＬＤ’を設定し、値変数ｖにディレイホールドモードでないことを示す値０を設定して、ディレイ設定処理を実行する（ステップＳ１２０７）。ｐ＝‘ＤＥＬＡＹ＿ＨＯＬＤ’によりディレイ設定処理の詳細を示す図１４のフローチャートにおいて後述するステップＳ１４０２が実行されることにより図１５（ａ）のフローチャートで示されるディレイホールドモード設定処理（ＢＥＡＴ処理）が実行される。これにより、ディレイホールドモードでない状態に対応して、ディレイ入力音量調整用のアンプ４０２（図４（ａ）参照）のゲインを示すＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＩＮＰＵＴ（図１０（ｂ）参照）に、値ＦＦＦＦＨ（倍率１．０）が初期設定される。また、フィードバック量調整用のアンプ４０４（図４（ａ）参照）のゲインを示すＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫに、図１２のステップＳ１２０５でＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫに設定されたＲＥＰＥＡＴノブの初期操作値が初期設定される（後述する図１５（ａ）のステップＳ１５０３参照）。
【００８９】
次にＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３上のパラメータ変数ｐに、ディレイテンポシンクロナイズドモードを示す文字列‘ＤＥＬＡＹ＿ＳＹＮＣ’を設定し、値変数ｖにディレイテンポシンクロナイズドモードでないことを示す値０を設定して、ディレイ設定処理を実行する（ステップＳ１２０８）。ｐ＝‘ＤＥＬＡＹ＿ＳＹＮＣ’によりディレイ設定処理の詳細を示す図１４のフローチャートにおいて後述するステップＳ１４０６が実行されることにより図１６（ａ）のフローチャートで示されるディレイテンポシンクロナイズドモード設定処理（ＳＹＮＣ処理）が実行される。これにより、ディレイシンクロナイズドモードでない状態に対応して、前述したディレイタイムサンプリング数レジスタ６０２（図６参照）に対応するＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥ（図１０（ｂ）参照）に、図１２のステップＳ１２０４でＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＴＩＭＥに設定されたＴＩＭＥノブの初期操作値に対応する時間値をＤＳＰ２０６の４４．１ＫＨｚのサンプリングクロックでサンプリングしたときのサンプル数が初期設定される（前述した（１１）式と後述する図１６（ａ）のステップＳ１６０４参照）。
【００９０】
次にＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３上のパラメータ変数ｐに、ディレイタイムを示す文字列‘ＤＥＬＡＹ＿ＴＩＭＥ’を設定し、値変数ｖにＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＴＩＭＥが示す値を設定して、ディレイ設定処理を実行する（ステップＳ１２０９）。ｐ＝‘ＤＥＬＡＹ＿ＴＩＭＥ’によりディレイ設定処理の詳細を示す図１４のフローチャートにおいて後述するステップＳ１４０３が実行されることにより図１５（ｂ）のフローチャートで示されるディレイタイム設定処理（ＴＩＭＥ処理）が実行される。これにより、前述したディレイタイムサンプリング数レジスタ６０２（図６参照）に対応するＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥ（図１０（ｂ）参照）に、ＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＴＩＭＥに得られているＴＩＭＥノブの操作値に対応する時間値をＤＳＰ２０６の４４．１ＫＨｚのサンプリングクロックでサンプリングしたときのサンプル数が初期設定される（前述した（１１）式と後述する図１５（ｂ）のステップＳ１５１１及びＳ１５１３参照）。
【００９１】
次にＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３上のパラメータ変数ｐに、ディレイフィードバックを示す文字列‘ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫ’を設定し、値変数ｖにＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫが示す値を設定して、ディレイ設定処理を実行する（ステップＳ１２１０）。ｐ＝‘ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫ’によりディレイ設定処理の詳細を示す図１４のフローチャートにおいて後述するステップＳ１４０４が実行されることにより図１５（ｃ）のフローチャートで示されるディレイフィードバック設定処理（ＦＥＥＤＢＡＣＫ処理）が実行される。これにより、フィードバック量調整用のアンプ４０４（図４（ａ）参照）のゲインを示すＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫ（図１０（ｂ）参照）に、図１２のステップＳ１２０５でＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫに設定されたＲＥＰＥＡＴノブの初期操作値に対応するフィードバック量が初期設定される。
【００９２】
更にＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３上のパラメータ変数ｐに、ディレイレベルを示す文字列‘ＤＥＬＡＹ＿ＬＥＶＥＬ’を設定し、値変数ｖにＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＬＥＶＥＬが示す値を設定して、ディレイ設定処理を実行する（ステップＳ１２１１）。ｐ＝‘ＤＥＬＡＹ＿ＬＥＶＥＬ’によりディレイ設定処理の詳細を示す図１４のフローチャートにおいて後述するステップＳ１４０５が実行されることにより図１５（ｄ）のフローチャートで示されるディレイレベル設定処理（ＬＥＶＥＬ処理）が実行される。これにより、ディレイ出力音量調整用のアンプ４０３（図４（ａ）参照）のゲインを示すＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＯＵＴＰＵＴ（図１０（ｂ）参照）に、図１２のステップＳ１２０６でＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＬＥＶＥＬに設定されたＬＥＶＥＬノブの初期操作値に対応するレベル量が初期設定される。
【００９３】
最後に、ＣＰＵ２０１は、本実施形態のディレイ同期処理以外に関連するＣＰＵ  ＲＡＭ２０３上の変数や音源ＬＳＩ２０４上のレジスタ等を初期化する、その他の初期化処理を実行する（ステップＳ１２１２）。その後、ＣＰＵ２０１は、図１２のフローチャートで示される図１１のステップＳ１１０１の初期化処理を終了する。
【００９４】
図１３は、図１１のステップＳ１１０４又はステップＳ１１０１の初期化処理内の図１２のステップＳ１２０３で実行されるテンポ設定処理の詳細例を示すフローチャートである。
【００９５】
図１３において、ＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３上の変数ＴＥＭＰＯに格納されているテンポ値を、ＣＰＵ  ＲＡＭ２０３上の変数Ｄで引き渡されたテンポ操作量の値だけ増減（）させることにより、テンポ値を変更する（ステップＳ１３０１）。ユーザが図１の機能選択操作子１０２のＴＥＭＰＯエリアのＵＰキーを押下した場合には、Ｄ＝＋１が引き渡されることにより変数ＴＥＭＰＯの値が＋１される。ユーザがＴＥＭＰＯエリアのＤＯＷＮキーを押下した場合には、Ｄ＝−１が引き渡されることにより変数ＴＥＭＰＯの値が−１される。
【００９６】
次にＣＰＵ２０１は、更新された変数ＴＥＭＰＯの値が最低値３０を下回ったか否かを判定し（ステップＳ１３０２）、ステップＳ１３０２の判定がＹｅｓならば、変数ＴＥＭＰＯの値を最低値３０に設定する（ステップＳ１３０３）。ステップＳ１３０２の判定がＮｏならば、ＣＰＵ２０１は、ステップＳ１３０３は実行せずにスキップする。
【００９７】
次にＣＰＵ２０１は、更新された変数ＴＥＭＰＯの値が最高値３００を上回ったか否かを判定し（ステップＳ１３０４）、ステップＳ１３０４の判定がＹｅｓならば、変数ＴＥＭＰＯの値を最高値３００に設定する（ステップＳ１３０５）。ステップＳ１３０４の判定がＮｏならば、ＣＰＵ２０１は、ステップＳ１３０５は実行せずにスキップする。
【００９８】
続いてＣＰＵ２０１は、ステップＳ１３０１からＳ１３０５で更新された変数ＴＥＭＰＯの値によって、ＣＰＵ  ＲＯＭ２０２に記憶されるＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬ（図９（ａ））を参照することにより、ＴＥＭＰＯ値に対応するエントリのＳＥＱ＿ＣＬＯＣＫ＿ＣＯＵＮＴ項目の値を取得し（図５（ａ）参照）、その値をＣＰＵ２０１のレジスタＣＰＵ＿ＴＩＭＥＲ＿ＣＯＵＮＴ（図１０（ａ）参照）にセットする（ステップＳ１３０６）。このレジスタＣＰＵ＿ＴＩＭＥＲ＿ＣＯＵＮＴの更新値として、ＣＰＵ２０１内のシーケンスクロックカウンタ３０１にシーケンスクロックカウント上限値が更新される。
【００９９】
その後、ＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＳＹＮＣの値が１であるか否か、すなわち、ディレイホールドモードが現在設定されているか否かを判定する（ステップＳ１３０７）。
【０１００】
ステップＳ１３０７の判定がＹｅｓならば、ＣＰＵ２０１はまず、ステップＳ１３０１からＳ１３０５で更新された変数ＴＥＭＰＯの値によって、ＣＰＵ  ＲＯＭ２０２に記憶されるＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬ（図９（ａ））を参照することにより、ＴＥＭＰＯ値に対応するエントリのＤＥＬＡＹ＿ＣＯＵＮＴ項目値、すなわち、ディレイタイムを更新テンポ値の１拍に同期させたときのサンプリングクロック数をＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬ（ＴＥＭＰＯ）．ＤＥＬＡＹ＿ＣＯＵＮＴとして取得し、ＣＰＵ  ＲＡＭ２０３上の変数ａに格納する。次に、ＣＰＵ２０１は、ユーザの操作によって図１の機能選択操作子１０２のＤＥＬＡＹエリアのＢＥＡＴノブによって選択され、ＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴに格納されている設定値によって、ＣＰＵ  ＲＯＭ２０２に記憶されているＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（図９（ａ））を参照することにより、ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ値に対応するエントリのＮＵＭＥＲＡＴＯＲ項目値とＤＥＮＯＭＩＮＡＴＯＲ項目値をそれぞれＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＮＵＭＥＲＡＴＯＲ及びＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＤＥＮＯＭＩＮＡＴＯＲとして取得し、それぞれＣＰＵ  ＲＡＭ２０３上の変数ｎ及びｄに格納する（以上、ステップＳ１３０８）。
【０１０１】
そして、ＣＰＵ２０１は、下記（１２）式により、前述したディレイタイムカウンタ６０１のカウンタ上限値であるディレイタイムサンプリング数６０８（図６）を算出し、前述したディレイタイムサンプリング数レジスタ６０２（図６参照）に対応するＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥ（図１０（ｂ）参照）に格納する（ステップＳ１３０９）。
【０１０２】
ＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥ＝ａ×ｎ／ｄ  ・・（１２）
【０１０３】
ステップＳ１３０８とＳ１３０９により、指定されたテンポの指定された同期拍数のディレイタイムに対応するディレイタイムサンプリング数６０８が算出されて、ＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥに格納される。その後、ＣＰＵ２０１は、図１３のフローチャートで示されるテンポ設定処理を終了する。
【０１０４】
ステップＳ１３０７の判定がＮｏならば、ＣＰＵ２０１は、ステップＳ１３０８とＳ１３０９は実行せずにスキップし、図１３のフローチャートで示されるテンポ設定処理を終了する。
【０１０５】
図１４は、図１１のステップＳ１１０６又はステップＳ１１０１の初期化処理内の図１２のステップＳ１２０７からＳ１２１１で実行されるディレイ設定処理の詳細例を示すフローチャートである。
【０１０６】
図１４において、ＣＰＵ２０１はまず、ＣＰＵ  ＲＡＭ２０３上の変数ｐで引き渡された設定処理種別、すなわちユーザによる図１の機能選択操作子１０２のＤＥＬＡＹエリアでの操作種別を判別する（ステップＳ１４０１）。
【０１０７】
ＣＰＵ２０１は、変数ｐ＝‘ＤＥＬＡＹ＿ＨＯＬＤ’、すなわちＨＯＬＤボタンが押下されたならばステップＳ１４０２のディレイホールドモード設定処理（ＨＯＬＤ処理）を実行する。このとき、ＨＯＬＤボタンのＬＥＤがオフの状態で更にＨＯＬＤボタンが押下された場合には、変数ｖにディレイホールドモードがオフからオンになったことを示す値１が引き渡される。逆に、ＨＯＬＤボタンのＬＥＤがオンの状態で更にＨＯＬＤボタンが押下された場合には、変数ｖにディレイホールドモードがオンからオフになったことを示す値１が引き渡される。
【０１０８】
ＣＰＵ２０１は、変数ｐ＝‘ＤＥＬＡＹ＿ＴＩＭＥ’、すなわちＴＩＭＥノブが操作されたならばステップＳ１４０３のディレイタイム設定処理（ＴＩＭＥ処理）を実行する。このとき、変数ｖには、ＴＩＭＥノブの操作位置に対応する０〜ＦＦＦＦＨの範囲の値が引き渡される。
【０１０９】
ＣＰＵ２０１は、変数ｐ＝‘ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫ’、すなわちＲＥＰＥＡＴノブが操作されたならばステップＳ１４０４のディレイフィードバック設定処理（ＦＥＥＤＢＡＣＫ処理）を実行する。このとき、変数ｖには、ＲＥＰＥＡＴノブの操作位置に対応する０〜ＦＦＦＦＨの範囲の値が引き渡される。
【０１１０】
ＣＰＵ２０１は、変数ｐ＝‘ＤＥＬＡＹ＿ＬＥＶＥＬ’、すなわちＬＥＶＥＬノブが操作されたならばステップＳ１４０５のディレイレベル設定処理（ＬＥＶＥＬ処理）を実行する。このとき、変数ｖには、ＬＥＶＥＬノブの操作位置に対応する０〜ＦＦＦＦＨの範囲の値が引き渡される。
【０１１１】
ＣＰＵ２０１は、ｐ＝‘ＤＥＬＡＹ＿ＳＹＮＣ’、すなわちＳＹＮＣボタンが操作されたならばステップＳ１４０６のディレイテンポシンクロナイズドモード設定処理（ＳＹＮＣ処理）を実行する。このとき、ＳＹＮＣボタンのＬＥＤがオフの状態で更にＳＹＮＣボタンが押下された場合には、変数ｖにディレイテンポシンクロナイズドモードがオフからオンになったことを示す値１が引き渡される。逆に、ＳＹＮＣボタンのＬＥＤがオンの状態で更にＳＹＮＣボタンが押下された場合には、変数ｖにディレイテンポシンクロナイズドモードがオンからオフになったことを示す値１が引き渡される。
【０１１２】
ＣＰＵ２０１は、ｐ＝‘ＤＥＬＡＹ＿ＢＥＡＴ’、すなわちＢＥＡＴノブが操作されたならばステップＳ１４０７のディレイテンポ同期拍数設定処理（ＢＥＡＴ処理）を実行する。このとき、変数ｖには、ＢＥＡＴノブの操作位置に対応する０、１、２、３、４、５、６、７の何れかの設定値が引き渡される。
【０１１３】
各設定処理が終了した後、ＣＰＵ２０１は、図１４のフローチャートで示されるディレイ設定処理を終了する。
【０１１４】
図１５（ａ）は、図１４のステップＳ１４０２のディレイホールドモード設定処理（ＨＯＬＤ処理）の詳細例を示すフローチャートである。この処理は、ユーザが図１の機能選択操作子１０２のＤＥＬＡＹエリアのＨＯＬＤボタンを押下した場合に実行される。ユーザは、ＨＯＬＤボタンを押下してそのＬＥＤを点灯又は消灯させることにより、前述のディレイホールドモードのオン／オフを切り替えることができる。このとき、前述したように、ＨＯＬＤボタンのＬＥＤが消灯されている状態で更にＨＯＬＤボタンが押下された場合には、変数ｖにディレイホールドモードがオフからオンになったことを示す値１が引き渡される。逆に、ＨＯＬＤボタンのＬＥＤが点灯されている状態で更にＨＯＬＤボタンが押下された場合には、変数ｖにディレイホールドモードがオンからオフになったことを示す値１が引き渡される。
【０１１５】
ＣＰＵ２０１はまず、変数ｖで引き渡された値を、ディレイホールドモードか否かを示す変数ＤＥＬＡＹ＿ＨＯＬＤ（図９（ｂ）参照）にセットする（ステップＳ１５０１）．
【０１１６】
次にＣＰＵ２０１は、ステップＳ１５０１で変数ＤＥＬＡＹ＿ＨＯＬＤにセットされた値を判定する（ステップＳ１５０２）。
【０１１７】
ＣＰＵ２０１は、ステップＳ１５０２で、変数ＤＥＬＡＹ＿ＨＯＬＤにセットされた値が０である、すなわち、ディレイホールドモードがオフされたと判定した場合には、ディレイ入力音量調整用のアンプ４０２（図４（ａ）参照）のゲインを示すＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＩＮＰＵＴ（図１０（ｂ）参照）に、値ＦＦＦＦＨ（倍率１．０）を設定する。これにより、ディレイ入力音量調整用のアンプ４０２の増幅率が１．０倍に設定され、それ以降入力された音響信号４０７にディレイ効果がかかる状態になる。また、ＣＰＵ２０１は、フィードバック量調整用のアンプ４０４（図４（ａ）参照）のゲインを示すＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫ（図１０（ｂ）参照）に、ＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫに設定されているフィードバック量を設定する（以上、ステップＳ１５０３）。これにより、図１の機能選択操作子１０２のＤＥＬＡＹエリアのＲＥＰＥＡＴノブによるフィードバック調整が有効となる。その後、ＣＰＵ２０１は、図１５（ａ）のフローチャートで示される図１４のステップＳ１４０２のディレイホールドモード設定処理（ＨＯＬＤ処理）を終了する。
【０１１８】
ＣＰＵ２０１は、ステップＳ１５０２で、変数ＤＥＬＡＹ＿ＨＯＬＤにセットされた値が１である、すなわちディレイホールドモードがオンされたと判定した場合には、ディレイ入力音量調整用のアンプ４０２（図４（ａ）参照）のゲインを示すＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＩＮＰＵＴ（図１０（ｂ）参照）に、値０を設定する。つまり、図４（ａ）において、ディレイホールドモード時には、遅延装置４０１に新たな音響信号の入力４０７は流入しないように設定される。また、ＣＰＵ２０１は、フィードバック量調整用のアンプ４０４（図４（ａ）参照）のゲインを示すＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫ（図１０（ｂ）参照）に、値ＦＦＦＦＨ（倍率１．０）を設定する。すなわち、図４（ａ）において、ディレイホールドモード時には、遅延装置４０１から出力される音響信号が全て遅延装置４０１の入力側にフィードバックされる。これにより、前述したサンプルルーパーの機能が実現される。その後、ＣＰＵ２０１は、図１５（ａ）のフローチャートで示される図１４のステップＳ１４０２のディレイホールドモード設定処理（ＨＯＬＤ処理）を終了する。
【０１１９】
図１５（ｂ）は、図１４のステップＳ１４０３のディレイタイム設定処理（ＴＩＭＥ処理）の詳細例を示すフローチャートである。この処理は、ユーザが図１の機能選択操作子１０２のＤＥＬＡＹエリアのＴＩＭＥノブを操作した場合に実行される。ユーザは、ＤＥＬＡＹエリアのＳＹＮＣボタンのＬＥＤを消灯させてディレイテンポシンクロナイズドモードをオフしているときに、ＴＩＭＥノブの操作により、ディレイタイムを直接、例えば、０〜２ｓｅｃの間で指定することができる。このとき、前述したように、変数ｖには、ＴＩＭＥノブの操作位置に対応する０〜ＦＦＦＦＨの範囲の値が引き渡される。
【０１２０】
ＣＰＵ２０１はまず、前述した（１１）式により、変数ｖで引き渡された変数ＤＥＬＡＹ＿ＴＩＭＥの値を、１６進値からｍｓｅｃ値に変換して、新たに変数ｖに格納する（ステップＳ１５１１）。
【０１２１】
次にＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＳＹＮＣの値を判別する（ステップＳ１５１２）。
【０１２２】
ＣＰＵ２０１は、ステップＳ１５１２で、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされた値が０である、すなわち、ディレイテンポシンクロナイズドモードがオフであると判定した場合には、下記（１３）式を実行する（ステップＳ１５１３）。
【０１２３】
ＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥ＝
（ｖ／１０００）×４４１００  ・・（１３）
【０１２４】
これにより、前述したディレイタイムサンプリング数レジスタ６０２（図６参照）に対応するＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥ（図１０（ｂ）参照）に、ＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＴＩＭＥに得られているＴＩＭＥノブの操作値に対応する時間値をＤＳＰ２０６の４４．１ＫＨｚのサンプリングクロックでサンプリングしたときのサンプル数が格納される。その後、ＣＰＵ２０１は、図１５（ｂ）のフローチャートで示される図１４のステップＳ１４０３のディレイタイム設定処理（ＴＩＭＥ処理）を終了する。
【０１２５】
ＣＰＵ２０１は、ステップＳ１５１２で、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされた値が１である、すなわち、ディレイテンポシンクロナイズドモードがオンであると判定した場合には、前述したようにディレイタイムはテンポに同期して決定されることになり、ＴＩＭＥノブの操作は無視されるため、そのまま図１５（ｂ）のフローチャートで示される図１４のステップＳ１４０３のディレイタイム設定処理（ＴＩＭＥ処理）を終了する。
【０１２６】
図１５（ｃ）は、図１４のステップＳ１４０４のディレイフィードバック設定処理（ＦＥＥＤＢＡＣＫ処理）の詳細例を示すフローチャートである。この処理は、ユーザが図１の機能選択操作子１０２のＤＥＬＡＹエリアのＲＥＰＥＡＴノブを操作した場合に実行される。ユーザは、ＤＥＬＡＹエリアのＨＯＬＤボタンのＬＥＤを消灯させていてディレイホールドモードをオフしているときに、ＲＥＰＥＡＴノブの操作により、ディレイのフィードバック量を調整することができる。ここで指定された値により、図４（ａ）のフィードバック量調整用のアンプ４０４のゲインが決定される。このとき、前述したように、変数ｖには、ＲＥＰＥＡＴノブの操作位置に対応する０〜ＦＦＦＦＨの範囲の値が引き渡される。
【０１２７】
ＣＰＵ２０１はまず、変数ｖで引き渡された値を変数ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫに格納する（ステップＳ１５２１）。
【０１２８】
次にＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＨＯＬＤの値を判別する（ステップＳ１５２２）。
【０１２９】
ＣＰＵ２０１は、ステップＳ１５２２で、変数ＤＥＬＡＹ＿ＨＯＬＤにセットされた値が０である、すなわち、ディレイホールドモードがオフであると判定した場合には、ＤＳＰ２０６上のフィードバック量調整用のアンプ４０４（図４（ａ）参照）のゲインを示すＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫ（図１０（ｂ）参照）に、変数ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫに設定されているフィードバック量を設定する（以上、ステップＳ１５２３）。その後、ＣＰＵ２０１は、図１５（ｃ）のフローチャートで示される図１４のステップＳ１４０４のディレイフィードバック設定処理（ＦＥＥＤＢＡＣＫ処理）を終了する。
【０１３０】
ＣＰＵ２０１は、ステップＳ１５２２で、変数ＤＥＬＡＹ＿ＨＯＬＤにセットされた値が１である、すなわち、ディレイホールドモードがオンであると判定した場合には、ＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＦＥＥＤＢＡＣＫには、図１５（ａ）のディレイホールドモード設定処理（ＨＯＬＤ処理）のステップＳ１５０４で最大値ＦＦＦＦＨが設定されるため、ＣＰＵ２０１は、ステップＳ１５２３の処理は実行せずにスキップし、図１５（ｃ）のフローチャートで示される図１４のステップＳ１４０４のディレイフィードバック設定処理（ＦＥＥＤＢＡＣＫ処理）を終了する。
【０１３１】
図１５（ｄ）は、図１４のステップＳ１４０５のディレイレベル設定処理（ＬＥＶＥＬ処理）の詳細例を示すフローチャートである。この処理は、ユーザが図１の機能選択操作子１０２のＤＥＬＡＹエリアのＬＥＶＥＬノブを操作した場合に実行される。ユーザは、ＬＥＶＥＬノブの操作により、ディレイ信号のレベルを調整することができる。ここで指定された値により、図４（ａ）のディレイ出力音量調整用のアンプ４０３のゲインが決定される。このとき、前述したように、変数ｖには、ＬＥＶＥＬノブの操作位置に対応する０〜ＦＦＦＦＨの範囲の値が引き渡される。
【０１３２】
ＣＰＵ２０１はまず、変数ｖで引き渡された値を変数ＤＥＬＡＹ＿ＬＥＶＥＬに格納する（ステップＳ１５３１）。
【０１３３】
次にＣＰＵ２０１は、ディレイ出力音量調整用のアンプ４０３（図４（ａ）参照）のゲインを示すＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＯＵＴＰＵＴ（図１０（ｂ）参照）に、変数ＤＥＬＡＹ＿ＬＥＶＥＬに設定されたＬＥＶＥＬノブの操作値に対応するレベル量を設定する（ステップＳ１５３２）。その後、ＣＰＵ２０１は、図１５（ｃ）のフローチャートで示される図１４のステップＳ１４０５のディレイレベル設定処理（ＬＥＶＥＬ処理）を終了する。
【０１３４】
図１６（ａ）は、図１４のステップＳ１４０６のディレイテンポシンクロナイズドモード設定処理（ＳＹＮＣ処理）の詳細例を示すフローチャートである。この処理は、ユーザが図１の機能選択操作子１０２のＤＥＬＡＹエリアのＳＹＮＣボタンを押下した場合に実行される。ユーザは、ＳＹＮＣボタンを押下してそのＬＥＤを点灯又は消灯させることにより、前述のディレイテンポシンクロナイズドモードのオン／オフを切り替えることができる。このとき、前述したように、ＳＹＮＣボタンのＬＥＤが消灯されている状態で更にＳＹＮＣボタンが押下された場合には、変数ｖにディレイテンポシンクロナイズドモードがオフからオンになったことを示す値１が引き渡される。逆に、ＳＹＮＣボタンのＬＥＤが点灯されている状態で更にＳＹＮＣボタンが押下された場合には、変数ｖにディレイテンポシンクロナイズドモードがオンからオフになったことを示す値１が引き渡される。
【０１３５】
ＣＰＵ２０１はまず、変数ｖで引き渡された値を、ディレイテンポシンクロナイズドモードか否かを示す変数ＤＥＬＡＹ＿ＳＹＮＣ（図９（ｂ）参照）にセットする（ステップＳ１６０１）。
【０１３６】
次にＣＰＵ２０１は、ステップＳ１６０１で変数ＤＥＬＡＹ＿ＳＹＮＣにセットされた値を判定する（ステップＳ１６０２）。
【０１３７】
ＣＰＵ２０１は、ステップＳ１６０２で、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされた値が１である、すなわち、ディレイテンポシンクロナイズドモードがオンされたと判定した場合には、以下の動作を実行する（ステップＳ１６０３）。ＣＰＵ２０１はまず、変数ＴＥＭＰＯに設定されている現在のテンポ値によって、ＣＰＵ  ＲＯＭ２０２に記憶されるＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬ（図９（ａ））を参照することにより、ＴＥＭＰＯ値に対応するエントリのＤＥＬＡＹ＿ＣＯＵＮＴ項目値、すなわち、ディレイタイムを更新テンポ値の１拍に同期させたときのサンプリングクロック数を、ＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬ（ＴＥＭＰＯ）．ＤＥＬＡＹ＿ＣＯＵＮＴとして取得する。また、ＣＰＵ２０１は、ユーザの操作によって図１の機能選択操作子１０２のＤＥＬＡＹエリアのＢＥＡＴノブによって選択され、ＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴに格納されている設定値によって、ＣＰＵ  ＲＯＭ２０２に記憶されているＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（図９（ａ））を参照することにより、ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ値に対応するエントリのＮＵＭＥＲＡＴＯＲ項目値とＤＥＮＯＭＩＮＡＴＯＲ項目値をそれぞれ、ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＮＵＭＥＲＡＴＯＲ及びＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＤＥＮＯＭＩＮＡＴＯＲとして取得する。そして、ＣＰＵ２０１は、下記（１４）式により、前述したディレイタイムカウンタ６０１のカウンタ上限値であるディレイタイムサンプリング数６０８（図６）を算出し、前述したディレイタイムサンプリング数レジスタ６０２（図６参照）に対応するＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥ（図１０（ｂ）参照）に格納する。
【０１３８】
ＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥ＝ＴＥＭＰＯ＿ＣＯＵＮＴ＿ＴＢＬ（ＴＥＭＰＯ）．ＤＥＬＡＹ＿ＣＯＵＮＴ×ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＮＵＭＥＲＡＴＯＲ／ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＤＥＮＯＭＩＮＡＴＯＲ  ・・（１４）
【０１３９】
これにより、ディレイタイムを指定されたテンポ値（ＴＥＭＰＯ）の１拍に同期させたときのサンプリングクロック数ＤＥＬＡＹ＿ＣＯＵＮＴに、機能選択操作子１０２のＤＥＬＡＹエリアのＢＥＡＴノブで設定された同期拍数の分周比率ＮＵＭＥＲＡＴＯＲ／ＤＥＮＯＭＩＮＡＴＯＲを乗算して算出される、指定されたテンポの指定された同期拍数のディレイタイムに対応するディレイタイムサンプリング数が、ＤＳＰ２０６でのディレイ処理におけるディレイタイムとして設定される。その後、ＣＰＵ２０１は、図１６（ａ）のフローチャートで示される図１４のステップＳ１４０６のディレイテンポシンクロナイズドモード設定処理（ＳＹＮＣ処理）を終了する。
【０１４０】
ＣＰＵ２０１は、ステップＳ１６０２で、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされた値が０である、すなわち、ディレイテンポシンクロナイズドモードがオフされたと判定した場合には、ユーザによる図１の機能選択操作子１０２のＤＥＬＡＹエリアのＴＩＭＥノブの操作が有効となるため、ＣＰＵ２０１はまず、前述した（１１）式の計算を含む下記（１５）式を計算する（ステップＳ１６０４）。
【０１４１】
ＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥ＝
｛（ＤＥＬＡＹ＿ＴＩＭＥ×２０００／ＦＦＦＦＨ）／１０００｝×４４１００
・・（１５）
【０１４２】
これにより、前述したディレイタイムサンプリング数レジスタ６０２（図６参照）に対応するＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥに、ＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＴＩＭＥに得られているＴＩＭＥノブの操作値を１６進値からｍｓｅｃ値に変換した上でその時間値をＤＳＰ２０６の４４．１ＫＨｚのサンプリングクロックでサンプリングしたときのサンプル数が格納される。すなわち、ＴＩＭＥノブの操作量に応じて、ＤＳＰ２０６でのディレイ処理におけるディレイタイムが直接決定されることになる。その後、ＣＰＵ２０１は、図１６（ａ）のフローチャートで示される図１４のステップＳ１４０６のディレイテンポシンクロナイズドモード設定処理（ＳＹＮＣ処理）を終了する。
【０１４３】
図１６（ｂ）は、図１４のステップＳ１４０７のディレイテンポ同期拍数設定処理（ＢＥＡＴ処理）の詳細例を示すフローチャートである。この処理は、ユーザが図１の機能選択操作子１０２のＤＥＬＡＹエリアのＢＥＡＴノブを操作した場合に実行される。ユーザは、ＢＥＡＴノブの操作により、ディレイテンポシンクロナイズドモードにおける同期拍数を指定することができる。このとき、前述したように、変数ｖには、ＢＥＡＴノブの操作位置に対応する０、１、２、３、４、５、６、７の何れかの設定値が引き渡される。
【０１４４】
ＣＰＵ２０１はまず、変数ｖで引き渡された値を、同期拍数を格納する変数ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ（図９（ｂ）参照）にセットする（ステップＳ１６１１）。
【０１４５】
次にＣＰＵ２０１は、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされている値を判定する（ステップＳ１６１２）。
【０１４６】
ＣＰＵ２０１は、ステップＳ１６１２で、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされた値が１である、すなわち、ディレイテンポシンクロナイズドモードがオンされていると判定した場合には、ディレイテンポシンクロナイズドモード設定処理（ＳＹＮＣ処理）において実行される図１６（ａ）のステップＳ１６０３と同様の処理を実行する（ステップＳ１６１３）。これにより、ディレイタイムを指定されたテンポ値（ＴＥＭＰＯ）の１拍に同期させたときのサンプリングクロック数ＤＥＬＡＹ＿ＣＯＵＮＴに、機能選択操作子１０２のＤＥＬＡＹエリアのＢＥＡＴノブで設定された同期拍数の分周比率ＮＵＭＥＲＡＴＯＲ／ＤＥＮＯＭＩＮＡＴＯＲを乗算して算出される、指定されたテンポの指定された同期拍数のディレイタイムに対応するディレイタイムサンプリング数が、ＤＳＰ２０６でのディレイ処理におけるディレイタイムとして、前述したディレイタイムサンプリング数レジスタ６０２（図６参照）に対応するＤＳＰ２０６のレジスタＤＳＰ＿ＤＥＬＡＹ＿ＳＡＭＰＬＥ（図１０（ｂ）参照）に格納される。その後、ＣＰＵ２０１は、図１６（ｂ）のフローチャートで示される図１４のステップＳ１４０７のディレイテンポ同期拍数設定処理（ＢＥＡＴ処理）を終了する。
【０１４７】
ＣＰＵ２０１は、ステップＳ１６１２で、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされた値が０である、すなわち、ディレイテンポシンクロナイズドモードがオフされていると判定した場合には、ＢＥＡＴノブの操作は無視されるため、そのまま図１６（ｂ）のフローチャートで示される図１４のステップＳ１４０７のディレイテンポ同期拍数設定処理（ＢＥＡＴ処理）を終了する。
【０１４８】
図１７は、図１１のステップＳ１１０９の自動演奏定常処理の詳細例を示すフローチャートである。ここでは、ＣＰＵ２０１内のシーケンスクロックカウンタ３０１（図３）からのシーケンスクロック割込みに基づいて、自動演奏の進行制御が実施される。
【０１４９】
ＣＰＵ２０１はまず、ユーザが図１の機能選択操作子１０２内の特には図示しない自動演奏指定スイッチを操作することにより、自動演奏が指定されているか否かを判定する。この指定の有無は、ＣＰＵ  ＲＡＭ２０３上の変数ＳＥＱ＿ＲＵＮの値により判定できる。変数ＳＥＱ＿ＲＵＮの値が１でなければ、自動演奏制御処理は実施されないため、ＣＰＵ２０１は、図１７のフローチャートで示される図１１のステップＳ１１０９の自動演奏定常処理をそのまま終了する。
【０１５０】
変数ＳＥＱ＿ＲＵＮの値が１の場合、ＣＰＵ２０１はまず、自動演奏を司るシーケンスクロック割込みの通算の割込み回数を示す通算シーケンスクロック割込みカウント変数ＳＥＱ＿ＣＬＯＣＫ（図９（ｂ）参照）の値を、ＣＰＵ  ＲＡＭ２０３上の変数ｓに格納する（ステップＳ１７０２）。
【０１５１】
次にＣＰＵ２０１は、下記（１６）式に示されるように、ステップＳ１７０２で変数ｓにセットされた今回の通算シーケンスクロック割込み回数の値から、今回以前で最後に図１１のステップＳ１１０９の自動演奏定常処理が実行されたときのシーケンスカウンタ値を格納する変数ＬＡＳＴ＿ＳＥＱ＿ＣＬＯＣＫの値を減算した値を、ＣＰＵ  ＲＡＭ２０３上の変数ｄに格納する（ステップＳ１７０３）。この結果、変数ｄには、今回以前で最後に図１１のステップＳ１１０９の自動演奏定常処理が実行されたときから今回までの間に発生したシーケンスクロック割込みの回数が格納される。
【０１５２】
ｄ＝ｓ−ＬＡＳＴ＿ＳＥＱ＿ＣＬＯＣＫ  ・・（１６）
【０１５３】
次にＣＰＵ２０１は、下記（１７）式に示されるように、次回実行される図１１のステップＳ１１０９の自動演奏定常処理のために、ステップＳ１７０２で変数ｓにセットされた今回のシーケンスクロック割込み回数の値を、変数ＬＡＳＴ＿ＳＥＱ＿ＣＬＯＣＫに格納しておく。
【０１５４】
ＬＡＳＴ＿ＳＥＱ＿ＣＬＯＣＫ＝ｓ  ・・（１７）
【０１５５】
その後、ＣＰＵ２０１は、下記ステップＳ１７０５からＳ１７０７の一連の処理の繰返しにより、変数ｄにセットされた前回から今回の自動演奏定常処理までの間に発生したシーケンスクロック割込みの回数分だけ、自動演奏を進行させる処理を実行する。
【０１５６】
この繰返し処理において、ＣＰＵ２０１はまず、変数ｄの値が０か否か、すなわち、変数ｄにセットされた前回から今回の自動演奏定常処理までの間にシーケンスクロック割込みが発生していないか否かを判定する（ステップＳ１７０５）。
【０１５７】
変数ｄにセットされた前回から今回の自動演奏定常処理までの間にシーケンスクロック割込みが発生しておらず変数ｄの値が０（ステップＳ１７０５の判定がＹｅｓ）である場合には、ＣＰＵ２０１は、図１７のフローチャートで示される図１１のステップＳ１１０９の自動演奏定常処理をそのまま終了する。
【０１５８】
変数ｄにセットされた前回から今回の自動演奏定常処理までの間にシーケンスクロック割込みが発生しており変数ｄの値が０でない（ステップＳ１７０５の判定がＮｏである）場合には、ＣＰＵ２０１は、自動演奏処理を１シーケンスクロック割込みに対応する時間分だけ進める自動演奏制御処理を実行する（ステップＳ１７０６）。自動演奏制御処理は一般的な技術であるため、その詳細は省略する。
【０１５９】
次にＣＰＵ２０１は、変数ｄにセットされたシーケンスクロック割込みの回数を−１する。その後、ＣＰＵ２０１は、ステップＳ１７０５の判定処理に戻って変数ｄの値が０になったか否かを判定し、その判定がＮｏである間、上記ステップＳ１７０６とＳ１７０７の処理を繰返し実行する。やがて、ステップＳ１７０５の判定がＹｅｓになると、ＣＰＵ２０１は、図１７のフローチャートで示される図１１のステップＳ１１０９の自動演奏定常処理を終了する。
【０１６０】
以上の自動演奏定常処理により、ＣＰＵ２０１は、前回から今回の自動演奏定常処理までの間に発生したシーケンスクロック割込みの回数分だけ、自動演奏を進行させることができる。
【０１６１】
図１８は、ＣＰＵ２０１内のシーケンスクロックカウンタ３０１のカウント値がシーケンスクロックカウント上限値に達してシーケンスクロック割込みが発生したときにＣＰＵ２０１が実行する、シーケンスクロック割込み処理の例を示すフローチャートである。この処理は、ＣＰＵ２０１が、図１１〜図１７のフローチャートで例示される電子楽器制御処理を中断し、ＣＰＵ  ＲＯＭ２０２に記憶されたシーケンスクロック割込み処理プログラムを実行する動作である。
【０１６２】
ＣＰＵ２０１はまず、自動演奏開始後のシーケンスクロック割込みの通算の割込み回数を示す通算シーケンスクロック割込みカウント変数ＳＥＱ＿ＣＬＯＣＫ（図９（ｂ）参照）の値を、＋１インクリメントする（ステップＳ１８０１）。
【０１６３】
次にＣＰＵ２０１は、ディレイタイム毎にシーケンスクロック割込みの回数をカウントするためのディレイタイム毎シーケンスクロック割込みカウント変数ＳＹＮＣ＿ＳＥＱ＿ＣＬＯＣＫ（図９（ｂ）参照）の値を、＋１インクリメントする（ステップＳ１８０２）。なお、このカウンタ変数の値は、ディレイタイムと同期したことが検出される後述するステップＳ１８０５の判定がＹｅｓとなるタイミングで、０にリセットされる（後述するステップＳ１８０６）。
【０１６４】
次にＣＰＵ２０１は、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされている値を判定する（ステップＳ１８０３）。
【０１６５】
ＣＰＵ２０１は、ステップＳ１６１２で、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされた値が１ではない、すなわち、ディレイテンポシンクロナイズドモードがオフされていると判定した場合には、そのまま図１８のフローチャートで示されるシーケンスクロック割込み処理を終了し、図１１〜図１７のフローチャートで例示される電子楽器制御処理を再開する。この場合、シーケンスクロック割込みに基づいてステップＳ１８０１で通算シーケンスクロック割込みカウント変数ＳＥＱ＿ＣＬＯＣＫの値がインクリメントされるため、前述した自動演奏定常処理（図１１のステップＳ１１０９）により自動演奏が進行させられる。
【０１６６】
一方、ＣＰＵ２０１は、ステップＳ１６１２で、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされた値が１である、すなわち、ディレイテンポシンクロナイズドモードがオンされていると判定した場合には、以下の動作を実行する（ステップＳ１８０４）。ＣＰＵ２０１は、ユーザの操作によって図１の機能選択操作子１０２のＤＥＬＡＹエリアのＢＥＡＴノブによって選択され、ＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴに格納されている設定値によって、ＣＰＵ  ＲＯＭ２０２に記憶されているＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（図９（ａ））を参照することにより、ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ値に対応するエントリのＮＵＭＥＲＡＴＯＲ項目値とＤＥＮＯＭＩＮＡＴＯＲ項目値をそれぞれ、ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＮＵＭＥＲＡＴＯＲ及びＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＤＥＮＯＭＩＮＡＴＯＲとして取得する。そして、ＣＰＵ２０１は、下記（１８）式により、ユーザが図１の機能選択操作子１０２のＤＥＬＡＹ領域にあるエリアのＢＥＡＴノブで設定した設定値に対応する同期拍数に応じたシーケンスクロック割込み回数の設定値を算出し、ＣＰＵ  ＲＡＭ２０３上の変数ｓに格納する。
【０１６７】
ｓ＝４８０×ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＮＵＭＥＲＡＴＯＲ／ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＤＥＮＯＭＩＮＡＴＯＲ  ・・（１８）
【０１６８】
次にＣＰＵ２０１は、シーケンスクロック割込みの発生毎にステップＳ１８０２でインクリメントしたディレイタイム毎シーケンスクロック割込みカウント変数ＳＹＮＣ＿ＳＥＱ＿ＣＬＯＣＫの値が、上記ステップＳ１８０４で算出し変数ｓに格納された同期拍数に応じたシーケンスクロック割込み回数の設定値に一致したか否かを判定する（ステップＳ１８０５）。
【０１６９】
ステップＳ１８０５の判定がＮｏならば、シーケンスクロック割込みの回数がまだディレイタイムの設定値を経過していないため、ＣＰＵ２０１は、そのまま図１８のフローチャートで示されるシーケンスクロック割込み処理を終了し、図１１〜図１７のフローチャートで例示される電子楽器制御処理を再開する。
【０１７０】
ステップＳ１８０５の判定がＹｅｓになると、シーケンスクロック割込みの回数がディレイタイムの設定値を経過したことになるため、ＣＰＵ２０１はまず、ディレイタイム毎シーケンスクロック割込みカウント変数ＳＹＮＣ＿ＳＥＱ＿ＣＬＯＣＫの値を次のディレイタイムの処理のために０にクリアする（ステップＳ１８０６）。
【０１７１】
次にＣＰＵ２０１は、前述したＣＰＵ２０１内のフリーランニングタイマカウンタ３０２（図３参照）の値を示すＣＰＵ２０１無いのレジスタＣＰＵ＿ＦＲＥＥ＿ＴＩＭＥＲ（図１０（ａ）参照）の値を、ＣＰＵ  ＲＡＭ２０３上の変数ＬＡＳＴ＿ＢＥＡＴ＿ＴＩＭＥに格納する（ステップＳ１８０７）。この変数により、ＣＰＵ２０１が最後にシーケンスクロック割込みがディレイタイムと一致する回数の同期拍をカウントしたと判断した時の時刻値が記憶される。
【０１７２】
次にＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３上の変数ＳＹＮＣ＿ＳＴＡＴの値が１であるか否かを判定する（ステップＳ１８０８）。ここで、変数ＳＹＮＣ＿ＳＴＡＴは、今回のシーケンスクロック割込みに対応するＤＳＰ２０６からのディレイタイム割込みが先に発生し終わっているか否かを示している。もし、今回のシーケンスクロック割込みよりも先にそれに対応するディレイタイム割込みが発生していれば、後述するディレイタイム割込み処理では、その発生時刻が変数ＬＡＳＴ＿ＤＥＬＡＹ＿ＴＩＭＥに記録される処理のみが実行された後に（後述する図１９のステップＳ１９０２参照）、シーケンスクロック補正処理は実行されずに変数ＳＹＮＣ＿ＳＴＡＴの値が１にセットされてから、そのディレイタイム割込み処理がそのまま終了して（後述する図１９のステップＳ１９０３→Ｓ１９０６参照）、シーケンスクロック補正処理はそれに続いて発生するシーケンスクロック割込み処理にゆだねられる。一方、もし、今回のシーケンスクロック割込みのほうがそれに対応するディレイタイム割込みよりも先に発生すれば、変数ＳＹＮＣ＿ＳＴＡＴの値は前回のシーケンスクロック補正処理の後に０にリセットされたままとなっている（後述する図１８のステップＳ１８１０又は図１９のステップＳ１９０５参照）。
【０１７３】
従って、変数ＳＹＮＣ＿ＳＴＡＴの値が１（ステップＳ１８０８の判定がＹｅｓ）の場合には、ディレイタイム割込みのほうが先に発生しておりその発生時刻が変数ＬＡＳＴ＿ＤＥＬＡＹ＿ＴＩＭＥに揃っている状態であるため、ＣＰＵ２０１は、シーケンスクロック補正処理を実行する（ステップＳ１８０９）。この処理の詳細は、図２０のフローチャートを用いて後述する。
【０１７４】
シーケンスクロック補正処理が終了すると、ＣＰＵ２０１は、変数ＳＹＮＣ＿ＳＴＡＴの値を０にリセットする（ステップＳ１８１０）。その後、ＣＰＵ２０１は、図１８のフローチャートで示される今回のシーケンスクロック割込み処理を終了し、図１１〜図１７のフローチャートで例示される電子楽器制御処理を再開する。
【０１７５】
一方、変数ＳＹＮＣ＿ＳＴＡＴの値が０（ステップＳ１８０８の判定がＮｏ）の場合には、今回のシーケンスクロック割込み処理に対応するディレイタイム割込みがまだ発生していない。この場合には、ＣＰＵ２０１は、変数ＳＹＮＣ＿ＳＴＡＴに値１を格納し（ステップＳ１８１１）、その後そのまま、図１８のフローチャートで示されるシーケンスクロック割込み処理を終了し、図１１〜図１７のフローチャートで例示される電子楽器制御処理を再開する。この場合には、続けて今回のシーケンスクロック割込みに対応するディレイタイム割込みが発生したタイミングで、変数ＳＹＮＣ＿ＳＴＡＴ＝１が判定されて、シーケンスクロック補正処理が実行されることになる（後述する図１９のステップＳ１９０１→Ｓ１９０２→Ｓ１９０３の判定がＹｅｓ→Ｓ１９０５）。なお、この場合に、今回のシーケンスクロック割込みに対応するディレイタイム割込みの発生の前に次回のシーケンスクロック割込みが再び発生して図１８のフローチャートが実行されたとしても、変数ＳＹＮＣ＿ＳＥＱ＿ＣＬＯＣＫの値はステップＳ１８０６で０にリセットされている。このため、ステップＳ１８０１→Ｓ１８０２→Ｓ１８０３の判定がＹｅｓ→Ｓ１８０４と実行された後に、ステップＳ１８０５の判定がＮｏとなる。これにより、今回のシーケンスクロック割込みに対応するディレイタイム割込みが発生する前に、次回のシーケンスクロック割込みに基づいてステップＳ１８０９のシーケンスクロック補正処理が実行されてしまうことはない。
【０１７６】
図１９は、ＤＳＰ２０６内のディレイタイムカウンタ６０１のカウント値がディレイタイムサンプリング数６０８（図６参照）に達してディレイタイム割込みが発生したときにＣＰＵ２０１が実行する、ディレイタイム割込み処理の例を示すフローチャートである。この処理は、ＣＰＵ２０１が、図１１〜図１７のフローチャートで例示される電子楽器制御処理を中断し、ＣＰＵ  ＲＯＭ２０２に記憶されたディレイタイム割込み処理プログラムを実行する動作である。
【０１７７】
ＣＰＵ２０１はまず、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされている値を判定する（ステップＳ１９０１）。
【０１７８】
ＣＰＵ２０１は、ステップＳ１９０１で、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされた値が１ではない、すなわち、ディレイテンポシンクロナイズドモードがオフされていると判定した場合には、そのまま図１９のフローチャートで示されるシーケンスクロック割込み処理を終了し、図１１〜図１７のフローチャートで例示される電子楽器制御処理を再開する。
【０１７９】
一方、ＣＰＵ２０１は、ステップＳ１９０１で、変数ＤＥＬＡＹ＿ＳＹＮＣにセットされた値が１である、すなわち、ディレイテンポシンクロナイズドモードがオンされていると判定した場合には、前述したＣＰＵ２０１内のフリーランニングタイマカウンタ３０２（図３参照）の値を示すＣＰＵ２０１のレジスタＣＰＵ＿ＦＲＥＥ＿ＴＩＭＥＲ（図１０（ａ）参照）の値を、ＣＰＵ  ＲＡＭ２０３上の変数ＬＡＳＴ＿ＤＥＬＡＹ＿ＴＩＭＥに格納する（ステップＳ１９０２）。この変数により、ＤＳＰ２０６が最後にディレイタイム割込みを掛けた時の時刻値が記憶される。
【０１８０】
次にＣＰＵ２０１は、ＣＰＵ  ＲＡＭ２０３上の変数ＳＹＮＣ＿ＳＴＡＴの値が１であるか否かを判定する（ステップＳ１９０３）。ディレイタイム割込み処理が実行される場合における変数ＳＹＮＣ＿ＳＴＡＴの意味は、今回のディレイタイム割込みに対応する同期拍数に応じた回数分のシーケンスクロック割込みが先に発生し終わっているか否かを示している。もし、今回のディレイタイム割込みよりも先にそれに対応する上記同期拍数に応じた回数分のシーケンスクロック割込みが発生していれば、前述したシーケンスクロック割込み処理では、その発生時刻が変数ＬＡＳＴ＿ＢＥＡＴ＿ＴＩＭＥに記録される処理のみが実行された後に（前述した図１８のステップＳ１８０７参照）、シーケンスクロック補正処理は実行されずに変数ＳＹＮＣ＿ＳＴＡＴの値が１にセットされてから、そのシーケンスクロック割込み処理がそのまま終了して（前述した図１８のステップＳ１８０８→Ｓ１８１１参照）、シーケンスクロック補正処理はそれに続いて発生するディレイタイム割込み処理にゆだねられる。一方、もし、今回のディレイタイム割込みのほうがそれに対応する上記同期拍数に応じた回数分のシーケンスクロック割込みよりも先に発生すれば、変数ＳＹＮＣ＿ＳＴＡＴの値は前回のシーケンスクロック補正処理の後に０にリセットされたままとなっている（前述した図１８のステップＳ１８１０又は後述する図１９のステップＳ１９０５参照）。
【０１８１】
従って、変数ＳＹＮＣ＿ＳＴＡＴの値が１（ステップＳ１９０３の判定がＹｅｓ）の場合には、上記同期拍数に応じた回数分のシーケンスクロック割込みのほうが先に発生しておりその発生時刻が変数ＬＡＳＴ＿ＢＥＡＴ＿ＴＩＭＥに揃っている状態であるため、ＣＰＵ２０１は、シーケンスクロック補正処理を実行する（ステップＳ１９０４）。この処理の詳細は、図２０のフローチャートを用いて後述する。
【０１８２】
シーケンスクロック補正処理が終了すると、ＣＰＵ２０１は、変数ＳＹＮＣ＿ＳＴＡＴの値を０にリセットする（ステップＳ１９０５）。その後、ＣＰＵ２０１は、図１９のフローチャートで示される今回のディレイタイム割込み処理を終了し、図１１〜図１７のフローチャートで例示される電子楽器制御処理を再開する。
【０１８３】
一方、変数ＳＹＮＣ＿ＳＴＡＴの値が０（ステップＳ１９０３の判定がＮｏ）の場合には、今回のディレイタイム割込み処理に対応する上記同期拍数に応じた回数分のシーケンスクロック割込みがまだ発生していない。この場合には、ＣＰＵ２０１は、変数ＳＹＮＣ＿ＳＴＡＴに値１を格納し（ステップＳ１９０６）、その後そのまま、図１９のフローチャートで示されるディレイタイム割込み処理を終了し、図１１〜図１７のフローチャートで例示される電子楽器制御処理を再開する。この場合には、続けて今回のディレイタイム割込みに対応する上記同期拍数に応じた回数分のシーケンスクロック割込みが発生したタイミングで、変数ＳＹＮＣ＿ＳＴＡＴ＝１が判定されて、シーケンスクロック補正処理が実行されることになる（前述した図１８のステップＳ１８０８の判定がＹｅｓ→Ｓ１８０９）。なお、この場合に、今回のディレイタイム割込みの発生の前にシーケンスクロック割込みが再び発生して図１８のフローチャートが実行されたとしても、変数ＳＹＮＣ＿ＳＥＱ＿ＣＬＯＣＫの値はステップＳ１８０６で０にリセットされている。このため、ステップＳ１８０１→Ｓ１８０２→Ｓ１８０３の判定がＹｅｓ→Ｓ１８０４と実行された後に、ステップＳ１８０５の判定がＮｏとなる。これにより、今回のディレイタイム割込みに対応する上記同期拍数に応じた回数分のシーケンスクロック割込みが発生する前に、次回のディレイタイム割込みが発生してシーケンスクロック補正処理（ステップＳ１９０５）が実行されてしまうことはタイミング的にあり得ない。
【０１８４】
図２０は、図１８のステップＳ１８０９又は図１９のステップＳ１９０４のシーケンスクロック補正処理の詳細例を示すフローチャートである。以下のシーケンスクロック補正処理は、（７）式から（１０）式を用いた説明で前述した原理に基づいて実行される。
【０１８５】
ＣＰＵ２０１はまず、前述した（９）式に基づいて、前述した図１８のステップＳ１８０７で変数ＬＡＳＴ＿ＢＥＡＴ＿ＴＩＭＥにセットされている今回の同期拍数に応じた回数分のシーケンスクロック割込みの発生時刻と、前述した図１９のステップＳ１９０２で変数ＬＡＳＴ＿ＤＥＬＡＹ＿ＴＩＭＥにセットされている今回のディレイタイム割込みの発生時刻との時間差ｄを計測する（ステップＳ２００１）。
【０１８６】
次にＣＰＵ２０１は、ユーザの操作によって図１の機能選択操作子１０２のＤＥＬＡＹエリアのＢＥＡＴノブによって選択され、ＣＰＵ  ＲＡＭ２０３上の変数ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴに格納されている設定値によって、ＣＰＵ  ＲＯＭ２０２に記憶されているＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（図９（ａ））を参照することにより、ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ値に対応するエントリのＮＵＭＥＲＡＴＯＲ項目値ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＮＵＭＥＲＡＴＯＲと、同エントリのＤＥＮＯＭＩＮＡＴＯＲ項目値ＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＤＥＮＯＭＩＮＡＴＯＲとを用いて、前述した（７）式に対応する下記（１９）式によって、ユーザが上記ＢＥＡＴノブで設定した設定値に対応する同期拍数ｂを算出する（ステップＳ２００２）。
【０１８７】
ｂ＝ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＮＵＭＥＲＡＴＯＲ／ＳＹＮＣ＿ＢＥＡＴ＿ＴＢＬ（ＤＥＬＡＹ＿ＳＹＮＣ＿ＢＥＡＴ）．ＤＥＮＯＭＩＮＡＴＯＲ  ・・（１９）
【０１８８】
次にＣＰＵ２０１は、ステップＳ２００１で算出される時間差ｄと、ステップＳ２００２で算出される同期拍数ｂとを用いて、前述した（１０）式により、シーケンスクロックカウント上限値の補正値ｃを計算する（ステップＳ２００３）。
【０１８９】
そしてＣＰＵ２０１は、下記（２０）式で示されるように、ＣＰＵ２０１のレジスタＣＰＵ＿ＴＩＭＥＲ＿ＣＯＵＮＴ（図１０（ａ）参照）にセットされているシーケンスクロックカウンタ３０１（図３）に設定されるシーケンスクロックカウント上限値から、ステップＳ２００３で算出した補正値ｃを減算して、再びレジスタＣＰＵ＿ＴＩＭＥＲ＿ＣＯＵＮＴにセットし、シーケンスクロックカウント上限値を更新する（ステップＳ２００４）。なお、レジスタＣＰＵ＿ＴＩＭＥＲ＿ＣＯＵＮＴの値は、前述した図１１のステップＳ１１０１の初期化処理におけるステップＳ１２０３又は図１１のステップＳ１１０４のテンポ設定処理における図１３のステップＳ１３０６で設定される。
【０１９０】
ＣＰＵ＿ＴＩＭＥＲ＿ＣＯＵＮＴ
＝ＣＰＵ＿ＴＩＭＥＲ＿ＣＯＵＮＴ−ｃ  ・・（２０）
【０１９１】
この結果、次回のディレイ処理においては、ＣＰＵ２０１においてシーケンスクロック割込みに従ってディレイタイム分だけ進行する自動演奏の時間と、ＤＳＰ２０６におけるディレイタイム分のディレイ処理の時間とのずれが無くなることが期待される。
【０１９２】
以上のように、本実施形態においては、音響効果として、音響信号に対してエコー効果を付加するディレイ処理を実行する構成について説明したが、本発明において音響効果はこれに限られるものでない。例えば、音響信号に対してビブラート効果及びトレモロ効果の少なくとも一方を付加するためのＬＦＯを生成する処理を実行するように構成してもよい。
以上の実施形態に関して、更に以下の付記を開示する。
（付記１）
サンプリングクロックをカウントするカウントとともに、前記カウントされたカウント値が第１のカウント値となる毎に割込み信号を出力する第１のカウント処理と、前記カウントされたカウント値に基づいて、供給される音響波形信号に対して音響効果を付加する音響効果処理と、を実行する第１の処理部と、
前記サンプリングクロックとは非同期でかつ異なる周期のシーケンスクロックをカウントする第２のカウント処理と、前記第２カウント処理によりカウントを開始してからカウント値が第２のカウント値になるまでに要する時間と、前記第１の処理部からの割り込み信号の出力間隔時間との差分時間を検出する検出処理と、前記検出された差分時間を小さくするように前記第２のカウント値を変更する補正処理と、前記第２のカウント処理によりカウントされるカウント値が前記第２の値になる毎に自動演奏を進行させる自動演奏進行処理を実行する第２の処理部と、
を備えた音響処理装置。
（付記２）
前記音響処理装置はさらに、前記サンプリングクロックを発生する第１のクロック発生部と、前記シーケンスクロックを発生する第２のクロック発生部と、を有する、付記１に記載の音響処理装置。
（付記３）
前記第１の処理部は、前記サンプリングクロックをカウントすることにより、前記第１のカウント処理を実行する第１のカウンタを有し、
前記第２の処理部は、前記シーケンスクロックをカウントすることにより、前記第２のカウント処理を実行する第１のカウンタを有する、付記１又は２記載の音響処理装置。
（付記４）
前記音響処理装置さらに、前記自動演奏のテンポを指定するテンポ指定部を有し、
前記第１のカウント値及び前記第２のカウント値は、前記指定されたテンポに対応して決定される、付記１乃至３のいずれかに記載の音響処理装置。
（付記５）
前記音響処理装置はさらに、複数種の自動演奏のテンポ夫々に対応して前記第１及び第２のカウント値を記憶するテーブルを有し、
前記第２の処理部はさらに、指定された自動演奏のテンポに対応する前記第１及び第２のカウント値を前記テーブルから読み出すとともに、前記第１のカウント値を前記第１の処理部に設定するカウント値設定処理を実行する、付記１乃至４のいずれかに記載の音響処理装置。
（付記６）
前記第１の処理部は、前記音響効果処理として、前記カウントされたカウント値が前記第１のカウント値に達するまでの時間の自然数倍及び所定自然数分の１倍のいずれか一方の関係の時間に同期したタイミングで、供給される音響信号に対して音響効果を付加する処理を実行する、付記１乃至５のいずれかに記載の音響処理装置。
（付記７）
前記第１の処理部は、前記音響効果処理として、前記音響信号に対してエコー効果を付加するディレイ処理を実行する、付記１乃至６いずれかに記載の音響処理装置。
（付記８）
前記第１の処理部は、前記音響効果処理として、前記音響信号に対してビブラート効果及びトレモロ効果の少なくとも一方を付加するためのＬＦＯを生成する処理を実行する、付記１乃至６いずれかに記載の音響処理装置。
（付記９）
第１の処理部及び第２の処理部を有する音響処理装置に用いられる音響処理方法であって、
前記第１の処理部が、
サンプリングクロックをカウントするカウントとともに、前記カウントされたカウント値が第１のカウント値となる毎に割込み信号を出力し、
前記カウントされたカウント値に基づいて、供給される音響波形信号に対して音響効果を付加し、
前記第２の処理部が、
前記サンプリングクロックとは非同期でかつ異なる周期のシーケンスクロックをカウントし、
前記カウントを開始してからカウント値が第２のカウント値になるまでに要する時間と、前記第１の処理部からの割り込み信号の出力間隔時間との差分時間を検出し、
前記検出された差分時間を小さくするように前記第２のカウント値を変更し、
前記カウントされたカウント値が前記第２のカウント値になる毎に自動演奏を進行させる、
音響処理方法。
（付記１０）
音響処理装置として用いられるコンピュータに、
サンプリングクロックをカウントするカウントとともに、前記カウントされたカウント値が第１のカウント値となる毎に割込み信号を出力するステップと、
前記カウントされたカウント値に基づいて、供給される音響波形信号に対して音響効果を付加するステップと、
前記サンプリングクロックとは非同期でかつ異なる周期のシーケンスクロックをカウントするステップと、
前記シーケンスクロックのカウントを開始してからカウント値が第２のカウント値になるまでに要する時間と、前記割り込み信号の出力間隔時間との差分時間を検出するステップと、
前記検出された差分時間を小さくするように前記第２のカウント値を変更するステップと、
前記シーケンスクロックをカウントすることに得られるカウント値が前記第２のカウント値になる毎に自動演奏を進行させるステップと、
を実行させるプログラム。
（付記１１）
請求項１乃至８のいずれかに記載の音響処理装置と、
発生すべき楽音の音高を指定する演奏操作子と、
前記演奏操作子で指定された音高の楽音波形を音響波形信号として生成して、前記第１の処理部に供給する波形発生器と、
を備えた電子楽器。
【符号の説明】
【０１９３】
１００  電子鍵盤楽器
１０１  鍵盤
２０１  ＣＰＵ
２０２  ＣＰＵ  ＲＯＭ
２０４  音源ＬＳＩ
２０５  波形発生器
２０６  ＤＳＰ
２０９、２１０  発振子
３０１  シーケンスクロックカウンタ
３０２  フリーランニングタイマカウンタ
【図１】
0006641965.tif 000002
【図２】
0006641965.tif 000003
【図３】
0006641965.tif 000004
【図４】
0006641965.tif 000005
【図５】
0006641965.tif 000006
【図６】
0006641965.tif 000007
【図７】
0006641965.tif 000008
【図８】
0006641965.tif 000009
【図９】
0006641965.tif 000010
【図１０】
0006641965.tif 000011
【図１１】
0006641965.tif 000012
【図１２】
0006641965.tif 000013
【図１３】
0006641965.tif 000014
【図１４】
0006641965.tif 000015
【図１５】
0006641965.tif 000016
【図１６】
0006641965.tif 000017
【図１７】
0006641965.tif 000018
【図１８】
0006641965.tif 000019
【図１９】
0006641965.tif 000020
【図２０】
0006641965.tif 000021