Platform SDK: DirectX |
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 パラメータを設定する。 . . . }
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