Zusammenfassung der ACX-Objekte

Dieses Thema enthält eine allgemeine Zusammenfassung der ACX-Objekte (Audio Class Extensions), die die Basis eines ACX-Audiotreibers bilden. Eine allgemeine Übersicht über ACX finden Sie unter Übersicht über ACX-Audioklassenerweiterungen.

ACX-Objekte sind WDF-Objekte (Windows Driver Framework) – WDFOBJECT. Weitere Informationen zu WDF finden Sie unter Einführung in Framework-Objekte. Eine Zusammenfassung der WDF-Objekte finden Sie unter Zusammenfassung der Frameworkobjekte.

Hinweis

Die ACX-Header und -Bibliotheken sind nicht im WDK 10.0.22621.2428 (veröffentlicht am 24. Oktober 2023) enthalten, sind aber in früheren Versionen sowie in den neuesten (25000-Serienbuilds) Insider Preview des WDK verfügbar. Weitere Informationen zu Vorschauversionen des WDK finden Sie unter Installieren von Vorschauversionen des Windows Driver Kit (WDK).

ACX-Objekthierarchie

In ACX (wie in WDF) ist das Treiberobjekt das Stammobjekt, und alle anderen Objekte sind seine untergeordneten Elemente/Nachfolger. Alle ACX-Objekte sind untergeordnete Elemente des Treiberobjekts direkt oder indirekt über andere ACX- oder WDF-Objekte. Ein ACX-Treiber kann das übergeordnete Element eines ACX-Objekts während der Erstellung angeben. Wenn das übergeordnete Element nicht angegeben ist, verwendet ACX wie in diesen Abschnitten beschrieben ein übergeordnetes Standardelement.

Diagramm zur Veranschaulichung der Hierarchie von ACX-Objekten mit WDFDEVICE oben und haupt-ACX-Objekten wie Leitung und Stream unten.

ACX-Leitung

Ein AcxCircuit stellt einen teilweisen oder vollständigen Audiopfad zu einem vom Benutzer wahrgenommenen Audiogerät (Lautsprecher, Mikrofon usw.) dar. Ein AcxCircuit verfügt über mindestens einen Eingabe- und einen Ausgabepin (ACXPIN) und kann ein oder mehrere AcxElements-ähnliche Objekte aggregieren. AcxElements sind standardmäßig in derselben Assemblyreihenfolge "verbunden".

Die Audioschaltung ist der Kernbaustein von ACX. Im neuen ACX-Framework erstellt ein Audiotreiber mindestens ein ACX-Leitungsobjekt, das einen teilweisen oder vollständigen Audiodaten-/Steuerungspfad darstellt. ACX stellt diese ACX-Leitungsobjekte zusammen, um einen vollständigen Audiopfad zu erstellen, der einen Audioendpunkt darstellt. ACX ist für die Verwaltung der ACX-Leitungen und deren Abhängigkeiten verantwortlich. Die Reihenfolge, in der diese Leitungen zusammengesetzt werden, kann zum Zeitpunkt der Initialisierung statisch oder dynamisch zur Laufzeit definiert werden.

Ein Audioendpunkt in den ACX-Frameworks ist eine Sammlung einer oder mehrerer ACX-Leitungen. Jede ACX-Leitung in einem Audiopfad mit mehreren Schaltungen muss zu einem anderen PnP-Gerätestapel gehören. Ein ACX-Treiber kann zur Initialisierungszeit eine oder mehrere Leitungen erstellen, oder er kann Leitungen zur Laufzeit erstellen, als Nebeneffekt eines externen Ereignisses, z. B. nach dem Erkennen einer neuen Audiokomponente, oder weil er sich bei ACX als Factory für einen bestimmten Leitungstyp registriert hat, und das ACX-Framework die Factorykomponente aufgefordert hat, eine neue Leitung dieses Typs zu erstellen (siehe ACX-Leitungs-Manager/Factory weiter unten in diesem Thema beschrieben).

  • Ein AcxCircuit kann über einen oder mehrere Streams verfügen.

  • Ein AcxCircuit verfügt über eine dedizierte WDF-Warteschlange. Weitere Informationen zu WDF-Warteschlangen finden Sie unter Framework-Warteschlangenobjekte.

Die DDIs für ACX-Leitungen werden im acxcircuit.h-Header beschrieben.

ACX-Pin

Genau wie in WDM Portcls Audiotreiber, und AcxPin-Objekt stellen die logischen Verbindungen (nicht physische Verbindungen) dar, über die Datenströme vom Systemkommunikationsbus in den Adapter gelangen oder vom Adapter in den Systemkommunikationsbus gelangen.

Die DDIs für Pin werden im acxpin.h-Header beschrieben.

ACX-Stream

Ein AcxStream stellt einen Audiodatenstrom auf der Hardware einer bestimmten Schaltung dar. Ein AcxStream kann ein oder mehrere AcxElements-ähnliche Objekte aggregieren. AcxElements sind standardmäßig in derselben Assemblyreihenfolge "verbunden". Ein AcxStream ist nur einer ACX-Leitung zugeordnet.

  • Ein AcxStream verfügt über eine dedizierte WDF-Warteschlange. Weitere Informationen zu WDF-Warteschlangen finden Sie unter Framework-Warteschlangenobjekte.
  • Ein AcxStream unterstützt verschiedene Zustände. Diese Zustände geben an, wann Audio fließt (AUSFÜHRUNGszustand) oder nicht fließt (PAUSE- oder STOP-Status).
  • Derzeit unterstützt ACX zwei Arten von Streams: grundlegende ACX-Streamobjekte, die von Nicht-Streaming-Leitungen verwendet werden, und ACX RT-Streamobjekte, die von Streamingschaltungen verwendet werden.

Die DDIs für den Stream werden im acxstreams.h-Header definiert.

ACX-Ziele

WdfIoTarget ist eine WDF-Abstraktion, um die Kommunikation zwischen zwei verschiedenen Stapeln zu erleichtern. Weitere Informationen zu WDF-E/A-Zielen finden Sie unter Einführung in E/A-Ziele.

  • Treiber verwenden AcxTargetCircuit, um mit einer Remoteverbindung zu kommunizieren, die von einem anderen Stapel verfügbar gemacht wird. AcxTargetCircuit wird mithilfe eines WdfIoTarget implementiert.
  • Treiber verwenden AcxTargetPin, um mit dem Pin einer Remoteschaltung zu kommunizieren, der von einem anderen Stapel verfügbar gemacht wird. AcxTargetPin wird mithilfe eines WdfIoTarget implementiert, um Nachrichten an die Remote-Pin-Entität zu senden.
  • Treiber verwenden AcxTargetElement, um mit dem Element einer Remoteschaltung zu kommunizieren, das von einem anderen Stapel verfügbar gemacht wird. AcxTargetElement wird mithilfe eines WdfIoTarget implementiert, um Nachrichten an die Remoteelemententität zu senden.
  • Treiber verwenden AcxTargetStream, um mit dem Stream einer Remoteschaltung zu kommunizieren, der von einem anderen Stapel verfügbar gemacht wird. AcxTargetStream wird mithilfe eines WdfIoTarget implementiert, um einen Remotestream zu erstellen und den Status des Remotestreams zu ändern.
  • Treiber verwenden AcxTargetFactoryCircuit, um mit einer Remote circuit Factory instance zu kommunizieren. AcxTargetFactoryCircuit wird mithilfe eines WdfTarget implementiert, um Nachrichten an die Remoteschaltungsfactory zu senden.

Jeder der oben genannten ACX-Typen unterstützt Eigenschaften, Methoden und Ereignisse für die Interaktion mit der Remoteverbindung. Alle diese Typen basieren auf dem WdfIoTarget-Objekt.

Die DDIs für Ziele werden im acxtargets.h-Header definiert.

ACX Stream Bridge

Das AcxStreamBridge-Objekt wird von einer Verbindung verwendet, um eine Datenstromerstellung, die Statusübergänge des Streams und DRM-Einstellungen zwischen Leitungssegmenten zu verteilen. Dieses Objekt wird nur in einem Szenario mit mehreren Schaltungen (Audio-Verbund) verwendet. Ein Treiber kann einem Brückenstift ein oder mehrere ACXSTREAMBRIDGE-Objekte zuordnen. Ein Bridge-Pin ist der ACXPIN, der logisch eine Verbindung mit dem acxpininging auf der anderen Verbindung herstellt.

Die DDIs für Stream werden im acxstreams.h-Header beschrieben.

Beispiel für das Leitungslayout des ACX-Audiomodulknotens

Das folgende Diagramm veranschaulicht eine ACX-Verbindung. Host- und Auslagerungspins sind Eingaben an die Leitung mit einem Loopback-Pin, der für den Echoabbruch verwendet werden kann. Die Ausgabe kann ein Bridge-Pin sein, der an einen Lautsprecher weitergeleitet wird.

Diagramm zur Veranschaulichung einer ACX-Leitung mit Host-, Auslagerungs- und Loopback-Pins auf der linken Seite und einem Bridge-Pin auf der rechten Seite, der über einen Audio-Engine-Knoten geleitet wird.

Beachten Sie, dass der Treiber den Schritt der expliziten Verbindung nicht ausführen muss, wenn Schaltungen/Elemente in derselben Reihenfolge verbunden sind, in der sie der Leitung hinzugefügt wurden.

Standardmäßig verbindet ACX die Elemente beginnend mit der ACX-Anforderungssenke der Leitung und endet mit dem Geräte-Bridge-Pin der Verbindung für Render- und Aufzeichnungsgeräte.

ACX-Manager

Der ACX-Manager wird für Systemaufgaben wie die Unterstützung zusammengesetzter Audioendpunkte verwendet. Diese Arten von Endpunkten werden von einem oder mehreren Treiberstapeln von demselben oder unterschiedlichen Anbietern verwaltet. Clients können diese Konfiguration in ACPI vorkonfiguriert oder den DDI des ACX-Managers direkt verwenden. Die DDIs für den ACX-Manager werden im acxmanager.h-Header beschrieben.

ACX-Objektbehälter

Der ACX-Objektbehälter wird verwendet, um verschiedene Datentypen zu speichern. ACXOBJECTBAG kann in verschiedenen DDIs als Argument übergeben werden. Die DDIs für Object Bag werden im acxmisc.h-Header beschrieben.

ACX-Objektzusammenfassung

Die folgende Tabelle enthält alle ACX-Objekte und enthält einige grundlegende Informationen zu den einzelnen Objekten.

Handle Name Zweck
ACXMANAGER Der ACX-Manager ACX-Manager-Objekt, das zum Verwalten und Steuern anderer Objekte verwendet wird.
ACXOBJECTBAG Objektbehälter Wird zum Speichern von Daten zur Verwendung mit -Objekten verwendet.
ACXEVENT ACX-Ereignis Für KS-Ereignisse (Kernelstreaming).
ACXEVENTDATA Ereignisdaten Die einem Ereignis zugeordneten Daten.
ACXPNPEVENT Pnp-Ereignis Für Plug-and-Play-Ereignisse.
ACXCIRCUIT Leitung Eine ACX-Leitung, die oben in diesem Thema beschrieben wurde.
ACXPIN Pin Ein ACX-Pinobjekt stellt die logischen Verbindungen dar und wird oben in diesem Thema beschrieben.
ACXELEMENT Element Wird verwendet, um ein beliebiges Element darzustellen, das einem AcxCircuit oder AcxStream hinzugefügt werden kann, z. B. AcxVolume
ACXAUDIOENGINE Audio-Engine Die ACX-Audio-Engine, die in einer Renderschaltung verwendet wird, um einen DSP darzustellen.
ACXSTREAMAUDIOENGINE Stream Audio Engine Wird in einem Renderdatenstrom verwendet, um einen DSP darzustellen.
ACXKEYWORDSPOTTER Key word spotter Ein Schlüsselwort (keyword)-Spotter, der in einer Aufzeichnungsschaltung für Schlüsselwort (keyword) Erkennung in einem Audiostream verwendet wird.
ACXVOLUME Volume Wird verwendet, um ein Volume, eine Verstärkung, eine Verstärkung darzustellen.
ACXMUTE Mute Wird verwendet, um ein Stummschaltungselement darzustellen.
ACXJACK Jack Wird verwendet, um eine Audiobuchse oder einen anderen physischen Anschluss darzustellen.
ACXMICARRAYGEOMETRY Mikrofonarraygeometrie Wird verwendet, um die Mikrofonarraygeometrie darzustellen, z. B. die Position der Mikrofone.
ACXPEAKMETER Peak Meter Wird verwendet, wenn Hardware Spitzenzählerfunktionen unterstützt.
ACXSTREAM STREAM Wird verwendet, um einen audiostream darzustellen, der von einer Verbindung erstellt wurde, die oben in diesem Thema beschrieben wird.
ACXDATAFORMAT Datenformat Ein Datenformat stellt ein vom Audiogerät unterstütztes Datenformat dar.
ACXDATAFORMATLIST Datenformatliste Eine Liste der verfügbaren Audiodatenformate.
ACXTARGETCIRCUIT Zielleitung Wird für die Kommunikation mit einer remoten Verbindung verwendet, die von einem anderen Stapel verfügbar gemacht wird.
ACXTARGETPIN Zielnadel Wird verwendet, um mit dem Pin einer Remoteschaltung zu kommunizieren, der von einem anderen Stapel verfügbar gemacht wird.
ACXTARGETELEMENT Target-Element Wird verwendet, um ein Zielelement darzustellen, das einem AcxCircuit oder AcxStream hinzugefügt werden kann, z. B. AcxVolume
ACXTARGETSTREAM Zielstream Wird verwendet, um mit dem Stream einer Remoteschaltung zu kommunizieren, der von einem anderen Stapel verfügbar gemacht wird.
ACXTARGETFACTORYCIRCUIT Target Circuit Factory Wird für die Kommunikation mit dem Werk einer Remoteschaltung verwendet.
ACXSTREAMBRIDGE Stream Bridge Wird von einer Leitung verwendet, um eine Streamerstellung, Statusübergänge und DRM zwischen Leitungssegmenten zu verteilen.
ACXCOMPOSITE Composite Wird verwendet, um Datenstromarchitekturen mit mehreren Schaltungen/Multi-Stack/mehreren Anbietern darzustellen.
ACXCOMPOSITEFACTORY Composite Factory Eine Factory, die zusammengesetzte Audioschaltungen erstellt.
ACXFACTORYCIRCUIT Factory-Leitung Eine Factory, die Mithilfe einer bestimmten Vorlage Leitungen erstellt.
ACXCIRCUITMANAGER Leitungs-Manager Ein Leitungsanbieter, der für die dynamische Leitungserstellung verwendet wird.
ACXCOMPOSITETEMPLATE Zusammengesetzte Vorlage Eine zusammengesetzte Vorlage stellt eine partielle oder vollständige Audiobindung dar. Eine zusammengesetzte Vorlage kann eine oder mehrere Leitungsvorlagen aufweisen.
ACXCIRCUITTEMPLATE Leitungsvorlage Eine Leitungsvorlage stellt einen partiellen Audiopfad dar.
ACXAUDIOMODULE Audiomodul Für benutzerdefinierte Drittanbieterfunktionen hinzufügen.

Die folgenden ACX-Objekte werden verwendet, um Informationen zur Leitungs-, Stream- und Leitungsfabrik zu speichern.

Handle Zweck
ACXCIRCUIT_INIT Speichert ACX-Leitungsinitialisierungsdaten
ACXSTREAM_INIT Speichert ACX-Streaminitialisierungsdaten
ACXFACTORYCIRCUIT_INIT Speichert Initialisierungsdaten, die von einer ACX-Leitungsfabrik verwendet werden

Weitere Informationen

ACX-Audioklassenerweiterungen – Übersicht

ACX-Referenzdokumentation