(57)【特許請求の範囲】
【請求項１】
プロセッサにおいて、制御プログラムと複数の楽音処理プログラムとを用いて、楽音を合成する楽音合成方法であって、
(a)前記制御プログラムは、
前記プロセッサに、
所定時間毎に、各々複数の波形サンプルを記憶可能であって、記憶する波形サンプルをそれぞれ所定の出力先に出力する所定数のバッファを用意するとともに、前記複数の楽音処理プログラムに対して或る実行順序で楽音信号の処理を指令する指令手順と、
前記所定数のバッファのうち少なくとも一つのバッファに記憶された楽音信号を、前記或る実行順序に従って前記所定の出力先に出力する出力手順とを実行させるものであり、
(b)前記複数の楽音処理プログラムは、
前記プロセッサに、
前記指令に応じて、楽音信号を生成する楽音生成処理、または、前記出力手順において出力された楽音信号に基づく所定の信号処理を実行する楽音処理手順と、
前記楽音処理手順において出力される楽音信号の音量を所定のレベル情報で制御するとともに、前記所定数のバッファのうち前記レベル情報の制御が行われるバッファとして定められた全てのバッファに足し込む混合手順とを実行させるものであり、
当該複数の楽音処理プログラムには、互いに異なる楽音生成処理を行う楽音生成手順を前記プロセッサに実行させる複数の楽音生成プログラムと、前記信号処理を行う楽音処理手順を前記プロセッサに実行させるプログラムとが含まれており、
前記指令手順は、前記複数の楽音生成プログラムのうち、前記プロセッサによる一音の処理に要する演算量の大きい楽音生成処理、前記プロセッサによってサンプリング周期を変更することができない楽音生成処理、又は前記プロセッサによって楽音生成アルゴリズムの内容を変更することができない楽音生成処理を行う楽音生成手順を前記プロセッサに実行させる楽音生成プログラムが優先されるように実行順序を決定する第１の順序決定手順を含み、
当該指令手順では、前記複数の楽音処理プログラムに含まれる前記複数の楽音生成プログラムに対する前記楽音信号の処理の指令を、前記第１の順序決定手順において決定された実行順序に従って行い、
当該指令手順は、前記複数の楽音生成プログラムのうち前記楽音信号の処理の指令が最後に行われる楽音生成プログラムが前記プロセッサに実行させる楽音生成手順について、当該楽音生成手順の楽音生成処理にて変更可能な音数、サンプリング周期又は楽音生成アルゴリズムの内容の少なくとも１つを変更することにより前記プロセッサの負荷量を制御する負荷調整手順を含む
ことを特徴とする楽音合成方法。
【請求項２】
前記複数の楽音処理プログラムには、互いに異なる信号処理を行う楽音処理手順を前記プロセッサに実行させる複数の信号処理プログラムが含まれており、
前記制御プログラムが前記プロセッサに実行させる前記指令手順は、
各々の前記信号処理についてレベル情報を設定することにより、０以外の値がレベル情報として設定された複数の該信号処理間の結線を指定する結線指定手順と、
前記複数の信号処理間の結線に応じて、前記複数の信号処理プログラムの実行順序を決定する第２の順序決定手順とを含み、
当該指令手順では、前記複数の楽音処理プログラムに含まれる前記複数の信号処理プログラムに対する前記楽音信号の処理の指令を、前記第２の順序決定手順において決定された実行順序に従って行い、
前記複数の信号処理プログラムが前記プロセッサに実行させる前記混合手順では、前記結線指定手順において設定されたレベル情報に従って前記楽音信号の音量を制御する
ことを特徴とする請求項１に記載の楽音合成方法。
【請求項３】
請求項１又は２の何れかに記載の方法をコンピュータに実行させるためのプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項４】
請求項１又は２の何れかに記載の方法を実行することを特徴とする楽音合成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウエアによる楽音合成に用いて好適な楽音合成方法、記録媒体および楽音合成装置に関する。
【背景技術】
【０００２】
従来より、コンピュータ上で楽音合成を行う種々のソフトウエアが知られている。これらソフトウエアにおいては、ＦＭ音源、ＰＣＭ音源、物理モデル音源等、各種の音源モジュールが設けられ、各モジュールで合成された楽音信号がミキシングされることによって最終的な楽音信号が得られる。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、上述した技術においては、様々なモジュールのサンプリング周波数を同一に設定しておく必要があった。このため、特定のサンプリング周波数でなければ動作が困難なモジュール（例えば物理モデル音源）を新たに追加することが困難であり、サンプリング周波数が異なるという理由のみで高品質なモジュールを使用することができず、高品質な楽音合成を行うことが困難であった。
【０００４】
また、ソフトウエア上で楽音合成を行うにあたって、ＣＰＵパワーが不足した場合は一部の処理を省略する等の措置を講ずる必要がある。しかし、従来のソフトウエアにおいては、どの部分を省略するかについて適切に判断することができなかった。これにより、重要な処理が省略され、時に楽音の品質が著しく低下するという問題があった。
【０００５】
また、ソフトウエア上で楽音合成を行うにあたっては、各種の処理を１サンプルづつ行うと効率が悪いため、ある程度まとまった単位（フレーム）毎に処理が行われることが多い。かかる場合は複数の音響効果を施す際に、効果を施す順序が不適切であると充分な音響効果が得られない場合がある。従来のソフトウエアにおいては、この音響効果を施す順序についても配慮されていなかったため、楽音の品質を低下させることがあった。
【０００６】
この発明は上述した事情に鑑みてなされたものであり、ソフトウエア上で高品質な楽音合成を行う楽音合成方法、記録媒体および楽音合成装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するため請求項１記載の構成にあっては、プロセッサにおいて、制御プログラムと複数の楽音処理プログラムとを用いて、楽音を合成する楽音合成方法であって、(a)前記制御プログラムは、前記プロセッサに、所定時間毎に、各々複数の波形サンプルを記憶可能であって、記憶する波形サンプルをそれぞれ所定の出力先に出力する所定数のバッファを用意するとともに、前記複数の楽音処理プログラムに対して或る実行順序で楽音信号の処理を指令する指令手順と、前記所定数のバッファのうち少なくとも一つのバッファに記憶された楽音信号を、前記或る実行順序に従って前記所定の出力先に出力する出力手順とを実行させるものであり、(b)前記複数の楽音処理プログラムは、前記プロセッサに、前記指令に応じて、楽音信号を生成する楽音生成処理、または、前記出力手順において出力された楽音信号に基づく所定の信号処理を実行する楽音処理手順と、前記楽音処理手順において出力される楽音信号の音量を所定のレベル情報で制御するとともに、前記所定数のバッファのうち前記レベル情報の制御が行われるバッファとして定められた全てのバッファに足し込む混合手順とを実行させるものであり、当該複数の楽音処理プログラムには、互いに異なる楽音生成処理を行う楽音生成手順を前記プロセッサに実行させる複数の楽音生成プログラムと、前記信号処理を行う楽音処理手順を前記プロセッサに実行させるプログラムとが含まれており、前記指令手順は、前記複数の楽音生成プログラムのうち、前記プロセッサによる一音の処理に要する演算量の大きい楽音生成処理、前記プロセッサによってサンプリング周期を変更することができない楽音生成処理、又は前記プロセッサによって楽音生成アルゴリズムの内容を変更することができない楽音生成処理を行う楽音生成手順を前記プロセッサに実行させる楽音生成プログラムが優先されるように実行順序を決定する第１の順序決定手順を含み、当該指令手順では、前記複数の楽音処理プログラムに含まれる前記複数の楽音生成プログラムに対する前記楽音信号の処理の指令を、前記第１の順序決定手順において決定された実行順序に従って行い、当該指令手順は、前記複数の楽音生成プログラムのうち前記楽音信号の処理の指令が最後に行われる楽音生成プログラムが前記プロセッサに実行させる楽音生成手順について、当該楽音生成手順の楽音生成処理にて変更可能な音数、サンプリング周期又は楽音生成アルゴリズムの内容の少なくとも１つを変更することにより前記プロセッサの負荷量を制御する負荷調整手順を含むことを特徴とする。
【０００８】
また、請求項２記載の構成にあっては、請求項１記載の構成において、前記複数の楽音処理プログラムには、互いに異なる信号処理を行う楽音処理手順を前記プロセッサに実行させる複数の信号処理プログラムが含まれており、前記制御プログラムが前記プロセッサに実行させる前記指令手順は、各々の前記信号処理についてレベル情報を設定することにより、０以外の値がレベル情報として設定された複数の該信号処理間の結線を指定する結線指定手順と、前記複数の信号処理間の結線に応じて、前記複数の信号処理プログラムの実行順序を決定する第２の順序決定手順とを含み、当該指令手順では、前記複数の楽音処理プログラムに含まれる前記複数の信号処理プログラムに対する前記楽音信号の処理の指令を、前記第２の順序決定手順において決定された実行順序に従って行い、前記複数の信号処理プログラムが前記プロセッサに実行させる前記混合手順では、前記結線指定手順において設定されたレベル情報に従って前記楽音信号の音量を制御することを特徴とする。
【００１０】
また、請求項３記載の構成にあっては、請求項１又は２の何れかに記載の方法を実行するプログラムを記録したことを特徴とする。
【００１１】
また、請求項４記載の構成にあっては、請求項１又は２の何れかに記載の方法を実行することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、複数の合成過程を実行する際に、少なくとも最後に実行される合成過程についてその処理する音数ないし演算内容を変更する態様によれば、プロセッサの負荷制御を効率的に行うことが可能である。
【００１３】
また、複数の信号処理過程間の結線情報に応じて複数の信号処理過程の実行順序を決定する構成によれば、ユーザの指定した結線に応じて複数の信号処理過程の実行順序を自動的に決定できるから、ユーザは信号処理過程の順序を考慮することなく自由に結線の指定を行うことができる。
【００１４】
また、制御プログラムが所定数のバッファを用意し、複数の生成プログラムが少なくとも一つのバッファに記憶されている楽音信号に基づく所定の信号処理を実行し、所定数のバッファのうち少なくとも一つのバッファに足し込む構成によれば、複数の生成プログラム間で共通のバッファを使用することができる。さらに、キャッシュを備えたプロセッサにおいては、そのバッファについて高いキャッシュヒット率が期待できる。
【発明を実施するための最良の形態】
【００１５】
１．実施形態のハードウエア構成
次に、本発明の一実施形態のハードウエア構成を図３を参照し説明する。図において２１はＣＰＵであり、後述する制御プログラムに従って、ＣＰＵバス２０を介して各部を制御する。２２はＲＯＭであり、イニシャルプログラムローダ等が格納されている。２３はＲＡＭであり、後述する各種のプログラムやデータがロードされ、ＣＰＵ２１によってアクセスされる。２４はタイマであり、所定時間毎にＣＰＵ２１に対する割込みを発生させる。
【００１６】
２５はＭＩＤＩインターフェースであり、外部のＭＩＤＩ機器（図示せず）との間でＭＩＤＩ信号のやりとりを行う。２６はハードディスクであり、オペレーティングシステム、各種ドライバ、各種アプリケーションプログラム、演奏情報等が記憶されている。２７はリムーバブルディスクであり、ＣＤ−ＲＯＭ、ＭＯドライブ等が設けられ、ハードディスク２６と同様の情報が記憶される。
【００１７】
２８は表示器であり、ＣＲＴあるいは液晶ディスプレイ等によって構成され、ユーザに対して種々の情報を表示する。２９はキーボード＆マウスであり、ユーザの操作によってＣＰＵ２１に対して各種の情報を入力する。３０は波形インターフェースであり、アナログ信号波形の入出力を行う。
【００１８】
ここで、波形インターフェース３０の詳細を図４を参照し説明する。図において３１はＡＤコンバータであり、入力されたアナログ信号をデジタル信号に変換する。３３はサンプリングクロック発生器であり、所定のサンプリング周波数のクロック信号を発生する。３２は第１ＤＭＡコントローラであり、このクロック信号に同期してＡＤコンバータ３１の出力信号をサンプリングし、ＲＡＭ２３内の指定箇所に該サンプリング結果をダイレクトメモリアクセスにより転送する。
【００１９】
３４は第２ＤＭＡコントローラであり、サンプリングクロック発生器３３から出力されるクロック信号に同期して、ＲＡＭ２３に記憶されたデジタル波形データをダイレクトメモリアクセスによって読出す。３５はＤＡコンバータであり、読出されたデジタル波形データをアナログ信号に変換し出力する。
【００２０】
２．実施形態のソフトウエア構成
２．１．ソフトウエアの全体構成
次に、本実施形態のソフトウエア構成を図１を参照し説明する。図において２はオペレーティングシステムであり、アプリケーションプログラムおよび各種ドライバはこのオペレーティングシステムに用意されたＡＰＩ（アプリケーション・プログラム・インターフェース）を介して入出力処理を行う。１は音楽ソフトであり、上記アプリケーションプログラムの一例である。
【００２１】
この音楽ソフト１は、楽音を発生させる必要が生じた際に、MIDI＿OutまたはWAVE＿Outメッセージを発生させる。ここにMIDI＿Outメッセージは、楽音信号をＭＩＤＩ信号として出力するメッセージであり、WAVE＿Outメッセージは、楽音信号を波形データとして出力するメッセージである。
【００２２】
５，６，……はＦＭ音源、ＰＣＭ音源、物理モデル音源等の音源モジュールであり、供給されたＭＩＤＩ信号に基づいて波形データを生成する。ここで、波形データの生成に用いる局所サンプリング周波数ＴＦｓが所定のシステムサンプリング周波数ＳＦｓとは異なる場合は、波形データのサンプリング周波数はシステムサンプリング周波数ＳＦｓに変更される。例えば音源モジュール６には、かかる変更のためのＦｓ変換ブロック６ａが設けられている。局所サンプリング周波数ＴＦｓがシステムサンプリング周波数ＳＦｓと同一である場合には、サンプリング周波数の変換は不要であることは言うまでもない。
【００２３】
なお、サンプリング周波数としては、ＣＤと同一の４４．２kＨz、その半分の２２．１kＨz、３２kＨz、４８kＨz等が代表的な値である。７，８，……はエフェクトモジュールであり、供給された波形データに対してリバーブ、コーラス等、各エフェクトモジュールに固有の効果アルゴリズムに基づく効果を施す。３は統合ドライバであり、上記MIDI＿OutメッセージまたはWAVE＿Outメッセージに基づいて、音源モジュール５，６，……およびエフェクトモジュール７，８，……を制御する。
【００２４】
すなわち、MIDI＿Outメッセージによって供給されたＭＩＤＩ信号は、ＭＩＤＩ分配ブロック３ａを介して、そのパートに応じた音源モジュール５，６，……に分配され、該ＭＩＤＩ信号を受け取った音源モジュールは対応する波形データを生成する。より具体的には、各音源モジュール５，６，……には「Ｍバッファ」と称するＭＩＤＩ信号の入力バッファが設けられており、統合ドライバ３は対応するモジュールのＭバッファにＭＩＤＩイベントの内容を書込むことになる。
【００２５】
３ｂはＦｓ変換ブロックであり、WAVE＿Outメッセージを介して供給された波形データのサンプリング周波数Ｆｓがシステムサンプリング周波数ＳＦｓと異なる場合には、該波形データのサンプリング周波数をＳＦｓに変換して、所定のバッファ領域に書き込む。ところで、音源モジュール５，６，……およびエフェクトモジュール７，８，……によって出力された波形データは、該所定のバッファ領域に足し込まれる。３ｄはトリガ発生＆バッファ管理ブロックであり、これらバッファの更新が完了したか否かを監視し、完了した場合には次段のモジュールに対するトリガを発生させる。上記所定のバッファ領域に記憶された波形データは、対応するエフェクトモジュールないしＦｓ変換ブロック３ｅへの入力となる。
【００２６】
１１はコーデックブロックであり、波形インターフェース３０によって実現される。９はコーデックドライバであり、コーデックブロック１１をドライブする。統合ドライバ３内におけるＦｓ変換ブロック３ｅは、トリガ発生＆バッファ管理ブロック３ｄを介して得た波形データのサンプリング周波数（すなわちシステムサンプリング周波数ＳＦｓ）が、コーデックブロック１１用の出力サンプリング周波数ＯＦｓと異なる場合には、該波形データのサンプリング周波数をＯＦｓに変換し、コーデックドライバ９に対してWAVE＿Outメッセージを出力する。
【００２７】
２．２．Ｆｓ変換ブロック
Ｆｓ変換ブロック３ｂ，３ｅ，および６ａを一般的に表記すると、図２のようになる。すなわち、何れのＦｓ変換ブロックも、Ｆｓ＝ｘ[Hz]である前段のブロックＡから波形データを受取り、この波形データのサンプリング周波数をＦｓ＝ｙ[Hz]に変換し後段のブロックＢに供給するものである。これらＦｓ変換ブロックの動作は、サンプリング周波数ｘおよびサンプリング周波数ｙの大小関係に応じて異なる。
【００２８】
まず、ｘ＞ｙである場合は、ｙ／２[Hz]をカットオフ周波数として波形データに対してローパスフィルタリング処理を施し、その結果としてサンプリング周波数ｙの各サンプリングポイントのサンプル値が算出される。ここで、元々ブロックＡから出力された波形データにおけるサンプリング点がサンプリング周波数ｙのサンプリング点と一致する場所についても、同様にサンプル値が算出される。
【００２９】
一方、ｘ＜ｙである場合は、ｘ／２[Hz]をカットオフ周波数として波形データに対してローパスフィルタリング処理を施し、その結果としてサンプリング周波数ｙの各サンプリングポイントのサンプル値が算出される。ここで、元々ブロックＡから出力された波形データのサンプリング点がサンプリング周波数ｙのサンプリング点と一致する場所については、サンプル値の算出が行われず、ブロックＡから出力された値がそのまま用いられる。以上の動作により、ｘ＞ｙとｘ＜ｙの何れの場合でも、サンプリング周波数ｘの波形データをサンプリング周波数ｙの波形データに、折り返しノイズを抑制しつつ変換することができる。
【００３０】
３．実施形態のデータ構造
次に、本実施形態で用いられる各種データ構造を図１３を参照し説明する。同図(a)は音源モジュールに関するＴＧＭ登録データであり、その先頭には登録されている音源モジュールの数が記憶されている。これに引き続いて、各音源モジュールの固有のＴＧＭ登録データが順次記憶されている。ＴＧＭ登録データには、各音源モジュールを指定するモジュール名（例えば「金管モデル」）等のデータが記憶されている。
【００３１】
同図(b)はエフェクトモジュールに関するＥＦＭ登録データであり、その先頭には登録されているエフェクトモジュールの数が記憶されている。これに引き続いて、各エフェクトモジュールを指定するモジュール名等のデータが順次記憶されている。
【００３２】
同図(c)は、各モジュールに対して共通に用いられるコモンデータである。上述したシステムサンプリング周波数ＳＦｓおよび出力サンプリング周波数ＯＦｓは、このコモンデータに含まれる。また、Ｔ順番データとは、各音源モジュールに対して、その実行順序を定めたデータである。ＭＡＸはＣＰＵ２１の負荷の上限を定めたものであり、ベンチマークテスト等によって自動決定したり、ユーザが手動で設定したりできる。
【００３３】
次に、同図(d)はパートデータであり、音源モジュールによって実現される最大「１６」のパートについてのパラメータと、インサーションエフェクトについてのパラメータとを記憶する。なお、インサーションエフェクトとはパートに対して挿入されるエフェクトを意味する。また、それ以外のエフェクト、すなわち複数パートのミキシング結果等に施されるエフェクトをシステムエフェクトという。各パートデータＰＤｎ（ｎは１〜１６）には、対応する音源モジュールの番号を示すトーンモジュール番号ＴＭＮ（モジュール名でもよい）と、該パートの局所サンプリング周波数ＴＦｓと、音色番号ＴＰＮと最大発音数ＭＴとが設けられている。ここで、トーンモジュール番号ＴＭＮは、図１３(a)のＴＧＭ登録データに登録された音源モジュールの何れかを選択的に指定する。
【００３４】
「ＰＡＮ」はパンレベル、「ＤＳ」，「１Ｓ」，「２Ｓ」，「３Ｓ」はセンドレベルであり、これらの意味については後述する。インサーションデータには、インサーションエフェクトの処理を行うエフェクトモジュールを示すモジュール番号ＥＭＮ（モジュール名でもよい）、そのインサーションエフェクトが付与されるパートのパート番号、エフェクト処理のパラメータを指定するパラメータ番号等が記憶される。２つのインサーションエフェクトは互いに独立に設定可能であり、それぞれ、パート番号で指定されたパートの楽音信号に対して、モジュール番号ＥＭＮで指定されたエフェクトモジュールにより、パラメータ番号で指定されたパラメータを使用したエフェクト処理が施される。同じパートに対して２つのインサーションエフェクトが設定された場合には、一方が前段のエフェクトになり、他方が後段のエフェクトになる。また、何れのパートにも付与しないときは、そのインサーションエフェクトのパート番号として「０」を設定する。ここで、モジュール番号ＥＭＮは、図１３(b)のＥＦＭ登録データに登録された音源モジュールの何れかを選択的に指定する。
【００３５】
次に、同図(e)はエフェクトデータであり、Ｅ順番データと、システムエフェクトを構成する３ブロック分のエフェクトデータＥＤｎ（ｎは１〜３）とから構成される。ここで、Ｅ順番データとは、システムエフェクトを実行する順番を定めたものである。ブロックｎのエフェクトデータＥＤｎの内部において、ＥＭＮｎはエフェクト処理を行うエフェクトモジュールを示すモジュール番号（モジュール名でもよい）であり、ＥＰＮｎはエフェクト処理のパラメータを指定するパラメータ番号である。ＥＤＳｎ〜Ｅ３Ｓｎはセンドレベルである。
【００３６】
４．実施形態の動作
４．１．統合ドライバ・メインルーチン
次に、本実施形態の動作を説明する。まず、オペレーティングシステム２が起動されると統合ドライバ３が起動され、図５に示す統合ドライバ・メインルーチンが実行される。図において処理がステップＳＰ１０１に進むと、所定の初期設定が行われる。
【００３７】
この初期設定においては、以下のようにして登録された複数の音源モジュールについてその実行順序を示すＴ順番データが自動的に決定される。すなわち、各音源モジュールについて、複数パートの波形合成が不可能なものと可能なものとに分類され、前者の順位が高くなるように（優先して合成されるように）設定される。
【００３８】
また、何れの分類においても、局所サンプリング周波数の変更が不可能なものと可能なものとにさらに細かく分類され、前者の順位が高くなるように設定される。さらに、細分類された各グループ内においては、１音の生成に必要なＣＰＵ２１の演算量がおおきなものほど優先されるように順位が決定される。これは、楽音生成の演算内容が変更な音源モジュールを低い優先度として、優先度の低い音源モジュールにおいてＣＰＵ２１の負荷を調節可能にするためであり、その詳細については後述する。なお、Ｔ順番データは以上のように自動的に決定されるが、ユーザが所定の操作を行うことにより、適宜マニュアルで変更することができる。
【００３９】
次に、処理がステップＳＰ１０２に進むと、登録されている各種モジュールが開かれる。次に、処理がステップＳＰ１０３に進むと、起動要因が発生したか否かが判定される。ここで、「起動要因」とは、
（１）音楽ソフト１からのMIDI＿Outメッセージの入力、
（２）オペレーティングシステム２からのトリガメッセージの入力、
（３）各モジュールからの波形データの受取
（４）キーボード＆マウス２９の操作によるユーザ設定の入力
（５）オペレーティングシステム２の終了メッセージの入力、および
（６）その他各種のメッセージの入力
を意味する。
【００４０】
ステップＳＰ１０３，ＳＰ１０４においては、これら何れかの起動要因が発生するまで処理が待機する。そして、何れかの起動要因が発生すると、処理はステップＳＰ５に進み、該起動要因に応じた処理が行われる。ここで、終了メッセージの入力が発生した場合は処理はステップＳＰ１１０に進み、統合ドライバ３の終了処理が行われる。それ以外の場合は、各々起動要因に対応した処理が行われた後、処理はステップＳＰ１０３に戻る。以下、起動要因に応じた処理の内容を場合を分けて説明する。
【００４１】
４．２．ユーザ設定の入力
４．２．１．音源モジュール登録
ユーザがキーボードまたはマウスを操作すると、その操作内容がステップＳＰ１０３で検出され、処理はステップＳＰ１０４，１０５を介してステップＳＰ１０９に進み、統合ドライバ３の各種の設定を行うことができる。ここでユーザが所定の操作を行った場合は図８に示す音源モジュール登録ウインドウ４０が表示器２８に表示される。図において４１はモジュール一覧リストボックスであり、登録可能な（ハードディスク２６等にインストールされている）音源モジュールのモジュール名が列挙される。
【００４２】
４４は登録モジュールリストボックスであり、統合ドライバ３に登録されている音源モジュールのモジュール名が列挙される。４２は追加ボタンであり、新たな音源モジュールの登録を指示する。すなわち、ユーザがモジュール一覧リストボックス４１の中の任意のモジュール名を選択し（マウスでクリックし）、さらに追加ボタン４２をマウスでクリックすると、選択された音源モジュールが登録モジュールリストボックス４４内に追加される。そして、登録された音源モジュールのモジュール名および数が、図１３(a)のＴＧＭ登録データに記憶される。
【００４３】
また、４３は削除ボタンであり、登録モジュールリストボックス４４に列挙された音源モジュールの削除を指示する。すなわち、ユーザが登録モジュールリストボックス４４内の任意の音源モジュールを選択して削除ボタン４３をマウスでクリックすると、該音源モジュールが登録モジュールリストボックス４４内から削除される。すなわち、図１３(a)のＴＧＭ登録データから削除された該音源モジュールのモジュール名が消去されるとともに、モジュール数が「１」だけ減じられる。このように登録モジュールをユーザが適宜設定した後にＯＫボタン４５がマウスでクリックされると、登録モジュールリストボックス４４の内容が確定される。なお、キャンセルボタン４６がマウスでクリックされると、登録モジュールは、音源モジュール登録ウインドウ４０の表示前の状態に戻される。
【００４４】
４．２．２．パート設定
ユーザが他の所定の操作を行うと、図９に示すパート設定ウインドウ５０が表示器２８に表示される。図において５１はパート番号表示欄であり、「１」〜「１６」のパート番号が上から下に向かって表示される。５２は音色名表示欄であり、各パートに割り当てられた音色名が表示される。５３はモジュール名表示欄であり、該パートに割り当てられた音源モジュール名が表示される。
【００４５】
各モジュール名表示欄５３はコンボボックスになっており、右端に設けられたボタン５３ａをマウスでクリックすると、先に音源モジュール登録ウインドウ４０において登録された音源モジュール名のリストが表示器２８に表示される。このリストにおいてユーザが所望の音源モジュール名を選択すると（マウスでクリックすると）、選択された音源モジュールが当該パートに割り当てられるモジュールに設定される。そして、設定された音源モジュールを示すモジュール番号が、図１３(d)の当該パートのＴＭＮとして記憶される。
【００４６】
また、ユーザが音色名表示欄５２をマウスでクリックすると、音色名表示欄５２がコンボボックスに変わり、モジュール名表示欄５３に表示された音源モジュールにおいて選択可能な音色名のリストが表示される。ここで、ユーザが所望の音色名をマウスでクリックすると、該音色が該パートに割り当てられる音色に設定される。そして、設定された音色を示す音色番号が、図１３(d)の当該パートのＴＰＮとして記憶される。
【００４７】
このように、ユーザはモジュール名表示欄５３および音色名表示欄５２を適宜操作することにより、所望の音色を各パートに割り当てることができる。次に、５４はサンプリング周波数表示欄であり、各パートの局所サンプリング周波数ＴＦｓを表示する。同様に、この表示欄で入力操作を行うことにより、図１３(d)の当該パートの局所サンプリング周波数ＴＦｓを設定することができる。
【００４８】
ところで、詳細は後述するが、本実施形態においては、ＲＡＭ２３内に波形データを記憶するバッファＷＢ１〜９が設けられており、各音源モジュールで生成された波形データは、センドレベルが乗算された後、バッファＷＢ１〜７に記憶される。ここで、バッファＷＢ１，２は統合ドライバ３から最終的に出力される楽音信号をミキシングするためのステレオ出力用のバッファであり、ＷＢ３，４はシステムエフェクトの第１ブロックＥＦ１に入力する楽音信号をミキシングするためのステレオ入力用バッファ、ＷＢ５，６は同第２ブロックＥＦ２のステレオ入力用バッファ、ＷＢ７は同第３ブロックＥＦ３のモノラル入力用バッファである。また、バッファＷＢ８，９は、それぞれインサーションエフェクトＩＥＦ１，ＩＥＦ２へのモノラル入力用に用いられる。
【００４９】
図９において５５はＰＡＮレベル・エディットボックスであり、上述したステレオ出力における左右のレベル比をデシベル表示した値が表示される。さらに、このＰＡＮレベル・エディットボックス５５にカーソルを置くことにより、ユーザはキーボード等を用いてＰＡＮレベルを任意に設定することができる。なお、この点は他のエディットボックスにおいても同様である。
【００５０】
５６はドライレベル・エディットボックスであり、バッファＷＢ１，２に対する送出レベルの平均値を示すセンドレベルＤＳを表示・設定する。５７は第１エフェクトレベル・エディットボックスであり、バッファＷＢ３，４に対する送出レベルの平均値を示すセンドレベル１Ｓを表示・設定する。同様に、５８は第２エフェクトレベル・エディットボックスであり、バッファＷＢ５，６に対する送出レベルの平均値を示すセンドレベル２Ｓを表示・設定する。そして、図１３(d)の各パートのＤＳ、１Ｓ、２Ｓには、設定されたセンドレベルが記憶される。
【００５１】
すなわち、バッファＷＢ１〜６に対する送出レベルは、上記センドレベルのうち対応するものと、ＰＡＮレベルとに基づいて決定される。例えば、第１エフェクトレベル１Ｓが２０ｄＢであってＰＡＮレベルが１０ｄＢであったとすると、バッファＷＢ１に対する送出レベルは２０＋１０＝３０ｄＢになり、バッファＷＢ２に対する送出レベルは２０−１０＝１０ｄＢになる。
【００５２】
なお、図示の状態ではパート設定ウインドウ５０上に表示されていないが、バッファＷＢ７に対するセンドレベル３Ｓを設定するエディットボックスが各パートに設けられている。このエディットボックスは、パート設定ウインドウ５０の横スクロールバー５９を操作することによって画面上に表示させることができる。なお、バッファＷＢ８，９に対しては、送出レベルによるレベル制御は行われない。また、以上に示したＰＡＮレベル、各センドレベルの値はあくまでも例であり、ユーザにより適宜設定されるものである。
【００５３】
４．２．３．エフェクト設定
上述した音源モジュール登録ウインドウ４０およびパート設定ウインドウ５０は音源モジュールの設定のためのウインドウであるが、ユーザが所定の操作を行うと、エフェクトモジュールの設定用に、これらと同様のウインドウが表示される。すなわち、音源モジュール登録ウインドウ４０と同様のエフェクトモジュール登録ウインドウ画面によってユーザはエフェクトモジュールを追加、削除することができ、登録されたエフェクトモジュールのモジュール名と数が図１３(b)のＥＦＭ登録データに記憶される。また、パート設定ウインドウ５０と同様のシステムエフェクト設定ウインドウ画面によって、３ブロック分のエフェクトデータ、すなわち、各ブロックのモジュール番号ＥＭＮｎ、パラメータ番号ＥＰＮｎ、センドレベルＥＤＳｎ〜Ｅ３Ｓｎ等が設定され、図１３(e)の各ブロックに対応する記憶領域に記憶される。同様に、インサーションエフェクト設定ウインドウにより、２つの各インサーションエフェクトのモジュール番号ＥＭＮ、パート番号、パラメータ番号等が設定され、図１３(d)のインサーションデータとして記憶される。さらに、システム設定ウインドウにより、図１３(c)のシステムサンプリング周波数ＳＦｓ、出力サンプリング周波数ＯＦｓ、ＣＰＵ負荷上限ＭＡＸが設定される。なお、システムエフェクトの各ブロックのエフェクトデータには、パートのデータにあったようなＰＡＮレベルは存在しない。各ブロックで設定されたセンドレベルＥＤＳｎはそのままバッファＷＢ１，２に対する共通の送出レベルになり、同様にＥ１ＳｎはバッファＷＢ３，４、Ｅ２ＳｎはバッファＷＢ５，６、Ｅ３ＳｎはバッファＷＢ７向けの送出レベルになる。
【００５４】
４．２．４．楽音合成系統
ここで、理解を容易にするため、パート設定ウインドウ５０において設定される楽音合成系統の一例を図６および図７に示す。これらの図において実線の矢印は、「０」以外のセンドレベルが設定されていることを示す。例えば、図６においてパート１からバッファＷＢ１，２，５〜７に対して実線の矢印が表示されているが、これはバッファＷＢ１，２，５〜７に対するセンドレベルＤＳ１、１Ｓ１、２Ｓ１が「０」以外の値であって、バッファＷＢ３，４に対するセンドレベル１Ｓ１が「０」であることを示す。ここで、パート１の下に記載されているＴＭＮ１は、パート１に示された音源モジュールのモジュール番号ＴＭＮ１（図１３(d)を参照）を示している。
【００５５】
また、パート２からインサーションエフェクトＩＥＦ１に向かう実線の矢印が表示されているが、これはインサーションエフェクトＩＥＦ１を付与するパートのパート番号として「２」が設定されていることを示している。すなわち、パート２の演奏に応じて生成された楽音信号は、バッファＷＢ８を介してインサーションエフェクトＩＥＦ１に供給される。
【００５６】
インサーションエフェクトの出力は、そのインサーションエフェクトを付与するパートに設定されたＰＡＮレベル、センドレベルによるレベル制御が行われ、対応するバッファに供給される。図６において、インサーションエフェクトＩＥＦ１からバッファＷＢ１〜４に向かって実線の矢印が表示されていることは、インサーションエフェクトＩＥＦ１を付与するパート２に設定されたセンドレベルのうちＤＳ２、１Ｓ２が「０」以外の値であり、それ以外のセンドレベル２Ｓ２、３Ｓ２が「０」であることを示す。なお、「インサーションエフェクト」とは、一般的には「パートに対して挿入されるエフェクト」の意味で用いられる。なお、インサーションエフェクトＩＥＦ１の下に記載されているＩＥＭＮ１は、ＩＥＦ１に設定されたエフェクトモジュールのモジュール番号ＩＥＭＮ１（図１３(d)参照）を示している。パート３〜１６についても同様であり、各パートについて「０」以外の値が設定されたセンドレベルに対応する結線が有効になっている。
【００５７】
先述したように、ＷＢ１，２はステレオ出力用バッファ、ＷＢ３，４はステレオ入力用バッファ、ＷＢ５，６は第２ブロックＥＦ２のステレオ入力用バッファ、ＷＢ７は第３ブロックＥＦ３のモノラル入力用バッファである。これは、図７において、例えばバッファＷＢ３，４からエフェクトブロックＥＦ１に向かう実線の矢印に対応する。第１ブロックＥＦ１の下に記載されているＥＭＮ１は、第１ブロックＥＦ１に設定されたエフェクトモジュールのモジュール番号ＥＭＮ１（図１３(e)参照）を示している。そして、エフェクトブロックＥＦ１からバッファＷＢ１，２，５，６に向かって実線の矢印が表示されていることは、ＥＦ１のセンドレベルＥＤＳ１、Ｅ２Ｓ１に「０」以外の値が設定され、センドレベルＥ３Ｓ１に「０」が設定されていることを示す。エフェクトブロックＥＦ２，３についても同様であり、各ブロックについて「０」以外の値が設定されたセンドレベルに対応する結線が有効になる。
【００５８】
以上のように、各パートからバッファＷＢ１〜７に対するセンドレベル、インサーションエフェクトを付与するパートのパート番号、各エフェクトブロックからバッファＷＢ１〜７に対するセンドレベルを適宜設定することにより、例えば図６、図７に示すような様々な楽音合成系統が実現されることが解る。
【００５９】
ところで、上述したＥ順番データは、効果部の楽音合成系統に基づいて自動的に決定される。図示の例においては、エフェクトブロックＥＦ１はバッファＷＢ５，６に対して「０」以外のセンドレベルＥ２Ｓ１を有しており、その出力はバッファＷＢ５，６を介してエフェクトブロックＥＦ２に供給される。
【００６０】
ここで、エフェクトブロックＥＦ２の処理をエフェクトブロックＥＦ１よりも先に実行すると、エフェクトブロックＥＦ１の処理結果がエフェクトブロックＥＦ２の処理結果に反映されないことになる。従って、エフェクトブロックＥＦ１の処理は、必ずエフェクトブロックＥＦ２よりも先に実行しなければならないことが解る。
【００６１】
同様に、エフェクトブロックＥＦ２はバッファＷＢ７に対して「０」以外のセンドレベルＥ３Ｓ２を有しており、エフェクトブロックＥＦ３はバッファＷＢ７を入力バッファとして選択している。従って、エフェクトブロックＥＦ２の処理は、エフェクトブロックＥＦ３よりも先に実行する必要がある。このように、図７に示す例にあっては、Ｅ順番データは「(1)ＥＦ１，(2)ＥＦ２，(3)ＥＦ３」の順序になる。他の様々な接続例においても、以上のようにセンドレベルに基づいた解析が行われ、Ｅ順番データが自動的に決定される。そして、決定されたＥ順番データは、図１３(e)のＥ順番データ記憶領域に記憶される。
【００６２】
４．３．トリガメッセージの入力
オペレーティングシステム２から供給されるトリガメッセージは、原則として所定時間（例えば数ｍｓｅｃ）毎に発生する。また、統合ドライバ３、音源モジュール５，６，……およびエフェクトモジュール７，８，……は、原則として該所定時間毎の波形データを生成して出力する。これにより、時間の経過とともに、各ドライバにおいて一連の波形データが生成されることになる。
【００６３】
しかし、トリガメッセージの発生間隔は必ずしも正確なものではなく、オペレーティングシステムや他のアプリケーションプログラムの都合によって遅れたり欠落することがある。かかる場合は、各モジュールにおいて、トリガメッセージの遅れや欠落を補償するために、上記所定時間以上に渡る波形データを生成する必要がある。その処理を、以下具体的に説明する。
【００６４】
オペレーティングシステム２からトリガメッセージが入力された場合、図５において処理はステップＳＰ１０７に進み、図１０に示すトリガ発生イベント処理ルーチンが起動される。図において処理がステップＳＰ１１に進むと、波形生成の遅れに応じて、今回の生成サンプル数が決定される。
【００６５】
次に、処理がステップＳＰ１２に進むと、バッファＷＢ１〜９において、該サンプル数の領域が準備される。ここで、バッファＷＢ１〜９とは、各々ＲＡＭ２３内に予め確保された所定長（例えば１０２４ワード×９）のバッファ領域であり、トリガメッセージの発生タイミングが正常であった場合には、ステップＳＰ１２においてその一部（例えば１２８ワード×９）づつ領域が確保される。
【００６６】
なお、トリガメッセージの遅れや欠落が生じた場合には、確保される領域が変更されることは言うまでもない。バッファＷＢ１〜９の長さ（１０２４ワード）を本実施形態では「１フレーム」と呼ぶ。これは、波形データの出力を行う場合の単位になる量でもある。
【００６７】
次に、処理がステップＳＰ１３に進むと、Ｔ順番データの先頭の音源モジュールに対して、波形バッファＷＢ１〜９と生成サンプル数と波形生成トリガが送出される。この波形生成トリガは、波形データの合成の開始を指示するものであり、各バッファＷＢ１〜９において生成すべき波形データのサンプル数（以下、生成サンプル数という）を含むものである。以上の処理が終了すると、処理は統合ドライバ・メインルーチン（図５）に戻るが、送出された波形生成トリガに基づいて、先頭の音源モジュールのプロセスで図１６に示す波形生成トリガ・イベント処理ルーチンが起動される。なお、その詳細については後述する。
【００６８】
４．４．MIDI＿Outメッセージの入力
音楽ソフト１からMIDI＿Outメッセージが入力された場合は、統合ドライバ・メインルーチン（図５）において処理はステップＳＰ１０６に進み、図１１に示すＭＩＤＩ受信イベント処理ルーチンが起動される。図において処理がステップＳＰ１４に進むと、変数ＥＤに該MIDI＿Outメッセージに係るイベントの内容が格納される。また、該MIDI＿Outメッセージの受信時刻が変数ＥＴに記憶される。
【００６９】
次に、処理がステップＳＰ１５に進むと、該MIDI＿Outメッセージにおいてモジュール切換が指定されたか否かが判定される。ここで、音源モジュールの切換は一般的にはＭＩＤＩのプログラムチェンジ及び／またはコントロールチェンジによって指示され、エフェクトモジュールの切換はパラメータチェンジによって指示されるが、一の音源モジュールあるいはエフェクトモジュールが複数の音色または効果をサポートしており、かつ、その範囲内での音色または効果を切換える場合には、モジュール切換は発生しない。
【００７０】
ステップＳＰ１５において「ＹＥＳ」と判定されると、処理はステップＳＰ１８に進み、指定されたパートの音源モジュールが新たな音源モジュールに変更され、あるいは指定されたエフェクトが設定される。但し、指定された音源モジュールあるいはエフェクトモジュールが登録された範囲のモジュールに含まれない場合は、代替モジュールが設定される。
【００７１】
一方、ステップＳＰ１５において「ＮＯ」と判定されると、処理はステップＳＰ１６に進む。ここでは、MIDI＿Outメッセージの内容に応じて、該メッセージの送り先モジュールが決定される。例えば、ノートオン、ノートオフ等のメッセージであれば、該メッセージは何れかのパートに対応するから、該パートの生成に用いられている音源モジュールが送り先として決定される。また、エフェクト量の変更等のイベントであれば、対応するエフェクトモジュールが送り先として決定される。
【００７２】
次に、処理がステップＳＰ１７に進むと、送り先モジュールのＭバッファにイベント内容ＥＤおよび受信時刻ＥＴが書込まれる。以上の処理が終了すると、処理は統合ドライバ・メインルーチン（図５）に戻るが、Ｍバッファに対する書込みに基づいて、別プロセスで図１５に示すＭＩＤＩイベント処理ルーチンが起動される。なお、その詳細については後述する。
【００７３】
４．５．波形データの受取
音源モジュール５，６，……またはエフェクトモジュール７，８，……の何れか一つにおいて波形データの生成処理ないしエフェクト処理が完了する毎に、統合ドライバ・メインルーチン（図５）のステップＳＰ１０３においてその旨が検出される。その際、各モジュールからは波形バッファＷＢ１〜９が戻されるが、そこには当該モジュールでの処理が終了した波形データが記憶されている。これにより、処理はステップＳＰ１０８に進み、図１２に示す波形受取イベント処理ルーチンが起動される。図において処理がステップＳＰ２１に進むと、最後に実行された音源モジュールに対応するインサーションエフェクトの処理が済んでいるか否かが判定される。
【００７４】
これは、例えば図６におけるパート２とインサーションエフェクトＩＥＦ１との関係が存在し、パート２に設定された音源モジュールＴＭＮ２における波形データの生成が完了した直後に発生する。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ２５に進み、モジュール番号ＩＥＭＮ１で指定されたエフェクトモジュールＥＦＭに対して、波形バッファＷＢ１〜９と生成サンプル数とインサーション演算トリガとが送出され、当該エフェクトモジュールＥＦＭのプロセスで演算トリガ・イベント処理ルーチン（図１７）が起動される。
【００７５】
一方、ステップＳＰ２１において「ＮＯ」と判定されると処理はステップＳＰ２２に進み、音源モジュールのうちで今回のトリガメッセージに対応する波形データを生成していないものが存在するか否かが判定される。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ２６に進み、Ｔ順番データに従って、次に優先順位の高い音源モジュールに波形バッファＷＢ１〜９と生成サンプル数と波形生成トリガとが送出され、当該音源モジュールＴＧＭのプロセスで波形生成トリガ・イベント処理ルーチン（図１６）が起動される。そして、ステップＳＰ２５または２６の何れかの処理が実行されると、処理は統合ドライバ・メインルーチン（図５）に戻る。
【００７６】
以上の処理に鑑みれば、図６、図７に示すような楽音合成系統に対して、音源モジュールおよびインサーションエフェクトに係る部分（図６）の波形演算が先に実行され、しかる後にシステムエフェクトモジュールの処理が行われることになる。これは、音源モジュールおよびインサーションエフェクトで生成される波形データが特定できなければシステムエフェクトを施すことができないから、当然のことである。
【００７７】
しかし、楽音合成系統をＣＰＵ２１で行うにあたって問題が生ずる場合がある。すなわち、ＣＰＵ２１によって音源モジュールを動作させた後、システムエフェクトを動作させるだけの処理能力の余裕が無ければ、何れかのシステムエフェクトの処理を省略せざるを得ない。これは、聴感上できわめて影響の大きい不具合になる。
【００７８】
そこで、本実施形態においては、ＣＰＵ２１の処理能力が不足する場合は、音源モジュールの一部を犠牲にすることにより、システムエフェクトに影響が及ばないようにしている。すなわち、ステップＳＰ２６においてＴ順番データの最後の音源モジュールに対して波形生成トリガを送出する場合には、これに先立ってＣＰＵ負荷の残量が計算される。
【００７９】
そして、ＣＰＵ負荷の不足することが判明した場合は、以下の何れかの措置によって、該音源モジュールに係るＣＰＵ負荷が軽減される。
(１)最後の音源モジュールの発音数を減少させる。
(２)最後の音源モジュールの局所サンプリング周波数ＴＦｓが可変である場合は、局所サンプリング周波数ＴＦｓを下げる。
(３)最後の音源モジュールの処理内容（楽音生成アルゴリズム）を簡単なものに変更する。
以上の何れの措置が採られた場合であっても、楽音に対する悪影響は避けられないことは勿論である。しかし、システムエフェクトが突然途切れるような不具合と比較すれば、容認できる場合が多い。先述したＴ順番データの決定過程で、演算内容の変更可能な音源モジュール、パート数の多いモジュールが後ろの順番になるように制御されているのは、それらの音源モジュールがＣＰＵ負荷の調整を行うのに適したモジュールだからである。
【００８０】
以上のように、最後の音源モジュールに対して波形生成トリガを送出すると、やがて波形データが生成され、波形データの受取イベントが発生する。かかる場合、処理はステップＳＰ２１および２２を介してステップＳＰ２３に進む。ここでは、処理されていないエフェクトモジュールが残っているか否かが判定される。なお、エフェクトモジュールの実行すべきエフェクト処理のうちインサーションエフェクトの処理は、ステップＳＰ２３が実行される前に全て処理が完了している（ステップＳＰ２１，２５）。
【００８１】
ここで「ＹＥＳ」と判定されると、処理はステップＳＰ２７に進み、Ｅ順番データに従って次のエフェクトブロックＥＦｎに設定されているエフェクトモジュールに対して波形バッファＷＢ１〜９と生成サンプル数と演算トリガが送出され、当該エフェクトモジュールのプロセスで演算トリガ・イベント処理ルーチン（図１８）が起動される。該エフェクトモジュールにおける波形データのエフェクト処理が完了して再び波形受取イベント処理ルーチン（図１２）が呼び出される。そして、全てのエフェクトモジュールの処理が完了するまで、ステップＳＰ２７が繰り返し実行されることになる。
【００８２】
最後のエフェクトモジュールにおける波形データのエフェクト処理が終了した後、再び本ルーチンが呼び出されると、ステップＳＰ２３において「ＮＯ」と判定され、処理はステップＳＰ２４に進む。なお、このステップＳＰ２４に進行した時点で、トリガメッセージに応答した波形データの生成処理は全て完了している。ここでは、「１」フレーム分の波形データの生成が完了したか否かが判定される。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ２８に進み、バッファＷＢ１，２に記憶された完成した１フレーム分の波形データのコーデックドライバ９に対する再生予約が行われる。なお、システムサンプリング周波数ＳＦｓと出力サンプリング周波数ＯＦｓ（コーデックのサンプリング周波数に等しい）が異なる場合には、このステップＳＰ２８でサンプリング周波数の変換処理（Ｆｓ変換ブロック３ｅに対応する）も行われる。
【００８３】
次に、処理がステップＳＰ２９に進むと、新たなバッファＷＢ１〜９がＲＡＭ２３上に確保され、その内容がゼロクリアされる。これは、前回使用されたバッファＷＢ１，２の内容はまだ出力されておらず内容を破壊することができないため、新たなバッファＷＢ１〜９を確保したものである。
【００８４】
４．６．各モジュールのメインルーチン
次に、音源モジュール５，６，……およびエフェクトモジュール７，８，……における詳細動作を説明する。まず、これらのモジュールにおいては、登録済みのモジュールについては統合ドライバ３の起動時に、図８のような登録ウインドウで新たに登録されたモジュールについてはその登録時に、各々別プロセスで図１４に示すモジュールメインルーチンが起動される。
【００８５】
図において処理がステップＳＰ３１に進むと、所定の初期設定が行われる。ここで、局所サンプリング周波数ＴＦｓが選択可能なモジュールにおいては、システムサンプリング周波数ＳＦｓに応じて最適な局所サンプリング周波数ＴＦｓが選択される。
【００８６】
すなわち、システムサンプリング周波数ＳＦｓと局所サンプリング周波数ＴＦｓとを一致させることができれば、サンプリング周波数の変換処理が不要になるため、一致する周波数が最優先で選択される。例えば、局所サンプリング周波数ＴＦｓとして４４kＨzと２２kＨzの何れかが選択可能であってシステムサンプリング周波数ＳＦｓが２２kＨzであった場合には、４４kＨzで波形データを生成する利点は得られないから、局所サンプリング周波数ＴＦｓは２２kＨzに設定される。
【００８７】
なお、システムサンプリング周波数ＳＦｓに一致する局所サンプリング周波数ＴＦｓが存在しない場合には、システムサンプリング周波数ＳＦｓに最も近い周波数が選択される。さらに、「最も近い周波数」が２つ存在する場合には、低い方の周波数が選択される。
【００８８】
次に、処理がステップＳＰ３２に進むと、起動要因が発生したか否かが判定される。ここで、「起動要因」とは、
(１)ＭＩＤＩイベントの発生（ＳＰ１７によるＭバッファに対するイベント内容ＥＤおよび受信時刻ＥＴの書込み）
(２)各種のトリガの受信（ＳＰ１３，ＳＰ２５等による）
(３)オペレーティングシステム２の終了メッセージの入力、ないし、図８のような登録ウインドウにおける当該モジュールの登録／削除、および
(４)その他各種のメッセージの入力
を意味する。
【００８９】
ステップＳＰ３２，ＳＰ３３においては、これら何れかの起動要因が発生するまで処理が待機する。そして、何れかの起動要因が発生すると、処理はステップＳＰ３４に進み、該起動要因に応じた処理が行われる。ここで、終了メッセージの入力が発生した場合は処理はステップＳＰ３８に進み、モジュールメインルーチンの終了処理が行われる。それ以外の場合は、各々起動要因に対応した処理が行われた後、処理はステップＳＰ３２に戻る。以下、起動要因に応じた処理の内容を場合を分けて説明する。
【００９０】
４．７．ＭＩＤＩイベント処理ルーチン
ステップＳＰ３２において、Ｍバッファに対するＭＩＤＩイベントの書込みが検出されると、モジュールメインルーチンにおいて処理はステップＳＰ３５に進み、例えば図１５に示す音源モジュールのＭＩＤＩイベント処理ルーチンが呼び出される。
【００９１】
図において処理がステップＳＰ４１に進むと、Ｍバッファからイベント内容ＥＤおよび受信時刻ＥＴが読み出される。なお、これらのデータは、先にＭＩＤＩ受信イベント処理ルーチン（図１１）のステップＳＰ１７においてＭバッファに書込まれたものである。次に、処理がステップＳＰ４２に進むと、イベント内容ＥＤがパラメータデータＰＤに変換される。
【００９２】
例えば、イベント内容ＥＤがノートオンである場合は、パートと音高とベロシティとが指定されることになる。ここで、音源モジュールがＦＭ音源であれば、当該パートで選択された音色に基づいて該音高とベロシティとが個々のオペレータの周波数、位相、レベル等ＦＭ音源固有のパラメータを含むパラメータデータＰＤに変換されるとともに、その発音を行う発音チャンネルが決定される。
【００９３】
次に、処理がステップＳＰ４３に進むと、該モジュールに対して確保されたＰバッファ（パラメータバッファ）の当該パートに対応した記憶領域にパラメータデータＰＤと発音チャンネルと受信時刻ＥＴとが書込まれ、処理はモジュールメインルーチン（図１４）に戻る。
【００９４】
４．８．波形生成トリガ・イベント処理ルーチン（図１６）
モジュールメインルーチンのステップＳＰ３２において波形生成トリガの受信が検出されると、処理はステップＳＰ３６に進み、図１６に示す音源モジュールの波形生成トリガ・イベント処理ルーチンが呼び出される。
【００９５】
なお、この波形生成トリガは、トリガ発生イベント処理ルーチン（図１０）のステップＳＰ１３、波形受取イベント処理ルーチン（図１２）のステップＳＰ２６において発生したものである。図１６において処理がステップＳＰ５１に進むと、バッファＷＢ１〜９の書込みアドレスのポインタと、生成サンプル数が受け取られる。
【００９６】
ここで、生成サンプル数はシステムサンプリング周波数ＳＦｓにおけるサンプル数を示す値であるから、必ずしも該音源モジュールにおける生成サンプル数に一致するわけではない。そこで、次に、処理がステップＳＰ５２に進むと、システムサンプリング周波数ＳＦｓと局所サンプリング周波数ＴＦｓとの比に基づいて、この生成サンプル数が局所サンプリング周波数ＴＦｓにおけるサンプル数に変換される。
【００９７】
詳細は後述するが、波形生成トリガ・イベント処理ルーチンが過去に実行された場合、既に一部のサンプルが生成されている場合がある。かかる場合は、既に生成された部分が今回出力される波形データに繰り越されることになる。従って、局所サンプリング周波数ＴＦｓにおけるサンプル数から生成済みのサンプル数を減算した値が所要サンプル数になる。
【００９８】
次に、処理がステップＳＰ５３に進むと、ＰバッファのパラメータデータＰＤに基づいて、音源モジュール内のレジスタの内容を更新しつつ、複数チャンネル分の波形データが生成され、モジュール専用波形バッファＭＷＢ上で累算される。ここで、モジュール専用波形バッファＭＷＢとは、バッファＷＢ１〜９とは別に各モジュール毎に、さらに、その音源モジュールが複数パートの波形データを生成する場合には、各パート毎に独立して確保される。ステップＳＰ５３においては、所要のサンプル数以上のサンプル数であってモジュールの処理に都合の良いサンプル数の波形データが生成される。
【００９９】
例えば、ＣＰＵ２１がキャッシュ機能、並列処理機能を有しており、この機能の都合により例えば「１６サンプル」の波形データを効率よく生成できるのであれば、生成するサンプル数を「１６」の倍数に設定すると、ＣＰＵ２１の処理能力を最も有効に使用することができる。例えば、ステップＳＰ５２で得られた所要サンプル数が「１３０」であった場合は、「１３０」以上の「１６」の倍数のうち最小値である「１４４」サンプルが生成されることになる。
【０１００】
また、生成するサンプル数はハードウエアにおける事情のみならず、ソフトウエア上の事情に基づく場合もある。例えば、楽音信号のエンベロープ波形を１サンプル毎に更新するのではなく、例えば「１６」サンプルに１回更新することによって処理負担を軽減する技術が知られている。かかる場合も、生成するサンプル数を「１６」の倍数に設定すると好適である。
【０１０１】
次に、処理がステップＳＰ５４に進むと、モジュール専用波形バッファＭＷＢから所要サンプル数（上記例では「１３０」）の波形データが取り出され、該波形データのサンプリング周波数ＴＦｓがシステムサンプリング周波数ＳＦｓに変換される。なお、前記周波数ＴＦｓが前記周波数ＳＦｓに等しい場合には、該サンプリング周波数の変換は不要であるので、ステップＳＰ５４での処理は省略される。次に、処理がステップＳＰ５５に進むと、モジュール専用波形バッファＭＷＢに記憶された第１パートの波形データの出力の準備が行われる。ここで、「第１パート」とは「当該音源モジュールにおいて生成する複数のパートのうちの第１パート」の意味であり、必ずしも「ＭＩＤＩのパート１」と一致するわけではない。
【０１０２】
次に、処理がステップＳＰ５６に進むと、該パートに対してインサーションエフェクトが設定されているか否かが判定される。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ５８に進み、モジュール専用波形バッファＭＷＢ内の該パートの波形データがバッファＷＢ８または９に書込まれる。さらに、これに付随して、該パートのセンドレベルおよびＰＡＮレベルも書込まれる。
【０１０３】
次に、処理がステップＳＰ５９に進むと、該音源モジュールにおいて波形データを生成するパートが残っているか否かが判定される。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ６０に進み、モジュール専用波形バッファＭＷＢに記憶された次のパートの波形データが準備され、処理はステップＳＰ５６に戻る。この新たなパートにおいてインサーションエフェクトが設定されていない場合は処理はステップＳＰ５７に進む。ここでは、該パートに設定されたセンドレベル及びＰＡＮレベルに応じた送出レベルがバッファＷＢ１〜７の波形データに各々乗算され、各乗算結果がバッファＷＢ１〜７の元々の値に加算される。
【０１０４】
以下同様に、該音源モジュールで波形データを生成する全てのパートに対してステップＳＰ５７またはＳＰ５８が実行され、処理はステップＳＰ６１に進む。ここでは、バッファＷＢ１〜９に対する更新を完了した旨が統合ドライバ・メインルーチン（図５）に通知される。これにより、統合ドライバ・メインルーチンにおいては、上述したように波形受取処理（ＳＰ１０８）が実行され波形受取イベント処理ルーチン（図１２）が呼び出されることになる。
【０１０５】
４．９．演算トリガ・イベント処理ルーチン（図１７）
モジュールメインルーチンのステップＳＰ３２においてインサーションエフェクトに対する演算トリガの受信が検出されると、処理はステップＳＰ３６に進み、図１７に示すエフェクトモジュールの波形生成トリガ・イベント処理ルーチンが呼び出される。この演算トリガは、波形受取イベント処理ルーチン（図１２）のステップＳＰ２５においてインサーションエフェクトに対して発生したものである。
【０１０６】
なお、ステップＳＰ２７でシステムエフェクトのトリガが発生した場合には、後述する図１８のルーチンが呼び出される。さて、図１７において処理がステップＳＰ７１に進むと、バッファＷＢ１〜９の書込みアドレスのポインタと、生成サンプル数が受け取られる。
【０１０７】
次に、処理がステップＳＰ７２に進むと、Ｐバッファのパラメータレジスタの値に基づいて、エフェクトモジュール内のレジスタの内容を更新しつつ、入力バッファ（インサーションエフェクトＩＥＦ１ならＷＢ８、ＩＥＦ２ならＷＢ９）内の波形データに対して、コーラス、リバーブ等のインサーションエフェクト処理が施され、エフェクトの付与された波形データが当該モジュール専用の波形バッファＭＷＢに収納される。
【０１０８】
次に、処理がステップＳＰ７３に進むと、インサーションエフェクトが施されるパートに対してさらにインサーションエフェクトが指定されているか否かが判定される。これは、１つのパートに対して複数のインサーションエフェクトを指定できることによるものである。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ７５に進み、次のインサーションエフェクトの入力バッファに対してエフェクト処理を施した波形データが書込まれる。
【０１０９】
なお、入力バッファであるバッファＷＢ８または９には、元々の波形データを生成した音源モジュールの処理においてインサーションエフェクトの付与されるパートに設定されたセンドレベルおよびＰＡＮレベルも付与されている（図１６のステップＳＰ５８参照）。このセンドレベルおよびＰＡＮレベルは、エフェクト処理を施した波形データとともに、再びバッファＷＢ８または９に書込まれる。
【０１１０】
次に、処理がステップＳＰ７６に進むと、入力バッファの更新を完了した旨が統合ドライバ・メインルーチン（図５）に通知される。これにより、統合ドライバ・メインルーチンにおいては、上述したように波形受取処理（ＳＰ１０８）が実行され波形受取イベント処理ルーチン（図１２）が呼び出される。
【０１１１】
そして、上記例にあっては、最後に波形生成されたパートについてさらにインサーションエフェクトが残っているから、ステップＳＰ２１において「ＹＥＳ」と判定され、ステップＳＰ２５を介して再びインサーションエフェクトに係る演算トリガが送出される。
【０１１２】
この結果、次のインサーションエフェクトに係る演算トリガ・イベント処理ルーチン（図１７）が呼び出され、ステップＳＰ７１，７２を介して上述したようにエフェクト処理を施した波形データが生成される。このインサーションエフェクトに対してさらに続くインサーションエフェクトが無ければ、ステップＳＰ７３において「ＮＯ」と判定され、処理はステップＳＰ７４に進む。
【０１１３】
ここでは、各バッファＷＢ１〜７に対するセンドレベルおよびＰＡＮレベル（入力バッファに添付されていた値）に応じた送出レベルが波形バッファＭＷＢの波形データに各々乗算され、各乗算結果がバッファＷＢ１〜７の元々の値に加算される。そして、処理がステップＳＰ７６に進むと、バッファＷＢ１〜９に対する更新を完了した旨が統合ドライバ・メインルーチン（図５）に通知され、本ルーチンの処理は終了する。
【０１１４】
４．１０．演算トリガ・イベント処理ルーチン（図１８）
モジュールメインルーチンのステップＳＰ３２においてシステムエフェクトに対する演算トリガ（ステップＳＰ２６参照）の受信が検出されると、処理はステップＳＰ３６に進み、図１８に示すエフェクトモジュールの演算トリガ・イベント処理ルーチンが呼び出される。
【０１１５】
本ルーチンの処理は演算トリガ・イベント処理ルーチン（図１７）と同様であるが、ステップＳＰ７３，７５に対応する処理は行われない。これは、システムエフェクトは必ずバッファＷＢ１〜７を介して波形データの受け渡しを行うことによる。また、ステップＳＰ８２における入力バッファは、バッファＷＢ１〜７の何れかになる。すなわち、当該エフェクトモジュールが第１ブロックＥＦ１に設定されたモジュールである場合にはバッファＷＢ３，４を入力バッファとし、第２ブロックＥＦ２の場合はバッファＷＢ５，６を、第３ブロックＥＦ３の場合はバッファＷＢ７をそれぞれ入力バッファとする。各入力バッファの波形データに対して、ＥＭＮｎで指定されるエフェクトモジュールの、ＥＰＮｎで指定されＰバッファの内容に応じて更新されたパラメータ値に基づくエフェクト処理が施され、エフェクトの付与された波形データが当該モジュール専用の波形バッファＭＷＢに収納される。続くステップＳＰ８３では、当該エフェクトブロックＥＦｎで設定されているセンドレベルに応じた送出レベルが波形バッファＭＷＢの波形データに各々乗算され、各乗算結果がバッファＷＢ１〜７の元々の値に加算される。そして、処理がステップＳＰ８４に進むと、バッファＷＢ１〜９に対する更新を終了した旨が統合ドライバ・メインルーチン（図５）に通知され、本ルーチンの処理は終了する。
【０１１６】
５．実施形態の効果
（１）以上のように本実施形態においては「システムサンプリング周波数ＳＦｓ」なる概念を用い、これを標準として複数の音源モジュールとの間で波形データの受け渡しができるため、全体的に処理が簡素化される。特に、欠く音源モジュールで生成すべきサンプル数をシステムサンプリング周波数ＳＦｓによって指定することができるから、制御をきわめてシンプルにすることができる。
【０１１７】
（２）本実施形態においては、局所サンプリング周波数ＴＦｓの選択が可能である場合は、システムサンプリング周波数ＳＦｓに応じて最適な局所サンプリング周波数ＴＦｓが選択される。これにより、ＣＰＵの処理能力を有効に活用することができ、最終出力の音質に寄与しない無駄な計算を防止することができる。
【０１１８】
（３）また、本実施形態においては、各音源モジュールおよびエフェクトモジュールがバッファＷＢ１〜９の波形データを読出し、新たに生成した波形データを加算することによって多段階の楽音合成を行うことができる。従って、パート数が増加した場合であってもバッファＷＢ１〜９の領域は増加させる必要がなく、きわめて拡張性に富む。さらに、各モジュール間でアドレスの受け渡しを行うことによって波形データそのものを転送するオーバーヘッドを削減することができる。
【０１１９】
（４）また、本実施形態においては、Ｔ順番データを設けることによって負荷調整が可能な音源モジュールの演算を後回しにすることができ、ＣＰＵ２１の処理能力に応じて負荷調整を行うことが可能である。
【０１２０】
６．変形例
本発明は上述した実施形態に限定されるものではなく、例えば以下のように種々の変形が可能である。
【０１２１】
（１）上記実施形態はパーソナルコンピュータ上で本発明を実施した例を説明したが、その他プロセッサとソフトウエアとによって制御される一般の電子楽器、ゲームマシン、カラオケ機器等、楽音パラメータ編集機能あるいは楽音発生機能を含む種々の機器に適用することが可能である。さらに、これらの機器にインストールされるプログラムを記憶した記録媒体として実現することも可能である。
【０１２２】
（２）上記実施形態においては、トリガメッセージがオペレーティングシステム２から所定時間毎に発生するようになっていたが、トリガメッセージをハードウエアのタイマ２４、波形インターフェース３０等で発生するようにしてもよい。一般にオペレーティングシステム２を介さない方がトリガメッセージの時間精度が向上する。また、発生の時間間隔も、例えば１フレームに相当する時間としても良い。
【０１２３】
（３）上記実施形態においては、バッファＷＢ１〜９のサイズを１０２４ワードとしたが、バッファのサイズはこれより大きくしても良いし小さくしてもよい。また、必要に応じて変更できるようにしてもよい。
【０１２４】
（４）上記実施形態においては、Ｔ順番データの最後の音源モジュールでＣＰＵ負荷の調整を行うようになっていたが、最後の２つないしそれ以上の音源モジュールで調整するようにしてもよい。
【０１２５】
（５）上記実施形態においては、音源モジュールないしエフェクトモジュールが登録されたときに対応するモジュールメインルーチンが起動され、登録削除された時に終了するようになっていたが、それを変更して、何れかのＭＩＤＩパートで当該モジュールが選択された時に起動され、何れのパートでも選択されなくなった時に終了されるようにしてもよい。
【図面の簡単な説明】
【０１２６】
【図１】本発明の一実施形態のソフトウエア構成のブロック図である。
【図２】本実施形態の動作説明図である。
【図３】本実施形態のハードウエア構成のブロック図である。
【図４】波形インターフェース３０の動作説明図である。
【図５】統合ドライバ・メインルーチンのフローチャートである。
【図６】本実施形態の動作説明図である。
【図７】本実施形態の動作説明図である。
【図８】表示器２８に表示される音源モジュール登録ウインドウ４０を示す図である。
【図９】表示器２８に表示されるパート設定ウインドウ５０を示す図である。
【図１０】トリガ発生イベント処理ルーチンのフローチャートである。
【図１１】ＭＩＤＩ受信イベント処理ルーチンのフローチャートである。
【図１２】波形受取イベント処理ルーチンのフローチャートである。
【図１３】本実施形態のデータ構成を示す図である。
【図１４】モジュールメインルーチンのフローチャートである。
【図１５】ＭＩＤＩイベント処理ルーチンのフローチャートである。
【図１６】波形生成トリガ・イベント処理ルーチンのフローチャートである。
【図１７】インサーションエフェクト用演算トリガ・イベント処理ルーチンのフローチャートである。
【図１８】システムエフェクト用演算トリガ・イベント処理ルーチンのフローチャートである。
【符号の説明】
【０１２７】
１…音楽ソフト、２…オペレーティングシステム、３…統合ドライバ、３ａ…ＭＩＤＩ分配ブロック、３ｂ，３ｅ，６ａ…Ｆｓ変換ブロック、３ｄ…トリガ発生＆バッファ管理ブロック、３ｅ…Ｆｓ変換ブロック、５，６…音源モジュール、７，８…エフェクトモジュール、９…コーデックドライバ、１１…コーデックブロック、２０…ＣＰＵバス、２１…ＣＰＵ、２２…ＲＯＭ、２３…ＲＡＭ、２４…タイマ、２５…ＭＩＤＩインターフェース、２６…ハードディスク、２７…リムーバブルディスク、２８…表示器、２９…キーボード＆マウス、３０…波形インターフェース、３１…ＡＤコンバータ、３２…第１ＤＭＡコントローラ、３３…サンプリングクロック発生器、３４…第２ＤＭＡコントローラ、３５…ＤＡコンバータ、４０…音源モジュール登録ウインドウ、４１…モジュール一覧リストボックス、４２…追加ボタン、４３…削除ボタン、４４…登録モジュールリストボックス、４５…ＯＫボタン、４６…キャンセルボタン、５０…パート設定ウインドウ、５１…パート番号表示欄、５２…音色名表示欄、５３…モジュール名表示欄、５３ａ…ボタン、５４…サンプリング周波数表示欄、５５…ＰＡＮレベル・エディットボックス、５６…ドライレベル・エディットボックス、５７…第１エフェクトレベル・エディットボックス、５８…第２エフェクトレベル・エディットボックス、５９…横スクロールバー。
【図１】
0004645597.tif 000002
【図２】
0004645597.tif 000003
【図３】
0004645597.tif 000004
【図４】
0004645597.tif 000005
【図５】
0004645597.tif 000006
【図６】
0004645597.tif 000007
【図７】
0004645597.tif 000008
【図８】
0004645597.tif 000009
【図９】
0004645597.tif 000010
【図１０】
0004645597.tif 000011
【図１１】
0004645597.tif 000012
【図１２】
0004645597.tif 000013
【図１３】
0004645597.tif 000014
【図１４】
0004645597.tif 000015
【図１５】
0004645597.tif 000016
【図１６】
0004645597.tif 000017
【図１７】
0004645597.tif 000018
【図１８】
0004645597.tif 000019