1.実施形態のハードウエア構成
次に、本発明の一実施形態のハードウエア構成を図3を参照し説明する。図において21はCPUであり、後述する制御プログラムに従って、CPUバス20を介して各部を制御する。22はROMであり、イニシャルプログラムローダ等が格納されている。23はRAMであり、後述する各種のプログラムやデータがロードされ、CPU21によってアクセスされる。24はタイマであり、所定時間毎にCPU21に対する割込みを発生させる。
25はMIDIインターフェースであり、外部のMIDI機器(図示せず)との間でMIDI信号のやりとりを行う。26はハードディスクであり、オペレーティングシステム、各種ドライバ、各種アプリケーションプログラム、演奏情報等が記憶されている。27はリムーバブルディスクであり、CD−ROM、MOドライブ等が設けられ、ハードディスク26と同様の情報が記憶される。
28は表示器であり、CRTあるいは液晶ディスプレイ等によって構成され、ユーザに対して種々の情報を表示する。29はキーボード&マウスであり、ユーザの操作によってCPU21に対して各種の情報を入力する。30は波形インターフェースであり、アナログ信号波形の入出力を行う。
ここで、波形インターフェース30の詳細を図4を参照し説明する。図において31はADコンバータであり、入力されたアナログ信号をデジタル信号に変換する。33はサンプリングクロック発生器であり、所定のサンプリング周波数のクロック信号を発生する。32は第1DMAコントローラであり、このクロック信号に同期してADコンバータ31の出力信号をサンプリングし、RAM23内の指定箇所に該サンプリング結果をダイレクトメモリアクセスにより転送する。
34は第2DMAコントローラであり、サンプリングクロック発生器33から出力されるクロック信号に同期して、RAM23に記憶されたデジタル波形データをダイレクトメモリアクセスによって読出す。35はDAコンバータであり、読出されたデジタル波形データをアナログ信号に変換し出力する。
2.実施形態のソフトウエア構成
2.1.ソフトウエアの全体構成
次に、本実施形態のソフトウエア構成を図1を参照し説明する。図において2はオペレーティングシステムであり、アプリケーションプログラムおよび各種ドライバはこのオペレーティングシステムに用意されたAPI(アプリケーション・プログラム・インターフェース)を介して入出力処理を行う。1は音楽ソフトであり、上記アプリケーションプログラムの一例である。
この音楽ソフト1は、楽音を発生させる必要が生じた際に、MIDI_OutまたはWAVE_Outメッセージを発生させる。ここにMIDI_Outメッセージは、楽音信号をMIDI信号として出力するメッセージであり、WAVE_Outメッセージは、楽音信号を波形データとして出力するメッセージである。
5,6,……はFM音源、PCM音源、物理モデル音源等の音源モジュールであり、供給されたMIDI信号に基づいて波形データを生成する。ここで、波形データの生成に用いる局所サンプリング周波数TFsが所定のシステムサンプリング周波数SFsとは異なる場合は、波形データのサンプリング周波数はシステムサンプリング周波数SFsに変更される。例えば音源モジュール6には、かかる変更のためのFs変換ブロック6aが設けられている。局所サンプリング周波数TFsがシステムサンプリング周波数SFsと同一である場合には、サンプリング周波数の変換は不要であることは言うまでもない。
なお、サンプリング周波数としては、CDと同一の44.2kHz、その半分の22.1kHz、32kHz、48kHz等が代表的な値である。7,8,……はエフェクトモジュールであり、供給された波形データに対してリバーブ、コーラス等、各エフェクトモジュールに固有の効果アルゴリズムに基づく効果を施す。3は統合ドライバであり、上記MIDI_OutメッセージまたはWAVE_Outメッセージに基づいて、音源モジュール5,6,……およびエフェクトモジュール7,8,……を制御する。
すなわち、MIDI_Outメッセージによって供給されたMIDI信号は、MIDI分配ブロック3aを介して、そのパートに応じた音源モジュール5,6,……に分配され、該MIDI信号を受け取った音源モジュールは対応する波形データを生成する。より具体的には、各音源モジュール5,6,……には「Mバッファ」と称するMIDI信号の入力バッファが設けられており、統合ドライバ3は対応するモジュールのMバッファにMIDIイベントの内容を書込むことになる。
3bはFs変換ブロックであり、WAVE_Outメッセージを介して供給された波形データのサンプリング周波数Fsがシステムサンプリング周波数SFsと異なる場合には、該波形データのサンプリング周波数をSFsに変換して、所定のバッファ領域に書き込む。ところで、音源モジュール5,6,……およびエフェクトモジュール7,8,……によって出力された波形データは、該所定のバッファ領域に足し込まれる。3dはトリガ発生&バッファ管理ブロックであり、これらバッファの更新が完了したか否かを監視し、完了した場合には次段のモジュールに対するトリガを発生させる。上記所定のバッファ領域に記憶された波形データは、対応するエフェクトモジュールないしFs変換ブロック3eへの入力となる。
11はコーデックブロックであり、波形インターフェース30によって実現される。9はコーデックドライバであり、コーデックブロック11をドライブする。統合ドライバ3内におけるFs変換ブロック3eは、トリガ発生&バッファ管理ブロック3dを介して得た波形データのサンプリング周波数(すなわちシステムサンプリング周波数SFs)が、コーデックブロック11用の出力サンプリング周波数OFsと異なる場合には、該波形データのサンプリング周波数をOFsに変換し、コーデックドライバ9に対してWAVE_Outメッセージを出力する。
2.2.Fs変換ブロック
Fs変換ブロック3b,3e,および6aを一般的に表記すると、図2のようになる。すなわち、何れのFs変換ブロックも、Fs=x[Hz]である前段のブロックAから波形データを受取り、この波形データのサンプリング周波数をFs=y[Hz]に変換し後段のブロックBに供給するものである。これらFs変換ブロックの動作は、サンプリング周波数xおよびサンプリング周波数yの大小関係に応じて異なる。
まず、x>yである場合は、y/2[Hz]をカットオフ周波数として波形データに対してローパスフィルタリング処理を施し、その結果としてサンプリング周波数yの各サンプリングポイントのサンプル値が算出される。ここで、元々ブロックAから出力された波形データにおけるサンプリング点がサンプリング周波数yのサンプリング点と一致する場所についても、同様にサンプル値が算出される。
一方、x<yである場合は、x/2[Hz]をカットオフ周波数として波形データに対してローパスフィルタリング処理を施し、その結果としてサンプリング周波数yの各サンプリングポイントのサンプル値が算出される。ここで、元々ブロックAから出力された波形データのサンプリング点がサンプリング周波数yのサンプリング点と一致する場所については、サンプル値の算出が行われず、ブロックAから出力された値がそのまま用いられる。以上の動作により、x>yとx<yの何れの場合でも、サンプリング周波数xの波形データをサンプリング周波数yの波形データに、折り返しノイズを抑制しつつ変換することができる。
3.実施形態のデータ構造
次に、本実施形態で用いられる各種データ構造を図13を参照し説明する。同図(a)は音源モジュールに関するTGM登録データであり、その先頭には登録されている音源モジュールの数が記憶されている。これに引き続いて、各音源モジュールの固有のTGM登録データが順次記憶されている。TGM登録データには、各音源モジュールを指定するモジュール名(例えば「金管モデル」)等のデータが記憶されている。
同図(b)はエフェクトモジュールに関するEFM登録データであり、その先頭には登録されているエフェクトモジュールの数が記憶されている。これに引き続いて、各エフェクトモジュールを指定するモジュール名等のデータが順次記憶されている。
同図(c)は、各モジュールに対して共通に用いられるコモンデータである。上述したシステムサンプリング周波数SFsおよび出力サンプリング周波数OFsは、このコモンデータに含まれる。また、T順番データとは、各音源モジュールに対して、その実行順序を定めたデータである。MAXはCPU21の負荷の上限を定めたものであり、ベンチマークテスト等によって自動決定したり、ユーザが手動で設定したりできる。
次に、同図(d)はパートデータであり、音源モジュールによって実現される最大「16」のパートについてのパラメータと、インサーションエフェクトについてのパラメータとを記憶する。なお、インサーションエフェクトとはパートに対して挿入されるエフェクトを意味する。また、それ以外のエフェクト、すなわち複数パートのミキシング結果等に施されるエフェクトをシステムエフェクトという。各パートデータPDn(nは1〜16)には、対応する音源モジュールの番号を示すトーンモジュール番号TMN(モジュール名でもよい)と、該パートの局所サンプリング周波数TFsと、音色番号TPNと最大発音数MTとが設けられている。ここで、トーンモジュール番号TMNは、図13(a)のTGM登録データに登録された音源モジュールの何れかを選択的に指定する。
「PAN」はパンレベル、「DS」,「1S」,「2S」,「3S」はセンドレベルであり、これらの意味については後述する。インサーションデータには、インサーションエフェクトの処理を行うエフェクトモジュールを示すモジュール番号EMN(モジュール名でもよい)、そのインサーションエフェクトが付与されるパートのパート番号、エフェクト処理のパラメータを指定するパラメータ番号等が記憶される。2つのインサーションエフェクトは互いに独立に設定可能であり、それぞれ、パート番号で指定されたパートの楽音信号に対して、モジュール番号EMNで指定されたエフェクトモジュールにより、パラメータ番号で指定されたパラメータを使用したエフェクト処理が施される。同じパートに対して2つのインサーションエフェクトが設定された場合には、一方が前段のエフェクトになり、他方が後段のエフェクトになる。また、何れのパートにも付与しないときは、そのインサーションエフェクトのパート番号として「0」を設定する。ここで、モジュール番号EMNは、図13(b)のEFM登録データに登録された音源モジュールの何れかを選択的に指定する。
次に、同図(e)はエフェクトデータであり、E順番データと、システムエフェクトを構成する3ブロック分のエフェクトデータEDn(nは1〜3)とから構成される。ここで、E順番データとは、システムエフェクトを実行する順番を定めたものである。ブロックnのエフェクトデータEDnの内部において、EMNnはエフェクト処理を行うエフェクトモジュールを示すモジュール番号(モジュール名でもよい)であり、EPNnはエフェクト処理のパラメータを指定するパラメータ番号である。EDSn〜E3Snはセンドレベルである。
4.実施形態の動作
4.1.統合ドライバ・メインルーチン
次に、本実施形態の動作を説明する。まず、オペレーティングシステム2が起動されると統合ドライバ3が起動され、図5に示す統合ドライバ・メインルーチンが実行される。図において処理がステップSP101に進むと、所定の初期設定が行われる。
この初期設定においては、以下のようにして登録された複数の音源モジュールについてその実行順序を示すT順番データが自動的に決定される。すなわち、各音源モジュールについて、複数パートの波形合成が不可能なものと可能なものとに分類され、前者の順位が高くなるように(優先して合成されるように)設定される。
また、何れの分類においても、局所サンプリング周波数の変更が不可能なものと可能なものとにさらに細かく分類され、前者の順位が高くなるように設定される。さらに、細分類された各グループ内においては、1音の生成に必要なCPU21の演算量がおおきなものほど優先されるように順位が決定される。これは、楽音生成の演算内容が変更な音源モジュールを低い優先度として、優先度の低い音源モジュールにおいてCPU21の負荷を調節可能にするためであり、その詳細については後述する。なお、T順番データは以上のように自動的に決定されるが、ユーザが所定の操作を行うことにより、適宜マニュアルで変更することができる。
次に、処理がステップSP102に進むと、登録されている各種モジュールが開かれる。次に、処理がステップSP103に進むと、起動要因が発生したか否かが判定される。ここで、「起動要因」とは、
(1)音楽ソフト1からのMIDI_Outメッセージの入力、
(2)オペレーティングシステム2からのトリガメッセージの入力、
(3)各モジュールからの波形データの受取
(4)キーボード&マウス29の操作によるユーザ設定の入力
(5)オペレーティングシステム2の終了メッセージの入力、および
(6)その他各種のメッセージの入力
を意味する。
ステップSP103,SP104においては、これら何れかの起動要因が発生するまで処理が待機する。そして、何れかの起動要因が発生すると、処理はステップSP5に進み、該起動要因に応じた処理が行われる。ここで、終了メッセージの入力が発生した場合は処理はステップSP110に進み、統合ドライバ3の終了処理が行われる。それ以外の場合は、各々起動要因に対応した処理が行われた後、処理はステップSP103に戻る。以下、起動要因に応じた処理の内容を場合を分けて説明する。
4.2.ユーザ設定の入力
4.2.1.音源モジュール登録
ユーザがキーボードまたはマウスを操作すると、その操作内容がステップSP103で検出され、処理はステップSP104,105を介してステップSP109に進み、統合ドライバ3の各種の設定を行うことができる。ここでユーザが所定の操作を行った場合は図8に示す音源モジュール登録ウインドウ40が表示器28に表示される。図において41はモジュール一覧リストボックスであり、登録可能な(ハードディスク26等にインストールされている)音源モジュールのモジュール名が列挙される。
44は登録モジュールリストボックスであり、統合ドライバ3に登録されている音源モジュールのモジュール名が列挙される。42は追加ボタンであり、新たな音源モジュールの登録を指示する。すなわち、ユーザがモジュール一覧リストボックス41の中の任意のモジュール名を選択し(マウスでクリックし)、さらに追加ボタン42をマウスでクリックすると、選択された音源モジュールが登録モジュールリストボックス44内に追加される。そして、登録された音源モジュールのモジュール名および数が、図13(a)のTGM登録データに記憶される。
また、43は削除ボタンであり、登録モジュールリストボックス44に列挙された音源モジュールの削除を指示する。すなわち、ユーザが登録モジュールリストボックス44内の任意の音源モジュールを選択して削除ボタン43をマウスでクリックすると、該音源モジュールが登録モジュールリストボックス44内から削除される。すなわち、図13(a)のTGM登録データから削除された該音源モジュールのモジュール名が消去されるとともに、モジュール数が「1」だけ減じられる。このように登録モジュールをユーザが適宜設定した後にOKボタン45がマウスでクリックされると、登録モジュールリストボックス44の内容が確定される。なお、キャンセルボタン46がマウスでクリックされると、登録モジュールは、音源モジュール登録ウインドウ40の表示前の状態に戻される。
4.2.2.パート設定
ユーザが他の所定の操作を行うと、図9に示すパート設定ウインドウ50が表示器28に表示される。図において51はパート番号表示欄であり、「1」〜「16」のパート番号が上から下に向かって表示される。52は音色名表示欄であり、各パートに割り当てられた音色名が表示される。53はモジュール名表示欄であり、該パートに割り当てられた音源モジュール名が表示される。
各モジュール名表示欄53はコンボボックスになっており、右端に設けられたボタン53aをマウスでクリックすると、先に音源モジュール登録ウインドウ40において登録された音源モジュール名のリストが表示器28に表示される。このリストにおいてユーザが所望の音源モジュール名を選択すると(マウスでクリックすると)、選択された音源モジュールが当該パートに割り当てられるモジュールに設定される。そして、設定された音源モジュールを示すモジュール番号が、図13(d)の当該パートのTMNとして記憶される。
また、ユーザが音色名表示欄52をマウスでクリックすると、音色名表示欄52がコンボボックスに変わり、モジュール名表示欄53に表示された音源モジュールにおいて選択可能な音色名のリストが表示される。ここで、ユーザが所望の音色名をマウスでクリックすると、該音色が該パートに割り当てられる音色に設定される。そして、設定された音色を示す音色番号が、図13(d)の当該パートのTPNとして記憶される。
このように、ユーザはモジュール名表示欄53および音色名表示欄52を適宜操作することにより、所望の音色を各パートに割り当てることができる。次に、54はサンプリング周波数表示欄であり、各パートの局所サンプリング周波数TFsを表示する。同様に、この表示欄で入力操作を行うことにより、図13(d)の当該パートの局所サンプリング周波数TFsを設定することができる。
ところで、詳細は後述するが、本実施形態においては、RAM23内に波形データを記憶するバッファWB1〜9が設けられており、各音源モジュールで生成された波形データは、センドレベルが乗算された後、バッファWB1〜7に記憶される。ここで、バッファWB1,2は統合ドライバ3から最終的に出力される楽音信号をミキシングするためのステレオ出力用のバッファであり、WB3,4はシステムエフェクトの第1ブロックEF1に入力する楽音信号をミキシングするためのステレオ入力用バッファ、WB5,6は同第2ブロックEF2のステレオ入力用バッファ、WB7は同第3ブロックEF3のモノラル入力用バッファである。また、バッファWB8,9は、それぞれインサーションエフェクトIEF1,IEF2へのモノラル入力用に用いられる。
図9において55はPANレベル・エディットボックスであり、上述したステレオ出力における左右のレベル比をデシベル表示した値が表示される。さらに、このPANレベル・エディットボックス55にカーソルを置くことにより、ユーザはキーボード等を用いてPANレベルを任意に設定することができる。なお、この点は他のエディットボックスにおいても同様である。
56はドライレベル・エディットボックスであり、バッファWB1,2に対する送出レベルの平均値を示すセンドレベルDSを表示・設定する。57は第1エフェクトレベル・エディットボックスであり、バッファWB3,4に対する送出レベルの平均値を示すセンドレベル1Sを表示・設定する。同様に、58は第2エフェクトレベル・エディットボックスであり、バッファWB5,6に対する送出レベルの平均値を示すセンドレベル2Sを表示・設定する。そして、図13(d)の各パートのDS、1S、2Sには、設定されたセンドレベルが記憶される。
すなわち、バッファWB1〜6に対する送出レベルは、上記センドレベルのうち対応するものと、PANレベルとに基づいて決定される。例えば、第1エフェクトレベル1Sが20dBであってPANレベルが10dBであったとすると、バッファWB1に対する送出レベルは20+10=30dBになり、バッファWB2に対する送出レベルは20−10=10dBになる。
なお、図示の状態ではパート設定ウインドウ50上に表示されていないが、バッファWB7に対するセンドレベル3Sを設定するエディットボックスが各パートに設けられている。このエディットボックスは、パート設定ウインドウ50の横スクロールバー59を操作することによって画面上に表示させることができる。なお、バッファWB8,9に対しては、送出レベルによるレベル制御は行われない。また、以上に示したPANレベル、各センドレベルの値はあくまでも例であり、ユーザにより適宜設定されるものである。
4.2.3.エフェクト設定
上述した音源モジュール登録ウインドウ40およびパート設定ウインドウ50は音源モジュールの設定のためのウインドウであるが、ユーザが所定の操作を行うと、エフェクトモジュールの設定用に、これらと同様のウインドウが表示される。すなわち、音源モジュール登録ウインドウ40と同様のエフェクトモジュール登録ウインドウ画面によってユーザはエフェクトモジュールを追加、削除することができ、登録されたエフェクトモジュールのモジュール名と数が図13(b)のEFM登録データに記憶される。また、パート設定ウインドウ50と同様のシステムエフェクト設定ウインドウ画面によって、3ブロック分のエフェクトデータ、すなわち、各ブロックのモジュール番号EMNn、パラメータ番号EPNn、センドレベルEDSn〜E3Sn等が設定され、図13(e)の各ブロックに対応する記憶領域に記憶される。同様に、インサーションエフェクト設定ウインドウにより、2つの各インサーションエフェクトのモジュール番号EMN、パート番号、パラメータ番号等が設定され、図13(d)のインサーションデータとして記憶される。さらに、システム設定ウインドウにより、図13(c)のシステムサンプリング周波数SFs、出力サンプリング周波数OFs、CPU負荷上限MAXが設定される。なお、システムエフェクトの各ブロックのエフェクトデータには、パートのデータにあったようなPANレベルは存在しない。各ブロックで設定されたセンドレベルEDSnはそのままバッファWB1,2に対する共通の送出レベルになり、同様にE1SnはバッファWB3,4、E2SnはバッファWB5,6、E3SnはバッファWB7向けの送出レベルになる。
4.2.4.楽音合成系統
ここで、理解を容易にするため、パート設定ウインドウ50において設定される楽音合成系統の一例を図6および図7に示す。これらの図において実線の矢印は、「0」以外のセンドレベルが設定されていることを示す。例えば、図6においてパート1からバッファWB1,2,5〜7に対して実線の矢印が表示されているが、これはバッファWB1,2,5〜7に対するセンドレベルDS1、1S1、2S1が「0」以外の値であって、バッファWB3,4に対するセンドレベル1S1が「0」であることを示す。ここで、パート1の下に記載されているTMN1は、パート1に示された音源モジュールのモジュール番号TMN1(図13(d)を参照)を示している。
また、パート2からインサーションエフェクトIEF1に向かう実線の矢印が表示されているが、これはインサーションエフェクトIEF1を付与するパートのパート番号として「2」が設定されていることを示している。すなわち、パート2の演奏に応じて生成された楽音信号は、バッファWB8を介してインサーションエフェクトIEF1に供給される。
インサーションエフェクトの出力は、そのインサーションエフェクトを付与するパートに設定されたPANレベル、センドレベルによるレベル制御が行われ、対応するバッファに供給される。図6において、インサーションエフェクトIEF1からバッファWB1〜4に向かって実線の矢印が表示されていることは、インサーションエフェクトIEF1を付与するパート2に設定されたセンドレベルのうちDS2、1S2が「0」以外の値であり、それ以外のセンドレベル2S2、3S2が「0」であることを示す。なお、「インサーションエフェクト」とは、一般的には「パートに対して挿入されるエフェクト」の意味で用いられる。なお、インサーションエフェクトIEF1の下に記載されているIEMN1は、IEF1に設定されたエフェクトモジュールのモジュール番号IEMN1(図13(d)参照)を示している。パート3〜16についても同様であり、各パートについて「0」以外の値が設定されたセンドレベルに対応する結線が有効になっている。
先述したように、WB1,2はステレオ出力用バッファ、WB3,4はステレオ入力用バッファ、WB5,6は第2ブロックEF2のステレオ入力用バッファ、WB7は第3ブロックEF3のモノラル入力用バッファである。これは、図7において、例えばバッファWB3,4からエフェクトブロックEF1に向かう実線の矢印に対応する。第1ブロックEF1の下に記載されているEMN1は、第1ブロックEF1に設定されたエフェクトモジュールのモジュール番号EMN1(図13(e)参照)を示している。そして、エフェクトブロックEF1からバッファWB1,2,5,6に向かって実線の矢印が表示されていることは、EF1のセンドレベルEDS1、E2S1に「0」以外の値が設定され、センドレベルE3S1に「0」が設定されていることを示す。エフェクトブロックEF2,3についても同様であり、各ブロックについて「0」以外の値が設定されたセンドレベルに対応する結線が有効になる。
以上のように、各パートからバッファWB1〜7に対するセンドレベル、インサーションエフェクトを付与するパートのパート番号、各エフェクトブロックからバッファWB1〜7に対するセンドレベルを適宜設定することにより、例えば図6、図7に示すような様々な楽音合成系統が実現されることが解る。
ところで、上述したE順番データは、効果部の楽音合成系統に基づいて自動的に決定される。図示の例においては、エフェクトブロックEF1はバッファWB5,6に対して「0」以外のセンドレベルE2S1を有しており、その出力はバッファWB5,6を介してエフェクトブロックEF2に供給される。
ここで、エフェクトブロックEF2の処理をエフェクトブロックEF1よりも先に実行すると、エフェクトブロックEF1の処理結果がエフェクトブロックEF2の処理結果に反映されないことになる。従って、エフェクトブロックEF1の処理は、必ずエフェクトブロックEF2よりも先に実行しなければならないことが解る。
同様に、エフェクトブロックEF2はバッファWB7に対して「0」以外のセンドレベルE3S2を有しており、エフェクトブロックEF3はバッファWB7を入力バッファとして選択している。従って、エフェクトブロックEF2の処理は、エフェクトブロックEF3よりも先に実行する必要がある。このように、図7に示す例にあっては、E順番データは「(1)EF1,(2)EF2,(3)EF3」の順序になる。他の様々な接続例においても、以上のようにセンドレベルに基づいた解析が行われ、E順番データが自動的に決定される。そして、決定されたE順番データは、図13(e)のE順番データ記憶領域に記憶される。
4.3.トリガメッセージの入力
オペレーティングシステム2から供給されるトリガメッセージは、原則として所定時間(例えば数msec)毎に発生する。また、統合ドライバ3、音源モジュール5,6,……およびエフェクトモジュール7,8,……は、原則として該所定時間毎の波形データを生成して出力する。これにより、時間の経過とともに、各ドライバにおいて一連の波形データが生成されることになる。
しかし、トリガメッセージの発生間隔は必ずしも正確なものではなく、オペレーティングシステムや他のアプリケーションプログラムの都合によって遅れたり欠落することがある。かかる場合は、各モジュールにおいて、トリガメッセージの遅れや欠落を補償するために、上記所定時間以上に渡る波形データを生成する必要がある。その処理を、以下具体的に説明する。
オペレーティングシステム2からトリガメッセージが入力された場合、図5において処理はステップSP107に進み、図10に示すトリガ発生イベント処理ルーチンが起動される。図において処理がステップSP11に進むと、波形生成の遅れに応じて、今回の生成サンプル数が決定される。
次に、処理がステップSP12に進むと、バッファWB1〜9において、該サンプル数の領域が準備される。ここで、バッファWB1〜9とは、各々RAM23内に予め確保された所定長(例えば1024ワード×9)のバッファ領域であり、トリガメッセージの発生タイミングが正常であった場合には、ステップSP12においてその一部(例えば128ワード×9)づつ領域が確保される。
なお、トリガメッセージの遅れや欠落が生じた場合には、確保される領域が変更されることは言うまでもない。バッファWB1〜9の長さ(1024ワード)を本実施形態では「1フレーム」と呼ぶ。これは、波形データの出力を行う場合の単位になる量でもある。
次に、処理がステップSP13に進むと、T順番データの先頭の音源モジュールに対して、波形バッファWB1〜9と生成サンプル数と波形生成トリガが送出される。この波形生成トリガは、波形データの合成の開始を指示するものであり、各バッファWB1〜9において生成すべき波形データのサンプル数(以下、生成サンプル数という)を含むものである。以上の処理が終了すると、処理は統合ドライバ・メインルーチン(図5)に戻るが、送出された波形生成トリガに基づいて、先頭の音源モジュールのプロセスで図16に示す波形生成トリガ・イベント処理ルーチンが起動される。なお、その詳細については後述する。
4.4.MIDI_Outメッセージの入力
音楽ソフト1からMIDI_Outメッセージが入力された場合は、統合ドライバ・メインルーチン(図5)において処理はステップSP106に進み、図11に示すMIDI受信イベント処理ルーチンが起動される。図において処理がステップSP14に進むと、変数EDに該MIDI_Outメッセージに係るイベントの内容が格納される。また、該MIDI_Outメッセージの受信時刻が変数ETに記憶される。
次に、処理がステップSP15に進むと、該MIDI_Outメッセージにおいてモジュール切換が指定されたか否かが判定される。ここで、音源モジュールの切換は一般的にはMIDIのプログラムチェンジ及び/またはコントロールチェンジによって指示され、エフェクトモジュールの切換はパラメータチェンジによって指示されるが、一の音源モジュールあるいはエフェクトモジュールが複数の音色または効果をサポートしており、かつ、その範囲内での音色または効果を切換える場合には、モジュール切換は発生しない。
ステップSP15において「YES」と判定されると、処理はステップSP18に進み、指定されたパートの音源モジュールが新たな音源モジュールに変更され、あるいは指定されたエフェクトが設定される。但し、指定された音源モジュールあるいはエフェクトモジュールが登録された範囲のモジュールに含まれない場合は、代替モジュールが設定される。
一方、ステップSP15において「NO」と判定されると、処理はステップSP16に進む。ここでは、MIDI_Outメッセージの内容に応じて、該メッセージの送り先モジュールが決定される。例えば、ノートオン、ノートオフ等のメッセージであれば、該メッセージは何れかのパートに対応するから、該パートの生成に用いられている音源モジュールが送り先として決定される。また、エフェクト量の変更等のイベントであれば、対応するエフェクトモジュールが送り先として決定される。
次に、処理がステップSP17に進むと、送り先モジュールのMバッファにイベント内容EDおよび受信時刻ETが書込まれる。以上の処理が終了すると、処理は統合ドライバ・メインルーチン(図5)に戻るが、Mバッファに対する書込みに基づいて、別プロセスで図15に示すMIDIイベント処理ルーチンが起動される。なお、その詳細については後述する。
4.5.波形データの受取
音源モジュール5,6,……またはエフェクトモジュール7,8,……の何れか一つにおいて波形データの生成処理ないしエフェクト処理が完了する毎に、統合ドライバ・メインルーチン(図5)のステップSP103においてその旨が検出される。その際、各モジュールからは波形バッファWB1〜9が戻されるが、そこには当該モジュールでの処理が終了した波形データが記憶されている。これにより、処理はステップSP108に進み、図12に示す波形受取イベント処理ルーチンが起動される。図において処理がステップSP21に進むと、最後に実行された音源モジュールに対応するインサーションエフェクトの処理が済んでいるか否かが判定される。
これは、例えば図6におけるパート2とインサーションエフェクトIEF1との関係が存在し、パート2に設定された音源モジュールTMN2における波形データの生成が完了した直後に発生する。ここで「YES」と判定されると、処理はステップSP25に進み、モジュール番号IEMN1で指定されたエフェクトモジュールEFMに対して、波形バッファWB1〜9と生成サンプル数とインサーション演算トリガとが送出され、当該エフェクトモジュールEFMのプロセスで演算トリガ・イベント処理ルーチン(図17)が起動される。
一方、ステップSP21において「NO」と判定されると処理はステップSP22に進み、音源モジュールのうちで今回のトリガメッセージに対応する波形データを生成していないものが存在するか否かが判定される。ここで「YES」と判定されると、処理はステップSP26に進み、T順番データに従って、次に優先順位の高い音源モジュールに波形バッファWB1〜9と生成サンプル数と波形生成トリガとが送出され、当該音源モジュールTGMのプロセスで波形生成トリガ・イベント処理ルーチン(図16)が起動される。そして、ステップSP25または26の何れかの処理が実行されると、処理は統合ドライバ・メインルーチン(図5)に戻る。
以上の処理に鑑みれば、図6、図7に示すような楽音合成系統に対して、音源モジュールおよびインサーションエフェクトに係る部分(図6)の波形演算が先に実行され、しかる後にシステムエフェクトモジュールの処理が行われることになる。これは、音源モジュールおよびインサーションエフェクトで生成される波形データが特定できなければシステムエフェクトを施すことができないから、当然のことである。
しかし、楽音合成系統をCPU21で行うにあたって問題が生ずる場合がある。すなわち、CPU21によって音源モジュールを動作させた後、システムエフェクトを動作させるだけの処理能力の余裕が無ければ、何れかのシステムエフェクトの処理を省略せざるを得ない。これは、聴感上できわめて影響の大きい不具合になる。
そこで、本実施形態においては、CPU21の処理能力が不足する場合は、音源モジュールの一部を犠牲にすることにより、システムエフェクトに影響が及ばないようにしている。すなわち、ステップSP26においてT順番データの最後の音源モジュールに対して波形生成トリガを送出する場合には、これに先立ってCPU負荷の残量が計算される。
そして、CPU負荷の不足することが判明した場合は、以下の何れかの措置によって、該音源モジュールに係るCPU負荷が軽減される。
(1)最後の音源モジュールの発音数を減少させる。
(2)最後の音源モジュールの局所サンプリング周波数TFsが可変である場合は、局所サンプリング周波数TFsを下げる。
(3)最後の音源モジュールの処理内容(楽音生成アルゴリズム)を簡単なものに変更する。
以上の何れの措置が採られた場合であっても、楽音に対する悪影響は避けられないことは勿論である。しかし、システムエフェクトが突然途切れるような不具合と比較すれば、容認できる場合が多い。先述したT順番データの決定過程で、演算内容の変更可能な音源モジュール、パート数の多いモジュールが後ろの順番になるように制御されているのは、それらの音源モジュールがCPU負荷の調整を行うのに適したモジュールだからである。
以上のように、最後の音源モジュールに対して波形生成トリガを送出すると、やがて波形データが生成され、波形データの受取イベントが発生する。かかる場合、処理はステップSP21および22を介してステップSP23に進む。ここでは、処理されていないエフェクトモジュールが残っているか否かが判定される。なお、エフェクトモジュールの実行すべきエフェクト処理のうちインサーションエフェクトの処理は、ステップSP23が実行される前に全て処理が完了している(ステップSP21,25)。
ここで「YES」と判定されると、処理はステップSP27に進み、E順番データに従って次のエフェクトブロックEFnに設定されているエフェクトモジュールに対して波形バッファWB1〜9と生成サンプル数と演算トリガが送出され、当該エフェクトモジュールのプロセスで演算トリガ・イベント処理ルーチン(図18)が起動される。該エフェクトモジュールにおける波形データのエフェクト処理が完了して再び波形受取イベント処理ルーチン(図12)が呼び出される。そして、全てのエフェクトモジュールの処理が完了するまで、ステップSP27が繰り返し実行されることになる。
最後のエフェクトモジュールにおける波形データのエフェクト処理が終了した後、再び本ルーチンが呼び出されると、ステップSP23において「NO」と判定され、処理はステップSP24に進む。なお、このステップSP24に進行した時点で、トリガメッセージに応答した波形データの生成処理は全て完了している。ここでは、「1」フレーム分の波形データの生成が完了したか否かが判定される。ここで「YES」と判定されると、処理はステップSP28に進み、バッファWB1,2に記憶された完成した1フレーム分の波形データのコーデックドライバ9に対する再生予約が行われる。なお、システムサンプリング周波数SFsと出力サンプリング周波数OFs(コーデックのサンプリング周波数に等しい)が異なる場合には、このステップSP28でサンプリング周波数の変換処理(Fs変換ブロック3eに対応する)も行われる。
次に、処理がステップSP29に進むと、新たなバッファWB1〜9がRAM23上に確保され、その内容がゼロクリアされる。これは、前回使用されたバッファWB1,2の内容はまだ出力されておらず内容を破壊することができないため、新たなバッファWB1〜9を確保したものである。
4.6.各モジュールのメインルーチン
次に、音源モジュール5,6,……およびエフェクトモジュール7,8,……における詳細動作を説明する。まず、これらのモジュールにおいては、登録済みのモジュールについては統合ドライバ3の起動時に、図8のような登録ウインドウで新たに登録されたモジュールについてはその登録時に、各々別プロセスで図14に示すモジュールメインルーチンが起動される。
図において処理がステップSP31に進むと、所定の初期設定が行われる。ここで、局所サンプリング周波数TFsが選択可能なモジュールにおいては、システムサンプリング周波数SFsに応じて最適な局所サンプリング周波数TFsが選択される。
すなわち、システムサンプリング周波数SFsと局所サンプリング周波数TFsとを一致させることができれば、サンプリング周波数の変換処理が不要になるため、一致する周波数が最優先で選択される。例えば、局所サンプリング周波数TFsとして44kHzと22kHzの何れかが選択可能であってシステムサンプリング周波数SFsが22kHzであった場合には、44kHzで波形データを生成する利点は得られないから、局所サンプリング周波数TFsは22kHzに設定される。
なお、システムサンプリング周波数SFsに一致する局所サンプリング周波数TFsが存在しない場合には、システムサンプリング周波数SFsに最も近い周波数が選択される。さらに、「最も近い周波数」が2つ存在する場合には、低い方の周波数が選択される。
次に、処理がステップSP32に進むと、起動要因が発生したか否かが判定される。ここで、「起動要因」とは、
(1)MIDIイベントの発生(SP17によるMバッファに対するイベント内容EDおよび受信時刻ETの書込み)
(2)各種のトリガの受信(SP13,SP25等による)
(3)オペレーティングシステム2の終了メッセージの入力、ないし、図8のような登録ウインドウにおける当該モジュールの登録/削除、および
(4)その他各種のメッセージの入力
を意味する。
ステップSP32,SP33においては、これら何れかの起動要因が発生するまで処理が待機する。そして、何れかの起動要因が発生すると、処理はステップSP34に進み、該起動要因に応じた処理が行われる。ここで、終了メッセージの入力が発生した場合は処理はステップSP38に進み、モジュールメインルーチンの終了処理が行われる。それ以外の場合は、各々起動要因に対応した処理が行われた後、処理はステップSP32に戻る。以下、起動要因に応じた処理の内容を場合を分けて説明する。
4.7.MIDIイベント処理ルーチン
ステップSP32において、Mバッファに対するMIDIイベントの書込みが検出されると、モジュールメインルーチンにおいて処理はステップSP35に進み、例えば図15に示す音源モジュールのMIDIイベント処理ルーチンが呼び出される。
図において処理がステップSP41に進むと、Mバッファからイベント内容EDおよび受信時刻ETが読み出される。なお、これらのデータは、先にMIDI受信イベント処理ルーチン(図11)のステップSP17においてMバッファに書込まれたものである。次に、処理がステップSP42に進むと、イベント内容EDがパラメータデータPDに変換される。
例えば、イベント内容EDがノートオンである場合は、パートと音高とベロシティとが指定されることになる。ここで、音源モジュールがFM音源であれば、当該パートで選択された音色に基づいて該音高とベロシティとが個々のオペレータの周波数、位相、レベル等FM音源固有のパラメータを含むパラメータデータPDに変換されるとともに、その発音を行う発音チャンネルが決定される。
次に、処理がステップSP43に進むと、該モジュールに対して確保されたPバッファ(パラメータバッファ)の当該パートに対応した記憶領域にパラメータデータPDと発音チャンネルと受信時刻ETとが書込まれ、処理はモジュールメインルーチン(図14)に戻る。
4.8.波形生成トリガ・イベント処理ルーチン(図16)
モジュールメインルーチンのステップSP32において波形生成トリガの受信が検出されると、処理はステップSP36に進み、図16に示す音源モジュールの波形生成トリガ・イベント処理ルーチンが呼び出される。
なお、この波形生成トリガは、トリガ発生イベント処理ルーチン(図10)のステップSP13、波形受取イベント処理ルーチン(図12)のステップSP26において発生したものである。図16において処理がステップSP51に進むと、バッファWB1〜9の書込みアドレスのポインタと、生成サンプル数が受け取られる。
ここで、生成サンプル数はシステムサンプリング周波数SFsにおけるサンプル数を示す値であるから、必ずしも該音源モジュールにおける生成サンプル数に一致するわけではない。そこで、次に、処理がステップSP52に進むと、システムサンプリング周波数SFsと局所サンプリング周波数TFsとの比に基づいて、この生成サンプル数が局所サンプリング周波数TFsにおけるサンプル数に変換される。
詳細は後述するが、波形生成トリガ・イベント処理ルーチンが過去に実行された場合、既に一部のサンプルが生成されている場合がある。かかる場合は、既に生成された部分が今回出力される波形データに繰り越されることになる。従って、局所サンプリング周波数TFsにおけるサンプル数から生成済みのサンプル数を減算した値が所要サンプル数になる。
次に、処理がステップSP53に進むと、PバッファのパラメータデータPDに基づいて、音源モジュール内のレジスタの内容を更新しつつ、複数チャンネル分の波形データが生成され、モジュール専用波形バッファMWB上で累算される。ここで、モジュール専用波形バッファMWBとは、バッファWB1〜9とは別に各モジュール毎に、さらに、その音源モジュールが複数パートの波形データを生成する場合には、各パート毎に独立して確保される。ステップSP53においては、所要のサンプル数以上のサンプル数であってモジュールの処理に都合の良いサンプル数の波形データが生成される。
例えば、CPU21がキャッシュ機能、並列処理機能を有しており、この機能の都合により例えば「16サンプル」の波形データを効率よく生成できるのであれば、生成するサンプル数を「16」の倍数に設定すると、CPU21の処理能力を最も有効に使用することができる。例えば、ステップSP52で得られた所要サンプル数が「130」であった場合は、「130」以上の「16」の倍数のうち最小値である「144」サンプルが生成されることになる。
また、生成するサンプル数はハードウエアにおける事情のみならず、ソフトウエア上の事情に基づく場合もある。例えば、楽音信号のエンベロープ波形を1サンプル毎に更新するのではなく、例えば「16」サンプルに1回更新することによって処理負担を軽減する技術が知られている。かかる場合も、生成するサンプル数を「16」の倍数に設定すると好適である。
次に、処理がステップSP54に進むと、モジュール専用波形バッファMWBから所要サンプル数(上記例では「130」)の波形データが取り出され、該波形データのサンプリング周波数TFsがシステムサンプリング周波数SFsに変換される。なお、前記周波数TFsが前記周波数SFsに等しい場合には、該サンプリング周波数の変換は不要であるので、ステップSP54での処理は省略される。次に、処理がステップSP55に進むと、モジュール専用波形バッファMWBに記憶された第1パートの波形データの出力の準備が行われる。ここで、「第1パート」とは「当該音源モジュールにおいて生成する複数のパートのうちの第1パート」の意味であり、必ずしも「MIDIのパート1」と一致するわけではない。
次に、処理がステップSP56に進むと、該パートに対してインサーションエフェクトが設定されているか否かが判定される。ここで「YES」と判定されると、処理はステップSP58に進み、モジュール専用波形バッファMWB内の該パートの波形データがバッファWB8または9に書込まれる。さらに、これに付随して、該パートのセンドレベルおよびPANレベルも書込まれる。
次に、処理がステップSP59に進むと、該音源モジュールにおいて波形データを生成するパートが残っているか否かが判定される。ここで「YES」と判定されると、処理はステップSP60に進み、モジュール専用波形バッファMWBに記憶された次のパートの波形データが準備され、処理はステップSP56に戻る。この新たなパートにおいてインサーションエフェクトが設定されていない場合は処理はステップSP57に進む。ここでは、該パートに設定されたセンドレベル及びPANレベルに応じた送出レベルがバッファWB1〜7の波形データに各々乗算され、各乗算結果がバッファWB1〜7の元々の値に加算される。
以下同様に、該音源モジュールで波形データを生成する全てのパートに対してステップSP57またはSP58が実行され、処理はステップSP61に進む。ここでは、バッファWB1〜9に対する更新を完了した旨が統合ドライバ・メインルーチン(図5)に通知される。これにより、統合ドライバ・メインルーチンにおいては、上述したように波形受取処理(SP108)が実行され波形受取イベント処理ルーチン(図12)が呼び出されることになる。
4.9.演算トリガ・イベント処理ルーチン(図17)
モジュールメインルーチンのステップSP32においてインサーションエフェクトに対する演算トリガの受信が検出されると、処理はステップSP36に進み、図17に示すエフェクトモジュールの波形生成トリガ・イベント処理ルーチンが呼び出される。この演算トリガは、波形受取イベント処理ルーチン(図12)のステップSP25においてインサーションエフェクトに対して発生したものである。
なお、ステップSP27でシステムエフェクトのトリガが発生した場合には、後述する図18のルーチンが呼び出される。さて、図17において処理がステップSP71に進むと、バッファWB1〜9の書込みアドレスのポインタと、生成サンプル数が受け取られる。
次に、処理がステップSP72に進むと、Pバッファのパラメータレジスタの値に基づいて、エフェクトモジュール内のレジスタの内容を更新しつつ、入力バッファ(インサーションエフェクトIEF1ならWB8、IEF2ならWB9)内の波形データに対して、コーラス、リバーブ等のインサーションエフェクト処理が施され、エフェクトの付与された波形データが当該モジュール専用の波形バッファMWBに収納される。
次に、処理がステップSP73に進むと、インサーションエフェクトが施されるパートに対してさらにインサーションエフェクトが指定されているか否かが判定される。これは、1つのパートに対して複数のインサーションエフェクトを指定できることによるものである。ここで「YES」と判定されると、処理はステップSP75に進み、次のインサーションエフェクトの入力バッファに対してエフェクト処理を施した波形データが書込まれる。
なお、入力バッファであるバッファWB8または9には、元々の波形データを生成した音源モジュールの処理においてインサーションエフェクトの付与されるパートに設定されたセンドレベルおよびPANレベルも付与されている(図16のステップSP58参照)。このセンドレベルおよびPANレベルは、エフェクト処理を施した波形データとともに、再びバッファWB8または9に書込まれる。
次に、処理がステップSP76に進むと、入力バッファの更新を完了した旨が統合ドライバ・メインルーチン(図5)に通知される。これにより、統合ドライバ・メインルーチンにおいては、上述したように波形受取処理(SP108)が実行され波形受取イベント処理ルーチン(図12)が呼び出される。
そして、上記例にあっては、最後に波形生成されたパートについてさらにインサーションエフェクトが残っているから、ステップSP21において「YES」と判定され、ステップSP25を介して再びインサーションエフェクトに係る演算トリガが送出される。
この結果、次のインサーションエフェクトに係る演算トリガ・イベント処理ルーチン(図17)が呼び出され、ステップSP71,72を介して上述したようにエフェクト処理を施した波形データが生成される。このインサーションエフェクトに対してさらに続くインサーションエフェクトが無ければ、ステップSP73において「NO」と判定され、処理はステップSP74に進む。
ここでは、各バッファWB1〜7に対するセンドレベルおよびPANレベル(入力バッファに添付されていた値)に応じた送出レベルが波形バッファMWBの波形データに各々乗算され、各乗算結果がバッファWB1〜7の元々の値に加算される。そして、処理がステップSP76に進むと、バッファWB1〜9に対する更新を完了した旨が統合ドライバ・メインルーチン(図5)に通知され、本ルーチンの処理は終了する。
4.10.演算トリガ・イベント処理ルーチン(図18)
モジュールメインルーチンのステップSP32においてシステムエフェクトに対する演算トリガ(ステップSP26参照)の受信が検出されると、処理はステップSP36に進み、図18に示すエフェクトモジュールの演算トリガ・イベント処理ルーチンが呼び出される。
本ルーチンの処理は演算トリガ・イベント処理ルーチン(図17)と同様であるが、ステップSP73,75に対応する処理は行われない。これは、システムエフェクトは必ずバッファWB1〜7を介して波形データの受け渡しを行うことによる。また、ステップSP82における入力バッファは、バッファWB1〜7の何れかになる。すなわち、当該エフェクトモジュールが第1ブロックEF1に設定されたモジュールである場合にはバッファWB3,4を入力バッファとし、第2ブロックEF2の場合はバッファWB5,6を、第3ブロックEF3の場合はバッファWB7をそれぞれ入力バッファとする。各入力バッファの波形データに対して、EMNnで指定されるエフェクトモジュールの、EPNnで指定されPバッファの内容に応じて更新されたパラメータ値に基づくエフェクト処理が施され、エフェクトの付与された波形データが当該モジュール専用の波形バッファMWBに収納される。続くステップSP83では、当該エフェクトブロックEFnで設定されているセンドレベルに応じた送出レベルが波形バッファMWBの波形データに各々乗算され、各乗算結果がバッファWB1〜7の元々の値に加算される。そして、処理がステップSP84に進むと、バッファWB1〜9に対する更新を終了した旨が統合ドライバ・メインルーチン(図5)に通知され、本ルーチンの処理は終了する。
5.実施形態の効果
(1)以上のように本実施形態においては「システムサンプリング周波数SFs」なる概念を用い、これを標準として複数の音源モジュールとの間で波形データの受け渡しができるため、全体的に処理が簡素化される。特に、欠く音源モジュールで生成すべきサンプル数をシステムサンプリング周波数SFsによって指定することができるから、制御をきわめてシンプルにすることができる。
(2)本実施形態においては、局所サンプリング周波数TFsの選択が可能である場合は、システムサンプリング周波数SFsに応じて最適な局所サンプリング周波数TFsが選択される。これにより、CPUの処理能力を有効に活用することができ、最終出力の音質に寄与しない無駄な計算を防止することができる。
(3)また、本実施形態においては、各音源モジュールおよびエフェクトモジュールがバッファWB1〜9の波形データを読出し、新たに生成した波形データを加算することによって多段階の楽音合成を行うことができる。従って、パート数が増加した場合であってもバッファWB1〜9の領域は増加させる必要がなく、きわめて拡張性に富む。さらに、各モジュール間でアドレスの受け渡しを行うことによって波形データそのものを転送するオーバーヘッドを削減することができる。
(4)また、本実施形態においては、T順番データを設けることによって負荷調整が可能な音源モジュールの演算を後回しにすることができ、CPU21の処理能力に応じて負荷調整を行うことが可能である。
6.変形例
本発明は上述した実施形態に限定されるものではなく、例えば以下のように種々の変形が可能である。
(1)上記実施形態はパーソナルコンピュータ上で本発明を実施した例を説明したが、その他プロセッサとソフトウエアとによって制御される一般の電子楽器、ゲームマシン、カラオケ機器等、楽音パラメータ編集機能あるいは楽音発生機能を含む種々の機器に適用することが可能である。さらに、これらの機器にインストールされるプログラムを記憶した記録媒体として実現することも可能である。
(2)上記実施形態においては、トリガメッセージがオペレーティングシステム2から所定時間毎に発生するようになっていたが、トリガメッセージをハードウエアのタイマ24、波形インターフェース30等で発生するようにしてもよい。一般にオペレーティングシステム2を介さない方がトリガメッセージの時間精度が向上する。また、発生の時間間隔も、例えば1フレームに相当する時間としても良い。
(3)上記実施形態においては、バッファWB1〜9のサイズを1024ワードとしたが、バッファのサイズはこれより大きくしても良いし小さくしてもよい。また、必要に応じて変更できるようにしてもよい。
(4)上記実施形態においては、T順番データの最後の音源モジュールでCPU負荷の調整を行うようになっていたが、最後の2つないしそれ以上の音源モジュールで調整するようにしてもよい。
(5)上記実施形態においては、音源モジュールないしエフェクトモジュールが登録されたときに対応するモジュールメインルーチンが起動され、登録削除された時に終了するようになっていたが、それを変更して、何れかのMIDIパートで当該モジュールが選択された時に起動され、何れのパートでも選択されなくなった時に終了されるようにしてもよい。
1…音楽ソフト、2…オペレーティングシステム、3…統合ドライバ、3a…MIDI分配ブロック、3b,3e,6a…Fs変換ブロック、3d…トリガ発生&バッファ管理ブロック、3e…Fs変換ブロック、5,6…音源モジュール、7,8…エフェクトモジュール、9…コーデックドライバ、11…コーデックブロック、20…CPUバス、21…CPU、22…ROM、23…RAM、24…タイマ、25…MIDIインターフェース、26…ハードディスク、27…リムーバブルディスク、28…表示器、29…キーボード&マウス、30…波形インターフェース、31…ADコンバータ、32…第1DMAコントローラ、33…サンプリングクロック発生器、34…第2DMAコントローラ、35…DAコンバータ、40…音源モジュール登録ウインドウ、41…モジュール一覧リストボックス、42…追加ボタン、43…削除ボタン、44…登録モジュールリストボックス、45…OKボタン、46…キャンセルボタン、50…パート設定ウインドウ、51…パート番号表示欄、52…音色名表示欄、53…モジュール名表示欄、53a…ボタン、54…サンプリング周波数表示欄、55…PANレベル・エディットボックス、56…ドライレベル・エディットボックス、57…第1エフェクトレベル・エディットボックス、58…第2エフェクトレベル・エディットボックス、59…横スクロールバー。