Sitzungsvolume-Steuerelemente

Wie bereits erläutert, können WASAPI-Clients die Lautstärke jeder Audiositzung einzeln steuern. WASAPI wendet die Volumeeinstellung für eine Sitzung einheitlich auf alle Datenströme in der Sitzung an. Jede Lautstärke ist ein Wert im Bereich 0,0 bis 1,0, wobei 0,0 die Stille angibt und 1,0 die volle Lautstärke (keine Dämpfung) angibt.

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 der Audiorichtlinie und ändern sich dynamisch als Reaktion auf Änderungen in den Streams, die den globalen Audiomix bilden. Weitere Informationen zur Audiorichtlinie finden Sie unter Benutzermodus-Audiokomponenten.

Die Systemsoftware, die die Lautstärkesteuerung für jeden Datenstrom multipliziert, multipliziert die PCM-Beispiele im Datenstrom durch die effektive Volumeebene. Die effektive Volumeebene ist das Ergebnis der Multiplikation der Client- und Systemvolumeeinstellungen. Die resultierende Änderung der Signalamplitude ist somit eine lineare Kombination der Client- und Systemvolumenebenen. Wenn die Clientvolume beispielsweise 0,8 ist und die Systemvolumeebene 0,5 beträgt, lautet die effektive Lautstärke (0,8). (0,5) = 0,4.

Beachten Sie, dass die wahrgenommene Lautheit nicht linear in Bezug auf Signalamplitude ist. Stattdessen variiert die Lautheit ungefähr so, wie der Logarithmus der Lautstärke v:

Lautigkeit in Dezibeln = 20. log₁₀(v)

Die Einstellung v = 0,5 attenuat daher die Lautheit des ursprünglichen Signals (das Signal, bevor der Lautstärkestand angewendet wird) um 6 Decibels, durch Festlegen v = 0,25 das Signal um 12 Decibel usw. ab. Eine Lautstärkestufe v = 1,0, die 0 Dezibel entspricht, ändert nicht den ursprünglichen Signalstand.

Audioanwendungen mit Benutzeroberflächen zum Steuern des Lautstärkeniveaus zeigen normalerweise Schieberegler an, die Änderungen an wahrgenommener Lautheit generieren, die linear proportional zu Änderungen an der Schiebereglerposition sind. Um eine lineare Beziehung zwischen wahrgenommener Lautheit 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 Systemlautsteuerungsprogramm Sndvol Lautstärkeregler für die Audiositzungen an, die auf jedem Audiorenderinggerät wiedergegeben werden. Diese Schieberegler werden im Gruppenfeld " Anwendungen " im SndVol-Fenster angezeigt. In der Regel enthält jede Sitzung alle Wiedergabestreams aus einem bestimmten Anwendungsfenster. Über die Schieberegler im Sndvol-Fenster steuern Benutzer die Lautstärke der einzelnen Audioanwendungen.

In der Regel sollte eine Anwendung alle Wiedergabedatenströme der gleichen Audiositzung zuweisen. WASAPI verhindert nicht, dass eine Anwendung die Wiedergabedatenströme zwischen mehreren Sitzungen verteilt. Die daraus resultierende Verbreitung von Volumenschiebereglern in Sndvol kann jedoch Benutzer verwechseln.

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 nicht miteinander verbunden werden. Wenn der Benutzer den Sndvol-Schieberegler verschiebt, sollte der Anwendungsschieberegler mit dem Sndvol-Schieberegler in Unison 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 Lautstärkeänderungen, die über diese Methode vorgenommen wurden, und spiegelt die Änderungen in den angezeigten Lautstärkereglern wider. Darüber hinaus kann eine Anwendung Benachrichtigungen über Sitzungsvolumenänderungen erhalten, die der Benutzer über Sndvol erstellt. Dazu 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 Volumensteuerungsanforderungen 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 Streams in der Sitzung. IAudioStreamVolume ermöglicht es einem Client auch, die Lautstärkeebenen aller Kanäle im Datenstrom einzeln zu steuern. Beispielsweise kann eine Anwendung diese Funktion verwenden, um Audioeffekte zu erzielen, z. B. das Simulieren räumlicher Bewegungen einer Audioquelle durch Verschieben von links nach rechts. Eine weitere spezialisierte Schnittstelle, IChannelAudioVolume, steuert die Lautstärkeebenen der einzelnen Kanäle in einer Sitzung. Beispielsweise kann eine Anwendung IChannelAudioVolume verwenden, um Gleichgewichtssteuerelemente für ein stereophonisches Soundsystem zu implementieren.

Die Volumeschieberegler im Feld "Anwendungen " in 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 das direkte oder indirekte Steuern der Lautstärkeeinstellungen über IAudioStreamVolume und IChannelAudioVolume ermöglichen, sollten Entwickler die Präsentation 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 widergespiegelt 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 Volumenebenen 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 Mastervolumeebene der Sitzung, die Clients über die Methoden in der ISimpleAudioVolume-Schnittstelle steuern können.
  • Die richtlinienbasierte Volumeebene der Sitzung, die das System dynamisch ändert, während sich der globale Mix ändert.

Jede der vier Volumenebenenfaktoren in der vorherigen Liste ist ein Wert im Bereich 0,0 bis 1,0, wobei 0,0 die Stille angibt und 1,0 die volle Lautstärke (keine Dämpfung) angibt. Die effektive Lautstärke ist auch ein Wert im Bereich 0,0 bis 1,0.

Das Audiomodul wendet die effektive Lautstärke für jeden Kanal auf die Kanäle in einem Datenstrom an, bevor er den Datenstrom mit den anderen Streams in der Audiositzung mischt. Wenn beispielwerte in einem Kanal 0 Decibel überschreiten, nachdem das Audiomodul sie mit der effektiven Lautstärkestufe multipliziert hat, klammert das Modul die Beispiele aus, bevor sie dem Sitzungs-Submix hinzugefügt werden.

Lautstärkeregler