次の方法で共有


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

DSBUFFERDESC 構造体に DSBCAPS_CTRLFX フラグを設定して作成したセカンダリ バッファーにはいくつでもエフェクトを設定できます。バッファーは停止およびロックされないようにする必要があります。DirectX 9.0 以降、エフェクトがハードウェアで高速化されることはありません。エフェクトをハードウェア バッファーに設定することは可能ですが、これを行ってもメリットはありません。

極めて小さいバッファーでは、エフェクトがスムーズに動作しないことがあります。DirectSound では、150 ミリ秒未満のデータを保持するエフェクト可能なバッファーに作成は許可されていません。この値は、DSBSIZE_FX_MIN として定義されます。

次の関数例では、バッファーにエコーを設定して、その結果を開発環境の出力ウィンドウに表示します。

HRESULT SetEcho(LPDIRECTSOUNDBUFFER8 pDSBuffer)
{
  HRESULT hr;
  DWORD dwResults[1];  // One element for each effect.
 
  // Describe the effect.
  DSEFFECTDESC dsEffect;
  memset(&dsEffect, 0, sizeof(DSEFFECTDESC));
  dsEffect.dwSize = sizeof(DSEFFECTDESC);
  dsEffect.dwFlags = 0;
  dsEffect.guidDSFXClass = GUID_DSFX_STANDARD_ECHO;
 
  // Set the effect
  if (SUCCEEDED(hr = pDSBuffer->SetFX(1, &dsEffect, dwResults)))
  {
    switch (dwResults[0])
    {
      case DSFXR_LOCHARDWARE:
        OutputDebugString("Effect was placed in hardware.");
        break;
      case DSFXR_LOCSOFTWARE:
        OutputDebugString("Effect was placed in software.");
        break;
      case DSFXR_UNALLOCATED:
        OutputDebugString("Effect is not yet allocated to hardware or software.");
        break;
    }
  }
  return hr;
}