まずはじめにオーディオパスを作成します。
// オーディオパスを作成 IDirectMusicAudioPath8 *g_lpAudioPath = NULL; // オーディオパス g_lpPerformance->CreateStandardAudioPath( DMUS_APATH_SHARED_STEREOPLUSREVERB,// パスのタイプ 64, // パス内のパフォーマンスチャンネル数 FALSE, // 作成時にパスをアクティブにするか &lpDMAudioPath ); // 作成したパスのポインタ
次にサウンドバッファのポインタを取得します。
// サウンドバッファを取得 g_lpAudioPath->GetObjectInPath( DMUS_PCHANNEL_ALL, // 検索するパフォーマンス チャンネル DMUS_PATH_BUFFER, // パス内のステージ 0, // バッファのインデックス GUID_NULL, // オブジェクトのクラス識別子 0, // オブジェクトのインデックス IID_IDirectSoundBuffer8, // インターフェイスの識別子 (void**)&g_lpDSBuffer ); // 作成したインターフェイスのポインタ
エフェクトをDSEFFECTDESC構造体で指定します。guidDSFXClassメンバに指定できる識別子はたくさんあります。
エフェクト識別子 | 効果 |
---|---|
GUID_DSFX_STANDARD_CHORUS | コーラス |
GUID_DSFX_STANDARD_COMPRESSOR | コンプレッサ |
GUID_DSFX_STANDARD_DISTORTION | ディストーション |
GUID_DSFX_STANDARD_ECHO | エコー |
GUID_DSFX_STANDARD_FLANGER | フランジ |
GUID_DSFX_STANDARD_GARGLE | ガーグル |
GUID_DSFX_STANDARD_I3DL2REVERB | Interactive 3D Level 2 リバーブ |
GUID_DSFX_STANDARD_PARAMEQ | パラメトリック イコライザ |
GUID_DSFX_WAVES_REVERB | Waves リバーブ |
DSEFFECTDESC desc; ZeroMemory( &desc, sizeof(DSEFFECTDESC) ); desc.dwSize = sizeof(DSEFFECTDESC); desc.dwFlags = 0; desc.guidDSFXClass = GUID_DSFX_STANDARD_CHORUS; // エフェクト識別子 desc.dwReserved1 = 0; desc.dwReserved2 = 0; g_lpDSBuffer->SetFX( 1, &desc, NULL );
設定し終えたら、オーディオパスをアクティブにします。
// オーディオパスのアクティブ化 g_lpAudioPath->Activate( TRUE );
再生する時にオーディオパスを指定すれば完了です。
// セグメントの再生 g_lpPerformance->PlaySegmentEx( g_lpSegment, NULL, NULL, 0, 0, NULL, NULL, g_lpAudioPath );
作成したオブジェクトを解放します。
// 解放 /* #define RELEASE(p) { if(p){(p)->Release();p=NULL;} } */ RELEASE( g_lpAudioPath ); // オーディオパス解放 RELEASE( g_lpDSBuffer ); // サウンドバッファ
これでエフェクトを使った再生ができます。例のソースを置いておきます。