Partager via


Rappels XAudio2

XAudio2 peut appeler des fonctions fournies par le client pour l’informer 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 soigneusement des rappels 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. Les retards de plus de quelques millisecondes peuvent entraîner 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 thread client différent pour effectuer le travail. Pour ce faire, vous pouvez utiliser un mécanisme de SetEvent simple ou des mécanismes plus sophistiqués comme une file d’attente de commandes non bloquante consommée par un autre thread.

IXAudio2EngineCallback

La classe IXAudio2EngineCallback contient des méthodes qui informent le client quand 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’une HRESULT.

IXAudio2VoiceCallback

La classe IXAudio2VoiceCallback contient des méthodes qui informent le client quand 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’une HRESULT.

Comme mentionné précédemment, il est essentiel que les implémentations fournies par le client de ces rappels retournent le plus rapidement possible, de préférence en millisecondes. Les rappels sont exécutés dans le thread de traitement audio et tout le traitement est interrompu jusqu’à ce que le rappel retourne. Un retard dans un rappel peut facilement entraîner un problème audio.

rappels

Guide de programmation XAudio2

Comment : utiliser des rappels vocaux sources

Comment : utiliser des rappels de moteur

Comment : diffuser un son à partir d’un disque