Microsoft DirectX 8.0 (C++)

3D バッファ オブジェクトの取得

IDirectSound3DBuffer8 インターフェイスは、DSBUFFERDESC 構造体の dwFlags メンバで DSBCAPS_CTRL3D フラグを指定して作成されたDirectSound セカンダリ バッファから取得される。

アプリケーションが DirectMusic のパフォーマンスおよびオーディオパスを使用している場合、DMUS_APATH_DYNAMIC_3DdwType パラメータとして IDirectMusicPerformance8::CreateStandardAudioPath に渡すことによって、3D バッファを含むオーディオパスを作成できる。

構成オブジェクトから適切なオーディオパスを作成することもできる。オーディオパス構成によって、バッファの 3D パラメータを指定できる。オーディオパスを作成するときに、バッファの 3D プロパティはこれらのパラメータを使って初期化される。

オーディオパス内の 3D バッファへのインターフェイスを取得するには、dwStage を DMUS_PATH_BUFFER に設定して、IDirectMusicAudioPath8::GetObjectInPath または IDirectMusicSegmentState8::GetObjectInPath を呼び出す。

次のサンプル コードでは、標準オーディオパスを作成し、IDirectSound3DBuffer8 インターフェイスを取得している。

HRESULT                  hr;
IDirectMusicAudioPath8*  g_p3DAudioPath;
IDirectSound3DBuffer8*   g_pDS3DBuffer; 

if (FAILED(hr = pPerformance->CreateStandardAudioPath(
        DMUS_APATH_DYNAMIC_3D, 64, TRUE, &g_p3DAudioPath)))
    return hr;
 
if (FAILED(hr = g_p3DAudioPath->GetObjectInPath( 
        DMUS_PCHANNEL_ALL, DMUS_PATH_BUFFER, 0,
        GUID_NULL, 0, IID_IDirectSound3DBuffer8, 
        (LPVOID*) &g_pDS3DBuffer)))
    return hr;
 

アプリケーションが独自の DirectSound セカンダリ バッファを作成および管理し、DirectMusic パフォーマンスを使用しない場合、次のサンプル コードのように、バッファについて IDirectSoundBuffer8::QueryInterface メソッドを呼び出すことによって、IDirectSound3DBuffer8 インターフェイスを取得できる。

// lpDsbSecondary は、DSBCAPS_CTRL3D を指定して作成された
// 有効な IDirectSoundBuffer8 であると仮定する。
 
LPDIRECTSOUND3DBUFFER8 lpDs3dBuffer;
 
HRESULT hr = lpDsbSecondary->QueryInterface(IID_IDirectSound3DBuffer8, 
                                            (LPVOID *)&lpDs3dBuffer);