(57)【特許請求の範囲】
【請求項１】
所定のオペレーティングシステムと該オペレーティングシステム上で動く所定のアプリケーションプログラムとを搭載したコンピュータを用いて、音の波形サンプルデータを生成するための音源システムであって、
前記オペレーティングシステムに備わった波形入力用インタフェース及び波形出力用のプログラムを具備すると共に、前記アプリケーションプログラムにプラグインされたソフトウェア音源のプログラムを具備し、
前記コンピュータは、前記ソフトウェア音源のプログラムとその他のプログラムを並行して実行する制御を行うメイン制御部を有し、このメイン制御部は、所定時間内の複数回の起動機会のうち、前記ソフトウェア音源のプログラムを実際に実行してよい機会に起動命令を発生する起動命令発生手段を具備しており、
前記ソフトウェア音源において、前記起動命令に応じて波形サンプルデータ生成処理を実際に起動した機会だけで、通算として前記所定時間内に所定サンプル数分の波形サンプルデータを生成させるように、波形サンプルデータ生成処理を調整する調整処理手段を具備しており、
前記メイン制御部による前記アプリケーションプログラムの実行に応じて該アプリケーションプログラムから与えられる命令に従って前記起動命令発生手段が前記起動命令を発生して前記ソフトウェア音源のプログラムを起動させ、この起動に応じて前記メイン制御部が該ソフトウェア音源のプログラムを実行することで波形サンプルデータを生成する処理を行なうと共にこの生成した波形サンプルデータを前記波形入力用インタフェースに出力し、この波形サンプルデータ生成処理は前記調整処理手段により通算として前記所定時間内に所定サンプル数分の波形サンプルデータを生成させるように調整され、
前記コンピュータが前記オペレーティングシステムに備わった前記波形出力用のプログラムを実行することで前記波形入力インタフェースを介して与えられる前記生成済みの波形サンプルデータを外部に出力する
ことを特徴とするコンピュータソフトウェアを用いた音源システム。
【請求項２】
前記アプリケーションプログラムにプラグインされた自動演奏用シーケンサのプログラムを更に具備し、前記メイン制御部による該シーケンサのプログラムの実行によって自動的に発生すべき楽音を指示する命令が与えられ、この命令に基づき前記メイン制御部により前記ソフトウェア音源のプログラムが実行されることで、前記指示された楽音の音波形サンプルデータを生成することを特徴とする請求項１に記載のコンピュータソフトウェアを用いた音源システム。
【請求項３】
前記メイン制御部は、前記アプリケーションプログラムから前記ソフトウェア音源のプログラムの呼び出しがあったとき、該ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば後からの呼び出しを受け付けない処理を行うものである請求項１又は２に記載のコンピュータソフトウェアを用いた音源システム。
【請求項４】
前記メイン制御部は、前記アプリケーションプログラムから前記ソフトウェア音源のプログラムの呼び出しがあったとき、該ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば該実行中の処理を中止し、後からの呼び出しを受け付けて該ソフトウェア音源のプログラムを実行するものである請求項１又は２に記載のコンピュータソフトウェアを用いた音源システム。
【請求項５】
前記メイン制御部は、前記アプリケーションプログラムから前記ソフトウェア音源のプログラムの呼び出しがあったとき、該ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば、後からの呼び出しを受け付けない処理を行うか、又は、該実行中の処理を中止して後からの呼び出しを受け付ける処理を行うか、のどちらかを選択可能に実行するものである請求項１又は２に記載のコンピュータソフトウェアを用いた音源システム。
【請求項６】
前記調整処理手段は、各起動命令に対応する時点において、その時点までに生成処理すべき波形サンプルデータの未処理量の関数として、該時点の１起動命令に応じて生成すべき波形サンプルデータの量を決定するものであり、前記ソフトウェア音源において、該決定されたデータ量分の波形サンプルデータを生成する処理を、該１起動命令に応じて実行するようにした請求項１乃至５のいずれかに記載のコンピュータソフトウェアを用いた音源システム。
【請求項７】
所定のオペレーティングシステムと該オペレーティングシステム上で動く所定のアプリケーションプログラムとを搭載したコンピュータを用いて、音波形サンプルデータを生成するための方法であって、
前記コンピュータのメモリに、前記アプリケーションプログラムにプラグインされるソフトウェア音源のプログラムを記憶させる処理と、
前記コンピュータの制御部による前記アプリケーションプログラムの実行中に、前記プラグインされたソフトウェア音源のプログラムを呼び出す処理と、
前記アプリケーションプログラムからの呼び出しに応じて、前記コンピュータ制御部により前記ソフトウェア音源のプログラムを起動させる処理であって、所定時間内の複数の起動機会のうち、前記ソフトウェア音源のプログラムを実際に実行してよい機会に起動命令を発生するものと、
前記起動命令に応じて起動された前記ソフトウェア音源のプログラムを前記コンピュータの制御部により実行することによって、再生すべき音を指示する演奏データを受け付けるステップと、受け付けた演奏データに基づき、１回の起動機会毎に複数サンプリング周期分のサンプルの音波形サンプルデータをまとめて生成し、生成した複数サンプリング周期分のサンプルの音波形サンプルデータを出力バッファに一時蓄積するステップと、前記起動命令に応じて前記音波形サンプルデータの生成処理を実際に起動した機会だけで、通算として前記所定時間内に所定サンプル数分の波形サンプルデータを生成させるように、前記音波形サンプルデータの生成処理を調整するステップと、出力デバイスのプログラムを起動するステップとを含む処理を、前記コンピュータの制御部に実行させることと、
起動された前記出力デバイスのプログラムを前記コンピュータの制御部により実行することによって、前記出力バッファに一時蓄積された音波形サンプルデータを所定の再生サンプリングクロックに従って読み出し、外部に対して出力する処理を、前記コンピュータの制御部に実行させることと
を具備する方法。
【請求項８】
所定のオペレーティングシステムと該オペレーティングシステム上で動く任意のアプリケーションプログラムとを搭載したコンピュータを用いて、音波形サンプルデータを生成するための方法であって、
前記コンピュータのメモリに、前記アプリケーションプログラムにプラグインされる自動演奏用シーケンサ及びソフトウェア音源のプログラムを記憶させる処理と、
前記コンピュータの制御部による前記アプリケーションプログラムの実行中に、前記プラグインされた自動演奏用シーケンサ及びソフトウェア音源のプログラムを呼び出す処理と、
前記アプリケーションプログラムからの呼び出しに応じて、前記コンピュータ制御部により前記自動演奏用シーケンサ及びソフトウェア音源のプログラムを起動させる処理であって、所定時間内の複数の起動機会のうち、前記ソフトウェア音源のプログラムを実際に実行してよい機会に該ソフトウェア音源のプログラムの起動命令を発生するものと、
起動された前記自動演奏用シーケンサ及びソフトウェア音源のプログラムを前記コンピュータの制御部により実行することによって、自動演奏データを受け付けるステップと、受け付けた自動演奏データの再生イベントに従って再生べき音を指示する演奏データを順次提供するステップと、提供された演奏データに基づき、前記起動命令に応じた前記ソフトウェア音源のプログラムの１回の起動機会毎に複数サンプリング周期分のサンプルの音波形サンプルデータをまとめて生成し、生成した複数サンプリング周期分のサンプルの音波形サンプルデータを出力バッファに一時蓄積するステップと、前記起動命令に応じて前記音波形サンプルデータの生成処理を実際に起動した機会だけで、通算として前記所定時間内に所定サンプル数分の波形サンプルデータを生成させるように、前記音波形サンプルデータの生成処理を調整するステップと、出力デバイスのプログラムを起動するステップとを含む処理を、前記コンピュータの制御部に実行させることと、
起動された前記出力デバイスのプログラムを前記コンピュータの制御部により実行することよって、前記出力バッファに一時蓄積された音波形サンプルデータを所定の再生サンプリングクロックに従って読み出し、外部に対して出力する処理を、前記コンピュータの制御部に実行させることと
を具備する方法。
【請求項９】
前記アプリケーションプログラムから呼び出しを受けたとき、前記ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば後からの呼び出しに応じて前記ソフトウェア音源のプログラムを起動しないようにする処理を前記コンピュータの制御部に実行させることを更に具備する請求項７又は８に記載の方法。
【請求項１０】
前記アプリケーションプログラムから呼び出しを受けたとき、前記ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば該実行中の処理を中止し、後からの呼び出しに応じて前記ソフトウェア音源のプログラムを起動する処理を前記コンピュータの制御部に実行させることを更に具備する請求項７又は８に記載の方法。
【請求項１１】
前記アプリケーションプログラムから呼び出しを受けたとき、前記ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば該実行中の処理を一時中止し、後からの呼び出しに応じて前記ソフトウェア音源のプログラムを起動する処理を前記コンピュータの制御部に実行させることと、
その後、前記アプリケーションプログラムかのら呼び出しに応じて前記一時中止した処理を再開する処理を前記コンピュータの制御部に実行させることと
を更に具備する請求項７又は８に記載の方法。
【請求項１２】
前記アプリケーションプログラムから呼び出しを受けたとき、前記ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば、後からの呼び出しに応じて前記ソフトウェア音源のプログラムを起動しないようにするか、又は、該実行中の処理を中止して後からの呼び出しに応じて前記ソフトウェア音源のプログラムを起動するか、の選択を行う処理を前記コンピュータの制御部に実行させることを更に具備する請求項７又は８に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、ＣＰＵのような汎用の演算処理手段すなわちコンピュータを使用して、ソフトウェアとして記述された音波形サンプルデータ生成処理プログラムを実行することに基づき音波形サンプルデータを生成する音源システム及び方法に関する。
【０００２】
【従来の技術】
電子楽器では、楽音生成処理（楽音生成処理によって生成した楽音波形データにエフェクトを付加する処理を含む場合もある）を、マイクロプロセッサに実行させることが広く行なわれている。そのようなマイクロプロセッサとしては、楽音生成方式（例えば波形メモリ方式やＦＭ合成方式等）に応じた回路構成を採用して成る専用のハードウェア（例えば音源ＬＳＩやＤＳＰ（ディジタルシグナルプロセッサ）等）を設計することが一般的であった。
【０００３】
しかし、近年、ＣＰＵの演算能力の向上に伴って、汎用コンピュータや専用の楽音発生装置に搭載したＣＰＵにおいて、所定の楽音生成処理手順を記述したプログラムを実行させることにより、楽音波形データを生成させるようにしたものが登場している。ここでは、そのような楽音生成処理プログラムを基礎としている楽音生成装置や楽音生成方法のことをＣＰＵ音源またはソフトウェア音源（必要に応じてソフト音源と略称する）と呼び、これに対し、専用のハードウェアを使用する従来からの楽音生成装置や楽音生成方法をハード音源と呼ぶことにする。
【０００４】
一方、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）ブラウザや、ワープロソフト、表計算ソフト等の各種アプリケーションソフトウェアにおいては、プラグイン機能によって、所定の機能を実行するプラグインソフトを取り込むことができるものがある。例えば、自動演奏用のシーケンサ機能を実現するプラグインソフトが知られており、これを使用することによりＭＩＤＩ（Ｍｕｓｉｃａｌ  Ｉｎｓｔｒｕｍｅｎｔ  Ｄｉｇｉｔａｌ  Ｉｎｔｅｒｆａｃｅ）ファイルの再生が可能である。しかし、シーケンサ機能を実現するソフトウェアだけでは、楽音波形サンプルデータの生成を行うことができず、音源ボードと言われるハード音源をコンピュータに搭載し、このハード音源によって再生されたＭＩＤＩメッセージに基づく楽音波形サンプルデータを生成するようにしていた。ところで、この種の音源ボードには種々のタイプのものがあり、そのタイプやグレードによって、同じ内容のＭＩＤＩメッセージに対して生成される楽音の特性は異なるものとなってしまうことがあった。
【０００５】
【発明が解決しようとする課題】
この発明は、上述の点に鑑みてなされたもので、ソフトウェア音源をアプリケーションソフトにプラグインで取り込み、該アプリケーションソフトの実行中においてソフトウェア音源のプログラムを起動させることにより、音源ボードを必要とすることなく、音波形サンプルデータの生成を行うことができるようにした音源システム及び方法を提供しようとするものである。
【０００６】
ところで、ＭＩＤＩメッセージ等の演奏情報に基づいて楽音発生処理を行おうとする場合、コンピュータが楽音発生処理のみを実行することは希であり、他のソフトウェアのプログラムを同じＯＳ上で並行して処理することが多い。例えば、ゲームソフトを実行するときは、音声発生処理に並行して動画像の発生処理等を行う必要があるし、カラオケソフトを実行する場合でも歌詞画像及び背景画像の発生処理を同時並行的に行う必要がある。そのような場合、ソフトウェア音源を使用する場合、コンピュータはそのソフトウェア音源のプログラムと他の必要なソフトウェアのプログラムを同じＯＳ上で並行して処理することになる。その場合には、他の処理に影響されることなくソフトウェア音源による楽音波形データ生成処理の実行が確保されるようにするために、マルチタスク機能を有するＯＳ（例えばＷｉｎｄｏｗｓ９５（商標）等）上で楽音生成処理を実行させることが望ましい。しかし、完全なマルチタスク機能を有しないＯＳ（例えばＷｉｎｄｏｗｓ３．１（商標）等）も広く普及しており、そうしたＯＳ上でも楽音生成処理を実行させたいというニーズが存在している。しかるに、そうしたＯＳ上では、他のソフトウェアの処理の影響によって楽音生成処理の実行が遅れ、その結果、発音に支障が生じることがあり得るし、逆に、楽音生成処理に長い時間を費やすことに影響されて他の処理の実行が遅れるという問題も起こり得る。特に、従来は、ハードウェア音源を用いていたので、そのような並行処理の問題が起こらなかったアプリケーションソフトにおいて、本発明に従ってソフトウェア音源を使用するようにすると、そのような並行処理の問題が起こるおそれが出てくるので、予め解決策を講ずることが望まれる。
【０００７】
この発明は上述の点に鑑みてなされたもので、完全なマルチタスク機能を有しないＯＳ上でソフトウェア音源による音波形サンプルデータ生成処理と他のソフトウェアの処理を並行して実行させる場合でも、楽音生成処理や他の処理に支障が生じないようにしたコンピュータソフトウェアを用いた音源システム及び方法を提供しようとするものである。
【０００８】
【課題を解決するための手段】
請求項１に記載されたこの発明に係る音源システムは、所定のオペレーティングシステムと該オペレーティングシステム上で動く所定のアプリケーションプログラムとを搭載したコンピュータを用いて、音の波形サンプルデータを生成するための音源システムであって、前記オペレーティングシステムに備わった波形入力用インタフェース及び波形出力用のプログラムを具備すると共に、前記アプリケーションプログラムにプラグインされたソフトウェア音源のプログラムを具備し、前記コンピュータは、前記ソフトウェア音源のプログラムとその他のプログラムを並行して実行する制御を行うメイン制御部を有し、このメイン制御部は、所定時間内の複数回の起動機会のうち、前記ソフトウェア音源のプログラムを実際に実行してよい機会に起動命令を発生する起動命令発生手段を具備しており、前記ソフトウェア音源において、前記起動命令に応じて波形サンプルデータ生成処理を実際に起動した機会だけで、通算として前記所定時間内に所定サンプル数分の波形サンプルデータを生成させるように、波形サンプルデータ生成処理を調整する調整処理手段を具備しており、前記メイン制御部による前記アプリケーションプログラムの実行に応じて該アプリケーションプログラムから与えられる命令に従って前記起動命令発生手段が前記起動命令を発生して前記ソフトウェア音源のプログラムを起動させ、この起動に応じて前記メイン制御部が該ソフトウェア音源のプログラムを実行することで波形サンプルデータを生成する処理を行なうと共にこの生成した波形サンプルデータを前記波形入力用インタフェースに出力し、この波形サンプルデータ生成処理は前記調整処理手段により通算として前記所定時間内に所定サンプル数分の波形サンプルデータを生成させるように調整され、前記コンピュータが前記オペレーティングシステムに備わった前記波形出力用のプログラムを実行することで前記波形入力インタフェースを介して与えられる前記生成済みの波形サンプルデータを外部に出力することを特徴とするものである。
【０００９】
これによって、ソフトウェア音源のプログラムをアプリケーションプログラムにプラグインで組み込むだけで、コンピュータを使用した音波形サンプルデータ生成を容易に行うことができるようになり、かつ、格別の音源ボードが不要となる、という優れた効果を奏する。また、どのようなコンピュータを使用しても、そのハードウェア構成にかかわらず、プラグインしたソフトウェア音源プログラムに応じた均質の楽音特性を持つ音波形サンプルデータを生成することができるようになる。
【００１０】
この発明の音源システムは、前記アプリケーションプログラムにプラグインされた自動演奏用シーケンサのプログラムを更に具備し、該シーケンサのプログラムの実行によって自動的に発生すべき楽音を指示し、前記ソフトウェア音源のプログラムでは、前記指示された楽音の音波形サンプルデータを生成するようにしてもよい。これによって、アプリケーションプログラムを介して任意の自動演奏データファイル（例えばＭＩＤＩファイル）を受け取ることにより、アプリケーションプログラムの実行中において、その自動演奏データファイルを再生演奏することができる。この場合、ソフトウェア音源のプログラムと自動演奏用シーケンサのプログラムは、それぞれ別モジュールのソフトウェアであってもよいし、別モジュールのソフトウェアでなくてもよい。すなわち、１つのソフトウェアの中に自動演奏用シーケンサのプログラムとソフトウェア音源のプログラムとが一体的に組み込まれていてもよい。
【００１１】
ところで、高度なアプリケーションプログラム（例えばＷＷＷブラウザ）においては、例えばインターネットのホームページを２箇所同時にアクセスすることができるものがある。そのような場合、アクセス中の２つのホームページの双方で音楽ソフトの再生を行うようなことが起こり得る。そうすると、該アプリケーションプログラムにプラグインされたソフトウェア音源プログラムが重複して起動されることになり、異常動作が起こる可能性がある。
このような異常動作を未然に防止するための１つの対策として、ソフトウェア音源のプログラムにおいて、前記アプリケーションプログラムから呼び出しを受けたとき、該ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば後からの呼び出しを受け付けない処理を行うようにするとよい。これによって、アプリケーションプログラムにプラグインされたソフトウェア音源プログラムが重複して起動されることなく、先に起動中の波形生成処理を優先して遂行させることができる。
そのための別の対策として、ソフトウェア音源のプログラムにおいて、前記アプリケーションプログラムから呼び出しを受けたとき、該ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば該実行中の処理を中止し、後からの呼び出しを受け付けるようにしてもよい。これによって、アプリケーションプログラムにプラグインされたソフトウェア音源プログラムが重複して起動されることなく、先に実行中の波形生成処理を中止し、後から呼び出しのかかった波形生成処理を優先して実行することができる。
【００１２】
更にそのための別の対策として、ソフトウェア音源のプログラムにおいて、前記アプリケーションプログラムから呼び出しを受けたとき、該ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば、後からの呼び出しを受け付けない処理を行うか、又は、該実行中の処理を中止して後からの呼び出しを受け付ける処理を行うか、のどちらかを選択可能に実行するようにしてもよい。この場合の選択の仕方としては、ディスプレイ画面に選択用のアイコンを表示して、操作者によってどちらかを選択させるようにしてもよいし、あるいは、再生すべき自動演奏データファイル中若しくはその他の適宜の領域に選択情報を格納しておき、この選択情報を参照して自動的に選択するようにしてもよい。あるいは、ディスプレイ画面における表示形態（例えば開いたページ画像の前後関係など）に応じてどちらでソフトウェア音源を使用するかを自動的に選択するようにしてもよいし、若しくはランダム選択によって選択するようにしてもよい。
【００１３】
請求項７に記載されたこの発明に係る方法は、所定のオペレーティングシステムと該オペレーティングシステム上で動く所定のアプリケーションプログラムとを搭載したコンピュータを用いて、音波形サンプルデータを生成するための方法であって、前記コンピュータのメモリに、前記アプリケーションプログラムにプラグインされるソフトウェア音源のプログラムを記憶させる処理と、前記コンピュータの制御部による前記アプリケーションプログラムの実行中に、前記プラグインされたソフトウェア音源のプログラムを呼び出す処理と、前記アプリケーションプログラムからの呼び出しに応じて、前記コンピュータ制御部により前記ソフトウェア音源のプログラムを起動させる処理であって、所定時間内の複数の起動機会のうち、前記ソフトウェア音源のプログラムを実際に実行してよい機会に起動命令を発生するものと、前記起動命令に応じて起動された前記ソフトウェア音源のプログラムを前記コンピュータの制御部により実行することによって、再生すべき音を指示する演奏データを受け付けるステップと、受け付けた演奏データに基づき、１回の起動機会毎に複数サンプリング周期分のサンプルの音波形サンプルデータをまとめて生成し、生成した複数サンプリング周期分のサンプルの音波形サンプルデータを出力バッファに一時蓄積するステップと、前記起動命令に応じて前記音波形サンプルデータの生成処理を実際に起動した機会だけで、通算として前記所定時間内に所定サンプル数分の波形サンプルデータを生成させるように、前記音波形サンプルデータの生成処理を調整するステップと、出力デバイスのプログラムを起動するステップとを含む処理を、前記コンピュータの制御部に実行させることと、起動された前記出力デバイスのプログラムを前記コンピュータの制御部により実行することによって、前記出力バッファに一時蓄積された音波形サンプルデータを所定の再生サンプリングクロックに従って読み出し、外部に対して出力する処理を、前記コンピュータの制御部に実行させることとを具備する。
これによっても、ソフトウェア音源のプログラムをアプリケーションプログラムにプラグインで組み込むだけで、コンピュータを使用した音波形サンプルデータ生成を容易に行うことができるようになり、かつ、格別の音源ボードが不要となる、という優れた効果を奏する。また、どのようなコンピュータを使用しても、そのハードウェア構成にかかわらず、プラグインしたソフトウェア音源プログラムに応じた均質の楽音特性を持つ音波形サンプルデータを生成することができるようになる。
【００１４】
上記方法において、前述と同様に、アプリケーションプログラムに、ソフトウェア音源のプログラムのみならず、自動演奏用シーケンサのプログラムをもプラグインする処理を含んでいてもよい。この場合も、ソフトウェア音源のプログラムと自動演奏用シーケンサのプログラムとは、別モジュールのソフトウェアであるか否かを問わない。
また、上記方法において、前述と同様に、アプリケーションプログラムにプラグインされたソフトウェア音源プログラムが重複して起動されることを防止するための上述の対策を施すようにしてもよい。
【００１６】
この発明に係る音源システムによれば、コンピュータのメイン制御部において起動命令発生手段を設け、波形データ生成処理を起動する機会を所定時間内に複数回設定し、この複数回の機会のうち、前記ソフトウェア音源のプログラムを実際に実行してよい機会にだけ起動命令を発生する。これにより、メイン制御部は、他のプログラムの実行状況との兼ね合いで、ソフトウェア音源のプログラムを実際に実行してよい機会にだけ起動命令を発生することができ、ソフトウェア音源のプログラムとその他のプログラムとを適切に時分割制御して並行して実行させることができる。
【００１７】
一方、ソフトウェア音源において、前記起動命令に応じて波形サンプルデータ生成処理を実際に起動した機会だけで、通算として前記所定時間内に所定サンプル数分の波形サンプルデータを生成させるように、波形サンプルデータ生成処理を調整する調整処理手段を具備することにより、所定時間内に設定された複数回の起動機会のうち何回かの機会で起動命令が発生されなかったとしても、起動命令に応じて波形データ生成処理を実際に起動した機会だけを使用して、通算して上記所定時間内に所定サンプル数分の音波形サンプルデータを生成が完了するように制御される。すなわち、ソフトウェア音源における１回の起動命令に基づく波形サンプルデータ生成処理量がフレキシブルに可変制御され、所定時間内における実際の起動命令発生回数がメイン制御部の状況に依存する可変数であっても、通算して上記所定時間内に所定サンプル数分の音波形サンプルデータを生成が完了するように制御することができる。
【００１８】
従って、完全なマルチタスク機能を有しないＯＳ上でソフトウェア音源による音波形データ生成処理と他のソフトウェアの処理を並行して実行させる場合でも、音波形データ生成処理及び他のソフトウェアの処理に支障が生じないようにすることができる、という優れた効果を奏する。すなわち、他のソフトウェアの処理の影響によって音波形サンプルデータ生成処理の起動命令発生回数が相対的に減ったとしても、通算して上記所定時間内に所定サンプル数分の音波形サンプルデータを生成が完了するように制御されるので、発音遅れ等の支障が生じることがなくなる。逆に、音波形サンプルデータ生成処理を固定の時分割的処理時間で行わないことにより、他のソフトウェアの処理の実行が音波形データ生成処理によって阻害されてその処理が遅れるという問題が起こらないようにすることができる。
【００１９】
一実施態様として、前記調整処理手段は、各起動命令に対応する時点において、その時点までに生成処理すべき波形サンプルデータの未処理量の関数として、該時点の１起動命令に応じて生成すべき波形サンプルデータ量を決定するものであってよく、その場合、前記ソフトウェア音源は、該決定された波形サンプルデータ量分の波形サンプルデータを生成する処理を、該１起動命令に応じて実行する。これによって、上記関数を適切に定めることにより、生成処理すべき波形サンプルデータの未処理量との兼ね合いで、１起動命令に応じて生成すべき波形サンプルデータ量を適切に決定することができ、１起動命令に対応するソフトウェア音源の処理によってメイン制御部の作業が占有されることによって他の処理の実行が阻害されることが起こる確率をできるだけ低くするように制御することができるようになる。
【００２０】
【発明の実施の形態】
以下、添付図面を参照してこの発明の実施の形態を詳細に説明しよう。
図１は、この発明に従う音源システムの一実施形態のソフトウェアシステム構成例を概念的に示す図である。
オペレーティングシステム（ＯＳ）としては、例えばＷｉｎｄｏｗｓ９５（マイクロソフト社の商標）を使用する。なお、使用するアプリケーションソフトによっては別のＯＳ、例えばＷｉｎｄｏｗｓ３．１（マイクロソフト社の商標）を使用してもよい。この種のＯＳには、音波形サンプルデータを受け付けるための波形入力用インターフェース（例えば“ｗａｖｅＡＰＩ”）が用意されている。また、この波形入力用インターフェース（“ｗａｖｅＡＰＩ”）を介して受け取った波形サンプルデータを外部のハードウェアに対して出力する処理を行う波形出力用ドライバモジュール（以下「出力デバイス」とも言う）がインストールされている。
【００２１】
このＯＳに所定のアプリケーションソフトＡＰＳがインストールされ、そのプログラム内容に応じた処理を行うことができる。この所定のアプリケーションソフトＡＰＳは、任意のプラグインソフトウェアをプラグインで組み込むことができる機能を有するものであり、一例として、ＷＷＷブラウザ（例えば“Ｎｅｔｓｃａｐｅ  Ｎａｖｉｇａｔｏｒ”（商標））のようなインターネット検索ソウトウェアを使用してよい。この発明に従って、アプリケーションソフトＡＰＳに、所定のソフトウェア音源のプログラムを含むプラグインソフトＰＩＳがプラグインされる。このプラグインソフトＰＩＳは、ソフトウェア音源のプログラムに限らず、自動演奏用のシーケンサプログラムを含んでいてよい。また、前述の通り、自動演奏用のシーケンサプログラムとソフトウェア音源のプログラムは別々のソフトウェアモジュールを組み合わせたものであってもよいし、両者を一体的にプログラムしたものであってもよい。
【００２２】
通信ネットワークへコンピュータを接続するための入出力ハードウェア装置としてネットワークＩ／Ｏ（入出力装置）が設けられ、また、ＯＳにはネットワークドライバが組み込まれ、これによって、アプリケーションソフトＡＰＳが外部の通信ネットワークに接続される。例えば、アプリケーションソフトＡＰＳの実行時において、外部の通信ネットワークを介して任意の音楽の自動演奏データファイル（ＭＩＤＩファイル）を取り込み、これに基づきプラグインソフトＰＩＳを起動させて、該自動演奏データファイルの曲を再生演奏することができる。すなわち、プラグインソフトＰＩＳ内のシーケンサプログラムを実行することによってＭＩＤＩメッセージを順次再生し、該プラグインソフトＰＩＳ内のソフト音源プログラムを実行することによって該再生されたＭＩＤＩメッセージに対応する楽音の音波形サンプルデータを生成する。プラグインソフトＰＩＳ内のソフト音源プログラムの実行によって生成された波形サンプルデータは、前記波形入力用インターフェース（“ｗａｖｅＡＰＩ”）を介してＯＳに渡され、波形出力用ドライバ（すなわち「出力デバイス」）を介して外部の装置例えばｃｏｄｅｃハードウェア（すなわちディジタル／アナログ変換器ＤＡＣ）に対して出力される。波形出力用ドライバ（すなわち「出力デバイス」）は、例えば、ソフト音源プログラムの処理によって生成されてハードディスクのような記憶装置にバッファ記憶された波形データをダイレクトメモリアクセスコントローラ（ＤＭＡＣ）を介して読み出して、例えばディジタル／アナログコンバータ（ＤＡＣ）を含む外部ハードウェアに対して出力する処理を行うソフトウェアからなっている。
【００２３】
なお、上記ＯＳを具備したコンピュータに対して、通信ネットワークを介して任意の上記アプリケーションソフトＡＰＳを転送し、インストールするようにしてもよい。また、通信ネットワークを介して任意の上記プラグインソフトＰＩＳを転送し、これを該アプリケーションソフトＡＰＳにプラグインするようにしてもよい。
プラグインされたソフトＰＩＳは、アプリケーションソフトＡＰＳからの命令を受け取るだけのみならず、該ソフト音源プログラム又はシーケンサプログラム中にイメージ情報が埋め込まれている場合、これをアプリケーションソフトＡＰＳに与えてディスプレイ表示させる。例えば、ソフト音源プログラム及びシーケンサプログラムの動作を制御するための各種機能スイッチ類のアイコン表示情報をアプリケーションソフトＡＰＳに与えてこれをディスプレイ表示させ、各種機能スイッチ類の操作を可能にする。
【００２４】
図２は、通信ネットワークの一例を概念的に示す図である。この図では、インターネットを介してＷＷＷサーバー、その他のサーバー、プロバイダーが接続され、個別ユーザーのパソコン（パーソナルコンピュータ）が公衆回線を介してプロバイダーに接続され、所要のサーバーにＬＡＮを介して個別のパソコンが接続される、といった状態が例示されている。図２に示された各パソコン内において、図１に示されたソフトウェアシステムが構築される。
【００２５】
図３は、この発明に係るコンピュータソフトウェアを用いた音源システムの実施に使用するハードウェア構成例を示す全体ブロック図である。この図３は、１つのパソコンのハードウェア構成例を示すものであり、すなわち、図１に示されたソフトウェアシステムを駆動するためのハードウェア構成例を示している。
この音源システムでは、メイン制御部としてパーソナルコンピュータのＣＰＵ（中央処理部）３を使用し、このＣＰＵ３の制御の下でアプリケーションソフトＡＰＳを実行し、かつ該アプリケーションソフトＡＰＳの実行中において起動されるソフトウェア音源プログラムによる波形サンプルデータ生成処理とその他のプログラムの処理を並行して実行する。なお、以下では「楽音生成処理」という用語も使用するが、これは「波形サンプルデータ生成処理」と実質的に同義であり、さらには「波形サンプルデータ生成処理」のみならずエフェクト等の各種楽音処理を含んでいてよい。なお、以下では、「波形データ生成処理」という用語も使用するが、これは「波形サンプルデータ生成処理」と同義である。すなわち、「波形サンプルデータ」と「波形データ」は同義に用いることにする。
【００２６】
ＣＰＵ３には、ネットワークＩ／Ｏ（入出力装置）１，タイマ２，ＲＯＭ（リードオンリーメモリ）４，ＲＡＭ（ランダムアクセスメモリ）５，マウス７，キーボード８，ディスプレイ９，ハードディスク装置１０，ＤＭＡＣ（ダイレクトメモリアクセスコントローラ）１１，サウンドＩ／Ｏ（入出力装置）１２，サンプリングクロック発生回路１４，外部メモリドライブ１６が、データ及びアドレスバス６を介して接続されている。
ＤＭＡＣ１１は、楽音生成処理の実行によって生成されてＲＡＭ５内の出力バッファに書き込まれた楽音データを、サウンドＩ／Ｏ１２からの再生サンプリングクロックに同期して１サンプルずつダイレクトメモリアクセス方式で出力バッファから読み出してサウンドＩ／Ｏ１２に送る処理（再生処理）を実行する。
【００２７】
サウンドＩ／Ｏ１２は、ＣＯＤＥＣと呼ばれるサウンド入出力装置であって、その内部にはディジタル／アナログ変換器（ＤＡＣ）、アナログ／ディジタル変換器（ＡＤＣ）、ＡＤＣに接続された入力用のＦＩＦＯ（先入れ先出しバッファ）、ＤＡＣに接続された出力用のＦＩＦＯを含んでいる。このサウンドＩ／Ｏ１２内の前記ＡＤＣには外部オーディオ信号入力端子１５からアナログオーディオ信号が入力され、サンプリングクロック発生回路１４から発生される所定の周波数（例えば４８ｋＨｚ）のサンプリングクロックＦｓに応じてこれをＡ／Ｄ変換し、このＡ／Ｄ変換したオーディオ信号を前記入力用のＦＩＦＯに取り込む。また、前記ＤＭＡＣ１１の制御によって前記出力用のＦＩＦＯに書き込まれた波形サンプルデータを前記サンプリングクロックＦｓに従って該出力用のＦＩＦＯから読み出し、前記ＤＡＣに与えてＤ／Ａ変換する。そして、前記入力用ＦＩＦＯにデータが存在するとき、または、前記出力用ＦＩＦＯに空きがあるとき、データ処理を要求する信号をＤＭＡＣ１１に出力するように動作する。
上記ＤＡＣでアナログ変換された音波形サンプルデータは、サウンドシステム１３に送られて音響的に発音される。
【００２８】
ハードディスク装置１０内のハードディスクには、ＯＳ（ここでは、マイクロソフト社製のＷｉｎｄｏｗｓ３．１（商標）を使用するものとする）やユーティリティソフトといったソフトウェアの他に、アプリケーションソフトＡＰＳと、そこにプラグインされたプラグインソフトＰＩＳ（ソフト音源プログラムとシーケンサプログラムを含む）が格納され、更に、複数種類の音色についての１または複数周期分の波形サンプルデータ群を予め記憶した波形データメモリの領域を含んでいる。なお、各種プログラムをハードディスク装置１０に記憶してもよいし、あるいはＲＡＭ５又はＲＯＭ４に記憶してもよい。なお、以下の説明では、ハードディスク装置１０内の波形データメモリに予め記憶されている「波形データ」群と、ソフトウェア音源プログラムの処理によってこの記憶波形データを利用して（読み出して）生成する「波形サンプルデータ」とを区別するために、ソフトウェア音源プログラムの処理によって生成する「波形サンプルデータ」を「楽音データ」ということにする。
外部メモリドライブ１６は、フロッピーディスクあるいはＣＤ−ＲＯＭやＭＯなどの外部記録媒体１７を着脱自在に装着して、該外部記録媒体１７に対するデータの読み書きを行うものである。外部記録媒体１７は、アプリケーションソフトＡＰＳやプラグインソフトＰＩＳのプログラムを格納するために使用してもよいし、波形データ等を格納するために使用してもよい。
【００２９】
図１７は、この発明に係るコンピュータソフトウェアを用いた音源システムにおけるアプリケーションソフトＡＰＳとプラグインソフトＰＩＳと間の情報のやりとり例を簡単に示す説明図である。図に沿って処理手順の概略を説明すると、まず、アプリケーションソフトＡＰＳの実行中に「演奏データ有り」と判定されると、音源用のプラグインソフトＰＩＳ（本例では、自動演奏用シーケンサプログラムとソフト音源プログラムの双方を含んでいるとして説明する）に対して「初期化指示」を与え、該プラグインソフトＰＩＳを起動する。例えば、アプリケーションソフトＡＰＳが、インターネットのブラウザである場合、ＭＩＤＩファイルの有るページを開けたとき、そのＭＩＤＩファイルがユーザのパソコンに転送されてくる。このとき、実行中のアプリケーションソフトＡＰＳでは上記のように「演奏データ有り」と判定し、音源用のプラグインソフトＰＩＳを起動する。
【００３０】
音源用プラグインソフトＰＩＳでは、アプリケーションソフトＡＰＳから与えられる上記「初期化指示」に応じて所定の「初期化」処理を行い、該プラグインソフトＰＩＳを起動する。
アプリケーションソフトＡＰＳでは、プラグインソフトＰＩＳにより「初期化」処理が行われたことを確認すると、「ＯＰＥＮ指示」をプラグインソフトＰＩＳに与える。
プラグインソフトＰＩＳでは、上記「ＯＰＥＮ指示」に応じて所定のイメージ情報をアプリケーションソフトＡＰＳに対して与え、アプリケーション画面中にそのイメージ情報に対応する「コントロールパネル画面」表示を行うことを指示する。これに応じて、アプリケーションソフトＡＰＳでは、ディスプレイ９で表示しているアプリケーション画面中においてプラグインソフトＰＩＳから指示されたイメージ情報に対応する「コントロールパネル画面」を表示する。
【００３１】
図１８はこの「コントロールパネル画面」の表示例を示す。この「コントロールパネル画面」では、シーケンサ用の各種コントロールボタンＣ１〜Ｃ９と所定のロゴＣ１０が表示される。各コントロールボタンＣ１〜Ｃ９は、マウス７のクリックによってオンされる。再生ボタンＣ１は再生演奏開始指示を行うためのもの、ポーズボタンＣ２は演奏中の曲の一時停止を指示するためのもの、停止ボタンＣ３は演奏中の曲の停止を指示するためのもの、テンポダウンボタンＣ４はクリックする毎に演奏中のテンポをダウンするためのもの、テンポリセットボタンＣ５はオリジナルテンポに戻すためのもの、テンポアップボタンＣ６はクリックする毎に演奏中のテンポをアップするためのもの、トランスポーズダウンボタンＣ７はクリックする毎に演奏キーを半音下げるためのもの、トランスポーズリセットボタンＣ８はオリジナルキーに戻すためのもの、トランスポーズアップボタンＣ９はクリックする毎に演奏キーを半音上げるためのもの、である。なお、ボタンＣ４，Ｃ６，Ｃ７，Ｃ９でアップ又はダウンの操作を行うと、所定色（例えば緑）でボタンが点灯することにより、テンポ又はキーの変更操作がなされたことを報知する。また、ロゴＣ１０のエリアをクリックすることにより、ポップアップメニューが表示され、上記各コントロールボタンと同等の機能の操作が行えるようになっている。なお、このポップアップメニューでは、シーケンサの音源として、内部のソフト音源を使用するか、またはＭＩＤＩ  Ｍａｎａｇｅｒを経由して外部の適宜のＭＩＤＩ音源を使用するかの選択も行える。
【００３２】
図１７に戻り、アプリケーションソフトＡＰＩでは、「コントロールパネル画面」の表示処理の後、「ＳＴＲＥＡＭ開始」を指示する。プラグインソフトＰＩＳでは、この「ＳＴＲＥＡＭ開始」指示を受けて、「データ受信開始」状態となる。以後、アプリケーションソフトＡＰＩの側から、上記ＭＩＤＩファイルのデータ（つまりＭＩＤＩメッセージ）を次々に送信し、プラグインソフトＰＩＳでは、これを次々に受信してバッファ記憶する。ＭＩＤＩファイルの全データを送受信し終えると、「再生開始指示」がアプリケーションソフトＡＰＩの側から送信され、プラグインソフトＰＩＳの側では上記ＭＩＤＩファイルの自動演奏再生処理を開始する。やがて「再生終了指示」が与えられると、自動演奏再生処理が終了する。なお、クライアントやサーバーの側で、ＭＩＤＩファイルと共に所定の制御情報を送信することにより、該ＭＩＤＩファイルを取り込んだ側での自動演奏の再生開始及び停止を自動制御するようにすることができる。すなわち、ＭＩＤＩファイルを受信したら速やかに自動演奏を再生開始するように制御情報を組み込むこともできるし、若しくは再生ボタンＣ１のクリックを待って自動演奏を再生開始するように制御情報を組み込むこともできる。また、ＭＩＤＩファイルの再生が１回終わっても、停止ボタンＣ３がクリックされるまで同じＭＩＤＩファイルを繰り返し再生演奏するように制御情報を組み込むこともできるし、若しくはＭＩＤＩファイルの再生が１回終わったらその自動演奏を自動的に停止するように制御情報を組み込むこともできる。
【００３３】
次に、以下で詳細に説明しようとするＣＰＵ３による起動制御に基づく、ソフトウェア音源プログラムによる楽音生成処理の一例の概要を、図４を参照して説明する。
プラグインソフトＰＩＳ内のソフトウェア音源プログラムは、ＣＰＵ３の制御の下で、基本的には、所定の時間長の区間（フレームと呼ぶ）毎に設定される起動機会に応じて起動されて、それぞれその直前のフレーム内に供給されたＭＩＤＩメッセージに基づく楽音生成処理を、各制御パラメータに従って実行する（例えば、図４に示すように、時刻Ｔ１からＴ２までのフレーム内に供給されたＭＩＤＩメッセージに基づく楽音生成処理を、時刻Ｔ２からＴ３までのフレームで実行する）。楽音生成処理の一例として、波形メモリ方式の楽音生成処理では、まず、発音を割り当てられている各発音チャンネル毎に、当該発音チャンネル用の音源レジスタに格納された制御パラメータに従うピッチでＲＡＭ５から波形データを読み出し、その波形データに、音色制御（フィルタ演算）と、音量制御（音量エンベロープデータの乗算）と、ピッチ，音色または音量等の変調制御とを制御パラメータに従って施すことにより、当該発音チャンネルについての所定数サンプル分の楽音データを生成する。そして、各発音チャンネルについての楽音データを累算し、累算した楽音データを（あるいは、累算した楽音データにエフェクトを付加し、その楽音データを）、ＲＡＭ５内の出力バッファに書き込む。そして、その出力バッファの再生を「出力デバイス」に予約する。この出力バッファの再生を「出力デバイス」に予約することが、生成した楽音データをソフト音源からＯＳレベルの波形入力用インターフェース（“ｗａｖｅ  ＡＰＩ”）に与えることに相当する。
【００３４】
「出力デバイス」は、各フレーム毎に、それぞれその直前のフレームで「音源部」によって再生予約された出力バッファから１サンプルずつ楽音データを読み出してサウンドＩ／Ｏ１２に送る（例えば、図４に示すように、時刻Ｔ２からＴ３までのフレームで生成された楽音データを書き込まれて再生予約された出力バッファから、時刻Ｔ３からＴ４までのフレームで楽音データを読み出す）。
こうしたソフトウェアのうち、アプリケーションソフトＡＰＳのプログラムの起動と、プラグインソフトＰＩＳ内のシーケンサプログラムの実行によって発生されたＭＩＤＩメッセージに基づくＭＩＤＩ処理の起動は、リアルタイムに行なわれる。また、「出力デバイス」は、ＤＭＡＣ１１による割込み処理として強制的に起動されるので、時間的な遅れが生じることはない。これに対し、波形サンプルデータそのものの生成処理（楽音生成処理）の起動は、ＣＰＵ３自身の内部割込みによる起動命令によって行なわれるので、完全なマルチタスク機能を有しないＯＳ上でこのソフトウェアを走らせた場合には、他の処理の影響によって楽音生成処理の起動が遅れることにより、発音に支障が生じることがある。そこで、この音源システムでは、次のような対策を講じることにより、発音に支障が生じる事態を防止している。
【００３５】
〔対策１〕
楽音生成処理を起動させる内部割込み信号（すなわち起動命令）を発生するための機会を、各フレーム内でそれぞれ複数回設定し（例えばタイマによって定期的に設定する）、ソフト音源で楽音生成処理を実行してよい機会に対応して内部割込み信号（すなわち起動命令）を実際に発生する。内部割込み信号（すなわち起動命令）に基づく各起動毎に、それぞれ上記所定数サンプル分（１出力バッファ分）の楽音データのうちの一部の楽音データを生成することにより、通算として当該フレーム内に１出力バッファ分の楽音データが生成されるように調整を行なう。そして、いずれかの機会で、内部割込み信号（すなわち起動命令）が発生しなかったために「音源部」が起動せず、その結果楽音データが生成されなかった場合には、その未生成の楽音データを、当該フレーム内のその後の内部割込み信号が発生した機会で併せて生成することにより、当該フレーム内での１出力バッファ分の楽音データの生成が確保されるように調整を行なう。
【００３６】
このように、楽音生成処理を起動させる内部割込み信号（起動命令）を発生する機会を各フレーム毎に複数回設け、この複数回の機会のうち何回か内部割込み信号（起動命令）が発生しなくても、内部割込み信号（起動命令）が発生した機会だけで、当該フレーム内に１出力バッファ分の楽音データの生成を完了するようにしたので、発音に支障が生じる事態が防止される。
図５及び図６は、それぞれこの〔対策１〕の一例を示す図である。これらの例では、１００ミリ秒の長さのフレーム内に、楽音生成処理を起動する内部割込み信号を１０ミリ秒毎のタイミングで（したがって、１フレーム内に合計１０回）発生し、各起動毎に、それぞれ１出力バッファ分の楽音データの１０分の１の量の楽音データを生成するようにしている。
【００３７】
そして、図５の例では、内部割込み信号が発生しなかったタイミングでの未生成の楽音データを、その直後に内部割込み信号が発生した機会で全て生成するようにしている。すなわち、内部割込み信号が発生しなかった２回目の機会（図の１０ミリ秒目）で未生成となった楽音データを、その直後に内部割込み信号が発生した３回目の機会（図の２０ミリ秒目）での処理で、当該機会での楽音データと併せて全て生成し（図では２，３として示している）、内部割込み信号が発生しなかった６，７回目の機会（図の５０及び６０ミリ秒目）で未生成となった楽音データを、その直後に内部割込み信号が発生した８回目の機会（図の７０ミリ秒目）での処理で、当該機会での楽音データと併せて全て生成している（図では６〜８として示している）。この図５のような処理方式は、未生成分がこれを直ちに一括して生成するので、楽音生成遅れが起こりにくい、という利点を持つ。
【００３８】
これに対し、図６の例では、内部割込み信号が発生しなかった機会での未生成の楽音データを、その後に内部割込み信号が発生した複数の機会で分散して生成するようにしている。すなわち、内部割込み信号が発生しなかった２，３回目の機会（図の１０，２０ミリ秒目）で未生成となった楽音データを、その後に内部割込み信号が発生した４，５回目の機会（図の３０及び４０ミリ秒目）での処理で、それらの機会での楽音データと併せてそれぞれ分散して生成している（図ではそれぞれ２，３と４，５として示している）。但し、最後の１０回目の機会（図の９０ミリ秒目）では、当該フレーム内での１出力バッファ分の楽音データの生成を確保するために、内部割込み信号が発生しなかった７，８，９回目の機会（図の６０，７０，８０ミリ秒目）で未生成となった楽音データを全て生成している。この図６のような処理方式は、未生成量が多い場合に、これを適切に分散した回数で処理するので、１回分の処理時間が多すぎないように制御でき、ＣＰＵの有効活用に有利である。
【００３９】
図６では、未生成の楽音データを、１回の起動の機会で生成する量の楽音データに分散してその後に内部割込み信号が発生した機会で生成しているが、これに限らず、未生成の楽音データを、適宜の量の楽音データ（例えば、１回の起動の機会で生成する量の楽音データや、１回の起動の機会で生成する量の１．５倍の楽音データや、１回の起動の機会で生成する量の半分の楽音データ）に分散してその後の機会で生成するようにしてもよい。
また、更に別の例として、内部割込み信号が発生しなかった機会での未生成の楽音データを、当該フレーム内の最後の機会（図５及び図６では１０回目の機会）までに徐々に生成するようにしてもよい。
【００４０】
図１６は、上記と同様に、〔対策１〕の一例を示す図であるが、１回の内部割込み信号（起動命令）に対応して生成される楽音データの量が、図５や図６に示したように１出力バッファ分の楽音データの１０分の１の量の整数倍になるとは限らず、該単位に対する端数を持った量になることがありうる例を示すものである。
この図１６の例では、各内部割込み信号（起動命令）に対応する時点において、その時点までに生成処理すべき楽音データの未処理量の関数として、該時点の１回の内部割込み信号（起動命令）に応じて生成すべき楽音データ量を決定するようにしており、図１６は、そのようにして決定される楽音データの量の一例を内部割込み信号の発生との関係で示す図である。同図では、或るフレームにおいて内部割込み信号が発生した１回目の機会（図の０ミリ秒目）に、当該フレームにおける１出力バッファ分の楽音データの１０分の１の量の楽音データを生成している。そして、内部割込み信号が発生しなかった２及び３回目の機会（図の１０及び２０ミリ秒目）の後、内部割込み信号が発生した４回目の機会（図の３０ミリ秒目）に、未生成の楽音データのうち、１出力バッファ分の楽音データの１０分の１．６の量の楽音データを生成している（したがってこの機会までに通算として当該フレームにおける１出力バッファ分の楽音データの１０分の２．６の量の楽音データを生成したことになり、図ではこのことを２．６と示している）。
【００４１】
続いて、内部割込み信号が発生した５回目の機会（図の４０ミリ秒目）に、１出力バッファ分の楽音データの１０分の１．５の量の楽音データを生成し（したがってこの機会までに通算として１出力バッファ分の楽音データの１０分の４．１の量の楽音データを生成したことになり、図ではこのことを４．１と示している）、内部割込み信号が発生した６回目の機会（図の５０ミリ秒目）に、１出力バッファ分の楽音データの１０分の１．４の量の楽音データを生成している（したがってこの機会までに通算として１出力バッファ分の楽音データの１０分の５．５の量の楽音データを生成したことになり、図ではこのことを５．５と示している）。そして、内部割込み信号が発生しなかった７及び８回目の機会（図の６０，７０ミリ秒目）の後、内部割込み信号が発生した９回目の機会（図の８０ミリ秒目）に、１出力バッファ分の楽音データの１０分の１．７の量の楽音データを生成している（したがってこの機会までに通算として１出力バッファ分の楽音データの１０分の７．２の量の楽音データを生成したことになり、図ではこのことを７．２と示している）。続いて、内部割込み信号が発生した１０回目の機会（図の９０ミリ秒目）に、１出力バッファ分の楽音データの１０分の１．６の量の楽音データを生成している（したがって１フレーム内に通算として当該フレームにおける１出力バッファ分の楽音データの１０分の８．８の量の楽音データを生成したことになり、図ではこのことを８．８と示している）。
【００４２】
そして次のフレームにおいて、内部割込み信号が発生した１回目の機会（図の１００ミリ秒目）に、直前のフレームにおける残りの未生成の楽音データである１出力バッファ分の楽音データの１０分の１．２の量の楽音データと、今回のフレームにおける１出力バッファ分の楽音データの１０分の０．３の量の楽音データとを生成している（図ではこのことを１０．３と示している）。この段階で、１出力バッファ分を超える楽音データが生成されることになるので、そのうち１出力バッファ分の楽音データ量に相当する１０分の１０の量の楽音データについては、生成済みの楽音データ群から取り出して「出力デバイス」に供給して再生予約するものとする。従って、生成中の楽音データとして、１出力バッファ分の楽音データの１０分の０．３の量の楽音データが残されることになる。
【００４３】
続いて、内部割込み信号が発生した２回目の機会（図の１１０ミリ秒目）に、今回のフレームにおける１出力バッファ分の楽音データの１０分の１．４の量の楽音データを生成し（したがってこの機会までに通算として今回のフレームにおける１出力バッファ分の楽音データの１０分の１．７の量の楽音データを生成したことになり、図ではこのことを１．７と示している）、以下同様にして、内部割込み信号が発生した機会毎に、楽音データを生成していく。なお、追って詳しく説明する通り、決定された生成すべき楽音データ量が所定の上限値ＳＲｍａｘを超える場合は、該上限値ＳＲｍａｘの範囲内に収まるように制御される。
【００４４】
このように、図１６の例では、ソフトタイマによる内部割込み信号が発生する毎に、それまでに未生成となっている楽音データの量の関数として、楽音生成処理に要する時間があまり長くならないような一定範囲内で楽音データの生成量を決定し、その量だけ楽音データを生成する処理を実行する。内部割込み信号が発生する毎にこうした処理が実行されることにより、未生成の楽音データが徐々に生成されていくことになる。すなわち、この方式は、内部割込み信号の発生を起動要因として楽音生成処理を実行する点では、図５，図６の例と同じであるから、これらの例と同様の効果を期待することができる。他方、未生成の楽音データを一度に全て生成せずに所定の関数に従って徐々に生成していく点で、それらとは異なっており、その点で特有の効果を有する。すなわち、ＣＰＵ３がソフトウェア音源プログラムによる楽音生成処理のために長時間連続して独占されることはないので、ＣＰＵ３において他のソフトウェアのプログラムを並行して実行する場合や、ソフトウェア音源プログラムにおける優先度の低い他の処理を行なう要求が生じた場合に、それらの処理に比較的速やかに移行させることができるので、資源の効率的な利用が図れる。
【００４５】
すなわち、例えば図５のような方式では、未生成の楽音データの生成を最も早期に行なうことができるという点では優れているが、内部割込み信号が何回も連続して発生しなかったような場合には、その直後に内部割込み信号が発生した機会での楽音データの生成量が大きくなってしまう。このように生成量が大きくなると、一回の起動でソフトウェア音源プログラムによる楽音生成処理を行なうためにＣＰＵ３が費やさなければならない時間が長くなり、したがってＣＰＵ３がソフトウェア音源プログラムによる楽音生成処理の実行のために長時間連続して独占されるようになるので、その実行中にソフトウェア音源プログラムによる楽音生成処理よりも優先順位の低い処理の起動要因が発生しても、ＣＰＵ３がそれらの処理をなかなか実行できなくなってしまうことがある。また、そのように１回分の楽音データ生成量が大きくなると、演算可能時間が残り少ない場合には、楽音データを生成可能な発音チャンネル数が極端に減少してしまうことがある。これに対して、図１６のような方式を採用すれば、それらの問題点を解決することができる。従って、以下で詳細に説明する実施例では、図１６のような方式に従って処理する例について説明することにする。
【００４６】
ところで、内部割込み信号が発生しなかった機会が多くなると、その後の内部割込み信号が発生した機会で、楽音生成処理を割り当てられている全ての発音チャンネルについて楽音データを生成しきれなくなる場合がある。そこで、上記〔対策１〕において、そのような機会では、楽音データを生成する発音チャンネル数を減少させることにより、楽音データの生成を確保するようにすることが望ましい。楽音データを生成する発音チャンネル数を減少させなければならない頻度は、図５の例の場合が最も高く、図６の例の場合や、未生成の楽音データを当該フレーム内の最後の機会までに徐々に生成する場合、あるいは図１６の例の場合には、図５の例の場合よりも低くなる（但し、未生成の楽音データの生成を早期に行なうという観点からは、図５の例が最も望ましい）。
【００４７】
〔対策２〕
各発音チャンネル用の音源レジスタとして、発音チャンネルが未使用である際に割り当てた楽音生成処理を制御するパラメータを格納するための第１の音源レジスタ（表の音源レジスタ）と、当該発音チャンネル使用中となった際に割り当てた新たな楽音生成処理を制御するパラメータを格納するための第２の音源レジスタ（裏の音源レジスタ）とを設ける。そして、当該発音チャンネルで用いるべき音源レジスタとして、新たな楽音生成処理を開始すべきタイミングまでは、表の音源レジスタを選択し、該タイミング以降は、表の音源レジスタに替えて裏の音源レジスタを選択する。
【００４８】
これにより、現在使用中の発音チャンネルに新たな楽音生成処理を割り当てた場合でも、表の音源レジスタを用いて当該発音チャンネルでの現在の楽音生成処理の実行を確保しつつ、当該発音チャンネルでの新たな楽音生成処理を直ちに裏の音源レジスタに用意することができる。したがって、楽音生成処理の用意の遅れを原因とする楽音データの生成の遅れを防止することができる。
【００４９】
〔対策３〕
ＲＡＭ５内に複数の出力バッファの領域を設けておき、楽音生成処理の起動に先行して、そのうちの一部の出力バッファの再生を「出力デバイス」に予約しておく。これにより、他の処理の影響により、各フレームで起動すべき楽音生成処理が当該フレーム内に起動しなくても、先行して再生予約した出力バッファの再生処理が全て完了するまでに楽音生成処理が起動して出力バッファの再生が予約されれば、楽音の再生に音切れが生じなくなる。したがって、音切れを生じさせないための楽音生成処理の起動時間の遅れの許容範囲が拡がる。
【００５０】
図７は、この〔対策３〕の一例を示す図である。この例では、楽音生成処理の起動に先行して、４つの出力バッファの再生を「出力デバイス」に予約している。そして、フレームＦ１の開始時には、それより前のフレームで１出力バッファ分の再生処理が完了したことによって予約数が３になっているが、フレームＦ１の途中に、１出力バッファ分の楽音データの生成が完了してその出力バッファが再生予約されたために、予約数が４に増えている。そして、フレームＦ１の終了時に、次の１出力バッファ分の再生処理が完了したことによって予約数が３に減るが、フレームＦ２の途中に、次の１出力バッファ分の楽音データの生成が完了してその出力バッファが再生予約されたために、予約数が４に増えている。
【００５１】
そしてその後、楽音生成処理の起動の遅れにより楽音データが生成されないために、フレームＦ４の終了時には予約数が１に減っている。そして、フレームＦ５で、再生予約済の最後の出力バッファ（フレームＦ２の途中に再生予約した出力バッファ）が読み出されている（図では、この再生予約と読み出しとの関係を明らかにするために、フレームＦ２の途中に再生予約の発生を太い矢印で示し、フレームＦ５を斜線で網かけしている）が、フレームＦ５の途中に、１出力バッファ分の楽音データの生成が完了してその出力バッファが再生予約されたために、予約数が２に増えている。そしてその後も、再生処理の完了と再生予約の発生とに応じて予約数が増減している。
【００５２】
このように、各フレームで起動すべき楽音生成処理が当該フレーム内に起動しなくても、先行して再生予約した４つの出力バッファの再生処理が全て完了するまでに楽音生成処理が起動して出力バッファの再生が予約されれば、楽音の再生に遅れが生じなくなる。
尚、予約数が４であるときにフレームの途中で次の１出力バッファ分の楽音データの生成が完了した場合には、当該フレームでの再生処理の完了を待って出力バッファの再生予約を行なうことにより、予約数が４を越えないようにするものとする。
【００５３】
この〔対策３〕を実施するためにＲＡＭ５内に設けておくべき出力バッファの数は、楽音生成処理の起動に先行して再生予約する出力バッファの数と、楽音生成処理で生成を完了した楽音データを書き込むための１つの出力バッファと、楽音生成処理で生成した楽音データの量が１出力バッファ分を越えた場合のための予備の出力バッファとの合計（図７の例では、６つ）になる。尤も、楽音生成処理において、生成した楽音データの量が１出力バッファ分を越える場合には生成をストップするようにすれば、予備の出力バッファは不要になる（したがって、図７の例では、５つで足りるようになる）。
【００５４】
〔対策４〕
所定時間内に「出力デバイス」に出力バッファが再生予約されていない場合、そのタイミングで生成完了しているはずの楽音データの生成を打ち切り、そのタイミングで生成開始する楽音データから生成動作を新たに開始する。これにより、再生予約が間に合わず、一時的に楽音が乱れた場合でも、すぐに安定した楽音生成動作に復帰し、ノイズを最小限に抑えることができる。
例えば、前述の〔対策３〕の図７の例では、先行して「出力デバイス」に再生予約した出力バッファの再生処理が全て完了するまでに、楽音生成処理で生成を完了した楽音データを書き込んだ出力バッファが再生予約されている。しかし、他の処理の影響により楽音生成処理の起動が大幅に遅れた場合には、先行して再生予約した出力バッファの再生処理が全て完了した区間内においても、楽音生成処理で生成を完了した楽音データを書き込んだ出力バッファがまだ再生予約されていないこと（予約数が０になること）も起こりうる。そのような場合でも、〔対策３〕及び〔対策４〕を併せて実施すれば、予約数が０になった場合、そのタイミングで生成完了しているはずの楽音データの生成が打ち切られ、「出力デバイス」に出力バッファの再生の先行予約を再び行なった後、そのタイミングで生成開始する楽音データから生成動作が新たに開始する。
【００５５】
次に、以上のような対策の実施を含んだこのコンピュータソフトウェアを用いた音源システムの実施例を、図８以下を参照して説明する。まず、始めに、図１のシステム構成に対応する実施例について説明する。
図８は、ＣＰＵ３によって実行される音源用プラグインソフトＰＩＳのメインルーチンを示すフローチャートである。この例では、音源用プラグインソフトＰＩＳとして、ソフトウェア音源プログラムと自動演奏用シーケンサプログラムとを一体的に組み込んでなるものを使用している。
一般にプラグインソフトＰＩＳのメインルーチンがスタートする条件は、アプリケーションソフトＡＰＳの実行中において、その処理データ中に該アプリケーションソフトＡＰＳでは解釈不能のデータがあった場合、該アプリケーションソフトＡＰＳのプラグインに登録してあるそのデータを処理するソフトがあるかどうかをサーチし、そのプラグインソフトを起動（ＲＡＭにロード）して該ロードしたプラグインソフトに処理を任せることによりスタートする。
従って、図８の音源用プラグインソフトＰＩＳのメインルーチンがスタートする条件は、これを組み込んだアプリケーションソフトＡＰＳの実行中において、スタンダードＭＩＤＩファイルのような音楽情報が埋め込まれたデータを処理する段階に至ったときである。すなわち、アプリケーションソフトＡＰＳからの問合せに応じて、音源用プラグインソフトＰＩＳがロードされて、起動（スタート）する。
【００５６】
音源用プラグインソフトＰＩＳがスタートすると、まず、「初期設定」（ステップＳ１）を実行する。「初期設定」では、図９に示すように、最初に、各発音チャンネル用の音源レジスタ（〔対策２〕として説明したように、表の音源レジスタと裏の音源レジスタとが設けられている）内のデータと、ＲＡＭ５のワークエリア（このワークエリア内には、〔対策３〕として説明したように、複数の出力バッファの領域が含まれている）内のデータとを全てクリアする（ステップＳ２１）。続いて、ハードディスク装置１０内のハードディスクに記録されている所要の音色の波形データをＲＡＭ５にロードする（ステップＳ２２）。続いて、「出力デバイス」を初期設定し（ステップＳ２３）、〔対策３〕として説明したように、楽音生成処理の起動に先行して、データをクリアされた幾つか（ここでは、図７の例と同じく４つとする）の出力バッファの再生を「出力デバイス」に予約する（ステップＳ２４）。続いて、サウンドＩ／Ｏ１２から再生サンプリングクロックＦｓを発生させてＤＭＡＣ１１に与えることにより「出力デバイス」を起動するとともに、楽音生成処理を起動する内部割込み信号（起動命令）を発生するためのソフトタイマ（例えば、ハード的に構成したタイマ２をＣＰＵ３が参照することによって内部割込み信号を発生するようにしたもの）をスタートさせる（ステップＳ２５）。
【００５７】
ソフトタイマは、この内部割込み信号（起動命令）を、前記〔対策１〕として説明したように各フレーム毎にそれぞれ複数の機会で発生可能である（ここでは、図５，図６，図１６の例と同じく、１００ミリ秒の長さのフレーム内に、１０ミリ秒毎に合計１０回の機会において発生することが可能であるものとする）。なお、前述の通り、ソフトタイマによる内部割込み信号（起動命令）は、各起動機会で（つまり１０ミリ秒毎に）必ず発生できるとは限らず、起動機会が到来しても、ＣＰＵ３がＯＳの処理や他のソフトウェアの処理に占有されているときは、ソフトウェア音源プログラムに対する内部割込み信号（起動命令）をかけることができない。そのための起動命令発生手段の構成としては、例えば、タイマ２で１回の起動機会に対応する所定時間（例えば１０ミリ秒）を計時する毎にフラグを立てるようにし、ＣＰＵ３がソフト音源の処理を実行してもよい状態のとき、このフラグの有無をチェックするようにし、未処理のフラグが立っていれば内部割込み信号（起動命令）を発生するようにすると共にそのフラグを消去するようにする。従って、１回の起動機会に対応する所定時間（例えば１０ミリ秒）の間に、ＣＰＵ３がソフト音源の処理をする余裕がある場合は、１回の内部割込み信号（起動命令）が発生される。しかし、１回の起動機会に対応する所定時間（例えば１０ミリ秒）の間に、ＣＰＵ３がソフト音源の処理をする余裕がない場合は、フラグチェックに行かないので、内部割込み信号（起動命令）が発生されることなく、所定時間が経過してしまい、次のフラグが立ってしまう。つまり、前のフラグに対応して内部割込み信号（起動命令）が発生されることがない。こうして、内部割込み信号（起動命令）は、図５，図６，図１６に例示されるように、各起動機会毎に必ず発生できるとは限らないものとなる。また、上記から理解できるように、内部割込み信号（起動命令）がいくつかの各起動機会で連続して発生される場合でも、その発生時間間隔は正確な上記所定時間（例えば１０ミリ秒）とはならず、１０ミリ秒の前後で適宜の変動がある。すなわち、内部割込み信号（起動命令）の微視的な発生タイミングはＣＰＵ３の処理状態（いつタイマフラグを見に行くか）に依存しているからである。
【００５８】
図８に戻り、初期設定を終えると、前記「コントロールパネル画面」（図１８）をディスプレイ９に表示させるための所要の準備処理及びその他必要なデイスプレイ表示準備処理を行う（ステップＳ２）。すなわち、「コントロールパネル画面」のイメージ情報をアプリケーションソフトＡＰＳに与える。アプリケーションソフトＡＰＳでは、前述の通り、イメージ情報を受け取って「コントロールパネル画面」（図１８）をディスプレイ９に表示させる。尚、楽音生成処理の起動に先行して「初期設定」（図９）で出力バッファを「出力デバイス」に再生予約しているので、「出力デバイス」では、この先行予約しした４つの出力バッファについての再生処理が完了してから、その後に再生予約した出力バッファについての再生処理を実行する。したがって、最初の音発生を指示するＭＩＤＩメッセージが発生されてから実際に楽音が再生発音されるまでの時間が、この先行予約した出力バッファの数に等しい数のフレーム分（図７の例では４フレーム分）だけ長くなる（遅れる）ことになる。そこで、ディスプレイ９では、ＭＩＤＩメッセージの発生に基づく何らかの表示を行なう場合には、その表示のタイミングをこのフレーム分だけ後にずらすようにすることが望ましい。
【００５９】
ステップＳ２に続くステップＳ３では、下記の各起動要因の発生をチェックする。
起動要因▲１▼：アプリケーションソフトＡＰＳから１シーケンス分のＭＩＤＩファイルのデータが転送されてきたこと。
起動要因▲２▼：ＭＩＤＩファイルの再生処理（自動演奏シーケンス処理）によってＭＩＤＩイベントタイミングが到来したこと。
起動要因▲３▼：ソフトタイマにより、楽音生成処理を起動する内部割込み信号（起動命令）が発生したこと。（この発生タイミングは、上記のように、所定時間すなわち１０ミリ秒毎に割り込みを入れることを目標としてはいるが、必ずしもその通りに正確に発生されるものではない。）
起動要因▲４▼：「出力デバイス」からの処理要求が検出されたこと。
起動要因▲５▼：その他の処理要求が検出されたこと（特に、「コントロールパネル画面」のオン操作等に基づき、若しくはアプリケーションソフト処理過程で自動的に、前述の自動的シーケンス再生処理用の各種コマンドがアプリケーションソフトＡＰＳから与えられたこと）。
起動要因▲６▼：このプラグインソフトＰＩＳの終了要求が検出されたこと（アプリケーションソフトＡＰＳの実行状態がＭＩＤＩファイル若しくはＭＩＤメッセージを処理しない状態となったとき、例えばＭＩＤＩファイルの埋め込まれていないページに切り替わったとき、音源用プラグインソフトＰＩＳの終了要求がアプリケーションソフトＡＰＳから出される。）
【００６０】
続いて、上記起動要因のいずれかが発生したか否かを判断する（ステップＳ４）。ノーであれば、ステップＳ３に戻り、いずれかの起動要因が発生するまでステップＳ３及びＳ４の処理を繰り返す。そしていずれかの起動要因が発生すると、ステップＳ４でイエスとなってステップＳ５に進む。ステップＳ５では、どの起動要因が発生したのかを判定する。以後、発生した起動要因に応じた処理を行なう。ここで、各起動要因の処理優先度は、▲２▼＞▲３▼，▲４▼＞▲１▼，▲５▼＞▲６▼であり、起動要因▲２▼の優先度が最も高い。例えば、起動要因▲２▼と▲３▼が同時に発生した場合、起動要因▲２▼に対応する処理が先に行われる。
【００６１】
ステップＳ５において、起動要因▲１▼が発生したことが判定されると、ステップＳ１６（データ受信処理）に行き、アプリケーションソフトＡＰＳから順次転送されてくる１シーケンス分のＭＩＤＩファイルの各データをＲＡＭ５にバッファ記憶する。次のステップＳ１７（受信表示）では、ＭＩＤＩファイルの受信を行ったことを表示する。
ステップＳ５において、起動要因▲２▼が発生したことが判定されると、ステップＳ６に行き、ＭＩＤＩ処理を実行する。それから、ステップＳ７に行き、所定の状態表示（例えば、どのＭＩＤＩチャンネルについてのＭＩＤＩメッセージが発生されたかの表示等）を、パネル上に行なう。そして、ステップＳ３に戻り、ステップＳ３以下の処理を繰り返す。
【００６２】
ステップＳ６で実行するＭＩＤＩ処理は、バッファ記憶したＭＩＤＩファイルから、到来したイベントタイミングに対応するＭＩＤＩメッセージデータを読み出すことと読み出したＭＩＤＩメッセージに対応する処理を行うことを含む。このＭＩＤＩ処理には、読み出したＭＩＤＩメッセージが次のイベントまでの時間を示すデュレーションデータである場合にそのデュレーションデータをデュレーションタイマにセットする処理と、読み出したＭＩＤＩメッセージがノートオンイベントを含む場合に行うノートオンイベント処理や、読み出したＭＩＤＩメッセージがノートオフイベントを含む場合に行うノートオフイベント処理等が含まれる。デュレーションデータがセットされたデュレーションタイマは、図示しないテンポクロック割込み処理によって規則的に割込みカウントされる。セットしたデュレーションデータに対応する時間が到来したとき、このテンポクロック割込み処理から図８のメインルーチンの起動要因チェックステップＳ３に対して、ＭＩＤＩイベントタイミングの到来を知らせる。これ基づき起動要因▲２▼が発生したことが検出される。この処理が自動演奏用シーケンサプログラムの処理に該当している。
【００６３】
図１０は、ＭＩＤＩ処理におけるノートオンイベント処理の一例を示すフローチャートである。最初に、ノートナンバ，ベロシティ，ノートオンを入力したＭＩＤＩチャンネルを受信するパートのパート番号，ＭＩＤＩメッセージの入力時刻を示す時間軸上でノートオンイベントが発生した時刻を示すデータを、それぞれ所定のレジスタＮＮ，ＶＥＬ，ｐ，ＴＭに格納する（ステップＳ３１）。続いて、当該ノートオンに基づく発音の割当て処理を行ない、割り当てた発音チャンネルのチャンネル番号をレジスタｉに格納する（ステップＳ３２）。続いて、レジスタｐ内のパート番号に対応して選択されている音色のボイスデータをＲＡＭ５から読み出し、そのボイスデータを、レジスタＮＮ，ＶＥＬ内のノートナンバ，ベロシティに応じて楽音生成処理制御用の制御パラメータ（ピッチを指定する周波数ナンバＦＮを含む）に変換する（ステップＳ３３）。
【００６４】
続いて、この制御パラメータを、ノートオン及びレジスタＴＭ内の発生時刻のデータとともに、レジスタｉ内のチャンネル番号の発音チャンネル用の音源レジスタに格納することにより、当該発生時刻に応じたタイミングでのノートオンの予約を行なう（ステップＳ３４）。
レジスタＴＭ内の発生時刻のデータを音源レジスタに格納するのは、次のような理由による。ノートオンイベントの発生時刻と、当該ノートオンイベントに基づく楽音が再生される時刻とには、前述のように約４フレーム分の時間差がある（楽音の再生がそれだけ遅れる）。楽音生成処理（後述する「音源処理１」）は、その時間差の範囲内の任意のタイミングで、対応する楽音データを生成すればよい（つまり、その範囲内での処理の遅れが許容されている）。したがって、ノートオンイベントの発生時刻と異なる任意のタイミングで実行される楽音生成処理では、ノートオンイベントの発生時刻がわかっていないと、対応する楽音データが生成できないからである。
【００６５】
尚、ステップＳ３４において、当該発音チャンネルが使用中であれば、〔対策２〕として説明したように、当該発音チャンネル用の表の音源レジスタと裏の音源レジスタとのうち、裏の音源レジスタに制御パラメータ等を格納する。これにより、表の音源レジスタを用いて当該発音チャンネルでの現在の楽音生成処理の実行を確保しつつ、当該発音チャンネルでの新たな楽音生成処理を直ちに裏の音源レジスタに用意することができる。またこのように裏の音源レジスタに格納を行なった場合には、表の音源レジスタ内の予約領域にも、レジスタＴＭ内の発生時刻に応じたタイミングでのダンプ（音量エンベロープを急激に減少させる処理）の予約を行なう。
ステップＳ３４に続くステップＳ３５では、ノートオンの発生時刻が遅い発音チャンネルの順に楽音生成演算が行なわれるように、発音の割当て処理を行なった各発音チャンネルの間での演算順序を決定する。（すなわち、後着のノートオンに対応した発音チャンネルが、楽音の生成において優先的に処理されるようになる）。そしてリターンする。
【００６６】
図１１は、ノートオフイベント処理の一例を示すフローチャートである。最初に、ノートナンバ，ノートオフを入力したＭＩＤＩチャンネルを受信するパートに対応して選択されている音色，ＭＩＤＩメッセージの入力時刻を示す時間軸上でノートオフイベントが発生した時刻を示すデータを、それぞれ所定のレジスタＮＮ，ｔ，ＴＭに格納する（ステップＳ４１）。続いて、レジスタｔ内の音色での発音を割り当てた発音チャンネルを捜し、その発音チャンネルのチャンネル番号をレジスタｉに格納する（ステップＳ４２）。続いて、レジスタｉ内のチャンネル番号の発音チャンネル用の表の音源レジスタと裏の音源レジスタのうち、レジスタｔ内の音色に対応するほうの音源レジスタ内の予約領域に、レジスタＴＭ内の発生時刻に応じたタイミングでのノートオフの予約を行なう（ステップＳ４３）。そしてリターンする。
【００６７】
図８の説明に戻り、ステップＳ５において起動要因▲３▼が発生していることが判定されると、「音源処理１」を実行し（ステップＳ８）、それから、所定の状態表示（例えば、ＣＰＵ３の演算能力や、生成した楽音の音量レベル等の表示）を、パネル上に行なう（ステップＳ９）。そしてステップＳ３に戻り、ステップＳ３以下の処理を繰り返す。
【００６８】
「音源処理１」は、前述の楽音生成処理の一部を成すものである。この「音源処理１」の詳細例は図１２に示されている。
図１２において、最初のステップＳ５０では、ＭＩＤＩメッセージの入力時刻を示す時間軸上での現在の時刻ＧＴから、その時間軸上でのＭＩＤＩメッセージの入力時刻のうち当該ＭＩＤＩメッセージに基づく楽音生成処理が終了しているものの最終の入力時刻ＳＴを減じた時間を、遅れ量ＯＲ（現時点までに生成すべき楽音データでありながら未生成である楽音データの量を時間の長さで表わしたもの）として設定する。続くステップＳ５１では、生成量ＳＲ（今回の１起動で生成すべき楽音データの目標サンプル数を時間の長さで表現したもの）を、遅れ量ＯＲの関数として決定する。
【００６９】
図１９は、この関数の特性の一例を示す図である。この例では、遅れ量ＯＲが一定未満である場合には、生成量ＳＲは１０ミリ秒（１出力バッファ分の楽音データの１０分の１に対応した時間）であるが、遅れ量ＯＲが一定以上になると、遅れ量ＯＲが増加するにつれて、生成量ＳＲが連続的に増加していく。そして、生成量ＳＲが、楽音生成処理に要する時間があまり長くならないような範囲内の一定の上限値ＳＲｍａｘに達すると、遅れ量ＯＲがそれ以上増加しても、生成量ＳＲは上限値ＳＲｍａｘを維持する。上限値ＳＲｍａｘは、例えば２０ミリ秒であってもよく、あるいはそれ以外の値であってもよい。
図２０は、この関数の特性の別の一例を示す図である。この例では、遅れ量ＯＲが一定未満である場合には、生成量ＳＲは１０ミリ秒であるが、遅れ量ＯＲが一定以上になると、遅れ量ＯＲが増加するにつれて、生成量ＳＲが不連続に増加していく。そして、生成量ＳＲが、楽音生成処理に要する時間があまり長くならないような範囲内の一定の上限値ＳＲｍａｘに達すると、遅れ量ＯＲがそれ以上増加しても、生成量ＳＲは上限値ＳＲｍａｘを維持する。
【００７０】
尚、このようにして決定される生成量ＳＲは、１０ミリ秒を単位としてその整数倍の値のみをとるのではなく、該単位に対する端数を持った値をとりうる。したがって、一回の「音源処理１」の実行によって生成される楽音データの量は、１出力バッファ分の楽音データの１０分の１の量の整数倍になるとは限らず、図１６に示したように、該単位に対する端数を持った量になることがありうる。すなわち、この図１２の「音源処理１」は、図１６に示したような態様で、楽音生成処理を行なうものである。従って、前述の通り、１フレーム内の所定の起動機会において何回か内部割込み信号（起動命令）が発生しなかったとしても、実際に内部割込み信号（起動命令）が発生した機会だけで、当該フレーム内で生成すべき１出力バッファ分の楽音データの生成を効率的に行なうことができ、発音に支障が生じる事態を防止することができると共に、他の処理を阻害するおそれが少なくなる。
【００７１】
ステップＳ５１に続くステップＳ５２では、「初期設定」で再生予約した出力バッファ以外の残りの出力バッファのうちの１つの出力バッファ上に、時刻ＳＴを先頭とした生成量ＳＲ分の楽音生成領域を設定する。
続くステップＳ５３では、生成量ＳＲの楽音データを生成する発音チャンネル数を決定する。ここで、この発音チャンネル数は、一例として、遅れ量ＯＲの関数として決定するようにしてよい。図２１は、そのような関数の特性の一例を示す図である。この例では、遅れ量ＯＲが一定未満である場合には、ノートオンイベント処理（図１０）で発音割当てを行なった発音チャンネル数ＣＨｍａｘが、そのまま楽音データを生成する発音チャンネル数となるが、遅れ量ＯＲが一定以上になると、遅れ量ＯＲが増加するにつれて、楽音データを生成する発音チャンネル数がＣＨｍａｘよりも減少していく。このように、遅れ量ＯＲが一定以上である場合には、発音チャンネル数が減少することにより、楽音生成処理に要する時間が短縮されるようになる。
【００７２】
ステップＳ５３に続くステップＳ５４では、演算順序（ノートオンイベント処理のステップＳ３５で決定したもの）が１位である発音チャンネルのチャンネル番号をレジスタｉに格納し、スタートポインタｓｐで時刻ＳＴを指す。続いて、レジスタｉ内のチャンネル番号の発音チャンネル用の表の音源レジスタの予約領域を参照して、スタートポインタｓｐ以降から時刻ＧＴまでの間で、最初の予約（ピッチベンドの予約，ノートオフの予約，ダンプの予約等）を検出する（ステップＳ５５）。続いて、予約が検出されたか否かを判断する（ステップＳ５６）。
【００７３】
イエスであれば、当該発音チャンネルについて、当該予約の時刻までの楽音生成処理を実行し、スタートポインタｓｐを当該予約の時刻にまで進める（ステップＳ５７）。この楽音生成処理では、前述のように、音源レジスタに格納された制御パラメータに従うピッチでＲＡＭ５から波形データを読み出し、その波形データに、音色制御（フィルタ演算）と、音量制御（音量エンベロープデータの乗算）と、ピッチ，音色または音量等の変調制御と、エフェクトの付加とを制御パラメータに従って施すことによって楽音データを生成する。
【００７４】
ステップＳ５７に続くステップＳ５８では、当該予約の内容を当該音源レジスタに格納することにより、その予約内容を実行する。ここで、ノートオフの予約が検出された場合には、当該発音チャンネルの表の音源レジスタにノートオフを書き込み、音量エンベロープのリリーススラートを開始する。また、ダンプの予約が検出された場合には、ダンプの実行の完了後（すなわち、音量エンベロープのレベルが一定以下の低い値になった後）、〔対策２〕として示したように、当該発音チャンネルで用いるべき音源レジスタとして、表の音源レジスタに替えて裏の音源レジスタを選択する（尤も、先に表の音源レジスタから裏の音源レジスタへの入替えを行なった後で、表の音源レジスタについてダンプを実行してもよい）。尚、図１０のステップＳ３４で説明したように、裏の音源レジスタに制御パラメータ，ノートオン及びレジスタＴＭ内のノートオンの発生時刻のデータを格納する場合には、表の音源レジスタの予約領域に、レジスタＴＭ内の発生時刻に応じたタイミングでのダンプの予約がされる。したがって、楽音生成処理において、このレジスタＴＭ内の発生時刻に応じたタイミングが来ると、ダンプが実行された後、表の音源レジスタに替えて裏の音源レジスタを用いた楽音生成処理が開始されることになる。
【００７５】
ステップＳ５８を終了すると、ステップＳ５５に戻り、ステップＳ５５以下の処理を繰り返す。
他方、ステップＳ５６でノーと判断されれば（あるいは、最初はイエスと判断されたがその後ステップＳ５７及びＳ５８を経由することによりノーと判断されるようになれば）、当該発音チャンネルについて、スタートポインタｓｐから時刻ＧＴまでの楽音生成処理を全て実行する（ステップＳ５９）。これにより、当該発音チャンネルについて、生成量ＳＲ分の楽音生成領域に亘る楽音データの生成が完了する。
【００７６】
続いて、ステップＳ５３で決定した数の発音チャンネルについて楽音生成処理を全て完了したか否かを判断する（ステップＳ６０）。ノーであれば、演算順序が次順位である発音チャンネルのチャンネル番号をレジスタｉに格納し、スタートポインタｓｐを時刻ＳＴに設定する（ステップＳ６１）。そしてステップＳ５５に戻り、ステップＳ５５以下の処理を繰り返す。他方、ステップＳ６０でイエスと判断されれば（あるいは、最初はノーと判断されたが、その後ステップＳ５５以下を繰り返すことによりイエスと判断されるようになれば）楽音生成処理を終了してステップＳ６２に進む。これにより、生成可能な発音チャンネル数が、発音の割当て処理を行なった発音チャンネル数未満である場合には、演算順序の遅い発音チャンネルについての楽音生成処理が省略されるという形で、同時発音チャンネル数が減少することになる。
【００７７】
ステップＳ６２では、累算された各発音チャンネルについて楽音データ（あるいは、累算された楽音データに適宜のエフェクトを付加したもの）を、出力バッファ上の楽音生成領域（ステップＳ５２で設定したもの）に書き込む。続いて、時刻ＳＴに生成量ＳＲの長さを加えた時刻を、新たな時刻ＳＴとして設定する（ステップＳ６３）。この新たな時刻ＳＴは、次に「音源処理１」を実行する際の演算スタート位置になる。続くステップＳ２６４では、今回ノートオフのあった発音チャンネルについての音量エンベロープの大きさを、徐々にゼロに向けて下げる。続いて、１出力バッファ分の楽音データが完成したか否かを判断する（ステップＳ６５）。ノーであればリターンする。他方イエスになると、その出力バッファを、後述の「音源処理２」によって当該出力バッファに連結されている他の出力バッファから切り離して、「出力デバイス」に再生予約する（ステップＳ６６）。そしてリターンする。
【００７８】
なお、ステップＳ５０及びＳ５１の別の例として、「ＧＴ−ＳＴ」の結果をそのままＳＲとして設定することも可能である。その場合は、前記〔対策１〕における図５の例のように、いずれかの機会で内部割込み信号が発生しなかったために楽音生成処理が起動しなかった場合に、その機会での未生成の楽音データを、その直後に内部割込み信号が発生した機会で全て生成するようになる。これによっても、１フレーム内に何回か内部割込み信号が発生しなくても、内部割込み信号が発生した機会だけで、当該フレーム内に１出力バッファ分の楽音データの生成が完了するので、発音に支障が生じる事態が防止される。また、内部割込み信号が発生しなかった機会での未生成の楽音データを、図６の例のようにその後に内部割込み信号が発生した複数の機会で分散して生成するようにしたり、あるいは当該フレーム内の最後の機会までに徐々に生成するようにしてもよいことは、前記〔対策１〕において述べたとおりである。
【００７９】
また、ステップＳ５３における発音チャンネル数の決定法の別の例として、次のようにしてもよい。まず、１つの発音チャンネルで生成量ＳＲ分の楽音データを生成するのに要する演算時間と、今回の演算可能時間ＥＪ（次に内部割込み信号が発生する予定の時刻である演算終了時刻ＳＪから、今回内部割込み信号が実際に発生した時刻である演算開始時刻ＫＪを減じた時間）とに基づき、時間ＥＪ内に幾つの発音チャンネルで生成量ＳＲ分の楽音データの生成が可能かを算出する。そして、算出した生成可能な発音チャンネル数が、ノートオンイベント処理（図１０）で発音割当てを行なった発音チャンネル数以上であれば、当該発音割当てを行なった発音チャンネル数を、そのまま楽音データを生成する発音チャンネル数として決定する。他方、算出した生成可能な発音チャンネル数が、発音割当てを行なった発音チャンネル数未満であれば、当該生成可能な発音チャンネル数を、楽音データを生成する発音チャンネル数として決定する（すなわち、〔対策１〕として説明したように、楽音データを生成する発音チャンネル数を減少させることにより、１フレーム内に１出力バッファ分の楽音データの生成を確保する）。
【００８０】
図８の説明に戻り、ステップＳ５において起動要因▲４▼が発生していることが判定されると、「音源処理２」を実行し（ステップＳ１０）、所定の状態表示をパネル上に行なう（ステップＳ１１）。そしてステップＳ３に戻り、ステップＳ３以下の処理を繰り返す。
「音源処理２」も、楽音生成処理の一部を成すものである。この「音源処理２」は、「出力デバイス」（すなわちＤＭＡＣ１１による外部割込み処理）の実行によって発生する要求に基づいて実行される。
【００８１】
図１３は、ＤＭＡＣ１１による外部割込み処理の一例を示すフローチャートである。この外部割込み処理は、サウンドＩ／Ｏ１２に楽音データを１サンプル分ずつ送るタイミング（サウンドＩ／Ｏ１２の再生サンプリング周期）で、ＤＭＡＣ１１が実行するものであり、この処理によって、出力バッファに記憶された１フレーム分の楽音データが、再生サンプリング周期毎に１サンプル分ずつ読み出されてサウンドＩ／Ｏ１２に供給される。これは、図１における「出力デバイス」の処理に相当する。すなわち、ＯＳのドライバである「出力デバイス」によって、波形入力用のインターフェース（“ｗａｖｅ  ＡＰＩ”）に対してソフト音源から与えられた楽音データを受け取り、これを外部のハードウェアつまりサウンドＩ／Ｏ１２に出力する処理に対応している。
最初に、「初期処理」（図９）または「音源処理１」（図１２）によって「出力デバイス」に再生予約された出力バッファのうちの現在読出し中の出力バッファ（ポインタＰＢで指した出力バッファ）内の現在読出し中の１サンプル分の楽音データ（ポインタｐｐで指した楽音データ）を、サウンドＩ／Ｏ１２に送る（ステップＳ７１）。続いて、ポインタｐｐを１サンプル分進め（ステップＳ７２）、当該出力バッファ内の全ての楽音データをサウンドＩ／Ｏ１２に送り終えたか（すなわち当該出力バッファについての再生処理を完了したか）否かを判断する（ステップＳ７３）。ノーであればリターンする。
【００８２】
他方、ステップＳ７３でイエスと判断されれば、次の出力バッファの再生予約があるか否かを判断する（ステップＳ７４）。これは、インターフェース（“ｗａｖｅ  ＡＰＩ”）に対してＯＳを介して「出力デバイス」からアクセスする処理、つまりＯＳを介在させた処理に相当する。
他の何らかの処理の影響により楽音生成処理の起動が遅れているために、楽音生成処理で生成を完了した楽音データを書き込んだ出力バッファが未だ再生予約されていない場合であっても、既に再生予約されている出力バッファ（「初期設定」（図９）で先行して再生予約した出力バッファや、音源処理１で既に再生予約している出力バッファ）があれば、その再生処理が全て完了するまでは、ステップＳ７４でイエスと判断されてステップＳ７５に進み、その出力バッファにポインタＰＢを進める。これにより、〔対策３〕として説明したように、楽音生成処理の遅れによる音切れを防ぐための楽音生成処理の起動時間の許容範囲が拡がることになる。ステップＳ７５に続くステップＳ７６では、再生処理を完了した出力バッファを、「音源処理２」のルーチンに返却する要求を発生する。そしてリターンする。
【００８３】
他方、楽音生成処理の起動が大幅に遅れているために、既に再生予約している出力バッファの再生処理を全て完了した区間内においても、楽音生成処理で生成を完了した楽音データを書き込んだ出力バッファがまだ再生予約されていない場合には、ステップＳ７４でノーと判断されてステップＳ７７に進む。ステップＳ７７では、ノイズ音の発生を防止するためにサウンドＩ／Ｏ１２の出力をミュートする。続いてステップＳ７８では、「音源処理２」に対してリセット要求（楽音生成処理のリセットを要求するもの）を発生する。そしてリターンする。
【００８４】
図１４は、「出力デバイス」からの返却要求（図１３のステップＳ７６）に基づく「音源処理２」の一例を示すフローチャートである。最初に、「出力デバイス」から返却された出力バッファを受け取る（ステップＳ８１）。続いて、その出力バッファをクリアして、楽音生成処理が既に保有している出力バッファの後にその出力バッファを連結する（ステップＳ８２）。尚、この連結とは、出力バッファ同士を仮想的に順番につなげて大きな１つのバッファとして扱うことである。したがって、ＲＡＭ５内で物理的に相互に隣接した領域にそれらの出力バッファを存在させることは必要ではない。ステップＳ８２に続くステップＳ８３では、楽音生成処理と「出力デバイス」との間での時刻のずれの有無を確認して楽音生成処理の動作を補正するために、「出力デバイス」からの返却要求のタイミングを示すデータを作成する。そしてリターンする。
【００８５】
図１５は、「出力デバイス」からのリセット要求（図１３のステップＳ７８）に基づく「音源処理２」の一例を示すフローチャートである。最初に、各発音チャンネル用の音源レジスタ内のデータと、ＲＡＭ５の出力バッファ内のデータとを全てクリアする（ステップＳ９１）。続いて、「初期設定」（図９）のステップＳ２３乃至Ｓ２５と同じく、「出力デバイス」を初期設定し（ステップＳ９２）、データをクリアされた４つの出力バッファの再生を再び「出力デバイス」に予約し（ステップＳ９３）、「出力デバイス」を起動するとともに、ソフトタイマをスタートさせる（ステップＳ９４）。そしてリターンする。
【００８６】
このように、リセット要求に基づく「音源処理２」では、「出力デバイス」に出力バッファが再生予約されていない場合には、〔対策４〕として説明したように、それまでに楽音生成処理で実行していた楽音生成処理を打ち切り、クリアされた出力バッファの再生の先行予約を「出力デバイス」に再び行なった後、それ以降に供給されるＭＩＤＩメッセージに基づいて楽音生成処理を起動することにより、楽音生成処理を新たに開始している。これにより、再生予約が間に合わず、一時的に楽音が乱れた場合でも、すぐに安定した楽音生成動作に復帰するので、ノイズを最小限に抑えることができる。
【００８７】
図８のステップＳ５に戻って、起動要因▲５▼が発生していると判定されると、その要求に応じたコマンド処理を実行し（ステップＳ１２）、それに応じた表示をパネル上に行なう（ステップＳ１３）。そしてステップＳ３に戻り、ステップＳ３以下の処理を繰り返す。
他方、起動要因▲６▼が発生していると判定されると、この音源用プラグインソフトＰＩＳのメインルーチンを終了させるための所定の処理をステップＳ１４で実行し（例えば、ソフト音源プログラムが使用していたＲＡＭ５のメモリを開放する）、所定の画面消去処理を行う（ステップＳ１５）。
【００８８】
尚、ステップＳ５において、起動要因▲１▼乃至▲６▼のうちの２以上の起動要因が同時的に発生していると判断された場合には、前述の通り、起動要因▲２▼が最優先，起動要因▲３▼と▲４▼がその次の優先順位，起動要因▲１▼と▲５▼が更にその次の優先順位，起動要因▲６▼が最下位の優先順位、で該優先順位に従って処理されるものとする。起動要因▲３▼と▲４▼の間には特段の優先順位を付けず、対等とする。また、起動要因▲１▼と▲５▼の間にも特段の優先順位を付けず、対等とする。また、ステップＳ３乃至ステップＳ５は、擬似マルチタスク処理におけるタスク管理を仮想的に示したものであり、実際には、いずれかの起動要因の発生に基づいて処理を実行している途中で、それよりも優先順位の高い起動要因が発生したことにより、割込みで別の処理を実行すること（例えば、起動要因▲３▼の発生に基づいて「音源処理１」を実行している途中で、起動要因▲２▼が発生したことにより、割込みで「ＭＩＤＩ処理」を実行すること等）がある。
ところで、例えば、起動要因▲３▼の発生に基づいて「音源処理１」を実行している途中で、それよりも優先順位の低い起動要因▲５▼又は▲６▼が発生された場合、これらの起動要因▲５▼又は▲６▼についての起動は、起動要因▲３▼の発生に基づく１回の「音源処理１」が終了するまで待たなければならない。しかし、図１９又は図２０に示すような適切な関数に従って１回の起動に対応する生成量ＳＲを遅れ量ＯＲの関数として適切に決定するようにしたことにより、遅れ量ＯＲが多い場合でも、起動要因▲３▼の発生に基づく１回の「音源処理１」が過度に処理時間を占有することかなくなるので、優先順位の低い起動要因に対応する処理を阻害する確率が低くなり、有効である。
【００８９】
次に、上記実施の形態の変更例について説明する。
アプリケーションソフトＡＰＳとして高度なアプリケーションプログラム（例えばＷＷＷブラウザ）を使用する場合、アプリケーションソフトＡＰＳの実行中において、例えばインターネットのホームページを２箇所同時にアクセスすることができるものがある。そのような場合、アクセス中の２つのホームページの双方で音楽ソフトの再生を行うようなことが起こり得る。そうすると、該アプリケーションプログラムにプラグインされたソフト音源プログラムが重複して起動されることになり、異常動作が起こる可能性がある。
【００９０】
このような異常動作を未然に防止するための１つの対策として、ソフトウェア音源のプログラムにおいて、前記アプリケーションプログラムから呼び出しを受けたとき、該ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば後からの呼び出しを受け付けない処理を行うようにするとよい。これによって、アプリケーションプログラムにプラグインされたソフトウェア音源プログラムが重複して起動されることなく、先に起動中の波形生成処理を優先して遂行させることができる。
図２２は、上記の対策を実現するために採用することができる図８の変更例を示す。図２２において、ステップＳ１の前に、ステップＳ１８，Ｓ１９，Ｓ２０が設けられている点が図８とは異なり、他は同一である。ステップＳ１８では、既に、この音源用プラグインソフトＰＩＳが開かれているか否かを判定する。今回初めて音源用プラグインソフトＰＩＳが開かれた場合は、ＮＯであり、ステップＳ１９に行って、該音源用プラグインソフトＰＩＳの本体プログラムをメモリにロードする。その後、ステップＳ１に行き、図８と同様の処理を行う。一方、既に音源用プラグインソフトＰＩＳが開かれている場合は、ステップＳ１８はＹＥＳであり、ステップＳ２０に行き、「開けません」の表示をディスプレイ９で行わせて、処理を終了する。こうして、先に起動中の波形生成処理を優先して遂行させることができる。
【００９１】
そのための別の対策として、ソフトウェア音源のプログラムにおいて、前記アプリケーションプログラムから呼び出しを受けたとき、該ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば該実行中の処理を中止し、後からの呼び出しを受け付けるようにしてもよい。これによって、アプリケーションプログラムにプラグインされたソフトウェア音源プログラムが重複して起動されることなく、先に実行中の波形生成処理を中止し、後から呼び出しのかかった波形生成処理を優先して実行することができる。
図２３は、上記の対策を実現するために採用することができる図８の変更例を示す。図２３において、ステップＳ１の前に、ステップＳ１８，Ｓ１９，Ｓ２００が設けられている点が図８とは異なり、他は同一である。ステップＳ１８，Ｓ１９の処理は、図２２と同様の処理である。図２３では、既に音源用プラグインソフトＰＩＳが開かれている場合は、ステップＳ１８のＹＥＳからステップＳ２００に行き、現在演奏中の曲の演奏シーケンスを強制的に終了させる。その後。ステップＳ１に行き、図８と同様の処理を行う。こうして、先に実行中の波形生成処理を中止し、後から呼び出しのかかった波形生成処理を優先して実行することができる。
【００９２】
更にそのための別の対策として、ソフトウェア音源のプログラムにおいて、前記アプリケーションプログラムから呼び出しを受けたとき、該ソフトウェア音源のプログラムが既に実行中であるかどうかを判定し、既に実行中であれば、後からの呼び出しを受け付けない処理を行うか、又は、該実行中の処理を中止して後からの呼び出しを受け付ける処理を行うか、のどちらかを選択可能に実行するようにしてもよい。この場合の選択の仕方としては、ディスプレイ画面に選択用のアイコンを表示して、操作者によってどちらかを選択させるようにしてもよいし、あるいは、再生すべき自動演奏データファイル中若しくはその他の適宜の領域に選択情報を格納しておき、この選択情報を参照して自動的に選択するようにしてもよい。あるいは、ディスプレイ画面における表示形態（例えば開いたページ画像の前後関係など）に応じてどちらでソフトウェア音源を使用するかを自動的に選択するようにしてもよいし、若しくはランダム選択によって選択するようにしてもよい。
【００９３】
上記実施例は、音源用プラグインソフトＰＩＳとして、自動演奏用シーケンサのプログラムとソフトウェア音源のプログラムとをプラグインしたが、ソフトウェア音源のプログラムのみをプラグインしてもよい。その場合は、音源用プラグインソフトＰＩＳは、適宜入力されるＭＩＤＩメッセージに対応する楽音波形サンプルデータを生成する構成となる。
【００９４】
尚、以上の実施の形態では、〔対策１〕において、通算として１フレーム内に所定サンプル数の楽音データを生成するようにしている。しかし、ここで「通算として」というのは、必ずしも１つのフレーム内で該所定サンプル数の楽音データの生成が完了することを要求するものではない。特に、これらの実施の形態では、図７に示すように、楽音データを書き込んだ出力バッファを複数再生予約できるようになっているので、１つのフレーム内で楽音データの生成演算が完了しなくても、その後のフレームでその分を補う演算を行なうことが可能である。図６を例にとってこのことを説明すれば、図６では、内部割込み信号の発生しなかった機会での未生成の楽音データを、１つのフレーム内の最後の機会までに間に合うように生成するようにしているが、該最後の機会までに生成できなくても、その次のフレームにその生成を持ち越すようにしてよい（例えば、未生成の４回分の楽音データを図６のように１０回目の機会（１００ミリ秒目）で全て生成するかわりに、１０回目の機会で７，８回目の２回分の楽音データだけを生成し、それ以降のフレームで内部割込み信号が発生した機会で、残りの９，１０回目の２回分の楽音データを生成するようにしてよい）。尚、図１６に例示しているように、或るフレームにおける未生成の楽音データの生成を、その次のフレームに持ち越すことがありうる。
【００９５】
また、以上の実施の形態では、ノートオンイベント処理やノートオフイベント処理といったＭＩＤＩ処理において、楽音生成処理制御用の制御パラメータ，ノートオン及びイベントの発生時刻を示すデータを、各発音チャンネル毎に設けた音源レジスタに格納している。しかし、このようにこれら制御パラメータ等を各発音チャンネル毎に別の音源レジスタに格納するかわりに、１つの記憶エリアに、制御パラメータ等を発音チャンネルのチャンネル番号を示すデータと組にして順次書き込むようにしてもよい。その場合には、ＭＩＤＩメッセージの供給に基づいて、一旦シーケンスデータを作成し、このシーケンスデータに基づいて楽音データの生成を行なうことになる。
【００９６】
また、以上の実施の形態では、「音源処理２」において、「出力デバイス」から返却された出力バッファを、楽音生成処理が既に保有している出力バッファの後に連結しており、したがって「音源処理１」においては、このように連結された出力バッファに、１出力バッファ分ずつ楽音データを生成している。しかし、このように出力バッファを連結するかわりに、個々の出力バッファを単位として楽音データを生成するようにしてもよい。
【００９７】
また、以上の実施の形態では、楽音生成処理の起動に先行して、４つの出力バッファの再生を「出力デバイス」に予約している。しかし、楽音生成処理の起動に先行して「出力デバイス」に再生予約する出力バッファの数は、もちろん４以外であってよい。また、また、ＲＡＭ５内に設ける出力バッファの数も、楽音生成処理の起動に先行して「出力デバイス」に再生予約する出力バッファの数よりも１以上多い適宜の数であってよい。
【００９８】
また、以上の実施の形態では、〔対策１〕，〔対策２〕，〔対策３〕及び〔対策４〕を全て実施している。しかし、これらの対策は、それぞれ相互に独立して実施しても、楽音生成処理の起動の遅れを原因として発音に支障が生じる事態を防止できるものである。したがって、これらの対策のうちのいずれか１つのみを実施したり、２つまたは３つを適宜組み合わせて実施したりしてもよい。
また、上記の実施形態においては、ソフト音源においては、生成した楽音波形データを出力バッファに最大で４００ｍｓ分貯めてから、これを出力するようにしている。そのため、他のソフトウェアによって処理される該再生音楽情報に関連する他の情報（例えばカラオケの背景画像や歌詞画像情報）の再生タイミングと同期がとれなくなると不都合が生じるので、適宜の同期化対策を講ずるようにすかるのがよい。例えば、ＭＩＤＩメッセージを出力するタイミングを、該ＭＩＤＩメッセージに対応する再生音楽情報に同期されるべき他の情報（例えばカラオケの背景画像や歌詞画像情報）の出力タイミングよりも早めてやり、ソフト音源における楽音生成処理が他の処理よりも幾分先行して行なわれるようにしてやれば、最終的に必要な全情報を同期して出力することができる。
【００９９】
また、以上の実施の形態では、波形メモリ方式の楽音生成処理をＣＰＵに実行させるタイプのソフトウェア音源にこの発明を適用しているが、他の適宜の楽音生成方式（例えばＦＭ合成方式等）をＣＰＵに実行させるタイプのソフトウェア音源プログラムを採用してこの発明を実施してもよい。
また、この発明は、パーソナルコンピュータ（つまり汎用コンピュータ）のＣＰＵによって楽音生成処理を実行させるようにしたソフトウェア音源において適用することができるのみならず、専用の楽音発生装置やその他の特機化された適宜の装置内に搭載されたコンピュータのＣＰＵによって楽音生成処理を実行させるソフトウェア音源を具備するシステムにおいて適用することができる。また、波形データ生成の基となる演奏情報は、必ずしもＭＩＤＩフォームの情報に限定されるものではなく、その他の形式であってもよい。
【０１００】
【発明の効果】
以上の通り、この発明によれば、ソフトウェア音源のプログラムをアプリケーションプログラムにプラグインで組み込むだけで、コンピュータを使用した音波形サンプルデータ生成を容易に行うことができるようになり、かつ、格別の音源ボードが不要となる、という優れた効果を奏する。また、どのようなコンピュータを使用しても、そのハードウェア構成にかかわらず、プラグインしたソフトウェア音源プログラムに応じた均質の楽音特性を持つ音波形サンプルデータを生成することができるようになる。
また、アプリケーションプログラムにプラグインされたソフトウェア音源プログラムが重複して起動されることのないように、優先順位をつけて、若しくは選択的に処理するようにしたので、異常動作を防止することができる。
【０１０１】
また、この発明によれば、コンピュータのメイン制御部（ＣＰＵ３）において起動命令発生手段を設け、波形データ生成処理を起動する機会を所定時間内に複数回設定し、この複数回の機会のうち、前記ソフトウェア音源のプログラムを実際に実行してよい機会にだけ起動命令を発生し、これにより、メイン制御部は、他のプログラムの実行状況との兼ね合いで、ソフトウェア音源のプログラムを実際に実行してよい機会にだけ起動命令を発生することができ、ソフトウェア音源のプログラムとその他のプログラムとを適切に時分割制御して並行して実行させることができる一方で、ソフトウェア音源（ＳＳＭ）において、前記起動命令に応じて波形データ生成処理を実際に起動した機会だけで、通算として前記所定時間内に所定サンプル数分の波形データを生成させるように、波形データ生成処理を調整する調整処理手段を具備したので、所定時間内に設定された複数回の起動機会のうち何回かの機会で起動命令が発生されなかったとしても、起動命令に応じて波形データ生成処理を実際に起動した機会だけを使用して、通算して上記所定時間内に所定サンプル数分の音波形データを生成が完了するように制御することができ、発音遅れの問題を解決することができる。従って、完全なマルチタスク機能を有しないＯＳ上でソフトウェア音源による音波形データ生成処理と他のソフトウェアの処理を並行して実行させる場合でも、音波形データ生成処理及び他のソフトウェアの処理に支障が生じないようにすることができる、という優れた効果を奏する。すなわち、他のソフトウェアの処理の影響によって音波形データ生成処理の起動命令発生回数が相対的に減ったとしても、通算して上記所定時間内に所定サンプル数分の音波形データを生成が完了するように制御されるので、発音遅れ等の支障が生じることがなくなる。逆に、音波形データ生成処理を固定の時分割的処理時間で行わないことにより、他のソフトウェアの処理の実行が音波形データ生成処理によって阻害されてその処理が遅れるという問題が起こらないようにすることができる。
【０１０２】
その場合、各起動命令に対応する時点において、その時点までに生成処理すべき波形データの未処理量の関数として、該時点の１起動命令に応じて生成すべき波形データ量を決定し、該決定された波形データ量分の波形データを生成する処理を、該１起動命令に応じて実行するようにしたことにより、上記関数を適切に定めることにより、生成処理すべき波形データの未処理量との兼ね合いで、１起動命令に応じて生成すべき波形データ量を適切に決定することができ、１起動命令に対応するソフトウェア音源の処理によってメイン制御部の作業が占有されることによって他の処理の実行が阻害されることが起こる確率をできるだけ低くするように制御することができるようになる。
【図面の簡単な説明】
【図１】この発明に従う実施形態のソフトウェアシステム構成を略示する図。
【図２】上記ソフトウェアシステムに接続される通信ネットワークの一例を示すブロック図。
【図３】この発明の一実施形態に係る音源システムのハードウェア構成例を示す全体ブロック図。
【図４】この発明の一例として採用するソフトウェアによる楽音生成処理の概略を説明する図。
【図５】この発明の一実施形態において採用可能な〔対策１〕の一例を示す説明図。
【図６】この発明の一実施形態において採用可能な〔対策１〕の別の例を示す説明図。
【図７】この発明の一実施形態において採用可能な〔対策３〕の一例を示す説明図。
【図８】図３のＣＰＵによって実行されるソフトウェア音源プログラムのメインルーチンの一例を示すフローチャート。
【図９】図８における初期設定処理の一例を示すフローチャート。
【図１０】図８におけるＭＩＤＩ処理において実行されるノートオンイベント処理の一例を示すフローチャート。
【図１１】図８におけるＭＩＤＩ処理において実行されるノートオフイベント処理の一例を示すフローチャート。
【図１２】図８における音源処理１の一例を示すフローチャート。
【図１３】図３のＤＭＡコントローラによる割込み処理の一例を示すフローチャート。
【図１４】図３のＤＭＡコントローラからの返却要求に基づいて実行される図８の音源処理２の一例を示すフローチャート。
【図１５】図３のＤＭＡコントローラからのリセット要求に基づいて実行される図８の音源処理２の一例を示すフローチャート。
【図１６】この発明の一実施形態において採用可能な〔対策１〕の更に別の例を示すものであって、内部割込み信号の発生と楽音データの生成量との関係の一例を示す説明図。
【図１７】この発明の一実施形態におけるアプリケーションソフトと音源用プラグインソフトとの間の情報のやり取り例を略示する図。
【図１８】上記音源用プラグインソフトから与えられ入メジ情報に応じて上記アプリケーションソフトによって表示制御されるコントロールパネル画面の一例を示す図。
【図１９】生成量ＳＲを遅れ量ＯＲの関数として決定する際の関数の特性の一例を示す図。
【図２０】生成量ＳＲを遅れ量ＯＲの関数として決定する際の関数の特性の別の一例を示す図。
【図２１】発音チャンネル数を遅れ量ＯＲの関数として決定する際の関数の特性の一例を示す図。
【図２２】図８の変更例を示すフローチャート。
【図２３】図８の別の変更例を示すフローチャート。
【符号の説明】
ＡＰＳ  アプリケーションソフト
ＰＩＳ  音源用プラグインソフト
ＦＭＤ  フェイクＭＩＤＩドライバ
１  ネットワークＩ／Ｏ
２  タイマ
３  ＣＰＵ
４  ＲＯＭ
５  ＲＡＭ
６  データ及びアドレスバス
７  マウス
８  キーボード
９  ディスプレイ
１０  ハードディスク装置
１１  ＤＭＡＣ
１２  サウンドＩ／Ｏ
１３  サウンドシステム
【図１】
0003572847.tif 000002
【図２】
0003572847.tif 000003
【図３】
0003572847.tif 000004
【図４】
0003572847.tif 000005
【図５】
0003572847.tif 000006
【図６】
0003572847.tif 000007
【図７】
0003572847.tif 000008
【図８】
0003572847.tif 000009
【図９】
0003572847.tif 000010
【図１０】
0003572847.tif 000011
【図１１】
0003572847.tif 000012
【図１３】
0003572847.tif 000013
【図１２】
0003572847.tif 000014
【図１４】
0003572847.tif 000015
【図１５】
0003572847.tif 000016
【図１６】
0003572847.tif 000017
【図１７】
0003572847.tif 000018
【図１８】
0003572847.tif 000019
【図１９】
0003572847.tif 000020
【図２０】
0003572847.tif 000021
【図２１】
0003572847.tif 000022
【図２２】
0003572847.tif 000023
【図２３】
0003572847.tif 000024