次の方法で共有


オーディオパスからのオブジェクトの取得

オーディオパス内の特定のオブジェクトへのインターフェイスを取得しなければならない場合がある。このような場合の一般的な理由は次のとおりである。

  • 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 は、IMediaObjectIMediaObjectInPlaceIMediaParams の各インターフェイスもサポートする。

標準バッファを取得するときの 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 インターフェイス」を参照すること。