(57)【特許請求の範囲】
【請求項１】
楽音波形を録音するための記憶手段と、
前記記憶手段に楽音波形を書き込むとともに、前記記憶手段に記憶された楽音波形を読み出す読み書き手段と、
ロードされたプログラムに応じて信号処理を実行するプログラマブル信号処理手段と、
前記読み書き手段、前記プログラマブル信号処理手段、外部回路、及びサウンドシステムに接続されたミキサと、
録音動作または再生動作を指示する指示手段と、
(i)前記指示手段により録音動作が指示されていたときは、前記プログラマブル信号処理手段に所定の第１のプログラムをロードするとともに、前記外部回路から供給される楽音波形が前記ミキサを介して前記プログラマブル信号処理手段に供給され、かつ、前記プログラマブル信号処理手段の出力信号が前記ミキサを介して前記読み書き手段に供給されるよう前記ミキサを設定して、前記外部回路からの楽音波形が、前記プログラマブル信号処理手段で前記第１のプログラムに従う録音用の信号処理を施されて、前記読み書き手段により前記記憶手段に記憶されるよう制御し、
(ii)前記指示手段により再生動作が指示されていたときは、前記プログラマブル信号処理手段に所定の第２のプログラムをロードするとともに、前記読み書き手段により前記記憶手段から読み出された楽音波形が前記ミキサを介してプログラマブル信号処理手段に供給され、かつ、前記プログラマブル信号処理手段の出力信号が前記ミキサを介して前記外部のサウンドシステムに供給されるよう前記ミキサを設定して、前記読み書き手段が読み出した当該楽音波形が、前記プログラマブル信号処理手段で前記第２のプログラムに従う再生用の信号処理を施されて、前記サウンドシステムで再生されるように制御する
制御手段と、
を備えたことを特徴とする音源装置。
【請求項２】
前記プログラマブル信号処理手段が、ディジタル・シグナル・プロセッサである請求項１に記載の音源装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、ディジタル楽音波形データを生成出力する音源装置に関し、詳しくは、１つのＤＳＰを用いて録音用波形処理と再生用波形処理の両方を並列に実行可能にした音源装置に関する。
【０００２】
【従来の技術】
従来より、各種の方式の音源装置が知られている。このような音源装置で生成された楽音は、ＤＳＰ（ディジタル・シグナル・プロセッサ）によりエフェクト
（効果）付与などを施して放音される。
【０００３】
【発明が解決しようとする課題】
一方、このような音源装置では、外部の楽音をサンプリングして波形メモリに格納（録音）し楽音生成に用いるようにしたものも知られている。楽音のサンプリングのためには、通常、音源装置に外部の楽音を取り込むためのサンプリング用の回路を設ける。
【０００４】
ところで、近年、音源装置の機能に対する要求は高度化し、装置の構成は複雑にすることなく音源装置の機能を向上化させたいという要求がある。しかし、装置の構成を複雑にすることなく、発音中にサンプリングしたり、一旦サンプリングして波形メモリに書き込んだ波形データを読み出して効果付与などを施した後に再度波形メモリに書き込むリサンプリングなどを行なうことはできなかった。すなわち、装置の構成を複雑にすることなく、録音用波形処理と再生用波形処理を共に行なうことができなかった。
【０００５】
この発明は、各種の方式の音源装置において、装置構成をそれ程複雑にすることなく、録音用波形処理と再生用波形処理を共に実行できるようにすることを目的とする。
【０００６】
【課題を解決するための手段】
この目的を達成するため、請求項１の発明に係る音源装置は、楽音波形を録音するための記憶手段と、前記記憶手段に楽音波形を書き込むとともに、前記記憶手段に記憶された楽音波形を読み出す読み書き手段と、ロードされたプログラムに応じて信号処理を実行するプログラマブル信号処理手段と、前記読み書き手段、前記プログラマブル信号処理手段、外部回路、及びサウンドシステムに接続されたミキサと、録音動作または再生動作を指示する指示手段と、(i)前記指示手段により録音動作が指示されていたときは、前記プログラマブル信号処理手段に所定の第１のプログラムをロードするとともに、前記外部回路から供給される楽音波形が前記ミキサを介して前記プログラマブル信号処理手段に供給され、かつ、前記プログラマブル信号処理手段の出力信号が前記ミキサを介して前記読み書き手段に供給されるよう前記ミキサを設定して、前記外部回路からの楽音波形が、前記プログラマブル信号処理手段で前記第１のプログラムに従う録音用の信号処理を施されて、前記読み書き手段により前記記憶手段に記憶されるよう制御し、(ii)前記指示手段により再生動作が指示されていたときは、前記プログラマブル信号処理手段に所定の第２のプログラムをロードするとともに、前記読み書き手段により前記記憶手段から読み出された楽音波形が前記ミキサを介してプログラマブル信号処理手段に供給され、かつ、前記プログラマブル信号処理手段の出力信号が前記ミキサを介して前記外部のサウンドシステムに供給されるよう前記ミキサを設定して、前記読み書き手段が読み出した当該楽音波形が、前記プログラマブル信号処理手段で前記第２のプログラムに従う再生用の信号処理を施されて、前記サウンドシステムで再生されるように制御する制御手段と、を備えたことを特徴とする。
【０００９】
請求項２の発明に係る音源装置は、請求項１において、前記プログラマブル信号処理手段をディジタル・シグナル・プロセッサとしたものである。
【００１０】
【発明の実施の形態】
以下、図面を用いてこの発明の実施の形態を説明する。
【００１１】
図１は、この発明に係る音源装置を適用した電子楽器の全体のブロック構成を示す。図２は、図１の音源部の詳細なブロック構成を示す。なお、以下で説明する各図面において、同一の番号は同一のものを示すものとする。
【００１２】
図１を参照して、この電子楽器の全体構成を説明する。この電子楽器は、鍵盤１０１、表示部１０２、スイッチ群（ＳＷ）１０３、中央処理装置（ＣＰＵ）１０４、リードオンリメモリ（ＲＯＭ）１０５、ランダムアクセスメモリ（ＲＡＭ）１０６、外部記憶装置１０７、音源部１０８、波形メモリ１０９、外部回路１１０、遅延メモリ１１１、ディジタルアナログ変換器（ＤＡＣ）１１２、サウンドシステム（ＳＳ）１１３、およびバスライン１１４を備えている。鍵盤１０１、表示部１０２、スイッチ群１０３、ＣＰＵ１０４、ＲＯＭ１０５、ＲＡＭ１０６、外部記憶装置１０７、および音源部１０８は、バスライン１１４により相互に接続されている。
【００１３】
鍵盤１０１は、ユーザが演奏操作するための複数の鍵を備えた鍵盤である。表示部１０２は、電子楽器のパネル上に設けられており、各種の情報を表示する。スイッチ群１０３は、パネル上に設けられており、ユーザはこれを操作することにより電子楽器に対して各種の指示を与えることができる。ＣＰＵ１０４は、この電子楽器全体の動作を制御する。特に、通常の演奏時には、鍵盤１０１の操作を検出し、その操作に応じて音源部１０８に発音の指示を出す。ＲＯＭ１０５は、ＣＰＵが実行するプログラム（音源部１０８を制御するための音源コントロールプログラムなど）や各種の定数データなどを格納する。ＲＡＭ１０６は、ワークレジスタなどに用いる。外部記憶装置１０７には、後述するＤＲＡＭ構成の波形メモリ１０９にロードする波形データなどが格納されている。
【００１４】
音源部１０８は、ＣＰＵ１０４の指示に応じて、波形メモリ１０９から波形データ（波形サンプル）を読み出し、補間、エンベロープ付与（音量変化制御）、チャンネル累算（ミキシング）、および効果（エフェクト）付与などの加工を施して、楽音波形データとして出力する。音源部１０８から出力された楽音波形データは、ＤＡＣ１１２によりアナログ信号に変換され、サウンドシステム１１３により放音される。
【００１５】
波形メモリ１０９は、ＤＲＡＭ（ダイナミックＲＡＭ）により構成されている。波形メモリ１０９には、所定のレートでサンプリングされた波形サンプルデータが格納されている。１つの波形サンプルは１６ビット非圧縮形式であり、アドレスは波形サンプル単位に付けられている。すなわち、１アクセスで１つの波形サンプルが読み出せる。波形サンプルは、楽音の発音に先立って外部記憶装置１０７から読み出して波形メモリ１０９に格納してもよいが、特にこの実施の形態の音源では、複数チャンネル分の楽音発生の動作を行なう際に使用されなかった空きタイムスロットを別の用途に用いることができるようになっているので、楽音発生の動作中にその空きタイムスロットを用いて波形データを外部記憶装置１０７から読み出して波形メモリ１０９に格納してもよい。
【００１６】
外部回路１１０については、後に詳しく説明する。遅延メモリ１１１は、音源部１０８内にある信号処理回路（ＤＳＰ）で用いる遅延用のメモリである。楽音波形に効果付与などの処理を施す際に、例えばあるタイミングであるデータを遅延メモリ１１１に書き込み、所定のクロックの後に読み出して演算に用いるというようにして、遅延したデータを得るのに遅延メモリ１１１を用いる。
【００１７】
図２を参照して、音源部１０８について詳しく説明する。図２において、音源部１０８は、制御レジスタ２０１、読み書き回路２０２、音量変化制御回路２０３、ミキサ２０４、信号処理回路２０５、およびインターフェース２０６を備えている。この音源部１０８は時分割３２チャンネルで動作する。音源部１０８内の各部には、時分割動作を行なうための基準信号となる制御クロック信号や０〜３１を繰り返しカウントするチャンネルカウント値などの制御信号が供給されている。
【００１８】
図２において、制御レジスタ２０１は、ＣＰＵ１０４から送出された各種の指定情報（音源部１０８に対する命令やパラメータ情報）を格納するための制御レジスタである。制御レジスタ２０１内にはＸアクセス処理を制御するＸアクセス回路３０４が設けられているが、これについては後に詳述する。ＣＰＵ１０４は、制御レジスタ２０１に所定の指定情報をセットして発音の開始指示を出す。セットする指定情報としては、割り当てチャンネル、波形メモリ読み出しピッチ（周波数ナンバ）、波形メモリ読み出し区間、エンベロープパラメータ、ミキサ２０４に対する設定情報、およびエフェクト用係数などがある。
【００１９】
あるチャンネルにおける発音開始指示を受けると、音源部１０８は楽音波形の発生の動作を開始する。まず、読み書き回路２０２は、波形メモリ１０９の読み出しアドレスを順次発生する。読み出しアドレスは、指定された読み出し区間の先頭から、指定された読み出しピッチを順次累算した値である。特に、この音源部１０８では、読み書き回路２０２中に波形サンプルをバッファリングする波形バッファ（後述する図３の３２７）を備え、波形メモリ１０９からはチャンネルごとに必要な数の波形サンプル（波形データ）のみを読み出すようになっており、各チャンネルにおける波形メモリアクセス回数は可変できるようになっている。そこで、読み書き回路２０２は、各チャンネルにおいて必要なアクセス回数に応じた波形サンプルの読み出しアドレスを、時分割チャンネルタイミングとは異なるタイミングで、順次連続して出力するようになっている。読み書き回路２０２で発生した読み出しアドレスは、波形メモリ１０９に入力し、これにより時分割チャンネルタイミングとは異なるタイミングで波形サンプルが波形メモリ１０９から読み出される。読み書き回路２０２は、この波形サンプルを受け取り、内部の波形バッファに記憶し、補間処理を行なって楽音波形データとして出力する。
【００２０】
読み書き回路２０２において、上述したように波形サンプルをバッファリングする波形バッファを備え、波形メモリ１０９からはチャンネルごとに必要な数の波形サンプルのみを読み出すようになっていることにより、空きタイムスロットが得られる。読み書き回路２０２は、この空きタイムスロットにおいて、後述するＸアクセス処理、すなわちＣＰＵ１０４からの波形メモリ１０９へのアクセス、またはミキサ２０４からＸアクセス回路３０４経由で戻ってくる楽音波形データの波形メモリ１０９への書き込みなどができるように動作する。
【００２１】
音量変化制御回路２０３は、読み書き回路２０２から時分割で出力される各チャンネルの楽音波形データにエンベロープを付与して出力する。どのようなエンベロープを付与するかは、制御レジスタ２０１を介してＣＰＵ１０４から与えられたエンベロープパラメータに基づいて決定される。図２の音量変化制御回路２０３の出力ライン２１１に「３２」と付してあるのは、音量変化制御回路２０３の出力が時分割３２チャンネル分あることを示している。他の各部の入出力ラインに付してある数値も、同様にチャンネル数を示すものとする。
【００２２】
ミキサ２０４には、音量変化制御回路２０３から出力される３２チャンネル分の楽音波形データ、後述する信号処理回路２０５から出力される８チャンネル分の楽音波形データ、および後述する外部回路１１０から（インターフェース２０６を介して）出力される８チャンネル分の楽音波形データが、入力ライン２１１，２１２，２１３を介して入力する。ミキサ２０４は、これらの各入力ラインから入力した各チャンネルの楽音波形データにそれぞれ適宜係数（係数値はＣＰＵ１０４が制御レジスタ２０１を介して与える）を乗算してミキシングする。ミキサ２０４の出力は、８チャンネル分が信号処理回路２０５に、８チャンネル分が（インターフェース２０６を介して）外部回路１１０に、１チャンネル分が制御レジスタ２０１内のＸアクセス回路３０４に、音源部１０８の最終的な出力となる２チャンネル（ＬおよびＲ出力）分がＤＡＣ１１２に、それぞれ出力ライン２２１，２２２，２２３，２２４を介して、出力されるようになっている。ミキサ２０４は、任意の入力ラインから入力した任意のチャンネルの楽音波形データに指定された係数を乗算してミキシングし、そのミキシング結果を任意の出力ラインの任意のチャンネルに送出できる。どの入力ラインのどのチャンネルの入力にどのような係数を乗算し、乗算結果をどのようにミキシングし、ミキシング結果をどの出力ラインに出力するかは、ＣＰＵ１０４の指定に基づいて決定される。
【００２３】
信号処理回路２０５は、内部のマイクロプログラムメモリにロードされたマイクロプログラムにしたがって動作するＤＳＰであり、ミキサ２０４からの楽音波形データに対してチャンネルごとに独立に信号処理を行ない処理結果を再びミキサ２０４に戻す。信号処理回路２０５は、信号処理を行なう際に、必要に応じて遅延メモリ１１１を用いて遅延したデータを得る。信号処理回路２０５が実行するマイクロプログラムはＣＰＵ１０４が適宜ロードする。信号処理回路２０５の機能はロードするマイクロプログラムにより規定されるが、簡単に言うと、サンプリングやリサンプリングの際の波形処理、あるいは効果付与などの信号処理を行なうものである。このマイクロプログラムの具体的な設定については、図１０および図１１を参照して後述する。
【００２４】
外部回路１１０は、例えば、外部から音声や楽音を取り込むためのアナログ／ディジタル変換器（ＡＤＣ）、効果（エフェクト）付与処理を行なう外部ＤＳＰ、あるいはディジタルフィルタなどである。ミキサ２０４から外部回路１１０への出力は８チャンネル分、外部回路１１０からミキサ２０４への入力は８チャンネル分であり、これらは当然独立に使用できるチャンネルであるので、複数の外部回路（当然、異なる処理を行なうものでもよい）１１０を任意の入出力ラインの任意のチャンネルに（インターフェース２０６を介して）接続可能である。なお、「外部」というのは音源部１０８から見て「外部」であるということであり、外部回路１１０は図１の電子楽器中に設けてもよいし、図１の電子楽器の外部に設けてもよい。
【００２５】
上述したように、ミキサ２０４は任意の入力ライン２１１〜２１３から入力した任意のチャンネルの楽音波形データに指定された係数を乗算してミキシングし、そのミキシング結果を任意の出力ライン２２１〜２２４の任意のチャンネルに送出できるようになっているから、例えば、以下の▲１▼〜▲４▼のような処理を行なうことができることになる。
【００２６】
▲１▼外部回路１１０としてＡＤＣを用いて、マイクロフォンなどから入力したアナログ信号をディジタル信号に変換してミキサ２０４に入力させる。ミキサ２０４では、この外部からの楽音信号を、音源部１０８内部で波形メモリ１０９から波形データを読み出して発生した楽音とミキシングして、ＤＡＣ１１２への出力ライン２２４に出力する。必要に応じてミキサ２０４の出力を、ＤＡＣ１１２に出力する代わりに一旦信号処理回路２０５や他の外部回路１１０に入力し、信号処理回路２０５や他の外部回路１１０を用いて効果付与処理などの波形処理を行なった後にＤＡＣ１１２に出力するようにしてもよい。
【００２７】
▲２▼外部の楽音のサンプリングを行なうことができる。すなわち、外部回路１１０としてＡＤＣを用いて、マイクロフォンなどから入力したアナログ信号をディジタル信号に変換してミキサ２０４に入力させる。ミキサ２０４では、この外部からの楽音信号を、例えば音源部１０８内部で波形メモリ１０９から波形データを読み出して発生した楽音とミキシングして、Ｘアクセス回路３０４への出力ライン２２３に出力し、読み書き回路２０２経由で波形メモリ１０９に書き込むようにする。必要に応じてミキサ２０４の出力を、Ｘアクセス回路３０４への出力ライン２２３に出力する代わりに信号処理回路２０５や外部回路１１０に入力し、信号処理回路２０５や外部回路１１０を用いて効果付与処理などの波形処理を行なった後にＸアクセス回路３０４に出力するようにしてもよい。
【００２８】
▲３▼リサンプリング（サンプリングなどにより波形メモリ１０９上に用意されている波形に、加工を施して再び波形メモリ１０９に書き込む処理）を行なうことができる。すなわち、サンプリングなどにより波形メモリ１０９に記憶してある波形データを、読み書き回路２０２の所定の発音チャンネルを利用して読み出して、ミキサ２０４に入力させる。２つ以上の波形を混合して再書き込みするリサンプリングの場合もあるので、ここで読み出す波形データは１ないし複数の波形データである。ミキサ２０４では、この楽音信号を信号処理回路２０５や外部回路１１０に流し、必要に応じて種々の波形処理を行なわせ、その結果を得る。波形処理が施された楽音信号を受けたミキサ２０４は、その楽音信号をＸアクセス回路３０４への出力ライン２２３に出力し、読み書き回路２０２経由で波形メモリ１０９に書き込む。なお、ミキサ２０４における最初のミキシング結果を、信号処理回路２０５や外部回路１１０に流さずに、そのままＸアクセス回路３０４へ供給するようにしてもよい。
【００２９】
▲４▼外部回路１１０としてＤＳＰやディジタルフィルタを用いて、あるいは信号処理回路２０５を用いて、ミキサ２０４から取り出した楽音波形に効果付与処理やフィルタリング処理を行ない、処理結果をミキサ２０４に戻す。ミキサ２０４では、処理された楽音波形を、音源部１０８内部で発生した楽音とミキシングしてＤＡＣ１１２への出力ライン２２４やＸアクセス回路３０４への出力ライン２２３に出力する。
【００３０】
なお、上記▲１▼〜▲４▼は本実施形態において実現できる処理例を示したものであり、音源部１０８内の時分割処理の処理時間が確保でき、必要なマイクロプログラムが信号処理回路２０５にロードできるならば、上記▲１▼〜▲４▼を含め外部回路１１０と信号処理回路２０５の各種機能を任意に組み合わせて楽音波形に対する処理を行ない、ＤＡＣ１１２に出力したり、Ｘアクセス回路３０４経由で読み書き回路２０２に戻して波形メモリ１０９に書き込むようにできる。
【００３１】
図３は、音源部１０８内の制御レジスタ２０１および読み書き回路２０２の詳細なブロック構成を示す。なお、図３に示されている回路のうち、制御レジスタ２０１は、制御レジスタのすべてを示したものでなく、その一部分を示したものである。制御レジスタ２０１には、図３に示したもの以外に、エンベロープパラメータ、ミキサの設定、およびエフェクト用係数などの他の制御データも記憶されている。
【００３２】
制御レジスタ２０１は、レジスタ３０１、レジスタ３０２、優先フラグ３０３、および、Ｘアクセス回路３０４を備えている。レジスタ３０１，３０２は、ＣＰＵ１０４から楽音生成を指示する際に送出される各種指示情報を格納する。具体的には、レジスタ３０１は、例えば波形読み出しのための読み出しアドレス（相対アドレス）の初期値ＡＳ、波形データのループ部のデータ長ＬＰＡ、ピッチＰＩＴＣＨなどを格納する。レジスタ３０２は、読み出すべき波形データのループ部の先頭を示す絶対アドレスＷＡを格納する。なお、読み出しアドレスの初期値ＡＳは、波形データのループ部の先頭位置（すなわちアタック部の末尾）を基準とした相対アドレスであるので、負の値に設定されている。波形データの読み出しは、絶対アドレスＷＡより初期値ＡＳで示される分だけ前の位置からスタートする。波形データのループ部のデータ長ＬＰＡは、ループ部末尾位置の相対アドレス（正値）である。
【００３３】
Ｘアクセス回路３０４は、ＸＡレジスタ３１１、セレクタ３１２、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ（先入れ先出し）の８段のレジスタ）３１３、Ｘフラグ３１４、およびサンプル数レジスタ３１５を備えている。Ｘアクセス回路３０４は、後述するＸアクセス処理（ＣＰＵ１０４からの波形メモリ１０９のアクセス、およびミキサ２０４から出力ライン２２３を介して送出された楽音波形データの波形メモリ１０９への書き込み）を、楽音発生のための波形メモリ読み出しと並行して実行するための制御を行なう回路である。優先フラグ３０３は、Ｘアクセス処理を優先的に行ないたい場合にオンされるフラグである。Ｘアクセス回路３０４の動作および機能、並びに、Ｘアクセス処理および優先フラグ３０３の使い方については後述する。
【００３４】
読み書き回路２０２は、処理Ａ演算回路３２１、アドレスＲＡＭ（ＡＲＡＭ）３２２、アキュムレータ（ＡＣＣ）３２３、制御ＲＡＭ３２４、処理Ｂ演算回路３２５、補間回路３２６、波形バッファ３２７、取り込み回路３２８、およびセレクタ（ＳＥＬ）３２９，３３０を備えている。
【００３５】
図３の制御レジスタ２０１および読み書き回路２０２では、大きくは、処理Ａ、処理Ｂ、取り込み処理、補間処理、およびＸアクセス処理の５つの処理を行なう。各処理の概要は以下の通りである。処理Ａは、主として処理Ａ演算回路３２１により実行される処理であり、具体的には、楽音生成のために時分割チャンネルタイミングにしたがって各チャンネルのアドレス（波形サンプル読み出しアドレス（相対アドレス））を作成する処理である。各チャンネルのアドレスは、ＡＲＡＭ３２２に保持される。処理Ｂは、主として処理Ｂ演算回路３２５により実行される処理であり、具体的には、楽音生成のために、時分割チャンネルタイミングとは異なるタイミングで、アドレスＷＭＡ（波形サンプル読み出しアドレス（絶対アドレス））をセレクタ３２９を介して波形メモリ１０９に向けて送り出す処理である。取り込み処理は、主として取り込み回路３２８により実行される処理であり、具体的には、処理Ｂにより波形メモリ１０９に送り出されたアドレスにしたがって読み出された波形サンプルをセレクタ３３０を介して取り込み、各チャンネル別に波形バッファ３２７に書き込む処理である。処理Ｂと取り込み処理が行なわれるときは、セレクタ３２９と３３０は、処理Ｂ演算回路３２５から出力されるアドレスＷＭＡが波形メモリ１０９のアドレス端子に入力して、波形メモリ１０９から読み出された波形サンプルが取り込み回路３２８に取り込まれるように、選択制御される。補間処理は、補間回路３２６により実行される処理であり、具体的には、時分割チャンネルタイミングにしたがって、波形バッファ３２７から各チャンネルの波形サンプルを読み出し、補間を行なって補間済みサンプル（楽音波形データ）を生成出力する処理である。補間回路３２６から出力された楽音波形データは、図２の音量変化制御回路２０３に入力する。Ｘアクセス処理は、主としてＸアクセス回路３０４の制御のもとで実行される処理であり、具体的には、上記処理Ｂおよび取り込み処理で波形メモリ１０９をアクセスするタイムスロット以外のタイムスロットで、ＣＰＵ１０４からの波形メモリ１０９のアクセスおよびミキサ２０４から出力ライン２２３を介して送出された楽音波形データの波形メモリ１０９への書き込みを行なう処理である。Ｘアクセス処理の際には、セレクタ３２９と３３０は、ＸＡレジスタ３１１に格納されているアドレスが波形メモリ１０９のアドレス端子に入力し、波形メモリ１０９のデータラインがＦＩＦＯ３１３に接続するように、選択制御される。以上の５つの処理の詳細については後述する。
【００３６】
図４は、図３の制御ＲＡＭ３２４の構成を示す。詳しくは後述するが、処理Ａでは、各チャンネルのアドレス作成と並行して、各チャンネルについて読み出すべき必要サンプル数を求めて制御ＲＡＭ３２４に格納する処理を行なう。そのため、制御ＲＡＭ３２４は、チャンネル番号（ＣＨ番号）とそのチャンネルにおいて読み出すべきサンプル数を格納する領域が複数用意されて構成される。読み書き回路２０２内には書き込みポインタおよび読み出しポインタが備えられており、各チャンネルにおいて読み出すべき必要サンプル数を制御ＲＡＭ３２４に書き込むとき（処理Ａ）は書き込みポインタをすすめ、制御ＲＡＭ３２４からチャンネル番号とサンプル数を読み出して当該チャンネルに関する読み出しアドレスを送出するとき（処理Ｂ）は読み出しポインタを進める。制御ＲＡＭ３２４は、リング状に使用するようになっており、書き込みまたは読み出しポインタが制御ＲＡＭ３２４の一方の端に至った場合、その次のポインタの位置は制御ＲＡＭ３２４の他方の端になる。また、読み出しポインタの指す位置が書き込みポインタの指す位置を追いかけるように書き込みおよび読み出しが行なわれるが、書き込みポインタが読み出しポインタを追い越さない程度の領域の大きさが確保されているものとする。書き込みポインタおよび読み出しポインタは、アキュムレータ３２３と同様に、それぞれ、前半処理用のものと後半処理用のものとが別々に設けられている。単に、書き込みポインタおよび読み出しポインタと呼ぶときは、前半処理では前半処理用のもの、後半処理では後半処理用のものを指すものとする。前半処理は第０〜第１５チャンネルの処理、後半処理は第１６〜第３１チャンネルの処理である（図８，９で後述する）。なお、図４のような構成のほか、各チャンネルに１つずつアドレスを対応させ、そこに必要サンプル数を書き込むようにしてもよい。
【００３７】
図５は、図３のＡＲＡＭ３２２のメモリマップを示す。ＡＲＡＭ３２２は、処理Ａにおいて各チャンネルのアドレスを作成するのに用いる領域である。ＡＲＡＭ３２２は、３２チャンネル分（第０〜第３１チャンネル）の各チャンネルごとの領域からなり、これらの領域に各チャンネルの現在のアドレス値を記憶する。各チャンネルの領域はアドレス上位ＡＤＨ、およびアドレス下位ＡＤＬからなる。ＡＤＨおよびＡＤＬの領域の大きさはそれぞれ１６ビットである。アドレス上位ＡＤＨとアドレス下位ＡＤＬとを合わせた３２ビットのアドレス値は、アドレス整数部とアドレス小数部とに分けられる。アドレス整数部は２３ビット、アドレス小数部は９ビットである。アドレス整数部は、波形メモリ１０９のアドレスと対応している。すなわち、アドレス整数部の１つの値に対応して、波形メモリ１０９の波形サンプルが１つ存在する。アドレス小数部は、それよりも細かい単位を示し、何点かの波形サンプルを用いた補間処理で用いる情報である。
【００３８】
図６は、図３の波形バッファ（サンプルＲＡＭ）３２７の構成を示す。波形バッファ３２７は、各チャンネルごとの４つの再生サンプル格納領域からなる。４つの再生サンプル格納領域はリング状に使用する。すなわち、各チャンネルごとにポインタを設け、波形サンプルを書き込むときは、そのポインタで指す位置に書き込み、ポインタを１つ進める。ポインタは、例えば図６の第ｉチャンネルなら、再生サンプル１→２→３→４→１→２→…というように進める。
【００３９】
次に、図３の制御レジスタ２０１および読み書き回路２０２で実行する上記５つの処理について詳しく説明する。始めにこれらの処理を実行するタイミングについて説明し、その後、各処理それぞれの詳細を説明する。
【００４０】
図３、図８、および図９を参照して、読み書き回路２０２の要部の処理のタイミングの概要について説明する。図８において、「処理Ａ」は、図３の主として処理Ａ演算回路３２１により実行される処理Ａを行なう区間を示す。「処理ＢおよびＸアクセス処理」は、図３の主として処理Ｂ演算回路３２５により実行される処理Ｂ、およびＸアクセス回路３０４の制御のもとで実行されるＸアクセス処理を行なう区間を示す。「取り込み処理およびＸアクセス処理」は、図３の主として取り込み回路３２８により実行される取り込み処理、およびＸアクセス回路３０４の制御のもとで実行されるＸアクセス処理を行なう区間を示す。「補間処理」は、図３の補間回路３２６により補間処理を行なう区間を示す。
【００４１】
「処理Ａ」および「補間処理」の処理区間は、１サンプリング周期を前半区間と後半区間に分け、前半区間で第０〜第１５チャンネルの処理を行ない、後半区間で第１６〜第３１チャンネルの処理を行なうようになっている。すなわち、前半区間（処理Ａ前半区間）８０１で第０〜第１５チャンネルに関する処理Ａを、後半区間（処理Ａ後半区間）８１１で第１６〜第３１チャンネルに関する処理Ａを、前半区間（補間前半区間）８０６で第０〜第１５チャンネルに関する補間処理を、後半区間（補間後半区間）８１６で第１６〜第３１チャンネルに関する補間処理を、それぞれ実行する。「処理ＢおよびＸアクセス処理」の処理区間では、１サンプリング周期を前半区間と後半区間に分けたそれぞれの区間の前側区間８０２，８１２で処理Ｂを行ない、後側区間８０３，８１３でＸアクセス処理を行なう。第０〜第１５チャンネルの処理Ｂを行なう処理Ｂ前半区間８０２は、当該チャンネルの処理Ａを行なう処理Ａ前半区間８０１が終了した直後から開始され、必要な処理Ｂが行なわれた後の空き時間の区間８０３でＸアクセス処理が行なわれる。同様に、第１６〜第３１チャンネルの処理Ｂを行なう処理Ｂ後半区間８１２は、当該チャンネルの処理Ａを行なう処理Ａ後半区間８１１が終了した直後から開始され、必要な処理Ｂが行なわれた後の空き時間の区間８１３でＸアクセス処理が行なわれる。取り込み処理は、処理Ｂのアドレス送り出しのタイミングにしたがって行なわれるから、取り込み処理についても同様に、１サンプリング周期を前半区間と後半区間に分けたそれぞれの区間の前側区間８０４，８１４で取り込み処理を行ない、後側区間８０５，８１５でＸアクセス処理を行なう。取り込み処理の後、各チャンネルの波形サンプルが波形バッファ３２７に揃うことが保証されるタイミングで開始される区間８０６，８１６で時分割チャンネルタイミングにしたがって各チャンネルの補間処理を行なう。
【００４２】
図９は、図８の前半処理の各処理中のチャンネルの様子を示す。図９の「処理Ａ前半ｃｈ」は、図８の区間８０１におけるチャンネルの様子を示す。図９の「処理Ｂ前半ｃｈおよびＸアクセス処理」は、図８の区間８０２，８０３におけるチャンネルの様子を示す。図９の「取り込み前半ｃｈおよびＸアクセス処理」は、図８の区間８０４，８０５におけるチャンネルの様子を示す。図９の「補間前半ｃｈ」は、図８の区間８０６におけるチャンネルの様子を示す。後半処理も同様である。なお、図９では各チャンネルタイミングを縦に並べて揃えて記載しているが、実際には各処理のタイミングは図８に示すようにずれている。
【００４３】
この実施の形態では、図９からも分かるように、処理Ａ演算回路３２１によるアドレス作成の処理Ａと補間回路３２６による補間処理は、それぞれ、１サンプリング周期を等分割した時分割チャンネルタイミングにしたがって順番にチャンネルごとの処理が行なわれる。一方、処理Ｂ演算回路３２５からのアドレス送り出しの処理Ｂと取り込み回路３２８による波形データの取り込みの処理は、時分割チャンネルタイミングとは独立したタイミングで動作する。
【００４４】
例えば、図８および図９において、処理Ａ前半区間８０１では、処理Ａ演算回路３２１により、第０〜第１５チャンネルについて時分割チャンネルタイミングにしたがって順番に各チャンネルのアドレスを作成している。処理Ｂ前半区間８０２では、処理Ｂ演算回路３２５により、時分割チャンネルタイミングとは異なるタイミングで、第０チャンネルのアドレスを１つ、第２チャンネルのアドレスを３つ、第５チャンネルのアドレスを１つ、…というように、第０〜第１５チャンネルのアドレスの送り出しを行なっている。１アドレス送り出しを行なう区間の時間幅は、時分割チャンネルタイミングで１チャンネル分の処理を行なう区間の時間幅の１／４である。したがって、１チャンネル分の処理を行なう時間幅で波形メモリを４アクセスできる。各チャンネルで送り出すアドレスの個数が区々であるのは、波形バッファ（サンプルＲＡＭ）３２７に過去の波形データ（再生サンプル）が保持されており各チャンネルごとに必要な個数の波形データのみ読み出せば充分なため、あるいは発音する必要がなくアドレスの送り出しが不要なチャンネルがあるためである。ここ（図９）では、それぞれ、第０チャンネルは１アクセス、第２チャンネルは３アクセス、第５チャンネルは１アクセス、第７チャンネルは２アクセス分の波形メモリからの読み出しが必要な場合を示している。その他のチャンネルは、発音していないか、既に読み出して波形バッファ３２７に記憶されたサンプルのみで楽音が生成できるチャンネルである。なお、発音していないチャンネルとは、音量変化制御回路２０３などで音量レベルの下げられたチャンネルであり、そのチャンネルに関しては処理Ｂにおける波形メモリのアクセスタイミングを使用しないように、制御がなされている。
【００４５】
取り込み前半区間８０４では、処理Ｂ前半区間８０２のアドレス送り出しのタイミングにしたがって波形メモリ１０９から読み出された波形データを取り込んでいる。補間回路３２６は、補間前半区間８０６で時分割チャンネルタイミングにしたがって、波形バッファ３２７のデータを用いて第０〜第１５チャンネルに関する補間処理を行なう。あるチャンネルについて補間を行なう時点で、補間を行なうために必要な当該チャンネルの波形データは波形バッファ３２７に用意されているようになっている。
【００４６】
以上のようなタイミングで、第０〜第１５チャンネルの楽音波形データが生成される。後半の区間を用いて処理される第１６〜第３１チャンネルについても同様である。
【００４７】
処理Ｂ演算回路３２５におけるアドレス送り出しの処理Ｂおよび取り込み回路３２８における波形データ取り込みの処理が必要なアクセス数だけ時分割チャンネルタイミングとは異なるタイミングで行なわれることにより、空きタイムスロットが出現する。図９の「処理Ｂ前半ｃｈおよびＸアクセス処理」および「取り込み前半ｃｈおよびＸアクセス処理」の区間中、「−ｃｈ」は何れのチャンネルのサンプル読み出しにも使用されていない空きタイムスロットを示す。この空きタイムスロットの区間８０３，８０５は、任意に使用可能である。そこで、処理Ｂ演算回路３２５は、この空きタイムスロットの区間でセレクタ３２９，３３０を切り替え、Ｘアクセス処理（Ｘアクセス回路３０４の制御のもとで行なわれるＣＰＵ１０４による波形メモリ１０９へのアクセス処理、およびミキサ２０４から出力ライン２２３を介して戻ってくる楽音波形データの波形メモリ１０９への書き込み処理）が行なわれるようにする。
【００４８】
なお、処理Ａ演算回路３２１や処理Ｂ演算回路３２５を始めとして図３の制御レジスタ２０１および読み書き回路２２０の各部には、不図示のクロック発生部からの制御クロックが入力している。このクロックを基準として各部が動作することにより、図８，９に示すようなタイミングで各処理が実行される。
【００４９】
次に、図３の制御レジスタ２０１および読み書き回路２０２による５つの処理について、以下の（１）〜（５）で詳細に説明する。
【００５０】
（１）処理Ａ演算回路３２１で実行する処理Ａについて詳しく説明する。あるチャンネルで楽音の発音開始が指示されると、当該チャンネルに関する処理Ａが処理Ａ演算回路３２１で実行開始される。処理Ａは、図８，９で説明したように時分割チャンネルタイミングで実行される。まず、１番始めの当該チャンネルのタイムスロット（ノートオン立上がり直後）で、処理Ａ演算回路３２１は、当該チャンネルに対応するＡＲＡＭ３２２（図５）のアドレス格納領域（ＡＤＨとＡＤＬ）を初期化する。初期値は、読み出すべき波形データの先頭アドレスＡＳ（波形データのループ部の先頭位置を基準とした相対アドレスであるので負値）であり、ＣＰＵ１０４が図３のレジスタ３０１を介して指定する。次回以降の当該チャンネルのタイムスロットで、処理Ａ演算回路３２１は、当該チャンネルに対応するＡＲＡＭ３２２のアドレス格納領域の現アドレス値に、当該チャンネルにおけるアドレスの進み値（周波数ナンバ）であるピッチＰＩＴＣＨを加算する。加算結果は、元のＡＲＡＭ３２２のアドレス格納領域に格納される。ピッチＰＩＴＣＨは、ＣＰＵ１０４が図３のレジスタ３０１を介して指定する。
【００５１】
この加算は、具体的には、当該チャンネルの現アドレス値のアドレス小数部にピッチＰＩＴＣＨを加算し、加算結果のうちアドレス小数部のビット数より上位に溢れた値を現アドレス値のアドレス整数部に加算することにより行なう。この溢れ値は、新たに読み出すべき波形サンプルの数になっている。読み書き回路２０２では波形バッファ３２７にそれまでに読み出した波形サンプルが保持されており、上記溢れ値が波形メモリ上での読み出しアドレスの進み量になっているからである。先述した図９は、溢れ値が、第０チャンネルで１、第２チャンネルで３、第５チャンネルで１、第７チャンネルで２の場合である。なお、その他のチャンネルは、発音していない、または、溢れ値が０のチャンネルである。
【００５２】
なお、波形メモリ１０９上の波形データはアタック部とそれに引き続くループ部とから構成され、波形データのループ部の先頭位置（すなわちアタック部の末尾）を基準として、読み出しアドレスの初期値ＡＳ（負値）およびループ部末尾位置の相対アドレスＬＰＡ（正値）が設定されている。波形サンプルのアクセスはアタック部の先頭から開始され（すなわち現アドレスが、負の相対アドレスＡＳからスタートして徐々に増加する）、アタック部の読み出しが終わると現アドレス値が正の値になりループ部に入る。以後は必要に応じてループ部の波形サンプルを繰り返し読み出す。そのため、現アドレス値がループ部末尾位置（＝相対アドレスＬＰＡ）を越えたときは、現アドレス値から値ＬＰＡを減算し、減算結果を新たな現アドレス値として設定する処理を行なう。現アドレス値には、後に波形データのループ部の先頭を示す絶対アドレスＷＡを加算する。処理Ａ演算回路３２１は、上述のアドレスを作成する処理中で、このようなアドレスをループ部先頭付近に戻す処理も行なっている。
【００５３】
以上のように、当該チャンネルのタイムスロットで、ＡＲＡＭ３２２上の現アドレスにピッチ（周波数ナンバ）を累算していき、当該チャンネルに関する順次アドレスをＡＲＡＭ３２２上に生成する。
【００５４】
処理Ａでは、上述した各チャンネルのアドレスを作成する処理の他、制御ＲＡＭ３２４（図４）内の書き込み位置を指す書き込みポインタを１つ進め、各チャンネルごとの必要サンプル数を、制御ＲＡＭ３２４の書き込みポインタで指す位置に格納する処理を行なう。各チャンネルごとの必要サンプル数は、上述の現アドレス値のアドレス小数部にピッチＰＩＴＣＨを加算した加算結果のうちアドレス小数部のビット数より上位に溢れた値に一致しているから、この溢れ値を得てチャンネル番号とともに制御ＲＡＭ３２４に格納する。
【００５５】
さらに、処理Ａでは、上述の各チャンネルのアドレス作成、および各チャンネルに関する必要サンプル数の格納の処理の他、所定の複数のチャンネルごとに必要な波形メモリアクセス数（この実施の形態ではサンプル数とアクセス数とは一致する）を累算する処理をも行なう。具体的には、処理Ａ演算回路３２１で、第０〜第１５チャンネルのアドレス作成（前半処理）と並行してこれらのチャンネルについて読み出すべき必要なサンプル数を累算し、さらに第１６〜第３１チャンネルのアドレス作成（後半処理）と並行してこれらのチャンネルについて読み出すべき必要なサンプル数を累算する。
【００５６】
アキュムレータ（ＡＣＣ）３２３は、この累算を行なうためのアキュムレータである。読み書き回路２０２では、前半処理と後半処理に分けて累算を行なうため、アキュムレータ３２３は実際には前半アキュムレータと後半アキュムレータとの２つのアキュムレータからなる。単に、アキュムレータ３２３というときは、前半処理では前半アキュムレータ、後半処理では後半アキュムレータのことを指すものとする。
【００５７】
具体的に累算の処理は、以下のように行なう。まず、前半処理および後半処理の開始時点でアキュムレータ３２３を初期設定（ゼロクリア）する。以後は、前半処理および後半処理の最後のチャンネルまで、必要なサンプル数（すなわち、アクセス数）をアキュムレータ３２３に累算していく。各チャンネルについて読み出すべき必要なサンプル数は、上記制御ＲＡＭ３２４に書き込む際に分かる。
【００５８】
さらに処理Ａでは、上記のように累算した結果であるアクセス回数累算値が、実際にアクセスを実行する処理Ｂの前半区間または後半区間における最大アクセス可能数（アクセスの制限回数）を超えていないか判定し、その結果に応じて各チャンネルごとのアクセス回数および補間次数を決定する。以下、これについて説明する。まず前半処理の区間に着目して説明する。前半処理の区間は１サンプリング周期の半分の時間区間であり、その区間で第０〜第１５チャンネルに関する処理Ｂ（および多少の遅れ時間の後に実行される取り込み処理）を行なう。また、処理Ｂで１アドレス送り出しを行なう区間の時間幅は時分割チャンネルタイミングで１チャンネル分の処理を行なう区間の時間幅の１／４である。したがって、もしＸアクセス処理を当該区間内で行なわないなら（すなわち図８，９の区間８０３，８０５がない場合）、前半区間では６４アクセスが可能である。この実施の形態では、各チャンネルで４点補間を行なうので、前半区間で処理する１６チャンネルのすべてで４点の波形サンプルを読み出す必要がある場合でも、４点×１６ｃｈ＝６４アクセスであるから、Ｘアクセス処理を行なわずに前半区間のすべてを処理Ｂおよび取り込み処理に使用すれば、すべてのチャンネルで４点補間を行なうことができる。ただし、優先フラグ（次の処理Ｂの説明で詳述する）３０３がオンされているときは前半区間のＸアクセス処理で所定回（この実施の形態では１回）のアクセスを優先的に実行しなければならないため、前半区間の処理Ｂおよび取り込み処理による最大アクセス可能数は６４から上記Ｘアクセス処理のアクセス数を減算した値となる。したがって、上述したようにアキュムレータ３２３で累算したアクセス回数累算値が前半区間における最大アクセス可能数を超えることが考えられる。この場合は、制御ＲＡＭ３２４に書き込んだ各チャンネルのサンプル数をすべてアクセスすることはできないので、アクセス回数の多い（例えば３回あるいは４回）チャンネルの中の何れかのチャンネルのアクセス回数を削減し補間次数を落とす。補間次数を落とすというのは、例えば、４点補間の処理を３点補間あるいは２点補間（直線補間）に変更する、ということである。アクセス回数を削減するチャンネルの決定方法としては、例えば下記の▲１▼および▲２▼のような方法がある。
【００５９】
▲１▼チャンネル順に片端からアクセス回数を削減する。
▲２▼その時点で音量レベルの小さいチャンネルからアクセス回数を削減する。このようにすると楽音への影響が小さい。各チャンネルの音量レベルは、エンベロープ値から分かる。
【００６０】
なお、この実施の形態では前半区間で６４アクセス可能で補間は４点補間であり、実際には第０〜第１５のすべてのチャンネルで４点の読み出しを行なう場合はきわめて稀であると考えられるから、アクセス回数を累算して最大アクセス可能数と比較した結果から各チャンネルのアクセス回数と補間次数を決定する機能は設けなくとも実用上はほとんど問題がない。ただし、４点補間でなく例えば各チャンネルで６点補間を行なう場合や、優先フラグ３０３がオンのときにＸアクセス処理に優先的に確保するアクセス数が多い場合などでは、有効な機能である。以上、前半区間に着目して説明したが後半区間でも同様である。
【００６１】
（２）次に、処理Ｂ演算回路３２５で実行する処理Ｂについて詳しく説明する。処理Ｂ演算回路３２５は、時分割チャンネルタイミングとは異なるタイミングで、処理Ｂ、すなわちアドレスを波形メモリ１０９に向けて送り出す処理を行なう。図９で説明したように、時分割チャンネルタイミングの１チャンネル当りの時間内で４アクセス（４サンプルの読み出し）が可能である。処理Ｂの波形メモリアクセス処理は、処理Ａの時分割チャンネルタイミングにしたがった処理とは関係がなく、読み出しが必要な各チャンネルについて順次連続して行なわれる。読み出しが必要なチャンネルとサンプル数は、上述の処理Ａで決定され、制御ＲＡＭ３２４にセットされている。また、図８，９で説明したように、あるチャンネルについて処理Ｂを行なうときには既に当該チャンネルに関する処理Ａは実行済みであり、当該チャンネルのアドレス値がＡＲＡＭ３２２にセットされている。
【００６２】
アドレス送り出しの処理を説明する。まず、図４に示す制御ＲＡＭ３２４内の読み出し位置を指す読み出しポインタの値が、当該チャンネルに関する処理Ａ前半または後半処理の終了時点の書き込みポインタの値と一致しているか否か判定する。例えば、当該チャンネルの処理Ｂが図８の処理Ｂ前半区間８０２内の処理である場合は、読み出しポインタの値を、処理Ａ前半区間８０１の終了時点の書き込みポインタの値と比較するということである。これが一致すれば、その処理Ｂの区間で読み出すべきサンプルはもう無いということだから、当該区間の処理Ｂは終えて、残った空きスロットで後述するＸアクセス処理を行なうように制御する。
【００６３】
読み出しポインタの値が上記書き込みポインタの値に一致していないときは、読み出しポインタを１つ進めて、読み出しポインタが指すチャンネル番号とサンプル数を制御ＲＡＭ３２４から読み出す。そして、そのサンプル数分の当該チャンネル番号に関するアドレスを波形メモリ１０９に送り出す。具体的には、ＡＲＡＭ３２２から当該チャンネルの現アドレス整数部を読み出し、必要なサンプル数のサンプルを順次アクセスするための複数のオフセットを加算し、さらに波形データのループ部の先頭を示す絶対アドレスＷＡを加算して（処理Ａで作成したアドレスは相対アドレスであるので、絶対アドレスに変換するためＷＡを加算する）、最終的な読み出しアドレスＷＭＡを求め、セレクタ３２９がこのアドレスＷＭＡを選択出力するように制御する。これにより１アドレスが波形メモリ１０９に送り出される。加算するオフセットは、例えば図９の例では、第０チャンネルでは０、第２チャンネルの１回目が−２、２回目が−１、３回目が０、第５チャンネルの１回目が−１、２回目が０などとなる。以上のようにして、図８，９で説明したアドレス送り出しのタイミングで、読み出しポインタを進めながらアドレスを連続的に送り出していく。
【００６４】
図８，９でも説明したように、上記アドレス送り出しの処理は必要な回数だけ時分割チャンネルタイミングとは異なるタイミングで行なわれるので、アクセス余り時間としての空きタイムスロットが出現する。そこで、アドレス送り出しの処理の後、処理Ｂ演算回路３２５はＸＡレジスタ３１１からのアドレスが選択出力されるようにセレクタ３２９を切り替え（さらに、波形メモリ１０９のデータラインがＦＩＦＯ３１３に接続するようにセレクタ３３０を切り替える）、Ｘアクセス回路３０４の制御のもとでこの余り時間を利用してＸアクセス処理が行なわれるようにする。
【００６５】
優先フラグ３０３は、ＣＰＵ１０４が適宜オン／オフする。優先フラグ３０３がオンされているとき、処理Ｂ演算回路３２５は楽音発生のための各チャンネルの波形データ読み出しの状態にかかわらず、Ｘアクセス処理に最低１回（複数回でもよい。確保するスロット数は任意に指定できる。）のアクセススロットを確保する（すなわち、図８、９において、前半処理では区間８０３，８０５を、後半処理では区間８１３，８１５を、それぞれ最低限１アクセス分だけは確保する）。これにより、ＣＰＵ１０４からの波形メモリ１０９へのアクセス処理、またはミキサ２０４から出力ライン２２３を介して戻ってくる楽音波形データの波形メモリ１０９への書き込み処理を、１アクセスだけ必ず入れることができる。
【００６６】
（３）次に、取り込み回路３２８で実行する取り込み処理について説明する。取り込み回路３２８は、処理Ｂ演算回路３２５から送り出されたアドレスＷＭＡにより読み出された波形サンプルを取り込み、波形バッファ３２７に書き込む。このときセレクタ３３０は、処理Ｂ演算回路３２５の制御のもとで、波形メモリ１０９のデータラインを取り込み回路３２８に接続する。波形サンプル取り込みの結果、波形バッファ３２７には、基本的に各チャンネル４サンプルが用意されることになる。ただし、処理Ａで補間次数を落としたチャンネルがある場合は、当該チャンネルについては、次数を落とした補間で必要なサンプルが波形バッファ３２７に用意される。なお、波形メモリ１０９に格納されている波形サンプルが圧縮されている場合は、取り込み回路３２８でデコードを行なうようにする。
【００６７】
取り込み処理は処理Ｂによるアドレス送り出しと同期して行なわれるので、処理Ｂで説明したように、アクセス余り時間としての空きタイムスロットが出現する。そこで、取り込み処理の後、処理Ｂ演算回路３２５は波形メモリ１０９のデータラインとＦＩＦＯ３１３とが接続されるようにセレクタ３３０を切り替え、Ｘアクセス回路３０４の制御のもとでこの余り時間を利用してＸアクセス処理が行なわれるようにする。
【００６８】
（４）次に、補間回路３２６で実行する補間処理について詳しく説明する。補間回路３２６は、時分割チャンネルタイミングにしたがって、チャンネルごとに順に補間処理を行なう。１つのチャンネルに関する補間処理は、以下のとおりである。まず、波形バッファ３２７から当該チャンネルの４つの波形サンプルを順次読み出す。そして、各サンプルに所定の補間係数を乗算して累算する。各サンプルに乗算する補間係数は、当該チャンネルのアドレス小数部ＦＲＡＣに基づいて決定する。アドレス小数部ＦＲＡＣは、ＡＲＡＭ３２２から処理Ｂ演算回路３２５経由で入力する。以上により、補間済みの楽音波形データが生成出力される。なお、上述した波形メモリのアクセス回数削減により補間次数を落としたチャンネルについては、落とした次数での補間を行ない補間済みの楽音波形データを得る。
【００６９】
（５）次に、Ｘアクセス処理について詳しく説明する。上述したように、処理Ｂおよび取り込み処理で必要な各チャンネルについて順次連続してアドレス送り出しを行ない波形サンプルを波形バッファ３２７に読み出した後、空きタイムスロットがあるときには、処理Ｂ演算回路３２５は、その空きタイムスロットの区間でＸアクセス処理を行なうようにセレクタ３２９と３３０を切り替える。具体的には、図８，９の区間８０３，８１３においてＸＡレジスタ３１１が波形メモリ１０９のアドレスラインに接続されるようにセレクタ３２９を切り替え、区間８０５，８１５においてＦＩＦＯ３１３が波形メモリ１０９のデータラインに接続されるようにセレクタ３３０を切り替える。処理Ｂ演算回路３２５は、このようにセレクタ３２９，３３０を切り替えるとともに、Ｘアクセス処理が可能になった旨をＸアクセス回路３０４に伝える。これにより、Ｘアクセス回路３０４は（ＣＰＵ１０４から指示されていた場合）Ｘアクセス処理を開始する。また、処理Ｂ演算回路３２５は、Ｘアクセス処理終了時（１サンプリング周期の半分の時間幅である前半区間および後半区間の終了時）に再びセレクタ３２９，３３０を切り替えて、次の処理Ｂおよび取り込み処理が可能になるようにする。なお、波形メモリ１０９へのアドレスの入力と当該アドレスのデータアクセスとは若干のタイミングのずれがある（例えば図８の取り込み前半区間８０４は処理Ｂ前半区間８０２から若干遅れている）ので、セレクタ３２９の切り替えのタイミングとセレクタ３３０の切り替えのタイミングとは若干ずれることになるが、その切り替えの制御は処理Ｂ演算回路３２５により適正に行なわれるようになっている。
【００７０】
Ｘアクセス処理は、具体的には、ＣＰＵ１０４から波形メモリ１０９に波形データを書き込む処理、ＣＰＵ１０４により波形メモリ１０９から波形データを読み出す処理、およびミキサ２０４から出力ライン２２３を介して戻ってくる波形データの波形メモリ１０９への書き込み処理の３つがある。以下、それぞれについて説明する。
【００７１】
ＣＰＵ１０４から波形メモリ１０９にデータを書き込む場合、まずＣＰＵ１０４はセレクタ３１２を切り替えて、ＣＰＵ１０４が接続されているデータバスとＦＩＦＯ３１３とが接続されるようにする。そして、ＣＰＵ１０４は、ＸＡレジスタ３１１に書き込みアドレス（先頭アドレス）をセットし、書き込むべき波形サンプルデータの数をサンプル数レジスタ３１５にセットし、書き込むべき波形サンプルデータの始めの８サンプルをセレクタ３１２を介して８段のＦＩＦＯ３１３に順にセットして、Ｘアクセス回路３０４に書き込みスタートを指示する。以後、ＣＰＵ１０４は、適宜Ｘフラグ３１４を参照し、Ｘフラグ３１４がオンされているときは、ＦＩＦＯ３１３に、書き込むべき波形サンプルデータの残りを順次書き込む。Ｘフラグ３１４はＦＩＦＯ３１３の空きの状態を示すフラグであり、ＣＰＵ１０４からのデータ書き込みの際には、ＦＩＦＯ３１３に空きがあるとき自動的にオンとなり、ＦＩＦＯ３１３に空きがないとき自動的にオフとなる。したがって、ＣＰＵ１０４はＸフラグ３１４がオフとなるまでＦＩＦＯ３１３に書き込みデータを送ってよい。
【００７２】
図７（ａ）は、ＣＰＵ１０４からＦＩＦＯ３１３にデータを書き込む際のＦＩＦＯの使用方法を示す。矩形７０１，７０２はＦＩＦＯ３１３を示し、斜線部分はデータが書き込まれている部分、白抜き部分は空きの部分を示す。７０１ではＦＩＦＯ３１３の８段の領域すべてにデータが書き込まれておりＸフラグがオフされている。このときＣＰＵ１０４はデータをＦＩＦＯ３１３に書き込むことができない。Ｘアクセス処理でＦＩＦＯ３１３のデータが読み出され波形メモリ１０９に書き込まれると、７０２に示すようにＦＩＦＯ３１３に空きができＸフラグがオンされる。このときＣＰＵ１０４は、Ｘフラグのオンを検出して次の書き込みデータをＦＩＦＯ３１３に書き込むことができる。
【００７３】
書き込むべき波形サンプルデータをすべてＦＩＦＯ３１３に送ったら、ＣＰＵ１０４から見ると書き込み終了である。そこで、ＣＰＵ１０４は、Ｘアクセス回路３０４にＣＰＵ書き込みストップ処理を指示して書き込み処理を終了する。
【００７４】
一方、ＣＰＵ１０４からの書き込みスタート指示を受けたＸアクセス回路３０４は、処理Ｂ演算回路３２５から空きタイムスロットである旨の指示がある区間（区間８０３，８１３，８０５，８１５）の各タイムスロットで、ＦＩＦＯ３１３内の波形サンプルデータを波形メモリ１０９に書き込む処理を行なう。１つのタイムスロットで行なう処理は、以下の通りである。まずＸＡレジスタ３１１に格納されているアドレスを波形メモリ１０９に送出する。次に、ＦＩＦＯ３１３から波形サンプルデータを１つ取り出し、波形メモリ１０９に送出して上記アドレス位置に書き込む。その後、ＸＡレジスタ３１１のアドレスをインクリメントする。Ｘアクセス回路３０４内には、書き込みスタート指示でゼロクリアされ、波形サンプルデータを１つ波形メモリ１０９に書き込むとカウントアップされるカウンタが備えられており、Ｘアクセス回路３０４は書き込みの度にこのカウンタの値とサンプル数レジスタ３１５のサンプル数を比較する。カウンタの値がサンプル数レジスタ３１５のサンプル数に至ったら、指示されたデータをすべて書き込んだということであるから、書き込み処理を終了する。また、ＣＰＵ１０４からＣＰＵ書き込みストップ処理の指示があったときは、ＦＩＦＯ３１３に残っているデータをすべて波形メモリ１０９に書き込んで、処理を終了する。なお、サンプル数レジスタ３１５を設けることなく、Ｘアクセス回路３０４では、ＣＰＵ１０４からのＣＰＵ書き込みストップ処理の指示があるまでＦＩＦＯ３１３にデータがあれば波形メモリ１０９に書き込むこととしてもよい。
【００７５】
波形メモリ１０９からＣＰＵ１０４にデータを読み出す場合、まずＣＰＵ１０４はセレクタ３１２を切り替えて、ＣＰＵ１０４が接続されているデータバスとＦＩＦＯ３１３とが接続されるようにする。そして、ＣＰＵ１０４は、ＸＡレジスタ３１１に読み出しアドレス（先頭アドレス）をセットし、読み出すべき波形サンプルデータの数をサンプル数レジスタ３１５にセットして、Ｘアクセス回路３０４に読み出しスタートを指示する。以後、ＣＰＵ１０４は、適宜Ｘフラグ３１４を参照し、Ｘフラグ３１４がオンされているときは、ＦＩＦＯ３１３から波形サンプルデータを順次読み出す。Ｘフラグ３１４はＦＩＦＯ３１３の空きの状態を示すフラグであり、ＣＰＵ１０４によるデータ読み出しの際には、ＦＩＦＯ３１３に波形メモリ１０９からの読み出しデータがあるとき自動的にオンとなり、ＦＩＦＯ３１３に読み出しデータがないとき自動的にオフとなる。
【００７６】
図７（ｂ）は、ＣＰＵ１０４によりＦＩＦＯ３１３からデータを読み出す際のＦＩＦＯの使用方法を示す。矩形７０３，７０４はＦＩＦＯ３１３を示し、斜線部分は読み出したデータを格納した部分、白抜き部分は空きの部分を示す。７０３ではＦＩＦＯ３１３の８段の領域はすべて空きでありＸフラグがオフされている。このときＦＩＦＯ３１３には読み出しデータが未だないからＣＰＵ１０４はデータを読み出すことができない。Ｘアクセス処理で波形メモリ１０９からデータが読み出されＦＩＦＯ３１３に書き込まれると、７０４に示すようにＸフラグがオンされる。このときＣＰＵ１０４は、Ｘフラグのオンを検出してＦＩＦＯ３１３から読み出しデータを読み出すことができる。
【００７７】
Ｘフラグ３１４はＦＩＦＯ３１３に読み出しデータがあるか否かを示すとともに、Ｘフラグ３１４がオフのときはサンプル数レジスタ３１５で指定された数だけの波形サンプルを読み出したか否かを判別できるようになっている。そこで、ＣＰＵ１０４は、Ｘフラグ３１４がオフのとき、サンプル数レジスタ３１５で指定した数だけの波形サンプルデータを読み出したか否かを判別し、読み出していたらＸアクセス回路３０４にＣＰＵ読み出しストップ処理を指示して読み出し処理を終了する。
【００７８】
一方、ＣＰＵ１０４からの読み出しスタート指示を受けたＸアクセス回路３０４は、処理Ｂ演算回路３２５から空きタイムスロットである旨の指示がある区間（区間８０３，８１３，８０５，８１５）の各タイムスロットで、波形メモリ１０９から波形サンプルデータを読み出してＦＩＦＯ３１３に書き込む処理を行なう。１つのタイムスロットで行なう処理は、以下の通りである。まずＸＡレジスタ３１１に格納されているアドレスを波形メモリ１０９に送出する。次に、当該アドレスの波形サンプルデータを波形メモリ１０９から１つ読み出し、ＦＩＦＯ３１３に書き込む。その後、ＸＡレジスタ３１１のアドレスをインクリメントする。Ｘアクセス回路３０４内には、読み出しスタート指示でゼロクリアされ、波形サンプルデータを１つ波形メモリ１０９からＦＩＦＯ３１３に読み出すとカウントアップされるカウンタが備えられており、Ｘアクセス回路３０４は読み出しの度にこのカウンタの値とサンプル数レジスタ３１５のサンプル数を比較する。カウンタの値がサンプル数レジスタ３１５のサンプル数に至ったら、指示された数のデータを読み出したということであるから、読み出し処理を終了する。また、ＣＰＵ１０４からＣＰＵ読み出しストップ処理の指示があったときは、処理を終了する。なお、サンプル数レジスタ３１５を設けることなく、Ｘアクセス回路３０４では、ＣＰＵ１０４からのＣＰＵ読み出しストップ処理の指示があるまで波形メモリ１０９からＦＩＦＯ３１３へのデータ読み出しを続けることとしてもよい。
【００７９】
ミキサ２０４から出力ライン２２３を介して戻ってくる波形データを波形メモリ１０９に書き込む場合、まずＣＰＵ１０４はセレクタ３１２を切り替えて、ミキサ２０４からの出力ライン２２３とＦＩＦＯ３１３とが接続されるようにする。そして、ＣＰＵ１０４は、ＸＡレジスタ３１１に書き込みアドレス（先頭アドレス）をセットし、書き込むべき波形サンプルデータの数をサンプル数レジスタ３１５にセットして、Ｘアクセス回路３０４に書き込みスタートを指示する。以後、サンプリング周期ごとにミキサ２０４から出力ライン２２３を介して波形サンプルデータが送出されてくるので、Ｘアクセス回路３０４は、その送られてきたデータをＦＩＦＯ３１３に書き込む。なお、ミキサ２０４から戻ってくるデータの書き込みの場合、上述のＣＰＵ１０４からのデータ書き込みの場合のようにＸフラグ３１４がオンのときデータをＦＩＦＯ３１３に書き込むというようなことができず、ミキサ２０４から送られてくるデータはサンプリング周期ごとに送られてくるので、送られてきたデータはすぐにＦＩＦＯ３１３に書き込まなければならない。その時点でＦＩＦＯ３１３に空きがないときは、ミキサ２０４から送られてきたデータは捨てられる。ただし、既に述べたように、１サンプリング周期の間にＸアクセス処理のスロットが１つも取れないほど楽音発生のための波形メモリアクセスが混むという事態はほとんど無いと考えられるので、上記の場合にミキサ２０４から送られてきたデータを捨てることにしても実用上はほとんど問題はない。また、優先フラグ３０３をオンしておけば、１サンプリング周期の間にＸアクセス処理のスロットを少なくとも１回は確保できるので、ミキサ２０４から送られてきたデータは必ず波形メモリ１０９に書き込めることになる。
【００８０】
一方、ＣＰＵ１０４からの書き込みスタート指示を受けたＸアクセス回路３０４は、処理Ｂ演算回路３２５から空きタイムスロットである旨の指示がある区間（区間８０３，８１３，８０５，８１５）の各タイムスロットで、ＦＩＦＯ３１３内の波形サンプルデータを波形メモリ１０９に書き込む処理を行なうが、この処理は上記ＣＰＵ１０４からの波形データ書き込みで説明したのと同じであるので、説明を省略する。
【００８１】
以上で図３の制御レジスタ２０１および読み書き回路２０２による５つの処理の詳細な説明を終わる。
【００８２】
図１０および図１１は、図２の信号処理回路（ＤＳＰ）２０５およびミキサ２０４の設定の具体例を示す。
【００８３】
図１０（ａ）は、サンプリングを行なう際の設定の例を示す。ブロック１００１，１００５は、図２のミキサ２０４によるミキシング処理（以下、単にＭＩＸとする）を示す。ブロック１００２，１００３，１００４は、図２の信号処理回路２０５で実行する処理（信号処理回路２０５に設定されたマイクロプログラムに対応する）を示す。矢印は信号の流れを示し、ＦＩＦＯ１００６は図３のＸアクセス回路３０４内のＦＩＦＯ３１３に相当する。ＭＩＸ１００１への「ＡＤＣ入力」は、図２の外部回路（ＡＤＣ）１１０からインタフェース２０６および入力ライン２１３を介して入力する外部からの楽音信号である。このＡＤＣ入力は、ミキサ２０４への入力の８チャンネルの内の一つを用いる。
【００８４】
ＭＩＸ１００１の出力は、図２のミキサ２０４から出力ライン２２１を介して信号処理回路２０５に出力される８チャンネルの内の一つである。信号処理回路２０５では図１０（ａ）のブロック１００２〜１００４に示す処理を行なう。すなわち、ＭＩＸ１００１からの出力に対し、エンベロープ抽出処理１００３によってエンベロープを抽出し、エンベロープの立ち上がりでゲート１００２を開くようにする。ゲート１００２が開かれると、サンプリング周期毎にＭＩＸ１００１の出力すなわち外部から入力した楽音波形が波形処理１００４へと送出される。波形処理１００４では、入力した楽音波形に対して各種の波形処理を施す。例えば、直流分をカットするＤＣカット処理、入力レベルが小のときにミュートをかけるノイズミュート処理、エンベロープのレベルがある所定値以上の場合にゲインを下げるコンプレッサ処理、入力波形のレベルが小さい場合によりそのレベルを小さくするエキスパンダ処理、および高いサンプリング周波数で外部から入力した楽音波形を低いサンプリング周波数に落としたり逆にサンプリング周波数を上げたりすためのＦｓ（サンプリング周波数）変換処理などである。
【００８５】
波形処理１００４の出力は再びＭＩＸ１００５に戻る。これは、図２の信号処理回路２０５の処理結果を入力ライン２１２のうちの１チャンネルを使ってミキサ２０４に戻す部分に相当する。そして、ＭＩＸ１００５からＦＩＦＯ１００６に楽音波形を出力し波形メモリ１００９に書き込む。これは、ミキサ２０４から出力ライン２２３を介して制御レジスタ２０１内のＦＩＦＯ３１３に波形データを書き込む部分を示す。ＦＩＦＯ３１３に書き込まれたデータは既に説明したように波形メモリ１０９に書き込まれる。
【００８６】
図１０（ｂ）は、リサンプリング用のマイクロプログラムおよびミキサの設定の例（その１）を示す。図１０（ａ）と同様に、ＭＩＸ１０１１，１０１４は図２のミキサ２０４に対応し、ＦＩＦＯ１０１５は図３のＦＩＦＯ３１３に対応する。ブロック１０１２，１０１３は、図２の信号処理回路２０５に設定するマイクロプログラムに対応する。ＭＩＸ１０１１への「ｃｈ出力」は、図２の音量変化制御回路２０３から入力ライン２１１を介して入力する楽音信号であり、サンプリングなどによりあらかじめ波形メモリ１０９上に用意されている波形データを読み出して生成した楽音波形である。この「ｃｈ出力」は、３２チャンネルのうちの一つでもよいし、複数チャンネルでもよい。すなわち、複数の発音チャンネルで複数の波形データを読み出し、読み出された複数の波形データをＭＩＸ１０１１でミキシングするようにしてもよい。
【００８７】
ＭＩＸ１０１１の出力は、図２のミキサ２０４から出力ライン２２１を介して信号処理回路２０５に出力される８チャンネルの内の一つである。信号処理回路２０５ではブロック１０１２，１０１３に示す処理を行なう。すなわち、ＭＩＸ１００１からの出力に対し、分離フィルタ１０１２による成分分離を施し周期成分と非周期成分とを取り出す。インターリーブ１０１３は、この周期成分と非周期成分とを交互にＭＩＸ１０１４に出力しＦＩＦＯ１０１５に書き込むようにする。これにより、サンプリングなどによりあらかじめ波形メモリ上に用意されている楽音波形に対し成分分離を施して再び波形メモリに戻すリサンプリングが行なわれる。なお、分離フィルタ１０１２から出力される周期成分については例えばＬＰＣ圧縮などを施してもよい。
【００８８】
図１０（ｃ）は、リサンプリング用のマイクロプログラムおよびミキサの設定の例（その２）を示す。図１０（ａ）と同様に、ＭＩＸ１０２１，１０２３は図２のミキサ２０４に対応し、ＦＩＦＯ１０２４は図３のＦＩＦＯ３１３に対応する。ブロック１０２２は、図２の信号処理回路２０５に設定するマイクロプログラムに対応する。ＭＩＸ１０２１への「ｃｈ出力」は、図２の音量変化制御回路２０３から入力ライン２１１を介して入力する楽音信号であり、サンプリングなどによりあらかじめ波形メモリ１０９上に用意されている波形データを読み出して生成した楽音波形である。この「ｃｈ出力」は、３２チャンネルのうちの一つでもよいし、複数チャンネルでもよい。すなわち、複数の発音チャンネルで複数の波形データを読み出し、読み出された複数の波形データをＭＩＸ１０２１でミキシングするようにしてもよい。
【００８９】
ＭＩＸ１０２１の出力は、図２のミキサ２０４から出力ライン２２１を介して信号処理回路２０５に出力される８チャンネルの内の一つである。信号処理回路２０５ではブロック１０２２に示す波形処理を行なう。この波形処理１０２２としては、例えば、イコライザ、モジュレーション（変調）、波形圧縮、Ｆｓ変換、物理モデル音源、およびリバーブ付与の処理などがある。物理モデル音源というのは、ミキサ１０２１からの出力を駆動信号として物理モデル音源を働かせてその結果の波形を出力するということである。波形処理１０２２の結果は、ＭＩＸ１０２３を介してＦＩＦＯ１０２４に書き込まれ、再び波形メモリ１０９に録音される。これにより、サンプリングなどにより波形メモリ上に存在する楽音波形に対し各種の波形処理を施して再び波形メモリに戻すリサンプリングが行なわれる。
【００９０】
図１１（ａ）は、楽音発生用のマイクロプログラムおよびミキサの設定の例（その１）を示す。また、図１１（ｂ）は、楽音発生用のマイクロプログラムおよびミキサの設定の例（その２）を示す。図１０（ａ）と同様に、ＭＩＸ１１０１，１１０３，１１１１〜１１１３，１１１７は図２のミキサ２０４に対応する。ＤＡＣ１１０４，１１１８は図１のＤＡＣ１１２に対応する。図１１（ａ）ではブロック１１０２が、図１１（ｂ）ではブロック１１１４〜１１１６が、それぞれ、図２の信号処理回路２０５に設定するマイクロプログラムに対応する。各ＭＩＸ１１０１，１１１１〜１１１３へ入力している「ｃｈ出力」は、それぞれ、図２の音量変化制御回路２０３から入力ライン２１１を介して入力する楽音信号（３２チャンネルのうちの一つでもよいし、複数チャンネルでもよい）である。各ＭＩＸ１１０１，１１１１〜１１１３の出力は、それぞれ、図２のミキサ２０４から出力ライン２２１を介して信号処理回路２０５に出力される８チャンネルの内の一つである。
【００９１】
図１１（ａ）の場合、信号処理回路２０５ではＭＩＸ１１０１の出力に対してリバーブ処理１１０２を施し、ＭＩＸ１１０３を介してＤＡＣ１１０４に出力し放音する。図１１（ｂ）の場合、信号処理回路２０５ではＭＩＸ１１１１〜１１１３のの出力に対してそれぞれコーラス処理１１１４、リバーブ処理１１１５、およびバリエーション１１１６を施し、その処理結果をＭＩＸ１１１７でミキシングしてＤＡＣ１１０４に出力し放音する。
【００９２】
なお、図１０および図１１の各設定例において、ＭＩＸのブロックには図示した入力以外の他の楽音波形を入力させてミキシングを行なうようにしてもよい。また、これらのマイクロプログラムの設定例は、信号処理回路２０５のマイクロプログラムメモリの容量に応じて適宜並行して実行するように設定することもできる。例えば、図１０（ａ）のサンプリング用のマイクロプログラムと図１１（ａ）の楽音発生用のマイクロプログラムとを同時に実行するようなことも可能である。また、ＭＩＸ１１０３，１１１７のミキシング結果を、ＤＡＣ１１０４，１１１８に出力するとともに、ライン２２３を通じてＦＩＦＯ３１３に出力し、波形メモリ１０９へ書き込むようにしてもよい。これは、演奏された波形データをそのまま録音する、フレーズ録音である。
【００９３】
次に、フローチャートを用いて、上述の電子楽器のＣＰＵ１０４の処理手順を説明する。
【００９４】
図１２（ａ）は、ＣＰＵ１０４の制御プログラムのうちメインルーチンの処理手順を示す。この電子楽器の電源がオンされると、まずステップ１２０１で、各種の初期設定を行なう。次にステップ１２０２で何らかの起動要因があるか否かチェックし、ステップ１２０３で起動要因があればステップ１２０４に進む。起動要因がなければ再び１２０２に戻る。ステップ１２０４では発生している起動要因の種類を判別しそれぞれの処理に分岐する。起動要因が鍵盤１０１の鍵操作イベントであるとき（外部からのＭＩＤＩイベントを受け付けることができるようになっている場合は、ＭＩＤＩイベント発生も同等である）は、ステップ１２０５の鍵盤処理を行ない、その後再びステップ１２０２に戻る。起動要因がパネルスイッチ１０３の操作イベントであるときは、ステップ１２０６のパネルスイッチ処理を行ない、ステップ１２０２に戻る。起動要因がＸフラグ３１４に関するイベントであるときは、ステップ１２０７でフラグ処理を行ない、ステップ１２０２に戻る。起動要因がその他の要因（例えば後述するソフト音源の波形生成トリガーなど）であるときは、ステップ１２０８でその他の処理を行ない、ステップ１２０２に戻る。起動要因が電源スイッチの操作イベントであるときは、ステップ１２０４で終了処理を行なった後、処理を終了する。
【００９５】
図１２（ｂ）は、図１２（ａ）のステップ１２０５の鍵盤処理のうち鍵盤１０１のキーオンイベントがあったときに実行されるキーオンイベント処理の手順を示す。まずステップ１２１１で、キーオンされた鍵のノートナンバをレジスタＮＮに、キーオン時のベロシティをレジスタＶＤに、それぞれ設定する。次に、ステップ１２１２で、発音チャンネル（第０〜第３１チャンネル）の割り当てを行ない、割り当てたチャンネルナンバをレジスタｉに設定する。ステップ１２１３で、現在設定されている音色のノートナンバＮＮに対応する波形データのアドレスなどの情報を制御レジスタ（具体的には図３のレジスタ３０１や３０２）２０１に設定する。ステップ１２１４では、現在設定されている音色のエンベロープパラメータやミキサの混合比などの設定をやはり制御レジスタ２０１に対して行なう。その後、ステップ１２１５で第ｉチャンネルに対しノートオン（音源１０８に対する発音指示）を送出し、既に説明したような音源部１０８の楽音発生の動作を開始させる。
【００９６】
図１３（ａ）は、図１２（ａ）のステップ１２０６のパネルスイッチ処理のうちサンプリングスイッチ（ＳＷ）がオンされたときに実行されるサンプリングＳＷイベント処理の手順を示す。ユーザは、あらかじめ外部回路１１０として外部音を入力してＡ／Ｄ変換するＡＤＣを接続しておき、サンプリングを行なうときサンプリングＳＷをオンする。サンプリングＳＷがオンされると、まずステップ１３０１で、ＣＰＵ１０４は、ＲＯＭ１０５、ＲＡＭ１０６、または外部記憶装置１０７などから入力波形処理用マイクロプログラムを読み出し、信号処理回路２０５内のマイクロプログラムメモリにロードする。ここでロードするマイクロプログラムは、例えば図１０（ａ）のブロック１００２〜１００４で説明したような処理を行なうマイクロプログラムである。次に、ステップ１３０２で、ＡＤＣ（外部回路１１０）の動作の設定およびミキサ２０４の混合比などの設定を行なう。ステップ１３０３では、波形メモリ１０９内の書き込み領域のアドレスおよびサンプル数を設定する。これは、図３のＸＡレジスタ３１１に書き込み領域のアドレスを設定し、サンプル数レジスタ３１５に書き込むべきサンプルの数を設定することに相当する。ステップ１３０４では、信号処理回路２０５の書き込み処理をスタートさせ、さらにＡＤＣをスタートさせる。これにより、図１０（ａ）で説明したようなサンプリングの処理が実行される。
【００９７】
図１３（ｂ）は、図１２（ａ）のステップ１２０６のパネルスイッチ処理のうちリサンプリングＳＷがオンされたときに実行されるリサンプリングＳＷイベント処理の手順を示す。ユーザによりリサンプリングＳＷがオンされると、まずステップ１３１１で、ＣＰＵ１０４は、ＲＯＭ１０５、ＲＡＭ１０６、または外部記憶装置１０７などからリサンプリング用マイクロプログラムを読み出し、信号処理回路２０５内のマイクロプログラムメモリにロードする。ここでロードするマイクロプログラムは、例えば図１０（ｂ）および（ｃ）で説明したブロック１０１２，１０１３またはブロック１０２２のような処理を行なうマイクロプログラムである。次に、ステップ１３１２で、発音チャンネルの割り当てを行ない割り当てたチャンネルナンバをレジスタｉに設定する。次に、ステップ１３１３で読み出し波形のアドレスを設定し、ステップ１３１４でエンベロープパラメータやミキサ２０４の混合比などを設定する。これは制御レジスタ２０１の各種の情報を設定することに相当する。ステップ１３１５では、リサンプリングした結果の波形データを書き込むべき波形メモリ１０９内のアドレスおよびサンプル数を設定する。これは制御レジスタ２０１のＸＡレジスタ３１１およびサンプル数レジスタ３１５を設定することに相当する。その後、ステップ１３１６で信号処理回路２０５の書き込みをスタートし、ノートオンを送出して処理を終了する。ノートオンを送出するのは、ステップ１３１３で設定したアドレスから波形データを読み出す処理を開始するためである。以上により、図１０（ｂ）または図１０（ｃ）に示したような信号の流れでリサンプリングが実行される。
【００９８】
なお、ステップ１３１２で複数チャンネルを割り当て、それらのチャンネルで読み出した楽音波形をミキシングして所定の処理の後に波形メモリに書き込んでもよいし（図１０（ｂ）や（ｃ）でＭＩＸ１０１１，１０２１に複数チャンネル出力が入力する場合）、各チャンネルごとに所定の処理を行なった後にミキシングして波形メモリに書き込んでもよい（図１０（ｂ）で複数チャンネルの各チャンネルそれぞれで１０１１〜１０１３の処理を行ないそれらの複数系列をＭＩＸ１０１４でミキシングする場合、あるいは図１０（ｃ）で複数チャンネルの各チャンネルそれぞれで１０２１〜１０２２の処理を行ないそれらの複数系列をＭＩＸ１０２３でミキシングする場合）。複数チャンネルをミキシングする場合は、各チャンネルで波形のスタート位置をずらしてミキシングすることもできる。その場合は、ステップ１３１６で、各チャンネルの波形のスタート位置のずらし方に応じてノートオンを複数回送出する必要がある。ただし、ＦＩＦＯの書き込みスタートは１番最初のノートオンからである。
【００９９】
図１４（ａ）は、図１２（ａ）のステップ１２０６のパネルスイッチ処理のうち波形読み出しＳＷ（または波形書き込みＳＷ）がオンされたときに実行される波形読み出し（書き込み）ＳＷイベント処理の手順を示す。なお、波形読み出しＳＷイベント処理と波形書き込みＳＷイベント処理とは「読み出し」と「書き込み」とを入れ替えるだけでほとんど同様の処理であるので、同じ図１４（ａ）を用いて説明する。始めに波形読み出しＳＷイベント処理について説明し、次に波形書き込みＳＷイベント処理について説明する。
【０１００】
波形読み出しＳＷイベント処理では、まずステップ１４０１で、波形メモリ１０９内の読み出し領域のアドレスおよび読み出すサンプル数をＸＡレジスタ３１１およびサンプル数レジスタ３１５に設定する。次にステップ１４０２で、波形メモリ１０９から読み出したデータを書き込むべきＲＡＭ１０６内の書き込み領域のアドレスを設定する。次にステップ１４０３で、ＣＰＵ１０４は、図３のＸアクセス回路３０４に読み出しスタートを指示して（ステップ１４０４は波形書き込みＳＷイベント処理のときのみ使用）、処理を終了する。以上により、先述したＸアクセス処理が開始され、楽音波形の生成と平行して波形メモリ１０９からの波形データが図３のＦＩＦＯ３１３に順次読み出されてくるので、ＣＰＵ１０４は後述するＸフラグ読み出しイベント処理（図１４（ｂ））によりＦＩＦＯ３１３のデータを取り出す。このような波形データの読み出し処理は、サンプリングやリサンプリングで波形メモリに書き込んだ波形データを読み出して外部記憶装置に格納（リアルタイム・ハードディスク・レコーディング）したり、読み出した波形にＣＰＵで加工を施して再び波形メモリに書き込む場合などに用いる。
【０１０１】
波形書き込みＳＷイベント処理では、まずステップ１４０１で、波形メモリ１０９内の書き込み領域のアドレスおよび書き込むサンプル数をＸＡレジスタ３１１およびサンプル数レジスタ３１５に設定する。次にステップ１４０２で、波形メモリ１０９に書き込むべき波形データが用意されているＲＡＭ１０６内の読み出し領域のアドレスを設定する。次にステップ１４０３で、ＣＰＵ１０４は、図３のＸアクセス回路３０４に書き込みスタートを指示する。またステップ１４０４で、前準備としてＲＡＭ１０６内の読み出し領域の最初の８サンプルを読み出してＦＩＦＯ３１３に書き込んで、処理を終了する。以上により、先述したＸアクセス処理が開始され、楽音波形の生成と平行して図３のＦＩＦＯ３１３の波形データが波形メモリ１０９の書き込み領域に書き込まれるので、ＣＰＵ１０４は後述するＸフラグ書き込みイベント処理（図１４（ｃ））によりＦＩＦＯ３１３に波形データを書き込む。このような波形データの書き込みは、外部記憶装置の波形データを波形メモリに書き込んだり、読み出した波形にＣＰＵで加工を施して再び波形メモリに書き込む場合などに用いる。また、後述するソフト音源における波形書き込みでも用いる。さらに、波形メモリ上にバッファ領域を設け、発音チャンネルによる該バッファ領域の波形データのループ再生をしつつ、該領域に外部記憶装置の波形データを順次供給すれば、外部記憶装置に記憶された長時間波形データのダイレクト再生も可能である。
【０１０２】
図１４（ｂ）は、図１２（ａ）のステップ１２０７のフラグ処理のうちＸフラグ読み出しイベント処理の手順を示す。これは、ＣＰＵ１０４による波形メモリ１０９からの読み出し処理がスタートしていた場合（図１４（ａ）の波形読み出しＳＷイベント処理が実行されていた場合）においてＸフラグがオンである（すなわち波形メモリ１０９から読み出したデータがＦＩＦＯ３１３に存在する）ときに実行される処理である。まずステップ１４１１で、ＦＩＦＯ３１３にセットされている波形データを読み出して、ＲＡＭ１０６の書き込み領域に書き込む。次にステップ１４１２で、サンプル数レジスタ３１５のサンプル数と実際に波形メモリ１０９から読み出してＲＡＭ１０６に書き込んだ波形サンプルの数とを比較することにより読み出しが終了かどうかを判定する。読み出し終了に至ったときは、ステップ１４１３で、ＣＰＵ１０４は読み出しストップ処理を行ない処理を終了する。ステップ１４１２で未だ終了に至っていないときは処理を継続する。ステップ１４１２の読み出しストップ処理は、図１４（ａ）の波形読み出しＳＷイベント処理で設定された読み出し処理の状態を解除する処理である。
【０１０３】
図１４（ｃ）は、図１２（ａ）のステップ１２０７のフラグ処理のうちＸフラグ書き込みイベント処理の手順を示す。これは、ＣＰＵ１０４による波形メモリ１０９への書き込み処理がスタートしていた場合（図１４（ａ）の波形書き込みＳＷイベント処理が実行されていた場合）においてＸフラグがオンである（すなわちＦＩＦＯ３１３に空きがある）ときに実行される処理である。まずステップ１４２１で、ＲＡＭ１０６の読み出し領域から次に書き込むべき波形データを読み出してＦＩＦＯ３１３の空き領域に書き込む。次にステップ１４２２で、サンプル数レジスタ３１５のサンプル数と実際にＲＡＭ１０６からＦＩＦＯ３１３に書き込んだ波形サンプルのサンプル数とを比較し、書き込むべきサンプル数をすべて書き込んだか否かを判定する。すべてのデータを書き込んだときは終了ということであるから、ステップ１４２３で、ＣＰＵ１０４は書き込みストップ処理を行ない処理を終了する。ステップ１４２２で未だ終了条件が満たされていないときは処理を継続する。ステップ１４２３の書き込みストップ処理により、ＦＩＦＯ３１３に残っているデータが波形メモリ１０９へ書き込まれる。
【０１０４】
以上説明したこの実施の形態の電子楽器によれば、サンプルバッファを備えているため、チャンネル発音に使用されない余り時間が生じるので、該余り時間のタイムスロットを用いて、チャンネル発音以外の目的で波形メモリアクセス（例えば、ＣＰＵアクセスやミキサから戻ってくる波形データの書き込みなど）を発音中に行なうことができる。特に、波形メモリ１０９のアクセス状況を検出する機能を持つＸアクセス回路３０４が備えられているので、ＣＰＵ１０４は、Ｘフラグ３１４を参照してそれがオンのときはどんどんデータの読み書きができ発音中であっても高速なアクセスが可能になる。さらに、Ｘアクセス処理のバッファとしてＦＩＦＯ３１３が備えられているので、アクセスは非常に高速で行なえる。なお、ＣＰＵ１０４からＸフラグ３１４を参照してそれがオンのときにデータを読み書きする処理は、上記実施の形態では割り込みを用いずにＣＰＵ１０４のループ処理中で行なっているが、割り込みを用いて実行するようにしてもよい。すなわち、ＦＩＦＯ３１３に空きがある（ＣＰＵからの書き込み時）、またはＦＩＦＯ３１３に読み出しデータがある（ＣＰＵによる読み出し時）とき、割り込みでそれをＣＰＵ１０４に知らせ、それに応じてＣＰＵ１０４がＦＩＦＯ３１３にアクセスに行くようにしてもよい。
【０１０５】
また、この実施の形態の電子楽器によれば、波形メモリアクセスをチャンネルタイミングと独立にしているので、アクセス回数に制限を加えるときに下記のような利点がある。すなわち、発音数が少なければ、該制限による影響は無く、発音しているチャンネルはすべて高次の補間（上記の例では４点補間）を実行できる。発音数が多くなり、アクセス回数が制限に引っ掛かるようになると、全発音数のうちの一部のチャンネルの補間次数を落として、補間次数は落ちるものの発音数を減らさずに済ませることができる。
【０１０６】
さらに、この実施の形態の電子楽器では、波形メモリのアクセス回数を合計値で管理しているので、例えば、Ｘアクセスの要求として、全アクセス時間の１／３使用したい、あるいは１／４使用したい、というような場合に、アクセス制御が非常に簡単に行なえる。
【０１０７】
この実施の形態の電子楽器によれば、ＤＳＰをサンプリングやリサンプリングの処理に兼用するようにしているので、装置構成をそれ程複雑にすることなく、外部から入力した楽音のサンプリングや既に波形メモリに格納されている波形データを読み出してエフェクト付与などの処理を施した後に再度波形メモリに書き込むリサンプリングを行なうことができる。ＤＳＰでは効果付与などの再生用の波形処理とサンプリングやリサンプリングなどの録音用の波形処理とを並列に行なうことができるので、再生と録音とを並行して実施できる。
【０１０８】
なお、上記波形メモリのアクセス動作（処理Ｂおよび取り込み処理）を、各時分割チャンネルのタイミング（固定）の中で行なうようにしてもよい。この場合、すべての発音チャンネルについて、１チャンネル当たり４つのアクセススロットがあるので、その中で各発音チャンネルは０回〜４回のサンプル読み出しと、残りのスロットで４回〜０回のＸアクセスを行なうようにする。
【０１０９】
また、前半区間および後半区間の各６４アクセスを、処理Ｂ（ないし取り込み処理）とＸアクセス処理でどのように分配したら良いかに関しては、上記の例では、優先フラグ３０３で、１回のＸアクセスを優先するようにしている。しかし、２アクセス以上優先させたい場合もある。例えば、外部記憶手段から波形メモリに波形データを転送したり、逆に波形メモリの波形データを外部記憶手段に転送するときは、該外部記憶手段のデータ転送速度に応じて転送を行なうのが効率が良い。その速度を達成するために必要なＸアクセスの回数を優先にするのがよい。その他の場合でも、波形データをやり取りする相手の要求速度や最適速度に合わせて、Ｘアクセスの優先回数を任意に設定できるようにすればよい。
【０１１０】
次に、この実施の形態の電子楽器において、ＣＰＵ１０４によりソフトウェア音源（以下、ソフト音源と呼ぶ）を実現する例について説明する。ソフト音源とは、ＣＰＵ１０４で所定のソフトウェアを実行して楽音波形を生成するものである。ＣＰＵ１０４で生成した楽音波形は、音源部１０８の所定のチャンネルを用いて放音する。
【０１１１】
なお、ソフト音源はＣＰＵ１０４がＲＯＭ１０５の楽音生成ソフトウェアを実行することにより実現されるが、該ソフト音源を利用する側から見ると、楽音生成ソフトウェアをドライバとして登録しておき、該ドライバを起動した後、所定のソフト音源に係るＡＰＩ（Application Program Interface）に各種演奏入力を表わすＭＩＤＩ（Musical Instruments digital Interface）イベントメッセージを出力して楽音生成に関する各種の処理をソフト音源に行なせる、という手順になる。ＣＰＵ１０４は汎用の演算処理装置であり、該ＡＰＩに対して演奏入力を与える処理、すなわちＭＩＤＩイベントを該ＡＰＩに出力する処理など、ソフト音源とは別の処理も行なっている。ＣＰＵ１０４が該ＡＰＩに対して演奏入力を与える処理とは、例えば、鍵盤１０１の操作に応じてリアルタイムで発生する演奏入力を該ＡＰＩに出力したり、外部ＭＩＤＩ機器からリアルタイムで入力したＭＩＤＩイベントに応じた演奏入力を該ＡＰＩに出力したり、ＲＡＭ１０６上にＭＩＤＩイベントのシーケンスを用意しておき（外部記憶装置１０７上にあるデータを用いてもよい）これを順次演奏入力として該ＡＰＩに出力したり、といった処理である。
【０１１２】
図１６を参照して、ソフト音源の楽音生成原理を説明する。図１６において、Ｓ１〜Ｓ４の各区間は、所定のサンプル数（例えば、１２８サンプル）分の再生を行なう単位となる時間フレームを示す。「演奏入力」のライン上に記載してある下向き矢印は、その時刻で演奏入力があったことを示す。演奏入力とは、ソフト音源に係るＡＰＩ（Application Program Interface）に、ノートオン、ノートオフ、アフタタッチ、プログラムチェンジなどの各種のＭＩＤＩイベントが入力されることである。図１６の例では、フレームＳ１で３つ、Ｓ２で２つ、Ｓ３で１つの演奏入力がそれぞれあったということである。ソフト音源は、複数チャンネル分の複数楽音を同時生成可能であり、ＲＡＭ１０６上に用意される複数チャンネル分のソフト音源レジスタで各楽音を制御するようになっている。ソフト音源は、演奏入力としてノートオンイベント（例えば鍵盤１０１の鍵のノートオン）を入力したときは、ソフト音源レジスタに関して発音割り当てを行ない、割り当てたチャンネルに対応するソフト音源レジスタに該チャンネルの発音を制御する各種のデータとノートオンを書き込む。演奏入力としてノートオフイベントを入力したときは、該当するチャンネルに対応するソフト音源レジスタにノートオフを書き込む。ノートオンやノートオフ以外の演奏入力（例えばアフタタッチの変更など）についても同様に、該当するチャンネルに対応するソフト音源レジスタに演奏入力に応じたデータを書き込む。ある時間フレームでソフト音源レジスタに書込まれたデータは、データの種類にかかわりなく、必ず次の時間フレームから波形生成演算に使用される。
【０１１３】
図１６の「ＣＰＵによる波形生成」の矩形１６０１〜１６０４は、ＣＰＵ１０４により波形生成演算を実行する区間を示す。この波形生成演算では、ソフト音源レジスタに設定された複数チャンネル分のデータに基づいて複数チャンネル分の楽音波形生成を行なう。演奏入力に応じてソフト音源レジスタが書き換えられ、一方、演奏入力のない期間は、ソフト音源レジスタは過去に書込まれたデータを保持している。したがって、各波形生成の区間１６０１〜１６０４では、直前あるいはさらに前のフレームで検出した演奏入力に応じた波形生成演算を実行することになる。フレームが切り替わるタイミングでフレーム割り込みが発生するので、各フレームでの波形生成演算はこのフレーム割り込みを契機として（後述の図１５（ｂ））実行される。
【０１１４】
例えば、フレームＳ１で検出された３つの演奏入力に対しては、次のフレームＳ２の先頭のフレーム割り込みを契機として区間１６０２で波形生成演算を行なう。ＣＰＵ１０４は、この波形生成演算により、ＲＡＭ１０６上に波形データを生成する。生成した波形データは、当該フレームの残りの時間区間を用いて波形メモリ１０９上に用意されているバッファ領域に書き込む。このバッファ領域としては、連続したアドレスに用意された同じ大きさの２つのバッファ領域ＰＢ０とＰＢ１（２つをまとめてダブルバッファと呼ぶ）を用いる。バッファ領域への書き込みは、上述したＸアクセス処理（特にＣＰＵ１０４から波形メモリ１０９への書き込み処理）によって行なう。また、フレーム毎にバッファＰＢ０とＰＢ１とを交互に用いるようにする。例えば、フレームＳ１の区間１６０１で生成した波形データは次のフレームの開示時点までにＲＡＭ１０６から波形メモリ１０９上のバッファ領域ＰＢ０に書き込み、フレームＳ２の区間１６０２で生成した波形データはバッファ領域ＰＢ１に書き込み、フレームＳ３の区間１６０３で生成した波形データはバッファ領域ＰＢ０に書き込み、フレームＳ４の区間１６０４で生成した波形データはバッファ領域ＰＢ１に書き込み、…というように、交互にＰＢ０とＰＢ１に波形データを書き込む。
【０１１５】
バッファＰＢ０およびＰＢ１に書き込んだ波形データの読み出し再生は、図１６の「読み出し再生」に示すように、フレーム割り込みを契機として、波形生成したフレームの次のフレームの区間で行なう。すなわち、フレームＳ１で生成しＰＢ０に書き込んだ波形データは次のフレームＳ２で、フレームＳ２で生成しＰＢ１に書き込んだ波形データは次のフレームＳ３で、フレームＳ３で生成しＰＢ０に書き込んだ波形データは次のフレームＳ４で、…というように、ＰＢ０とＰＢ１の波形データを交互に読み出し再生していく。
【０１１６】
図１５（ａ）は、図１２（ａ）のステップ１２０６のパネルスイッチ処理のうちソフト音源スタートＳＷがオンされたときに実行されるソフト音源スタートＳＷイベント処理の手順を示す。ユーザによりソフト音源スタートＳＷがオンされると、まずステップ１５０１で、ソフト音源で生成した楽音波形を発音するために用いる発音チャンネル（第０〜第３１チャンネル）の割り当てを行ない、割り当てたチャンネルナンバをレジスタｉに設定する。次に、ステップ１５０２で、音源部１０８に対して、当該チャンネルｉによりダブルバッファ領域ＰＢ０，ＰＢ１のループ読み出し再生を行なうように設定する。これは、図１６の「読み出し再生」で示したように、フレーム割り込みごとにバッファＰＢ０とＰＢ１とを交互に読み出し再生するように、音源部１０８に指示情報を送出して設定する処理である。具体的には、ダブルバッファ領域ＰＢ０，ＰＢ１は連続したアドレスに用意された同じサイズのバッファ領域であるので、領域ＰＢ０の先頭アドレスをループのスタートアドレス（絶対アドレスＷＡ）として設定し、さらに（領域ＰＢ１の末尾アドレス）から（領域ＰＢ０の先頭アドレス）を引き算した値をループサイズ（相対アドレスＬＰＡ）として設定し、相対アドレスＡＳを０に設定すれば、ループ読み出しによりＰＢ０〜ＰＢ１の領域が繰り返し読み出される。ステップ１５０３では、エンベロープパラメータやミキサの混合比などの設定を行なう。なお、ここで設定されるエンベロープパラメータは、単にループ読み出しのフェードイン／フェードアウトをするのに使うだけで、発生する楽音のエンベロープ（楽音音量の時間的変化）を制御するのではない。ミキサの混合比も、１楽音の混合比ではなく、ソフト音源で生成した複数楽音の混合波形の出力先を制御する混合比である。
【０１１７】
次に、ステップ１５０４で、ＣＰＵ１０４で生成した楽音波形を始めに書き込む書き込み領域を波形メモリ１０９内のバッファＰＢ０とするため、図３のＸＡレジスタ３１１に初期値としてバッファＰＢ０の先頭アドレスを設定し、サンプル数レジスタ３１５にサンプル数としてバッファＰＢ０の容量（上記ループサイズＬＰＡの１／２）を設定する。ステップ１５０５で、ＣＰＵ１０４は、波形メモリ１０９への書き込み処理（Ｘアクセス処理）の前準備を行ない、ダブルバッファＰＢ０，ＰＢ１をゼロクリアする。ステップ１５０６で、当該チャンネルｉにノートオンを送出し、図１６で説明した所定時間間隔のフレーム割り込みを開始させ、処理を終了する。なお、フレーム割り込みは、バッファＰＢ０およびＰＢ１をループ読み出しする際のリターン発生時（すなわちＰＢ１の再生終了時）と、ループ読み出しの中間点（ＬＰＡ／２）通過時（すなわちＰＢ０の再生終了時）に発生する。図示していないが、フレーム割り込みを発生する割り込み発生回路が音源１０８の内部に設けられている。割り込みの代わりに、ＣＰＵが「読み出し再生」用に設定した発音チャンネルのアドレス現在値をチェックしてフレームの変わるタイミングを検出するようにしてもよい。
【０１１８】
図１５（ｂ）は、図１６で説明した所定時間の時間フレームごとに発生するフレーム割り込みで実行するフレーム割り込み処理の手順を示す。フレーム割り込みが発生すると、まずステップ１５１１で、現在ソフト音源レジスタに設定されている演奏入力に対応する楽音波形をＲＡＭ１０６上に生成する。これは、図１６において各フレーム割り込みごとに実行する波形生成演算１６０１〜１６０４に相当する。次に、ステップ１５１２で該生成した楽音波形を書き込むべき波形メモリ１０９内の書き込み領域のアドレス（ＰＢ０またはＰＢ１の先頭アドレス）および書き込むサンプル数（ループサイズＬＰＡの１／２）をＸＡレジスタ３１１およびサンプル数レジスタ３１５に設定する。図１６で説明したように、この書き込み領域としてはバッファ領域ＰＢ０とＰＢ１とを交互に用いる。次にステップ１５１３で、ＣＰＵ１０４は、図３のＸアクセス回路３０４に書き込みスタートを指示する。またステップ１５１４で、前準備として楽音波形の最初の８サンプルをＦＩＦＯ３１３に書き込んで、処理を終了する。この後、Ｘアクセス処理によりＦＩＦＯ３１３のデータが波形メモリに書き込まれる毎に（Ｘフラグが１になって）、図１４（ｃ）の処理と同じような処理により、残りの楽音波形サンプルが順次ＦＩＦＯに供給される。
【０１１９】
以上により、先述したＸアクセス処理が開始され、ステップ１５１１で生成した楽音波形が波形メモリ１０９のバッファ領域ＰＢ０またはＰＢ１に書き込まれる。一方、図１５（ａ）の処理により、図１６の「読み出し再生」に示したようにダブルバッファＰＢ０とＰＢ１とを交互に読出し再生する処理が開始しているので、後は図１５（ｂ）のようにフレーム割り込みごとに楽音波形を生成してダブルバッファに書き込めば、その楽音波形が第ｉチャンネルで発音される。このソフト音源で発生した楽音は第ｉチャンネルでミキサ２０４に入力するので、上述したように、この楽音に対して信号処理回路２０５や外部回路１１０で効果付与などの信号処理を施してＤＡＣ１１２に出力したり再び波形メモリ１０９に書き込むようにもできる。
【０１２０】
また、この第ｉチャンネルにおけるダブルバッファＰＢ０とＰＢ１の読み出し処理のＦナンバ（図３の処理Ａで用いたピッチＰＩＴＣＨ）を調整することにより、再生ピッチを調整することができ、いわゆるオーバサンプリングを行なうこともできる。例えば、ソフト音源で生成した楽音波形を出力する音源部１０８の第ｉチャンネルは４８ｋＨｚのサンプリング周波数で動作するようにし、ＣＰＵ１０４はサンプリング周波数２４ｋＨｚで楽音波形を生成する場合、第ｉチャンネルのＦナンバを０．５に設定すればよい。この場合は、補間回路３２６で４８ｋＨｚのサンプリング周波数でも折り返しノイズが発生しないように高調波部分をカットして補間が行なわれる。
【０１２１】
従来のソフト音源では、図１６に示したような読み出し再生のためにサンプリング周期ごとにＣＰＵに割り込みをかけて、その割り込みごとにＣＰＵが生成した楽音波形を音源部にＤＭＡ転送するというようなことを行なっていたので、ＣＰＵに対して割り込みが頻繁にかかっていた。この実施の形態のソフト音源では、ＣＰＵ１０４はフレーム割り込みごとの処理を行なえば、あとはＸアクセス処理で自動的に波形メモリ１０９に書き込んで再生してくれるので、ＣＰＵに対する割り込み処理が削減できるという効果がある。
【０１２２】
なお、ソフト音源の機能を用いる場合は、図１６で説明したように所定のフレームの区間における演奏入力を保持しておく必要があるので、キーオンイベント処理は、図１２（ｂ）の代わりに、発生したキーオンイベントを記憶しておく処理を行なうようにする。
【０１２３】
図１７は、図３のＸアクセス回路３０４の変形例を示す。図３のＸＡレジスタ３１１をＸＡ１レジスタ１７０１、ＸＡ２レジスタ１７０２、およびセレクタ１７０３に置き換え、図３のセレクタ３１２およびＦＩＦＯ３１３をＦＩＦＯ１７０４、ラッチ１７０５、およびセレクタ１７０６に置き換えるものである。他の部分は上述の実施の形態のままとする。
【０１２４】
ＸＡ１レジスタ１７０１およびＦＩＦＯ１７０４は、Ｘアクセス処理でＣＰＵ１０４から波形メモリ１０９をアクセスする際の、アクセスアドレスを設定するレジスタおよびアクセスデータを設定するＦＩＦＯである。ＸＡ２レジスタ１７０２およびラッチ１７０５は、Ｘアクセス処理でミキサ２０４から出力ライン２２３を介して波形メモリ１０９に書き込みを行なう際の、アクセスアドレスを設定するレジスタおよびミキサ２０４からのデータを記憶するラッチである。この構成で、セレクタ１７０３，１７０６をＸアクセス処理の区間で時分割で切り替えるようにして、ミキサ２０４から戻ってくる波形データの波形メモリ１０９への書き込みと、ＣＰＵ１０４からの波形メモリ１０９のアクセスとを、並行して行なうことができるようにする。
【０１２５】
特に、ミキサ２０４からはサンプリング周期ごとに波形データが戻ってくるが、その波形データは捨てる訳にはいかないので、必ずラッチ１７０５に記憶することとする。そして、サンプリング周期ごとのＸアクセス処理の区間で必ず１回は、セレクタ１７０３でＸＡ２レジスタ１７０２を選択しセレクタ１７０６でラッチ１７０５を選択するようにして、ラッチ１７０５の波形データをＸＡ２レジスタ１７０２で指示されたアドレスに書き込む。Ｘアクセス処理のその他の区間では、セレクタ１７０３でＸＡ１レジスタ１７０１を選択しセレクタ１７０６でＦＩＦＯ１７０４を選択するようにして、ＣＰＵ１０４による波形メモリ１０９のアクセスを実行する。ＸＡ１レジスタ１７０１およびＸＡ２レジスタ１７０２のアドレスを順次インクリメントする機能は、図３で説明したのと同じである。なお、Ｘアクセス処理の区間では、ラッチ１７０５の波形データの書き込みを優先して必ず１回は行なうようにする必要があるが、Ｘアクセス処理の区間そのものが確保できない場合も考えられるので、上述の優先フラグ３０３をオンしてＸアクセス処理で必ず何回かのアクセスができるようにするとよい。
【０１２６】
このような構成により、例えば、サンプリングやリサンプリングした波形をミキサ２０４からラッチ１７０５経由で波形メモリ１０９に書き込み、波形メモリ１０９上にある程度溜まったところでＣＰＵ１０４により当該波形データを読み出して、外部記憶装置（ハードディスクなど）に送れば、リアルタイム・ハードディスク・レコーディングを行なうことができる。１サンプリング周期で１回書き込まれるラッチ１７０５経由の波形データの処理速度に比較すると、ＣＰＵ１０４による読み出し処理の処理速度は速い。特に、ＦＩＦＯを用いているので読み出し速度はさらに高速になる。そこで、波形メモリ１０９上に溜まったデータを一気にＣＰＵ１０４で読み出して、ハードディスクなどに書き込むようにできる。
【０１２７】
なお、上記形態では、図３の読み書き回路２０２において処理Ａ演算回路３２１と処理Ｂ演算回路３２５とを独立した構成としたが、処理Ａ演算回路３２１と処理Ｂ演算回路３２５とをひとまとめにして、１つの演算回路を時分割で共用することにより処理Ａと処理Ｂとを行なうようにしてもよい。
【０１２８】
上記形態では、波形メモリの波形サンプルを１６ビット非圧縮の形式としたが、他の形式でもよい。例えば、１アクセスで１６ビットを読み出せることはそのままにして、８ビット非圧縮または８ビット圧縮形式にしてもよい。ただし、この場合、サンプル数とアクセス数とが異なるので、その調整が必要である。また、圧縮形式の場合は、連続してサンプルを読み出していかないと再生できなくなるため、飛ばし読みの際に対処が必要である。
【０１２９】
波形メモリとしてＤＲＡＭを用いた場合は、必ずリフレッシュが必要であるので、Ｘアクセス処理の区間でリフレッシュを行なうようにしてもよい。また、ＣＰＵからの波形メモリの読み出し／書き込みは、その緊急度に応じて対応するとよい。例えば、ＣＰＵからの波形メモリアクセスの緊急度が低いときは、音源チャンネルで使用されなかった空きタイムスロットを用いてアクセスを行なう。また、緊急度が高いときは、始めにＣＰＵからの波形メモリアクセスの分を確保し、残りを音源チャンネルで使用する。
【０１３０】
また、上記形態では、図８，９に示したように処理Ｂおよび取り込みを行なう前半および後半の区間の前側のスロットで連続した波形メモリのアクセスを行なっているが、前側でなくてもよい。例えば、前半／後半区間内の前側のスロットでＸアクセス処理を行ない、後側のスロットで各チャンネルについての連続した波形メモリのアクセスを行なうようにしてもよい。ただしその場合、例えば図８の取り込み前半区間８０４の処理が終了して、波形バッファに補間に必要な全サンプルが用意された後に、補間前半区間８０６の補間処理が始まるようにする必要がある（後半処理も同様）。そのため、補間を行なう区間をずらす必要がある（取り込み前半処理が終了した後に補間前半処理を開始し、取り込み後半処理が終了した後に補間後半処理を開始すれば十分）。さらに、Ｘアクセス処理のタイムスロットを前半区間あるいは後半区間中で分散させてもよい。
【０１３１】
さらに、上記形態では、図８，９に示したように各処理を１サンプリング周期を前半と後半に分割した区間で実行するようにしているが、区間の分け方はこれに限らない。例えば、１サンプリング周期を１／３，１／４，…に分割し、それらの区間を単位にして各処理を行なうようにしてもよい。また、等分割でなく、変則的な区間の分割を行なってもよい。さらに、区間を分けずに、１サンプリング周期を単位としてもよい。ただし、処理Ｂでアドレス送り出しを行なって波形メモリをアクセスする前に、処理ＡによるＡＲＡＭの書き換えが行なわれることがないことを、保証する必要がある。そのためには、例えば区間を分けない場合は、ＡＲＡＭを２セット用意し、処理Ａによるアドレスの書き換えと処理Ｂによるアドレスの送り出しとで、２セットのアドレスＲＡＭを交互に使用するなどの方法を採る必要がある。なお、１サンプリング周期を前半と後半に分けて処理する方式によれば、１セットのＡＲＡＭで処理Ａと処理Ｂとを交互に行なうことができるので、回路構成が簡易にでき合理的といえる。
【０１３２】
【発明の効果】
以上説明したように、本発明によれば、１つのプログラマブル信号処理手段を、録音用波形処理と再生用波形処理との両方に共用することができる。また、１つのプログラマブル信号処理手段で、録音用波形処理と再生用波形処理との両方を並列に実行することができる。したがって、簡単な構成で録音用波形処理と再生用波形処理とを行なうことができる。任意の処理アルゴリズム（指示手段により指示されたもの）で処理した波形を録音することができる。プログラマブル信号処理手段としてはＤＳＰを用いることができるので、装置構成はそれ程複雑にしなくて済む。
【図面の簡単な説明】
【図１】この発明に係る波形メモリ音源装置を適用した電子楽器の全体のブロック構成図
【図２】この発明に係る波形メモリ音源装置を適用した音源部のブロック構成図
【図３】制御レジスタおよび読み書き回路の詳細図
【図４】制御ＲＡＭの構成図
【図５】アドレスＲＡＭのメモリマップを示す図
【図６】波形バッファの構成図
【図７】ＦＩＦＯの使用方法を示す図
【図８】読み書き回路の要部のタイミング図
【図９】図８の各処理中のチャンネルの様子を示す図
【図１０】マイクロプログラムおよびミキサ設定の励（その１）を示す図
【図１１】マイクロプログラムおよびミキサ設定の励（その２）を示す図
【図１２】メインルーチンおよびキーオンイベント処理ルーチンのフローチャート図
【図１３】サンプリングＳＷイベント処理ルーチンおよびリサンプリングＳＷイベント処理ルーチンのフローチャート図
【図１４】波形読み出し（書き込み）ＳＷイベント処理ルーチン、Ｘフラグ（読み出し）イベント処理ルーチン、およびＸフラグ（書き込み）イベント処理ルーチンのフローチャート図
【図１５】ソフト音源スタートＳＷイベント処理ルーチンおよびソフト音源フレーム割り込み処理ルーチンのフローチャート図
【図１６】ソフト音源の楽音生成原理を説明するための図
【図１７】Ｘアクセス回路の変形例を示す図
【符号の説明】
１０１…鍵盤、１０２…表示部、１０３…スイッチ群（ＳＷ）、１０４…中央処理装置（ＣＰＵ）、１０５…リードオンリメモリ（ＲＯＭ）、１０６…ランダムアクセスメモリ（ＲＡＭ）、１０７…外部記憶装置、１０８…音源部、１０９…波形メモリ、１１０…外部回路、１１１…遅延メモリ、１１２…ディジタルアナログ変換器（ＤＡＣ）、１１３…サウンドシステム（ＳＳ）、１１４…バスライン１１４、２０１…制御レジスタ、２０２…読み書き回路、２０３…音量変化制御回路、２０４…ミキサ、２０５…信号処理回路、２０６…インターフェース、３０１，３０２…レジスタ、３０３…優先フラグ、３０４…Ｘアクセス回路、３１１…ＸＡレジスタ、３１２…セレクタ、３１３…ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ（先入れ先出し）の８段のレジスタ）、３１４…Ｘフラグ、３１５…サンプル数レジスタ、３２１…処理Ａ演算回路、３２２…アドレスＲＡＭ（ＡＲＡＭ）、３２３…アキュムレータ（ＡＣＣ）、３２４…制御ＲＡＭ、３２５…処理Ｂ演算回路、３２６…補間回路、３２７…波形バッファ、３２８…取り込み回路、３２９，３３０…セレクタ（ＳＥＬ）。
【図１】
0003723973.tif 000002
【図２】
0003723973.tif 000003
【図３】
0003723973.tif 000004
【図４】
0003723973.tif 000005
【図５】
0003723973.tif 000006
【図６】
0003723973.tif 000007
【図７】
0003723973.tif 000008
【図８】
0003723973.tif 000009
【図９】
0003723973.tif 000010
【図１０】
0003723973.tif 000011
【図１１】
0003723973.tif 000012
【図１２】
0003723973.tif 000013
【図１３】
0003723973.tif 000014
【図１４】
0003723973.tif 000015
【図１５】
0003723973.tif 000016
【図１６】
0003723973.tif 000017
【図１７】
0003723973.tif 000018