Steuerelemente für Sitzungslautstärke
Wie bereits erläutert, können WASAPI-Clients die Lautstärke jeder Audiositzungeinzeln steuern. WASAPI wendet die Volumeeinstellung für eine Sitzung einheitlich auf alle Datenströme in der Sitzung an. Jeder Lautstärkepegel ist ein Wert im Bereich von 0,0 bis 1,0, wobei 0,0 die Stille angibt und 1,0 die volle Lautstärke angibt (keine Dämpfung).
Ein Client erstellt implizit eine Sitzung durch Zuweisen des ersten Datenstroms zu dieser Sitzung. Die Standardvolumeebene der neuen Sitzung ist 1.0. Wie bereits erwähnt, kann der Benutzer die Lautstärke der Sitzung über die Benutzeroberfläche eines Steuerelementprogramms (z. B. Sndvol) anpassen, das ein WASAPI-Client ist. Die Steuerelementeinstellungen sind dauerhaft.
Zusätzlich zu den clientgesteuerten Volumeeinstellungen wendet das System seine eigenen Volumeeinstellungen auf Sitzungen an. Diese Einstellungen basieren auf einer Audiorichtlinie und ändern sich dynamisch als Reaktion auf Änderungen in den Datenströmen, die den globalen Audiomix bilden. Weitere Informationen zur Audiorichtlinie finden Sie unter User-Mode Audiokomponenten.
Die Systemsoftware, die die Lautstärkeregelung für jeden Datenstrom implementiert, multipliziert die PCM-Beispiele im Datenstrom mit der effektiven Lautstärkestufe. Die effektive Volumeebene ist das Ergebnis der Multiplikation der Client- und Systemvolumeeinstellungen. Somit ist die resultierende Änderung der Signalamplitude eine lineare Kombination der Client- und Systemlautstärken. Wenn die Clientvolume beispielsweise 0,8 ist und die Systemvolumeebene 0,5 ist, ist die effektive Volumeebene (0,8).(0,5) = 0,4.
Beachten Sie, dass die wahrgenommene Lautstärke nicht linear in Bezug auf Signalamplitude ist. Stattdessen variiert die Lautstärke ungefähr wie der Logarithmus der Lautstärke v:
Lautstärke in Dezibel = 20.log₁₀(v)
Die Einstellung v = 0,5 attenuat somit die Lautstärke des ursprünglichen Signals (das Signal vor der Lautstärke wird angewendet) um 6 Dezibel, das Festlegen v = 0,25 dämpfung des Signals um 12 Dezibel usw. Eine Lautstärkestufe v = 1,0, die 0 Dezibel entspricht, ändert nicht den ursprünglichen Signalpegel.
Audioanwendungen mit Benutzeroberflächen zum Steuern des Lautstärkepegels zeigen in der Regel Schieberegler an, die änderungen der wahrgenommenen Lautstärke erzeugen, die linear proportional zu Änderungen der Schiebereglerposition sind. Um eine lineare Beziehung zwischen wahrgenommener Lautstärke und Schiebereglerposition zu erzeugen, muss die Anwendung eine nichtlineare Beziehung zwischen der Lautstärkestufe v und der Schiebereglerposition definieren. Weitere Informationen finden Sie unter Audio-Tapered Volume Controls.
Wie bereits erläutert, zeigt das Systemlautstärkesteuerungsprogramm Sndvol Lautstärkeregler für die Audiositzungen an, die auf jedem Audiorendergerät wiedergegeben werden. Diese Schieberegler werden im Gruppenfeld mit der Bezeichnung Anwendungen im SndVol-Fenster angezeigt. In der Regel enthält jede Sitzung alle Wiedergabedatenströme aus einem bestimmten Anwendungsfenster. Durch die Schieberegler im Sndvol-Fenster steuern Benutzer die Lautstärke der einzelnen Audioanwendungen.
In der Regel sollte eine Anwendung alle Wiedergabedatenströme derselben Audiositzung zuweisen. WASAPI verhindert nicht, dass eine Anwendung ihre Wiedergabedatenströme unter mehreren Sitzungen verteilt. Die resultierende Verbreitung von Volumenschiebereglern in Sndvol kann benutzer jedoch verwirren.
Als Option kann ein Anwendungsfenster einen Lautstärkeregler anzeigen. Der Anwendungsschieberegler sollte den Zustand des entsprechenden Sndvol-Schiebereglers jederzeit widerspiegeln. Wenn der Benutzer also den Lautstärkegrad ändert, indem er den Schieberegler im Anwendungsfenster bewegt, sollte der entsprechende Schieberegler im Sndvol-Fenster mit dem Anwendungsschieberegler gemeinsam verschoben werden. Wenn der Benutzer den Sndvol-Schieberegler verschiebt, sollte der Anwendungsschieberegler mit dem Sndvol-Schieberegler in Verbindung mit dem Sndvol-Schieberegler verschoben werden.
Um dieses Verhalten zu unterstützen, implementiert WASAPI die ISimpleAudioVolume Schnittstelle. Wenn der Benutzer den Anwendungsschieberegler verschiebt, ruft die Anwendung die ISimpleAudioVolume::SetMasterVolume Methode auf, um die Lautstärke der Sitzung entsprechend anzupassen. Sndvol überwacht die durch diese Methode vorgenommenen Volumeänderungen und spiegelt die Änderungen an den angezeigten Lautstärkereglern wider. Darüber hinaus kann eine Anwendung Benachrichtigungen über Änderungen des Sitzungsvolumens empfangen, die der Benutzer über Sndvol vorgibt. Zu diesem Zweck implementiert die Anwendung eine IAudioSessionEvents Schnittstelle und registriert die Schnittstelle mit WASAPI. Anschließend erhält die Anwendung jedes Mal, wenn der Benutzer die Sitzungsvolebene über Sndvol ändert, einen Benachrichtigungsaufruf über die IAudioSessionEvents::OnSimpleVolumeChanged Methode. Ein Codebeispiel, das eine IAudioSessionEvents- Schnittstelle implementiert, finden Sie unter Audiositzungsereignisse. Ein Codebeispiel, das eine IAudioSessionEvents- Schnittstelle registriert, finden Sie unter Audioereignisse für Legacy-Audioanwendungen.
Die ISimpleAudioVolume Schnittstelle wendet die gleiche Lautstärke gleichmäßig auf alle Kanäle in einer Audiositzung an. Obwohl diese Schnittstelle die Anforderungen der Lautstärkesteuerung der meisten Anwendungen erfüllen sollte, erfordern einige Anwendungen möglicherweise speziellere Volumensteuerungsfunktionen. Die IAudioStreamVolume Schnittstelle steuert das Volumen eines einzelnen Datenstroms in einer Sitzung relativ zu den anderen Datenströmen in der Sitzung. IAudioStreamVolume ermöglicht es einem Client auch, die Lautstärkestufen aller Kanäle im Stream einzeln zu steuern. Beispielsweise kann eine Anwendung diese Funktion verwenden, um Audioeffekte zu erzielen, z. B. das Simulieren der räumlichen Bewegung einer Audioquelle durch Verschieben von links nach rechts. Eine weitere spezielle Schnittstelle, IChannelAudioVolume, steuert die Lautstärkeebenen der einzelnen Kanäle in einer Sitzung. Beispielsweise kann eine Anwendung IChannelAudioVolume- verwenden, um Balance-Steuerelemente für ein stereophonisches Soundsystem zu implementieren.
Die Lautstärkeregler im Feld Anwendungen im Feld "Sndvol" spiegeln nur Volumenänderungen wider, die über die ISimpleAudioVolume Schnittstelle vorgenommen werden. Sie spiegeln keine Volumenänderungen wider, die über die IAudioStreamVolume und IChannelAudioVolume Schnittstellen vorgenommen werden. Obwohl einige Anwendungen Benutzern die direkte oder indirekte Steuerung der Lautstärkeeinstellungen über IAudioStreamVolume und IChannelAudioVolumeermöglichen, sollten Entwickler die Darstellung von Anwendungsschiebereglern für diese Lautstärkeeinstellungen vermeiden, die Benutzer wahrscheinlich mit den Lautstärkereglern in Sndvol verwechseln. Andernfalls kann ein Benutzer einen Anwendungsschieberegler verschieben, der erwartet, dass die Änderung in einem Sndvol-Schieberegler angezeigt wird und verwechselt wird, wenn keine solche Änderung auftritt. Entwickler können dieses Problem durch sorgfältiges Design der Benutzeroberfläche vermeiden.
Die effektive Lautstärke eines Kanals im Session-Submix, wie bei den Lautsprechern gehört, ist das Produkt der folgenden vier Lautstärkefaktoren:
- Die Volumeebenen pro Kanal der Datenströme in der Sitzung, die Clients über die Methoden in der IAudioStreamVolume-schnittstelle steuern können.
- Die Volumeebene pro Kanal der Sitzung, die Clients über die Methoden in der IChannelAudioVolume--Schnittstelle steuern können.
- Die Master volume level of the session, which clients can control through the methods in the ISimpleAudioVolume interface.
- Die richtlinienbasierte Volumeebene der Sitzung, die das System dynamisch ändert, wenn sich die globale Mischung ändert.
Jeder der vier Faktoren auf Volumeebene in der vorherigen Liste ist ein Wert im Bereich von 0,0 bis 1,0, wobei 0,0 die Stille angibt und 1,0 die volle Lautstärke angibt (keine Dämpfung). Die effektive Volumeebene ist auch ein Wert im Bereich von 0,0 bis 1,0.
Das Audiomodul wendet die effektive Lautstärkestufe für jeden Kanal auf die Kanäle in einem Datenstrom an, bevor der Datenstrom mit den anderen Datenströmen in der Audiositzung gemischt wird. Wenn Beispielwerte in einem Kanal 0 Dezibel überschreiten, nachdem das Audiomodul sie mit der effektiven Lautstärkeebene multipliziert hat, klammert das Modul die Beispiele ab, bevor sie dem Session-Submix hinzugefügt werden.
Verwandte Themen