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;
}
参照