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.
Dans Windows Vista et les versions ultérieures de Windows, audioEndpointBuilder est un service système qui énumère, initialise et active les points de terminaison audio dans un système. Cette rubrique fournit une vue d’ensemble de l’algorithme utilisé par le service AudioEndpointBuilder.
Le service AudioEndpointBuilder utilise un algorithme pour découvrir et énumérer les points de terminaison. L’algorithme a été conçu pour simplifier l’accès système aux appareils de capture multiplexés (MUXed) et pour vous aider à travailler avec des topologies qui impliquent plusieurs broches hôtes et plusieurs broches de pont, ou les deux.
Dans Windows XP, le modèle audio a utilisé le terme périphérique audio pour faire référence à un appareil conceptuel dans l’arborescence Plug-and-Play (PnP). Dans Windows Vista et les versions ultérieures de Windows, le concept d’un appareil audio a été repensé pour mieux représenter l’appareil avec lequel l’utilisateur interagit physiquement.
Avec deux nouvelles API dans Windows Vista, l’API MMDevice et WASAPI, vous pouvez accéder à ces nouveaux appareils audio et les manipuler. L’API MMDevice fait référence aux nouveaux appareils audio en tant que points de terminaison.
Le service AudioEndpointBuilder surveille la classe KSCATEGORY_AUDIO pour les arrivées et suppressions de l’interface d’appareil. Lorsqu’un pilote de périphérique audio inscrit une nouvelle instance de la classe d’interface d’appareil KSCATEGORY_AUDIO, le service AudioEndpointBuilder détecte la notification de l’interface de l’appareil et utilise un algorithme pour examiner la topologie des périphériques audio dans le système et prendre les mesures appropriées.
La liste suivante résume le fonctionnement de l’algorithme utilisé par AudioEndpointBuilder :
Recherche les broches de pont non connectées.
Crée un point de terminaison pour toutes les broches de pont non connectées. Par exemple, lorsque l'AudioEndpointBuilder trouve une broche de pont non connectée avec un GUID de catégorie de broche de KSNODETYPE_SPEAKER, il crée un point de terminaison pour haut-parleur pour cette broche de pont. Pour plus d’informations sur KSNODETYPE_SPEAKER et d’autres G.U.I.D de catégorie de broche, consultez Ksmedia.h dans WinDDK\<build number>\inc\api.
Définit les propriétés par défaut du point de terminaison. Par exemple, AudioEndpointBuilder définit le nom, l’icône et le facteur de forme.
Détermine s’il existe un chemin d’accès du point de terminaison à une broche hôte qui prend en charge la modulation de code d’impulsion (PCM), le codec audio-3 (AC3) ou la vidéo Windows Media (WMV). Un host pin est une structure KSPIN avec son membre Communication défini sur KSPIN_COMMUNICATION_SINK ou KSPIN_COMMUNICATION_BOTH. Pour plus d’informations sur la structure KSPIN, consultez KSPIN.
Remplit le endpoint PropertyStore avec des informations de propriété à partir des clés de Registre de l’interface de l’appareil audio.
Définit l’état du point de terminaison. L’état du point de terminaison peut être l’une des trois valeurs suivantes :
Actif. Cela indique qu’un chemin existe comme décrit à l’étape 4.
Débranché. Si l’appareil audio prend en charge la détection de prise, cet état indique qu'un chemin est disponible pour le point d'extrémité et que la prise est déconnectée du connecteur physique sur l'adaptateur audio.
Pas présent. Cet état indique qu’un chemin d’accès n’a pas été trouvé à l’étape 4 et que la détection de connecteur n’est pas prise en charge par ce point de terminaison.
Définit ce point de terminaison comme point de terminaison par défaut, s’il s’agit de ce qui est spécifié dans le fichier INF associé.
Une fois les points de terminaison énumérés, les clients du système audio peuvent les manipuler directement à l’aide des nouvelles API Windows Vista (comme indiqué précédemment) ou indirectement à l’aide des API plus familières telles que Wave, DirectShow ou DirectSound. De nouvelles méthodes d’API ont été fournies afin que les clients audio puissent commencer par l’ID MMDevice d’un point de terminaison et accéder à l’ID Wave ou DirectSound pour le même point de terminaison.
Lorsque vous utilisez des points de terminaison, vous pouvez tirer parti des éléments suivants :
Le même ID global unique (GUID) est disponible, quelle que soit la fréquence à laquelle vous redémarrez votre ordinateur. Ce GUID persistant est plus fiable que l’enregistrement d’un ID waveOut ou d’un nom convivial pour le point de terminaison.
Le même PropertyStore est disponible, quelle que soit la fréquence à laquelle vous redémarrez votre ordinateur. Les métadonnées relatives à l’appareil audio sont enregistrées dans le propertyStore du point de terminaison.
Les broches multiplexées (MUX) et démultiplexées (DEMUX) sont gérées automatiquement et énumérées par le service AudioEndpointBuilder.
Si vous développez votre propre pilote de périphérique audio et fichier INF pour travailler avec votre périphérique audio et développer une application audio, ou les deux, il est préférable de connaître les problèmes et les meilleures pratiques suivants. Lorsque vous développez des pilotes et des applications avec ces recommandations à l’esprit, vous produisez des pilotes, des fichiers INF et des clients audio qui fonctionnent plus efficacement avec AudioEndpointBuilder.
Convention d’affectation de noms. La convention d’affectation de noms utilisée pour les points de terminaison est basée sur les noms conviviaux des broches de pont. Toutefois, dans le cas des points de terminaison des haut-parleurs, le nom a été codé en dur sur « Haut-parleurs » et ne peut être modifié ni par votre pilote ni par une application tierce.
Topologies non optimales. Certaines topologies sont considérées comme non optimales en raison de l’algorithme utilisé par AudioEndpointBuilder pour énumérer les points de terminaison. Par exemple, lorsque vous créez l’une de ces topologies non optimales, vous créez des broches d’hôte qui ont des points de terminaison masqués et qui ne peuvent pas être vues par audioEndpointBuilder ou des séparateurs (points de terminaison fractionnés) que l’AudioEndpointBuilder ne peut pas lier à leurs broches hôtes associées.
Points de terminaison masqués
Dans le diagramme suivant, le filtre KS est montré avec deux broches de l'hôte connectées à une broche de pont unique (Haut-parleur).
Lorsque AudioEndpointBuilder découvre cette broche de pont, il trace un chemin d’accès à l’une des broches hôtes, définit les valeurs par défaut pour la broche de pont, crée et active un point de terminaison du haut-parleur et continue à découvrir d’autres broches de pont. Ainsi, l'autre broche hôte reste masquée pour l'AudioEndpointBuilder.
Dans le diagramme précédent, la topologie problématique a été repensée afin que l’AudioEndpointBuilder puisse découvrir les deux broches hôtes (PCM et AC-3/PCM), car elle peut maintenant voir deux broches de pont (Haut-parleur et SPDIF).
Répartiteurs
Un autre type de topologie non optimale est créé lorsqu’une broche hôte se connecte à plusieurs broches de pont. Le diagramme suivant montre une topologie dans laquelle une broche hôte PCM se connecte à une broche de pont du haut-parleur et à une broche de pont SPDIF.
Dans ce cas, AudioEndpointBuilder découvre une broche de pont et trace un chemin d’accès à la broche hôte PCM, définit les valeurs par défaut, puis crée et active un point de terminaison de l’orateur. Lorsque AudioEndpointBuilder découvre le pin de pont suivant, il trace un chemin d’accès à la même broche hôte PCM, définit les valeurs par défaut, puis crée et active un point de terminaison S/PDIF. Toutefois, bien que les deux points de terminaison aient été initialisés et activés, la diffusion en continu vers l’un d’eux rend impossible le flux vers l’autre en même temps ; en d’autres termes, ils sont des points de terminaison mutuellement exclusifs.
Le diagramme suivant montre une nouvelle conception de cette topologie dans laquelle des connexions distinctes existent. Cette conception permet à l'AudioEndpointBuilder de tracer un chemin vers la broche hôte PCM pour chacune des deux broches intermédiaires.
Format du point de terminaison. Lorsque le moteur audio s’exécute en mode partagé, le format du point de terminaison part du principe qu’un paramètre spécifique est dirigé par le fichier INF au moment de l’installation. Par exemple, le pilote audio d’un périphérique audio utilise son fichier INF associé pour définir le point de terminaison par défaut sur un format PCM stéréo de 44,1 kHz, 16 bits. Après l’installation, vous devez utiliser le Panneau de configuration ou une application tierce pour modifier le format de point de terminaison.
Appareil par défaut. Le point de terminaison défini comme appareil par défaut est sélectionné au moment de l’installation à l’aide d’informations dans le fichier INF. Une fois l’installation terminée, vous devez utiliser le Panneau de configuration ou une application tierce pour sélectionner un autre point de terminaison comme point de terminaison par défaut.
Note Si votre fichier INF ne sélectionne pas de point de terminaison à définir comme valeur par défaut pendant l’installation, une application cliente peut utiliser l’API MMDevice pour sélectionner un point de terminaison. L’API base sa sélection sur le classement du facteur de forme et indique si le point de terminaison est un rendu ou un point de terminaison de capture. Le tableau suivant montre l’ordre de sélection.
| Calcul du rang | Classement des captures |
|---|---|
| Haut-parleurs | Microphone |
| Ligne sortante | Entrée ligne |
| SPDIF | SPDIF |
Si vous utilisez l’API MMDevice pour sélectionner un point de terminaison par défaut et que les points de terminaison disponibles sont classés comme étant les mêmes, l’API MMDevice alphabetise les ID de point de terminaison pour déterminer quel point de terminaison sélectionner comme valeur par défaut. Par exemple, si une carte audio comporte à la fois des connecteurs de sortie ligne et d'entrée ligne, et que le fichier INF associé ne sélectionne pas l’une des valeurs par défaut au moment de l’installation, l’API MMDevice identifie l'ID de point de terminaison qui est le premier dans l'ordre alphabétique et définit ce connecteur comme la valeur par défaut. Cette sélection persiste après le redémarrage du système, car les ID de point de terminaison sont persistants. Toutefois, la sélection ne persiste pas si un point de terminaison de classement supérieur (par exemple, un deuxième adaptateur avec un connecteur de microphone) apparaît dans le système.