DMOをDirectSoundで使う
DirectSoundはウェーブデータを再生するためのAPIですが、DMOをセカンダリーバッファに登録することでサウンドエフェクトをかけながら再生することができます。
セカンダリーバッファを作成したら続けてSetFX関数でDMOを設定します。演奏中やバッファをロックした状態でSetFX関数を実行することはできません。
IDirectSoundBuffer8::SetFX
IDirectSoundBuffer8インターフェースのSetFX関数を用いて利用したいDMOを設定します。
HRESULT SetFX( DWORD dwEffectsCount, LPDSEFFECTDESC pDSFXDesc, LPDWORD pdwResultCodes);
dwEffectsCount
設定したいDMOの数です。
pDSFXDesc
DMOの情報を格納したDSEFFECTDESC構造体配列へのポインターです。
pdwResultCodes
リターンコードを受け取る変数へのポインターです。
DSEFFECTDESC構造体
DMOに関する情報を格納する構造体です。
typedef struct _DSEFFECTDESC { DWORD dwSize; DWORD dwFlags; GUID guidDSFXClass; DWORD_PTR dwReserved1; DWORD_PTR dwReserved2 } DSEFFECTDESC, *LPDSEFFECTDESC; typedef const DSEFFECTDESC *LPCDSEFFECTDESC;
dwSize
構造体のサイズです。sizeof(DSEFFECTDESC)を設定します。
dwFlags
エフェクトをハードウェアで行うかソフトウェアで行うかを指定します。ゼロを指定するとデフォルトの設定が行われます。
フラグ | 値 | 意味 |
---|---|---|
DSFX_LOCHARDWARE | 0x01 | エフェクトをハードウェアで行う |
DSFX_LOCSOFTWARE | 0x02 | エフェクトをソフトウェアで行う |
![]() |
|
guidDSFXClass
利用したいDMOのGUIDを指定します。以下に利用できるエフェクトの一覧を示します。
エフェクト | GUID |
---|---|
コーラス | GUID_DSFX_STANDARD_CHORUS |
コンプレッサー | GUID_DSFX_STANDARD_COMPRESSOR |
ディストーション | GUID_DSFX_STANDARD_DISTORTION |
エコー | GUID_DSFX_STANDARD_ECHO |
環境リバーブ | GUID_DSFX_STANDARD_I3DL2REVERB |
フランジャー | GUID_DSFX_STANDARD_FLANGER |
ガーグル | GUID_DSFX_STANDARD_GARGLE |
パラメトリックイコライザー | GUID_DSFX_STANDARD_PARAMEQ |
ウェーブリバーブ | GUID_DSFX_WAVES_REVERB |
dwReserved1、dwReserved2
将来のための拡張です。利用しません。
CoInitialize関数
C/C++
DirectSoundを利用するのに通常であればCoInitialize関数は必要ありませんが、DMOを利用するときはプログラムの先頭でCoInitialize関数を実行する必要があります。
C#
マネージ環境ではシステムが初期化を行うのでCoInitialize関数を実行する必要はありません。
IDirectSoundBuffer8::GetObjectInPath
エフェクターのパラメータを設定するためのインターフェースを取得します。この関数はセカンダリーバッファにDMOが設定されていないと失敗します。
![]() |
|
HRESULT GetObjectInPath( REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID* ppObject);
rguidObject
取得したいDMOのGUIDを指定します。
dwIndex
取得したいDMOがSetFX関数で設定したDSEFFECTDESC構造体配列の何番目にあったかを指定します。
rguidInterface
取得したいインターフェースのGUIDを指定します。以下に一覧を示します。
エフェクト | GUID | インターフェース |
---|---|---|
コーラス | IID_IDirectSoundFXChorus8 | IDirectSoundFXChorus8 |
コンプレッサー | IID_IDirectSoundFXCompressor8 | IDirectSoundFXCompressor8 |
ディストーション | IID_IDirectSoundFXDistortion8 | IDirectSoundFXDistortion8 |
エコー | IID_IDirectSoundFXEcho8 | IDirectSoundFXEcho8 |
環境リバーブ | IID_IDirectSoundFXI3DL2Reverb8 | IDirectSoundFXI3DL2Reverb8 |
フランジャー | IID_IDirectSoundFXFlanger8 | IDirectSoundFXFlanger8 |
ガーグル | IID_IDirectSoundFXGargle8 | IDirectSoundFXGargle8 |
パラメトリックイコライザー | IID_IDirectSoundFXParamEq8 | IDirectSoundFXParamEq8 |
ウェーブリバーブ | IID_IDirectSoundFXWavesReverb8 | IDirectSoundFXWavesReverb8 |
通常ここにはエフェクターのパラメータ設定用インターフェースを指定しますが、以下のGUIDを設定することでDMOのインターフェースを取得することができます。
GUID | インターフェース |
---|---|
IID_IMediaObject | IMediaObject |
IID_IMediaObjectInPlace | IMediaObjectInPlace |
IID_IMediaParams | IMediaParams |
ppObject
インターフェースを受け取る変数のアドレスです。