Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La figure suivante montre le descripteur du format des données pour un flux audio WAV.
Comme indiqué dans la figure, la quantité d’informations de format supplémentaires qui suivent la structure KSDATAFORMAT varie en fonction du format de données.
Les systèmes audio utilisent ce type de descripteur de format de plusieurs façons :
Un descripteur de format comme celui indiqué dans la figure précédente est passé en tant que paramètre d’appel à la méthode NewStream d’un pilote miniport (par exemple, voir IMiniportWaveCyclique ::NewStream).
Le paramètre ResultantFormat de la méthode IMiniport ::D ataRangeIntersection pointe vers une mémoire tampon dans laquelle la méthode écrit un descripteur de format comme celui indiqué dans la figure précédente.
La requête get-property KSPROPERTY_PIN_DATAINTERSECTION récupère un descripteur de format comme celui indiqué dans la figure précédente.
La KSPROPERTY_PIN_PROPOSEDATAFORMAT demande set-property accepte un descripteur de format comme celui indiqué dans la figure précédente.
Un format similaire est utilisé pour le paramètre d’appel Connect de la fonction KsCreatePin. Ce paramètre pointe vers la structure KSPIN_CONNECT au début d’une mémoire tampon qui contient également un descripteur de format. Le descripteur de format, qui suit immédiatement la structure KSPIN_CONNECT, commence par une structure KSDATAFORMAT comme celle illustrée dans la figure précédente.
Les informations de format qui suivent la structure KSDATAFORMAT doivent être une structure WAVEFORMATEXTENSIBLE . WAVEFORMATEXTENSIBLE est une version étendue de WAVEFORMATEX qui peut décrire une gamme plus large de formats que WAVEFORMATEX.
WAVEFORMAT est obsolète et n’est pas pris en charge par le sous-système audio WDM dans n’importe quelle version de Microsoft Windows. La structure PCMWAVEFORMAT est une version étendue de WAVEFORMAT qui est également obsolète.
Les quatre structures de format wave – WAVEFORMAT, PCMWAVEFORMAT, WAVEFORMATEX et WAVEFORMATEXTENSIBLE – commencent tous par les cinq mêmes membres, à commencer par wFormatTag. La figure précédente montre ces quatre structures superposées les unes aux autres pour mettre en évidence les parties des structures identiques.
WAVEFORMATEXTENSIBLE étend WAVEFORMATEX en ajoutant trois membres, à partir de Samples.wValidBitsPerSample. (Exemples est une union dont d’autres membres, wValidSamplesPerBlock, est utilisé au lieu de wValidBitsPerSample pour certains formats compressés.) Le membre wFormatTag , qui suit immédiatement la fin de la structure KSDATAFORMAT dans la mémoire tampon, spécifie le type d’informations de format qui suit KSDATAFORMAT.
Contrairement à WAVEFORMATEX, WAVEFORMATEXTENSIBLE peut effectuer les opérations suivantes :
Spécifiez le nombre de bits par échantillon séparément de la taille du conteneur d’exemples. Par exemple, un échantillon de 20 bits peut être justifié à gauche dans un conteneur de trois octets. WAVEFORMATEX, qui ne parvient pas à distinguer le nombre de bits de données par échantillon de la taille de conteneur de l’exemple, ne peut pas décrire un tel format sans ambiguïté.
Attribuez des emplacements d’orateur spécifiques aux canaux audio dans des flux multicanaux. WAVEFORMATEX ne dispose pas de cette fonctionnalité et peut prendre en charge correctement uniquement les flux stéréo mono et (à deux canaux).
Utilisation héritée de WAVEFORMATEX
Tout format décrit par WAVEFORMATEX peut également être décrit par WAVEFORMATEXTENSIBLE. Pour plus d’informations sur la conversion d’une structure WAVEFORMATEX en WAVEFORMATEXTENSIBLE, consultez Converting Between Format Tags and Subformat GUIDs.
WAVEFORMATEX est suffisant pour décrire les formats avec des tailles d’échantillon de 8 ou 16 bits, mais WAVEFORMATEXTENSIBLE est nécessaire pour décrire correctement les formats avec une précision d’échantillon supérieure à 16 bits. Voici deux exemples :
Un flux avec un exemple de précision de 24 bits peut utiliser une taille de conteneur 32 bits pour un traitement efficace, mais peut être converti pour utiliser un conteneur 24 bits pour améliorer l’efficacité du stockage sans perte de données.
Lors du traitement d’un flux avec des données d'échantillons 24 bits, un appareil de rendu qui ne fournit que 20 bits de précision peut utiliser le tramage pour améliorer la fidélité de son signal de sortie. Toutefois, le déplacement nécessite un temps de traitement supplémentaire et, si le flux d’origine est exact à seulement 20 bits, le traitement supplémentaire n’est pas nécessaire.
Dans ces deux exemples, la préservation de la qualité du signal tout en faisant le bon compromis entre le traitement et l’efficacité du stockage n’est possible que si l’échantillon de précision et la taille du conteneur sont connus.
Si un format simple peut être décrit sans ambiguïté par une structure WAVEFORMATEX ou WAVEFORMATEXTENSIBLE, un pilote audio a la possibilité de sélectionner l’une ou l’autre structure pour décrire le format. Toutefois, les pilotes audio ont généralement utilisé WAVEFORMATEX pour spécifier des formats PCM stéréo mono et (à deux canaux) avec des exemples 8 bits ou 16 bits, et certaines applications plus anciennes peuvent s’attendre à ce que tous les pilotes audio utilisent WAVEFORMATEX pour spécifier ces formats.
Si un pilote prend en charge un format audio qui peut être spécifié sans ambiguïté en tant que structure WAVEFORMATEX ou WAVEFORMATEXTENSIBLE, le pilote doit reconnaître le format, quelle que soit la structure utilisée par une application cliente ou un composant pour spécifier la structure. Par exemple, si un périphérique audio prend en charge un format PCM stéréo de 44,1 kHz, 16 bits, le gestionnaire de propriétés KSPROPERTY_PIN_PROPOSEDATAFORMAT du pilote miniport et son implémentation de la méthode NewStream doivent accepter ce format, que le format soit spécifié en tant que structure WAVEFORMATEX ou WAVEFORMATEXTENSIBLE.
Pour simplifier le traitement des données de format, les pilotes utilisent généralement des structures WAVEFORMATEXTENSIBLE pour représenter en interne des formats. Cette approche peut nécessiter la conversion d’une structure WAVEFORMATEX d’entrée en représentation WAVEFORMATEXTENSIBLE interne ou la conversion d’une représentation WAVEFORMATEXTENSIBLE interne en structure WAVEFORMATEX de sortie.
Dans WAVEFORMATEXTENSIBLE, dwBitsPerSample est la taille du conteneur et wValidBitsPerSample est le nombre de bits de données valides par échantillon. Les conteneurs sont toujours alignés sur des octets en mémoire, et la taille du conteneur doit être spécifiée sous la forme d’un multiple de huit bits.