DSSPEAKER_DIRECTOUT Lautsprecherkonfiguration

Hinweis Diese Informationen gelten für Windows XP und frühere Betriebssysteme. Ab Windows Vista sind IDirectSound::GetSpeakerConfig und IDirectSound::SetSpeakerConfig veraltet.

Ein Anwendungsprogramm kann die DirectSound-Lautsprecherkonfiguration in den DirectOut-Modus ändern, indem die IDirectSound::SetSpeakerConfig-Methode aufgerufen wird, wobei der Lautsprecherkonfigurationsparameter auf DSSPEAKER_DIRECTOUT festgelegt ist (siehe Microsoft Windows SDK Dokumentation). Dies gibt eine lautsprecherlose Konfiguration an, bei der die Kanäle im Wiedergabestream der Anwendung direkt an den Audioadapter ausgegeben werden, ohne als Sprecherpositionen interpretiert zu werden. Der Eingabedatenstrom kann jedoch weiterhin durch Konvertierung der Stichprobenrate, Dämpfung, Filterung und andere Verarbeitungstypen geändert werden, die keine Annahmen über die Zuweisung von Sprechern zu Kanälen erfordern.

Sobald sie wirksam wird, ist die einstellung DSSPEAKER_DIRECTOUT Lautsprecherkonfiguration global und wirkt sich auf das gesamte Audiogerät aus. Alle anschließend ausgeführten Audioanwendungen unterliegen der neuen Einstellung, bis DirectSound die Einstellung erneut ändert.

Im Direct-Out-Modus rendert das Audiogerät den ersten Kanal für den ersten Ausgabeconnector auf dem Gerät, den zweiten Kanal für die zweite Ausgabe auf dem Gerät usw. Dies ermöglicht es einer Audioerstellungsanwendung, Mehrkanaldaten direkt an ein Gerät wie einen externen Mixer oder ein Audiospeichergerät (Festplatte, ADAT usw.) auszugeben. Beispielsweise können die Kanäle in einem Stream mit 48 Kanälen wie in der folgenden Tabelle dargestellt zugewiesen werden.

Kanalnummerinhalt 0

Vocal

1

Schlagzeug

2

Gitarre

3

Bass

...

47

Klavier

Für diese Art von Audiorohdaten sind Sprecherpositionen bedeutungslos, und das Zuweisen von Sprecherpositionen zu den Eingabe- oder Ausgabestreams kann unerwünschte Nebenwirkungen verursachen. Beispielsweise kann eine Komponente wie KMixer unangemessen eingreifen, indem sprecherspezifische Effekte wie 3D-Virtualisierung oder Dolby Surround Pro Logic-Codierung auf den Stream angewendet werden. Beachten Sie, dass die Anzahl der Rohdatenkanäle nicht durch die Anzahl der Bits in der Kanalmaske beschränkt ist.

Selbst ein Gerät, das nicht speziell für die Audiobearbeitung entwickelt wurde, sollte in der Regel eine KSPROPERTY_AUDIO_CHANNEL_CONFIG Set-Property-Anforderung akzeptieren, um die Lautsprecherkonfiguration in KSAUDIO_SPEAKER_DIRECTOUT zu ändern. Im Allgemeinen sollte ein Gerät verhindern, dass die Anforderung fehlschlägt, es sei denn, es kann irgendwie überprüfen, ob seine Ausgaben mit Lautsprechern verbunden sind und nicht extern für andere Zwecke verwendet werden können (z. B. als Eingaben für einen externen Mixer).

Eine Anwendung, die den Direct Out-Modus verwendet, wird in der Regel für ein bestimmtes Hardwaregerät geschrieben. Dadurch kann die Anwendung im Voraus wissen, welche Direct Out-Datenformate das Gerät unterstützt, einschließlich der Anzahl der Kanäle und wie die Daten in diesen Kanälen interpretiert werden sollen. Dieses Wissen ist erforderlich, denn wenn eine Anwendung IDirectSound::GetSpeakerConfig auf einem Gerät aufruft, das im Direct-Out-Modus konfiguriert ist, bestätigt das Gerät lediglich, dass es sich in diesem Modus befindet; es stellt keine zusätzlichen Informationen zur Anzahl der Kanäle in den Streamformaten bereit, die im Direct-Out-Modus unterstützt werden. (Diese Informationen können jedoch durch Senden einer KSPROPERTY_AUDIO_MIX_LEVEL_CAPS get-property-Anforderung an den Supermixerknoten auf dem Mixer-Pin des Geräts abgerufen werden. Weitere Informationen finden Sie unter DirectSound Node-Ordering Requirements.)

Wenn Sie das Wellenformat für einen Direct Out-Stream angeben, sollte eine Anwendung den dwChannelMask-Member der WAVEFORMATEXTENSIBLE-Struktur auf den Wert KSAUDIO_SPEAKER_DIRECTOUT festlegen, der null ist. Eine Kanalmaske von 0 (null) gibt an, dass keine Sprecherpositionen definiert sind. Wie immer wird die Anzahl der Kanäle im Stream im Format.nChannels-Element angegeben.

Hardwarehersteller haben die Möglichkeit, die DirectSound-Hardwarebeschleunigung zu unterstützen, wenn ihre Geräte im Direct-Out-Modus konfiguriert sind. Eine DirectSound-Anwendung kann einen Direct-Out-Stream über einen der Mischstifte des Geräts wiedergeben, sofern verfügbar. Sobald alle verfügbaren Hardware-Pininstanzen erschöpft sind, durchlaufen alle neuen Streams stattdessen KMixer.

Beim Mischen von Streams für ein Gerät, das im Direct-Out-Modus konfiguriert ist, wendet KMixer eine 1:1-Zuordnung zwischen den Kanälen der Eingabestreams aus den Anwendungen und den Kanälen des Mixstreams an, den es an das Gerät ausgibt. Dies bedeutet, dass, wenn die Anwendung mehrere direct-out-Streams generiert, die die gleiche Anzahl von Kanälen aufweisen, z. B. jeder Kanal N der Ausgabemischung einfach die Summe der Kanäle N aller Streams ist, die in KMixer gelangen.

Beim Mischen mehrerer Direct-Out-Streams, die sich in der Anzahl der darin enthaltenen Kanäle unterscheiden, ist der Mischalgorithmus von KMixer etwas komplexer. In diesem Fall ist jeder Kanal N der Mischung die Summe der Kanäle N aller Eingabestreams, die über einen Kanal N verfügen. Wenn KMixer beispielsweise Quad- und Stereo-Eingangsstreams zu einem Quad-Ausgangsmix mischt, sind die Kanäle 0 und einer der Ausgabemischung die Summen der Kanäle 0 bzw. eins der Eingangs-Stereo- und Quadstreams. Der Stereoeingangsstream trägt jedoch nichts zu den Kanälen zwei und drei der Mischung bei, die ausschließlich aus den letzten beiden Kanälen des Quad-Eingangsstroms stammen.

Eine Anwendung, die versucht, eine der folgenden Aktionen auszuführen, riskiert unvorhersehbares Verhalten:

  • Wiedergeben eines Datenstroms, der nicht im Direct-Out-Format vorliegt, über ein Gerät, das im Direct-Out-Modus konfiguriert ist.

  • Wiedergeben eines direct-out-Datenstroms über ein Gerät, das nicht im Direct-Out-Modus konfiguriert ist.

In einem dieser Fälle vermeidet KMixer, dass der Versuch, den Stream zu öffnen, einfach fehlschlägt. Stattdessen wird versucht, die scheinbare Inkompatibilität mithilfe des oben beschriebenen 1:1-Zuordnungsalgorithmus zu behandeln. Der Benutzer kann mit dem Ergebnis zufrieden sein oder nicht. Es kann nicht erwartet werden, dass andere Audiokomponenten diese Fälle auf die gleiche Weise behandeln wie KMixer. Beispielsweise sollte der Treiber für ein Gerät, das im Direct-Out-Modus konfiguriert ist, bei dem Versuch fehlschlagen, einen Hardwarepuffer für einen Ausgabedatenstrom zu öffnen, der nicht im Direct-Out-Format vorliegt und umgekehrt.

Eine Audioerstellungsanwendung muss möglicherweise zulassen, dass der Benutzer auf die Daten lauschen kann, die sie in die ersten Kanäle des Ausgabestreams gemischt hat, aber die Rohdaten ignorieren, die noch in den verbleibenden Kanälen des Datenstroms enthalten sind. Das Verhalten von KMixer macht dies einfach. Wenn beispielsweise ein Wiedergabestream mit 24 Kanälen eine Stereomischung in den Kanälen 0 und 1 und Rohdaten in den Kanälen 2 bis 23 enthält, führt die Anwendung folgendes aus:

  • Konfiguriert das Zielaudiogerät (dies ist nicht notwendigerweise das Gerät, das die Anwendung zum Bearbeiten des Datenstroms verwendet) im Stereomodus, indem SetSpeakerConfig mit DSSPEAKER_STEREO aufgerufen wird.

  • Ändert dwChannelMask in der WAVEFORMATEXTENSIBLE-Struktur des Wiedergabedatenstroms in KSAUDIO_SPEAKER_STEREO lässt Format.nChannels jedoch auf 24 festgelegt, d. h. die Gesamtzahl der Kanäle im Stream.

KMixer mischt nur die Stereokanäle des Wiedergabestreams, die in der Kanalmaske beschrieben sind, und verwirft die verbleibenden 22 Kanäle, die Rohdaten enthalten. Beachten Sie, dass änderungen an der DirectSound-Lautsprecherkonfigurationseinstellung erst wirksam werden, wenn das aktuelle DirectSound-Objekt zerstört und eine andere erstellt wird (siehe Anwenden Speaker-Configuration Einstellungen).