(57)【特許請求の範囲】
【請求項１】
オペレーティングシステムにインストールされた統合ソフトが、音楽ソフトから発生される演奏データを受けて、前記統合ソフトに登録された１ないし複数の音源ドライバ手段に振り分け、
前記１ないし複数の音源ドライバ手段は、それぞれ振り分けられた前記演奏データに応じた複数サンプルの楽音波形データを起動されるごとに生成して、生成した複数サンプルの楽音波形データを前記統合ソフトに送り、
前記統合ソフトは、前記１ないし複数の音源ドライバ手段から受け取った複数サンプルの楽音波形データを加算して、加算された複数サンプルの楽音波形データをウェーブドライバ手段に渡し、
該ウェーブドライバ手段において、前記加算された複数サンプルの楽音波形データが再生されて楽音が発生されるようにしたことを特徴とする複数音源ドライバの制御方法。
【請求項２】
前記統合ソフトは、前記各音源ドライバ手段から受け取った楽音波形データを、当該各音源ドライバ手段により前回生成された楽音波形データのバッファメモリ上の最終の位置に続く位置の複数サンプルの楽音波形データに足し込むことにより、前記加算を行うようにしたことを特徴とする請求項１記載の複数音源ドライバの制御方法。
【請求項３】
オペレーティングシステムにインストールされた統合ソフトに、基準サンプリング周波数の楽音波形データを生成する音源ドライバ手段と、基準サンプリング周波数とは異なるサンプリング周波数の楽音波形データを生成する音源ドライバ手段との１ないし複数の音源ドライバ手段が登録されており、
前記統合ソフトが、音楽ソフトから発生される演奏データを受けて、前記統合ソフトに登録された前記１ないし複数の音源ドライバ手段に振り分け、
前記１ないし複数の音源ドライバ手段は、それぞれ振り分けられた前記演奏データに応じた複数サンプルの楽音波形データを起動されるごとに生成して、生成した複数サンプルの楽音波形データを前記統合ソフトに送り、
前記統合ソフトは、受け取った複数サンプルの楽音波形データのサンプリング周波数が基準サンプリング周波数と異なっている場合は、該楽音波形データのサンプリング周波数を基準サンプリング周波数に変換し、受け取った残る基準サンプリング周波数の楽音波形データと加算して、加算された複数サンプルの楽音波形データをウェーブドライバ手段に渡し、
該ウェーブドライバ手段において、前記加算された複数サンプルの楽音波形データが基準サンプリング周波数で再生されて楽音が発生されるようにしたことを特徴とする複数音源ドライバの制御方法。
【請求項４】
オペレーティングシステムにインストールされた統合ソフトが、音楽ソフトから発生される演奏データを受けて、前記統合ソフトに登録された１ないし複数の音源ドライバ手段に振り分け、
前記統合ソフトは、タイマ割り込みに応じて登録された前記１ないし複数の音源ドライバ手段に対して、楽音波形データの生成開始のトリガを順次発生し、
前記１ないし複数の音源ドライバ手段は、それぞれ振り分けられた前記演奏データに応じた複数サンプルの楽音波形データを前記トリガに応じて生成して、生成した複数サンプルの楽音波形データを前記統合ソフトに送り、
前記統合ソフトは、前記１ないし複数の音源ドライバ手段から受け取った複数サンプルの楽音波形データを加算して、加算された複数サンプルの楽音波形データをウェーブドライバ手段に渡し、
該ウェーブドライバ手段において、前記加算された複数サンプルの楽音波形データが再生されて楽音が発生されるようにしたことを特徴とする複数音源ドライバの制御方法。
【請求項５】
オペレーティングシステムにインストールされた統合ソフトが、音楽ソフトから発生される演奏データを受けて、前記統合ソフトに登録された１ないし複数の音源ドライバ手段に振り分け、
前記１ないし複数の音源ドライバ手段は、それぞれ振り分けられた前記演奏データに応じた複数サンプルの楽音波形データを起動されるごとに生成して、生成した複数サンプルの楽音波形データを前記統合ソフトに送り、
前記統合ソフトは、前記１ないし複数の音源ドライバ手段から受け取った複数の楽音波形データのタイミングを揃えて加算して、加算された複数サンプルの楽音波形データをウェーブドライバ手段に渡し、
該ウェーブドライバ手段において、前記加算された複数サンプルの楽音波形データが再生されて楽音が発生されるようにしたことを特徴とする複数音源ドライバの制御方法。
【請求項６】
オペレーティングシステムにインストールされた統合ソフトが、音楽ソフトから発生される複数パートの演奏データを受けて、前記統合ソフトに登録された１ないし複数の音源ドライバ手段の内の前記パート毎に選択されている音源ドライバ手段にそれぞれ振り分け、
前記１ないし複数の音源ドライバ手段は、それぞれ振り分けられた前記演奏データに応じた複数サンプルの楽音波形データを起動されるごとに生成して、生成した複数サンプルの楽音波形データを前記統合ソフトに送り、
前記統合ソフトは、前記１ないし複数の音源ドライバ手段から受け取った複数の楽音波形データを加算して、加算された複数サンプルの楽音波形データをウェーブドライバ手段に渡し、
該ウェーブドライバ手段において、前記加算された複数サンプルの楽音波形データが再生されて楽音が発生されるようにしたことを特徴とする複数音源ドライバの制御方法。
【請求項７】
ユーザの操作に応じて登録される前記音源ドライバ手段を、前記統合ソフトに追加あるいは削除することができることを特徴とする請求項１ないし６のいずれかに記載の複数音源ドライバの制御方法。
【請求項８】
オペレーティングシステムにインストールされた統合ソフトが、音楽ソフトから発生される演奏データを受けて、前記統合ソフトに登録された１ないし複数の音源ドライバ手段に振り分け、
前記１ないし複数の音源ドライバ手段は、それぞれ振り分けられた前記演奏データに応じた楽音波形データを起動されるごとに生成して、生成した楽音波形データを前記統合ソフトに送り、
前記統合ソフトは、前記１ないし複数の音源ドライバ手段から受け取った楽音波形データを加算して、加算された楽音波形データをウェーブドライバ手段に渡し、
該ウェーブドライバ手段において、前記加算された楽音波形データが再生されて楽音が発生されるようになされており、
ユーザの操作に応じて登録される前記音源ドライバ手段を、前記統合ソフトに追加あるいは削除することができるようにしたことを特徴とする複数音源ドライバの制御方法。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
本発明は、複数の種類の異なる音源ドライバ手段を統合して制御することのできる複数音源ドライバの制御方法に関するものである。
【０００２】
【従来の技術】
近年のマイクロプロセッサ（ＣＰＵ）の演算能力は著しく向上しており、汎用コンピュータや専用の楽音発生装置に、このような高性能のＣＰＵが搭載されるようになされている。そこで、所定の楽音生成処理プログラムをこのような汎用コンピュータや専用の楽音発生装置に実行させることにより、楽音波形データを生成させるようにしたものが実現されている。
また、楽音生成方式に応じた回路構成とされている専用のハードウェアにより楽音波形データを生成させることも、従来から引き続いて行われている。
【０００３】
そこで、コンピュータソフトウェアを用いた従来の音源システムにおけるソフトウェア構造を図１３に示す。
この音源システムのオペレーテイングシステム（ＯＳ）１０１としては、たとえば、Ｗｉｎｄｏｗｓ９５（マイクロソフト社の商標）が使用される。このＯＳ１０１は、楽音波形データを生成する演奏情報であるＭＩＤＩメッセージを授受することのできるインターフェースＩＦ１（MIDI out API）、インターフェースＩＦ２（MIDI out API）を有していると共に、生成された楽音波形データを授受することのできるインターフェースＩＦ３（WAVE out API）を有している。
【０００４】
なお、図示する例においてはインターフェースＩＦ１（MIDI out API）は、所定の楽音生成処理プログラムをＣＰＵを備える処理装置に実行させることにより、楽音波形データを生成させるようにした、いわゆるソフトウェア音源（以下、「ソフト音源」という）のインターフェースとして使用されており、インターフェースＩＦ２（MIDI out API）は、楽音生成方式に応じた回路構成とされている専用のハードウェアにより楽音波形データを生成させるようにした、いわゆるハードウェア音源（以下、「ハード音源」という）のインターフェースとして使用されている。
【０００５】
ＭＩＤＩメッセージを発生する音楽ソフト１００は、アプリケーション階層に位置しており、演奏情報をＭＩＤＩメッセージのフォームでリアルタイムに発生する。また、ＭＩＤＩドライバ２（ハード音源）およびＭＩＤＩドライバ３（ソフト音源）はＯＳ１０１にインストールされたＭＩＤＩドライバであり、ＭＩＤＩドライバ２はハード音源用のＭＩＤＩドライバとされており、ＭＩＤＩメッセージに基づく楽音生成用データを外部のハード音源１０３に与えている。さらに、ＭＩＤＩドライバ３は、アプリケーションソフトであるソフト音源がＯＳ１０１にインストールされたものである。
【０００６】
そして、図１３に示す場合は、音楽ソフト１００により発生されたＭＩＤＩメッセージが、ＯＳ１０１に備えられたインターフェースＩＦ１（MIDI out API）を介してＭＩＤＩドライバ３により受け取られるようにされている。ＭＩＤＩメッセージを受け取ったＭＩＤＩドライバ３は、受け取ったＭＩＤＩメッセージに基づく楽音波形データの生成処理を実行し、生成された楽音波形データを、インターフェースＩＦ３（WAVE out API）を介してＯＳ１０１にインストールされているＷＡＶＥドライバ１に渡すようにする。ＷＡＶＥドライバ１は、バッファメモリに記憶された楽音波形データをダイレクトメモリアクセス（ＤＭＡ）コントローラを介して読み出して、外部のハードウェアであるコーデック（CODEC ）１０５に供給する。コーデック１０５において、楽音波形データはアナログ楽音信号に変換されて、図示しないサウンドシステムから放音される。
【０００７】
なお、ＭＩＤＩドライバ３においては、１フレーム周期内において１回以上の楽音波形データの生成演算が実行されて１フレーム分の楽音波形データが生成される。生成された楽音波形データはバッファメモリに記憶される。この場合、ＭＩＤＩドライバ３では生成演算の遅れ時間や単位時間あたりの楽音波形データ生成量を時間管理しながら、１フレーム分の楽音波形データの生成を実行している。また、ＭＩＤＩドライバ３が有するライブラリ３２には、楽音波形データの生成演算に使用することのできるディジタルフィルタや補間器、ミキサ等の汎用モジュール（サブルーチン）群が格納されており、この汎用モジュール群を利用して、所要のピッチや音色等の楽音的特徴を具備する楽音波形データを生成している。
【０００８】
【発明が解決しようとする課題】
上記図１３に示すコンピュータを用いた従来の音源システムにおいては、音楽ソフト１００より発生されたＭＩＤＩメッセージを、ＯＳ１０１に備えられたインターフェースＩＦ１（MIDI out API）を介してＭＩＤＩドライバ１が受け取るようにされている。また、あらかじめプログラムしておくことにより、音楽ソフト１００より発生されたＭＩＤＩメッセージを、ＯＳ１０１に備えられたインターフェースＩＦ２（MIDI out API）を介してＭＩＤＩドライバ２が受け取るようにすることもできる。この場合には、ＭＩＤＩドライバ２は、ＭＩＤＩメッセージに基づく楽音生成用データを外部のハード音源１０３に与えて、ハード音源１０３において生成された楽音波形が放音されるようになる。
【０００９】
しかしながら、従来の音源システムにおいては、演奏前に限って使用するＭＩＤＩドライバを設定することができるため、演奏中にダイナミックにＭＩＤＩドライバを切り替えることができないという問題点があった。したがって、例えば所定のパートにおいて、ある演奏部分だけを異なる音源を使用して楽音波形データを生成し、放音することはできない。
また、従来の音源システムでは、ＯＳに登録（インストール）されていないＭＩＤＩドライバを使用することはできない。使用する際には、ＭＩＤＩドライバをＯＳにインストールすることにより、使用可能となる。しかしながら、ＭＩＤＩドライバをＯＳにインストールした際には、システムを再起動しなければならず繁雑な作業が必要であった。
【００１０】
さらに、ソフト音源により楽音を発生する際には、ＷＡＶＥドライバが必要となるが、ソフト音源により構成されているＭＩＤＩドライバが複数使用されているときには、複数のＷＡＶＥドライバが必要となり、ＷＡＶＥドライバが不足するおそれがあった。この場合、新たなＷＡＶＥドライバを開くことができないという問題点もある。
さらにまた、ソフト音源により構成されているＭＩＤＩドライバが複数使用されている際に、楽音波形データの生成演算の遅れ時間や単位時間あたりの楽音波形データ生成量に応じた時間管理をすることについては考えられていなかった。
【００１１】
そこで、本発明は、ＯＳにＭＩＤＩドライバを登録することなく使用することが可能であると共に、演奏中にダイナミックにＭＩＤＩドライバを切り替えることが可能な複数音源ドライバの制御方法、および、複数のＭＩＤＩドライバが使用されていても必要とするＷＡＶＥドライバを一つとすることができると共に、各ＭＩＤＩドライバ毎に楽音波形データの時間管理を行う必要のない複数音源ドライバの制御方法を提供することを他の目的としている。
【００１２】
【課題を解決するための手段】
上記目的を達成するために、本発明の複数音源ドライバの制御方法は、統合ソフトに１ないし複数の音源ドライバ手段が登録されており、１ないし複数の音源ドライバ手段は、それぞれ振り分けられた演奏データに応じた複数サンプルの楽音波形データを起動されるごとに生成し、生成した複数サンプルの楽音波形データは統合ソフトで加算されてウェーブドライバ手段に渡されるようにしている。これにより、ＯＳにＭＩＤＩドライバを登録することなく使用すること、および、演奏中にダイナミックにＭＩＤＩドライバを切り替えることを可能とすることができる。さらに、複数のＭＩＤＩドライバが使用されていても必要とするＷＡＶＥドライバを一つとすることができるようになる。
【００１３】
また、上記複数音源ドライバの制御方法において、統合ソフトは、受け取った複数サンプルの楽音波形データのサンプリング周波数が基準サンプリング周波数と異なっている場合は、該楽音波形データのサンプリング周波数を基準サンプリング周波数に変換するようにすると、基準サンプリング周波数とは異なるサンプリング周波数で動作する音源ドライバ手段も利用することができるようになる。
さらに、上記複数音源ドライバの制御方法において、タイマ割り込みに応じて１ないし複数の音源ドライバ手段に対して、楽音波形データの生成開始のトリガを順次発生するようにすると、共通のタイマ割込みに応じて複数の音源ドライバ手段を制御することができるため、割込みを一本化することができ、時間管理に関してＣＰＵの負担を軽減することができる。
【００１４】
さらにまた、上記複数音源ドライバの制御方法において、統合ソフトは、１ないし複数の音源ドライバ手段から受け取った複数の楽音波形データのタイミングを揃えて加算するようにしてもよい。
さらにまた、上記複数音源ドライバの制御方法において、複数パートの演奏データを、
１ないし複数の音源ドライバ手段の内のパート毎に選択されている音源ドライバ手段に統合ソフトがそれぞれ振り分けることにより、複数パートの演奏データとされていても、各音源ドライバ手段は、統合ソフトを相手にして波形生成処理を行えばよい
さらにまた、上記複数音源ドライバの制御方法において、ユーザの操作に応じて登録される音源ドライバ手段を、統合ソフトに追加あるいは削除できるようにしてもよい。
【００１５】
【発明の実施の形態】
コンピュータソフトウェアを用いた本発明の複数音源ドライバの制御方法におけるソフトウェア構造を図１に示す。
このソフトウェア構造において、オペレーテイングシステム（ＯＳ）２としては、たとえば、Ｗｉｎｄｏｗｓ９５（マイクロソフト社の商標）が使用される。
図１におけるＯＳ２は、楽音波形データを生成する演奏情報であるＭＩＤＩ（musical instrument digital interface）メッセージを授受することのできるインターフェースＩＦ１（MIDI out API）、および、インターフェースＩＦ２（MIDI out API）とを有していると共に、生成された楽音波形データを授受することのできるインターフェースＩＦ３（WAVE out API）、および、インターフェースＩＦ４（WAVE out API）を有している。
【００１６】
また、ＭＩＤＩメッセージを発生する音楽ソフト１は、アプリケーション階層に位置しており、演奏情報をＭＩＤＩメッセージのフォームでリアルタイムに発生する。このＭＩＤＩメッセージは、ＯＳ２のマルチメディア関数の一つとして用意されたインターフェースＩＦ１（MIDI out API）を介して、本発明の特徴点である統合ドライバ３に受け取られる。この統合ドライバ３をＯＳ２にインストールすることにより、図１に示されるインターフェースＩＦ１，およびインターフェースＩＦ３の機能がＯＳ２に用意されるようになる。そして、統合ドライバ３により受け取られたＭＩＤＩメッセージは、パート毎に分配されて規格準拠のＭＩＤＩドライバ１（ハード音源），ＭＩＤＩドライバ２（ソフト音源），ＭＩＤＩドライバ３（ソフト音源）と、規格非準拠のＭＩＤＩドライバ４（ソフト音源）に与えられる。
【００１７】
この際に、ＭＩＤＩドライバ１〜３を統合ドライバ３に登録することにより、統合ドライバ３にはインターフェースＩＦ１０（MIDI out API），ＩＦ１１（MIDI out API），ＩＦ１２（MIDI out API）が備えられ、これらのインターフェースＩＦ１０（MIDI out API），ＩＦ１１（MIDI out API），ＩＦ１２（MIDI out API）を介して、規格準拠のＭＩＤＩドライバ１（ハード音源），ＭＩＤＩドライバ２（ソフト音源），ＭＩＤＩドライバ３（ソフト音源）に、分配されたＭＩＤＩメッセージが与えられる。また、規格非準拠のＭＩＤＩドライバ４（ソフト音源）には、同ドライバをＯＳ２にインストールすることにより用意されたインターフェースＩＦ２（MIDI out API）を介して分配されたＭＩＤＩメッセージが与えられる。
【００１８】
なお、規格非準拠のＭＩＤＩドライバ４（ソフト音源）はＯＳ２にインストールされることにより使用される。一方、規格準拠のＭＩＤＩドライバ１（ハード音源），ＭＩＤＩドライバ２（ソフト音源），ＭＩＤＩドライバ３（ソフト音源）は、ＯＳ２にインストールして使用することも可能であるし、ＯＳ２にインストールせずに統合ドライバ３に登録するだけでも使用可能である。規格準拠のＭＩＤＩドライバを統合ドライバ３に登録して使用する場合には、オペレーティングシステムを再起動することなく直ちに使用可能とすることができ、煩雑なインストール作業を不要とすることができる。
また、ＭＩＤＩドライバ１はハード音源用のＭＩＤＩドライバであり、インターフェースＩＦ１０を通じて供給されたＭＩＤＩメッセージに基づいてハード音源１０の楽音生成動作を制御している。さらに、ＭＩＤＩドライバ２（ソフト音源），ＭＩＤＩドライバ３（ソフト音源）は、ソフト音源により構成されたドライバとされている。
【００１９】
そして、統合ドライバ３からインターフェースＩＦ１１（MIDI out API），ＩＦ１２（MIDI out API）を介してＭＩＤＩメッセージは、ＭＩＤＩドライバ２（ソフト音源），ＭＩＤＩドライバ３（ソフト音源）に与えられ、ＭＩＤＩドライバ２（ソフト音源），ＭＩＤＩドライバ３（ソフト音源）は、統合ドライバ３に用意された統合ツールライブラリ４内のタイマ処理手段４−２から所定周期で発生されるトリガを受けて演算処理を実行する。そして、所定データ量の楽音波形データを生成している。ＭＩＤＩドライバ２（ソフト音源）により生成された楽音波形データは、そのままストリーム１を介して、統合ドライバ３に用意された統合ツールライブラリ４内のＷＡＶＥ処理手段４−１に送られる。また、ＭＩＤＩドライバ３（ソフト音源）により生成された楽音波形データは、そのままストリーム２を介して、統合ドライバ３に用意された統合ツールライブラリ４内のＷＡＶＥ処理手段４−１に送られる。
【００２０】
さらに、規格非準拠のＭＩＤＩドライバ４（ソフト音源）では、インターフェースＩＦ２を通じて与えられたＭＩＤＩメッセージを用いて、演算処理を行い、ＭＩＤＩドライバ４（ソフト音源）において生成された楽音波形データは、ＯＳ２に用意されたインターフェースＩＦ３（MIDI out API）を介して、統合ドライバ３に用意された統合ツールライブラリ４内のＷＡＶＥ処理手段４−１に送られる。
ＷＡＶＥ処理手段４−１においては、受け取った楽音波形データのサンプリング周波数Ｆｓを所定のサンプリング周波数に変換する処理と、楽音波形データを複数受け取った際には、時間合わせした楽音波形データ同士の加算を行う処理とが行われる。
なお、受け取った複数の楽音波形データの中に共通のサンプリング周波数Ｆｓのものがある場合には、先にそれらを互いに加算した後にサンプリング周波数変換を行えば必要とする演算量を少なくすることができる。
【００２１】
加算処理の行われた楽音波形データが、１フレーム分に達した際には、１フレーム分の楽音波形データがバッファメモリに格納されて、ＷＡＶＥドライバ１に再生予約されるようになる。この場合、ＷＡＶＥ処理手段４−１からは、ＯＳ２に用意されたインターフェースＩＦ４（WAVE out API ）を介して、楽音波形データがＷＡＶＥドライバ１に送られる。
これにより、ＭＩＤＩドライバを複数使用していても、ＷＡＶＥドライバは１つのみ使用するだけでよく、ＷＡＶＥドライバが不足することを防止することができる。
【００２２】
さらに、統合ドライバ３においては、生成演算の遅れ時間や単位時間あたりの楽音波形データ生成量を時間管理しながら、ストリーム１およびストリーム２から受け取られた楽音波形データの進行状況がチェックされて、タイマ処理手段４−２が発生するトリガの優先順位の制御が行われる。また、この優先順位を、各ＭＩＤＩドライバにおける楽音波形データが生成されるまでの演算遅延時間に応じて決定するようにしても良い。
なお、統合ツールライブラリ４は、統合ドライバ３が起動された際にコールされるダイナミックリンクライブラリ（ＤＬＬ）として用意されている。
【００２３】
ところで、規格準拠のＭＩＤＩドライバ２（ソフト音源），ＭＩＤＩドライバ３（ソフト音源）において生成された楽音波形データは、トリガを受けて生成されたデータ量だけストリーム１およびストリーム２を介してＷＡＶＥ処理手段４−１に送られるようにされ、楽音波形データの時間管理は、ＭＩＤＩドライバ２（ソフト音源），ＭＩＤＩドライバ３（ソフト音源）においては行われていない。一方、規格非準拠のＭＩＤＩドライバ４（ソフト音源）においては、生成された楽音波形データの時間管理が行われて、１フレーム分の楽音波形データが生成された際に、ＷＡＶＥ処理手段４−１に送られるようになる。
このため、規格準拠のＭＩＤＩドライバにおいては、ＷＡＶＥ処理手段４−１により一元的に楽音波形データの時間管理を行うことができ、各ＭＩＤＩドライバにおいて個別に時間管理をする必要がなくなるだけでなく、平行して動作する複数のＭＩＤＩドライバに対して最適な制御を行うことができる。
【００２４】
ところで、ストリーム１およびストリーム２は、アプリケーションである音楽ソフト１から統合ドライバ３に対するオープン要求があった時点において、統合ドライバ３に登録されているＭＩＤＩドライバが検出されて対応するストリームがオープンされる。このストリーム１およびストリーム２は、指定された速度およびビット幅で楽音波形データを送ることのできるチャンネルのようなものである。また、ストリームには優先順位がつけられており、ＷＡＶＥ処理手段４−１においては、この優先順位の高い順で、送られた楽音波形データを処理するようにしている。この優先順位は、ストリームで送られる楽音波形データが割り当てられているパートの重要度に応じて決定するのが好適である。
【００２５】
そして、ＷＡＶＥ処理手段４−１より楽音波形データの再生予約がされたＷＡＶＥドライバ１は、サンプル毎の再生出力を出力することができるようにダイレクトメモリアクセス（ＤＭＡ）コントローラを介してバッファメモリから波形サンプルを読み出して、波形入出力用のハードウェアであるコーデック（CODEC）１１に供給する。コーデック１１において、波形サンプルはアナログ楽音信号に変換されて、図示しないサウンドシステムから放音される。
また、ハード音源１０において生成された波形サンプルも、図示しないサウンドシステムから放音される。
【００２６】
なお、統合ツールライブラリ４に用意されたライブラリ３２は、汎用化されており、楽音波形データの生成演算に使用することのできるディジタルフィルタや補間器、ミキサ等の汎用モジュール（サブルーチン）群が格納されており、規格準拠した各ＭＩＤＩドライバはこの汎用モジュール群を利用して、所要のピッチや音色等の楽音的特徴を具備する楽音波形データを生成している。
このようなソフトウェア構造において、例えばＭＩＤＩドライバ２（ソフト音源）が自然楽器を模擬する物理モデル音源とされ、ＭＩＤＩドライバ３（ソフト音源）が波形メモリ音源とされている際には、ソロパートに対応するＭＩＤＩメッセージをＭＩＤＩドライバ２（ソフト音源）に分配し、伴奏パートに対応するＭＩＤＩメッセージをＭＩＤＩドライバ３（ソフト音源）に分配するのが好適である。
【００２７】
また、規格準拠のＭＩＤＩドライバは、ＯＳ２にドライバとしてインストールせずとも統合ドライバ３に登録することにより使用することができると共に、統合ドライバ３によりＭＩＤＩメッセージの分配を行うようにしているため、演奏中であっても各パートにおけるＭＩＤＩドライバの切り換えを行えるようになる。従って、パートの一部分だけを異なるＭＩＤＩドライバにより楽音波形データを生成して演奏することが可能となり、種々の形態の演奏を可能とすることができるようになる。
【００２８】
次に、本発明のコンピュータソフトウェアを用いた複数音源ドライバの制御方法の実施に使用するハードウェア構成を図２に示す。
図２に示すハードウェア構成において、２１はメイン制御部として使用されるマイクロプロセッサ（ＣＰＵ）であり、このＣＰＵ２１の制御の下で本発明にかかる複数音源ドライバの制御方法が、複数音源ドライバの制御用プログラムによる複数音源ドライバの制御処理として実行される。同時に、その他のアプリケーションプログラム等の処理が並列して実行される。２２はＣＰＵ２１が実行する制御用プログラム等が記憶されているリードオンリメモリ（ＲＯＭ）、２３はＣＰＵ２１のワークエリアや、外部記憶装置であるハードディスク２６あるいはリムーバブルディスク２７等から読み出されたプログラムや演奏データ等がロードされるエリアが設定されているランダムアクセスメモリ（ＲＡＭ）、２４はタイマ割り込み処理のタイミングをＣＰＵ２１に指示するハードウェアにより構成されたタイマである。
【００２９】
また、２５は他のＭＩＤＩ（musical instrument digital interface）機器からＭＩＤＩメッセージ等の演奏データが入力されると共に、生成されたＭＩＤＩメッセージを他のＭＩＤＩ機器へ出力するＭＩＤＩインターフェースであり、２６はアプリケーションソフトウェアやＭＩＤＩ演奏データ等を記録することができるハードディスクであり、２７は、ハードディスク２６と同様にアプリケーションソフトウェアやＭＩＤＩ演奏データ等を記録することができるリムーバブルディスクである。さらに、２８はアプリケーションの画面や、各種設定画面等が表示される表示器（モニタ）、２９は英字、かな、数字、記号などのキーや、改行キー、改頁キー等を備えるいわゆるパソコン用のキーボード、および、表示器２８の画面に表示されたポインタを自在に移動させたり、クリックすることにより指定することのできるマウスである。
【００３０】
さらにまた、３０はＲＡＭ３に格納された楽音波形データをサンプリング周期で読み出して、アナログ信号に変換した後に図示しないサウンドシステムから放音させるための波形インターフェースである。なお、サウンドシステムにおいて楽音信号にリバーブやコーラス等の効果を付与する効果回路を備えさせるようにしてもよい。３６は楽音生成専用のハードウェアで用意されたハード音源であり、ＣＰＵ２１からの指示に基づいて複数時分割チャンネル動作を行い、複数の楽音を発生して出力する。なお、各ハードウェアはＣＰＵバス２０を介して相互に接続されている。
以上の構成はパソコン、ワークステーション等の構成と同等であり、本発明の複数音源ドライバの制御方法は汎用のコンピュータにより実行することができる。
【００３１】
また、上記ハードウェア構成において、ＬＡＮ（Local Area Network ）やインターネット、電話回線等の通信ネットワークを介してサーバコンピュータに接続するための通信インターフェースを設けるようにしてもよい。
なお、本発明にかかる複数音源ドライバの制御用プログラムが格納されている記録媒体であるＦＤＤやＣＤ−ＲＯＭを外部記憶装置として用意されているドライブ装置にセットして、ハードディスク２６あるいはリムーバブルディスク２７に複数音源ドライバ用の制御プログラムをインストールすることにより、上記ハードウェア構成が複数音源ドライバの制御処理を実行することができるようにしてもよい。
【００３２】
図３は、図２に示した波形インターフェース３０の詳細構成を示すものであり、波形インタフェース３０は、マイク等から入力される入力波形をディジタル信号に変換するアナログ−ディジタル変換器（ＡＤＣ）３１と、ＡＤＣ３１により変換されたディジタルデータを各サンプリング周期（１／Ｆｓ）に１サンブルづつ順次ＲＡＭ２３に書き込むようにした第１のダイレクトメモリアクセスコントローラ（ＤＭＡＣ１）３２と、ＲＡＭ２３に設定されているバッファメモリＷＢ１〜ＷＢ５に格納されているフレーム単位の楽音波形データをサンプリング周期（１／Ｆｓ）毎に１サンプルづつ順次読み出す第２のダイレクトメモリアクセスコントローラ（ＤＭＡＣ２）３４と、第２のダイレクトメモリアクセスコントローラ３４により読み出された楽音波形データをアナログ楽音信号に変換するディジタル−アナログ変換器（ＤＡＣ）３５と、第１のダイレクトメモリアクセスコントローラ３２および第２のダイレクトメモリアクセスコントローラ３４に与えるサンプリング周波数Ｆｓの周期のサンプリングパルスを発生するＦｓ発生器３３から構成されている。なお、図１に関して説明したＣＯＤＥＣ１１は、波形インターフェース３０のＡＤＣ３１とＤＡＣ３５の機能を実現する集積回路の名称である。
【００３３】
ＲＡＭ２３には、前記したＷＡＶＥ処理手段４−１が楽音波形データを書き込むようにしており、図示する例においては、例えば、バッファメモリＷＢ１，ＷＢ２，ＷＢ３，ＷＢ４には完成した１フレーム分の楽音波形データが格納されており、バッファメモリＷＢ５には１フレーム分の楽音波形データを作成する途中の楽音波形データが記憶されている。このバッファメモリＷＢ１，ＷＢ２，ＷＢ３，ＷＢ４に記憶されている楽音波形データは、Ｆｓ発生器３３から発生されるサンプリングパルスを基準として、第２のダイレクトメモリアクセスコントローラ３４によりサンプリング周期（１／Ｆｓ）毎に楽音波形データが１サンプルづつ順次読み出されるようにされている。
【００３４】
次に、コンピュータソフトウェアを用いた複数音源ドライバの制御方法の実施の形態を、図４以降を参照しながら説明する。
図４は、ＣＰＵ２１により実行されるハード音源用のＭＩＤＩドライバ１（ハード音源）のメインルーチンのフローチャート（ＨＴＧドライバメイン）である。このメインルーチンは、ＭＩＤＩドライバ１（ハード音源）がＯＳ２にドライバとしてインストールされている場合には、ＯＳ２の立ち上げ時に、また、統合ドライバ３にＭＩＤＩドライバ１（ハード音源）が登録されている場合には、統合ドライバ３から当該ドライバのオープンが指示されたときに起動される。
このメインルーチンが起動されると、ステップＳ１０においてハード音源の初期設定が行われる。この初期設定では、音源レジスタのクリアやハード音源１０の初期設定が行われる。
【００３５】
初期設定が終了すると、ステップＳ１１において起動要因がチェックされる。起動要因としては、以下の要因がある。
▲１▼統合ドライバ３が備えるインターフェースＩＦ１０（MIDI out API）を介してＭＩＤＩメッセージが供給されたこと。すなわち、音楽ソフト１からＭＩＤＩメッセージが供給されたこと。
▲２▼表示器２８に表示された音源設定パネルにおける入力イベントや、キーボード２９のコマンド入力イベントが検出されたこと。また、タイマイベントが入力されたこと。
▲３▼メインルーチン終了コマンドが入力されたこと。
【００３６】
次いで、ステップＳ１２にて上記した起動要因があるか否かが判定されて、起動要因▲１▼〜▲３▼のいずれかが発生するまで、ステップＳ１１の処理が繰り返し行われる。そして、起動要因ありとステップＳ１２にて判定されると、ステップＳ１３にて上記いずれの起動要因か判定されて、その起動要因に応じた処理が行われる。
例えば、起動要因▲１▼が発生されたと検出されると、ステップＳ１４に進んでＭＩＤＩ処理が行われ、起動要因▲２▼が発生されたと検出されると、ステップＳ１５に進んでその他処理が行われ、起動要因▲３▼が発生されたと検出されると、ステップＳ１６に進んで終了処理が行われる。
【００３７】
ステップＳ１４にて行われるＭＩＤＩ処理では、ＭＩＤＩメッセージのノートオンイベントに基づくノートオン処理や、ノートオフイベントに基づくノートオフ処理が含まれる。ノートオン処理では、ノートオンイベントの入力に応じてハード音源に割り当てるチャンネル割り当てが行われ、割り当てたチャンネル用として設定されているレジスタに、入力されたノートオンに応じた楽音パラメータが設定されると共に、同チャンネルに対してノートオンが指示される。ハードウェア音源の当該チャンネルでは、該ノートオンに応じて該楽音パラメータに基づいた楽音の生成が開始される。なお、設定されるパラメータは、演奏パートの選択音色、ノートオンイベントで指定される音高、ノートオンイベントで指定されるベロシティに応じて決定される。また、ノートオフ処理では、ハード音源のチャンネルの中で、ノートオフイベントに応じた楽音を生成中のチャンネルを探索し、見つかったチャンネルにノートオフを指示するようにする。また、プログラムチェンジが供給された際には、指定された演奏パートの選択音色を、プログラムチェンジにより指定されている音色に変更する処理が行われる。
【００３８】
また、ステップＳ１５にて行われるその他処理においては、表示器２８上に音源制御パネルを表示したり、この音源制御パネル上での操作に応じて、ハード音源の音色の選択処理や楽音パラメータの制御が行われる。さらに、タイマイベントが入力された際には、タイマイベントに応じて楽音にビブラートを付与するＬＦＯの制御や、エンベロープの制御等が行われる。
上記したステップＳ１４あるいはステップＳ１５の処理が終了すると、ステップＳ１１に戻って、ステップＳ１１ないしステップＳ１５の処理が繰り返し行われる。そして、起動要因▲３▼が検出されるとステップＳ１６に分岐して、このメインルーチンを終了させるための所定の終了処理が実行されて、メインルーチンは終了される。
【００３９】
図５は、ＣＰＵ２１により実行されるソフト音源として構成されているＭＩＤＩドライバ２（ソフト音源）、ＭＩＤＩドライバ３（ソフト音源）およびＭＩＤＩドライバ４（ソフト音源）のメインルーチンのフローチャート（ＳＴＧドライバメイン）である。このメインルーチンは、ＭＩＤＩドライバ２（ソフト音源）、ＭＩＤＩドライバ３（ソフト音源）あるいはＭＩＤＩドライバ４（ソフト音源）がＯＳ２にドライバとしてインストールされている場合には、ＯＳ２の立ち上げ時に起動され、統合ドライバ３にＭＩＤＩドライバ２（ソフト音源）、ＭＩＤＩドライバ３（ソフト音源）あるいはＭＩＤＩドライバ４（ソフト音源）の各ドライバが登録されている場合には、統合ドライバ３から各ドライバのオープンが指示されたときに起動される。
【００４０】
このメインルーチンが起動されると、ステップＳ２０において音楽ソフト１により要求されるＭＩＤＩドライバ２（ソフト音源）、ＭＩＤＩドライバ３（ソフト音源）および／またはＭＩＤＩドライバ４（ソフト音源）の初期設定が行われる。この初期設定では、ＲＡＭ２３上の記憶領域の確保、各ドライバルーチンのロード、レジスタの初期設定等が行われる。
【００４１】
初期設定が終了すると、ステップＳ２１において起動要因がチェックされる。起動要因としては、以下の要因がある。
▲１▼統合ドライバ３が開いたインターフェースＩＦ１１（MIDI out API）あるいはインターフェースＩＦ１２（MIDI out API），もしくは、ＯＳ２に準備されているインターフェースＩＦ２（MIDI out API）を介してＭＩＤＩメッセージが供給されたこと。すなわち、音楽ソフト１からＭＩＤＩメッセージが供給されたこと。
▲２▼規格準拠のＭＩＤＩドライバ（ソフト音源）の場合は、統合ツールライブラリ４に供えられたタイマ処理手段４−２から楽音生成タイミングを示すトリガが供給されたこと。また、規格非準拠のＭＩＤＩドライバ（ソフト音源）の場合は、例えば、ＯＳ２に一定時間おきの割り込みを発生させ、この割り込みがトリガして供給されたこと。
▲３▼表示器２８に表示された音源設定パネルにおける入力イベントや、キーボード２９のコマンド入力イベントが検出されたこと。また、タイマイベントが入力されたこと。
▲４▼メインルーチン終了コマンドが入力されたこと。
【００４２】
次いで、ステップＳ２２にて上記した起動要因があるか否かが判定されて、起動要因▲１▼〜▲４▼のいずれかが発生するまで、ステップＳ２１の処理が繰り返し行われる。そして、起動要因ありとステップＳ２２にて判定されると、ステップＳ２３にて上記いずれの起動要因か判定されて、その起動要因に応じた処理が行われる。
例えば、起動要因▲１▼が発生されたと検出されると、ステップＳ２４に進んでＭＩＤＩ処理が行われ、起動要因▲２▼が発生されたと検出されると、ステップＳ２５に進んで楽音生成処理が行われ、起動要因▲３▼が発生されたと検出されるとステップＳ２６に進んでその他処理が行われ、起動要因▲４▼が発生されたと検出されると、ステップＳ２７に進んで終了処理が行われる。
【００４３】
ここで、インターフェースＩＦ１１，インターフェースＩＦ１２、インターフェース２を使用する場合、音楽ソフト１ないし統合ドライバ３は、その使用に先立って各インターフェースに対するオープンを指示しなければならない。例えば、統合ドライバ３が規格準拠ＭＩＤＩドライバ２，３（ソフト音源）のインターフェースＩＦ１１，ＩＦ１２のオープンを指示したとき、そのインターフェースＩＦ１１，ＩＦ１２がオープンされ、同時に各ＭＩＤＩドライバで生成する楽音波形データの出力先としてストリーム１，２がそれぞれオープンされる。また、統合ドライバ３が、規格非準拠ＭＩＤＩドライバ４（ソフト音源）のインターフェースＩＦ２のオープンを指示したとき、そのインターフェースＩＦ２がオープンされ、楽音波形データの出力先としてインターフェースＩＦ３が同時にオープンされる。そして、オープンされたインターフェースＩＦ１１，ＩＦ１２，ＩＦ２を通じてＭＩＤＩメッセージが供給され、起動要因▲１▼が発生する。
【００４４】
ステップＳ２４にて行われるＭＩＤＩ処理では、ＭＩＤＩメッセージのノートオンイベントに基づくノートオン処理や、ノートオフイベントに基づくノートオフ処理が含まれる。ノートオン処理では、ノートオンイベントの入力に応じてソフト音源に割り当てるチャンネル割り当てが行われ、割り当てたチャンネル用として設定されているレジスタに、入力されたノートオンに応じた楽音パラメータが設定されると共に、同チャンネルに対してノートオンが指示される。ソフト音源の当該チャンネルでは、該ノートオンに応じて該楽音パラメータに基づいた楽音の生成が開始される。なお、設定されるパラメータは、演奏パートの選択音色、ノートオンイベントで指定される音高、ノートオンイベントで指定されるベロシティに応じて決定される。また、ノートオフ処理では、ソフト音源のチャンネルの中で、ノートオフイベントに応じた楽音を生成中のチャンネルを探索し、見つかったチャンネルにノートオフを指示するようにする。また、プログラムチェンジが供給された際には、指定された演奏パートの選択音色を、プログラムチェンジにより指定されている音色に変更する処理が行われる。
【００４５】
また、ステップＳ２５にて行われる楽音生成処理においては、タイマ処理手段４−２ないしＯＳ２から供給されたトリガのタイミングで、複数サンプリング周期分の楽音波形データの生成を開始する。この際の、楽音波形データのサンプリング周波数は、当該ソフト音源において決定される所定のサンプリング周波数Ｆｓとされる。また、単独で起動される規格非準拠のＭＩＤＩドライバ４（ソフト音源）の場合は、さらに、フレームを単位とする生成された楽音波形データの収集処理が行われ、フレームが完成するとインタフェースＩＦ３を通じて完成されたフレームのＷＡＶＥ処理手段４−１への受け渡しの制御も行われる。さらにまた、統合ドライバ３から起動される規格準拠のＭＩＤＩドライバ２（ソフト音源）およびＭＩＤＩドライバ３（ソフト音源）の場合は、生成された楽音波形データのフレームを単位とする収集処理を行うことなく、そのまま統合ドライバ３のＷＡＶＥ処理手段４にストリーム１あるいはストリーム２を通じて楽音波形データが渡される。
【００４６】
ステップＳ２６にて行われるその他処理においては、表示器２８上に音源制御パネルを表示したり、この音源制御パネル上でのキーボードあるいはマウスの操作に応じて、ソフト音源の音色の選択処理や楽音パラメータの制御が行われる。さらに、タイマイベントが入力された際には、タイマイベントに応じて楽音にビブラートを付与するＬＦＯの制御や、エンベロープの制御等が行われる。
上記したステップＳ２４、ステップＳ２５あるいはステップＳ２６の処理が終了すると、ステップＳ２１に戻って、ステップＳ２１ないしステップＳ２６の処理が繰り返し行われる。そして、起動要因▲４▼が検出されるとステップＳ２７に分岐して、このメインルーチンを終了させるための所定の終了処理が実行されて、メインルーチンは終了される。
【００４７】
図６は、ＣＰＵ２１により実行される統合ドライバのメインルーチンのフローチャート（統合ドライバメイン処理）である。統合ドライバはＯＳ２にＭＩＤＩドライバとしてインストールされており、このメインルーチンはＯＳ２の立ち上げ時に起動される。
この統合ドライバのメインルーチンが起動されると、ステップＳ３０にて初期設定が行われ、次いでステップＳ３１にてオンするＭＩＤＩドライバがあるか否かが判定される。オンするＭＩＤＩドライバとしては、音楽ソフト１から要求されるＭＩＤＩドライバをオープンしたり、前回起動したＭＩＤＩドライバをオープンするようにする。ここで、オープンするＭＩＤＩドライバがあると判定されると、ステップＳ３２以降に進んで、ＭＩＤＩドライバオープン処理が行われる。
【００４８】
ＭＩＤＩドライバオープン処理におけるステップＳ３２では、オープンするＭＩＤＩドライバの種類が判定されて、判定された種類のＭＩＤＩドライバがオープンされるようになる。例えば、ステップＳ３２にてハード音源用のＭＩＤＩドライバと判定されると、ステップＳ３３に進んでＭＩＤＩドライバ１（ハード音源）が探索されて、ＭＩＤＩドライバ１（ハード音源）を開く処理（図４参照）が行われる。また、ステップＳ３２にて規格準拠のソフト音源のＭＩＤＩドライバと判定されると、ステップＳ３４に進んでＭＩＤＩドライバ２（ソフト音源）やＭＩＤＩドライバ３（ソフト音源）が探索されて、ＭＩＤＩドライバ２（ソフト音源）やＭＩＤＩドライバ３（ソフト音源）を開く処理（図５参照）が行われる。さらに、ステップＳ３２にて規格非準拠のソフト音源のＭＩＤＩドライバと判定されると、ステップＳ３５に進んでＭＩＤＩドライバ４（ソフト音源）が探索されて、ＭＩＤＩドライバ４（ソフト音源）を使用するための準備が行われる。なお、各ＭＩＤＩドライバのオープン時に、それぞれ対応するインターフェースＩＦ１１，ＩＦ１２ないしインターフェースＩＦ２のオープンを同時に行うようにしても良い。
【００４９】
上記したステップＳ３１ないしステップＳ３５の処理が繰り返し行われることにより、オンするすべてのＭＩＤＩドライバのオープン処理が行われるようになる。したがって、この際にはステップＳ３１においてＮＯと判定されてステップＳ３６に進むようになる。
ステップＳ３６では起動要因がチェックされる。起動要因としては、以下の要因がある。
▲１▼ＯＳ２に準備されているインターフェースＩＦ１（MIDI out API）を介してＭＩＤＩメッセージが供給されたこと。すなわち、音楽ソフト１からＭＩＤＩメッセージが供給されたこと。
▲２▼統合ツールライブラリ４に備えられたタイマ処理手段４−２にトリガを送出するトリガタイマ割り込みがかけられたこと。
▲３▼ＭＩＤＩドライバから生成された楽音波形データを受け取ったこと。
▲４▼表示器２８に表示された音源設定パネルにおける入力イベントや、キーボード２９のコマンド入力イベントが検出されたこと。
▲５▼メインルーチン終了コマンドが入力されたこと。
【００５０】
次いで、ステップＳ３６にて上記した起動要因があるか否かが判定されて、起動要因▲１▼〜▲５▼のいずれかが発生するまで、ステップＳ３６の処理が繰り返し行われる。そして、起動要因ありとステップＳ３７にて判定されると、ステップＳ３８にて上記いずれの起動要因か判定されて、その起動要因に応じた処理が行われる。
例えば、起動要因▲１▼が発生されたと検出されると、ステップＳ３９に進んでＭＩＤＩ処理が行われ、起動要因▲２▼が発生されたと検出されると、ステップＳ４０に進んでトリガタイマ割込処理が行われ、起動要因▲３▼が発生されたと検出されるとステップＳ４１に進んでＷＡＶＥ処理が行われ、起動要因▲４▼が発生されたと検出されると、ステップＳ４２に進んでその他処理が行われ、起動要因▲５▼が発生されたと検出されると、ステップＳ４３に進んで終了処理が行われる。
ここで、インターフェースＩＦ１を使用する場合、音楽ソフト１は、その使用に先立って該インターフェースに対するオープンを指示しなければならない。さらに、インターフェースＩＦ１がオープンされたとき、統合ドライバ３はインターフェースＩＦ１から入力するＭＩＤＩメッセージの出力先としてインターフェースＩＦ１１，ＩＦ１２，ＩＦ２のオープン指示を行う。オープンされたインターフェースＩＦ１を通じてＭＩＤＩメッセージが供給され起動要因▲１▼が発生する。
【００５１】
ステップＳ３９にて行われるＭＩＤＩ処理では、プログラムチェンジ等のＭＩＤＩメッセージにかかる音色切換イベントが供給された際に、図８に示す音色切換イベント処理が起動されて実行される。また、ＭＩＤＩメッセージにかかるノートオンイベントやノートオフイベントが供給された際には、図９に示すその他イベント処理が起動されて実行される。さらに、統合ドライバにおいては供給されたＭＩＤＩメッセージを、指定されたＭＩＤＩドライバに振り分ける処理を行っており、この処理に関してＭＩＤＩメッセージにかかるイベントデータを送出するタイミングとなったときは、図１０に示すタイマｄ割込処理が起動されて実行される。
【００５２】
ＭＩＤＩメッセージにおいてプログラムチェンジやバンクセレクトが供給されると、図８に示す音色切換イベント処理が起動され、ステップＳ７０にてＭＩＤＩメッセージにかかるプログラムチェンジがＰＣとされてレジスタに入れられ、ＭＩＤＩメッセージにかかるバンクセレクトがＢＳとされてレジスタに入れられ、プログラムチェンジおよびバンクセレクトにかかるＭＩＤＩチャンネル（ＭＩＤＩｃｈ）番号がｐとされてレジスタに入れられる。次いで、ステップＳ７１にてプログラムチェンジＰＣとバンクセレクトＢＳにより音色マップ上で指定される音色に対応するＭＩＤＩドライバが判定され、判定されたＭＩＤＩドライバ名がＤ（ｐ）とされてレジスタに入れられる。
ここで、前記音色マップには、プログラムチェンジＰＣとバンクセレクトＢＳで指定される音色に最適な音源（＝最適なＭＩＤＩドライバ）と、最適な音源がない場合に使用される代替音源（＝代替ＭＩＤＩドライバ）を示す情報が記憶されている。これにより、指定された音色のソフト音源がない場合に、その音色の演奏を代替音源とされた他のソフト音源あるいはハード音源を使用して行うことができるようになる。また、１６ＭＩＤＩチャンネル分のデータＤ（ｐ）には、それぞれ、各パートの楽音生成に使用されるＭＩＤＩドライバの名前が記憶される。
【００５３】
そして、ステップＳ７２に進んでＭＩＤＩドライバＤ（ｐ）が統合ドライバに登録されたＭＩＤＩドライバ内に存在しているか否かが判定される。ＭＩＤＩドライバＤ（ｐ）が統合ドライバに登録されていると、ステップＳ７２ではＹＥＳと判定されてステップＳ７４に進むが、登録されていない場合は、ステップＳ７２においてＮＯと判定されてステップＳ７３に分岐する。分岐したステップＳ７３では登録されていないＭＩＤＩドライバＤ（ｐ）を代替することのできるＭＩＤＩドライバが指定されてそのＭＩＤＩドライバ名がＤ（ｐ）とされてレジスタに入れられる。
次いで、ステップＳ７４に進んで、ＭＩＤＩドライバＤ（ｐ）がオンされておらず、新規にオンするＭＩＤＩドライバか否かが判定される。ここで、レジスタに入れられたドライバ名がＤ（ｐ）のＭＩＤＩドライバがオープンされていないと、ステップＳ７４にてＹＥＳと判定されてステップＳ７５に分岐してＭＩＤＩドライバＤ（ｐ）がオープンされ、ステップＳ７６に進む。また、既にＭＩＤＩドライバＤ（ｐ）がオープンされている場合は、ステップＳ７５はスキップされてステップＳ７６に進む。
【００５４】
ステップＳ７６では、オープンされているＭＩＤＩドライバの中に使用していないＭＩＤＩドライバが存在しているか否かが判定され、不使用のＭＩＤＩドライバがある場合は、ステップＳ７７にて不使用のＭＩＤＩドライバをクローズし、ステップＳ７８に進む。ここで、ＯＳ２にインストールされているＭＩＤＩドライバのクローズはできないので、ステップＳ７７ではそれ以外のＭＩＤＩドライバについてのみクローズを行う。また、不使用のＭＩＤＩドライバがないと判定された場合は、ステップＳ７８に進んで上記ステップＳ７２ないしステップＳ７７の処理内容に応じてＭＩＤＩドライバの登録マップ中の各ＭＩＤＩドライバの動作中／停止中を示すデータを更新する。次いで、ステップＳ７９にてＭＩＤＩドライバＤ（ｐ）に割り当てられた送出バッファにレジスタに入れられているプログラムチェンジＰＣとバンクセレクトＢＳの内容が書き込まれて、音色切換イベント処理は終了される。
これにより、演奏中においてもプログラムチェンジおよびバンクセレクトによりＭＩＤＩドライバの切り換えを行うことができると共に、その時々に使用されているＭＩＤＩドライバだけがオープンされ、ＲＡＭ２３を効率よく使用することができる。
【００５５】
また、ステップＳ３９にいて行われるＭＩＤＩ処理で、音色切換イベント以外のＭＩＤＩメッセージが供給された際には、図９に示すＭＩＤＩ処理におけるその他イベント処理が起動され、ステップＳ８０にてＭＩＤＩメッセージにかかるイベントデータがＥＤとされてレジスタに入れられ、そのイベントデータのＭＩＤＩチャンネル（ＭＩＤＩｃｈ）番号がｐとされてレジスタに入れられる。ここで、音色切換イベント以外のＭＩＤＩメッセージとは、ノートオン、ノートオフ、ピッチベンド、アフタタッチ等のメッセージである。次いで、ステップＳ８１にてＭＩＤＩチャンネル番号ｐのＭＩＤＩドライバＤ（ｐ）の送出バッファにイベントデータＥＤが書き込まれて、その他イベント処理は終了される。
【００５６】
さらに、音色切換イベント処理やその他イベント処理において設定されたＭＩＤＩドライバＤ（ｐ）の送出バッファにプログラムチェンジＰＣ、バンクセレクトＢＳ、および、イベントデータＥＤが書き込まれた後に、送出バッファに格納されたデータをそれぞれ遅延させてＭＩＤＩドライバＤ（ｐ）に向けて送出するようにされる。この送出タイミングは、設定されたＭＩＤＩドライバＤ（ｐ）にデータを供給してから対応する楽音波形が出力されるまでの演算遅延時間に基づく遅延時間とされ、複数のＭＩＤＩドライバから送出される生成された楽音波形データの時間が揃うように、演算遅延時間の大きいＭＩＤＩドライバには短い遅延時間ですぐに送出するようにされ（送出バッファにおける送出遅延時間は短い）、演算遅延時間の小さいＭＩＤＩドライバには所定時間遅延して送出するようにされる。送出バッファに各データを格納したタイミングから、対応するＭＩＤＩドライバＤ（ｐ）に応じて設定された遅延時間が経過したタイミングでタイマｄ割込が発生する。
【００５７】
タイマｄ割込が発生されると、図１０に示すタイマｄ割込処理が起動され、ステップＳ９０にてタイマｄ割込で指定されているＭＩＤＩドライバ名がｄとされる。次いで、ステップＳ９１にてＭＩＤＩドライバｄに割り当てられている送出バッファから遅延されたイベントデータＥＤが取り出され、ステップＳ９２にて取り出された遅延されたイベントデータＥＤをＭＩＤＩドライバｄに送出する。
ステップＳ３９の各ＭＩＤＩ処理において、入力するＭＩＤＩメッセージをＭＩＤＩドライバ毎に用意された送出バッファに書き込み、タイマｄ割り込み処理で対応するＭＩＤＩドライバに送出することにより、ＭＩＤＩメッセージの各ＭＩＤＩドライバに対する振り分けを行うことができる。この際、送出バッファに書き込まれる１つ１つのデータを、各送出バッファ毎に設定された遅延時間分遅延してから送出するようになっているため、ＭＩＤＩドライバ毎の演算遅延時間の相違による各ＭＩＤＩドライバの楽音波形データ間の時間ずれを解消することができる。
【００５８】
図６に示す統合ドライバのメインルーチンに戻り、統合ツールライブラリ４に備えられたタイマ処理手段４−２にトリガを送出するトリガタイマ割り込みがかけられた際には、ステップＳ４０にて図１１に示すトリガタイマ割込処理が起動される。トリガタイマ割込処理が起動されると、ステップＳ１００にてかけられたトリガタイマ割り込みのタイミングでトリガをかけるべき規格準拠のＭＩＤＩドライバ（ソフト音源）にトリガが送出される。このＭＩＤＩドライバは、複数登録されているＭＩＤＩドライバの内の最優先のＭＩＤＩドライバとされる。この際の最優先のＭＩＤＩドライバは、複数のＭＩＤＩドライバ（ソフト音源）のうち楽音波形データの生成が最も遅れているＭＩＤＩドライバとされる。また同程度の遅れの複数ＭＩＤＩドライバ（ソフト音源）がある場合には、重要なパート（例えば、ソロパート）が割り当てられているＭＩＤＩドライバとされる。
【００５９】
次いで、ステップＳ１０１にて、他のＭＩＤＩドライバにも当該タイミングでトリガを送出するか否かが、その時点の各ＭＩＤＩドライバ（ソフト音源）の楽音波形データ生成状況と、他のアプリケーションも含めたＣＰＵ２１の使用率に基づいて決定される。そして、他のＭＩＤＩドライバにもトリガを送出すると判定された場合には、ステップＳ１００に戻り、その時点において最優先のＭＩＤＩドライバにトリガが送出される。ステップＳ１０１では、各ＭＩＤＩドライバ（ソフト音源）の楽音波形データの生成が十分である場合、または、十分ではないが他のアプリケーションを先に実行する必要がある場合にトリガを送出しないと決定され、このトリガタイマ割込処理を終了する。
なお、トリガタイマ割込処理の起動周期は、例えば１０ｍｓとされる。
【００６０】
図６に示す統合ドライバのメインルーチンに戻り、統合ドライバがＭＩＤＩドライバにより生成された楽音波形データを受け取った際には、ステップＳ４１にて図１２に示すＷＡＶＥ処理が起動される。ここで、ＭＩＤＩドライバが規格準拠のソフト音源である場合は、統合ドライバ３はストリーム１，２を通じて楽音波形データを受け取り、規格非準拠のソフト音源である場合は、インターフェースＩＦ３を通じて楽音波形データを受け取る。ＷＡＶＥ処理が起動されると、ステップＳ１１０にて受け取った楽音波形データがＷとしてレジスタに入れられると共に、楽音波形データを生成した指定されているＭＩＤＩドライバ名がｄとされてレジスタに入れられる。次いで、ステップＳ１１１にて受け取った楽音波形データのサンプリング周波数が規定される所定のサンプリング周波数Ｆｓと異なる場合には、それを該サンプリング周波数Ｆｓに変換する。さらに、受け取った楽音波形データと、他のＭＩＤＩドライバから生成されて受け取られている楽音波形データとの加算が行われる。
【００６１】
この加算は、前回の当該ＭＩＤＩドライバにより生成された楽音波形データの位置ＳＰ（ｄ）以降に、受け取った楽音波形データを足し込むことにより行われる。すなわち、前回の当該ＭＩＤＩドライバにより生成された楽音波形データのバッファメモリ上の最終の位置をＳＰ（ｄ）としたときに、位置ＳＰ（ｄ）以降のバッファメモリの位置に受け取った楽音波形データを書き込むのであるが、当該位置に既に他のＭＩＤＩドライバにより生成された楽音波形データが書き込まれている場合には、書き込まれている楽音波形データと加算した後に当該位置に書き込むようにする。これにより、複数のＭＩＤＩドライバにおいて生成された楽音波形データの加算を行うことができる。
【００６２】
続けて、ステップＳ１１２にて前回の当該ＭＩＤＩドライバにより生成された楽音波形データの最終の位置ＳＰ（ｄ）に受け取った楽音波形データの進行量が加算されて、ＭＩＤＩドライバｄにおける新たな楽音波形データの最終の位置ＳＰ（ｄ）とされる。
なお、この楽音波形データの最終の位置ＳＰ（ｄ）はＭＩＤＩドライバごとに準備されており、ＭＩＤＩドライバごとに前記した処理が行われる。
ステップＳ１１２の処理が終了すると、ステップＳ１１３に進んで各ストリームの進行状況がバッファメモリに格納されている楽音波形の最終の位置ＳＰ（ｄ）からチェックされる。このチェックはＭＩＤＩドライバへのトリガ送出の優先順位を制御するために行われ、楽音波形データの生成が遅れているＭＩＤＩドライバの優先度が高くされる。この結果、前記したトリガタイマ割込処理において、トリガ送出が楽音波形データの生成が遅れているＭＩＤＩドライバに優先的に行われるようになる。なお、ステップＳ１１３の処理は規格準拠のＭＩＤＩドライバ（ソフト音源）が対象であり、規格非準拠のＭＩＤＩドライバについては処理されない。
【００６３】
次いで、ステップＳ１１４にて作成中のフレームにおいて１フレーム分の楽音波形データが使用中のすべてのＭＩＤＩドライバにおいて生成されたか否かが判定され、生成されている場合には１フレーム完成されたとしてステップＳ１１５に分岐する。そして、ステップＳ１１５にて完成した１フレーム分の楽音波形データが、インターフェースＩＦ４を通じてＷＡＶＥドライバに渡されて再生予約される。また、１フレーム分の楽音波形データが完成していない場合には、そのままＷＡＶＥ処理が終了される。この際には、次の楽音波形データが受け取られて、ＷＡＶＥ処理が再起動され、１フレーム分の楽音波形データの生成処理が再度行われるが、１フレーム分の楽音波形データが完成するまでは、ステップＳ１１５の処理はスキップされる。
なお、ＷＡＶＥドライバに再生予約された楽音波形データは、サンプリング周期（１／Ｆｓ）毎にバッファメモリから読み出されて再生されるようになる。
【００６４】
図６に示す統合ドライバのメインルーチンに戻り表示器２８に表示された音源設定パネルにおける入力イベントや、キーボード２９のコマンド入力イベントが検出された際には、ステップＳ４２にてその他処理が起動される。その他処理においては、図７（ａ）に示すＭＩＤＩドライバの登録処理や図７（ｂ）に示すＭＩＤＩドライバの削除処理等が行われる。
この場合、表示器２８に表示されたＭＩＤＩドライバの登録／削除パネルにおいて、登録ボタンがクリックされると、登録処理が起動されて、ステップＳ５０にて登録するＭＩＤＩドライバの指定が行われる。このＭＩＤＩドライバの指定は、例えば、パネルに表示されているＭＩＤＩドライバ名をクリックすることにより行われる。次いで、ステップＳ５１にて登録が指定されたＭＩＤＩドライバが登録マップに登録される。
【００６５】
登録マップは、図７（ｃ）に示すようにＭＩＤＩドライバの登録数データと、「ドライバ１データ」、「ドライバ２データ」、「ドライバ３データ」、「ドライバ４データ」・・・で示されるように登録されたＭＩＤＩドライバのデータとから構成されている。また、ＭＩＤＩドライバのデータとしては、ＲＡＭ２３中にロードされたＭＩＤＩドライバプログラムのアドレス、動作中／停止中の状態、トリガ周期、サンプリング周波数、楽音波形データの演算遅延時間（ディレイ量）等とされる。なお、ハード音源用のＭＩＤＩドライバにおいてはトリガ周期データは記入されていない。このトリガ周期データは、上述したトリガタイマ割込処理において各ＭＩＤＩドライバ（ソフト音源）の楽音波形データ生成状況の判断に使用される。つまり、前記位置ＳＰ（ｄ）以降のその時点で生成すべき楽音波形データ量が、トリガ周期に相当する量より少なければ、そのＭＩＤＩドライバに対してはトリガをかける必要性がない。また、楽音波形データの演算遅延時間は、一番遅いＭＩＤＩドライバにシステムのディレイ量を合わせるために記入されており、前述したように各ＭＩＤＩドライバに対応した送出バッファにおけるイベントデータＥＤの遅延時間を制御するために使用される。
【００６６】
登録処理に戻り、ステップＳ５１の処理が終了すると、ステップＳ５２に進んで登録されたＭＩＤＩドライバの楽音波形データの演算遅延時間（ディレイ量）が検出されて、検出されたディレイ量が登録マップに記入される。ここで、演算遅延時間の検出は、各ＭＩＤＩドライバに対してテスト用のノートオンイベントを送出し、各ＭＩＤＩドライバで生成される楽音波形データにその応答が現れるまでの時間を測定して行われる。次いで、ステップＳ５３にてシステムのディレイ量が登録マップに記入されている全てのＭＩＤＩドライバのディレイ量の内、最も大きいディレイ量に決定され、登録処理は終了する。このシステムのディレイ量と各ＭＩＤＩドライバの演算遅延時間との差が、各ＭＩＤＩドライバに対応した送出バッファにおける送出遅延時間となる。
【００６７】
また、表示器２８に表示されたＭＩＤＩドライバの登録／削除パネルにおいて、削除ボタンがクリックされると、図７（ｂ）に示す削除処理が起動され、ステップＳ６０にて削除するＭＩＤＩドライバが指定される。このＭＩＤＩドライバの指定は、例えば、パネルに表示されているＭＩＤＩドライバ名をクリックすることにより行われる。次いで、ステップＳ６１にて削除が指定されたＭＩＤＩドライバが登録マップから削除され、削除処理は終了する。この際、登録マップから削除されるＭＩＤＩドライバが動作中の場合は、対応するインターフェースおよびストリームをクローズし、さらに、該ＭＩＤＩドライバが統合ドライバ３によりオープンされたものであれば該ＭＩＤＩドライバもクローズする。
以上の処理が、図６に示す統合ドライバのメインルーチンで行われる処理である。
【００６８】
なお、前記した本発明の実施の形態においては、いずれのパートでも使用されなかったＭＩＤＩドライバをクローズするようになっていたが、必ずしもクローズしなくても良い。開いたままにしておけば、素早い切り換えが可能になる。
また、前記した本発明の実施の形態におけるＷＡＶＥ処理手段は、生成された楽音波形データをＯＳ２のマルチメディア関数で供給されるインターフェースＩＦ４を通じてＷＡＶＥドライバに渡すようにしていたが、該マルチメディア関数を介さずに、ＷＡＶＥドライバに専用の別インターフェースを用意し、それを通じて渡すようにしても良い。
【００６９】
さらに、ＭＩＤＩメッセージにおけるイベントデータのフォーマットは、演奏イベントの発生時刻を１つ前のイベントからの時間で表した「イベント＋相対時間」、演奏イベントの発生時刻を曲や小節内における絶対時間で表した「イベント＋絶対時間」、音符の音高と符長あるいは休符と休符長で演奏データを表した「音高（休符）＋符長」、演奏の最小分解能毎にメモリの領域を確保し、演奏イベントの発生する時刻に対応するメモリ領域に演奏イベントを記憶した「ベタ方式」等、どのような形式でもよい。
また、イベントデータは、複数のチャンネルのデータが混在した形式であってもよいし、各チャンネルのデータがトラックごとに別れているような形式であってもよい。
【００７０】
ところで、ハードディスク２６およびリムーバブルディスク２７は各種プログラムや各種データを記憶しておく記憶装置である。そして、ＲＯＭ２２に複数音源ドライバ用の制御プログラムが記憶されていない場合、ハードディスク２６あるいはリムーバブルディスク２７に複数音源ドライバ用の制御プログラムを記憶させておき、それをＲＡＭ２３に読み込むことにより、ＲＯＭ２２に複数音源ドライバ用の制御プログラムを記憶している場合と同様の動作をＣＰＵ１に実行させるようにしてもよい。このようにすると、複数音源ドライバ用の制御プログラムの追加やバージョンアップ等を容易に行うことができるようになる。
【００７１】
また、ＣＤ−ＲＯＭ（コンパクトディスク−リード・オンリ・メモリ）ドライブを設け、ＣＤ−ＲＯＭに記憶されている複数音源ドライバ用の制御プログラムをハードディスク２６あるいはリムーバブルディスク２７にストアするようにしても良い。このように、ＣＤ−ＲＯＭを用いるようにしても複数音源ドライバ用の制御プログラムの新規インストールやバージョンアップ等を容易に行うことができる。
なお、このＣＤ−ＲＯＭドライブに替えて、フロッピィディスク装置、光磁気ディスク（ＭＯ）装置等、様々な形態の記録メディアを利用してもよい。
【００７２】
さらに、本発明のコンピュータソフトウェアを用いた複数音源ドライバの制御方法の実施に使用するハードウェア構成に通信インターフェースを付加すると、通信インターフエースを介してＬＡＮ（ローカルエリアネットワーク）やインターネット、電話回線等の通信ネットワークに接続することができ、該通信ネットワークを介して、サーバコンピュータと接続することができる。したがって、ハードディスク２６やリムーバブルディスク２７に複数音源ドライバ用の制御プログラムや各種データが記憶されていない場合は、サーバコンピュータから複数音源ドライバ用の制御プログラムやデータをダウンロードすることができるようになる。この際に、クライアントとなる本発明にかかるハードウェア構成は、通信インターフェース及び通信ネットワークを介してサーバコンピュータへ複数音源ドライバの制御用プログラム等の各種プログラムやデータのダウンロードを要求するためのコマンドを送信する。サーバコンピュータは、このコマンドを受け、要求されたプログラムやデータを、通信ネットワークを介して本発明にかかるハードウェア構成へ配信する。本発明にかかるハードウェア構成は、通信インターフエースを介して、サーバコンピュータから配信されたプログラムやデータを受信してハードディスク２６やリムーバブルディスク２７等の外部記憶装置に格納することにより、プログラムやデータのダウンロードを行うことができるようになる。
【００７３】
【発明の効果】
本発明の複数音源ドライバの制御方法は、複数音源ドライバの制御用プログラムをオペレーティングシステムにインストールすることにより、統合ドライバをオペレーティングシステムに用意されたＭＩＤＩメッセージを授受することのできるインターフェース（MIDI out API）および楽音波形データを授受することのできるインターフェース（WAVE out API）の下に配置するようにしている。そして、統合ドライバに規格準拠のＭＩＤＩドライバを登録することができ、そのＭＩＤＩドライバを使用可能とすることができる。これにより、規格準拠のＭＩＤＩドライバを使用する際には、オペレーティングシステムにインストールした後再起動する必要がなく繁雑な作業を不要とすることができる。
【００７４】
また、統合ドライバはインターフェース（MIDI out API）を通じて受け取ったＭＩＤＩメッセージ中の各パートの選択情報（プログラムチェンジおよびバンクセレクト）により、統合ドライバに登録されているＭＩＤＩドライバを切り替えることができる。したがって、演奏中においてダイナミックにＭＩＤＩドライバを切り替えることができるようになる。
さらに、規格準拠のＭＩＤＩドライバにおいては、楽音波形データの時間管理をすることなく生成された楽音波形データをストリームを通じて統合ドライバに送るようにしている。そして、統合ドライバにおいて、複数のＭＩＤＩドライバから送られた楽音波形データの時間管理を行いながら、複数のＭＩＤＩドライバから送られた楽音波形データをそれぞれ加算して１フレームの楽音波形データにまとめるようにしている。このため、各ＭＩＤＩドライバにおいて楽音波形データの時間管理を行う必要がなく、そのための負担を軽減することができる。従って、ＣＰＵへの負担を軽くすることができる。
【００７５】
さらに、統合ドライバは、同時に複数のＭＩＤＩドライバを使用することができるが、楽音波形データの出力先として１つのＷＡＶＥドライバを使用するだけとされるため、ＷＡＶＥドライバが不足することを防止することができる。
さらにまた、規格準拠のＭＩＤＩドライバに限らず、規格非準拠のＭＩＤＩドライバも使用して楽音波形データを生成することができるので、それぞれのパートの楽音波形データをいろいろな性質を有するＭＩＤＩドライバにより生成することができるようになる。
【図面の簡単な説明】
【図１】  本発明のコンピュータソフトウェアを用いた本発明の複数音源ドライバの制御方法におけるソフトウェア構造を示す図である。
【図２】  本発明のコンピュータソフトウェアを用いた複数音源ドライバの制御方法の実施に使用するハードウェア構成を示すブロック図である。
【図３】  図２に示す波形インターフェースの詳細構成を示す図である。
【図４】  ハード音源用のＭＩＤＩドライバ１（ハード音源）のメインルーチンのフローチャート（ＨＴＧドライバメイン）を示す図である。
【図５】  アプリケーションソフトウェアであるソフト音源から構成されているＭＩＤＩドライバのメインルーチンのフローチャート（ＳＴＧドライバメイン）を示す図である。
【図６】  統合ドライバのメインルーチンのフローチャート（統合ドライバメイン処理）を示す図である。
【図７】  図７（ａ）はＭＩＤＩドライバの登録処理のフローチャート、図７（ｂ）はＭＩＤＩドライバの削除処理のフローチャート、図７（ｃ）は登録マップを示す図である。
【図８】  ＭＩＤＩ処理で実行される音色切換イベント処理のフローチャートを示す図である。
【図９】  ＭＩＤＩ処理で実行されるその他イベント処理のフローチャートを示す図である。
【図１０】  ＭＩＤＩ処理で実行されるタイマｄ割込処理のフローチャートを示す図である。
【図１１】  ＷＡＶＥ処理で実行されるトリガタイマ割込処理のフローチャートを示す図である。
【図１２】  ＷＡＶＥ処理で実行されるＷＡＶＥ処理のフローチャートを示す図である。
【図１３】  従来の音源システムにおけるソフトウェア構造を示す図である。
【符号の説明】
１  音楽ソフト、２  オペレーティングシステム（ＯＳ）、３  統合ドライバ、４  統合ツールライブラリ、５  ＭＩＤＩドライバ１（ハード音源）、６  ＭＩＤＩドライバ２（ソフト音源）、７  ＭＩＤＩドライバ３（ソフト音源）、８  ＭＩＤＩドライバ４（ソフト音源）、９  ＷＡＶＥドライバ１、１０  ハード音源、１１  ＣＯＤＥＣ、２０  ＣＰＵバス、２１  ＣＰＵ、２２  ＲＯＭ、２３ＲＡＭ、２４  タイマ、２５  ＭＩＤＩインターフェース、２６  ハードディスク、２７  リムーバブルディスク、２８  表示器、２９  キーボード＆マウス、３０  波形インターフェース、３１  ＡＤＣ、３２  ＤＭＡＣ１、３３  Ｆｓ発生器、３４  ＤＭＡＣ２，３５  ＤＡＣ
【図１】
0003945393.tif 000002
【図２】
0003945393.tif 000003
【図３】
0003945393.tif 000004
【図４】
0003945393.tif 000005
【図５】
0003945393.tif 000006
【図６】
0003945393.tif 000007
【図７】
0003945393.tif 000008
【図８】
0003945393.tif 000009
【図９】
0003945393.tif 000010
【図１０】
0003945393.tif 000011
【図１１】
0003945393.tif 000012
【図１２】
0003945393.tif 000013
【図１３】
0003945393.tif 000014