Partager via


Algorithme Du générateur de points de terminaison audio

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 faciliter l’utilisation de topologies qui impliquent plusieurs broches hôtes et plusieurs broches de pont, ou les deux.

Dans Windows XP, le modèle audio utilisait 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 de périphérique 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 périphériques audio et les manipuler. L’API MMDevice fait référence aux nouveaux périphériques audio en tant que points de terminaison.

Le service AudioEndpointBuilder surveille la classe KSCATEGORY_AUDIO pour les arrivées et les suppressions d’interface d’appareil. Lorsqu’un pilote de périphérique audio inscrit une nouvelle instance de la classe d’interface de périphérique KSCATEGORY_AUDIO, le service AudioEndpointBuilder détecte la notification de l’interface de périphérique 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 :

  1. Recherche les broches de pont non connectées.

  2. Crée un point de terminaison pour toutes les broches de pont non connectées. Par exemple, quand 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 d’orateur pour cette broche de pont. Pour plus d’informations sur KSNODETYPE_SPEAKER et d’autres GUID de catégorie d’épingle, consultez Ksmedia.h dans WinDDK\<build number>\inc\api.

  3. 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.

  4. Détermine s’il existe un chemin d’accès entre le point de terminaison et 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). Une broche d’hôte est une structure KSPIN dont le membre Communication est défini sur KSPIN_COMMUNICATION_SINK ou KSPIN_COMMUNICATION_BOTH. Pour plus d’informations sur la structure KSPIN, consultez KSPIN.

  5. Remplit le propertyStore de point de terminaison avec des informations de propriété provenant des clés de Registre de l’interface de périphérique audio.

  6. 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 le périphérique audio prend en charge la détection de prise, cet état indique qu’il existe un chemin d’accès pour le point de terminaison et que la prise est débranchée du connecteur physique sur la carte audio.

    • Absent. Cet état indique qu’un chemin d’accès n’a pas été trouvé à l’étape 4 et que la détection de prise n’est pas prise en charge par ce point de terminaison.

  7. Définit ce point de terminaison comme point de terminaison par défaut, si c’est 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 avec 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 machine. 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 au périphérique 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 votre fichier INF pour travailler avec votre périphérique audio, et développez 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 de nommage 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 de l’orateur, le nom a été codé en dur en « Haut-parleurs » et ne peut pas être modifié par votre pilote ou 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 sous-optimales, vous créez des broches d’hôte qui ont des points de terminaison masqués et qui ne peuvent pas être visibles par audioEndpointBuilder ou des séparateurs (points de terminaison de fractionnement) 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 montre que deux broches hôtes sont connectées à une seule broche de pont (Haut-parleur).

      Diagramme montrant une topologie problématique avec une broche d’hôte AC-3 et un point de terminaison masqué sur le côté gauche, un seul filtre PCM et AC-3 qui partage.

      Quand AudioEndpointBuilder découvre cette broche de pont, il trace un chemin d’accès à une seule des broches hôtes, définit les valeurs par défaut de la broche de pont, crée et active un point de terminaison Speaker et continue à découvrir d’autres broches de pont. Ainsi, l’autre broche hôte reste masquée dans AudioEndpointBuilder.

      Diagramme illustrant la topologie recommandée avec des chemins d’accès traçables entre les broches d’hôte et les points de terminaison.

      Dans le diagramme précédent, la topologie problématique a été repensée afin que AudioEndpointBuilder puisse découvrir les deux broches hôtes (PCM et AC-3/PCM), car il peut désormais voir deux broches de pont (Speaker 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 Speaker et à une broche de pont SPDIF.

      Diagramme illustrant une topologie problématique avec deux points de terminaison connectés à une broche d’hôte et un seul PCM.

      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 Speaker. Quand AudioEndpointBuilder découvre la broche de pont suivante, 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 SPDIF. 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 la diffusion en continu vers l’autre en même temps ; en d’autres termes, il s’agit de points de terminaison qui s’excluent mutuellement.

      Le diagramme suivant montre une refonte de cette topologie dans laquelle des connexions distinctes existent. Cette conception permet à AudioEndpointBuilder de tracer un chemin d’accès à la broche hôte PCM pour chacune des deux broches de pont.

      Diagramme illustrant la topologie recommandée avec des chemins d’accès traçables entre les broches hôtes et les points de terminaison, avec deux PCM sur le côté gauche.

  • Format du point de terminaison. Lorsque le moteur audio s’exécute en mode partagé, le format du point de terminaison suppose un paramètre spécifique, comme indiqué 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 44,1 kHz, 16 bits. Après l’installation, vous devez utiliser Panneau de configuration ou une application tierce pour modifier le format du 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 des informations contenues dans le fichier INF. Une fois l’installation terminée, vous devez utiliser 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 point de terminaison 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 si le point de terminaison est un point de terminaison de rendu ou de capture. Le tableau suivant indique l’ordre de sélection.

Classement du rendu Capturer le classement
Haut-parleurs Microphone
Line-out Entrée de 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 de la même façon, l’API MMDevice classe par ordre alphabétique les ID de point de terminaison pour déterminer le point de terminaison à sélectionner comme point de terminaison par défaut. Par exemple, si une carte audio a à la fois des connecteurs line-out et line-in, et que le fichier INF associé ne sélectionne pas l’un ou l’autre comme connecteur par défaut au moment de l’installation, l’API MMDevice identifie les ID de point de terminaison qui sont en premier par ordre alphabétique et définit ce connecteur comme connecteur 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.