如何:使用引擎回调

可以通过向 XAudio2 引擎注册实现 IXAudio2EngineCallback 接口的类的实例来通知引擎事件的 XAudio2 客户端代码。 这样,XAudio2 客户端代码就可以跟踪何时进行音频处理,以及何时在发生严重错误时重启引擎。

使用引擎回调

以下步骤注册对象以处理引擎事件。

  1. 创建从 IXAudio2EngineCallback 接口继承的类。

    IXAudio2EngineCallback 的所有方法都是纯虚拟的,必须进行定义。 此示例中感兴趣的方法是 IXAudio2EngineCallback::OnCriticalError,它设置一个标志来指示main游戏循环发生了严重错误。 在此示例中,其余方法 IXAudio2EngineCallback::OnProcessingPassStartIXAudio2EngineCallback::OnProcessingPassEnd 是存根。

    class EngineCallback : public IXAudio2EngineCallback
    {
        void OnProcessingPassEnd () {}
        void OnProcessingPassStart() {}
        void OnCriticalError (HRESULT Error) {}
    };
    
  2. 使用 XAudio2Create 创建 XAudio2 引擎的实例。

    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 编程指南

如何:构建基本的音频处理图

如何:对磁盘中的声音进行流式处理