Platform SDK: DirectX

DirectSound3DBuffer オブジェクトの取得

[C++]

IDirectSound3DBuffer インターフェイスへのポインタを取得するには、最初にセカンダリ 3D サウンド バッファを作成しなければならない。これを作成するには、IDirectSound::CreateSoundBuffer メソッドを使い、DSBUFFERDESC 構造体の dwFlags メンバに DSBCAPS_CTRL3D フラグを指定する。そして作成されたバッファに対して IDirectSoundBuffer::QueryInterface メソッドを呼び出し、そのバッファの IDirectSound3Dlistener インターフェイスへのポインタを取得する。

次の例では C++ の構文で QueryInterface メソッドを呼び出す。

// LPDIRECTSOUNDBUFFER lpDsbSecondary;
// DSBCAPS_CTRL3D を指定して作成したバッファ。
LPDIRECTSOUND3DBUFFER lpDs3dBuffer;
 
HRESULT hr = lpDsbSecondary->QueryInterface(IID_IDirectSound3DBuffer, 
                                            (LPVOID *)&lpDs3dBuffer); 
if SUCCEEDED(hr) 
{ 
    // このサウンドの 3D パラメータを設定する。
    . 
    . 
    . 
} 
 
[Visual Basic]

DirectSound3DBuffer オブジェクトを取得するには、最初にセカンダリ 3D サウンド バッファを作成しなければならない。これを作成するには、DirectSound.CreateSoundBuffer メソッドを使い、DSBUFFERDESC 型の lFlags メンバに DSBCAPS_CTRL3D フラグを指定する。そして作成されたバッファに対して、DirectSoundBuffer.GetDirectSound3DBuffer メソッドを呼び出す。

次の例は、DirectSound3DBuffer オブジェクトの作成方法を示す。

Dim dsbd As DSBUFFERDESC
Dim dsBuffer As DirectSoundBuffer
Dim waveFormat As WAVEFORMATEX
Dim ds3dBuffer As DirectSound3DBuffer
 
' ウェーブ フォーマットを設定する。
 
With waveFormat
    .nSize = LenB(waveFormat)
    .nFormatTag = WAVE_FORMAT_PCM
    .nChannels = 2
    .lSamplesPerSec = 22050
    .nBitsPerSample = 16
    .nBlockAlign = _
            waveFormat.nBitsPerSample / 8 * waveFormat.nChannels
    .lAvgBytesPerSec = _
            waveFormat.lSamplesPerSec * waveFormat.nBlockAlign
End With 
 
' セカンダリ バッファの作成。
 
dsbd.lFlags = DSBCAPS_CTRL3D
Set dsBuffer = m_ds.CreateSoundBuffer(dsbd, waveFormat)
 
' 3D バッファ オブジェクトの取得。
 
Set ds3dBuffer = dsBuffer.GetDirectSound3DBuffer