次の方法で共有


3D リスナーの取得

グローバルなサウンド パラメーターは、プライマリ バッファーの IDirectSound3DListener8 インターフェイスを使用して設定および取得します。アプリケーションには 1 つのプライマリ バッファー、および 1 つのリスナーしかありません。

リスナー インターフェイスを取得するには、まず IDirectSound8::CreateSoundBuffer メソッドを使用してプライマリ バッファー オブジェクトを作成して、DSBUFFERDESC 構造体の dwFlags メンバーで DSBCAPS_CTRL3D フラグおよび DSBCAPS_PRIMARYBUFFER フラグを指定する必要があります。生成されたバッファー上で QueryInterface メソッドを呼び出して、そのバッファーに対する IDirectSound3DListener8 インターフェイスへのポインターを取得します。

次の関数例では、リスナーへのインターフェイスを取得します。

GetListener(LPDIRECTSOUND8 lpds, LPDIRECTSOUND3DLISTENER8* ppListener)
{
  DSBUFFERDESC             dsbd;
  LPDIRECTSOUNDBUFFER      lpdsbPrimary;  // Cannot be IDirectSoundBuffer8.
  LPDIRECTSOUND3DLISTENER8 lp3DListener = NULL;
  HRESULT hr;
 
  ZeroMemory(&dsbd, sizeof(DSBUFFERDESC));
  dsbd.dwSize = sizeof(DSBUFFERDESC);
  dsbd.dwFlags = DSBCAPS_CTRL3D | DSBCAPS_PRIMARYBUFFER;

  if (SUCCEEDED(hr = lpds->CreateSoundBuffer(&dsbd, &lpdsbPrimary, NULL)))
  {
    hr = lpdsbPrimary->QueryInterface(IID_IDirectSound3DListener8,
                                 (LPVOID *)ppListener);
    lpdsbPrimary->Release();
  }
  return hr;
}