Anordnung aus mehreren ACX-Schaltkreisen
In diesem Thema wird die Anordnung aus mehreren ACX-Schaltkreisen erläutert. Eine allgemeine Übersicht über ACX und eine Liste mit ACX-Begriffen finden Sie unter Übersicht über ACX-Audioklassenerweiterungen.
Wie in der der Zusammenfassung von ACX-Objekten beschrieben, stellt ein Acx-Schaltkreis 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-Pin und einen Ausgabe-Pin (ACXPIN), und er kann ein oder mehrere AcxElements-ähnliche Objekte aggregieren. Allgemeine Informationen finden Sie unter ACX-Schaltkreise.
ACX-Schaltkreisanordnung
ACX bündelt Verbindungen, bis sie einen vollständigen Audiopfad bilden. ACX verwendet Audiobindungen, um Audioschaltungen miteinander zu verbinden. Gleichzeitig wird jede ACX-Schaltkreis in einen KS-Filter konvertiert, diese KS-Filter werden dann von der als Benutzermodusdienst ausgeführten Audioendpunkterstellung (Audio Endpoint Builder, AEB) erkannt. AEB überprüft das erkannte KS-Filterdiagramm und erstellt den Software-Audioendpunkt, der die unterstrichene Audioinfrastruktur darstellt, wenn ein vollständiger Audiopfad erkannt wird.
Das folgende Diagramm zeigt die ACX-Objekte, die von ACX verwendet werden, um die Schaltkreise zu erkennen, zu erstellen und zu überwachen, die den zusammengesetzten Audioendpunkt bilden.
Wichtig
Beachten Sie, dass nur die in Blau angezeigten Typen öffentlich sind: ACXCIRCUITTEMPLATE, ACXCOMPOSITETEMPLATE (nicht dargestellt), ACXMANAGER, ACXCIRCUITFACTORY und ACXCIRCUIT. Alle in Violett dargestellten Typen sind intern und werden hier nur zu Veranschaulichungszwecken aufgeführt. Es wird nicht garantieren, dass die internen Typen gleich bleiben oder in verschiedenen Versionen von ACX verfügbar sind. Sie dürfen nicht direkt aufgerufen oder verwendet werden.
ACX-Manager analysiert die Schaltkreisvorlagen zum Zeitpunkt der Treiberinitialisierung, wenn die ACX-Treiber sie beim ACX-Manager registrieren. ACX-Treiber registrieren zusammengesetzte Vorlagen/Bindung mithilfe von ACXCIRCUTTEMPLATES (#1).
Wenn der ACX-Manager eine Schaltkreisvorlage empfängt, überprüft er, ob es sich um eine instance- oder eine generische class-Vorlage handelt.
Bei instance-Vorlagen erstellt ACX beispielsweise einen ACXCOMPOSITEMANAGER (#4), bei generischen class-Vorlagen wird ACXCOMPOSITEFACTORY (#2) erstellt, die für das Erstellen von ACXCOMPOSITEMANAGER-Elementen (#3) zuständig ist, wenn sie den 'Kern' des Schaltkreises aus der Anordnung erkennt. Kernschaltkreise sind die Schaltkreise, die einem Audioendpunkt der Anordnung eine Identität verleihen.
Der ACXCOMPOSITEMANAGER erstellt wiederum die ACXCOMPOSITE (#5) zur Darstellung des unterstrichenen Audioendpunkts der Anordnung. Der Anordnungsmanager ist verantwortlich für die Überwachung aller optionalen Schaltkreissegmente, die nach der Erstellung/Initialisierung der Anordnung auftreten können.
Die ACXCOMPOSITE erstellt wiederum einen ACXCIRCUITMANAGER (#6) für jeden Schaltkreis, der Teil der Anordnung ist. Der ACXCIRCUITMANAGER ist für die Erstellung, Überwachung und Steuerung eines einzelnen Schaltkreises (#7) verantwortlich.
Ein Schaltkreis kann 'auf Bedarf' markiert werden. In diesem Fall findet der ACXCIRCUITMANAGER dessen Schaltkreis-Factory und fordert einen neuen Schaltkreis für die Anordnung an (#8). Die ACXCIRCUITFACTORY erstellt eine ACXCIRCUIT als Anforderung (#9).
Wenn alle ACXCIRCUITs erkannt und aktiv sind, wird die ACXCOMPOSITE ebenfalls aktiv und weist die ACXCIRCUITMANAGERS an, die 'Audio'-Schnittstellen für ihre Schaltkreise zu aktivieren.
Das folgende Sequenzdiagramm zeigt, wie zwei ACX-Schaltkreise (Schaltkreis A und B) gebunden sind, um einen vollständigen Audiopfad zu erstellen, der durch die Audioendpunkterstellung (AEB) mit einem Softwareaudiogerät dargestellt wird.
Aushandlung des Multischaltkreisformats
Dieser Abschnitt beschreibt die Formatverhandlung, die stattfindet, wenn der Audioendpunkt aus zwei oder mehr Schaltkreisen besteht. Allgemeine Informationen zu ACX-Schaltkreisen finden Sie unter Treiberübergreifende ACX Multi-Stack-Kommunikationen.
Downlevel-Bridge-Pins
Downlevel-Bridge-Pins sind Pins, die Daten (zum Rendern) senden oder Daten von einem physischen Audiogerät direkt oder indirekt empfangen (erfassen). Diese Art von Pins kann acXMODEFORMATLISTs zugeordnet sein oder nicht. Diese Bridge-Pins weisen einen 'AcxPinQualifierBridgeB' oder 'AcxPinQualifierBridgeDevice'-Typ auf. Weitere Informationen zu ACXMODEFORMATLIST finden Sie unter acxdataformat.h-Header.
In diesem Diagramm und in diesem Artikel werden die Begriffe „Uplevel“ und „Downlevel“ verwendet, um die Flussrichtung zu beschreiben, da die Richtung des Up- oder Downstreams davon abhängt, ob die Pins Daten senden (Rendern) oder empfangen (Capture).
Downlevel-Bridge-Pins ohne ACXMODEFORMATLIST(s)
Ein Treiber kann festlegen, dass Listen im Modusformat nicht für den zugehörigen Downlevel-Pin verfügbar gemacht werden. Wenn die Modusformatlisten für einen Downlevel-Bridge-Pin nicht verfügbar sind, kann ein Benutzer (über die Soundsystemsteuerung) oder eine andere Softwareentität das Audioformat dieses Pins und der zugehörigen Datenströme nicht direkt steuern/angeben. Es gibt einige Szenarien, in denen diese Listen nicht benötigt werden:
Streaming-only-Schaltkreise, die an einen DSP-, CODEC-Schaltkreis oder direkt an das Audiogerät angeschlossen werden können. Diese Schaltkreise verschieben die Daten einfach von Punkt A nach Punkt B, ohne sie zu ändern. Diese Schaltkreise ändern die Datenabtastrate des oder der eingehenden/ausgehenden Datenströme nicht. In diesem Fall sind die Modusformatlisten mit dem Uplevel-Pin verknüpft.
Einzelne Datenstrom-Schaltkreise ohne Elemente, die die ein-/ausgehende Abtastrate ändern. Ein Beispiel hierfür ist der USB-Audiogeräteschaltkreis. In diesem Szenario sind die Modusformatlisten mit dem Uplevel-Pin verknüpft.
Das Fehlen der Datenformatliste bedeutet, dass das Datenformat des Datenstroms, das von diesem Pin stammt, mit einem der Datenformate des Pins des Uplevel-Pins des angeschlossenen Schaltkreises kompatibel ist.
Downlevel-Bridge-Pins mit ACXMODEFORMATLIST(s)
Ein Treiber kann festlegen, dass Listen im Modusformat für die zugehörigen Downlevel-Pins verfügbar gemacht werden. Wenn die Modusformatlisten für einen Downlevel-Bridge-Pin verfügbar sind, kann ein Benutzer (über die Soundsystemsteuerung) oder eine andere Softwareentität das Audioformat dieses Pins und der zugehörigen Datenströme direkt steuern/angeben.
Dies sind einige gültige Szenarien, in denen diese Modusformatlisten verwendet werden:
- DSP-Schaltkreise – normalerweise unterstützen solche Schaltkreise mehrere Datenströme, die mit unterschiedlichen Abtastraten ausgeführt werden; diese Datenströme werden intern in eine gemeinsame Abtastrate konvertiert und gemischt, bevor die Daten in den nächsten Schaltkreis verschoben werden. Die Datenformatliste steuert/gibt die endgültige Abtastrate (für diesen Schaltkreis) an.
Wenn die Datenformatliste vorhanden ist, müssen diese Datenformate mit Datenformatbeispielen im Uplevel-Pin des nächsten Schaltkreises übereinstimmen. Beachten Sie, dass die Modi nicht übereinstimmen müssen, lesen Sie weitere Informationen dazu in den nachfolgenden Abschnitten.
Die Listen im Downlevel-Format bieten dem Benutzer/der oberen Ebene die Möglichkeit, das Format des resultierenden Datenstroms zu steuern. In diesem Fall ist der Standardwert der Liste die Abtastrate, die verwendet wird, bis eine explizite Aktion ausgeführt wird, um das Format für dieses Pin zu ändern.
Weitere Informationen zu Formatlisten finden Sie unter acxdataformat.h-Header.
Uplevel-Bridge-Pins
Uplevel-Bridge-Pins sind Pins, die direkt oder indirekt Daten von einem Softwaremodul empfangen (rendern) oder Daten an ein Softwaremodul senden (erfassen). Dieser Art von Pins sollte ACXMODEFORMATLISTs zugeordnet sein. Diese Bridge-Pins weisen einen AcxPinQualifierBridgeA-Typ auf.
Das vorherige Diagramm, das hier noch einmal gezeigt wird, kann auch verwendet werden, um den Render- und Erfassungsdatenfluss zwischen einem Streaming-Pin, zwei Schaltkreisen und einem Gerät darzustellen.
Uplevel-Bridge-Pins ohne ACXMODEFORMATLIST(s)
Uplevel-Pins ohne Modusformatlisten sind keine gültige Kombination und führen zu einem falsch konfigurierten Endpunkt. Der Endpunkt ist aus Benutzersicht nicht sichtbar.
Uplevel-Bridge-Pins mit ACXMODEFORMQATLIST(s)
Uplevel-Pins müssen immer über mindestens eine ACXMODEFORMATLISTS verfügen. In den Modusformatlisten werden alle möglichen Abtastraten für einen Modus und dessen Standardabtastrate angegeben. Verschiedene Modi können unterschiedliche Abtastraten aufweisen. Die Standardabtastrate ist die bevorzugte Abtastrate für diesen Modus.
Modi und Schaltkreise
Uplevel-Pins einzelner oder Multi-Datenstromschaltkreise können eine oder mehrere Modusformatlisten unterstützen. Einzelne Datenstromschaltkreise haben einen Modus gleichzeitig aktiv, während bei Multi-Datenstromschaltkreisen zwei oder mehr Datenströme gleichzeitig mit unterschiedlichen Modi ausgeführt werden können.
Moduszuordnung
Dieser Abschnitt enthält eine kurze Einführung in die Standardmodi und erläutert, warum die 'mode'-Zuordnung verwendet wird.
RAW-Modus: Der Datenstrom/Schaltkreis hat keine Auswirkungen auf den Datenstrom (mit Ausnahme von möglicherweise Lautstärke, Stummschaltung und Sicherheitseinschränkungen wie Lautsprecherschutz).
DEFAULT-Modus: Der Datenstrom/Schaltkreis bewirkt einige Standardeffekte.
<mode_name> mode
: Der Datenstrom/Schaltkreis wendet Effekte an, die für den ausgewählten Modus <mode_name> spezifisch sind.
Es ist obligatorisch für Streaming-Pins, den unformatierten und/oder Standardmodus zu unterstützen. Es ist optional für Streaming-Pins, um alle anderen <mode_name> modes
zu unterstützen.
In einem zusammengesetzten Endpunkt kann es möglich sein, dass der Uplevel-Schaltkreis mehrere Modi unterstützt, und die Downlevel-Schaltkreise nur RAW und/oder DEFAULT unterstützen.
Beispiel für einen Endpunkt mit zwei Schaltkreisen:
Der Downlevel-Pin des Uplevel-Schaltkreises unterstützt die Modi und zugehörigen Formate m1{f1,f2} und m2{f3,f4}. Das bedeutet, dass der Datenstrom des Pins ein Format von f1 oder f2 aufweist, wenn m1 verwendet wird, oder ein Format von f3 oder f4, wenn m2 verwendet wird. Dabei wird davon ausgegangen, dass es sich beim Uplevel-Schaltkreis um einen einzelnen Datenstrom-Schaltkreis handelt.
Der Uplevel-Pin des Downlevel-Schaltkreises unterstützt den default-mode{f1,f2,f3}.
In diesem Fall wird der Modus des Datenstroms vom Modus <mode_name> in den Standardmodus konvertiert, wobei die gleichen Abtastraten beibehalten werden.
m1/f1 zu > default/f1
m1/f2 zu > default/f2
m2/f3 zu > default/f3
Ungültiger Eintrag: m2/f4 zu > None
Die Moduszuordnung erfolgt durch den Treiber mithilfe von ACX. In der obigen Tabelle ist der letzte Eintrag ungültig, der Downlevel-Pin des Uplevel-Schaltkreises sollte m2/f4 als Option für die unterstützten Formate entfernen. Beachten Sie, dass das auch umgekehrt passieren könnte, d. h., der Uplevel-Pin des Downlevel-Schaltkreises könnte auch f4 und f5 unterstützt haben. In diesem Fall wurde default-f4 unterstützt, default-f5 jedoch nicht. In einem solchen Fall ist der Uplevel-Pin des Downlevel-Schaltkreises verantwortlich, m?/f5 nicht als Option aus der Liste aufzulisten. Dieser Prozess wird in den nachfolgenden Abschnitten weiter erläutert.
Formatverhandlungen
Bevor ACX die Audioschnittstellen der Schaltkreise, die das zusammengesetzte Gerät bilden, aktiviert, wird sichergestellt, dass die Schaltkreise den Modus/die Formate der Audiodaten aushandeln können. ACX führt diese Schaltkreisbenachrichtigung durch Aufrufen des zusammengesetzten Initialisierungsrückrufs auf allen Schaltkreisen der Anordnung aus. Die Sequenz verläuft von Downlevel (Geräteseite) bis Uplevel (Systemseite). Schaltkreise haben die Möglichkeit, ihre Formate während dieser Phase zu aktualisieren.
Anzeige der Geräteformat-Systemsteuerung
Die aktuelle Soundsteuerungslogik zeigt die Geräteformatliste wie folgt an:
- Wenn das Audiogerät ein Audiomodulelement unterstützt, ist die Liste der in der Systemsteuerung angezeigten Datenformate die Liste des Gerätedatenformats, d. h. die Datenformatliste, die an den Downlevel-Pin angefügt ist (der mit dem Ausgabepin des Audiomodulelements verbunden ist).
- Wenn das Audiogerät kein Audiomodulelement unterstützt, ist die Liste der in der Systemsteuerung angezeigten Datenformate die Streaming-Pin-Datenformatliste, d. h. die Datenformatliste, die an den Uplevel-Pin angefügt wurde.
Automatische Erstellung von Downlevel-Datenströmen mit mehreren Schaltkreisen
ACX verwendet ACXSTREAMBRIDGE-Objekte, die einem Downlevel-Bridge-Pin zugeordnet sind, um die create-stream(s)-Anforderung automatisch an Remoteschaltkreise zu verteilen.
Wenn eine Client-App einen Datenstrom erstellt, wird diese Anforderung zuerst von einem Streaming-Pin empfangen. ACX benachrichtigt den Treiber des Streaming-Pins über die create-stream-Anforderung mittels des bereitgestellten Rückrufs, der zur Schaltkreiserstellungszeit angegeben wurde. Im Rückruf erstellt der Treiber ein ACXSTREAM-Objekt, das den Datenstrom darstellt, und gibt dann das Steuerelement zurück an ACX zurück. Wenn ACX das Steuerelement zurückgibt, überprüft er, ob diese Anforderung an den nächsten (Downlevel)-Schaltkreis weitergeleitet werden muss. Optional kann der Treiber die Erstellungsanforderung an den nächsten (Downlevel)-Schaltkreis weiterleiten, bevor er sie von seinem create-stream-Rückruf zurückgibt. Die letztere Option ermöglicht es dem Treiber, alle post-Vorgänge auszuführen, nachdem downlevel-Schaltkreise die Möglichkeit hatten, ihre create-Anforderungen zu verarbeiten.
ACX verwendet die folgende Standardlogik für die Datenstromerstellung:
- Wenn es keinen Downlevel-Bridge-Pin, ist der Vorgang abgeschlossen.
- Wenn der Treiber den Datenstrom bereits manuell einem ACXSTREAMBRIDGE zugeordnet hat, ist der Vorgang abgeschlossen.
- Wenn der Downlevel-Bridge-Pin keinen ACXSTREAMBRIDGE für den angegebenen MODUS hat, schlägt die Anforderung fehl.
- ACX fügt den neuen Datenstrom hinzu, den der Treiber mit dem abgerufenen ACXSTREAMBRIDGE erstellt hat.
AcXSTREAMBRIDGE fungiert als multi-in/single-out. Solange ein in-Datenstrom vorhanden ist, behält ACXSTREAMBRIDGE einen out-Datenstrom bei. Der out-Datenstrom wird erst gelöscht, wenn der letzte in-Datenstrom entfernt wird. ACXSTREAMBRIDGE verwendet die ACXDATAFORMATLISTs, die dem Downlevel-Bridge-Pin zugeordnet sind, wenn sie den Modus und das Format für den Remoteschaltkreis bestimmen.
ACXSTREAMBRIDGE verwendet die folgende Logik, um den Modus und das Datenformat des out-Datenstroms auszuwählen:
Wenn MODE für den out-Datenstrom nicht angegeben ist, überprüfen Sie, ob eine Standardformatliste vorhanden ist.
Wenn MODE für den out-Datenstrom nicht angegeben ist und die Standardformatliste nicht vorhanden ist, überprüfen Sie, ob eine 'raw'-Formatliste vorhanden ist.
Wenn MODE gleich NULL_GUID ist, überprüfen Sie, ob eine Formatliste mit dem MODE des ersten in-Datenstroms verknüpft ist.
Wenn MODE angegeben ist, überprüfen Sie, ob für diesen MODE eine Formatliste vorhanden ist.
Wenn die Formatliste gefunden wird, wird das Standardformat aus der Formatliste abgerufen.
Wenn das Format nicht gefunden wird, verwendet ACXSTREAMBRIDGE das Format des ersten Datenstroms.
ACXSTREAMBRIDGE erstellt eine Datenstromerstellungsanforderung mithilfe des ACXTARGETSTREAM über den abgerufenen MODE und des Datenformats wie folgt:
- Wenn MODE angegeben wurde, wird dieser MODE verwendet.
- Wenn MODE gleich NULL_GUID war, wird der MODE des ersten in-Datenstroms verwendet.
- Sonst wird kein Modus verwendet.
ACX übernimmt das Löschen/Schließen des Zieldatenstroms, wenn der letzte in-Stream entfernt wird.
Ein weiterer Vorgang von ACXSTREAMCIRCUIT besteht darin, automatisch einen Datenstromstatus entlang der Streamingkette zu verteilen.
Ein Treiber hat die Möglichkeit, die Erstellung der Remoteschaltkreis-Bridge des Standardkreises durch Aufrufen von AcxCircuitInitDisableDefaultStreamBridgeHandling oder durch manuelles Zuordnen des ACXSTREAM-Objekts einem ACXSTREAMBRIDGE-Objekt zu deaktivieren, bevor die Steuerung an ACX zurückgegeben wird. Im letzteren Fall wird der Remotedatenstrom erstellt, bevor der Treiber aus der 'create-stream'-EVT_ACX_CIRCUIT_CREATE_STREAM-Rückruffunktion zurückgibt.
Für Schaltkreise, die mehrere Erfassungs-/Render-Pins verwenden, wie host/offload/loopback/kws (d. h., wenn das Audiomodulelement unterstützt wird), muss der Treiber eine Datenstrom-Bridge ohne einen in-Modus erstellen und die eingehenden ACXSTREAM-Objekte bei der Verarbeitung des create-stream-Rückrufs der Stream-Bridge manuell hinzufügen.
Weitere Informationen zur Erstellung von Datenstrom-Bridges finden Sie unter:
Automatische Verteilung des Datenstromzustands an Downlevel-Datenströme mit mehreren Schaltkreisen
ACXSTREAMBRIDGE verteilt automatisch eine stream-state-Anforderung an Remote-Downlevel-Schaltkreise. Wenn sich der Status eines Datenstroms ändert, berechnet ACXSTREAMBRIDGE den gemischten Zustand des out-Datenstroms und sendet diese neue 'stream-state'-Anforderung mithilfe des ACXTARGETSTREAM an den Remotedatenstrom.
Der ACXSTREAM verwendet zusammen mit ACXSTREAMBRIDGE die folgende Logik:
Es werden zuerst die Status der Uplevel-Datenströme in diesen Szenarien geändert:
- Rendern && ab Stop->Run
- Erfassen && ab Run->Stop
- Andere && ab Run->Stop
Zuletzt werden die Status der Uplevel-Datenströme in diesen Szenarien geändert:
- Rendern && ab Run->Stop
- Erfassen && ab Stop->Run
- Andere && ab Stop->Run
Treiber haben die Möglichkeit, diese Reihenfolge über eine Konfigurationseinstellung rückgängig zu machen.
Hinweis
Es ist eine Anforderung für einen Treiber/Schaltkreis/Datenstrom, um Datenstromübergänge immer erfolgreich zu beenden (run-stop). Andererseits ist es zulässig, dass ein Treiber die Rückwärtsausführung (stop-run) nicht erfolgreich beendet.
Weitere Informationen
Übersicht über ACX-Audioklassenerweiterungen