Freigeben über


Anordnung aus mehreren ACX-Schaltkreisen

In diesem Thema wird die Zusammensetzung von ACX-Multischaltkreisen erläutert. Eine allgemeine Übersicht über ACX und eine Liste der ACX-Begriffe finden Sie in der Übersicht über ACX-Audioklassenerweiterungen.

Wie in der Zusammenfassung von ACX-Objekten beschrieben, stellt ein AcxCircuit 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-Schaltkreiskomposition

ACX bindet Schaltkreise zusammen, bis sie einen vollständigen Audiopfad bilden. ACX verwendet Audiobindungen, um Audioschaltungen miteinander zu verbinden. Gleichzeitig wird jeder ACX-Schaltkreis in einen KS-Filter konvertiert, diese KS-Filter werden dann vom Audio Endpoint Builder (AEB) erkannt, der als Benutzermodusdienst ausgeführt wird. AEB überprüft den erkannten KS-Filtergraphen und erstellt den Audio-Endpunkt, der die zugrunde liegende Audio-Infrastruktur darstellt, wenn ein vollständiger Audiopfad erkannt wird.

Das folgende Diagramm zeigt die ACX-Objekte, die von ACX verwendet werden, um die Schaltungen zu erkennen, zu erstellen und zu überwachen, die den zusammengesetzten Audioendpunkt bilden.

Diagramm, das die ACX-Zielarchitektur mit ACXCIRCUITTEMPLATE, ACXCOMPOSITEMANAGER, ACXMANAGER, ACXCIRCUITFACTORY und ACXCIRCUIT veranschaulicht.

Von Bedeutung

Beachten Sie, dass nur die in Blau angezeigten Typen öffentlich sind: ACXCIRCUITTEMPLATE, ACXCOMPOSITETEMPLATE (nicht dargestellt), ACXMANAGER, ACXCIRCUITFACTORY und ACXCIRCUIT. Alle in Violetten gezeigten Typen sind intern, und sie werden hier nur zu Veranschaulichungszwecken aufgeführt. Die internen Typen sind nicht garantiert, gleich zu bleiben oder in verschiedenen Versionen von ACX verfügbar zu sein und dürfen nicht direkt aufgerufen oder verwendet werden.

Der ACX-Manager parst die Schaltkreisvorlagen während der Initialisierung der Treiber, wenn die ACX-Treiber diese beim ACX-Manager registrieren. ACX-Treiber registrieren zusammengesetzte Vorlagen/Bindung mithilfe von ACXCIRCUTTEMPLATES (#1).

Wenn ACX-Manager eine Schaltkreisvorlage empfängt, überprüft er, ob es sich um eine Instanzvorlage oder eine generische Klassenvorlage handelt.

AcX erstellt beispielsweise einen ACXCOMPOSITEMANAGER (#4) für Instanzvorlagen und für generische Klassenvorlagen einen ACXCOMPOSITEFACTORY (#2), der für das Erstellen von ACXCOMPOSITEMANAGER-Elementen (#3) verantwortlich ist, wenn er den "Kern"-Schaltkreis des Verbunds erkennt. Kernkreise sind die Schaltungen, die einem zusammengesetzten Audioendpunkt die Identität verleihen.

Der ACXCOMPOSITEMANAGER erstellt wiederum den ACXCOMPOSITE (#5) für den unterstrichenen zusammengesetzten Audioendpunkt. Der Composite Manager ist verantwortlich für die Überwachung optionaler Schaltkreissegmente, die nach der Erstellung/Initialisierung des Kompositums auftreten können.

Die ACXCOMPOSITE erstellt wiederum einen ACXCIRCUITMANAGER (#6) für jeden Schaltkreis, der Teil des Verbunds ist. Der ACXCIRCUITMANAGER ist für die Erstellung, Überwachung und Steuerung eines einzelnen Schaltkreises (#7) verantwortlich.

Es kann möglich sein, dass ein Schaltkreis "on-demand" markiert werden kann, in diesem Fall findet der ACXCIRCUITMANAGER seine Schaltkreisfabrik und fordert einen neuen Schaltkreis für den Verbund an (#8). Die ACXCIRCUITFACTORY erstellt eine ACXCIRCUIT auf 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 (Circuit A und B) gebunden sind, um einen vollständigen Audiopfad zu erstellen, der durch den Audioendpunkt-Generator (AEB) mit einem Softwareaudiogerät dargestellt wird.

Diagramm mit Spalten mit der Bezeichnung

Verhandlung des Multikreisformats

In diesem Abschnitt wird die Formatverhandlung beschrieben, die stattfindet, wenn der Audioendpunkt aus zwei oder mehr Schaltkreisen besteht. Allgemeine Informationen zu ACX-Schaltkreisen finden Sie unter ACX Multi-Stack Cross-Driver-Kommunikation.

Abwärtskompatible Brückenstifte

Bridge-Pins auf unterer Ebene sind Pins, die Daten an ein physisches Audiogerät senden (rendern) oder von einem physischen Audiogerät direkt oder indirekt empfangen (erfassen). Diese Art von Pins kann möglicherweise mit ACXMODEFORMATLISTs verknüpft sein oder auch nicht. Diese Brückennadeln haben einen Typ 'AcxPinQualifierBridgeB' oder 'AcxPinQualifierBridgeDevice'. Weitere Informationen zu ACXMODEFORMATLIST finden Sie im acxdataformat.h-Header.

Diagramm mit dem Render- und Erfassungsdatenfluss zwischen einem Streaming-Pin, zwei Schaltkreisen und einem Gerät.

In diesem Diagramm und Artikel wird die Uplevel- und Downlevel-Bewegung beschrieben, da die Richtung des Datenflusses davon abhängt, ob die Pins Daten zur Darstellung senden oder Daten zur Erfassung empfangen.

Abwärtskompatible Brückenpins ohne ACXMODEFORMATLIST(n)

Ein Treiber kann entscheiden, Listen im Modusformat auf seinem "downlevel" Pin nicht anzuzeigen. Wenn die Modusformatlisten auf einem Pin mit abgestufter Brücke nicht verfügbar sind, kann ein Benutzer (über die Systemsteuerung für Sound) oder eine andere Softwareentität das Audioformat dieses Pins und der zugehörigen Datenströme nicht direkt kontrollieren oder angeben. Dies sind einige Szenarien, in denen diese Listen nicht benötigt werden:

  • Streaming-only-Schaltkreise, die an einen DSP-Schaltkreis, an einen 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 Schaltungen ändern die Datensamprate des eingehenden/ausgehenden Datenstroms nicht. In diesem Fall sind die Modus-Formatlisten mit dem Uplevel-Pin verknüpft.

  • Einstromschaltungen ohne Elemente, die die Eingangs-/Ausgangsabtastrate verändern. Ein Beispiel hierfür ist die USB-Audio-Geräteschaltung. In diesem Szenario sind die Modusformatlisten dem Uplevel-Pin zugeordnet.

Das Fehlen der Datenformatliste bedeutet, dass das Datenformat des Datenstroms, das von diesem Pin ausgeht, mit einem der Datenformate des übergeordneten Pins des angeschlossenen Schaltkreises kompatibel ist.

Überbrückungs-Pins auf niedrigerer Ebene mit ACXMODEFORMATLIST(n)

Ein Treiber kann die Entscheidung treffen, Modusformate in Listen an seinen Downlevel-Pins bereitzustellen. Wenn Modusformatslisten auf einem Downlevel-Brückenpin verfügbar sind, kann ein Benutzer (über das Soundsteuerungspanel) oder eine andere Softwareentität das Audioformat dieses Pins und der zugehörigen Datenströme direkt steuern oder konfigurieren.

Dies sind einige gültige Szenarien, in denen diese Modusformatlisten verwendet werden:

  • DSP-Schaltkreise – normalerweise unterstützen diese Art von Schaltkreisen mehrere Datenströme, die mit unterschiedlichen Samplingraten 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 Steuerelemente der Datenformatliste legen die endgültige Stichprobenrate (für diesen Schaltkreis) fest.

Wenn die Datenformatliste vorhanden ist, müssen diese Datenformate mit Datenformatbeispielen im Pin der höheren Ebene des nächsten Schaltkreises übereinstimmen. Beachten Sie, dass die Modi nicht übereinstimmen müssen; sehen Sie die Erläuterung der Modi in den folgenden 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 Stichprobenrate, die verwendet wird, bis eine explizite Aktion ausgeführt wird, um das Format auf diesem Pin zu ändern.

Weitere Informationen zum Formatieren von Listen finden Sie im Acxdataformat.h-Header.

Pins auf der Ebene der Brücke

Uplevel-Bridge-Pins sind die Pins, die Daten von einem Softwaremodul direkt oder indirekt empfangen (Rendern) oder an dieses senden (Erfassung). Diese Arten von Pins sollten ACXMODEFORMATLISTs zugeordnet sein. Diese Brückenstifte haben einen "AcxPinQualifierBridgeA"-Typ.

Das hier gezeigte vorherige Diagramm kann auch verwendet werden, um den Render- und Erfassungsdatenfluss zwischen einem Streaming-Pin, zwei Schaltkreisen und einem Gerät anzuzeigen.

Diagramm mit dem Render- und Erfassungsdatenfluss zwischen einem Streaming-Pin, zwei Schaltkreisen und einem Gerät. Pfeile zeigen den Renderdatenfluss nach rechts und den Erfassungsdatenfluss ebenfalls nach rechts.

Uplevel [Bridge]-Pins ohne ACXMODEFORMATLIST(s)

Uplevel-Pins ohne Modusformatlisten sind keine gültige Kombination, was zu einem falsch konfigurierten Endpunkt führt. Der Endpunkt ist aus Benutzersicht nicht sichtbar.

Uplevel [Bridge] Pins mit ACXMODEFORMQATLIST(s)

Uplevel-Pins müssen immer über mindestens ein ACXMODEFORMATLISTS verfügen. In den Modusformatlisten werden alle möglichen Stichprobenraten für einen Modus und deren Standardsamprate angegeben. Verschiedene Modi können unterschiedliche Stichprobensätze aufweisen. Die Standardsamprate ist die bevorzugte Samplerate für diesen Modus.

Modi und Schaltkreise

Pins zur Höherstufung einzelner Einzelstromschaltungen oder Multi-Stream-Schaltkreise können eine oder mehrere Modus-Formatlisten unterstützen. Einzelstromkreise haben jeweils nur einen Modus gleichzeitig aktiv, während Mehrstromkreise zwei oder mehr Datenströme gleichzeitig mit möglicherweise unterschiedlichen Modi laufen lassen können.

Zuweisung der Betriebsmodi

Dieser Abschnitt gibt eine kurze Einführung in die Standardmodi und erläutert, warum die Zuordnung von Modi verwendet wird.

RAW-Modus: Der Datenstrom/Signalweg wendet keine Effekte auf den Datenstrom an (mit Ausnahme von möglicherweise Lautstärke, Stummschaltung und Sicherheitseinschränkungen wie Lautsprecherschutz).

STANDARDmodus: Der Stream/Schaltkreis bewirkt einige Standardeffekte.

<mode_name> mode: Der Datenstrom/die Schaltung wendet Effekte an, die für den <ausgewählten mode_name> Modus spezifisch sind.

Streaming-Pins müssen den unformatierten und/oder Standardmodus unterstützen. Streaming-Pins können optional andere <mode_name> modes unterstützen.

In einem zusammengesetzten Endpunkt kann es möglich sein, dass der aufsteigende Schaltkreis mehrere Modi unterstützt, und dass die Downlevel-Schaltungen nur RAW und/oder DEFAULT unterstützen.

Beispiel für einen Endpunkt mit zwei Schaltkreisen:

  • Die Downlevel-Pin der Aufwärtsschaltung unterstützt die Modi und zugehörigen Formate m1{f1,f2} und m2{f3,f4}, d. h., 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 bei dem Hochstromkreis um einen Einzelstromkreis handelt.

  • Der Uplevel-Pin des Downlevel-Schaltkreises unterstützt den Standardmodus{f1,f2,f3}.

In diesem Fall wird der Modus des Datenstroms von <mode_name> Modus in den Standardmodus konvertiert, wobei die gleichen Samplingraten beibehalten werden.

m1/f1 auf > Voreinstellung/f1

m1/f2 auf > Standardwert/f2

m2/f3 auf > Standard/f3

Ungültiger Eintrag: m2/f4 bis > None

Die Moduszuordnung erfolgt durch den Treiber mithilfe von ACX. In der obigen Tabelle ist der letzte Eintrag ungültig, der Pin der Abwärtsebene des Schaltkreises sollte den m2/f4 als Option für die unterstützten Formate entfernen. Beachten Sie, dass dies umgekehrt geschehen könnte, d. h., der Pin der Downlevel-Schaltung im höheren Level hätte auch f4 und f5 unterstützen können. In diesem Fall wurde "default-f4" unterstützt, die Standard-f5 jedoch nicht. In einem solchen Fall ist der Uplevel-Pin des Downlevel-Schaltkreises dafür verantwortlich, m?/f5 nicht als Option aus der Liste aufzulisten. Weitere Abschnitte unten erläutern diesen Prozess.

Formatieren von Verhandlungen

Bevor ACX die Audioschnittstellen der Schaltungen ermöglicht, die das zusammengesetzte Gerät bilden, wird sichergestellt, dass die Schaltkreise den Modus/die Formate der Audiodaten aushandeln können. ACX führt diese Schaltkreisbenachrichtigung durch Aufrufen des kompositen Initialisierungs-Rückrufs auf allen Schaltungen des Komposits aus. Die Sequenz ist von der unteren Ebene (Geräteseite) bis zur oberen Ebene (Systemseite). Schaltkreise haben die Möglichkeit, ihre Formate während dieser Phase zu aktualisieren.

Anzeige des Bedienfelds im Geräteformat

Die aktuelle Soundsteuerungslogik zeigt die Geräteformatliste wie folgt an:

  • Wenn das Audiogerät ein Audio-Engine-Element unterstützt, ist die Liste der Datenformate, die in der Systemsteuerung angezeigt wird, die Gerätedatenformatliste, d. h. die Datenformatliste, die an den Downlevel-Anschluss angefügt ist (der mit dem Ausgabe-Anschluss des Audio-Engine-Elements verbunden ist).
  • Wenn das Audiogerät kein Audio-Engine-Element unterstützt, ist die Liste der Datenformate, die in der Systemsteuerung angezeigt wird, die Streaming-Pin-Datenformatliste, d. h. die Datenformatliste, die an den Uplevel-Pin angefügt wurde.

Automatische Erstellung von Streams mit mehreren Schaltkreisen auf niedrigerer Ebene

ACX verwendet ACXSTREAMBRIDGE-Objekte, die einem Downlevel-Bridge-Pin zugeordnet sind, um die Erstellungsanfrage für Datenströme automatisch an entfernte Schaltungen weiterzuleiten.

Wenn eine Client-App einen Datenstrom erstellt, wird diese Anforderung zuerst von einem Streaming-Pin empfangen. ACX benachrichtigt den Treiber, der den Streaming-Pin besitzt, über die Anforderung zur Erstellung eines Datenstroms mithilfe des bereitgestellten Rückrufs, der zum Zeitpunkt der Schaltkreiserstellung 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 die Kontrolle zurückerhält, überprüft es, ob diese Erstellungsanforderung an die nächste, untergeordnete Schaltung weitergeleitet werden muss. Optionalerweise kann der Treiber die Erstellungsanforderung an den nächsten (Downlevel)-Schaltkreis weiterleiten, bevor er vom Erstellungs-Stream-Rückruf zurückkehrt. Die letztere Option ermöglicht es dem Treiber, alle nachträglichen Vorgänge auszuführen, nachdem abwärtskompatible Schaltkreise die Möglichkeit hatten, ihre Erstellungsanforderungen zu verarbeiten.

ACX verwendet die folgende Standardlogik für die Datenstromerstellung:

  • Wenn es keinen Downlevel-Bridge-Pin gibt, ist alles erledigt.
  • Wenn der Treiber den Datenstrom bereits manuell einem ACXSTREAMBRIDGE zugeordnet hat, ist alles erledigt.
  • Wenn der Pin der Downlevel-Brücke keinen ACXSTREAMBRIDGE für den angegebenen MODUS hat, schlägt die Anforderung fehl.
  • ACX fügt den neuen Stream hinzu, den der Treiber mit der abgerufenen ACXSTREAMBRIDGE erstellt hat.

AcXSTREAMBRIDGE fungiert als Multi-In/Singleout. Solange ein In-Stream vorhanden ist, hält ACXSTREAMBRIDGE einen Out-Stream vorhanden. Der Out-Stream wird nur gelöscht, wenn der letzte In-Stream entfernt wird. ACXSTREAMBRIDGE verwendet die mit dem Downlevel-Bridge-Pin verknüpften ACXDATAFORMATLISTs, um den Modus und das Format für die entfernte Schaltung festzulegen.

ACXSTREAMBRIDGE verwendet die folgende Logik, um den Modus und das Datenformat des Outstreams auszuwählen:

  • Wenn MODE für out-stream nicht angegeben ist, überprüfen Sie, ob eine Standardformatliste vorhanden ist.

  • Wenn MODE für out-stream nicht angegeben ist und die Standardformatliste nicht vorhanden ist, überprüfen Sie, ob eine "rohe" Formatliste vorhanden ist.

  • Wenn MODE NULL_GUID ist, überprüfen Sie, ob eine Formatliste mit dem MODUS des ersten Datenstroms verknüpft ist.

  • Wenn MODE angegeben ist, überprüfen Sie, ob für diesen MODUS eine Formatliste vorhanden ist.

  • Wenn die Formatliste gefunden wird, rufen Sie das Standardformat aus der Formatliste ab.

  • Wenn das Format nicht gefunden wird, verwendet ACXSTREAMBRIDGE das Format des ersten Eingabedatenstroms.

  • ACXSTREAMBRIDGE erstellt eine Anforderung zur Erstellung eines Datenstroms mit ACXTARGETSTREAM, wobei der abgerufene MODUS und das Datenformat wie folgt verwendet werden:

    • Wenn MODUS angegeben wurde, wird dieser MODUS verwendet.
    • Wenn MODE NULL_GUID ist, wird der MODUS des ersten Streams verwendet.
    • Sonst wird kein Modus verwendet.

ACX kümmert sich um das Löschen/Schließen des Zieldatenstroms, wenn der letzte In-Stream entfernt wird.

Eine weitere Funktion des ACXSTREAMCIRCUIT besteht darin, automatisch einen Stream-Zustand entlang der Streaming-Kette zu propagieren.

Ein Treiber hat die Möglichkeit, die Erstellung der Remotestream-Brücke des Standardkreises durch Aufrufen von AcxCircuitInitDisableDefaultStreamBridgeHandling oder durch manuelles Zuordnen des ACXSTREAM-Objekts zu einem ACXSTREAMBRIDGE-Objekt zu deaktivieren, bevor die Steuerung an ACX zurückgegeben wird. Im letzteren Fall wird der Remotedatenstrom erstellt, bevor der Treiber von der Rückruffunktion EVT_ACX_CIRCUIT_CREATE_STREAM "create-stream" zurückkehrt.

Für Schaltkreise, die mehrere Aufnahme- und Render-Pins verwenden, wie z. B. host/offload/loopback/kws, also wenn das Audio-Engine-Element unterstützt wird, muss der Treiber eine Stream-Brücke ohne spezifizierte Modi erstellen und die eingehenden ACXSTREAM-Objekte beim Verarbeiten des Create-Stream-Callbacks manuell zur Stream-Brücke hinzufügen.

Weitere Informationen zur Erstellung von Stream-Brücken finden Sie unter:

Automatische Mehrfachstromweiterleitung des Datenstromzustands zu nachgelagerten Datenströmen

ACXSTREAMBRIDGE propagiert automatisch eine Datenstromstatusanfrage auf eine niedrigere Ebene zu entfernten Schaltungen. Wenn sich der Status eines Datenstroms ändert, berechnet ACXSTREAMBRIDGE den gemischten Zustand des Outstreams und sendet diese neue "stream-state"-Anforderung mithilfe des ACXTARGETSTREAM an den Remotedatenstrom.

Der ACXSTREAM zusammen mit acXSTREAMBRIDGE verwendet die folgende Logik:

  • Ändern Sie zuerst die Status der Uplevel-Datenströme in diesen Szenarien:

    • Render && Wechsel von Stop zu >Run
    • Erfassen && wechseln von "Run-Stop>"
    • Andere && wechseln von Run-Stop
  • Ändern Sie die Status der höherstufigen Datenströme als letztes in den folgenden Szenarien:

    • Render && Wechsel von Ausführen-Stop>
    • Erfassen && Wechsel von Stop zu Run
    • Andere && von Stop zu Run

Treiber haben die Möglichkeit, diese Reihenfolge über eine Konfigurationseinstellung rückgängig zu machen.

Hinweis

Für einen Treiber, Schaltkreis oder Stream ist es erforderlich, den Übergang des Streams von "Laufen" zu "Stoppen" immer erfolgreich durchzuführen. Andererseits ist es zulässig, dass ein Treiber es nicht schafft, den Übergang von "Stopp" zu "Laufen" rückgängig zu machen.

Siehe auch

ACX-Schaltkreise

Übersicht über ACX-Audioklassenerweiterungen

ACX Multi stack cross driver communications

Zusammenfassung von ACX-Objekten