Procédure : utiliser des rappels de moteur
Vous pouvez notifier le code client XAudio2 des événements de moteur en inscrivant une instance d’une classe qui implémente l’interface IXAudio2EngineCallback avec le moteur XAudio2. Cela permet au code client XAudio2 de suivre le moment où le traitement audio se produit et le moment où il doit redémarrer le moteur en cas d’erreur critique.
Pour utiliser un rappel de moteur
Les étapes suivantes inscrivent un objet pour gérer les événements du moteur.
Créez une classe qui hérite de l’interface IXAudio2EngineCallback .
Toutes les méthodes de IXAudio2EngineCallback sont purement virtuelles et doivent être définies. La méthode d’intérêt dans cet exemple est IXAudio2EngineCallback :: OnCriticalError, qui définit un indicateur qui signale à la boucle de jeu principale qu’une erreur critique s’est produite. Les méthodes restantes, IXAudio2EngineCallback :: OnProcessingPassStart et IXAudio2EngineCallback :: OnProcessingPassEnd, sont des stubs dans cet exemple.
class EngineCallback : public IXAudio2EngineCallback { void OnProcessingPassEnd () {} void OnProcessingPassStart() {} void OnCriticalError (HRESULT Error) {} };Utilisez XAudio2Create pour créer une instance du moteur XAudio2.
if ( FAILED(hr = XAudio2Create( &pXAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR ) ) ) return hr;Utilisez IXAudio2 :: RegisterForCallbacks pour enregistrer le rappel du moteur.
pXAudio2->RegisterForCallbacks( &engineCallback );Si vous n’avez plus besoin du rappel du moteur, appelez IXAudio2 :: UnregisterForCallbacks.
pXAudio2->UnregisterForCallbacks( &engineCallback );