Données audio de diffusion en continu XAudio2

La diffusion en continu consiste à ne maintenir en mémoire qu’une petite partie d’un fichier audio en cours de lecture. Cela permet aux fichiers audio volumineux tels que la musique d’arrière-plan d’être lues et de ne pas prendre une grande quantité de mémoire.

Tip

Dimensionnement de la mémoire tampon pour une faible latence : Utilisez au moins 3 mémoires tampons dans votre anneau de diffusion en continu pour éviter les blocages et conservez la durée de chaque mémoire tampon comprise entre 20 et 100 ms. Les mémoires tampons plus courtes (20 à 40 ms) réduisent la latence perçue pour les effets sonores interactifs, mais demandent des lectures de disque plus rapides et une planification plus étroite des threads. Pour la diffusion en continu de musique en arrière-plan, les mémoires tampons de 80 à 100 ms offrent une marge confortable tout en restant inaudibles pour les utilisateurs.

Avertissement

Le thread de streaming doit s’exécuter avec une priorité élevée via MMCSS (par exemple, en s’enregistrant dans la tâche « Pro Audio » ou « Games ») afin d’éviter les sous-alimentations de tampon causées par des threads de priorité inférieure qui privent le pipeline audio des ressources nécessaires. Les sous-exécutions entraînent des pops audibles ou des écarts de silence qui sont perturbants dans l’audio du jeu.

Lorsqu’un fichier audio est diffusé en continu, ses données sont lues à partir du disque en blocs plutôt que de charger le fichier entier à la fois. La diffusion en continu est effectuée en lisant de manière asynchrone les données audio dans une file d’attente de mémoires tampons de disque. Chaque mémoire tampon est remplie, puis envoyée à une voix source. Une fois que la voix a terminé de lire une mémoire tampon, la mémoire tampon est à nouveau disponible pour la lecture. Le fait de parcourir les mémoires tampons de disque de cette manière permet de lire un fichier audio volumineux alors que seule une partie de ses données est chargée. Le code de diffusion en continu doit être placé dans un thread séparé, où il peut se mettre en veille en attendant la fin des longues opérations d’accès au disque et de traitement audio. Une classe de rappel est utilisée pour déclencher le thread en déclenchant des événements lorsque des opérations audio ont terminé.

Pour obtenir un exemple de la façon dont la diffusion en continu peut être effectuée avec XAudio2, consultez Comment : diffuser un son à partir du disque.

Données audio en streaming

Guide de programmation XAudio2