カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

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 エフェクトをソフトウェアで行う
DirectX9.0ではハードウェアによるエフェクトのアクセラレーションは行われないのでDSFX_LOCHARDWAREを指定してはいけません。

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

インターフェースを受け取る変数のアドレスです。

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ