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