Руководство: использование обратных вызовов модуля
Вы можете уведомить код клиента XAudio2 о событиях подсистемы, зарегистрировав экземпляр класса , реализующего интерфейс IXAudio2EngineCallback с подсистемой XAudio2. Это позволяет клиентскому коду XAudio2 отслеживать, когда происходит обработка звука и когда следует перезапустить подсистему в случае критической ошибки.
Использование обратного вызова подсистемы
Ниже описано, как зарегистрировать объект для обработки событий обработчика.
Создайте класс, который наследуется от интерфейса IXAudio2EngineCallback .
Все методы IXAudio2EngineCallback являются исключительно виртуальными и должны быть определены. В этом примере интерес представляет метод IXAudio2EngineCallback::OnCriticalError, который устанавливает флаг, указывающий main игровому циклу о возникновении критической ошибки. Остальные методы IXAudio2EngineCallback::OnProcessingPassStart и IXAudio2EngineCallback::OnProcessingPassEnd в этом примере являются заглушками.
class EngineCallback : public IXAudio2EngineCallback { void OnProcessingPassEnd () {} void OnProcessingPassStart() {} void OnCriticalError (HRESULT Error) {} };
Используйте XAudio2Create для создания экземпляра подсистемы XAudio2.
if ( FAILED(hr = XAudio2Create( &pXAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR ) ) ) return hr;
Используйте IXAudio2::RegisterForCallbacks для регистрации обратного вызова обработчика.
pXAudio2->RegisterForCallbacks( &engineCallback );
Если обратный вызов обработчика больше не требуется, вызовите IXAudio2::UnregisterForCallbacks.
pXAudio2->UnregisterForCallbacks( &engineCallback );
Связанные темы