Formats d’appareil

Pour une application audio, l’un des avantages de l’utilisation d’une API audio de niveau supérieur, comme DirectSound ou les fonctions multimédias windows waveOutXxx , est que l’API convertit automatiquement entre les formats de flux utilisés par l’application et les formats utilisés par le périphérique audio. En revanche, les API audio de base sont plus restrictives, car elles exigent que les flux d’application 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 tenues d’effectuer tout ou partie des 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 effectuer une conversion 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 que le matériel audio prend explicitement en charge. En mode exclusif, l’application et l’appareil échangent des données audio directement, sans intervention du moteur audio.

De nombreux périphériques audio prennent en charge les formats de flux PCM et non PCM. Toutefois, le moteur audio peut mélanger 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 débits de données fixes sont pris en charge en mode exclusif. Un exemple de format non PCM à débit 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 en fait une structure WAVEFORMATEX qui a été étendue pour décrire une plus grande gamme de formats. Tout format pouvant ê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. En soi, 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 windows DDK.

À compter de Windows 7, WAVEFORMATEXTENSIBLE a été étendu pour représenter les formats d’appareil permettant de transmettre de l’audio encodé sur une interface compatible IEC 61937. Pour plus d’informations sur la nouvelle structure, voir Representing Formats for IEC 61937 Transmissions.

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 WAVEFORMATEX autonome, 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 ou 2 canaux si le format est spécifié par une structure WAVEFORMATEX autonome, mais rejettent 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 appel 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 Initialize 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 combinaison 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 Initialize, l’application peut appeler IsFormatSupported pour vérifier que Initialize accepte le format.

Le format de mixage utilisé par le moteur audio pour son traitement interne des flux en mode partagé est étroitement lié au format de flux utilisé par l’appareil de point de terminaison audio en mode partagé, mais n’est pas nécessairement identique. Via le 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é. La procédure comporte trois étapes :

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

    mmsys.cplde 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, qui se trouve sur le côté droit de la barre des tâches, puis en sélectionnant Périphériques de lecture ou Périphériques d’enregistrement.

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

  3. Lorsque la fenêtre 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 périphérique 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 utilise 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 la même fréquence 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 sortie 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 comme 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’elle trouve un format pris en charge par l’appareil.

Périphériques de point de terminaison audio