Microsoft DirectX 8.0 (C++)

バッファでのエフェクトの設定

DirectMusic Producer で作成したセグメントを、オーディオパス構成を使って演奏している場合、エフェクトは構成オブジェクトからオーディオパスを作成したときに設定される。標準オーディオパスにはエフェクトも保持される。ただし、実行時にカスタム オーディオパスでエフェクトを実装したり、標準オーディオパスにエフェクトを追加したい場合がある。たとえば、ウェーブまたは MIDI ファイルにエフェクトを適用できるように、標準オーディオパスにエフェクトを追加したい場合がある。

オーディオパスにエフェクトを適用するには、まずパス上のバッファへの IDirectSoundBuffer8 インターフェイスを取得する。次に、IDirectSoundBuffer8::SetFX を使って、そのバッファに 1 つまたは複数のエフェクトを設定する。

バッファ インターフェイスを取得する方法については、「オーディオパスからのオブジェクトの取得」を参照すること。GetObjectInPath の呼び出しで標準オーディオパス バッファを識別する方法については、「標準オーディオパス」のオーディオパスのタイプを参照すること。

次のサンプルコードでは、標準オーディオパスを設定し、パスからバッファを取得し、バッファ上でエコー エフェクトを設定している。

// pPerformance が有効な IDirectMusicPerformance8 
// インターフェイス ポインタであると仮定する。
 
IDirectMusicAudioPath*  g_p3DAudioPath;
IDirectSoundBuffer8*    g_pDSBuffer;
HRESULT                 hr;
 
// 音源および環境リバーブ バッファを使って、
// 標準オーディオパスを作成する。パスはアクティブにしない。
// バッファが実行中の場合、SetFX は失敗する。 
 
if( FAILED(hr = pPerformance->CreateStandardAudioPath(
    DMUS_APATH_DYNAMIC_3D, 64, FALSE, &g_p3DAudioPath)))
    return hr;
 
// オーディオパスのバッファを取得する。
 
if( FAILED(hr = g_p3DAudioPath->GetObjectInPath(DMUS_PCHANNEL_ALL,
    DMUS_PATH_BUFFER, 0, GUID_NULL, 0, IID_IDirectSoundBuffer8, 
    (LPVOID*) &g_pDSBuffer)))
    return hr;
 
// エフェクトを記述する。
 
DSEFFECTDESC dsEffect;
dsEffect.dwSize = sizeof(DSEFFECTDESC);
dsEffect.dwFlags = 0;
dsEffect.guidDSFXClass = GUID_DSFX_STANDARD_ECHO;
dsEffect.dwReserved1 = 0;
dsEffect.dwReserved2 = 0;
 
DWORD dwResults;
 
// エフェクトを設定する
if (FAILED(hr = g_pDSBuffer->SetFX(1, &dsEffect, &dwResults)))
    return hr;
 
// ここで dwResults の値をチェックし、エフェクトが
// どのように割り当てられているかを確認できる。
 
// パスをアクティブにする。
 
g_p3DAudioPath->Activate(TRUE);