Partager via


Vue d’ensemble d’ADPCM

La modulation de code d’impulsion différentielle adaptative (ADPCM) est un format de compression avec perte qui est implémenté pour XAudio2 afin de fournir des fonctionnalités supplémentaires permettant de spécifier la taille du bloc d’exemple de compression. Avec un format de compression avec perte, certaines données sont modifiées et perdues pendant la compression. ADPCM peut atteindre des taux de compression allant jusqu’à 4:1.

L’implémentation d’ADPCM pour XAudio2 fournit des fonctionnalités supplémentaires pour spécifier la taille du bloc d’exemple de compression. ADPCM permet au concepteur audio de choisir un paramètre qui constitue un compromis approprié entre la taille, la qualité et la résolution (pour placer des points de boucle).

XAudio2 utilise une version modifiée du codec Microsoft ADPCM qui prend en charge la mise en forme étendue des données requise pour fournir des tailles d’exemples de blocs personnalisées. Pour cette raison, les données audio XAudio2 ne peuvent pas être lues par les moteurs audio qui ne prennent pas en charge cette version du codec ADPCM.

Notes

Actuellement, la compression ADPCM n’est disponible que pour Windows, y compris les déploiements XNA Game Studio Express pour Windows.

 

Encodage ADPCM

Les données audio sont encodées en ADPCM à l’aide de l’outil en ligne de commande AdpcmEncode.

  • AdpcmEncode

    Pour encoder des fichiers audio en tant qu’ADPCM à utiliser avec XAudio2, utilisez l’outil en ligne de commande AdpcmEncode .

Décodage ADPCM

Le décodage logiciel d’ADPCM est pris en charge dans XAudio2.

  • XAudio2

    Pour utiliser des données encodées ADPCM dans XAudio2, vous devez initialiser une structure ADPCMWAVEFORMAT avec des valeurs spécifiques à ADPCM et la transmettre en tant qu’argument à IXAudio2::CreateSourceVoice lorsque vous créez une voix source. Pour obtenir un exemple de chargement et de lecture d’un son dans XAudio2, consultez Guide pratique pour lire un son avec XAudio2.

SamplesPerBlock

La compression ADPCM fonctionne en séparant la forme d’onde en blocs et en prédisant la variation des exemples de forme d’onde dans chaque bloc. La taille des blocs est mesurée dans des exemples. La plus petite taille de bloc est de 32 échantillons, et la plus élevée est de 512 échantillons.

Les blocs plus grands permettent une meilleure compression, ce qui entraîne des tailles de fichiers plus petites, mais au détriment de la qualité du son et de la résolution pour l’alignement des points de boucle.

En général, la modification de la valeur SamplesPerBlock entraîne les compromis suivants :

Si SamplesPerBlock... Compression de fichiers Qualité du son Résolution de point de boucle
Augmente (jusqu’à 512) Augmente Diminue Diminue
Diminue (jusqu’à min 32) Diminue Augmente Augmente

 

Restrictions

Étant donné qu’ADPCM utilise des exemples de blocs alignés les uns après les autres, une vague compressée avec ADPCM peut avoir un bloc partiel non terminé à sa fin. Le décodeur ADPCM génère un silence pour le reste de ce bloc partiel, ce qui empêche l’onde de boucler en toute transparence.

La valeur du paramètre SamplesPerBlock affecte la résolution avec laquelle vous pouvez aligner les données d’onde et les points de boucle.

Si vous essayez d’appliquer la compression à une onde non alignée, vous obtenez une erreur ou un avertissement selon que l’onde est utilisée dans les événements de lecture en boucle. Vous ne pouvez pas compresser une onde utilisée dans les événements de lecture en boucle. Supprimez-la des événements de lecture en boucle et appliquez à nouveau la compression.

Si vous utilisez l’onde exclusivement en mode sans boucle, la restriction d’alignement de l’exemple de bloc ne s’applique pas.

Structure de fichier ADPCM

Un fichier ADPCM est un fichier RIFF standard avec les types de blocs suivants.

Segment FCC Description
RIFF Bloc RIFF standard contenant un type de fichier avec la valeur WAVE dans les quatre premiers octets de sa section de données et les autres blocs du fichier dans le reste de sa section de données.
Fmt Contient l’en-tête de format du fichier ADPCM. Les données de ce segment correspondent à une structure ADPCMWAVEFORMAT .
data Contient les données audio ADPCM encodées. Lorsque vous utilisez ADPCM dans XAudio2, vous devez lire le contenu du bloc de données dans une mémoire tampon et le transmettre à une voix source en tant que membre pAudioData d’une structure XAUDIO2_BUFFER . Vous n’avez pas besoin d’échanger le contenu du bloc de données.
smpl et wsmp Types de blocs facultatifs contenant les informations de boucle pour le fichier ADPCM. Lorsque vous utilisez ADPCM dans XAudio2, les valeurs contenues dans les blocs smpl ou wsmp sont utilisées pour remplir les membres LoopBeginLoopLength et LoopCount de la structure XAUDIO2_BUFFER . Sur la Xbox 360, vous devez échanger les données chargées à partir d’un bloc smpl pour tenir compte de la différence d’endianness entre Windows et Xbox 360.

 

Guide de programmation