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) |