(57)【要約】【課題】  標準プラグインを用いて、一般アプリケーションにより出力されるデータを信号処理する。【解決手段】  一般アプリケーションプログラム１０１から再生されるオーディオデータは、複数のオーディオユーザモードドライバを管理するWinmm.dll１０２を介して、オーディオデータフック用dll１０３に供給されて、信号処理アプリケーションプログラム１０４に供給される。信号処理アプリケーションプログラム１０４は、オーディオデータフック用dll１０３とは独立したプロセスで動作するものであり、供給されたオーディオデータにエフェクトプラグインによる信号処理を施す。信号処理されたオーディオデータは、オーディオデータフック用dll１０３から、再度、Winmm.dll１０２に供給され、Wdmaud.drv１０５およびWDMオーディオドライバ１０６を介して、オーディオハードウェア１０７の処理により出力される。本発明は、パーソナルコンピュータに適用できる。【選択図】図５
2005317115.tif 000002
【特許請求の範囲】
【請求項１】
所定のデータを取得し、前記データに対する信号処理を実行する信号処理実行手段と、
前記信号処理実行手段が、前記データ、または、前記データに対する前記信号処理を実行するために必要な情報を授受するために、前記データおよび前記情報を一時記録する記録手段と、
前記データおよび前記情報を取得し、前記信号処理を行うか否かを判断して、前記データの出力先を制御するデータ制御手段と
を備え、
前記データ制御手段は、前記信号処理を行うと判断した場合、前記データおよび前記情報を前記記録手段に書き込み、
前記信号処理実行手段は、前記記録手段に記録された前記データまたは前記情報を取得し、前記データに対する前記信号処理を実行する
ことを特徴とする情報処理装置。
【請求項２】
前記データを生成するデータ生成手段を更に備え、
前記信号処理実行手段は、前記データ生成手段の動作に依存しないで、前記信号処理に関する動作を実行する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記データ制御手段は、前記記録手段に前記情報を記録するための記録領域が存在するか否かを基に、前記信号処理を行うか否かを判断する判断手段を備える
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記データには、前記データを個別に区別可能な区別情報が対応付けられ、
前記データ制御手段は、前記データに対応付けられた前記区別情報を基に、前記信号処理を行うか否かを判断する判断手段を備える
ことを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記データ制御手段は、前記信号処理実行手段による前記信号処理のために前記データの形式を変換して、前記記録手段に前記データを書き込むデータ変換手段を備える
ことを特徴とする請求項１に記載の情報処理装置。
【請求項６】
前記信号処理実行手段は、
前記データを取得するデータ取得手段と、
前記データ取得手段により取得された前記データに対する信号処理を実行する信号処理手段と
を備え、
前記信号処理手段は、エフェクトプラグインによって構成されている
ことを特徴とする請求項１に記載の情報処理装置。
【請求項７】
前記信号処理実行手段は、前記信号処理手段により処理された前記データにスムージング処理を施すスムージング処理手段を更に備える
ことを特徴とする請求項６に記載の情報処理装置。
【請求項８】
所定のデータを出力する情報処理装置の情報処理方法において、
前記データ、または、前記データに対する信号処理を実行するために必要な情報を授受するために、前記データおよび前記情報を一時記録する記録領域の生成を制御する記録領域生成制御ステップと、
前記データに対して前記信号処理を行うか否かを判断する判断ステップと、
前記判断ステップの処理により前記データに対して前記信号処理が行われると判断された場合、前記データおよび前記情報の、前記記録領域生成制御ステップの処理により生成が制御された前記記録領域への記録を制御する記録制御ステップと、
前記記録制御ステップの処理により記録が制御された前記データおよび前記情報を基に、前記データに対する前記信号処理を実行する信号処理実行ステップと、
前記信号処理実行ステップの処理により信号処理が施された前記データの出力を制御する出力制御ステップと
を含むことを特徴とする情報処理方法。
【請求項９】
所定のデータを出力する処理をコンピュータに実行させるためのプログラムであって、
前記データ、または、前記データに対する信号処理を実行するために必要な情報を授受するために、前記データおよび前記情報を一時記録する記録領域の生成を制御する記録領域生成制御ステップと、
前記データに対して前記信号処理を行うか否かを判断する判断ステップと、
前記判断ステップの処理により前記データに対して前記信号処理が行われると判断された場合、前記データおよび前記情報の、前記記録領域生成制御ステップの処理により生成が制御された前記記録領域への記録を制御する記録制御ステップと、
前記記録制御ステップの処理により記録が制御された前記データおよび前記情報を基に、前記データに対する前記信号処理を実行する信号処理実行ステップと、
前記信号処理実行ステップの処理により信号処理が施された前記データの出力を制御する出力制御ステップと
を含むことを特徴とする処理をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および情報処理方法、並びに、プログラムに関し、特に、出力する情報に効果を施す場合に用いて好適な情報処理装置および情報処理方法、並びに、プログラムに関する。
【背景技術】
【０００２】
近年のパーソナルコンピュータの普及により、パーソナルコンピュータを用いて音楽を再生することが広く行われている。
【０００３】
ユーザは、パーソナルコンピュータに装着した記録媒体に記録されたオーディオデータ、または、パーソナルコンピュータの内部に記録されたオーディオデータを、音声再生機能を有するアプリケーションプログラムを用いて、再生し、楽しむことができる。
【０００４】
ＯＳ（Operating System）としてWindows（登録商標）を用いた場合、Windows(R)の標準となる音声出力関連の機能は、windows\system32フォルダのwinmm.dllというＤＬＬ（Dynamic Link Library）にまとめられおり、例えば、ゲームなどのアプリケーションプログラムの実行において、効果音が再生されるとき、アプリケーションプログラムはオーディオデータの再生命令をwinmm.dllに供給する。winmm.dllは、アプリケーションプログラムごとに設定されるオーディオデバイスに対応したユーザモードドライバに、オーディオデータの再生命令とオーディオデータを転送する。Windows(R)標準のユーザモードドライバには、例えば、Wdmaud.drvなどがある。
【０００５】
図１を用いて、ＯＳとしてWindows（登録商標）を用いた場合のオーディオデータの再生について説明する。
【０００６】
ステップＳ１において、音声再生を行う一般的なアプリケーションプログラムは、オーディオデータの再生処理が発生したとき、Winmm.dllのwaveoutOpen関数を呼び出す。waveoutOpen関数は出力デバイスをオープンするための関数である。
【０００７】
ステップＳ２において、Winmm.dllは、ユーザモードドライバとして指定されているWdmaud.drvのwodMessageOpen関数を呼びだして、ドライバをオープンし、オーディオデータの転送と再生に必要なパラメータを設定する。
【０００８】
オープンシーケンスの終了後、ステップＳ３において、一般的なアプリケーションプログラムは、Winmm.dllのwaveoutWrite関数を呼び出す。
【０００９】
ステップＳ４において、Winmm.dllは、Wdmaud.drvのwodMessageWrite関数を呼びだして、オーディオデータを転送する。
【００１０】
ステップＳ３およびステップＳ４の処理は、オーディオデータの書き込みが終了するまで繰り返される。
【００１１】
オーディオデータの書き込み処理が終了した後、ステップＳ５において、一般的なアプリケーションプログラムは、Winmm.dllのwaveoutClose関数を呼び出す。
【００１２】
ステップＳ６において、Winmm.dllは、Wdmaud.drvのwodMessageClose関数を呼びだして、オーディオデータの再生処理を終了させる。
【００１３】
このとき、ソースとなるオーディオデータをそのままの状態で再生するのみならず、例えば、再生されるオーディオデータに様々な効果を付加することができるようにした技術がある。例えば、ソースとなるオーディオデータの特定の周波数帯域を強調することにより、音の欠落を補正し、サウンドの輪郭をはっきりさせたり、低音部を補正し、再生される音楽を迫力のあるものとしたり、中・高音部を補正し、ツヤのある音楽を再生することができるようにしたり、残響音効果をかけて、劇場やライブハウスなどの臨場感を感じることができるようになされている（例えば、非特許文献１）。
【００１４】
【非特許文献１】“バーチャル３ＤサラウンドソフトウェアＱＭＡＸ II”、［online］、イージーシステムズジャパン、［平成１６年３月２２日検索］、インターネット、<URL: http://www.easy.co.jp/qmax2/index.html>
【００１５】
上述した従来のアプリケーションプログラムは、エフェクトパラメータを操作するためのＵＩ（User Interface）を有し、ユーザの操作入力に基づいて、他のアプリケーションプログラムの処理により再生されているオーディオデータにエフェクトをかけることができるようになされている。以下、上述した従来のアプリケーションプログラムを、エフェクトパラメータ操作アプリケーションプログラムと称するものとする。
【００１６】
エフェクトパラメータ操作アプリケーションプログラムの処理により、一般アプリケーションプログラムが再生中のオーディオデータにエフェクトが施された後、エフェクトパラメータ操作アプリケーションプログラムを終了しても、一般アプリケーションプログラムにより再生中のオーディオデータはエフェクトがかかっている状態のまま出力される。すなわち、エフェクトパラメータ操作アプリケーションプログラムは、オーディオデータを直接処理するのではなく、オーディオデータを処理する処理モジュールに対して、音声処理のパラメータをコントロールしていることがわかる。
【００１７】
すなわち、図２に示されるように、一般アプリケーションプログラム１により再生されるオーディオデータは、オーディオデータをフックし、信号処理を行うことが可能なモジュールである、オーディオデータフックおよび信号処理モジュール２に供給される。オーディオデータフックおよび信号処理モジュール２は、エフェクトパラメータ操作アプリケーションプログラム３によりパラメータの設定を受け、供給されたオーディオデータにエフェクトを施す。そして、加工済みのオーディオデータが、ドライバ４に供給され、スピーカなどのハードウェアの動作が制御されて、音声出力される。
【発明の開示】
【発明が解決しようとする課題】
【００１８】
上述したように、再生中のオーディオデータにエフェクトをかけることができるアプリケーションプログラムは既に存在するが、エフェクトの種類は、それぞれのアプリケーションプログラム固有のものであり、例えば、DirectX PluginやVSTなどの標準エフェクトプラグインを利用することはできなかった。
【００１９】
上述したような標準プラグインを用いるために、オーディオドライバに見えるユーザモードドライバを構成し、そこにオーディオデータをフックし、プラグインを用いてエフェクトをかける方法があるが、ユーザモードドライバは再生アプリケーション（図２においては一般アプリケーションプログラム１）のスレッド内で実行されるので、プラグインのメモリ上の生存期間は、再生アプリケーション依存となる。
【００２０】
しかしながら、一般的に、エフェクトプラグインの実行においては、信号処理の途中状態やパラメータ設定を内部に保持する必要があるので、メモリ上の生存期間が再生アプリケーション依存でありコントロールできない状態であるとき、パラメータの操作性や信号処理結果に満足するものが得られない。
【００２１】
また、上述したように、従来用いられてきた、再生中のオーディオデータにエフェクトをかけることができるアプリケーションプログラムにおいては、オーディオデータを直接処理するのではなく、オーディオデータを処理する処理モジュールに対して、音声処理のパラメータをコントロールしているのみであるので、エフェクトがかけられたオーディオデータを基に表示内容が生成されるような、例えば、スペアナメータなどのＵＩの表示が困難となる。
【００２２】
本発明はこのような状況に鑑みてなされたものであり、標準プラグインを用いて、一般アプリケーションにより出力されるデータを信号処理することができるようにするものである。
【課題を解決するための手段】
【００２３】
本発明の情報処理装置は、所定のデータを取得し、データに対する信号処理を実行する信号処理実行手段と、信号処理実行手段が、データ、または、データに対する信号処理を実行するために必要な情報を授受するために、データおよび情報を一時記録する記録手段と、データおよび情報を取得し、信号処理を行うか否かを判断して、データの出力先を制御するデータ制御手段とを備え、データ制御手段は、信号処理を行うと判断した場合、データおよび情報を記録手段に書き込み、信号処理実行手段は、記録手段に記録されたデータまたは情報を取得し、データに対する信号処理を実行することを特徴とする。
【００２４】
データを生成するデータ生成手段を更に設けさせるようにすることができ、信号処理実行手段には、データ生成手段の動作に依存しないで、信号処理に関する動作を実行させるようにすることができる。
【００２５】
データ制御手段には、記録手段に情報を記録するための記録領域が存在するか否かを基に、信号処理を行うか否かを判断する判断手段を設けさせるようにすることができる。
【００２６】
データには、データを個別に区別可能な区別情報が対応付けられるものとすることができ、データ制御手段には、データに対応付けられた区別情報を基に、信号処理を行うか否かを判断する判断手段を設けさせるようにすることができる。
【００２７】
データ制御手段には、信号処理実行手段による信号処理のためにデータの形式を変換して、記録手段にデータを書き込むデータ変換手段を設けさせるようにすることができる。
【００２８】
信号処理実行手段には、データを取得するデータ取得手段と、データ取得手段により取得されたデータに対する信号処理を実行する信号処理手段とを設けさせるようにすることができ、信号処理手段は、エフェクトプラグインによって構成されているものとすることができる。
【００２９】
信号処理実行手段には、信号処理手段により処理されたデータにスムージング処理を施すスムージング処理手段を更に設けさせるようにすることができる。
【００３０】
本発明の情報処理方法は、データ、または、データに対する信号処理を実行するために必要な情報を授受するために、データおよび情報を一時記録する記録領域の生成を制御する記録領域生成制御ステップと、データに対して信号処理を行うか否かを判断する判断ステップと、判断ステップの処理によりデータに対して信号処理が行われると判断された場合、データおよび情報の、記録領域生成制御ステップの処理により生成が制御された記録領域への記録を制御する記録制御ステップと、記録制御ステップの処理により記録が制御されたデータおよび情報を基に、データに対する信号処理を実行する信号処理実行ステップと、信号処理実行ステップの処理により信号処理が施されたデータの出力を制御する出力制御ステップとを含むことを特徴とする。
【００３１】
本発明のプログラムは、コンピュータに、データ、または、データに対する信号処理を実行するために必要な情報を授受するために、データおよび情報を一時記録する記録領域の生成を制御する記録領域生成制御ステップと、データに対して信号処理を行うか否かを判断する判断ステップと、判断ステップの処理によりデータに対して信号処理が行われると判断された場合、データおよび情報の、記録領域生成制御ステップの処理により生成が制御された記録領域への記録を制御する記録制御ステップと、記録制御ステップの処理により記録が制御されたデータおよび情報を基に、データに対する信号処理を実行する信号処理実行ステップと、信号処理実行ステップの処理により信号処理が施されたデータの出力を制御する出力制御ステップとを含む処理を実行させることを特徴とする。
【００３２】
本発明の情報処理装置および情報処理方法、並びに、プログラムにおいては、データ、または、データに対する信号処理を実行するために必要な情報を授受するために、データおよび情報を一時記録する記録領域が生成され、データに対して信号処理を行うか否かが判断され、データに対して信号処理が行われると判断された場合、データおよび情報が記録領域へ記録され、記録されたデータおよび情報を基に、データに対する信号処理が実行され、信号処理が施されたデータが出力される。
【発明の効果】
【００３３】
本発明によれば、出力されるデータを信号処理した後に出力することができ、特に、標準プラグインを用いて、一般アプリケーションにより出力されるデータを信号処理することができる。
【発明を実施するための最良の形態】
【００３４】
以下に本発明の実施の形態を説明するが、本明細書に記載の発明と、発明の実施の形態との対応関係を例示すると、次のようになる。この記載は、本明細書に記載されている発明をサポートする実施の形態が、本明細書に記載されていることを確認するためのものである。したがって、発明の実施の形態中には記載されているが、発明に対応するものとして、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その発明に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その発明以外の発明には対応しないものであることを意味するものでもない。
【００３５】
更に、この記載は、本明細書に記載されている発明の全てを意味するものでもない。換言すれば、この記載は、本明細書に記載されている発明であって、この出願では請求されていない発明の存在、すなわち、将来、分割出願されたり、補正により出現、追加される発明の存在を否定するものではない。
【００３６】
請求項１に記載の情報処理装置（たとえば、図３のパーソナルコンピュータ２１）は、所定のデータ（例えば、一般アプリケーションプログラム１０１において再生されたオーディオデータ）を取得し、データに対する信号処理を実行する信号処理実行手段（例えば、図５の信号処理アプリケーションプログラム１０４、すなわち、図６信号処理部１２３）と、信号処理実行手段が、データ、または、データに対する信号処理を実行するために必要な情報を授受するために、データおよび情報を一時記録する記録手段（例えば、図６の共有メモリ領域１２２）と、データおよび情報を取得し、信号処理を行うか否かを判断して、データの出力先を制御するデータ制御手段（例えば、図５のオーディオデータフック用dll１０３、すなわち、図６のデータフック処理部１２１）とを備え、データ制御手段は、信号処理を行うと判断した場合、データおよび情報を記録手段に書き込み、信号処理実行手段は、記録手段に記録されたデータまたは情報を取得し、データに対する信号処理を実行することを特徴とする。
【００３７】
データを生成するデータ生成手段（例えば、図５の一般アプリケーションプログラム１０１）を更に備えることができ、信号処理実行手段は、データ生成手段の動作に依存しないで、信号処理に関する動作を実行することができる。
【００３８】
データ制御手段は、記録手段に情報を記録するための記録領域が存在するか否かを基に、信号処理を行うか否かを判断する判断手段（例えば、図６の設定制御部１４１）を備えることができる。
【００３９】
データには、データを個別に区別可能な区別情報（例えば、ハンドル）を対応付けることができ、データ制御手段は、データに対応付けられた区別情報を基に、信号処理を行うか否かを判断する判断手段（例えば、図６の設定制御部１４１）を備えることができる。
【００４０】
データ制御手段は、信号処理実行手段による信号処理のためにデータの形式を変換して、記録手段にデータを書き込むデータ変換手段（例えば、図６のFIXED-FLOAT変換処理部１４４）を備えることができる。
【００４１】
信号処理実行手段は、データを取得するデータ取得手段（例えば、図６のデータ取得部１６６）と、データ取得手段により取得されたデータに対する信号処理を実行する信号処理手段（例えば、図６のエフェクト処理部１６７）とを備えることができ、信号処理手段は、エフェクトプラグインによって構成されるものとすることができる。
【００４２】
信号処理実行手段は、信号処理手段により処理されたデータにスムージング処理を施すスムージング処理手段（例えば、図６のスムージング処理部１６８）を更に備えることができる。
【００４３】
請求項８に記載の情報処理方法は、所定のデータ（例えば、一般アプリケーションプログラム１０１において再生されたオーディオデータ）を出力する情報処理装置（例えば、図３のパーソナルコンピュータ２１）の情報処理方法であって、データ、または、データに対する信号処理を実行するために必要な情報を授受するために、データおよび情報を一時記録する記録領域（例えば、図６の共有メモリ領域１２２）の生成を制御する記録領域生成制御ステップ（例えば、図１７のステップＳ１８７の処理、または、図１８のステップＳ２１２の処理）と、データに対して信号処理を行うか否かを判断する判断ステップ（例えば、図１７のステップＳ１８１またはステップＳ１８２の処理）と、判断ステップの処理によりデータに対して信号処理が行われると判断された場合、データおよび情報の、記録領域生成制御ステップの処理により生成が制御された記録領域への記録を制御する記録制御ステップ（例えば、図１７のステップＳ１８４の処理、または、ステップＳ１８９の処理）と、記録制御ステップの処理により記録が制御されたデータおよび情報を基に、データに対する信号処理を実行する信号処理実行ステップ（例えば、図１８のステップＳ２１５）と、信号処理実行ステップの処理により信号処理が施されたデータの出力を制御する出力制御ステップ（例えば、図１６のステップＳ１５８乃至ステップＳ１６０の処理）とを含むことを特徴とする。
【００４４】
また、請求項９に記載のプログラムにおいても、各ステップが対応する実施の形態（但し一例）は、請求項８に記載の情報処理方法と同様である。
【００４５】
以下、図を参照して、本発明の実施の形態について説明する。
【００４６】
図３は、本発明を適用したパーソナルコンピュータ２１のハードウェア構成を示すブロック図である。
【００４７】
パーソナルコンピュータ２１のＣＰＵ３１は、パーソナルコンピュータ２１の動作の全体を制御する。また、ＣＰＵ３１は、内部バス３３および入出力インターフェース３２を介して、マウス５１やキーボード５２などからなる入力部３４から、ユーザによる操作入力が入力されると、それに対応してＲＯＭ（Read Only Memory）３５に格納されているプログラムをＲＡＭ（Random Access Memory）３６にロードして実行する。あるいはまた、ＣＰＵ３１は、ＨＤＤ３８にインストールされたプログラムをＲＡＭ３６にロードして実行し、ディスプレイ５３やスピーカ５４などの出力部３７に実行結果を出力させる。更に、ＣＰＵ３１は、ネットワークインターフェース４０を制御して、外部と通信し、データの授受を実行する。
【００４８】
また、ＣＰＵ３１は、内部バス３３および入出力インターフェース３２を介して、必要に応じて、ドライブ３９と接続され、ドライブ３９に必要に応じて装着された磁気ディスク４１、光ディスク４２、光磁気ディスク４３、または半導体メモリ４４と情報を授受することができるようになされている。
【００４９】
次に、図４は、ＣＰＵ３１が実行可能なソフトウェアのソフトウェアスタックと、例えば、入力部３４のマウス５１、キーボード５２、出力部３７のディスプレイ５３、スピーカ５４、または、ＨＤＤ３８などを動作させるハードウェアとの関係を示す図である。
【００５０】
ハードウェア７１は、具体的には、入力部３４のマウス５１、キーボード５２、出力部３７のディスプレイ５３、スピーカ５４、または、ＨＤＤ３８などを動作させるためのハードウェアであり、例えば、ビデオボード、サウンドボード、または、ネットワークボードなどがある。
【００５１】
ＢＩＯＳ（Basic I/O System）７２は、ＯＳ７４やアプリケーションプログラム７６などがパーソナルコンピュータ２１のデバイスにアクセスするための機能を提供するものであり、ファームウェアとも称され、ソフトウェアとは異なるものである。
【００５２】
ドライバーソフト７３は、ハードウェア７１を動作させるための専用ソフトウェアである。ドライバーソフト７３には、例えば、マウス５１を動作させるためのマウスドライバ、ディスプレイ５３に画像を表示させるためのビデオカードを動作させるためのディスプレイドライバ、ネットワークインターフェース４０を介して接続されている図示しないプリンタを動作させるためのプリンタドライバなどがある。
【００５３】
ＯＳ７４は、パーソナルコンピュータ２１の基本的な動作を制御しているものであり、各種資源を管理し、例えば、アプリケーションプログラム７６が発生した命令を、ドライバーソフト７３やＢＩＯＳ７２に伝える。また、ＯＳ７４が、マルチタスクやマルチウィンドウ機能を持つ場合、は、アプリケーションプログラム７６の実行コンテキスト（あるアプリケーションプログラム７６が利用しているレジスタセットやメインメモリイメージ、ファイルハンドルなど）やＧＵＩの部品などのソフトウェア資源の管理も行うようになされている。ＯＳ７４には、例えば、Windows(R)95（商標）、Windows(R)98（商標）、Windows(R)NT（商標）、LINUX，OS/2（商標）などがある。本実施の形態においては、以下、ＯＳ７４として、Windows(R)系のものが用いられている場合を例として説明する。
【００５４】
ＤＬＬ（Dynamic Link Library）７５は、いくつかの関数を書庫のようにまとめ、ソフトウェアの実行に必要な機能を独立したファイルとして共通化したものであり、通常はファイルそのものをＤＬＬと称する。サブルーチンはプログラム内部のものだが、ＤＬＬ７５はプログラムとは別に実行時にロードされるものとして区別される。Windows(R)は多くの機能をＤＬＬ７５として提供している。ＤＬＬ７５として提供されている機能は新たに開発せずにすむので、アプリケーションプログラム７６の開発効率が高まり、更に、同じプログラム部品を複数のアプリケーションプログラム７６で共有することができるので、ディスクやメモリの容量を節約することができる。
【００５５】
アプリケーションプログラム７６は、パーソナルコンピュータ２１を用いて、例えば、文書作成、表計算、データベース作成、電子メールの授受、ウェブページの閲覧など、それぞれの目的を実現するためのソフトウェアプログラムである。アプリケーションプログラム７６は、その実行のためにＤＬＬ７５を利用するようになされている場合、必要なＤＬＬ７５が用意されていないと動作することができない。
【００５６】
すなわち、ＯＳ７４であるWindows(R)においては、アプリケーションプログラム７６が実行するプロセスが自分以外のコードの一部である関数を呼び出すための方法として動的リンクが用いられており、関数の実行可能コードがＤＬＬ７５に記載されている。
【００５７】
次に、図５は、本発明を適用した信号処理アプリケーションプログラムが、一般的なアプリケーションプログラムとともに、パーソナルコンピュータ２１のＣＰＵ３１において実行される場合のソフトウェアモジュールおよびハードウェアモジュールの関係図である。ここでは、本発明を適用した信号処理アプリケーションプログラムがオーディオデータの信号処理を行う場合を例として説明する。図中、実線がオーディオデータの授受を示し、点線が、制御情報の授受を示す
【００５８】
一般アプリケーションプログラム１０１は、一般的なオーディオ再生機能を持つWindows(R)対応のアプリケーションプログラムであり、各種制御情報や、再生しようとするオーディオデータを、Winmm.dll１０２に供給することにより、オーディオ再生を実現する。
【００５９】
Winmm.dll１０２は、Windows(R)を構成するモジュールのうちの１つであり、複数のオーディオユーザモードドライバを管理するものである。Winmm.dll１０２は、他のモジュールから供給された制御信号およびオーディオデータを、レジストリの設定に基づいて、適切なオーディオユーザモードドライバに供給するようになされている。
【００６０】
オーディオデータフック用dll１０３は、一般アプリケーションプログラム１０１のプロセスの中で動作するユーザモードドライバであり、一般アプリケーションプログラム１０１からWinmm.dll１０２に供給されたオーディオデータを取得（フック）して、信号処理アプリケーションプログラム１０４に供給するとともに、信号処理されたオーディオデータの供給を受け、信号処理アプリケーションプログラム１０４において出力先のドライバとして設定されているユーザモードドライバ（ここでは、Wdmaud.drv１０５）にオーディオデータを供給して再生出力させるために、信号処理されたオーディオデータを、再度、Winmm.dll１０２に供給するものである。
【００６１】
オーディオデータフック用dll１０３を、一般アプリケーションプログラム１０１のプロセスの中で動作させ、一般アプリケーションプログラム１０１からWinmm.dll１０２に供給されたオーディオデータを取得させるためには、レジストリを設定する必要がある。すなわち、オーディオデータフック用dll１０３を、Windows\System32の下に記憶させ、レジストリキー（ここでは、OSがWindows(R) NTである場合のレジストリキーを例とする）HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32に、wavという文字列値を作成し、そこにオーディオデータフック用dll１０３に対応するファイル名を記述することにより、オーディオデータフック用dll１０３をユーザモードドライバとして追加して認識させる。なお、文字列値wavが既にある場合は文字列値wav1を作成し、文字列値wav1が既にある場合は文字列値wav2を作成するものとする。
【００６２】
以上の作業により、Windows(R)からはオーディオデータフック用dll１０３がオーディオデバイスとして認識され、実行されるそれぞれのアプリケーションソフトウェアからは１つのオーディオデバイスとして認識されるようになり、オーディオデータフック用dll１０３は、例えば、Windows(R)の一般的な設定画面（例えば、「サウンドとオーディオデバイスのプロパティ−オーディオ−既定のデバイス」）において、オーディオデバイスとして表示されるようになる。そして、一般アプリケーションプログラム１０１が、再生用のユーザモードドライバとして、オーディオデータフック用dll１０３を選択して設定することにより、一般アプリケーションプログラム１０１からWinmm.dll１０２に供給されたオーディオデータを、オーディオデータフック用dll１０３が取得することができるように設定される。
【００６３】
信号処理アプリケーションプログラム１０４は、オーディオデータフック用dll１０３から供給されたオーディオデータにエフェクトプラグインによる信号処理を施し、再度、オーディオデータフック用dll１０３に供給する。オーディオデータフック用dll１０３に供給されたエフェクト処理後のオーディオデータは、信号処理アプリケーションプログラム１０４において出力先ドライバとして設定されているユーザモードドライバに供給される。すなわち、信号処理アプリケーションプログラム１０４において、出力先ドライバとしてWdmaud.drv１０５が設定されているとき、エフェクト処理後のオーディオデータは、オーディオデータフック用dll１０３から、Winmm.dll１０２を介して、Wdmaud.drv１０５に供給される。出力先ドライバの設定については後述する。
【００６４】
また、信号処理アプリケーションプログラム１０４は、オーディオデータフック用dll１０３とは独立したプロセスで動作するものである。すなわち、一般アプリケーションプログラム１０１とは独立したプロセスで動作するものであるので、エフェクトプラグインによる信号処理において、信号処理の途中状態やパラメータ設定を内部に保持するときのメモリ上の生存期間を、一般アプリケーションプログラム１０１の起動に依存せずにコントロールすることができる。更に、信号処理アプリケーションプログラム１０４は、Windows(R)のログオン時、自動起動され、ログオフまで常駐されるものとしても良い。
【００６５】
Wdmaud.drv１０５は、Windows(R)の標準のオーディオユーザモードドライバであり、供給されたオーディオデータをWDMオーディオドライバ１０６に供給する。WDMオーディオドライバ１０６は、オーディオハードウェア１０７と直接データをやり取りするカーネル（Kernel）モードドライバである。オーディオハードウェア１０７は、例えば、図３の出力部３７のスピーカ５４により音声出力を行うためのサウンドボードに対応するものであり、オーディオ出力のためのハードウェアである。
【００６６】
次に、図６は、図５のオーディオデータフック用dll１０３と、信号処理アプリケーションプログラム１０４が実行されている場合に実現可能な機能について説明するための機能ブロック図である。
【００６７】
すなわち、図６においては、データフック処理部１２１は、オーディオデータフック用dll１０３が実現可能な機能であり、信号処理部１２３は、信号処理アプリケーションプログラム１０４が実現可能な機能であり、共有メモリ領域１２２は、図５のオーディオデータフック用dll１０３と、信号処理アプリケーションプログラム１０４が実行されている場合に、その処理において用いられるＲＡＭ３６の記憶領域である。
【００６８】
データフック処理部１２１の設定制御部１４１は、Winmm.dll１０２から、所定の関数を呼び出された場合、例えば、共有メモリ領域のフォーマットエリア１５１が設定されているか否か、または、既に信号処理部１２３がオーディオデータを処理中であるか否かなど、処理実行のために必要な各種の情報を基に、データ取得部１４２、出力制御部１４３、FIXED-FLOAT変換処理部１４４、リミッタ制御部１４５、および、FLOAT-FIXED変換処理部１４６の動作を制御し、必要な情報を、共有メモリ領域１２２のフォーマットエリア１５１に書き込む。
【００６９】
データ取得部１４２は、Winmm.dll１０２から供給されるオーディオデータを取得し、出力制御部１４３に供給する。出力制御部１４３は、設定制御部１４１の制御にしたがって、供給されたオーディオデータを、共有メモリ領域１２２のデータエリア１５２に書き込むためにFIXED-FLOAT変換処理部１４４に供給するか、または、Winmm.dll１０２に出力する。
【００７０】
FIXED-FLOAT変換処理部１４４は、出力制御部１４３から供給された、整数として表されたオーディオデータを、浮動小数に変換する。これは、一般アプリケーションプログラム１０１から供給されるオーディオデータは、整数として表されているが、信号処理部１２３における後述するエフェクト処理部１６７での演算処理が浮動小数で行われるため、浮動小数に変換する必要があることとともに、浮動小数に変換することで、元のオーディオデータのビット長を信号処理部１２３で考慮する必要がなくなるためである。
【００７１】
リミッタ処理部１４５は、浮動小数で表された処理済のオーディオデータを、データエリア１５２から読み出し、後述するFLOAT-FIXED変換処理部１４６の処理により、オーディオデータの形式を整数に戻す場合にオーバーフローしてしまうことを防止するためにリミッタ処理（すなわち、所定の最大値および最小値を超えた場合、一律に、所定の最大値および最小値に値を丸める処理）を施す。FLOAT-FIXED変換処理部１４６は、浮動小数で表され、リミッタ処理が施された処理済のオーディオデータを、もとのビット長で表された整数値に戻し、出力制御部１４３に供給する。
【００７２】
共有メモリ領域１２２のフォーマットエリア１５１は、データフック処理部１２１と信号処理部１２３とで、例えば、オーディオデータのサンプリング周波数、チャンネル数、出力デバイス名、オーディオデータの大きさなどの、制御データや設定データを授受するために設けられる記憶領域である。フォーマットエリア１５１は、信号処理部１２３の機能が有効となっているとき、後述する信号処理部１２３の設定制御部１６３の処理により生成される。データエリア１５２は、データフック処理部１２１と信号処理部１２３とで、オーディオデータを授受するために設けられる記憶領域である。
【００７３】
信号処理部１２３の操作入力取得部１６１は、入力部３４から入力されるユーザによる操作入力を、表示制御部１６２、設定制御部１６３、および、エフェクト設定部１６４に供給する。
【００７４】
表示制御部１６２は、ユーザに操作入力を促すための各種ＧＵＩ（Graphic User Interface）の表示を制御するものであり、例えば、図７乃至図９に示されるＧＵＩを出力部３７のディスプレイ５３に表示させる。
【００７５】
図７は、ユーザが信号処理部１２３（すなわち、信号処理アプリケーションプログラム１０４）の設定を行うために表示される設定ウィンドウ１８１の表示例を示す図である。
【００７６】
ボタン１９１は、信号処理部１２３が処理を行うか否かをユーザが指令するためのボタンであり、このボタン１９１上に表示されている文字が、図７に示されているように「ＯＮ」であるとき、信号処理部１２３は、処理を実行し、このボタン１９１上に表示されている文字が「ＯＦＦ」であるとき、信号処理部１２３は、処理を実行しない。信号処理部１２３が、処理を実行するように設定されている場合、共有メモリ領域１２２にフォーマットエリア１５１が作成される。信号処理部１２３が、処理を実行しない場合、共有メモリ領域１２２にフォーマットエリア１５１が作成されないので、データフック処理部１２１の設定制御部１４１は、出力制御部１４３を制御して、供給されたオーディオデータを、Winmm.dll１０２を介して、Wdmaud.drv１０５に供給する。
【００７７】
エフェクトプリセット名称設定ボックス１９２は、設定されているエフェクトプリセットの名称の一覧を表示可能なドロップダウンリストボックスである。エフェクトプリセットとは、エフェクトプラグインの並びおよびパラメータを記憶した一連の情報に、所定のプリセット名を関連付けて管理しているものであり、ユーザは、エフェクトプリセット名称設定ボックス１９２に表示されているエフェクトプリセット名称のうち、所望のものを選択することにより、登録済みのエフェクトプラグインの並びおよびパラメータを設定することが可能となる。
【００７８】
設定ボタン１９３は、更に詳細な設定を行うための、図８を用いて後述する設定画面を表示させるとき、ユーザにより選択されるボタンである。
【００７９】
テキストボックス１９４は、信号処理部１２３において信号処理を行うために設定されるエフェクトプラグイン（後述する図６のエフェクトプラグイン１７１−１乃至１７１−ｎ）の名称を示すテキストボックスである。ボタン１９５は、テキストボックス１９４に記載されたエフェクトプラグインにより処理を実行するか否かを設定するためのボタンであり、このボタン１９５上に表示されている文字が、図７に示されているように「ＯＮ」であるとき、信号処理部１２３は、テキストボックス１９４に記載されたエフェクトプラグインを利用して、供給されたオーディオデータにエフェクトをかけ、このボタン１９５上に表示されている文字が「ＯＦＦ」であるとき、信号処理部１２３は、テキストボックス１９４に記載されたエフェクトプラグインを利用しないようになされている。
【００８０】
変更ボタン１９６は、テキストボックス１９４に表示されているエフェクトプラグインを変更する場合に操作されるボタンであり、変更ボタン１９６が押下されたとき、例えば、利用可能なエフェクトプラグインの一覧が表示されたテキストボックスが表示され、ユーザが、テキストボックスより、所望のエフェクトプラグインを選択したとき、テキストボックス１９４に表示されているエフェクトプラグインが選択されたものに変更されるようになされている。詳細設定ボタン１９７は、テキストボックス１９４に表示されているエフェクトプラグインの詳細設定を行うために、例えば、図９に示されるような、エフェクトプラグイン自体が表示機能を有する詳細設定画面を表示させるために、ユーザにより選択されるボタンである。
【００８１】
図８は、図７を用いて説明した設定ウィンドウ１８１の設定ボタン１９３がユーザにより選択された場合に表示される設定画面２０１の一例を示す図である。
【００８２】
オーディオデバイス選択ボックス２１１は、信号処理部１２３により処理されたオーディオデータの出力先となるオーディオデバイス名を選択するためのドロップダウンリストボックスである。オーディオデバイス選択ボックス２１１には、オーディオデータの出力先として選択可能なオーディオデバイス（ユーザモードドライバ）名の一覧が表示され、ユーザは、オーディオデバイス選択ボックス２１１に表示されているもののうち、所望のものを選択することにより、信号処理部１２３により処理されたオーディオデータが出力されるオーディオデバイス、すなわち、図５を用いて説明した信号処理アプリケーションプログラム１０４からオーディオフック用ｄｌｌ１０３を介して、Winmm.dll１０２に供給されたオーディオデータの出力先（図５においては、Wdmaud.drv１０５）を設定することが可能となる。
【００８３】
チェックボックス２１２は、エフェクトの適用範囲をWindows(R)の既定のデバイスに設定するか否かを設定するためのものである。すなわち、上述したように、オーディオデータフック用dll１０３が、Windows(R)の既定のデバイスに設定されているとき、エフェクトの適用範囲は、オーディオデータフック用dll１０３に設定される。なお、同様の設定は、設定画面２０１を表示させる以外にも、Windows(R)に予め設けられている設定画面においても可能である。
【００８４】
フォルダ一覧リストボックス２１３は、図７を用いて説明した変更ボタン１９６が押下されたときに表示される、利用可能なエフェクトプラグインの一覧が表示されたテキストボックスに記載されるエフェクトプラグインの実体であるdllファイルなどのフォルダ群の一覧が表示されるものである。ユーザは、追加ボタン２１４を押下して、新たなフォルダをフォルダ一覧リストボックス２１３に追加したり、削除ボタン２１５を押下して、フォルダ一覧リストボックス２１３に記載されているフォルダのうち所望のものをリストから削除することができる。なお、フォルダ一覧リストボックス２１３に記載されているエフェクトプラグインの実体であるdllファイルなどのフォルダ群は、ここで設定されることにより、例えば、ＲＡＭ３６のプログラム実行領域などにコピーされるのではなく、ファイルパスが設定されるのみである。
【００８５】
再読み込みボタン２１６は、フォルダ一覧リストボックス２１３に記載されているフォルダ群が変更された場合、変更されたフォルダ群を再読み込みし、図７を用いて説明した設定ウィンドウ１８１において、変更ボタン１９６が押下されたときに表示される、利用可能なエフェクトプラグインの一覧が表示されたテキストボックスに記載される情報を更新するために選択されるボタンである。
【００８６】
ＯＫボタン２１７は、設定画面２０１の上述したそれぞれの設定の変更を確定し、設定画面２０１の表示をやめて、図７を用いて説明した設定ウィンドウ１８１を再び表示させる場合にユーザにより選択されるボタンである。キャンセルボタン２１８は、設定画面２０１の上述したそれぞれの設定の変更をキャンセルし、設定画面２０１の表示をやめて、図７を用いて説明した設定ウィンドウ１８１を再び表示させる場合にユーザにより選択されるボタンである。
【００８７】
次に、図９は、図７を用いて説明した設定ウィンドウ１８１の詳細設定ボタン１９７が押下された場合、テキストボックス１９４に表示されているエフェクトプラグインの詳細設定を行うために表示される、エフェクトプラグイン自体が表示機能を有する詳細設定画面２３１について説明するための図である。
【００８８】
すなわち、詳細設定画面２３１は、後述するエフェクト処理部１６７のエフェクトプラグイン１７１−１乃至エフェクトプラグイン１７１−ｎの種類に依存されるものである。また、信号処理部１２３に対応する信号処理アプリケーションプログラム１０４は、図２を用いて説明した従来のエフェクト操作アプリケーションプログラム３とは異なり、自分自身でオーディオデータに処理を施すものであるので、詳細設定画面２３１には、レベルメータ２４１−１乃至２４１−４を表示させるようにすることができる。
【００８９】
図６の説明に戻る。
【００９０】
設定制御部１６３は、操作入力取得部１６１より入力されたユーザの操作入力、および、フォーマットエリア１５１に記載された各種制御信号およびパラメータを基に、エフェクト設定部１６４を制御したり、データ取得部１６６、スムージング処理部１６８、および、データ出力制御部１６９を制御する。
【００９１】
エフェクト設定部１６４は、操作入力取得部１６１より入力されたユーザの操作入力、および、設定制御部１６３による制御に基づいて、エフェクト処理部１６７の設定および処理を制御し、必要に応じて、エフェクト処理部１６７の設定情報を、設定保持制御部１６５に供給する。設定保持制御部１６５は、エフェクト設定部１６４から供給されたエフェクト処理部１６７の設定情報を、ＨＤＤ３８に一時保存し、エフェクト設定部１６４の制御に基づいて、一時保持した設定情報を読み出して、エフェクト設定部１６４に供給する。
【００９２】
データ取得部１６６は、設定制御部１６３の制御にしたがって、共有メモリ領域１２２のデータエリア１５２に記憶されているオーディオデータを読み出して取得し、エフェクト処理部１６７に供給する。
【００９３】
エフェクト処理部１６７は、図７を用いて説明した設定ウィンドウ１８１、および、図８を用いて説明した設定画面２０１を参照したユーザが設定したエフェクトプラグイン１７１−１乃至エフェクトプラグイン１７１−ｎ（ｎは正の整数）により、供給されたオーディオデータにエフェクトを施し、エフェクト処理後のオーディオデータをスムージング処理部１６８に供給する。エフェクトプラグイン１７１−１乃至エフェクトプラグイン１７１−ｎには、例えば、DirectX Pluginや、VST Pluginなどを用いることができる。
【００９４】
スムージング処理部１６８は、信号処理の構成が変わったときに、出力結果のオーディオデータが不連続となるために発生する“ポツッ”というノイズを防止するためのスムージング処理を実行する。信号処理部１２３においては、図７を用いて説明した設定ウィンドウ１８１、および、図８を用いて説明した設定画面２０１を参照したユーザが、エフェクトプラグイン１７１−１乃至エフェクトプラグイン１７１−ｎの構成や順番を変更したり、ユーザが指定したエフェクトの処理をバイパスすることができるようになされているので、そのとき、出力結果のオーディオデータが不連続となってしまう。このときノイズが発生してしまうのを抑制するため、エフェクト処理部１６７により処理されたオーディオデータは、スムージング処理部１６８によりスムージング処理が施されて、データ出力制御部１６９に出力される。
【００９５】
スムージング処理部１６８は、図１０に示される回路により実行されるスムージング機能を有する。図１０において、ｘ［ｎ］はスムージング処理部１６８に供給されるオーディオデータの離散データ、Ｋｓ［ｎ］は係数であり、スムージング処理部１６８においては、例えば、Ｋｓ［ｎ］＝１とする。スムージング開始時において、ｎ＝０とすると、［Ｚ-1］の初期値を０、Ｋｓ［０］＝１として回路をスタートさせることにより、出力されるＸ［ｎ］の音量はゆっくり立ち上がるので、出力されるオーディオデータのノイズが抑止される。
【００９６】
そして、データ出力制御部１６９は、設定制御部１６３の制御にしたがって、スムージング処理部１６８から供給されたオーディオデータを、共有メモリ領域１２２のデータエリア１５２に書き込む処理を実行する。
【００９７】
次に、図１１のアローチャートを参照して、図５を用いて説明したソフトウェアモジュールの動作について説明する。
【００９８】
ステップＳ３１において、一般アプリケーションプログラム１０１は、オーディオデータを、既定のユーザモードドライバとして設定されているオーディオデータフック用dll１０３に出力するための処理を開始するために、Winmm.dll１０２のwaveoutOpen関数を呼び出す。
【００９９】
ステップＳ３２において、Winmm.dll１０２は、ユーザモードドライバとして指定されているオーディオデータフック用dll１０３のwodMesssageOpen関数を呼びだす。
【０１００】
オーディオデータフック用dll１０３は、共有メモリ領域１２２のフォーマットエリア１５１が存在するか否かを確認し、サンプリング周波数およびチャンネル数を書き込むなどの処理（図１３を用いて後述するオープン確認処理）を実行する。そして、ステップＳ３３において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４に、オープンイベント（OpenEvent）を出力する。
【０１０１】
信号処理アプリケーションプログラム１０４は、オープンイベントを受け、オープンのための処理（図１４を用いて後述するオープン処理）を実行する。そして、ステップＳ３４において、信号処理アプリケーションプログラム１０４は、オーディオデータフック用dll１０３に、オープン終了イベント（OpenFinishedEvent）を出力する。
【０１０２】
ステップＳ３５において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されているWdmaud.drv１０５をオープンするために、Winmm.dll１０２のwaveoutOpen関数を呼び出す。
【０１０３】
ステップＳ３６において、Winmm.dll１０２は、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されているWdmaud.drv１０５のwodMesssageOpen関数を呼びだす。
【０１０４】
ステップＳ３１乃至ステップＳ３６を用いて説明したオープン処理の詳細については、図１２を用いて後述する。
【０１０５】
次に、ステップＳ３７において、一般アプリケーションプログラム１０１は、オーディオデータを、既定のユーザモードドライバとして設定されているオーディオデータフック用dll１０３に書き込むために、Winmm.dll１０２のwaveoutWrite関数を呼び出す。
【０１０６】
ステップＳ３８において、Winmm.dll１０２は、ユーザモードドライバとして指定されているオーディオデータフック用dll１０３のwodMesssageWrite関数を呼びだす。
【０１０７】
オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４がオーディオデータを処理可能な状態であるか否かを確認し、共有メモリ領域１２２にインプットフォーマットおよびオーディオデータを書き込むなどの処理（図１７を用いて後述する書き込み確認処理）を実行する。そして、ステップＳ３９において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４に、インプットイベント（InputEvent）を出力する。
【０１０８】
信号処理アプリケーションプログラム１０４は、インプットイベントを受け、ステップＳ４０において、オーディオデータを取得し、エフェクトを施して、共有メモリ領域１２２に処理後のオーディオデータを書き込む処理（図１８を用いて後述するデータエフェクト処理）を実行する。
【０１０９】
そして、ステップＳ４１において、信号処理アプリケーションプログラム１０４は、オーディオデータフック用dll１０３に、アウトプットイベント（OutputEvent）を出力する。
【０１１０】
ステップＳ４２において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４から供給されたオーディオデータを、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されているWdmaud.drv１０５に出力するために、Winmm.dll１０２のwaveoutWrite関数を呼び出して、オーディオデータを供給する。
【０１１１】
ステップＳ４３において、Winmm.dll１０２は、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されているWdmaud.drv１０５のwodMesssageWrite関数を呼びだして、オーディオデータを供給する。
【０１１２】
ライト処理は、オープン処理とクローズ処理との間で、一連のオーディオデータの処理が終了するまで繰り返される。
【０１１３】
ステップＳ３７乃至ステップＳ４３を用いて説明したライト処理の詳細については、図１６を用いて後述する。
【０１１４】
次に、ステップＳ４４において、一般アプリケーションプログラム１０１は、オーディオデータの書き込みの終了を、既定のユーザモードドライバとして設定されているオーディオデータフック用dll１０３に通知するために、Winmm.dll１０２のwaveoutClose関数を呼び出す。
【０１１５】
ステップＳ４５において、Winmm.dll１０２は、ユーザモードドライバとして指定されているオーディオデータフック用dll１０３のwodMesssageClose関数を呼びだす。
【０１１６】
オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４が、書き込み終了の通知の対象となるオーディオデータを処理していたか否かを確認する処理（図２１を用いて後述するクローズ確認処理）を実行する。そして、ステップＳ４６において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４に、クローズイベント（CloseEvent）を出力する。
【０１１７】
そして、ステップＳ４７において、信号処理アプリケーションプログラム１０４は、プラグインの終了処理を実行し、オーディオデータフック用dll１０３に、クローズ終了イベント（CloseFinishedEvent）を出力する。
【０１１８】
ステップＳ４８において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されているWdmaud.drv１０５に、オーディオデータの書き込みの終了を通知するために、Winmm.dll１０２のwaveoutClose関数を呼び出す。
【０１１９】
ステップＳ４９において、Winmm.dll１０２は、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されているWdmaud.drv１０５のwodMesssageClose関数を呼び出す。
【０１２０】
ステップＳ４４乃至ステップＳ４９を用いて説明したクローズ処理の詳細については、図２０を用いて後述する。
【０１２１】
このような処理を行うことにより、一般アプリケーションプログラム１０１において出力されるオーディオデータに、例えば、DirectX Pluginや、VST Pluginなどのエフェクトプラグイン１７１−１乃至エフェクトプラグイン１７１−ｎを用いて効果を施し、出力することが可能となる。
【０１２２】
すなわち、本発明を適用した信号処理アプリケーションプログラム１０４を利用して、一般アプリケーションプログラム１０１により出力されるオーディオデータにエフェクトを施すようにした場合、図１を用いて説明した従来における場合と比較して、図１１におけるステップＳ３２乃至ステップＳ３５の処理、ステップＳ３８乃至ステップＳ４２の処理、および、ステップＳ４５乃至ステップＳ４８の処理が新たに加えられるものである。
【０１２３】
次に、図１２のアローチャートを用いて、オープン処理の詳細について説明する。
【０１２４】
ステップＳ６１において、一般アプリケーションプログラム１０１は、オーディオデータを、既定のユーザモードドライバとして設定されているオーディオデータフック用dll１０３に出力するための処理を開始するために、Winmm.dll１０２のwaveoutOpen関数を呼び出す（図１１のステップＳ３１の処理）。
【０１２５】
ステップＳ６２において、Winmm.dll１０２は、ユーザモードドライバとして指定されているオーディオデータフック用dll１０３のwodMesssageOpen関数を呼びだす（図１１のステップＳ３２の処理）。このとき、Winmm.dll１０２は、WAVEFORMATEX構造体で、チャンネル数、サンプリング周波数、および、データのビット数などの情報を、オーディオデータフック用dll１０３に供給する。
【０１２６】
ステップＳ６３において、オーディオデータフック用dll１０３は、図１３を用いて後述するオープン確認処理を実行する。そして、ステップＳ６４において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４に、オープンイベント（OpenEvent）を出力する（図１１のステップＳ３３の処理）。
【０１２７】
ステップＳ６５において、信号処理アプリケーションプログラム１０４は、図１４を用いて後述するオープン処理を実行する。そして、ステップＳ６６において、信号処理アプリケーションプログラム１０４は、オーディオデータフック用dll１０３に、オープン終了イベント（OpenFinishedEvent）を出力し、出力先として指定するデバイス名（そのデバイスをドライブするドライバ名）の情報を供給する（図１１のステップＳ３４の処理）。
【０１２８】
ステップＳ６７において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されたデバイス名（そのデバイスをドライブするドライバ名）を記憶する。そして、ステップＳ６８において、オーディオデータフック用dll１０３は、指定されたドライバであるWdmaud.drv１０５をオープンするために、Winmm.dll１０２のwaveoutOpen関数を呼び出す（図１１のステップＳ３５の処理）。
【０１２９】
ステップＳ６９において、Winmm.dll１０２は、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されているWdmaud.drv１０５のwodMesssageOpen関数を呼びだす（図１１のステップＳ３６の処理）。
【０１３０】
ステップＳ７０において、Wdmaud.drv１０５は、オーディオデータの出力処理を、それぞれ個別に区別するためのハンドルを生成する。そして、ステップＳ７１において、Wdmaud.drv１０５は、Winmm.dll１０２に、Open終了応答および生成したハンドルを通知する。
【０１３１】
ステップＳ７２において、Winmm.dll１０２は、一般アプリケーションプログラム１０１に、Open終了応答および生成したハンドルを通知する。
【０１３２】
ステップＳ７３において、一般アプリケーションプログラム１０１は、通知されたハンドルを記憶する。
【０１３３】
ステップＳ７４において、Winmm.dll１０２は、オーディオデータフック用dll１０３に、Open終了応答および生成したハンドルを通知する。
【０１３４】
ステップＳ７５において、オーディオデータフック用dll１０３は、オープン済みフラグを立て、通知されたハンドルを記憶して、オープン処理が終了される。
【０１３５】
一般に、オーディオのユーザモードドライバは、同時に複数のアプリケーションからのオーディオデータ再生要求を受け付けることができる。つまり、１つのアプリケーションがあるユーザモードドライバをオープン中であっても、別のアプリケーションが同じユーザモードドライバをオープンすることができる。
【０１３６】
しかし、信号処理部１２３のエフェクト処理部１６７が実行する信号処理は、その内容によっては過去の信号を利用して現在の信号を生成するような場合がある。具体的には、エフェクトの種類が「エコー」である場合、現在の音と過去の音が混ざった音が出力されるようになされている。つまり、信号処理部１２３のエフェクト処理部１６７が実行する信号処理（エフェクトプラグイン１７１−１乃至１７１−ｎ）として、標準エフェクトプラグインを利用する場合、どういう信号処理がプラグインされてもよいように、様々な条件を考慮する必要がある。
【０１３７】
すなわち、信号処理部１２３のエフェクト処理部１６７が実行する信号処理においては、連続したオーディオデータは、間に別のオーディオデータの演算が入ることなく連続して処理をするようにしなければならない。たとえ、離散的に処理をする場合においても、連続したデータの間に別のデータの演算をすることはできない。
【０１３８】
したがって、信号処理アプリケーションプログラム１０４は、同時に複数のデータを処理することはできない。そこで、あるひとつのアプリケーションがオーディオデータフック用dll１０３をオープンしているときは、他のアプリケーションがオーディオデータフック用dll１０３をオープンしても、オープン自体は可能であるが、信号処理アプリケーションプログラム１０４の処理による信号処理は行われず、そのまま次の処理、すなわち、Winmm.dll１０２のwaveoutOpen関数の読み出し処理を行い、以下、ライト処理、およびクローズ処理においても、信号処理アプリケーションプログラム１０４に各種イベントを通知せずに、Winmm.dll１０２の関数を読み出して、従来における場合と同様の処理によってオーディオデータを出力させるようになされている。
【０１３９】
既にいずれかのアプリケーションによりオーディオデータフック用dll１０３がオープンされているか否かは、オープン済みフラグがたっているか否かによって判断可能であり、ライト要求およびクローズ要求が、オーディオデータフック用dll１０３を最初にオープンさせたオーディオデータによるものであるのか否かは、ハンドルが一致するか否かによって判断可能である。
【０１４０】
次に、図１３のフローチャートを参照して、オーディオデータフック用dll１０３がステップＳ６３において実行する、オープン確認処理について説明する。
【０１４１】
ステップＳ９１において、オーディオデータフック用dll１０３が実現する機能である図６を用いて説明したデータフック処理部１２１（以下、同様であるので省略する）の設定制御部１４１は、オープン処理終了時に、図１２のステップＳ７５の処理において立てられるオープン済みフラグが既にたっているか否かを判断する。ステップＳ９１において、オープン済みフラグがたっていると判断された場合、図６の信号処理部１２３の機能を実現する信号処理アプリケーションプログラム１０４（以下、同様であるので省略する）は、既に異なるオーディオデータの処理を実行中であるので、処理は、後述するステップＳ９４に進む。
【０１４２】
ステップＳ９１において、オープン済みフラグがたっていないと判断された場合、ステップＳ９２において、設定制御部１４１は、共有メモリ領域１２２にフォーマットエリア１５１が存在するか否かを判断する。信号処理アプリケーションプログラム１０４は、一般アプリケーションプログラム１０１の起動とは独立して起動されるものであるので、オーディオデータフック処理部１２１が機能していても、信号処理部１２３が機能していない（一般アプリケーションプログラム１０１が起動していない）場合がありうる。したがって、設定制御部１４１は、共有メモリ領域１２２にフォーマットエリア１５１が存在するか否かを基に、信号処理部１２３が機能している（一般アプリケーションプログラム１０１が起動している）か否かを判断する。ステップＳ９２において、フォーマットエリア１５１が存在しないと判断された場合、信号処理部１２３が機能していないので、処理は、後述するステップＳ９４に進む。
【０１４３】
ステップＳ９２において、フォーマットエリア１５１が存在すると判断された場合、ステップＳ９３において、設定制御部１４１は、共有メモリ領域１２２のフォーマットエリア１５１に、サンプリング周波数、および、チャンネル数を書き込み、処理は、ステップＳ６３に戻って、ステップＳ６４に進み、信号処理アプリケーションプログラム１０４にオープンイベントが出力される。
【０１４４】
ステップＳ９１において、オープン済みフラグが立っていると判断された場合、または、ステップＳ９２において、フォーマットエリア１５１が存在しないと判断された場合、ステップＳ９４において、設定制御部１４１は、このオープン要求に対応するオーディオデータを、信号処理アプリケーションプログラム１０４で処理せずに、従来の処理によってオーディオデータを出力させるために、Winmm.dll１０２のwaveoutOpen関数を読み出す。そして、その後、ライト処理、およびクローズ処理においても、信号処理アプリケーションプログラム１０４に各種イベントを通知せずに、Winmm.dll１０２の関数を読み出して、従来における場合と同様の処理によってオーディオデータを出力させて、処理が終了される（処理は、ステップＳ６３に戻らない）。
【０１４５】
以上説明した処理により、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４が、このオープン要求に対応するオーディオデータを処理することが可能な状態か否かを判断し、可能である場合、信号処理アプリケーションプログラム１０４にオープンイベントが出力することができるようになされている。
【０１４６】
次に、図１４のフローチャートを参照して、図１２のステップＳ６５において信号処理アプリケーションプログラム１０４が実行する、オープン処理について説明する。
【０１４７】
ステップＳ１１１において、設定制御部１６３は、共有メモリ領域１２２を、自分自身のみが書き換え可能な状態とするために（オーディオデータフック処理部１２１によって書き換えられないように）ロックする。
【０１４８】
ステップＳ１１２において、設定制御部１６３は、図８を用いて説明した設定画面２０１のオーディオデバイス選択ボックス２１１に設定された出力デバイス名を、共有メモリ領域１２２のフォーマットエリア１５１に書き込む。
【０１４９】
ステップＳ１１３において、設定制御部１６３は、上述した図１３のステップＳ９３において、設定制御部１４１により、共有メモリ領域１２２のフォーマットエリア１５１に記載された情報である、サンプリング周波数、および、チャンネル数を取得する。
【０１５０】
ステップＳ１１４において、設定制御部１６３は、サンプリング周波数は変更されたか否かを判断する。
【０１５１】
本発明を適用した処理においては、様々な一般アプリケーションプログラム１０１が様々なサンプリング周波数でオーディオデータの再生を行うため、信号処理アプリケーションプログラム１０４は、様々なサンプリング周波数での信号処理の要求を受ける。しかしながら、多くのエフェクトプラグイン１７１−１乃至１７１−ｎは、オーディオデータの編集用アプリケーション向けに開発されたものであるため、サンプリング周波数が途中で変更されると、例えば、ＧＵＩが変更後のサンプリング周波数に合致したものとならなかったり、エラー処理をしてしまうなどの問題が発生してしまう場合がある。
【０１５２】
ステップＳ１１４において、サンプリング周波数が変更されたと判断された場合、ステップＳ１１５において、図１５のフローチャートを用いて後述する再構築処理が実行される。
【０１５３】
ステップＳ１１４において、サンプリング周波数が変更されなかったと判断された場合、または、ステップＳ１１５の処理の終了後、ステップＳ１１６において、設定制御部１６３は、共有メモリ領域１２２のロックを解除して、処理は、ステップＳ６５に戻って、ステップＳ６６に進み、オープン終了イベントがオーディオデータフック用dll１０３に出力される。
【０１５４】
このような処理により、信号処理アプリケーションプログラム１０４がオープンされる。
【０１５５】
また、オープン処理の終了後、信号処理アプリケーションプログラム１０４が、既にいずれかのアプリケーションによってオープンされていることをユーザに通知するために、表示制御部１６２の処理により、例えば、Windows(R)の通知領域に、信号処理アプリケーションプログラム１０４の使用中を表すアイコンが表示される。
【０１５６】
次に、図１５のフローチャートを参照して、図１４のステップＳ１１５において実行される、再構築処理について説明する。
【０１５７】
設定制御部１６３は、サンプリング周波数が変更されたことをエフェクト設定部１６４に通知する。エフェクト設定部１６４は、ステップＳ１３１において、エフェクト処理部１６７のエフェクトプラグイン１７１−１乃至１７１−ｎの並びの順番（すなわち、供給されたオーディオデータに対して施されるエフェクトの順番）、および、全パラメータを含む設定ファイルを読み出し、設定保持制御部１６５を制御して、これらの情報を、ハードディスク３８に保存させる。
【０１５８】
ステップＳ１３２において、エフェクト設定部１６４は、エフェクト処理部１６７に現在構築されているエフェクトプラグイン１７１−１乃至１７１−ｎをメモリ上から、すなわち、ＲＡＭ３６からいったん破棄する。ここで、破棄とは、ＲＡＭ３６に展開されているエフェクトプラグインに対して積極的にダミーデータを上書きするなどしてその情報を消去してしまうことのみならず、エフェクト処理部１６７の処理のためにＲＡＭ３６に展開されていたメモリ領域を参照しないものとして開放する（他の処理によって上書き可能な状態とする）ことも含むものである。
【０１５９】
ステップＳ１３３において、エフェクト設定部１６４は、エフェクト処理部１６７にエフェクトプラグイン１７１−１乃至１７１−ｎを再構築（すなわち、内部に記憶されているエフェクトプラグインの実体のファイルパスを基に、ＲＡＭ３６にエフェクトプラグインの処理領域を再展開し、その領域を後述する処理の実行のために参照するものと設定）する。
【０１６０】
ステップＳ１３４において、エフェクト設定部１６４は、再構築されたエフェクトプラグイン１７１−１乃至１７１−ｎを新しいサンプリング周波数で初期化する。
【０１６１】
ステップＳ１３５において、エフェクト設定部１６４は、設定保持制御部１６５を制御して、ハードディスク３８に保存された設定ファイルをロードさせる。
【０１６２】
ステップＳ１３６において、エフェクト設定部１６４は、エフェクト処理部１６７のエフェクトプラグイン１７１−１乃至１７１−ｎに、エフェクトプラグインの並びおよびパラメータを再設定し、処理は、ステップＳ１１５に戻り、ステップＳ１１６に進む。
【０１６３】
このような処理により、エフェクトプラグイン１７１−１乃至１７１−ｎのうちのいずれかに、サンプリング周波数を途中で変更すると問題が発生するエフェクトプラグインが存在する場合においても、問題を回避して利用することができる。また、編集アプリケーション用途に作られた既存のエフェクトプラグインを、そのままオーディオデータの再生のためのエフェクト処理に用いるようにすることができる。
【０１６４】
なお、ここでは、再構築前の設定情報をハードディスク３８に保存させるものとして説明しているが、設定情報は、ハードディスク３８以外の、例えば、ＲＡＭ３６などに保存するようにしても良い。
【０１６５】
また、ここでは、周波数の設定が変更された場合に、エフェクトプラグイン１７１−１乃至１７１−ｎの設定を再構築することについて説明したが、新たに設定されたサンプリング周波数が、エフェクトプラグイン１７１−１乃至１７１−ｎが対応していないサンプリング周波数であるとき、信号処理アプリケーションプログラム１０４の処理による信号処理は行われず、そのまま次の処理、すなわち、Winmm.dll１０２のwaveoutOpen関数の読み出し処理を行い、以下、ライト処理、およびクローズ処理においても、信号処理アプリケーションプログラム１０４に各種イベントを通知せずに、Winmm.dll１０２の関数を読み出して、従来における場合と同様の処理によってオーディオデータを出力させるようになされている。
【０１６６】
DirectX、VSTなどのエフェクトプラグインは、主にオーディオ編集用アプリケーションで利用されることを目的として作られているので、それらのうちの一部は、例えば、44.1kHz,48kHz,96kHzなど、よく使う限られたサンプリング周波数のみサポートしている。そのため、DirectX、VSTなどのエフェクトプラグインの中には、それらのサンプリング周波数以外では誤動作するものがある。したがって、対応するサンプリング周波数以外のサンプリング周波数での再生要求があった場合、信号処理アプリケーションプログラム１０４の処理による信号処理は行われず、そのまま次の処理、すなわち、Winmm.dll１０２のwaveoutOpen関数の読み出し処理を行い、以下、ライト処理、およびクローズ処理においても、信号処理アプリケーションプログラム１０４に各種イベントを通知せずに、従来における場合と同様の処理によってオーディオデータを出力させるようになされている。
【０１６７】
このようにすることにより、一般アプリケーションプログラム１０１の処理により、エフェクトプラグイン１７１−１乃至１７１−ｎが対応していないサンプリング周波数で再生が行われた場合であっても、エラーを発生させずにオーディオを出力することが可能である。また、ユーザは、現在出力されているオーディオが、信号処理アプリケーションプログラム１０４により処理されたものであるか否かを、Windows(R)の通知領域に表示される、信号処理アプリケーションプログラム１０４の使用中を表すアイコンが表示されているか否かによって認識することが可能である。
【０１６８】
次に、図１６のアローチャートを参照して、ライト処理の詳細について説明する。
【０１６９】
ステップＳ１５１において、一般アプリケーションプログラム１０１は、オーディオデータを、既定のユーザモードドライバとして設定されているオーディオデータフック用dll１０３に書き込むために、Winmm.dll１０２のwaveoutWrite関数を呼び出す（図１１のステップＳ３７の処理）。
【０１７０】
ステップＳ１５２において、Winmm.dll１０２は、ユーザモードドライバとして指定されているオーディオデータフック用dll１０３のwodMesssageWrite関数を呼びだす（図１１のステップＳ３８の処理）。
【０１７１】
ステップＳ１５３において、オーディオデータフック用dll１０３は、図１７を用いて後述する書き込み確認処理を実行する。そして、ステップＳ１５４において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４に、インプットイベント（InputEvent）を出力する（図１１のステップＳ３９の処理）。
【０１７２】
ステップＳ１５５において、信号処理アプリケーションプログラム１０４は、図１８を用いて後述するデータエフェクト処理を実行する（図１１のステップＳ４０の処理）。
【０１７３】
そして、ステップＳ１５６において、信号処理アプリケーションプログラム１０４は、オーディオデータフック用dll１０３に、アウトプットイベント（OutputEvent）を出力する（図１１のステップＳ４１の処理）。
【０１７４】
ステップＳ１５７において、オーディオデータフック用dll１０３は、図１９を用いて後述するイベント待ち処理を実行する。
【０１７５】
ステップＳ１５８において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４から供給されたオーディオデータを、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されているWdmaud.drv１０５に出力するために、Winmm.dll１０２のwaveoutWrite関数を呼び出して、オーディオデータを供給する（図１１のステップＳ４２の処理）。
【０１７６】
ステップＳ１５９において、Winmm.dll１０２は、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されているWdmaud.drv１０５のwodMesssageWrite関数を呼びだして、オーディオデータを供給する（図１１のステップＳ４３の処理）。
【０１７７】
ステップＳ１６０において、Wdmaud.drv１０５は、供給されたオーディオデータを、WDMオーディオドライバ１０６に出力し、オーディオハードウェア１０７の処理により、スピーカ５４から出力させる。
【０１７８】
ステップＳ１５１乃至ステップＳ１６０の処理は、一連のオーディオデータの処理が終了するまで繰り返し行われる。
【０１７９】
ステップＳ１６１において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４に、プロセス終了イベント（ProcessFinishedEvent）を出力する。そして、ステップＳ１６２において、オーディオデータフック用dll１０３は、インプットデータエリア（後述する図１７のステップＳ１８７の処理により作成される）を削除する。
【０１８０】
ステップＳ１６３において、信号処理アプリケーションプログラム１０４は、アウトプットデータエリア（後述する図１８のステップＳ２１２の処理により作成される）を削除して、ライト処理が終了される。
【０１８１】
次に、図１７のフローチャートを参照して、オーディオデータフック用dll１０３が図１６のステップＳ１５３において実行する書き込み確認処理について説明する。
【０１８２】
ステップＳ１８１において、設定処理部１４１は、自分自身のオープン済みフラグを確認し、信号処理アプリケーションプログラム１０４が、このライト要求と同じハンドルでオープン済みであるか否かを判断する。ステップＳ１８１において、同じハンドルでオープン済みではないと判断された場合、処理は、後述するステップＳ１９１に進む。
【０１８３】
ステップＳ１８１において、同じハンドルでオープン済みであると判断された場合、ステップＳ１８２において、設定処理部１４１は、共有メモリ領域１２２にフォーマットエリア１５１が存在するか否か、すなわち、信号処理部１２３が機能している（信号処理アプリケーションプログラム１０４が正常に起動されているか）か否かを判断する。ステップＳ１８２において、共有メモリ領域１２２にフォーマットエリア１５１が存在しないと判断された場合、処理は、後述するステップＳ１９１に進む。
【０１８４】
ステップＳ１８２において、共有メモリ領域１２２にフォーマットエリア１５１が存在すると判断された場合、ステップＳ１８３において、設定処理部１４１は、フォーマットエリア１５１を、自分自身のみが書き換え可能な状態とするために（信号処理部１２３によって書き換えられないように）ロックする。
【０１８５】
ステップＳ１８４において、設定処理部１４１は、フォーマットエリア１５１に、オーディオデータのインプットフォーマットを書き込む。
【０１８６】
ステップＳ１８５において、設定処理部１４１は、フォーマットエリア１５１のロックを解除する。
【０１８７】
ステップＳ１８６において、設定処理部１４１の制御を受けたFIXED-FLOAT変換処理部１４４は、データエリア１５２を、自分自身のみが書き換え可能な状態とするために（信号処理部１２３によって書き換えられないように）ロックする。
【０１８８】
ステップＳ１８７において、FIXED-FLOAT変換処理部１４４は、データエリア１５２に、信号処理部１２３に供給するデータを書き込むための領域であるインプットデータエリアを作成する。
【０１８９】
ステップＳ１８８において、出力制御部１４３は、データ取得部１４２から供給されたオーディオデータを、信号処理部１２３に供給するために、FIXED-FLOAT処理部１４４に供給する。FIXED-FLOAT処理部１４４は、供給された整数表記のオーディオデータを浮動小数点形式に変換する。
【０１９０】
ステップＳ１８９において、FIXED-FLOAT処理部１４４は、浮動小数に変換されたオーディオデータを、ステップＳ１８７において生成されたインプットデータエリアに書き込む。
【０１９１】
ステップＳ１９０において、FIXED-FLOAT変換処理部１４４は、データエリア１５２のロックを解除し、処理は、図１６のステップＳ１５３に戻って、ステップＳ１５４に進み、信号処理アプリケーションプログラム１０４にインプットイベントが出力される。
【０１９２】
ステップＳ１８１において、同じハンドルでオープン済みではないと判断された場合、ステップＳ１８２において、共有メモリ領域１２２にフォーマットエリア１５１が存在しないと判断された場合、ステップＳ１９１において、設定処理部１４１は、このライト要求に対応するオーディオデータを、信号処理アプリケーションプログラム１０４で処理せずに、従来の処理によってオーディオデータを出力させるために、Winmm.dll１０２のwaveoutOpen関数を読み出す。そして、その後、クローズ処理においても、信号処理アプリケーションプログラム１０４に各種イベントを通知せずに、Winmm.dll１０２の関数を読み出して、従来における場合と同様の処理によってオーディオデータを出力させて、処理が終了される（処理は、ステップＳ１５３に戻らない）。
【０１９３】
以上説明した処理により、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４が、このライト要求に対応するオーディオデータを処理することが可能な状態か否かを判断し、可能である場合、インプットデータエリアを生成して、浮動小数に変換されたオーディオデータをインプットデータエリアに書き込み、信号処理アプリケーションプログラム１０４にインプットイベントを出力することができるようになされている。
【０１９４】
これにより、複数の一般アプリケーションプログラム１０１でオーディオの再生を行った場合、はじめにユーザモードドライバであるオーディオデータフック用dll１０３をオープンした一般アプリケーションプログラム１０１がクローズ処理を行うまで、他のアプリケーションにより出力される音声には、信号処理アプリケーションプログラム１０４の処理によるエフェクトが施されることなく出力されるようになされている。これにより、複数のオーディオ再生指令を受け入れながらも、はじめにオーディオデータフック用dll１０３をオープンした一般アプリケーションプログラム１０１が出力するオーディオデータに対するエフェクト動作に悪影響を与えることがなく、更に、はじめにオーディオデータフック用dll１０３をオープンした一般アプリケーションプログラム１０１が出力するオーディオデータの処理の終了後、または、処理の停止中、他の一般アプリケーションプログラム１０１が出力するオーディオデータに対して、信号処理アプリケーションプログラム１０４の処理によるエフェクトを施すようにすることが可能となる。
【０１９５】
次に、図１８のフローチャートを参照して、図１６のステップＳ１５５において、信号処理アプリケーションプログラム１０４が実行する、データエフェクト処理について説明する。
【０１９６】
ステップＳ２１１において、信号処理部１２３のデータ取得部１６６は、共有メモリ領域１２２のデータエリア１５２のインプットデータエリアをオープンする。
【０１９７】
ステップＳ２１２において、データ出力制御部１６９は、共有メモリ領域１２２のデータエリア１５２に、エフェクト処理済のオーディオデータを書き込むためのアウトプットデータエリアを作成する。
【０１９８】
ステップＳ２１３において、データ取得部１６６またはデータ出力制御部１６９は、データエリア１５２を、自分自身のみが書き換え可能な状態とするために（オーディオデータフック処理部１２１によって書き換えられないように）ロックする。
【０１９９】
ステップＳ２１４において、データ取得部１６６は、データエリア１５２のインプットデータエリアに書き込まれたオーディオデータを読み出し、エフェクト処理部１６７に供給する。
【０２００】
ステップＳ２１５において、エフェクト処理部１６７は、エフェクト設定部１６４により設定される各種設定に基づいて、供給されたオーディオデータにエフェクトを施し、スムージング処理部１６８に供給する。
【０２０１】
ステップＳ２１６において、スムージング処理部１６８は、供給されたエフェクト処理済のオーディオデータに、図１０を用いて説明したように、スムージングを施し、データ出力制御部１６９に供給する。
【０２０２】
ステップＳ２１７において、データ出力制御部１６９は、エフェクトが施されたオーディオデータを、ステップＳ２１２において生成された、データエリア１５２のアウトプットデータエリアに書き込む。
【０２０３】
ステップＳ２１８において、データ取得部１６６またはデータ出力制御部１６９は、データエリア１５２のロックを解除し、処理は、ステップＳ１５５に戻り、ステップＳ１５６に進んで、アウトプットイベントがオーディオデータフック用dll１０３に出力される。
【０２０４】
このような処理により、供給されたオーディオデータが、エフェクトプラグイン１７１−１乃至１７１−ｎにより処理される。
【０２０５】
次に、図１９のフローチャートを参照して、オーディオデータフック用dll１０３が図１６のステップＳ１５７において実行するイベント待ち処理について説明する。
【０２０６】
ステップＳ２３１において、設定処理部１４１は、図１６のステップＳ１５４の処理において出力されたインプットイベントの出力から、所定の時間が経過したか否かを判断する。ステップＳ２３１において、インプットイベントの出力から、所定の時間が経過したと判断された場合、処理は、後述するステップＳ２３７に進む。
【０２０７】
ステップＳ２３１において、インプットイベントの出力から、所定の時間が経過していないと判断された場合、ステップＳ２３２において、設定処理部１４１は、信号処理アプリケーション１０４からアウトプットイベントが入力されたか否かを判断する。ステップＳ２３２において、アウトプットイベントが入力されていないと判断された場合、処理は、ステップＳ２３１に戻り、それ以降の処理が繰り返される。
【０２０８】
ステップＳ２３２において、アウトプットイベントが入力されたと判断された場合、ステップＳ２３３において、リミッタ処理部１４５は、共通メモリ領域１２２のデータエリア１５２のアウトプットデータエリアをオープンする。
【０２０９】
ステップＳ２３４において、リミッタ処理部１４５は、データエリア１５２のアウトプットデータエリアに書き込まれているエフェクト済みオーディオデータを読み出す。
【０２１０】
ステップＳ２３５において、リミッタ処理部１４５は、読み出したオーディオデータにリミッタをかけ、FLOAT-FIXED変換処理部１４６に供給する。
【０２１１】
ステップＳ２３６において、FLOAT-FIXED変換処理部１４６は、供給された浮動小数形式のオーディオデータを、整数データに変換し、出力制御部１４３に供給し、処理は、図１６のステップＳ１５７に戻り、ステップＳ１５８に進んで、Winmm.DLL１０２のwaveoutWrite関数が読み出され、処理済のデータが出力される。
【０２１２】
ステップＳ２３１において、インプットイベントの出力から、所定の時間が経過したと判断された場合、すなわち、データエフェクト処理を実行しているはずである信号処理アプリケーション１０４が終了されている場合、ステップＳ２３７において、設定制御部１４１は、このライト要求に対応するオーディオデータを、信号処理アプリケーションプログラム１０４で処理せずに、従来の処理によってオーディオデータを出力させるために、Winmm.dll１０２のwaveoutOpen関数を読み出し、出力制御部１４３を制御して、供給されたオーディオデータを、Winmm.DLL１０２に出力させる。そして、その後、クローズ処理においても、信号処理アプリケーションプログラム１０４に各種イベントを通知せずに、Winmm.dll１０２の関数を読み出して、従来における場合と同様の処理によってオーディオデータを出力させて、処理が終了される（処理は、ステップＳ１５７に戻らない）。
【０２１３】
信号処理アプリケーションプログラム１０４と、ユーザモードドライバであるオーディオデータフック用dll１０３は、それぞれ、個別に起動されるものであるので、信号処理中にユーザが信号処理アプリケーションプログラム１０４を終了することが考えられる。したがって、図１９を用いて説明した処理を実行することにより、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４からのアウトプットイベント待ちの状態で、一定時間応答がない場合であっても、オーディオデータの流れが断絶してしまい、再生に支障をきたすことがないように、オーディオデータの出力先を切り替えることができる。
【０２１４】
そして、信号処理アプリケーションプログラム１０４が再起動されたとき、オーディオデータフック用dll１０３は、次のオープン処理において、フォーマットエリア１５１が存在していることにより、信号処理アプリケーションプログラム１０４の再開を検知することができ、迅速にエフェクトプラグイン１７１−１乃至１７１−ｎによる信号処理を適用することができるようになされている。
【０２１５】
次に、図２０のアローチャートを参照して、クローズ処理の詳細について説明する。
【０２１６】
ステップＳ２５１において、一般アプリケーションプログラム１０１は、オーディオデータの書き込みの終了を、既定のユーザモードドライバとして設定されているオーディオデータフック用dll１０３に通知するために、Winmm.dll１０２のwaveoutClose関数を呼び出す（図１１のステップＳ４４の処理）。
【０２１７】
ステップＳ２５２において、Winmm.dll１０２は、ユーザモードドライバとして指定されているオーディオデータフック用dll１０３のwodMesssageClose関数を呼びだす（図１１のステップＳ４５の処理）。
【０２１８】
ステップＳ２５３において、オーディオデータフック用dll１０３は、図２１を用いて後述するクローズ確認処理を実行する。そして、ステップＳ２５４において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４に、クローズイベント（CloseEvent）を出力する（図１１のステップＳ４６の処理）。
【０２１９】
そして、ステップＳ２５５において、信号処理アプリケーションプログラム１０４は、プラグインの終了処理を実行する。そして、ステップＳ２５６において、信号処理アプリケーションプログラム１０４は、オーディオデータフック用dll１０３に、クローズ終了イベント（CloseFinishedEvent）を出力する（図１１のステップＳ４７の処理）。
【０２２０】
ステップＳ２５７において、オーディオデータフック用dll１０３は、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されているWdmaud.drv１０５に、オーディオデータの書き込みの終了を通知するために、Winmm.dll１０２のwaveoutClose関数を呼び出す（図１１のステップＳ４８の処理）。
【０２２１】
ステップＳ２５８において、Winmm.dll１０２は、信号処理アプリケーションプログラム１０４において出力先のドライバとして指定されているWdmaud.drv１０５のwodMesssageClose関数を呼び出して（図１１のステップＳ４９の処理）、クローズ処理が終了される。
【０２２２】
次に、図２１のフローチャートを参照して、オーディオデータフック用dll１０３が、図２０のステップＳ２５３において実行する、クローズ確認処理について説明する。
【０２２３】
ステップＳ２７１において、データフック処理部１２１の設定処理部１４１は、オープン済みフラグを確認し、同じハンドルでオープン済みであるか否かを判断する。ステップＳ２７１において、同じハンドルでオープン済みであると判断された場合、処理は、図２０のステップＳ２５３に戻り、ステップＳ２５４に進んで、クローズイベントが信号処理アプリケーションプログラム１０４に出力される。
【０２２４】
ステップＳ２７１において、同じハンドルでオープン済みではないと判断された場合、このクローズ要求は、信号処理アプリケーションプログラム１０４において処理されていたデータと同一のハンドルに対応するものではないので、ステップＳ２７２において、データフック処理部１２１の設定処理部１４１は、クローズ要求を、Winmm.dll１０５を介して、Wdmaud.drv１０６に供給し、処理が終了される（処理は、ステップＳ２５３には戻らない）。
【０２２５】
このように、ハンドルを確認することにより、信号処理アプリケーションプログラム１０４において処理されていたデータと同一のハンドルに対応するクローズ要求が信号処理アプリケーションプログラム１０４に供給されて、他のクローズ要求は、Winmm.dll１０５を介して、Wdmaud.drv１０６に供給される。
【０２２６】
このように、本発明を適用することにより、ユーザがユーザモードドライバであるオーディオデータフック用dll１０３の生存期間を意識する必要がなく、音声が再生されていないときであっても、エフェクトプラグイン１７１−１乃至１７１−ｎのパラメータを操作することができる。また、エフェクトプラグイン１７１−１乃至１７１−ｎは、その内部状態を保持しておくことができるため、オーディオデータフック用dll１０３の生存期間を意識することなく、以前の演算結果を利用して信号処理を行うことができる。
【０２２７】
また、信号処理アプリケーションプログラム１０４は、オーディオデータを直接参照することができるので、エフェクトプラグイン１７１−１乃至１７１−ｎは、図９を用いて説明したように、メーターやスペアナなど、オーディオデータを元に表示内容を作製するようなＧＵＩを表示させることができる。
【０２２８】
更に、一般アプリケーションプログラム１０１と、エフェクトプラグイン１７１−１乃至１７１−ｎが動作する信号処理アプリケーションプログラム１０４は、それぞれ独立したアプリケーションプログラムであるので、プラグインのインスタンスが一般アプリケーションプログラム１０１の個数分増えることはなく、そのため、ＣＰＵ３１の使用率やメモリ（ＲＡＭ３６）の使用量を抑制することができる。
【０２２９】
また、本発明を適用することにより、エフェクトプラグイン１７１−１乃至１７１−ｎのうちのいずれかが、サンプリング周波数を途中で変更すると、エラー処理が実行されてしまうなどの問題が発生するエフェクトプラグインあっても、設定情報を一時保存して、エフェクトプラグインの構成を再構築して、新たなサンプリング周波数で再度初期化することにより、問題が発生することを防止することができ、エフェクトプラグイン側のプログラムに修正を施す必要がないので、編集アプリケーション用途に作られた既存のエフェクトプラグインをそのまま利用することができる。
【０２３０】
また、本実施の形態においては、一般アプリケーションプログラム１０１により再生されるオーディオデータに対して、信号処理アプリケーションプログラム１０４の処理により、エフェクトをかける場合について説明したが、本発明は、再生処理のみならず、例えば、録音対象となるオーディオデータを信号処理アプリケーションプログラム１０４に供給することにより、エフェクトをかけたり、予めファイルとして作成されているデータを信号処理アプリケーションプログラム１０４に供給することにより、エフェクトをかける場合においても、同様にして適用可能であることは言うまでもない。
【０２３１】
更に、信号処理アプリケーションプログラム１０４は、オーディオデータフック用dll１０３などのユーザモードドライバからだけではなく、別のプログラムからの信号処理要求を受け付けることもできる。
【０２３２】
すなわち、音声再生時のユーザモードドライバであるオーディオデータフック用dll１０３に代わって、オーディオデータのファイルを読み込み、信号処理アプリケーションプログラム１０４に供給して、エフェクトをかけた結果のオーディオデータをファイル出力することができるｄｌｌファイルやアプリケーションプログラムが用いられる場合にも、本発明は同様にして適用可能である。
【０２３３】
更に、本実施の形態においては、エフェクトプラグイン１７１−１乃至１７１−ｎが、供給されたオーディオデータに対して、所定のエフェクトを施して、処理結果のオーディオデータを出力する場合について説明したが、本発明は、オーディオデータ以外の、例えば、画像データなどを処理する場合にも適用可能であり、更には、オーディオデータをトリガにして、全く異なる音や、音ではないデータを再生するようなエフェクトを施す場合にも、同様にして適用することが可能である。例えば、エフェクトプラグイン１７１−１乃至１７１−ｎのうちの一部、または、全てが、Windows Media Player（商標）の「視覚エフェクト」のように、再生音の音量や周波数をトリガにして画像に変化を起こすようなプラグインである場合などにおいても、本発明は適用可能であることは言うまでもない。
【０２３４】
また、本発明を適用することにより、エフェクトプラグイン１７１−１乃至１７１−ｎのうちのいずれかが、サンプリング周波数を途中で変更すると、エラー処理が実行されてしまうなどの問題が発生するエフェクトプラグインあっても、設定情報を一時保存して、エフェクトプラグインの構成を再構築して、新たなサンプリング周波数で再度初期化することにより、問題が発生することを防止することができるが、本発明は、オーディオデータのプラグインエフェクトにおけるサンプリング周波数の変更のみならず、同様にして、処理途中に変更された場合に不具合をきたすパラメータを持つ、例えば、画像データなど、オーディオデータ以外のデータを処理するモジュールについても適用可能である。例えば、画像処理を実行するモジュールにおいて、実行中に所定のパラメータを再設定することができない場合、設定情報を一時保存して、再度、そのモジュールを構築し、新たなパラメータで再度初期化するようにしても、同様の効果を得ることが可能である。
【０２３５】
更に、信号処理部１２３のエフェクト処理部１６７においては、エフェクトプラグイン１７１−１乃至１７１−ｎのうちの一部、または、全てにおいて、独立して流通しているエフェクトプラグインのみならず、信号処理部１２３のエフェクト処理部１６７に内蔵された処理としてのエフェクト処理モジュールを用意するようにしても良いことは言うまでもない。
【０２３６】
上述した一連の処理は、ソフトウェアにより実行することもできる。そのソフトウェアは、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
【０２３７】
この記録媒体は、図３に示すように、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク４１（フレキシブルディスクを含む）、光ディスク４２（CD-ROM（Compact Disk-Read Only Memory），DVD（Digital Versatile Disk）を含む）、光磁気ディスク４３（ＭＤ（Mini-Disk)（商標）を含む）、もしくは半導体メモリ４４などよりなるパッケージメディアなどにより構成される。
【０２３８】
また、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【図面の簡単な説明】
【０２３９】
【図１】従来のオーディオデータの再生について説明するためのアローチャートである。
【図２】従来のエフェクト操作アプリケーションプログラムを用いた場合のモジュール構成について説明するための図である。
【図３】本発明を適用したパーソナルコンピュータの構成を示すブロック図である。
【図４】ＣＰＵが実行可能なソフトウェアのソフトウェアスタックとハードウェアとの関係を示す図である。
【図５】本発明を適用した場合の、ソフトウェアモジュールおよびハードウェアモジュールの関係を示す図である。
【図６】図５のオーディオデータフック用dllと、信号処理アプリケーションプログラムが実行されている場合に実現可能な機能について説明するための機能ブロック図である。
【図７】設定ウィンドウの表示例を示す図である。
【図８】設定画面の一例を示す図である。
【図９】エフェクトプラグインの詳細設定を行うために表示される詳細設定画面について説明するための図である。
【図１０】図６のスムージング処理部の処理について説明するための図である。
【図１１】図５を用いて説明したソフトウェアモジュールの動作について説明するためのアローチャートである。
【図１２】オープン処理の詳細について説明するためのアローチャートである。
【図１３】オープン確認処理について説明するためのフローチャートである。
【図１４】オープン処理について説明するためのフローチャートである。
【図１５】再構築処理について説明するためのフローチャートである。
【図１６】ライト処理の詳細について説明するためのアローチャートである。
【図１７】書き込み確認処理について説明するためのフローチャートである。
【図１８】データエフェクト処理について説明するためのフローチャートである。
【図１９】イベント待ち処理について説明するためのフローチャートである。
【図２０】クローズ処理の詳細について説明するためのアローチャートである。
【図２１】クローズ確認処理について説明するためのフローチャートである。
【符号の説明】
【０２４０】
２１  パーソナルコンピュータ，  ３１  ＣＰＵ，  ３４  入力部，  ３６  ＲＡＭ，  ３７  出力部，  ３８  ＨＤＤ，  ７３  ドライバーソフト，  ７４  ＯＳ，  ７５  ＤＬＬ，  ７６  アプリケーションプログラム，  １０１  一般アプリケーションプログラム，  １０２  Winmm.dll，  １０３  オーディオデータフック用dll，  １０４  信号処理アプリケーションプログラム，  １０５  Wdmaud.drv，  １０６  WDMオーディオドライバ，  １０７  オーディオハードウェア，  １２１  データフック処理部，  １２２  共有メモリ領域，  １２３  信号処理部，  １４１  設定制御部，  １４２  データ取得部，  １４３  出力制御部，  １４４  FIXED-FLOAT変換処理部，  １４５  リミッタ処理部，  １４６  FLOAT-FIXED変換処理部，  １５１  フォーマットエリア，  １５２  データエリア，  １６１  操作入力取得部，  １６２  表示制御部，  １６３  設定制御部，  １６４  エフェクト制御部，  １６５  設定保持制御部，  １６６  データ取得部，  １６７  エフェクト処理部，  １６８  スムージング処理部，  １６９  データ出力制御部，  １７１  エフェクトプラグイン
【図１】
2005317115.tif 000003
【図２】
2005317115.tif 000004
【図３】
2005317115.tif 000005
【図４】
2005317115.tif 000006
【図５】
2005317115.tif 000007
【図６】
2005317115.tif 000008
【図７】
2005317115.tif 000009
【図８】
2005317115.tif 000010
【図９】
2005317115.tif 000011
【図１０】
2005317115.tif 000012
【図１１】
2005317115.tif 000013
【図１２】
2005317115.tif 000014
【図１３】
2005317115.tif 000015
【図１４】
2005317115.tif 000016
【図１５】
2005317115.tif 000017
【図１６】
2005317115.tif 000018
【図１７】
2005317115.tif 000019
【図１８】
2005317115.tif 000020
【図１９】
2005317115.tif 000021
【図２０】
2005317115.tif 000022
【図２１】
2005317115.tif 000023