Platform SDK: DirectX

DirectSound3DListener オブジェクトの取得

[C++]

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();
    }
} 
 
[Visual Basic]

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
 

リスナーを取得した後は、プライマリ バッファ オブジェクトは必要なくなり、スコープ外に出せる。