以下、図面を用いてこの発明の実施の形態を説明する。
図1は、この発明の一実施形態に係る電子楽器の構成を示す。この電子楽器は、中央処理装置(CPU)101、タイマ102、HOST(ホスト)−PCI(Peripheral Component Interconnect)ブリッジ103、リードオンリメモリ(ROM)104、ランダムアクセスメモリ(RAM)105、表示用入出力(I/O)インタフェース106、表示器107、キーボードI/Oインターフェース108、キーボード109、ローカルバス110、PCIバス111、ネットワークI/Oインターフェース112、SCSI(Small Computer System Interface)114、ハードディスク115、MIDI(Musical Instruments Digital Interface)入出力インターフェース116、および音声入出力ボード120を備えている。
CPU101は、この装置全体の動作を制御する。タイマ102は、所定時間間隔でタイマ割り込み信号を発生するためのタイマである。ホスト−PCIブリッジ103は、CPUやメモリを接続するローカルバス110と周辺機器を接続するためのPCIバス111との間で各種信号の授受を制御する。ROM104は、BIOS(BASIC INPUT/OUTPUT SYSTEM)などを格納した記憶装置である。RAM105は、CPU101が実行するプログラムをロードしたり各種バッファ領域を確保する記憶領域である。RAM105には、再生用バッファであるPCバッファ(後に詳述する)などが設けられる。表示器107は、インターフェース106を介して受け取った各種のデータを表示する。キーボード109は、インターフェース108を介して各種の情報を入力するために用いるタイピングキーボードである。ユーザは、キーボード109および表示器107を用いてこの装置に対し各種の設定操作や指示操作を行なうことができる。ローカルバス110は、CPUの専用バスと周辺I/Oなどを接続するためのローカルPCIバスとの2つのバスにより構成するようにしてもよい。
PCIバス111には、各種の周辺機器が接続される。ネットワークI/Oカード112を介して外部のネットワーク113に接続することができる。また、SCSI114を介してハードディスク115が接続されている。音声入出力ボード120は、転送回路121、RAM122、転送回路123、ミキサ124、マルチDSP(デジタルシグナルプロセッサ)125、アナログ/デジタル(A/D)変換器126、デジタル/アナログ(D/A)変換器128、タイミング発生器130、カウンタ131、およびレジスタ群132を備えている。なお、図1に図示しているように、RAM105をRAM1と、転送回路121を転送回路1と、RAM122をRAM2と、転送回路123を転送回路2と、それぞれ、呼ぶものとする。
転送回路1は、PCIバス111をいわゆるバースト的に使って複数サンプルを一辺に高速にRAM2に転送するための回路である。RAM2は、再生用バッファであるPバッファ、および録音用バッファであるRバッファを含む。これらのバッファは、複数設定されている再生トラック(本例では4トラック)の各トラックに対応して設けられている。1トラックのPバッファは、2個のバッファからなり、いわゆるダブルバッファ的になっている。トラックごとに、一方のバッファが空いたとき転送回路1を経由して該バッファへのサンプルの転送を開始し、そのとき他方のバッファは転送回路2を経由してサンプル出力用に用いる。転送回路2によるサンプルの出力は、サンプリング周期ごとに継続的に行なわれる。転送回路2は、RAM2のPバッファからサンプルをミキサ124に転送し、あるいはミキサ124から出力された録音用のサンプルをRAM2のRバッファに転送する機能を有する。該録音用サンプルのRバッファへの転送も、サンプリング周期毎に行なわれる。RAM2は、転送回路1と転送回路2により、時分割アクセスされる。1DACサイクル(例えば、44.1kHz)を半分に分けて、その前半を転送回路1が使用し、後半を転送回路2が使用する。
なお、RAM2上にある再生用のPバッファおよび録音用のRバッファに対する転送回路1のアクセスは、CPU101のアクセスより優先度が高い。すなわち、転送回路1がアクセスをしようとしたときにCPU101がアクセスをしていたら、該CPU101のアクセスが中断され、転送回路1によるアクセスが先に行なわれる。ただし、転送回路1による転送動作は1DACの半分の期間は必ず休みになるので、CPU101は最悪でも残りの期間を使用してアクセスすることができる。
転送回路1および転送回路2は、タイミング発生器130から出力されるタイミング信号に応じて転送を実行する。タイミング発生器130は、カウンタ131から出力されるカウント出力に応じてタイミング信号を発生する。レジスタ群132は、転送アドレスなどの各種データを保持するレジスタから構成されている。
ミキサ124は、36系統の入力端子と24系統の出力端子を備え、それぞれの入力を適宜ミキシングして、それぞれの出力端子に出力することができる。どの入力を用いてどの出力端子の出力信号を生成するかは、CPU101から指示することができる。マルチDSP125は、複数のマイクロプログラムが動作するようになっており、楽音波形サンプルに対してエフェクト付与などの処理を行なう。A/D変換器126には、外部マイク127が接続される。A/D変換器126は、外部音を入力しアナログ/デジタル変換してミキサ124に出力する。ミキサ124からD/A変換器128に出力された楽音波形は、デジタルアナログ変換されてサウンドシステム129により放音される。転送回路2以降のミキサ124側の各部は、サンプリング周期ごとの処理で動作する。
なお、本例では、CPU101は16チャンネル分の楽音波形生成を行ない、それら16チャンネル分の楽音波形データをRAM1上で4トラックにまとめ、その4トラック分の楽音波形データを転送回路1経由でRAM2に転送する。具体的には、RAM1上に4つのトラックに対応してPCバッファを設けてあり、16チャンネル分の楽音波形データを4つの各トラックのPCバッファにまとめる。各トラックのPCバッファの楽音波形データを、転送回路1経由でRAM2上の4つの各トラック対応のPバッファに転送する。4つの各トラック対応のPバッファの楽音波形データを転送回路2経由でミキサ124に入力する。ミキサ124は、転送回路2から16系統入力可能であるが、ここでは4系統のみ使用することになる。
図10に、ミキサ124とDSP125によるミキサ/エフェクト設定の一例を示す。PCB1001〜1004は、RAM1上に設けられた4トラックのPCバッファを示す。各PCバッファ1001〜1004の楽音波形信号は、(転送回路1、RAM2上のPバッファ、および転送回路2経由で)ミキサ124に入力する。1011〜1013は、ミキサ124に設定されている3つの個別のミキサである。コーラスエフェクト1021およびリバーブエフェクト1022は、DSP125で実現されているエフェクト付与回路である。DAC1031は、D/A変換器128に相当する。本実施の形態では、ミキサの出力チャンネル数が充分あるので、各ラインはステレオ信号としてL/R別に処理することができる。
各レジスタその他について簡単に説明する。なお、以下のレジスタで添字xを使っているもの(すなわち[x]が付いているもの)は、そのxはトラック番号を示すものとする。
(a)SA[x]:RAM1上に設けられる再生バッファであるPCバッファのスタートアドレスを格納するレジスタである。
(b)EA[x]:RAM1上に設けられる再生バッファであるPCバッファのエンドアドレスを格納するレジスタである。
(c)TP[x]:PCバッファ上の波形データを読み出してRAM2上のPバッファに転送するときの、PCバッファ読み出しアドレスを格納するレジスタ(アドレスカウンタ)である。
(d)TWP[x]:PCバッファ上の波形データを読み出してRAM2上のPバッファに転送するときの、Pバッファ書き込みアドレスを格納するレジスタ(アドレスカウンタ)である。
(e)APP[x]:サンプリング周期でPバッファ上の波形データを読み出してミキサ124に出力するときの読み出しアドレスを格納するレジスタ(読み出しカウンタ)である。
(f)ミキサデータ:ミキサ124に設定するデータである。16トラックのミキシング比、A/D変換器126から入力する4トラックのミキシング比、DSP125から入力する16トラックのミキシング比などを規定する。
(g)DSPデータ:DSP125に設定するデータである。DSPで実行するマイクロプログラムや入出力関係などを規定する。
なお、上記レジスタ類などの記号は、その記憶領域そのものを示すとともに、その記憶領域に記憶されたデータをも示すものとする。例えば、SA[x]は、スタートアドレスを格納するレジスタを示すとともに、該レジスタに格納されているスタートアドレスのデータをも示すものとする。
図2に、再生用バッファの構成およびデータの流れを示す。上述したように、再生用バッファとして、RAM1上に4つのトラックに対応するPCバッファを設け、RAM2上に4つのトラックに対応するPバッファを設けている。1トラック分(x=0,1,2,3としてxトラック)のバッファの利用方法について説明する。RAM1上のPCバッファは、スタートアドレスSA[x]からエンドアドレスEA[x]の範囲となる。スタートアドレスSA[x]とエンドアドレスEA[x]は、CPU101から指定することが可能であり、したがってRAM1上の任意の位置にPCバッファを置くことができる。そのサイズも任意である。CPU101は、このPCバッファ上に波形データを先行生成する。PCバッファには、時間フレームで複数フレーム分の波形データが先行生成される。TP[x]は、PCバッファ上で、転送回路1がRAM2上のPバッファへと転送開始するアドレスを示す。
PCバッファのTP[x]位置から転送されたデータは、Pバッファの書き込みアドレスTWP[x]に書き込まれる。RAM2上のPバッファは、波形データの128サンプル(ただし、バッファのサイズは任意)を格納するバッファを2個つなげた形になっている。Pバッファの波形データは、読み出しアドレスAPP[x]から読み出され、ミキサ124に出力される。Pバッファのまん中と末尾には割込み位置が設定されている。サンプリング周期ごとに読み出しアドレスAPP[x]を進めながら波形サンプルを読み出していくとき、当該読み出しアドレスAPP[x]が、この割込み位置に至ったとき、いま読み出していたPバッファのうちの半分が空になったということだから、波形生成のトリガになるハード割込が発生する。このハード割込を契機として、CPU101は、いま空になったPバッファのうちの半分に、次に再生すべきPCバッファの所定の楽音波形データを転送する。
なお、リアルタイム演奏に使用できるためには、演奏から楽音出力までの時間を10msec程度に抑えないといけない。サンプリング周波数44.1kHzの場合、10msecは441サンプルに相当する。ソフト音源では、大体、2フレーム程度の時間遅れが発生する。そこで、本実施の形態では、例えば、1フレームを128サンプルとする。つまり、Pバッファのサイズは、128サンプル×2=256サンプルである。
PCバッファには、先行して生成される楽音波形が記憶される。先行して記憶できる楽音波形のサンプル数が多いほど、ソフト音源のノイズ防止効果が大になる。本実施の形態では、PCバッファのサイズを、例えば、64フレーム分=128サンプル×64=8kサンプル分とする。
図3は、CPU101の制御プログラムのうちソフト音源に係るメインルーチンの処理手順を示す。このメインルーチンは、ソフト音源のドライバとしてオペレーティングシステムに登録されているものである。ソフト音源を使用した楽音生成を行う際には、まずこのドライバ、すなわち図3の処理を起動し、ソフト音源に係るAPIを有効にしておく。
図3において、ステップ301で、各種の初期設定を行う。この初期設定で、上述のPCバッファおよびPバッファをゼロクリアする。次に、ステップ302で何らかの起動要因があるか否かチェックし、ステップ303で起動要因があればステップ304に進む。起動要因がなければ再びステップ302に戻る。ステップ302〜304の起動要因の受付が、ソフト音源に係るAPIに対する指示受付に相当する。
ステップ304では、発生している起動要因の種類を判別しそれぞれの処理に分岐する。起動要因としては、(1)MIDIデータを受信したとき(MIDI−I/O割り込み)、(2)RAM1上のMIDIデータを格納するバッファ(以下、Mバッファと呼ぶ)にMIDIデータがあるとき、(3)1フレーム分(128サンプル)の楽音生成処理が終了(すなわち、Pバッファの2つのバッファのうちの1つについて波形データの読み出し再生が終わった)したとき(Pバッファ割り込み)、(4)空き時間があるとき、(5)何らかのスイッチ操作があった場合などその他の場合、(6)終了ボタンがクリックされたときがある。以下、これらの起動要因ごとに実行する処理を説明する。なお、図中の丸数字は括弧付き数字で表記する。
起動要因が(1)MIDIインタフェース116を介してMIDIデータを受信した場合のときは、ステップ305のMIDI受信イベント処理を行い、その後再びステップ302に戻る。MIDIデータの受信およびステップ305のMIDI受信イベント処理が、演奏入力の受付に相当する。ステップ304で起動要因が(2)MバッファにMIDIデータがある場合のときは、ステップ306のMIDI制御イベント処理を行い、その後再びステップ302に戻る。
ステップ302で起動要因が(3)フレーム割り込み(1フレーム再生完了)であるときは、ステップ307の楽音生成処理を行い、その後再びステップ302に戻る。フレーム割り込みは、音源ボードが1フレーム再生完了する毎に発生するハードウェア割り込みである。楽音生成処理では、一度に1フレーム分の波形データ(Pバッファの大きさの半分に相当する数の波形サンプル)を生成し、PCバッファに書き込む。
ステップ304で起動要因が(4)空き時間ありであるとき(実行すべき処理がないとき)は、ステップ308で空き時間処理を行い、その後再びステップ302に戻る。ステップ304で起動要因が(5)スイッチ操作などのその他の場合は、ステップ309でその他の処理を行い、再びステップ302に戻る。ステップ304で起動要因が(6)ソフト音源の終了要求であったときは、ステップ310で終了処理を行った後、処理を終了する。
なお、上述した(1)〜(6)の起動要因は、(1)>(3)>(2)>(5)>(6)>(4)の優先度を設定している。
図4は、図3のステップ305のMIDI受信イベント処理の処理手順を示す。MIDI受信イベント処理では、ステップ401でMIDIインタフェース116からイベントデータEDを取り出し、ステップ402でRAM1上のMバッファにイベントデータEDと受信時刻JTを書き込み、処理を終了する。
図5は、図3のステップ306のMIDI制御イベント処理の処理手順を示す。MIDI制御イベント処理では、まずステップ501でMバッファよりイベントデータEDと受信時刻JTを取り出し、ステップ502でイベントデータEDのデータ種別に応じて分岐する。イベントデータEDがノートオンであったときは、ステップ503でノートオン処理を行う。イベントデータEDがノートオフであったときは、ステップ504でノートオフ処理を行う。イベントデータEDがトラックのレベルデータであったときは、ステップ505でトラックレベル制御処理を行う。イベントデータEDがエフェクトレベルデータであったときは、ステップ506でエフェクトレベル制御処理を行う。イベントデータEDがピッチベンドデータであったときは、ステップ507でピッチベンド制御処理を行う。イベントデータEDがその他のデータであったときは、ステップ508でその他の制御処理を行う。ステップ503〜508の各処理の後、処理を終了する。
上述のステップ503〜507の処理は、以下の3つのタイプに分けることができる。タイプ1の処理は、ノートオン処理である。タイプ1の処理では、PCバッファ上に先行生成されている楽音波形データに、新たに発音開始する楽音波形を追加する。タイプ2は、ノートオフ処理、ピッチベンドレベル制御処理、およびビブラートレベル処理(その他制御処理508中)である。タイプ2の処理では、先行生成されている楽音波形を破棄し、生成し直す。タイプ3の処理は、トラックレベル制御処理、エフェクトレベル制御処理、およびエフェクト切り替え処理(その他制御処理508中)である。タイプ3の処理では、先行生成されている楽音波形自体は何の変更も加える必要がない。ミキサ124に設定する混合比を変更することにより、トラック別の音量やエフェクトレベルを制御することができる(これらを制御するための制御データが「トラック制御データ」である)。DSP125のプログラムを変更することで、エフェクトの切り替えができる。
図6は、図5のステップ503のノートオン処理の処理手順を示す。ノートオン処理に入ってきたときは、Mバッファより取り出したイベントデータEDとその受信時刻JTは分かっている。まずステップ601で、発音チャンネルの割り当てを行う。次にステップ602で、現在時刻GTと先行時刻STとを比較し、先行時刻STの方が時刻が進んでいるときはステップ605に進み、そうでないとき(作り置きしてある波形データがないとき)はステップ603に進む。先行時刻STとは、PCバッファ上に先行生成してある波形データについて、いつの時点まで先行生成してあるかを示すデータである。
現在時刻GTより先行時刻STがあとのときは、先行生成してあるデータがあるということだから、ステップ605で、当該ノートオンの前のノートオンが来ていて先行生成してある波形にさらに後追いの波形を追加中か否か(すなわち、該前のノートオンに応じて今回割り当てたのとは別の発音チャンネルに関して既にステップ606,607が実行され、波形の追加が実行中であるか否か)判定する。これは、いったん追加を始めたらそれを続けないと音が連続しないので、そちらを優先して実行するための判別処理である。追加中であるときは、ステップ608で、イベントデータEDと受信時刻JTと発音割り当てしたチャンネル番号とをTバッファに格納し、追加発音開始待ちに設定する。これは、先に追加実行中の波形を処理しなくてはいけないからである。なお、Tバッファとは、追加発音開始待ち状態のデータを格納しておくRAM1上のバッファである。ステップ608の後、処理を終了する。
ステップ605で追加中でないときは、ステップ606で、今回のノートオンの波形を追加する。すなわち、発音割り当てしたチャンネルの発音制御レジスタに、立ち上がりからの発音制御データの設定(時間遅れが小のとき)、または持続部以降の発音制御データの設定(時間遅れが大のとき)を行う。次にステップ607で、そのチャンネルに追加の発音開始を指示する。このとき、追加時刻TTには現在時刻GTをセットし、レジスタkにチャンネル番号をセットする。追加時刻TTとは、先行生成してある波形データに対して新たな波形を追加開始する時点を示すデータである。kはチャンネル番号を格納するワークレジスタである。ステップ607の後、処理を終了する。
ステップ602で先行生成してある波形データがないときは、ステップ603で、今回のノートオンの波形を追加する。すなわち、発音割り当てしたチャンネルの発音制御レジスタに、立ち上がりからの発音制御データの設定(時間遅れが小のとき)、または持続部以降の発音制御データの設定(時間遅れが大のとき)を行う。次にステップ604で、割り当てたチャンネルに通常の発音開始を指示し、処理を終了する。
なお、発音割り当てしたチャンネルの発音制御レジスタに発音制御データを設定する場合の時間遅れの判定は、現在時刻GTと受信時刻JT(発音開始すべき時刻といってもよい)とを比較し、例えば受信時点から100msec程度以上遅れたら時間遅れ大とし、そうでなければ小とする、などの方式を採ればよい。
図7は、図5のステップ504のノートオフ処理の処理手順を示す。ステップ701で、発音中のチャンネルからノートオフすべきチャンネルを検出する。ステップ702でノートオフすべきチャンネルが有るか否か判定し、無かったときは、入力したノートオフを無視して処理を終了する。有ったときは、ステップ703で、そのチャンネルの発音制御レジスタにノートオフを書き込む。次にステップ704で、現在時刻GTと先行時刻STとを比較する。先行して生成してある波形データがあるときは、その先行生成波形についても当該チャンネルをノートオフした波形に変更しなければならないので、ステップ705で当該チャンネルの波形を足し込んであったトラックのPCバッファの現在時刻GT+1以降の波形をキャンセルし、波形の再形成を指示して処理を終了する。ステップ704で先行生成している波形がないときは、そのまま処理を終了する。
図8は、図3のステップ308の空き時間処理の処理手順を示す。まずステップ801で、追加があるか否か(すなわち、図6のステップ607の指示があるか否か)判定する。追加があるときは、ステップ802で追加時刻TTに1加算する。次にステップ803で、追加するチャンネルであるkチャンネルの時刻TTの楽音波形を生成し、ステップ804で、そのチャンネルの楽音波形を足し込むべきトラックのPCバッファの時刻TTの位置に足し込む。ステップ805で、追加時刻TTと先行時刻STとが一致しているか否か判定し、一致しているときは以降の波形生成の必要がないので、ステップ806で、Tバッファを参照して追加発音開始待ち(ステップ608で設定)があるか否か判定する。
ステップ806で追加発音開始待ちがあるときは、ステップ807で、追加待ちのイベントデータEDと現在時刻GTとチャンネル番号とをTバッファから取り出し、現在時刻GTを追加時刻TTに、チャンネル番号をレジスタkに、それぞれセットする。追加発音待ちがないときは、次回のステップ801で「追加なし」と判断されるように設定を行ない、ステップ809へ進む。ステップ807の後、ステップ808で、kチャンネルの発音制御レジスタに、立ち上がりからの発音制御データの設定(時間遅れ小のとき)、または持続部以降の発音制御データの設定(時間遅れ大のとき)の処理を行う。次にステップ809で、空き時間があるか否か判定し、空き時間があるときはステップ801に戻って、空き時間処理を継続する。空き時間がないときは、そのまま処理を終了する。
ステップ801で追加がないときは、ステップ811で、ノートオフでのキャンセル指示(ステップ705の指示)があるか否か判定する。キャンセルがあるときは、ステップ812で、キャンセルされたトラックに対応する複数チャンネルの波形を再形成し、同トラックのPCバッファに書き込む。この処理は、追加と同様に複数回の処理で行う。ステップ812の後、ステップ809に進む。
ステップ811でキャンセルがないときは、ステップ813で、先行時刻ST(現在作成中の時刻)までの全発音チャンネルの波形データが生成済か否か判定する。生成済であるときは、ステップ814で、PCバッファに空きがあるか否か判定し、空きがないときは処理を終了する。PCバッファに空きがあるときは、ステップ815で先行時刻STに1加算し、ステップ816で先行時刻STの曲データを再生する。これはイベントデータEDが再生された場合は対応する制御処理を実行するものであり、自動演奏を再生する処理である。例えば、ノートオンのイベントが再生されたら、発音チャンネルを割り当て、割り当てたチャンネルの発音制御レジスタに該ノートオンに応じた楽音の発音制御データを設定し、発音開始を指示する。また、ノートオフイベントが再生されたら、対応する楽音を生成中の発音チャンネルを検出して、検出されたチャンネルの発音制御レジスタにノートオフを書き込む。次にステップ817で先行時刻STの全トラックのPCバッファをクリアする。これは今から作る波形を書き込むためのバッファを全部ゼロクリアする処理である。ステップ817の後、ステップ818に進む。ステップ813で先行時刻STの全発音チャンネル生成済でないときは、ステップ818に進む。
ステップ818でレジスタjに未生成のチャンネル番号をセットし、ステップ819でjチャンネルの楽音波形を生成する。次にステップ820で、生成した楽音波形を、当該チャンネルの波形を足し込むべきトラックのPCバッファの先行時刻STの位置に足し込み、ステップ809に進む。
図9は、図3のステップ307の楽音生成処理の処理手順を示す。まずステップ901で、現在時刻GTに1加算する。次にステップ902で、現在時刻GTと先行時刻STとを比較する。現在時刻GTが先行時刻STより進んでいるとき、すなわち先行波形が全くできていないときは、ステップ903で先行時刻STに現在時刻GTをセットし、ステップ912で先行時刻STの曲データを再生し、ステップ904で全トラックのPCバッファの先行時刻STの位置をゼロクリアし、ステップ905に進む。なお、ステップ912は、ステップ816と同様の処理である。ステップ902で現在時刻GTと先行時刻STとが一致しているときは、そのままステップ905に進む。
ステップ902で現在時刻GTより先行時刻STが進んでいるときは、先行して波形が作ってあるということだから、ステップ910に進み、追加キャンセル(図7のステップ705の指示)があるか否か判定する。追加キャンセルがあれば、先行時刻STは進んでいるが、まだ手直しが必要ということであるから、手直し分を作るためステップ905に進む。ステップ910で追加キャンセルがなければ、先行波形は完成されているということだから、そのまま再生するためステップ911に進む。
ステップ905では、波形データを先行生成する時間があるか否か判定する。生成する時間があるときは、ステップ906で、現在時刻GTの全発音チャンネル生成済か否か判定する。ステップ905で生成時間がないとき、またはステップ906で現在時刻GTの全発音チャンネルが生成済であったときは、ステップ911に進み、現在時刻GTの全トラックのPCバッファの再生許可を行ない、処理を終了する。ステップ906で現在時刻GTの全発音チャンネル生成済でないときは、ステップ907でレジスタiに未生成のチャンネル番号をセットし、ステップ908でiチャンネルの楽音波形を生成し、ステップ909で生成した楽音波形をそのチャンネルの波形を足し込むべきPCバッファの現在時刻GTの位置に足し込み、ステップ905に戻る。ステップ911の再生許可により、PCバッファの現在時刻GTの波形データが空になったPバッファに転送され次の再生に用いられる。
上記実施の形態において、曲データに基づく自動演奏は、図8のステップ816に示されている。一方、図6および図7には、リアルタイムに入力するMIDIデータに基づくノートオン/ノートオフ処理が示されている。図9のステップ905〜909の処理、図8のステップ812、ステップ803〜804、ステップ818〜820の処理は、それぞれ、それらのノートオン等のイベントに応じて発音制御レジスタに設定された発音チャンネルの発音制御データに基づいて、対応する楽音波形データを形成する処理である。
上記実施の形態では、空き時間処理で先行して波形生成を行ない、Pバッファのうちの半分のバッファが空になったときに先行生成してある波形を楽音生成処理でPバッファに転送し、再生することができる。この際、例えば空き時間処理では空き時間が足りなくても必要なチャンネルの波形生成ができない事態が発生しても、処理できる限りのチャンネルについては波形生成してPCバッファに足し込むので、その時点で先行生成してある波形データで再生される。したがって、波形生成ができなくなっても、音が途切れるあるいはノイズを発生すると言うことはない。また、既に先行生成されている波形に対して、追加の発音制御データが発生した場合、その追加分について波形生成して既に先行生成されている波形に足し込むので、追加の発音も適正に処理される。
さらに、例えば追加が指示されているときにさらに次の追加が来たときなど、ノートオンの処理ができない事態が発生した場合は、その時刻とノートオンを追加発音開始待ちとしてTバッファに格納して待機しておき、後に処理可能になったときに、そのノートオンを処理する。したがって、ノートオンの処理ができない事態が発生した場合でも、後でできる限りの追加分の処理が為される。
また、発音開始指示においては楽音の発生開始すべき時刻からの遅れを検出し、遅れが小さい場合は立ち上がり部から開始する楽音を生成し、遅れが大きい場合は持続部から開始する楽音を生成しているので、不自然な楽音にならない。
101…CPU(中央処理装置)、102…タイマ、103…、HOST(ホスト)−PCI(Peripheral Component Interconnect)ブリッジ、104…リードオンリメモリ、105…ランダムアクセスメモリ(RAM)、106…表示用入出力(I/O)インタフェース、107…表示器、108…キーボードI/Oインターフェース、109…キーボード、110…ローカルバス、111…PCIバス、112…ネットワークI/Oインターフェース、114…SCSI(Small Computer System Interface)、115…ハードディスク、116…MIDIインターフェース。