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)/8
la 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) |