DirectMusic DirectMusic 의 사용법 DirectMusic 에서의 3D 사운드의 사용법   [목차열람] [주소복사] [슬롯비우기]
DirectMusic 에서의 3D 사운드의 사용법
 
Microsoft DirectX 9.0

DirectMusic 에서의 3D 사운드의 사용법

DirectSound API 를 사용하면 공간내의 DirectMusic 사운드의 위치를 특정해, 이동하는 사운드에 도플러 편이를 적용할 수 있다.

3D 이펙트는, 각각의 DirectSound 버퍼에 적용된다. 각각 독자적인 버퍼를 가지는 복수의 오디오 패스에 다른 사운드를 지정할 수 있으므로, 다른 사운드에 다른 파라미터를 용이하게 적용할 수 있다.

버퍼에 3D 이펙트를 적용하려면 ,DMUS_APATH_DYNAMIC_3D 표준 오디오 패스와 같이 3D 능력을 갖춘 버퍼에 대한 IDirectSound3DBuffer8 인터페이스를 얻어올 필요가 있다. 또, 버퍼에 대한 3D 파라미터를 지정하는 구성 개체로부터, 적절한 오디오 패스를 생성 할 수도 있다.

다음 샘플 코드에서는, 표준 오디오 패스를 생성 해,IDirectSound3DBuffer8 인터페이스를 취득하고 있다. g_pPerformance 는 유효한 IDirectMusicPerformance8 포인터이다.

HRESULT                  hr;
IDirectMusicAudioPath8*  g_p3DAudioPath;
IDirectSound3DBuffer8*   g_pDS3DBuffer; 

if (SUCCEEDED(hr = g_pPerformance->CreateStandardAudioPath(
    DMUS_APATH_DYNAMIC_3D, 64, TRUE, &g_p3DAudioPath)))
{
  hr = g_p3DAudioPath->GetObjectInPath( 
      DMUS_PCHANNEL_ALL, DMUS_PATH_BUFFER, 0,
      GUID_NULL, 0, IID_IDirectSound3DBuffer8, 
      (LPVOID*) &g_pDS3DBuffer);
}
if (FAILED(hr))
{
  ErrorExit(hr);  // 에러 처리 코드를 추가한다.
}

글로벌 3D 파라미터를 조절해, 청취자의 위치와 방향을 조작하려면 ,dwStage 파라미터에 DMUS_PATH_PRIMARY_BUFFER 를 설정한 IDirectMusicAudioPath8::GetObjectInPath 또는 IDirectMusicSegmentState8::GetObjectInPath 를 사용해, 임의의 오디오 패스의 1차 버퍼로부터 IDirectSound3DListener8 인터페이스를 얻어올 필요가 있다. 다음 샘플 함수에서는, 오디오 패스로부터 청취자를 취득하고 있다.

HRESULT GetListener(IDirectMusicAudioPath8* pPath, IDirectSound3DListener8** ppListener)
{
  HRESULT hr = E_INVALIDARG;

  if (NULL != pPath)
  {
    hr = pPath->GetObjectInPath(0, DMUS_PATH_PRIMARY_BUFFER, 0,
                                GUID_NULL, 0, IID_IDirectSound3DListener8, 
                                (LPVOID*) ppListener);
  }
  return hr;
}}

참조

↑TOP