Anwenden von Speaker-Configuration Einstellungen

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

DirectSound verfolgt die aktuelle Einstellung für die Lautsprecherkonfiguration in der Registrierung und wendet diese Einstellung bei jeder Erstellung eines neuen DirectSound-Geräts auf die Audiohardware an.

Ein Anwendungsprogramm kann die systemweite Lautsprecherkonfiguration ändern, indem die IDirectSound::SetSpeakerConfig-Methode aufgerufen wird, die die Einstellung für die Sprecherkonfiguration in der Registrierung aktualisiert. Die -Methode versucht auch, die neue Einstellung sofort auf die Hardware anzuwenden, obwohl Audiogeräte in der Regel keine Lautsprechereinstellungen ändern können, während das DirectSound-Objekt vorhanden ist. Eine Liste der Sprecherkonfigurationen, die DirectSound für diese Methode definiert, finden Sie unter Übersetzen Speaker-Configuration Anforderungen.

Ein Benutzer kann die Konfiguration über das Dialogfeld Sprecherkonfiguration auf der Seite Multimediaeigenschaften (mmsys.cpl) in Systemsteuerung ändern. Führen Sie beispielsweise die folgenden Schritte aus, um das Dialogfeld "DirectSound-Lautsprecherkonfiguration" unter Windows XP zu suchen:

  1. Doppelklicken Sie in Systemsteuerung auf das Symbol Sounds und Audiogeräte.

  2. Wählen Sie auf der Registerkarte Audio ein Gerät aus der Liste Soundwiedergabe aus.

  3. Wählen Sie die Schaltfläche Advanced (Erweitert).

  4. Wählen Sie die Registerkarte Lautsprecher aus.

An diesem Punkt sollte die Bezeichnung Lautsprechereinrichtung neben einer Liste der Lautsprecherkonfigurationen angezeigt werden, aus denen Sie auswählen können.

DirectSound verwendet eine KSPROPERTY_AUDIO_CHANNEL_CONFIG Set-Property-Anforderung, um die Sprecherkonfigurationsinformationen an einen 3D-Knoten oder DAC-Knoten (KSNODETYPE_3D_EFFECTS oder KSNODETYPE_DAC) in einem Audiofilterdiagramm zu senden. Bei einem 3D-Knoten ist das Ziel für die Eigenschaftenanforderung tatsächlich der Pin (3D-Stream-Objekt), der den Knoten speist. Bei einem DAC-Knoten ist das Ziel das Filterobjekt, das den DAC-Knoten enthält. In beiden Fällen ist die Einstellung für die 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.

Beachten Sie, dass nur Versionen von DirectSound, die im Lieferumfang von Windows Me enthalten sind, und mit Windows XP und höher Lautsprecherkonfigurationseigenschaftenanforderungen an DAC-Knoten senden – und frühere Versionen von DirectSound dieses Feature nicht unterstützen. Alle Versionen von DirectSound senden diese Anforderungen jedoch an 3D-Knoten.

Wenn ein Anwendungsprogramm mehr als einen 3D-Knoten erstellt hat, sendet DirectSound Sprecherkonfigurationsanforderungen nur an den ersten zu erstellenden 3D-Knoten.

DirectSound sendet jedes Mal, wenn eine Anwendung ein DirectSound-Objekt erstellt oder die IDirectSound::SetSpeakerConfig-Methode aufruft, Lautsprecherkonfigurationsanforderungen an die 3D- und DAC-Knoten. Audiogeräte können in der Regel ihre Lautsprecherkonfiguration nicht ändern, während sie aktive Streams verwalten, und DirectSound versucht, diese Einschränkung nach Möglichkeit zu vermeiden. Wenn Sie beispielsweise ein DirectSound-Objekt erstellen, sendet DirectSound die Sprecherkonfigurationsanforderungen nach dem Instanziieren des Filters, aber vor dem Instanziieren von Pins am Filter, d. h. vor dem Erstellen von Streams.

Diese Einschränkung ist im Fall eines Aufrufs von SetSpeakerConfig schwieriger zu vermeiden. Wenn eine Anwendung SetSpeakerConfig aufruft, schlägt der Adaptertreiber in der Regel die Sprecherkonfigurationsanforderung von DirectSound fehl. Dies liegt daran, dass das DirectSound-Objekt bereits vorhanden ist, was bedeutet, dass das Gerät bereits über aktive Streams verfügt, die verwaltet werden müssen.

In diesem Fall verfügt der Adaptertreiber über zwei Optionen für den Umgang mit einer Sprecherkonfigurationsanforderung, bei der ein Fehler aufgetreten ist:

  • Der Treiber kann sich die angeforderte Konfiguration merken und anwenden, sobald alle Datenströme zerstört werden.

  • Der Treiber kann die Anforderung ignorieren und sich auf DirectSound verlassen, um beim nächsten Erstellen eines DirectSound-Objekts eine weitere Sprecherkonfigurationsanforderung zu senden.

Die erste Option bietet eine bessere Benutzererfahrung, denn wenn der Benutzer eine neue Einstellung über das Dialogfeld für die Sprecherkonfiguration auswählt, wird die Änderung sofort in allen Anwendungen wirksam– nicht nur in DirectSound-Anwendungen. (Wenn Audioanwendungen zum Zeitpunkt der Auswahl der neuen Einstellung ausgeführt werden, wird die Änderung natürlich zurückgestellt, bis alle Audioanwendungen beendet werden.) Mit der zweiten Option wird die Änderung jedoch erst wirksam, wenn eine DirectSound-Anwendung ausgeführt wird. Wenn beispielsweise eine Anwendung, die die Windows-Multimedia-WaveOut-API verwendet, die erste Anwendung ist, die nach dem Ändern einer Systemsteuerung-Einstellung ausgeführt wird, fragt sich der Benutzer möglicherweise, warum die neue Einstellung keine offensichtlichen Auswirkungen hat.

Als Reaktion auf eine an einen 3D- oder DAC-Knoten gesendete Lautsprecherkonfigurationsanforderung aktualisiert ein typischer Adaptertreiber die Lautsprecherkonfiguration in der Audiohardware nur, wenn derzeit keine Pins von einer Audioanwendung instanziiert werden. Das bedeutet, dass der Treiber möglicherweise alle ausstehenden Änderungen an der Lautsprecherkonfiguration des Audiogeräts auf einen späteren Zeitpunkt zurückstellen muss, wenn eine waveOut-Anwendung beispielsweise einen oder mehrere Pins geöffnet hat, wenn eine zweite Anwendung DirectSoundCreate aufruft.

Wenn Ihr Treiber eine Anforderung zum Ändern der Lautsprecherkonfiguration des Geräts nicht erfüllen kann, sollte die Anforderung einfach fehlschlagen. Wenn eine Sprecherkonfigurationsanforderung während der DirectSound-Objekterstellung oder ein SetSpeakerConfig-Aufruf fehlschlägt, schlägt die DirectSound-Objekterstellung oder der SetSpeakerConfig-Aufruf nicht fehl.

Zur Startzeit initialisiert ein Audioadaptertreiber die Lautsprecherkonfiguration der Hardware auf die Standardeinstellung, die in der Regel Stereo ist. Sobald eine Anwendung ein DirectSound-Objekt erstellt, wendet DirectSound die in der Registrierung gespeicherte Einstellung auf die Hardware an. Ein Anwendungsprogramm muss ein DirectSound-Gerät erstellen, bevor es SetSpeakerConfig aufrufen kann, um die Einstellung für die Lautsprecherkonfiguration in der Registrierung zu ändern. Diese Registrierungseinstellung wird jedoch in der Regel erst in der Hardware wirksam, nachdem das DirectSound-Gerät freigegeben und ein zweites DirectSound-Gerät erstellt wird.

Unmittelbar nach der Installation eines Audiogeräts oder wenn ein Lautsprecherkonfigurationsfehler auftritt, wird die DirectSound-Lautsprecherkonfiguration standardmäßig auf Stereo festgelegt.