オーディオパスからのオブジェクトの取得
オーディオパス内の特定のオブジェクトへのインターフェイスを取得しなければならない場合がある。このような場合の一般的な理由は次のとおりである。
- IDirectSound3DBuffer8 インターフェイスを取得することによって、サウンドの 3D プロパティを操作するため。
- プライマリ バッファから IDirectSound3DListener8 インターフェイスを取得することによって、グローバル 3D サウンドのプロパティを設定するため。
- IDirectSoundBuffer8 インターフェイスを取得することによって、セカンダリ バッファのエフェクトを設定するため。
- IDirectSoundFXI3DL2Reverb8 などの DMO へのインターフェイスを取得することによって、エフェクトのパラメータを設定するため。
オーディオパスで演奏中のセグメント状態に対して IDirectMusicSegmentState8::GetObjectInPath を呼び出すことにより、オーディオパスからオブジェクトを取得できる。オーディオパス オブジェクト自体に対して IDirectMusicAudioPath8::GetObjectInPath を呼び出すことも可能である。次の表では、これら 2 つのメソッドのパラメータについて説明する。
dwStage | guidObject | dwPChannel を使うか |
dwIndex を使うか |
iidInterface (標準) |
DMUS_PATH_AUDIOPATH (*) | 無視される | いいえ | いいえ | IID_IDirectMusicAudioPath8 |
DMUS_PATH_AUDIOPATH_GRAPH | 無視される | いいえ | いいえ | IID_IDirectMusicGraph8 |
DMUS_PATH_AUDIOPATH_TOOL | ツール クラス ID または 列挙する GUID_All_Objects |
はい | はい | IID_IDirectMusicTool8 |
DMUS_PATH_BUFFER | 無視される | はい | いいえ。dwBuffer によって識別する | IID_IDirectSoundBuffer8 |
DMUS_PATH_BUFFER_DMO | GUID_DSFX_STANDARD_GARGLE などの DMO クラス ID、 または列挙する GUID_All_Objects |
はい | はい。バッファ内の DMO のインデックス | IID_IDirectSoundFXGargle(**) など、標準 DMO インターフェイスの GUID |
DMUS_PATH_MIXIN_BUFFER | 無視される | いいえ | いいえ。dwBuffer によって識別する | IID_IDirectSoundBuffer8 |
DMUS_PATH_MIXIN_BUFFER_DMO | GUID_DSFX_STANDARD_I3DL2REVERB などの DMO クラス ID、 または列挙する GUID_All_Objects |
いいえ | はい。バッファ内の DMO のインデックス | IID_IDirectSoundFXI3DL2Reverb(**) など、標準 DMO インターフェイスの GUID |
DMUS_PATH_PERFORMANCE | 無視される | いいえ | いいえ | IID_IDirectMusicPerformance8 |
DMUS_PATH_PERFORMANCE_GRAPH | 無視される | いいえ | いいえ | IID_IDirectMusicGraph8 |
DMUS_PATH_PERFORMANCE_TOOL | ツール クラス ID または 列挙する GUID_All_Objects |
はい | はい | IID_IDirectMusicTool8 |
DMUS_PATH_PORT | ポート クラス ID または 列挙する GUID_All_Objects |
はい | はい | IID_IDirectMusicPort |
DMUS_PATH_PRIMARY_BUFFER | 無視される | いいえ | いいえ | IID_IDirectSound3DListener8 |
DMUS_PATH_SEGMENT (*) | 無視される | いいえ | いいえ | IID_IDirectMusicSegment8 |
DMUS_PATH_SEGMENT_GRAPH (*) | 無視される | いいえ | いいえ | IID_IDirectMusicGraph8 |
DMUS_PATH_SEGMENT_TOOL (*) | ツール クラス ID または 列挙する GUID_All_Objects |
はい | はい | IID_IDirectMusicTool8 |
DMUS_PATH_SEGMENT_TRACK (*) | トラック クラス ID または 列挙する GUID_All_Objects |
いいえ | はい | IID_IDirectMusicTrack8 |
注 (*) この段階のオブジェクトは、IDirectMusicAudioPath8::GetObjectInPath によって取得できる。
(**) DirectX の標準 DMO は、IMediaObject、IMediaObjectInPlace、IMediaParams の各インターフェイスもサポートする。
標準バッファを取得するときの dwIndex の値の詳細については、「標準オーディオパス」を参照すること。
次のサンプル関数では、セグメントを演奏したときに作成されたセグメント状態から、セグメントを取得している。
HRESULT GetSegmentFromState(IDirectMusicSegmentState* pSegState, IDirectMusicSegment8** ppSeg)
{
IDirectMusicSegmentState8* pSegState8;
HRESULT hr;
if (SUCCEEDED(hr = pSegState->QueryInterface(IID_IDirectMusicSegmentState8,
(void**) &pSegState8)))
{
hr = SUCCEEDED(pSegState8->GetObjectInPath(0, DMUS_PATH_SEGMENT, 0,
GUID_NULL, 0, IID_IDirectMusicSegment, (void**) ppSeg));
pSegState8->Release();
}
return hr;
}
エフェクト バッファへのインターフェイスが既にある場合は、IDirectSoundBuffer8::GetObjectInPathを使って DMO インターフェイスを取得することもできる。
オーディオパスの任意のバッファに対する IDirectSoundBuffer8 インターフェイスを取得できるが、一部のメソッドは有効ではない。詳細については、「IDirectSoundBuffer8 インターフェイス」を参照すること。