방법: 엔진 콜백 사용
XAudio2 엔진에 IXAudio2EngineCallback 인터페이스를 구현하는 클래스의 instance 등록하여 XAudio2 클라이언트 코드에 엔진 이벤트를 알릴 수 있습니다. 이렇게 하면 XAudio2 클라이언트 코드가 오디오 처리가 발생하는 시기와 심각한 오류가 발생할 경우 엔진을 다시 시작해야 하는 시기를 추적할 수 있습니다.
엔진 콜백을 사용하려면
다음 단계에서는 엔진 이벤트를 처리하기 위해 개체를 등록합니다.
IXAudio2EngineCallback 인터페이스에서 상속되는 클래스를 만듭니다.
IXAudio2EngineCallback의 모든 메서드는 전적으로 가상이며 정의되어야 합니다. 이 예제에서 관심 있는 방법은 IXAudio2EngineCallback::OnCriticalError로, 기본 게임 루프에 심각한 오류가 발생했음을 알리는 플래그를 설정합니다. 나머지 메서드인 IXAudio2EngineCallback::OnProcessingPassStart 및 IXAudio2EngineCallback::OnProcessingPassEnd는 이 예제의 스텁입니다.
class EngineCallback : public IXAudio2EngineCallback { void OnProcessingPassEnd () {} void OnProcessingPassStart() {} void OnCriticalError (HRESULT Error) {} };
XAudio2Create를 사용하여 XAudio2 엔진의 instance 만듭니다.
if ( FAILED(hr = XAudio2Create( &pXAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR ) ) ) return hr;
IXAudio2::RegisterForCallbacks를 사용하여 엔진 콜백을 등록합니다.
pXAudio2->RegisterForCallbacks( &engineCallback );
엔진 콜백이 더 이상 필요하지 않은 경우 IXAudio2::UnregisterForCallbacks를 호출합니다.
pXAudio2->UnregisterForCallbacks( &engineCallback );
관련 항목