방법: 엔진 콜백 사용

XAudio2 엔진에 IXAudio2EngineCallback 인터페이스를 구현하는 클래스의 instance 등록하여 XAudio2 클라이언트 코드에 엔진 이벤트를 알릴 수 있습니다. 이렇게 하면 XAudio2 클라이언트 코드가 오디오 처리가 발생하는 시기와 심각한 오류가 발생할 경우 엔진을 다시 시작해야 하는 시기를 추적할 수 있습니다.

엔진 콜백을 사용하려면

다음 단계에서는 엔진 이벤트를 처리하기 위해 개체를 등록합니다.

  1. IXAudio2EngineCallback 인터페이스에서 상속되는 클래스를 만듭니다.

    IXAudio2EngineCallback의 모든 메서드는 전적으로 가상이며 정의되어야 합니다. 이 예제에서 관심 있는 방법은 IXAudio2EngineCallback::OnCriticalError로, 기본 게임 루프에 심각한 오류가 발생했음을 알리는 플래그를 설정합니다. 나머지 메서드인 IXAudio2EngineCallback::OnProcessingPassStartIXAudio2EngineCallback::OnProcessingPassEnd는 이 예제의 스텁입니다.

    class EngineCallback : public IXAudio2EngineCallback
    {
        void OnProcessingPassEnd () {}
        void OnProcessingPassStart() {}
        void OnCriticalError (HRESULT Error) {}
    };
    
  2. XAudio2Create를 사용하여 XAudio2 엔진의 instance 만듭니다.

    if ( FAILED(hr = XAudio2Create( &pXAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR ) ) )
        return hr;
    
  3. IXAudio2::RegisterForCallbacks를 사용하여 엔진 콜백을 등록합니다.

    pXAudio2->RegisterForCallbacks( &engineCallback );
    
  4. 엔진 콜백이 더 이상 필요하지 않은 경우 IXAudio2::UnregisterForCallbacks를 호출합니다.

    pXAudio2->UnregisterForCallbacks( &engineCallback );
    

콜백

XAudio2 콜백

XAudio2 프로그래밍 지침

방법: 기본 오디오 처리 그래프 빌드

방법: 디스크에서 소리 스트리밍