Audioendpunkt-Generator-Algorithmus

In Windows Vista und höheren Versionen von Windows ist AudioEndpointBuilder ein Systemdienst, der die Audioendpunkte in einem System aufzählt, initialisiert und aktiviert. Dieses Thema bietet eine Übersicht über den Algorithmus, der vom AudioEndpointBuilder-Dienst verwendet wird.

Der AudioEndpointBuilder-Dienst verwendet einen Algorithmus, um Endpunkte zu ermitteln und aufzulisten. Der Algorithmus wurde entwickelt, um den Systemzugriff auf multiplexed (MUXed)-Erfassungsgeräte zu vereinfachen und die Arbeit mit Topologien zu erleichtern, die mehrere Host-Pins und mehrere Bridge-Pins oder beides umfassen.

In Windows XP verwendet das Audiomodell den Begriff Audiogerät, um auf ein konzeptionelles Gerät in der PnP-Struktur (Plug & Play) zu verweisen. In Windows Vista und höheren Versionen von Windows wurde das Konzept eines Audiogeräts neu gestaltet, um das Gerät besser darzustellen, mit dem der Benutzer physisch interagiert.

Mit zwei neuen APIs in Windows Vista, mmDevice-API und WASAPI können Sie auf diese neuen Audiogeräte zugreifen und diese bearbeiten. Die MMDevice-API bezeichnet die neuen Audiogeräte als Endpunkte.

Der AudioEndpointBuilder-Dienst überwacht die KSCATEGORY_AUDIO-Klasse auf Geräteschnittstelleneinkünfte und -entfernungen. Wenn ein Audiogerätetreiber eine neue instance der KSCATEGORY_AUDIO Geräteschnittstellenklasse registriert, erkennt der AudioEndpointBuilder-Dienst die Geräteschnittstellenbenachrichtigung und verwendet einen Algorithmus, um die Topologie der Audiogeräte im System zu untersuchen und geeignete Maßnahmen zu ergreifen.

Die folgende Liste fasst die Funktionsweise des von AudioEndpointBuilder verwendeten Algorithmus zusammen:

  1. Sucht nach nicht verbundenen Bridge-Pins.

  2. Erstellt einen Endpunkt für alle nicht verbundenen Bridge-Pins. Wenn der AudioEndpointBuilder beispielsweise einen nicht verbundenen Bridge-Pin mit einer PIN-Kategorie-GUID von KSNODETYPE_SPEAKER findet, wird ein Sprecherendpunkt für diesen Bridge-Pin erstellt. Weitere Informationen zu KSNODETYPE_SPEAKER und anderen PIN-Kategorie-GUIDS finden Sie unter Ksmedia.h in WinDDK\<build number>\inc\api.

  3. Legt die Standardeigenschaften für den Endpunkt fest. AudioEndpointBuilder legt beispielsweise den Namen, das Symbol und den Formfaktor fest.

  4. Bestimmt, ob ein Pfad vom Endpunkt zu einem Hostpin vorhanden ist, der die Pulscodemodulation (PCM), audio codec-3 (AC3) oder Windows Media Video (WMV) unterstützt. Ein Hostpin ist eine KSPIN-Struktur, deren Kommunikationselement auf KSPIN_COMMUNICATION_SINK oder KSPIN_COMMUNICATION_BOTH festgelegt ist. Weitere Informationen zur KSPIN-Struktur finden Sie unter KSPIN.

  5. Füllt den PropertyStore-Endpunkt mit Eigenschafteninformationen aus den Registrierungsschlüsseln der Audiogeräteschnittstelle auf.

  6. Legt den Status des Endpunkts fest. Der Status des Endpunkts kann einer der folgenden drei Werte sein:

    • Active. Dies gibt an, dass ein Pfad vorhanden ist, wie in Schritt 4 beschrieben.

    • Unplugged. Wenn das Audiogerät die Klinkenerkennung unterstützt, gibt dieser Zustand an, dass ein Pfad für den Endpunkt vorhanden ist und die Buchse vom physischen Anschluss des Audioadapters getrennt wird.

    • Nicht vorhanden. Dieser Zustand gibt an, dass in Schritt 4 kein Pfad gefunden wurde und die Jackenerkennung von diesem Endpunkt nicht unterstützt wird.

  7. Legt diesen Endpunkt als Standardendpunkt fest, wenn dies in der zugeordneten INF-Datei angegeben ist.

Nachdem die Endpunkte aufgelistet wurden, können Clients des Audiosystems sie direkt mithilfe der neuen Windows Vista-APIs (wie bereits erwähnt) oder indirekt mithilfe der vertrauteren APIs wie Wave, DirectShow oder DirectSound bearbeiten. Es wurden neue API-Methoden bereitgestellt, damit Audioclients mit der MMDevice-ID eines Endpunkts beginnen und auf die Wave- oder DirectSound-ID für denselben Endpunkt zugreifen können.

Wenn Sie Endpunkte verwenden, können Sie Folgendes nutzen:

  • Die gleiche global eindeutige ID (GUID) ist verfügbar, unabhängig davon, wie oft Sie Ihren Computer neu starten. Diese persistente GUID ist zuverlässiger als das Speichern einer waveOut-ID oder eines Anzeigenamens für den Endpunkt.

  • Derselbe PropertyStore ist unabhängig davon verfügbar, wie oft Sie Ihren Computer neu starten. Die audiogerätebezogenen Metadaten werden im PropertyStore-Endpunkt gespeichert.

  • Multiplex-Pins (MUX) und De-Multiplexed (DEMUX) werden automatisch verwaltet und vom AudioEndpointBuilder-Dienst aufgelistet.

Wenn Sie Einen eigenen Audiogerätetreiber und eine INF-Datei für die Arbeit mit Ihrem Audiogerät entwickeln und eine Audioanwendung oder beides entwickeln, sollten Sie sich über die folgenden Probleme und bewährten Methoden bewusst sein. Wenn Sie Treiber und Anwendungen unter Berücksichtigung dieser Empfehlungen entwickeln, erstellen Sie Treiber, INF-Dateien und Audioclients, die effektiver mit AudioEndpointBuilder funktionieren.

  • Benennungskonvention. Die Benennungskonvention, die für die Endpunkte verwendet wird, basiert auf den Anzeigenamen der Bridge-Pins. Bei Sprecherendpunkten wurde der Name jedoch in "Speakers" hartcodiert und kann nicht von Ihrem Treiber oder einer Drittanbieteranwendung geändert werden.

  • Suboptimale Topologien. Bestimmte Topologien gelten aufgrund des Algorithmus, der vom AudioEndpointBuilder zum Auflisten von Endpunkten verwendet wird, als suboptimal. Wenn Sie z. B. eine dieser suboptimalen Topologien erstellen, erstellen Sie Hostpins mit ausgeblendeten Endpunkten, die von AudioEndpointBuilder oder Splittern (split endpoints) nicht angezeigt werden können, die der AudioEndpointBuilder nicht mit den zugehörigen Hostpins verknüpfen kann.

    • Ausgeblendete Endpunkte

      Im folgenden Diagramm wird gezeigt, dass der KS-Filter über zwei Hostpins verfügt, die mit einem einzelnen Bridge-Pin (Speaker) verbunden sind.

      Diagramm der problematischen Topologie mit AC-3-Host-Pin und ausgeblendetem Endpunkt auf der linken Seite, einzelnem PCM und AC-3-Freigabe-Einzelfilter

      Wenn AudioEndpointBuilder diesen Bridge-Pin erkennt, verfolgt er einen Pfad nur zu einem der Hostpins zurück, legt die Standardwerte für den Bridge-Pin fest, erstellt und aktiviert einen Speaker-Endpunkt und ermittelt weiterhin andere Bridge-Pins. Daher bleibt der andere Host-Pin vor dem AudioEndpointBuilder ausgeblendet.

      Diagramm, das die empfohlene Topologie mit nachverfolgbaren Pfaden zwischen Hostpins und Endpunkten veranschaulicht.

      Im vorherigen Diagramm wurde die problematische Topologie neu gestaltet, sodass der AudioEndpointBuilder die beiden Hostpins (PCM und AC-3/ PCM) ermitteln kann, da er jetzt zwei Brückenstifte (Lautsprecher und SPDIF) sehen kann.

    • Splitter

      Eine andere Art von suboptimaler Topologie wird erstellt, wenn ein Host-Pin eine Verbindung mit mehr als einem Bridge-Pin herstellt. Das folgende Diagramm zeigt eine Topologie, in der ein PCM-Hostpin eine Verbindung mit einem Lautsprecher-Bridge-Pin und einem SPDIF-Bridge-Pin herstellt.

      Diagramm: Problematische Topologie mit zwei Endpunkten, die mit einem Hostpin und einem einzelnen PCM verbunden sind.

      In diesem Fall ermittelt AudioEndpointBuilder einen Bridge-Pin und verfolgt einen Pfad zurück zum PCM-Hostpin, legt Standardwerte fest und erstellt und aktiviert dann einen Speaker-Endpunkt. Wenn AudioEndpointBuilder den nächsten Bridge-Pin ermittelt, verfolgt er einen Pfad zurück zum gleichen PCM-Hostpin, legt Standardwerte fest und erstellt und aktiviert dann einen SPDIF-Endpunkt. Obwohl beide Endpunkte initialisiert und aktiviert wurden, kann das Streaming auf einen dieser Endpunkte nicht gleichzeitig auf den anderen übertragen werden. mit anderen Worten, sie sind gegenseitig ausschließende Endpunkte.

      Das folgende Diagramm zeigt eine Neugestaltung dieser Topologie, in der separate Verbindungen vorhanden sind. Dieses Design ermöglicht es dem AudioEndpointBuilder, für jeden der beiden Bridge-Pins einen Pfad zurück zum PCM-Hostpin zurück zu verfolgen.

      Diagramm der empfohlenen Topologie mit nachverfolgbaren Pfaden zwischen Hostpins und Endpunkten mit zwei PCMs auf der linken Seite

  • Endpunktformat. Wenn die Audio-Engine im freigegebenen Modus ausgeführt wird, geht das Format für den Endpunkt von einer bestimmten Einstellung aus, die zum Zeitpunkt der Installation von der INF-Datei angegeben wird. Beispielsweise verwendet der Audiotreiber für ein Audiogerät die zugehörige INF-Datei, um den Standardendpunkt auf ein 44,1-kHz-, 16-Bit-Stereo-PCM-Format festzulegen. Nach der Installation müssen Sie Systemsteuerung oder eine Drittanbieteranwendung verwenden, um das Endpunktformat zu ändern.

  • Standardgerät. Der Endpunkt, der als Standardgerät festgelegt ist, wird zum Zeitpunkt der Installation mithilfe von Informationen in der INF-Datei ausgewählt. Nach Abschluss der Installation müssen Sie Systemsteuerung oder eine Drittanbieteranwendung verwenden, um einen anderen Endpunkt als Standardendpunkt auszuwählen.

Hinweis Wenn Ihre INF-Datei keinen Endpunkt auswählt, der während der Installation als Standard festgelegt werden soll, kann eine Clientanwendung die MMDevice-API verwenden, um einen Endpunkt auszuwählen. Die API basiert auf der Auswahl des Formularfaktorrangs und darauf, ob es sich bei dem Endpunkt um einen Render- oder Erfassungsendpunkt handelt. Die folgende Tabelle zeigt die Auswahlreihenfolge.

Renderrang Erfassungsrang
Speakers Mikrofon
Line-Out Line-In
SPDIF SPDIF

Wenn Sie die MMDevice-API verwenden, um einen Standardendpunkt auszuwählen und die verfügbaren Endpunkte gleich eingestuft werden, alphabetisiert die MMDevice-API die Endpunkt-IDs, um zu bestimmen, welcher Endpunkt als Standard ausgewählt werden soll. Wenn ein Audioadapter beispielsweise über Line-Out- und Line-In-Connectors verfügt und die zugeordnete INF-Datei zum Zeitpunkt der Installation keines der Beiden als Standard auswählt, identifiziert die MMDevice-API, welche Endpunkt-IDs zuerst alphabetisch verwendet werden, und legt diesen Connector als Standard fest. Diese Auswahl bleibt auch nach dem Neustart des Systems erhalten, da die Endpunkt-IDs persistent sind. Die Auswahl wird jedoch nicht beibehalten, wenn ein höherrangiger Endpunkt (z. B. ein zweiter Adapter mit Mikrofonanschluss) im System angezeigt wird.