Руководство: использование обратных вызовов модуля

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

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

Ниже описано, как зарегистрировать объект для обработки событий обработчика.

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

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

Руководство: создание базовой схемы обработки звука

Руководство: организация звукового потока с диска