次の方法で共有


3D リスナーの取得

グローバル サウンド パラメータは、IDirectSound3DListener8 インターフェイスを使ってプライマリ バッファから取得する。アプリケーションのプライマリ バッファは 1 つだけで、リスナーも 1 人だけである。

DirectMusic オーディオパスを使わないアプリケーションでは、プライマリ バッファ オブジェクトを作成し、このオブジェクトからリスナー インターフェイスを取得する必要がある。プライマリ バッファを作成するには、IDirectSound8::CreateSoundBuffer メソッドを使い、DSBUFFERDESC 構造体の dwFlags メンバで DSBCAPS_CTRL3D フラグと DSBCAPS_PRIMARYBUFFER フラグを指定する。作成されたバッファに対して QueryInterface メソッドを呼び出し、そのバッファの IDirectSound3DListener8 インターフェイスへのポインタを取得する。

次のサンプル関数では、リスナーに対するインターフェイスを取得している。

GetListener(LPDIRECTSOUND8 lpds, LPDIRECTSOUND3DLISTENER8* ppListener)
{
  DSBUFFERDESC             dsbd;
  LPDIRECTSOUNDBUFFER      lpdsbPrimary;  // 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;
} 

参照