Partager via


Structure WAVEFORMATEX (mmreg.h)

La structure WAVEFORMATEX spécifie le format de données d’un flux audio wave.

Syntaxe

typedef struct tWAVEFORMATEX {
  WORD  wFormatTag;
  WORD  nChannels;
  DWORD nSamplesPerSec;
  DWORD nAvgBytesPerSec;
  WORD  nBlockAlign;
  WORD  wBitsPerSample;
  WORD  cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;

Membres

wFormatTag

Spécifie le type de format audio de forme d’onde. Pour plus d'informations, consultez la section Notes qui suit.

nChannels

Spécifie le nombre de canaux de données audio. Pour l’audio monophonique, définissez ce membre sur 1. Pour stéréo, définissez ce membre sur 2.

nSamplesPerSec

Spécifie la fréquence d’échantillonnage à laquelle chaque canal doit être lu ou enregistré. Si wFormatTag = WAVE_FORMAT_PCM, les valeurs courantes pour nSamplesPerSec sont 8,0 kHz, 11,025 kHz, 22,05 kHz et 44,1 kHz. Par exemple, pour spécifier une fréquence d’échantillon de 11,025 kHz, définissez nSamplesPerSec sur 11025. Pour les formats non PCM, ce membre doit être calculé selon la spécification du fabricant de la balise de format.

nAvgBytesPerSec

Spécifie le taux de transfert de données moyen requis, en octets par seconde. Cette valeur est utile pour estimer la taille de la mémoire tampon.

nBlockAlign

Spécifie l’alignement du bloc en octets. L’alignement des blocs est la taille de l’unité atomique minimale de données pour le type de format wFormatTag . Si wFormatTag = WAVE_FORMAT_PCM ou wFormatTag = WAVE_FORMAT_IEEE_FLOAT, définissez nBlockAlign sur , qui correspond à (nChannels*wBitsPerSample)/8la taille d’une trame audio unique. Pour les formats non PCM, ce membre doit être calculé conformément à la spécification du fabricant pour la balise de format.

Les logiciels de lecture et d’enregistrement doivent traiter un multiple de nBlockAlign octets de données à la fois. Les données écrites et lues à partir d’un appareil doivent toujours commencer au début d’un bloc.

wBitsPerSample

Spécifie le nombre de bits par exemple pour le type de format spécifié par wFormatTag. Si wFormatTag = WAVE_FORMAT_PCM, wBitsPerSample doit être défini sur 8 ou 16. Si wFormatTag = WAVE_FORMAT_IEEE_FLOAT, wBitsPerSample doit avoir la valeur 32. Pour les formats non PCM, définissez la valeur de ce membre en fonction de la spécification du fabricant pour la balise de format. Certains schémas de compression ne peuvent pas définir de valeur pour wBitsPerSample. Dans ce cas, définissez wBitsPerSample sur zéro.

cbSize

Spécifie la taille, en octets, des informations de format supplémentaires ajoutées à la fin de la structure WAVEFORMATEX. Ces informations peuvent être utilisées par des formats non PCM pour stocker des attributs supplémentaires pour le wFormatTag. Si aucune information supplémentaire n’est requise par le wFormatTag, définissez ce membre sur zéro. Pour les formats WAVE_FORMAT_PCM, les clients doivent ignorer ce membre (sa valeur est implicitement zéro). Étant donné que tous les clients peuvent ne pas suivre cette règle, nous vous recommandons d’initialiser cbSize à zéro pour les formats WAVE_FORMAT_PCM.

Notes

La structure WAVEFORMATEX ne peut décrire qu’un sous-ensemble des formats qui peuvent être décrits par la structure WAVEFORMATEXTENSIBLE . Par exemple, WAVEFORMATEX peut décrire des flux mono ou (deux canaux) stéréo modulés par code d’impulsion (PCM) avec des valeurs d’échantillon d’entiers 8 bits ou 16 bits, ou avec des exemples de valeurs à virgule flottante 32 bits. En outre, WAVEFORMATEX peut décrire des formats non PCM populaires tels que AC-3 et WMA Pro.

WAVEFORMATEX peut décrire sans ambiguïté des formats PCM mono ou stéréo pour lesquels le nombre de bits valides par échantillon est identique à la taille du conteneur de l’exemple. Pour décrire un format PCM avec plus de deux canaux, WAVEFORMATEXTENSIBLE nécessite un masque de canal pour spécifier la configuration de l’orateur (c’est-à-dire le mappage des canaux aux positions de l’orateur physique). Pour décrire un format PCM pour lequel le nombre de bits valides par échantillon est inférieur à la taille de conteneur de l’exemple (par exemple, un exemple de 20 bits stocké dans un conteneur de trois octets) nécessite WAVEFORMATEXTENSIBLE, qui spécifie à la fois le nombre de bits d’exemple valides et la taille de l’exemple de conteneur.

WAVEFORMATEX peut décrire les formats non PCM pour lesquels des balises de format 16 bits sont définies dans le fichier d’en-tête Mmreg.h (par exemple, WAVE_FORMAT_MPEG). Le membre wFormatTag de WAVEFORMATEX contient la balise de format. Spécifiez un format non PCM pour lequel une balise de format n’est pas définie dans Mmreg.h par une structure WAVEFORMATEXTENSIBLE, qui contient un GUID qui identifie le format. Si nécessaire, un fournisseur de matériel peut générer indépendamment une valeur GUID pour identifier un nouveau format. L’inscription du GUID auprès de Microsoft n’est pas nécessaire.

Pour plus d’informations sur les différences entre WAVEFORMATEX et WAVEFORMATEXTENSIBLE, consultez Extensible Wave-Format Descriptors.

Le membre wFormatTag est défini sur l’une des balises de format d’onde définies dans Mmreg.h. Les balises pour certains des formats non-propriétaires les plus courants sont répertoriées dans le tableau suivant.

Valeur wFormatTag Signification
WAVE_FORMAT_PCM Données PCM (pulse-code modulées) au format entier.
WAVE_FORMAT_IEEE_FLOAT Données PCM au format IEEE à virgule flottante.
WAVE_FORMAT_DRM Format encodé en DRM (pour le contenu audio numérique protégé par Microsoft Digital Rights Management).
WAVE_FORMAT_EXTENSIBLE Structure WAVEFORMATEX extensible (voir WAVEFORMATEXTENSIBLE).
WAVE_FORMAT_ALAW Format encodé en loi.
WAVE_FORMAT_MULAW Format encodé en mu-law.
WAVE_FORMAT_ADPCM Données ADPCM (adaptive differential pulse-code modulé).
WAVE_FORMAT_MPEG Format de données MPEG-1 (le flux est conforme à la spécification audio ISO 11172-3).
WAVE_FORMAT_DOLBY_AC3_SPDIF AC-3 (alias Dolby Digital) sur S/PDIF.
WAVE_FORMAT_WMASPDIF Windows Media Audio (WMA) Pro sur S/PDIF.
 

Pour obtenir la liste complète des formats WAVE_FORMAT_Xxx , consultez Mmreg.h.

WAVEFORMATEX est presque identique à la structure PCMWAVEFORMAT, qui est une structure obsolète utilisée pour spécifier des formats PCM. La seule différence est que WAVEFORMATEX contient un membre cbSize et que PCMWAVEFORMAT ne le fait pas. Par convention, cbSize doit être ignoré lorsque wFormatTag = WAVE_FORMAT_PCM (car cbSize est implicitement égal à zéro). Cette convention permet au logiciel pilote de traiter les structures WAVEFORMATEX et PCMWAVEFORMAT de manière identique dans le cas d’un format PCM. Pour plus d’informations sur PCMWAVEFORMAT, consultez la documentation Microsoft Windows SDK.

Si wFormatTag = WAVE_FORMAT_PCM ou wFormatTag = WAVE_FORMAT_IEEE_FLOAT, définissez cbSize sur zéro. Pour toutes les autres valeurs de wFormatTag, cbSize spécifie le nombre d’octets de données de format supplémentaires qui sont ajoutés à la structure WAVEFORMATEX.

Si wFormatTag = WAVE_FORMAT_EXTENSIBLE, définissez cbSize sur sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) plus la taille des données spécifiques au format ajoutées à la structure WAVEFORMATEXTENSIBLE.

Spécifications

   
En-tête mmreg.h (include Mmsystem.h, Mmreg.h, Mmsystem.h)

Voir aussi

WAVEFORMATEXTENSIBLE