Platform SDK: DirectX |
IDirectSound3DListener インターフェイスへのポインタを取得するには、最初にプライマリ 3D サウンド バッファを作成しなければならない。これを作成するには、IDirectSound::CreateSoundBuffer メソッドを使い、関連する DSBUFFERDESC 構造体の dwFlags メンバで DSBCAPS_CTRL3D と DSBCAPS_PRIMARYBUFFER の各フラグを指定する。そして作成されたバッファに対して IDirectSoundBuffer::QueryInterface メソッドを呼び出し、そのバッファの IDirectSound3Dlistener インターフェイスへのポインタを取得する。C++ の構文による次の例はこれを示す。
/* この例では、lpds が DirectSound オブジェクトへの 有効なポインタであると想定する。*/ DSBUFFERDESC dsbd; LPDIRECTSOUNDBUFFER lpdsbPrimary; ZeroMemory(&dsbd, sizeof(DSBUFFERDESC)); dsbd.dwSize = sizeof(DSBUFFERDESC); dsbd.dwFlags = DSBCAPS_CTRL3D | DSBCAPS_PRIMARYBUFFER; if SUCCEEDED(lpds->CreateSoundBuffer(&dsbd, &lpdsbPrimary, NULL)) { // リスナー インターフェイスを取得する。 if FAILED(lpdsbPrimary->QueryInterface(IID_IDirectSound3DListener, (LPVOID *)&lp3DListener)) { lpdsbPrimary->Release(); } }
DirectSound3DListener オブジェクトを取得するには、最初にプライマリ 3D サウンド バッファを作成しなければならない。これを作成するには、DirectSound.CreateSoundBuffer メソッドを使い、関連する DSBUFFERDESC 型の lFlags メンバで DSBCAPS_CTRL3D と DSBCAPS_PRIMARYBUFFER の各フラグを指定する。そして作成されたバッファに対して DirectSoundBuffer.GetDirectSound3DListener メソッドを呼び出し、DirectSound3DListener オブジェクトを取得する。次の例でこのステップを示す。ds はグローバルな DirectSound オブジェクトである。
Dim dsbd As DSBUFFERDESC Dim dsbPrimary As DirectSoundBuffer Dim waveFormat As WAVEFORMATEX Dim ds3dListener As DirectSound3DListener ' プライマリ バッファを作成する。プライマリ バッファでは ' waveFormat パラメータは無視されるので、初期化しなくてよい。 dsbd.lFlags = DSBCAPS_CTRL3D Or DSBCAPS_PRIMARYBUFFER Set dsbPrimary = ds.CreateSoundBuffer(dsbd, waveFormat) ' DirectSound3DListener オブジェクトを作成する。 Set ds3DListener = dsbPrimary.GetDirectSound3DListener
リスナーを取得した後は、プライマリ バッファ オブジェクトは必要なくなり、スコープ外に出せる。