Partager via


WAVEFORMATEXTENSIBLE, structure (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 wave-data du flux. Ce membre est une structure de type WAVEFORMATEX. Le wFormat membre de WAVEFORMATEX doit être défini sur WAVE_FORMAT_EXTENSIBLE. Le wBitsPerSample membre de WAVEFORMATEX est défini sans ambiguïté comme la taille du conteneur pour chaque échantillon. Les exemples de conteneurs sont toujours alignés sur des octets et wBitsPerSample doivent ê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 la Format.membre wBitsPerSample. Pour plus d’informations, consultez la section Remarques suivante.

Samples.wSamplesPerBlock

Spécifie le nombre d’échantillons 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’échantillons 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 des mémoires tampons et de position tampon doivent être obtenues de différentes façons.

Samples.wReserved

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

dwChannelMask

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

SubFormat

Spécifie la sous-forme. 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é les formats avec plus de deux canaux ou pour lesquels le nombre de bits valides par échantillon n’est pas égal à la taille de conteneur de l’exemple. Pour plus d’informations, consultez formats de données audio et plages de données.

Fréquemment, le membre wValidBitsPerSample, qui spécifie l’exemple de précision, contient la même valeur que le format.membre wBitsPerSample, qui spécifie l’exemple de taille 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 être 20, mais 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 importante du conteneur doivent être définis sur zéro.

Les exemples de conteneurs commencent et se terminent sur les limites d’octets et la valeur de 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’onde qui violent ces règles.

La structure WAVEFORMATEXTENSIBLE dwChannelMask membre contient un masque indiquant les canaux présents dans le flux multicanal. Le bit le moins significatif représente le haut-parleur avant gauche, le bit suivant correspond au haut-parleur 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 les front-left et front-center sont spécifiés, alors front-left et front-center doivent être dans les canaux 0 et 1, respectivement, du flux entrelacé.

Dans un deuxième exemple, si nChannels (dans le Format membre ; voir WAVEFORMATEX) est défini sur 4 et dwChannelMask est défini sur 0x00000033, les canaux audio sont destinés à la lecture sur les haut-parleurs front-gauche, arrière-gauche et back-right. 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 les configurations standard de l’orateur :

KSAUDIO_SPEAKER_MONO

KSAUDIO_SPEAKER_STEREO

KSAUDIO_SPEAKER_QUAD

KSAUDIO_SPEAKER_SURROUND

KSAUDIO_SPEAKER_5POINT1

KSAUDIO_SPEAKER_7POINT1

KSAUDIO_SPEAKER_DIRECTOUT

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

En règle générale, le nombre dans nChannels correspond 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éfinis dans dwChannelMask, les bits supplémentaires (les plus significatifs) dans dwChannelMask sont ignorés. Si nChannels dépasse le nombre de bits définis dans dwChannelMask, les canaux qui n’ont aucun bits de masque correspondant ne sont affectés à aucune position d’orateur physique. Dans toute configuration du haut-parleur autre que KSAUDIO_SPEAKER_DIRECTOUT, un récepteur audio tel que 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-parleurs et est définie dans Ksmedia.h comme zéro. Dans cette configuration, l’appareil audio restitue le premier canal sur le premier port de l’appareil, le deuxième canal sur 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 mélangeur 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, des batteries, de la guitare, de la basse, de la voix, et ainsi de suite. Pour ce type de données audio brutes, les positions du haut-parleur sont sans signification et l’affectation de positions de haut-parleur 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 parvient pas à traiter les flux audio bruts, il doit rejeter une demande de modification de sa configuration du haut-parleur en KSAUDIO_SPEAKER_DIRECTOUT. Pour plus d’informations, consultez DSSPEAKER_DIRECTOUT configuration de l’orateur.

Pour plus d’informations sur les configurations multicanal, consultez le livre blanc intitulé données audio multiples et fichiers WAVE sur le site web technologie audio.

Le sous-format membre 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’échantillon et le nombre de canaux. La signification du GUID SubFormat est similaire à celle de la balise de format 16 bits dans le membre wFormatTagde la structure WAVEFORMATEX.

Avant QUE WAVEFORMATEXTENSIBLE ait été introduit dans Windows 98 Second Edition, WAVEFORMATEX était la structure préférée pour spécifier des formats d’onde. À ce stade, les fournisseurs devaient inscrire chaque nouveau format vague auprès de Microsoft afin qu’une balise de format officielle puisse être affectée au format. Une liste de balises de format inscrites apparaît dans le fichier d’en-tête public Mmreg.h.

Avec WAVEFORMATEXTENSIBLE, l’inscription des formats n’est plus nécessaire. Les fournisseurs peuvent affecter indépendamment Sous-format GUID à leurs nouveaux formats en fonction des besoins. Toutefois, Microsoft répertorie certaines des GUID subformat les plus populaires dans le fichier d’en-tête public Ksmedia.h. Avant de définir un nouveau SubFormat GUID, les fournisseurs doivent vérifier 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.

Pour la 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 classiques et leurs SubFormat correspondantes GUID.

Balise 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 les balises de format et les GUID de sous-format.

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

Exigences

Exigence Valeur
d’en-tête ksmedia.h (include Mmreg.h, Ksmedia.h, Mmreg.h)

Voir aussi

KSAUDIO_CHANNEL_CONFIG

WAVEFORMATEX