Angeben der Topologie

Nachdem ein Hardwarehersteller entschieden hat, welche Miniporttreiber für die Wave- und MIDI-Geräte geschrieben werden sollen, besteht der nächste Schritt darin, die Kernelstreamingtopologie (KS) dieser Geräte darzustellen. Die KS-Topologie besteht aus einer Reihe von Datenstrukturen, die die Datenpfade beschreiben, denen Audio- oder MIDI-Streams folgen, während sie durch jedes Gerät fließen. Über diese Topologie macht der Treiber die Steuerknoten (z. B. Lautstärkeregelung) verfügbar, die sich entlang der einzelnen Pfade befinden. In der Regel verwendet eine Anwendung dieXxx-Funktionen des Windows-Multimediamixers, um die Topologie zu untersuchen, indem sie die Sequenz der Knoten entlang der einzelnen Pfade aufzählt. Beispielsweise kann eine Anwendung nach dem Ermitteln eines Steuerknotens auf Volumeebene die Volumeebene auf diesem Knoten festlegen. Weitere Informationen zu Windows-Multimedia finden Sie in der Dokumentation zu Microsoft Windows SDK. Weitere Informationen zur Darstellung von KS-Topologien durch dieXxx-Funktionen des Mixers finden Sie unter Kernel Streaming Topology to Audio Mixer API Translation.

PortCls bietet sechs Porttreiber: WavePci, WaveCyclic, WaveRT, MIDI, DMus und Topologie. (WaveRT ist seit Windows Vista verfügbar und wird empfohlen.) Der Topologieporttreiber steuert den Teil der Audioadapterschaltung, der die Renderingstreams von den Wave- und MIDI-Geräten mischt. Außerdem wird die Auswahl von Aufnahmedatenströmen von Eingabebuchsen gesteuert. Trotz seines etwas irreführenden Namens verkörpert der Topologieporttreiber nicht die gesamte Topologie eines Audioadapters, obwohl er in der Regel einen großen Teil davon enthält. Die anderen Porttreiber tragen die restlichen Teile der Topologie des Adapters bei.

Jeder Porttreiber wird mit einem entsprechenden Miniporttreiber gekoppelt, um einen KS-Filter zu bilden, der ein bestimmtes Gerät (Wave, MIDI oder Mixer) auf dem Audioadapter darstellt, wie in der folgenden Tabelle gezeigt.

Filtertyp BESCHREIBUNG

WaveXxx-Filter

Stellt ein Wellengerät dar, das einen Wellenausgangsstream in ein analoges Audiosignal konvertiert oder ein analoges Audiosignal in einen Welleneingangsstream konvertiert.

MIDI- oder DMus-Filter

Stellt ein MIDI-Gerät dar, das einen MIDI-Stream wiedergibt oder erfasst.

Topologiefilter

Stellt die Mixerschaltung des Adapters dar.

Der Miniporttreiber implementiert die gerätespezifischen Funktionen des Filters, einschließlich der Definition des Teils der Adaptertopologie, den das Gerät umfasst. Der Porttreiber kümmert sich um die generischen Filtervorgänge, einschließlich der Kommunikation mit dem Betriebssystem, für jeden Filtertyp.

Jeder Filter verfügt über einen oder mehrere KS-Pins , die als Pfade für Audiodatenströme zum Eingeben und Verlassen des Filters dienen. In der Regel sind die Pins des Topologiefilters über festverkabelte Verbindungen in der Adapterschaltung an die Pins auf den Wellen-, MIDI- und DMus-Filtern gebunden. Diese Filter und ihre Verbindungen bilden zusammen ein KS-Filterdiagramm, das die Topologie des Adapters verkörpert.

Die folgende Abbildung zeigt die Topologie eines Beispielaudioadapters.

Diagramm, das die Topologie eines Audioadapters mit Verbindungen zwischen MIDI-, WaveXxx- und Topologiefiltern zeigt.

In der vorherigen Abbildung besteht die Topologie auf der obersten Ebene aus den Verbindungen zwischen den MIDI-, WaveXxx- und Topologiefiltern. Darüber hinaus verfügt jeder Filter über eine eigene interne Topologie, die aus den Datenpfaden durch den Filter und den Steuerungsknoten besteht, die sich entlang der einzelnen Pfade befinden. Die Knoten werden wie in der folgenden Tabelle dargestellt bezeichnet.

Bezeichnung BESCHREIBUNG KS Node-Type GUID

Synth

Synthesizerknoten

KSNODETYPE_SYNTHESIZER

DAC

Digital-to-Audio-Konverterknoten

KSNODETYPE_DAC

ADC

Analog-zu-Digital-Konverterknoten

KSNODETYPE_ADC

Lautstärke

Steuerknoten auf Volumeebene

KSNODETYPE_VOLUME

Mute

Stummschalten des Steuerelementknotens

KSNODETYPE_MUTE

Sum

Summierungsknoten

KSNODETYPE_SUM

MUX

Multiplexer-Knoten

KSNODETYPE_MUX

In der vorherigen Abbildung stellen die Pins auf der linken Seite des Audioadapters die logischen Verbindungen (nicht physische Verbindungen) dar, über die Datenströme vom Systembus in den Adapter gelangen oder vom Adapter in den Systembus gelangen. Diese Pins sind logisch mit Quell- und Senkenpins in anderen Filtern verbunden (nicht dargestellt), die sich außerhalb des Adapters befinden. In der Regel handelt es sich bei diesen Filtern um Softwaremodule, die zusammen mit der Adaptertopologie ein größeres Filterdiagramm bilden, dessen Topologie von Anwendungen mithilfe derXxx-Funktionen des Mixers untersucht werden kann. Beispielsweise ist der Pin mit der Bezeichnung "PCM Wave Out" in der vorherigen Abbildung logisch mit der Benutzermodus-Audio-Engine in Windows verbunden. Diese logischen Verbindungen werden von DMA-Übertragungen über den Systembus verwaltet.

Im Gegensatz dazu sind die Pins am linken Rand des Topologiefilters physisch mit Pins der MIDI- und WaveXxx-Filter verbunden. Diese Verbindungen sind festverkabelt und können nicht durch Software geändert werden.

Die Bridge-Pins auf der rechten Seite des Audioadapters stellen Audiobuchsen am Systemgehäuse dar. Diese Pins werden als Brückenstifte bezeichnet, da sie die Grenze zwischen dem KS-Filterdiagramm und der Außenwelt überbrücken.

Filter, Pins und Knoten verfügen in der Regel über Eigenschaften, auf die Clients (Kernelmoduskomponenten oder Benutzermodusanwendungen) des Audiotreibers zugreifen können. Ein Client kann eine KS-Eigenschaftsanforderung an einen Filter, Anheften oder Knoten senden, um den aktuellen Wert einer Eigenschaft abzufragen oder den Eigenschaftswert zu ändern. Beispielsweise verfügt ein Steuerungsknoten auf Volumeebene über eine KSPROPERTY_AUDIO_VOLUMELEVEL-Eigenschaft , die ein Client über eine KS-Eigenschaftsanforderung ändern kann. Ein Summierungsknoten ist ein Beispiel für einen Knotentyp, der in der Regel über keine Eigenschaften verfügt.

Der Einfachheit halber stellt der WaveXxx-Filter in der vorherigen Abbildung nur einen einzelnen Pin zum Akzeptieren eines PCM-Wellenausgabestreams vom Systembus bereit. Im Gegensatz dazu bieten einige Wave-Geräte mehrere Pins für die PCM-Wellenausgabe und enthalten Hardware zum internen Mischen der Streams, die in die Pins gelangen. Diese Geräte bieten Hardwarebeschleunigung für Anwendungen, die DirectSound verwenden, indem sie PCM-Streams akzeptieren, die aus den Soundpuffern der Anwendungen wiedergegeben werden. Damit DirectSound diese Pins verwenden kann, müssen sie zusätzliche Knoten für die zweidimensionale (2D) und dreidimensionale (3D)-Verarbeitung bereitstellen, wie unter DirectSound-Hardwarebeschleunigung in WDM-Audio beschrieben.

Diese Art der Hardwarebeschleunigung wird in Windows Server 2003, Windows XP, Windows 2000 und Windows Me/98 unterstützt, in Windows Vista jedoch nicht. Windows Vista verwendet die Hardwarebeschleunigungspins auf älteren Wave-Geräten nicht.

In der vorherigen Abbildung filtern die physischen Verbindungen zwischen MIDI, WaveXxx und Topologie alle analogen Transportaudiosignale. Ein anderes Topologiegerät könnte jedoch einen ähnlichen Effekt erzielen, indem digitale Ausgabestreams von den MIDI- und Wave-Geräten akzeptiert, digital gemischt und die digitale Mischung in ein analoges Ausgangssignal konvertiert wird.

Der Pin "Non-PCM Wave Out" in der unteren linken Ecke der vorherigen Abbildung akzeptiert einen Nicht-PCM-Ausgabedatenstrom in einem S/PDIF-Passthroughformat, z. B. AC-3-over-S/PDIF oder WMA Pro-over-S/PDIF. Mit einem dieser Formate überträgt das Gerät die komprimierten Daten einfach über den S/PDIF-Link, ohne die Daten zu decodieren. Aus diesem Grund enthält der Datenpfad zum Pin "S/PDIF Out" in der unteren rechten Ecke der vorherigen Abbildung keine Volume- oder Stummschaltungsknoten. Weitere Informationen zu Nicht-PCM-Audioformaten und S/PDIF-Passthroughübertragung finden Sie unter Unterstützen von Nicht-PCM-Wellenformaten und S/PDIF Pass-Through Übertragung von Nicht-PCM-Streams.

Der Miniporttreiber präsentiert seine Topologie dem Porttreiber in Form einer PCFILTER_DESCRIPTOR-Struktur . Diese Struktur beschreibt alle Pins und Knoten des Filters und gibt an, wie die Pins und Knoten miteinander verbunden sind.

Anstatt einen monolithischen Topologiefilter zu entwerfen, wie in der vorherigen Abbildung dargestellt, kann die Mixerschaltung im Audioadapter in mehrere Topologiefilter partitioniert werden. In der vorherigen Abbildung können beispielsweise die Datenpfade, die die Lautsprecher antreiben, als ein Topologiefilter implementiert werden, und die Datenpfade, die Audiodaten von Eingabegeräten erfassen, können als separater Topologiefilter implementiert werden. Wenn die Datenpfade in einem bestimmten Topologiefilter nicht verwendet werden, kann dieser Teil des Adapters ausgeschaltet werden, ohne den gesamten Adapter zu deaktivieren. Weitere Informationen finden Sie unter Dynamische Audiountergeräte.