Поделиться через


Как использовать обратные вызовы движка

Вы можете уведомить клиентский код XAudio2 о событиях подсистемы, зарегистрируя экземпляр класса, реализующего интерфейс IXAudio2EngineCallback с подсистемой XAudio2. Это позволяет клиентскому коду XAudio2 отслеживать время обработки звука, а также время перезапуска обработчика в случае критической ошибки.

Использование обратного вызова обработчика

В следующих шагах описано, как зарегистрировать объект для обработки событий двигателя.

  1. Создайте класс, наследующий интерфейс IXAudio2EngineCallback.

    Все методы IXAudio2EngineCallback являются чисто виртуальными и должны быть определены. Методом, представляющим интерес в этом примере, является IXAudio2EngineCallback::OnCriticalError, который задает флаг для сигнала основному циклу игры, что возникла критическая ошибка. Остальные методы IXAudio2EngineCallback::OnProcessingPassStart и IXAudio2EngineCallback::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

Как создать базовую аудиообработку

Как передать звук с диска потоковым способом