DirectMusic DirectMusic 의 사용법 DirectMusic 에서의 3D 사운드의 사용법 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
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;
}}
참조