Partager via


Rappels XAudio2

XAudio2 peut appeler des fonctions fournies par le client pour l’avertir de manière asynchrone de certains événements qui se produisent dans le thread de traitement audio. Ces rappels peuvent être globaux ou spécifiques à une voix source donnée. Pour recevoir des rappels de moteur globaux, le client doit fournir une instance d’une classe implémentant l’interface IXAudio2EngineCallback lors de l’initialisation de XAudio2. Pour recevoir des rappels vocaux sources, le client doit fournir une instance d’une classe implémentant l’interface IXAudio2VoiceCallback lors de la création de voix sources. Pour plus d’informations, consultez IXAudio2EngineCallback et IXAudio2VoiceCallback.

Vous devez implémenter les rappels avec soin pour éviter de provoquer des interruptions dans l’audio. Chaque fois qu’un rappel est en cours d’exécution, XAudio2 ne peut pas générer d’audio. Des retards de plus de quelques millisecondes peuvent provoquer un problème audio. Les retards de cette nature génèrent également la sortie du débogueur. Cela indique des problèmes de performances potentiels. Au minimum, les fonctions de rappel ne doivent pas effectuer les opérations suivantes :

  • Accéder au disque dur ou à un autre stockage permanent
  • Effectuer des appels d’API coûteux ou bloquants
  • Synchroniser avec d’autres parties du code client
  • Exiger une utilisation significative du processeur

Si la conception du client nécessite un rappel pour déclencher des actions telles que celles répertoriées précédemment, le rappel doit signaler à un autre thread client d’effectuer le travail. Vous pouvez le faire avec un mécanisme SetEvent simple ou des mécanismes plus sophistiqués comme une file d’attente de commandes non bloquante qui est consommée par un autre thread.

IXAudio2EngineCallback

La classe IXAudio2EngineCallback contient des méthodes qui informent le client lorsque certains événements se produisent dans le moteur XAudio2. Ces méthodes doivent être implémentées par le client XAudio2. XAudio2 appelle ces méthodes au moyen d’un pointeur d’interface fourni par le client à l’aide de la méthode IXAudio2::RegisterForCallbacks . Toutes ces méthodes retournent void, plutôt qu’un HRESULT.

IXAudio2VoiceCallback

La classe IXAudio2VoiceCallback contient des méthodes qui informent le client lorsque certains événements se produisent dans une voix source XAudio2 spécifique. XAudio2 appelle ces méthodes au moyen d’un pointeur d’interface fourni par le client dans IXAudio2::CreateSourceVoice. Comme avec IXAudio2EngineCallback, ces méthodes doivent être implémentées par le client XAudio2 et retourner void plutôt qu’un HRESULT.

Comme mentionné précédemment, il est essentiel que les implémentations fournies par le client de ces rappels retournent aussi rapidement que possible, de préférence dans un délai d’une milliseconde. Les rappels sont exécutés dans le thread de traitement audio et tout le traitement est interrompu jusqu’à ce que le rappel soit retourné. Un retard dans un rappel peut facilement provoquer un problème audio.

Rappels

Guide de programmation XAudio2

Procédure : utiliser des rappels de voix source

Procédure : utiliser des rappels de moteur

Procédure : diffuser un son en continu à partir du disque