Partager via


Formats d’appareil

Pour une application audio, l’utilisation d’une API audio de niveau supérieur, telle que DirectSound ou le multimédia Windows waveOutXxx fonctions, est que l’API convertit automatiquement les formats de flux utilisés par l’application et les formats utilisés par l’appareil audio. En revanche, les API audio principales sont plus restrictives, car elles nécessitent que les flux d’applications utilisent des formats identiques ou étroitement liés aux formats utilisés par l’appareil. Par conséquent, les applications qui utilisent les API audio principales pour lire ou enregistrer des flux audio peuvent être nécessaires pour effectuer certaines ou toutes les conversions entre les formats de flux.

Une application qui utilise WASAPI pour gérer les flux en mode partagé peut s’appuyer sur le moteur audio pour effectuer uniquement des conversions de format limitées. Le moteur audio peut convertir entre une taille d’exemple PCM standard utilisée par l’application et les exemples à virgule flottante que le moteur utilise pour son traitement interne. Toutefois, le format d’un flux d’application doit généralement avoir le même nombre de canaux et le même taux d’échantillonnage que le format de flux utilisé par l’appareil.

Si une application utilise un appareil en mode exclusif, l’application doit utiliser un format de flux pris en charge explicitement par le matériel audio. En mode exclusif, l’application et l’appareil échangent directement des données audio, sans intervention du moteur audio.

De nombreux appareils audio prennent en charge les formats de flux PCM et non PCM. Toutefois, le moteur audio peut combiner uniquement des flux PCM. Ainsi, seuls les flux en mode exclusif peuvent avoir des formats non PCM. En outre, seuls les formats non PCM avec des taux de données fixes sont pris en charge en mode exclusif. Un exemple de format non PCM à taux fixe est un flux audio Windows Media Audio Professional (WMA Pro) de 48 kHz qui passe par un lien d’interface numérique Sony/Philips (S/PDIF) sous forme numérique sans être décodé. Pour plus d’informations sur l’utilisation de flux WMA Pro sur S/PDIF, consultez Spécification de plages de données WMA Pro.

WASAPI utilise une structure WAVEFORMATEX ou WAVEFORMATEXTENSIBLE pour spécifier un format de flux. Une structure WAVEFORMATEXTENSIBLE est effectivement une structure WAVEFORMATEX qui a été étendue pour décrire une plus grande gamme de formats. Tout format qui peut être décrit par une structure WAVEFORMATEX autonome peut également être décrit par une structure WAVEFORMATEXTENSIBLE.

Le premier membre de la structure WAVEFORMATEXTENSIBLE est une structure WAVEFORMATEX. Le contenu d’une structure WAVEFORMATEX indique s’il s’agit d’une structure WAVEFORMATEX autonome ou d’une partie d’une structure WAVEFORMATEXTENSIBLE.

Une structure WAVEFORMATEX autonome peut décrire correctement un format avec un ou deux canaux et une taille d’échantillon qui est un multiple de 8 bits. Par lui-même, une structure WAVEFORMATEX ne peut pas spécifier le mappage des canaux aux positions de l’orateur. En outre, bien que WAVEFORMATEX spécifie la taille du conteneur pour chaque échantillon audio, il ne peut pas spécifier le nombre de bits de précision dans un échantillon (par exemple, 20 bits de précision dans un conteneur 24 bits). En revanche, la structure WAVEFORMATEXTENSIBLE peut spécifier à la fois le mappage des canaux aux haut-parleurs et le nombre de bits de précision dans chaque échantillon.

Pour plus d’informations sur WAVEFORMATEX et WAVEFORMATEXTENSIBLE, consultez la documentation du DDK Windows.

À compter de Windows 7, le WAVEFORMATEXTENSIBLE a été étendu pour représenter les formats d’appareil pour la transmission de l’audio codé sur une interface compatible IEC 61937. Pour plus d’informations sur la nouvelle structure, consultez Représentant des formats pour les transmissions IEC 61937.

Spécification du format de l’appareil

Les méthodes WASAPI suivantes utilisent les structures WAVEFORMATEX et WAVEFORMATEXTENSIBLE pour décrire les formats de flux :

La méthode GetMixFormat récupère le format de flux utilisé par le moteur audio pour son traitement interne des flux en mode partagé. La méthode utilise toujours une structure WAVEFORMATEXTENSIBLE, au lieu d’une structure autonome WAVEFORMATEX, pour spécifier le format.

La méthode IsFormatSupported indique si un appareil de point de terminaison audio prend en charge un format de flux particulier. L’appelant doit spécifier si le format de flux est destiné à être utilisé en mode partagé ou en mode exclusif. Pour les formats en mode partagé, la méthode interroge le moteur audio pour déterminer s’il prend en charge le format spécifié. Pour les formats en mode exclusif, la méthode interroge le pilote de périphérique. Certains pilotes de périphérique signalent qu’ils prennent en charge un format PCM à 1 canal ou à 2 canaux si le format est spécifié par une structure WAVEFORMATEX autonome, mais rejette le même format s’il est spécifié par une structure WAVEFORMATEXTENSIBLE. Pour obtenir des résultats fiables à partir de ces pilotes, les applications en mode exclusif doivent appeler IsFormatSupported deux fois pour chaque format PCM à 1 canal ou à 2 canaux. Un appel doit utiliser une structure WAVEFORMATEX autonome pour spécifier le format, et l’autre doit utiliser une structure WAVEFORMATEXTENSIBLE pour spécifier le même format.

Une fois qu’une application a utilisé GetMixFormat ou IsFormatSupported pour trouver un format approprié pour un flux en mode partagé ou en mode exclusif, l’application peut appeler la méthode Initialiser pour initialiser un flux avec ce format. Une application qui tente d’initialiser un flux en mode partagé avec un format qui n’est pas identique au format de mix obtenu à partir de la méthode GetMixFormat, mais qui a le même nombre de canaux et le même taux d’échantillonnage que le format de combinaison, est susceptible de réussir. Avant d’appeler Initialiser, l’application peut appeler IsFormatSupported pour vérifier que Initialiser acceptera le format.

Le format de mixage utilisé par le moteur audio pour son traitement interne des flux en mode partagé est étroitement lié, mais n’est pas nécessairement identique au format de flux utilisé par l’appareil de point de terminaison audio en mode partagé. Par le biais du panneau de configuration multimédia Windows, Mmsys.cpl, l’utilisateur peut sélectionner le format de flux qu’un appareil de point de terminaison audio utilisera lorsqu’il fonctionne en mode partagé. Les étapes sont les suivantes :

  1. Pour exécuter Mmsys.cpl, ouvrez une fenêtre d’invite de commandes et entrez la commande suivante :

    mmsys.cpl de contrôle

    Vous pouvez également exécuter Mmsys.cpl en cliquant avec le bouton droit sur l’icône du haut-parleur dans la zone de notification, située à droite de la barre des tâches, puis en sélectionnant Périphériques de lecture ou Appareils d’enregistrement.

  2. Une fois la fenêtre Mmsys.cpl ouverte, sélectionnez un appareil dans la liste des appareils de lecture ou la liste des appareils d’enregistrement, puis cliquez sur Propriétés.

  3. Lorsque la fenêtre des propriétés s’ouvre, cliquez sur avancé, puis sélectionnez un format dans la liste des formats disponibles dans la zone intitulée Format par défaut.

Par exemple, supposons que l’utilisateur sélectionne le format par défaut suivant dans la liste des formats disponibles pour un appareil de lecture :

2 canaux, 16 bits, 44100 Hz (qualité CD)

Il s’agit du format que l’appareil utilisera par la suite lorsqu’il fonctionne en mode partagé. Dans Windows Vista, le moteur audio utilisera une version légèrement modifiée de ce format pour son traitement interne des flux en mode partagé. Le moteur audio utilise un format avec le même nombre de canaux (deux) et le même taux d’échantillonnage (44100 Hz), mais il convertit les échantillons en nombres à virgule flottante avant de les traiter. Le moteur audio convertit les échantillons à virgule flottante dans la combinaison de sorties en entiers 16 bits avant de les lire via l’appareil.

Une application peut interroger la propriété PKEY_AudioEngine_DeviceFormat d’un appareil de point de terminaison audio pour obtenir le format en mode partagé que l’utilisateur a sélectionné pour l’appareil. Pour plus d’informations sur l’interrogation des propriétés d’un appareil, consultez Propriétés de l’appareil.

Certaines applications peuvent trouver le format spécifié par la propriété PKEY_AudioEngine_DeviceFormat d’un appareil pour être un format approprié pour ouvrir un flux en mode exclusif sur l’appareil. D’autres applications qui gèrent des flux en mode exclusif peuvent avoir des exigences supplémentaires qui imposent une négociation de format complexe avec l’appareil. En règle générale, l’une de ces applications construit une liste de formats appropriés, avec les formats préférés au début de la liste. L’application appelle ensuite de manière itérative IsFormatSupported avec chaque format successif dans la liste, en commençant au début de la liste, jusqu’à ce qu’il trouve un format pris en charge par l’appareil.

appareils de point de terminaison audio