Platform SDK: DirectX |
To obtain a pointer to an IDirectSound3DBuffer interface, you must first create a secondary 3-D sound buffer. Do this by using the IDirectSound::CreateSoundBuffer method, specifying the DSBCAPS_CTRL3D flag in the dwFlags member of the DSBUFFERDESC structure. Then use the IDirectSoundBuffer::QueryInterface method on the resulting buffer to obtain a pointer to an IDirectSound3DBuffer interface for that buffer.
The following example calls the QueryInterface method with the C++ syntax:
// LPDIRECTSOUNDBUFFER lpDsbSecondary; // The buffer has been created with DSBCAPS_CTRL3D. LPDIRECTSOUND3DBUFFER lpDs3dBuffer; HRESULT hr = lpDsbSecondary->QueryInterface(IID_IDirectSound3DBuffer, (LPVOID *)&lpDs3dBuffer); if SUCCEEDED(hr) { // Set 3-D parameters of this sound. . . . }
To obtain a DirectSound3DBuffer object, you must first create a secondary 3-D sound buffer. Do this by using the DirectSound.CreateSoundBuffer method, specifying the DSBCAPS_CTRL3D flag in the lFlags member of the DSBUFFERDESC type. Then call the DirectSoundBuffer.GetDirectSound3DBuffer method on the resulting buffer.
The following example shows how to create a DirectSound3DBuffer object.
Dim dsbd As DSBUFFERDESC Dim dsBuffer As DirectSoundBuffer Dim waveFormat As WAVEFORMATEX Dim ds3dBuffer As DirectSound3DBuffer ' Set up the wave format. 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 ' Create the secondary buffer. dsbd.lFlags = DSBCAPS_CTRL3D Set dsBuffer = m_ds.CreateSoundBuffer(dsbd, waveFormat) ' Obtain the 3-D buffer object. Set ds3dBuffer = dsBuffer.GetDirectSound3DBuffer