Structure WAVEFORMATEXTENSIBLE (ksmedia.h)

La structure WAVEFORMATEXTENSIBLE spécifie le format d’un flux d’ondes audio.

Syntaxe

typedef struct {
  WAVEFORMATEX Format;
  union {
    WORD wValidBitsPerSample;
    WORD wSamplesPerBlock;
    WORD wReserved;
  } Samples;
  DWORD        dwChannelMask;
  GUID         SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;

Membres

Format

Spécifie le format de données d’onde du flux. Ce membre est une structure de type WAVEFORMATEX. Le membre wFormat de WAVEFORMATEX doit être défini sur WAVE_FORMAT_EXTENSIBLE. Le membre wBitsPerSample de WAVEFORMATEX est défini sans ambiguïté comme la taille du conteneur pour chaque exemple. Les exemples de conteneurs sont toujours alignés sur les octets, et wBitsPerSample doit être un multiple de huit.

Samples

Samples.wValidBitsPerSample

Spécifie la précision de l’exemple en bits. La valeur de ce membre doit être inférieure ou égale à la taille de conteneur spécifiée dans le Format. membre wBitsPerSample . Pour plus d'informations, consultez la section Notes qui suit.

Samples.wSamplesPerBlock

Spécifie le nombre d’exemples contenus dans un bloc compressé. Cette valeur est utile pour estimer les exigences de mémoire tampon pour les formats compressés qui ont un nombre fixe d’exemples dans chaque bloc. Définissez ce membre sur zéro si chaque bloc de données audio compressées contient un nombre variable d’exemples. Dans ce cas, les informations d’estimation de la mémoire tampon et de position tampon doivent être obtenues d’autres manières.

Samples.wReserved

Réservé à une utilisation interne par le système d’exploitation. Initialisez à zéro.

dwChannelMask

Spécifie l’affectation de canaux dans le flux multicanal aux positions d’orateur. L’encodage est le même que celui utilisé pour le membre ActiveSpeakerPositions de la structure KSAUDIO_CHANNEL_CONFIG . Pour plus d’informations, consultez la section Remarques.

SubFormat

Spécifie le sous-format. Pour plus d’informations, consultez la section Remarques.

Remarques

WAVEFORMATEXTENSIBLE est une forme étendue de la structure WAVEFORMATEX . WAVEFORMATEX ne peut décrire sans ambiguïté qu’un sous-ensemble des formats qui peuvent être décrits par WAVEFORMATEXTENSIBLE. WAVEFORMATEXTENSIBLE n’est pas soumis aux limitations de WAVEFORMATEX, qui ne peut pas spécifier sans ambiguïté des formats avec plus de deux canaux ou pour lesquels le nombre de bits valides par exemple n’est pas égal à la taille du conteneur de l’exemple. Pour plus d’informations, consultez Formats de données audio et plages de données.

Souvent, le membre wValidBitsPerSample , qui spécifie la précision de l’exemple, contient la même valeur que format.membre wBitsPerSample , qui spécifie la taille de l’exemple de conteneur. Toutefois, ces valeurs peuvent être différentes. Par exemple, si les données d’onde proviennent d’un convertisseur A/D 20 bits, wValidBitsPerSample doit avoir la valeur 20, mais le format. wBitsPerSample peut être 24 ou 32. Si wValidBitsPerSample est inférieur à Format. wBitsPerSample, les bits valides (les données PCM réelles) sont alignés à gauche dans le conteneur. Les bits inutilisés dans la partie la moins significative du conteneur doivent être définis sur zéro.

Les exemples de conteneurs commencent et se terminent sur les limites d’octets, ainsi que sur la valeur Format. wBitsPerSample doit toujours être un multiple de huit. En outre, la valeur de wValidBitsPerSample ne doit jamais dépasser celle de Format. wBitsPerSample. Les pilotes doivent rejeter les formats d’ondes qui enfreignent ces règles.

Le membre dwChannelMask de la structure WAVEFORMATEXTENSIBLE contient un masque indiquant les canaux présents dans le flux multicanal. Le bit le moins significatif représente l’orateur avant-gauche, le bit suivant correspond à l’orateur avant-droit, et ainsi de suite. Les bits d’indicateur suivants sont définis dans le fichier d’en-tête Ksmedia.h.

Position de l’orateur Bit d’indicateur
SPEAKER_FRONT_LEFT 0x1
SPEAKER_FRONT_RIGHT 0x2
SPEAKER_FRONT_CENTER 0x4
SPEAKER_LOW_FREQUENCY 0x8
SPEAKER_BACK_LEFT 0x10
SPEAKER_BACK_RIGHT 0x20
SPEAKER_FRONT_LEFT_OF_CENTER 0x40
SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
SPEAKER_BACK_CENTER 0x100
SPEAKER_SIDE_LEFT 0x200
SPEAKER_SIDE_RIGHT 0x400
SPEAKER_TOP_CENTER 0x800
SPEAKER_TOP_FRONT_LEFT 0x1000
SPEAKER_TOP_FRONT_CENTER 0x2000
SPEAKER_TOP_FRONT_RIGHT 0x4000
SPEAKER_TOP_BACK_LEFT 0x8000
SPEAKER_TOP_BACK_CENTER 0x10000
SPEAKER_TOP_BACK_RIGHT 0x20000

Les canaux spécifiés dans dwChannelMask doivent être présents dans l’ordre indiqué dans le tableau précédent, en commençant en haut.

Par exemple, si seuls l’avant-gauche et l’avant-centre sont spécifiés, l’avant-gauche et l’avant-centre doivent se trouver dans les canaux 0 et 1, respectivement, du flux entrelacé.

Dans un deuxième exemple, si nChannels (dans le membre Format ; voir WAVEFORMATEX) a la valeur 4 et que dwChannelMask a la valeur 0x00000033, les canaux audio sont destinés à la lecture vers les haut-parleurs front-gauche, front-droit, arrière-gauche et arrière-droit. Les données de canal doivent être entrelacées dans cet ordre dans chaque bloc.

Les emplacements de canal au-delà des emplacements prédéfinis sont considérés comme réservés.

Vous pouvez également spécifier le masque de canal comme l’une des constantes suivantes, qui sont définies dans Ksmedia.h et sont des combinaisons ORed au niveau du bit des indicateurs précédents qui représentent des configurations d’orateur standard :

KSAUDIO_SPEAKER_MONO

KSAUDIO_SPEAKER_STEREO

KSAUDIO_SPEAKER_QUAD

KSAUDIO_SPEAKER_SURROUND

KSAUDIO_SPEAKER_5POINT1

KSAUDIO_SPEAKER_7POINT1

KSAUDIO_SPEAKER_DIRECTOUT

Un périphérique matériel peut être défini sur l’une de ces configurations d’orateur par une KSPROPERTY_AUDIO_CHANNEL_CONFIG demande set-property. Pour plus d’informations sur la définition des configurations d’orateur, consultez KSAUDIO_CHANNEL_CONFIG.

En règle générale, le nombre dans nChannels est égal au nombre de bits définis dans dwChannelMask, mais ce n’est pas nécessairement le cas. Si nChannels est inférieur au nombre de bits défini dans dwChannelMask, les bits supplémentaires (les plus significatifs) dans dwChannelMask sont ignorés. Si nChannels dépasse le nombre de bits défini dans dwChannelMask, les canaux qui n’ont pas de bits de masque correspondants ne sont affectés à aucune position d’orateur physique. Dans toute configuration de haut-parleur autre que KSAUDIO_SPEAKER_DIRECTOUT, un récepteur audio comme KMixer (voir KMixer System Driver) ignore simplement ces canaux excédentaires et mélange uniquement les canaux qui ont des bits de masque correspondants.

KSAUDIO_SPEAKER_DIRECTOUT représente une configuration sans haut-parleur et est défini dans Ksmedia.h comme zéro. Dans cette configuration, le périphérique audio restitue le premier canal sur le premier port de l’appareil, le deuxième canal vers le deuxième port de l’appareil, et ainsi de suite. Cela permet à une application de création audio de générer des données multicanal directement et sans modification sur un appareil tel qu’un mixeur numérique ou un périphérique de stockage audio numérique (disque dur ou ADAT). Par exemple, les canaux 0 à 30 peuvent contenir, respectivement, batterie, guitare, basse, voix, etc. Pour ce type de données audio brutes, les positions de l’orateur sont vides de sens, et l’attribution de positions d’orateur aux flux d’entrée ou de sortie peut entraîner une intervention inappropriée d’un composant tel que KMixer en effectuant une conversion de format indésirable. Si un appareil ne peut pas traiter les flux audio bruts, il doit rejeter une demande de modification de la configuration de son haut-parleur en KSAUDIO_SPEAKER_DIRECTOUT. Pour plus d’informations, consultez Configuration de l’orateur DSSPEAKER_DIRECTOUT.

Pour plus d’informations sur les configurations multicanal, consultez le livre blanc intitulé Multiple Channel Audio Data and WAVE Files sur le site web de la technologie audio .

Le membre SubFormat contient un GUID qui spécifie le format de données général d’un flux d’ondes. Par exemple, ce GUID peut spécifier que le flux contient des données PCM entières. Les autres membres fournissent des informations supplémentaires telles que la taille de l’exemple et le nombre de canaux. La signification du GUID SubFormat est similaire à celle de la balise de format 16 bits dans le membre wFormatTag de la structure WAVEFORMATEX.

Avant l’introduction de WAVEFORMATEXTENSIBLE dans Windows 98 Deuxième Édition, WAVEFORMATEX était la structure préférée pour spécifier les formats d’ondes. À ce moment-là, les fournisseurs devaient inscrire chaque nouveau format de vague auprès de Microsoft afin qu’une balise de format officiel puisse être affectée au format. Une liste de balises de format inscrites s’affiche dans le fichier d’en-tête public Mmreg.h.

Avec WAVEFORMATEXTENSIBLE, l’inscription des formats n’est plus nécessaire. Les fournisseurs peuvent attribuer indépendamment des GUID de sous-format à leurs nouveaux formats en fonction des besoins. Toutefois, Microsoft répertorie certains des GUID de sous-format les plus populaires dans le fichier d’en-tête public Ksmedia.h. Avant de définir un nouveau GUID de sous-format, les fournisseurs doivent case activée la liste des constantes KSDATAFORMAT_SUBTYPE_Xxx dans Ksmedia.h pour voir si un GUID approprié a déjà été défini pour un format particulier.

À des fins de compatibilité descendante, tout format d’onde qui peut être spécifié par une structure WAVEFORMATEX autonome peut également être défini par une structure WAVEFORMATEXTENSIBLE. Ainsi, chaque balise de format dans Mmreg.h a un GUID de sous-format correspondant. Le tableau suivant présente certaines balises de format typiques et leurs GUID de sous-format correspondants.

Balise de format GUID de sous-format
WAVE_FORMAT_PCM KSDATAFORMAT_SUBTYPE_PCM
WAVE_FORMAT_IEEE_FLOAT KSDATAFORMAT_SUBTYPE_IEEE_FLOAT
WAVE_FORMAT_DRM KSDATAFORMAT_SUBTYPE_DRM
WAVE_FORMAT_ALAW KSDATAFORMAT_SUBTYPE_ALAW
WAVE_FORMAT_MULAW KSDATAFORMAT_SUBTYPE_MULAW
WAVE_FORMAT_ADPCM KSDATAFORMAT_SUBTYPE_ADPCM

Pour plus d’informations, consultez Conversion entre des balises de format et des GUID de sous-format.

Étant donné que WAVEFORMATEXTENSIBLE est une version étendue de WAVEFORMATEX, il peut décrire des formats supplémentaires qui ne peuvent pas être décrits par WAVEFORMATEX seul. Les fournisseurs sont libres de définir leurs propres GUID de sous-format pour identifier les formats propriétaires pour lesquels il n’existe aucune étiquette de format vague.

Configuration requise

Condition requise Valeur
En-tête ksmedia.h (inclure Mmreg.h, Ksmedia.h, Mmreg.h)

Voir aussi

KSAUDIO_CHANNEL_CONFIG

WAVEFORMATEX