Audiositzungen
Eine Audiositzung ist eine Gruppe verwandter Audiostreams, die ein WASAPI-Client gemeinsam verwalten kann. Clients können die Lautstärke und den Stummschaltungszustand jeder einzelnen Sitzung steuern. Das System wendet vom Client angegebene Volume- und Stummschaltungseinstellungen einheitlich auf alle Streams in der Sitzung an.
Wenn ein Client einen Audiodatenstrom initialisiert, weist er den Audiodatenstrom einer Audiositzung zu. Weitere Informationen finden Sie unter IAudioClient::Initialize.
Eine Audiositzung enthält entweder Rendering- oder Aufnahmedatenströme, aber nicht beides. Standardmäßig sind die Volume- und Stummschaltungseinstellungen für eine Renderingsitzung über Systemneustarts hinweg persistent. Die Einstellungen für Volume und Stummschaltung für eine Aufzeichnungssitzung sind nicht persistent. (Eine Sitzung, die Datenströme enthält, die im Loopbackmodus ausgeführt werden, wird wie eine Aufzeichnungssitzung behandelt. Das heißt, die Sitzungseinstellungen sind nicht persistent. Weitere Informationen zum Loopbackmodus finden Sie unter Loopbackaufzeichnung.)
Jeder Audiostream gehört zu genau einer Sitzung. Ein Client weist einer bestimmten Sitzung zu dem Zeitpunkt, zu dem er das Streamobjekt initialisiert, einen Audiodatenstrom zu. Der Stream behält seine Mitgliedschaft in der Sitzung für die Lebensdauer des Streams bei. Nachdem ein Streamobjekt erstellt wurde, ist das Objekt so lange vorhanden, bis ein Client den zuletzt gezählten Verweis auf das Objekt freigibt, und dann wird das Objekt gelöscht.
Obwohl ein Client die Sitzung, der ein vorhandener Stream zugewiesen ist, nicht ändern kann, kann er einen ähnlichen Effekt erzielen, indem er den Datenstrom löscht (indem er alle Verweise auf ihn freigibt), einen neuen Stream erstellt, um den gelöschten Stream zu ersetzen, und den neuen Stream einer anderen Sitzung zuweisen.
Jede Renderingsitzung stellt eine Teilmenge der Datenströme dar, die die globale Mischung bilden, die über ein bestimmtes Audioendpunktgerät wiedergegeben wird. Die globale Mischung kombiniert alle Sitzungen aller Anwendungen, die das Gerät gemeinsam nutzen.
Häufig weist eine Anwendung mit mehreren Streams alle ihre Streams derselben Sitzung zu. Die Anwendung kann jedoch als Option verschiedenen Sitzungen verschiedene Streams zuweisen. Jeder Stream, den die Anwendung einer Sitzung nicht explizit zuweist, gehört zur Standardsitzung.
Typische Audioanwendungen sollten das Ändern der Lautstärke und der Stummschaltungseinstellungen für Sitzungen vermeiden. Stattdessen steuern Benutzer diese Einstellungen über die Benutzeroberflächen von Steuerungsprogrammen. In Windows Vista zeigt das vom System bereitgestellte Programm Sndvol.exe beispielsweise eine Lautstärkeregelung und ein Stummschaltungssteuerelement für jede aktive oder kürzlich aktive Renderingsitzung im System an. Über diese Steuerelemente können Benutzer die Lautstärke- und Stummschaltungseinstellungen für alle Sitzungen im System anpassen.
Das Sndvol-Programm zeigt derzeit nur Lautstärkeregler für Audiorenderingendpunktgeräte an. Es werden keine Lautstärkeregler für Audioaufnahmegeräte angezeigt.
Eine Sitzung ist aktiv, wenn sie einen oder mehrere aktive Streams enthält. Ein aktiver Stream befindet sich im Status "Wird ausgeführt". Ein inaktiver Stream befindet sich im Status "Beendet". Eine Sitzung wird aktiv, wenn der erste Stream aktiv wird. Eine Sitzung wird inaktiv, wenn der letzte aktive Stream inaktiv wird. Nachdem eine Sitzung für einen bestimmten Zeitraum inaktiv war, ändert das System den Zustand der Sitzung von inaktiv in abgelaufen.
Sndvol zeigt Lautstärke- und Stummschaltungssteuerelemente für alle aktiven und inaktiven Renderingsitzungen an. Sndvol entfernt die Volume- und Stummschaltungssteuerelemente für eine Sitzung, wenn sich der Zustand der Sitzung von inaktiv in abgelaufen ändert oder wenn die Sitzung beendet wird. (Eine Sitzung wird beendet, wenn der letzte ihrer Streams gelöscht wird, d. h., wenn ein Client die endgültige Verweisanzahl für das letzte verbleibende Streamobjekt in der Sitzung freigibt.) Die einzige Ausnahme von dieser Regel ist für Systembenachrichtigungssounds. Sndvol zeigt immer die Lautstärke- und Stummschaltungssteuerelemente für Systembenachrichtigungssounds an, unabhängig vom Zustand der Sitzung für diese Sounds.
In der Regel gehört ein Stream zu einer Sitzung, die nur den Prozess umfasst, der die Anwendung enthält, die den Stream erstellt hat. Anwendungen haben jedoch die Möglichkeit, prozessübergreifende Sitzungen zu definieren, die Datenströme aus zwei oder mehr Prozessen kombinieren.
WASAPI unterstützt in erster Linie prozessübergreifende Sitzungen, um Folgendes zu ermöglichen:
- Das Sndvol-Programm kann dem Benutzer eine einzelne Lautstärkeregelung zur Verwaltung von Systembenachrichtigungssounds in allen Anwendungen bereitstellen.
- Ein Media Player, der in einem Prozess ausgeführt wird, kann geschützte Inhalte an ein Entschlüsselungsprogramm streamen, das in einem anderen Prozess ausgeführt wird.
Ähnlich wie bei den Steuerelementeinstellungen für prozessspezifische Renderingsitzungen sind die Steuerelementeinstellungen für prozessübergreifende Renderingsitzungen standardmäßig über Systemneustarts hinweg persistent. WASAPI bietet dieses Verhalten in erster Linie für Systembenachrichtigungssounds, die die Lautstärke und Stummschaltungseinstellungen des Benutzers beibehalten müssen, da die Anwendungsmischung im Laufe der Zeit variiert.
Das Sndvol-Programm bezeichnet die Lautstärkeregelung für jede Sitzung mit einem Anzeigenamen und einem Symbol. Ein Client hat die Möglichkeit, einer Sitzung explizit einen Anzeigenamen und ein Symbol zuzuweisen. Wenn der Client diese Elemente nicht bereitstellt, zeigt Sndvol stattdessen einen Standardnamen und ein Standardsymbol an. Der Standardname enthält Informationen wie den Titel des Anwendungsfensters. Das Standardsymbol ist das Symbol für das Anwendungsfenster. Nur bei prozessspezifischen Sitzungen stellen diese Standardeinstellungen den Benutzern aussagekräftige Informationen zur Verfügung. Beachten Sie, dass eine prozessübergreifende Sitzung mehreren Anwendungen zugeordnet werden kann. In diesem Fall sind nur ein vom Client bereitgestellter Anzeigename und ein Symbol sinnvoll.
Obwohl die Einstellungen für Volume und Stummschaltung für eine Renderingsitzung standardmäßig über Systemneustarts hinweg persistent sind, sind der vom Client bereitgestellte Anzeigename und das Symbol nicht vorhanden. Um sicherzustellen, dass Sndvol den vom Client bereitgestellten Namen und das Symbol anzeigt, muss der Client den Namen und das Symbol explizit der Sitzung zu dem Zeitpunkt zuweisen, zu dem der Client den ersten Stream der Sitzung zuweist. Das System behält den Anzeigenamen und das Symbol für eine Sitzung nur so lange bei, bis die Sitzung beendet wird.
Jede Sitzung wird durch eine Sitzungs-GUID identifiziert. Wenn ein Client einen Stream öffnet, weist der Client diesen Stream einer bestimmten Sitzung zu. Der Client stellt die folgenden zwei Informationen bereit, um diese Sitzung zu identifizieren:
- Eine Sitzungs-GUID.
- Unabhängig davon, ob es sich bei der Sitzung um eine prozessübergreifende oder prozessspezifische Sitzung handelt– eine prozessspezifische Sitzung enthält nur Streams aus dem Prozess des Clients.
Diese Informationen reichen aus, um eine bestimmte Sitzung von allen anderen Sitzungen auf demselben Computer zu unterscheiden. Die Sitzungs-GUID für eine prozessspezifische Sitzung identifiziert die Sitzung eindeutig nur innerhalb des Bereichs des Prozesses, der die Sitzung besitzt. Im Gegensatz dazu ist die Sitzungs-GUID für eine prozessübergreifende Sitzung innerhalb des Bereichs aller Prozesse eindeutig, die auf dem Computer ausgeführt werden.
Im Fall einer prozessspezifischen Sitzung verwendet das System eine Kombination aus Sitzungs-GUID und Prozess-ID, um die Sitzung innerhalb des Bereichs des Computers eindeutig zu identifizieren. Wenn Also Clients in zwei verschiedenen Prozessen ihre jeweiligen Streams zwei prozessspezifischen Sitzungen mit identischen Sitzungs-GUIDs zuweisen, behandelt das System die Sitzungen als getrennt, da ihre Prozess-IDs unterschiedlich sind. Wenn eine prozessübergreifende Sitzung die gleiche Sitzungs-GUID wie eine oder mehrere prozessspezifische Sitzungen verwendet, behandelt das System die prozessübergreifende Sitzung als anders als die prozessspezifischen Sitzungen, obwohl sie dieselbe Sitzungs-GUID verwenden.
In Windows Vista weisen beispielsweise APIs auf höherer Ebene wie die Windows-Multimediafunktionen waveOutXxx und DirectSound die von ihnen erstellten Audiodatenströme in der Regel standardmäßigen, prozessspezifischen Sitzungen zu, die durch den Sitzungs-GUID-Wert GUID_NULL identifiziert werden. Für Clients dieser APIs ist die Standardsitzung für jeden Clientprozess von den Standardsitzungen für andere Clientprozesse getrennt, obwohl die Sitzungen identische Sitzungs-GUIDs aufweisen. Wenn außerdem eine oder mehrere Anwendungen der prozessübergreifenden Sitzung Datenströme zuweisen, die durch den Sitzungs-GUID-Wert GUID_NULL identifiziert werden, behandelt das System diese prozessübergreifende Sitzung als getrennt von den standardmäßigen, prozessspezifischen Sitzungen, die dieselbe Sitzungs-GUID verwenden. Dementsprechend zeigt das Sndvol-Programm eine separate Lautstärkesteuerung für die standardmäßige, prozessspezifische Sitzung jedes Clients an und zeigt eine zusätzliche Lautstärkesteuerung für die prozessübergreifende Sitzung an, die durch den Sitzungs-GUID-Wert GUID_NULL identifiziert wird, sofern diese Sitzung vorhanden ist.
Jede Sitzung ist nur einem Audioendpunktgerät zugeordnet. Wenn zwei Sitzungen identische Sitzungs-GUIDs und Prozess-IDs aufweisen, aber unterschiedlichen Geräten zugeordnet sind, behandelt das System die beiden Sitzungen als getrennt. Eine Sitzung kann niemals sowohl Aufzeichnungs- als auch Renderingdatenströme enthalten, da ein Aufzeichnungsdatenstrom nur einem Aufnahmegerät zugeordnet werden kann und ein Renderingdatenstrom nur einem Renderinggerät zugeordnet werden kann.
Wie bereits erwähnt, sind die Volume- und Stummschaltungseinstellungen für eine Sitzung über Systemneustarts hinweg persistent. Zwei oder mehr Instanzen einer Anwendung können prozessspezifische Sitzungen mit identischen Sitzungs-GUIDs erstellen. Über das Sndvol-Programm kann der Benutzer für jede dieser Sitzungen verschiedene Lautstärke- und Stummschaltungseinstellungen auswählen. Nachdem diese Sitzungen beendet wurden, behält das System die Steuerungseinstellungen nur einer dieser Sitzungen bei– der letzten Sitzung, die beendet werden soll. Wenn später eine neue instance der Anwendung eine prozessspezifische Sitzung mit derselben Sitzungs-GUID wie zuvor erstellt, erbt diese Sitzung die zuvor gespeicherten Volume- und Stummschaltungseinstellungen.
Eine Anwendung sollte nicht versuchen, einen Stream zu einer Sitzung hinzuzufügen oder die Volumeebene einer Sitzung zu steuern, die sich im Besitz einer anderen, nicht verbundenen Anwendung befindet. Darüber hinaus sollte eine Anwendung nicht versuchen, die Lautstärke der vom System verwalteten Sitzung für Benachrichtigungssounds zu steuern. Eine Anwendung kann jedoch einen Sound über die Systemsitzung für Benachrichtigungssounds wiedergeben, indem sie die PlaySound-Funktion aufruft . Weitere Informationen finden Sie unter Benachrichtigungssounds für Legacy-Audioanwendungen.
Eine Anwendung kann sich registrieren, um Benachrichtigungen zu erhalten, wenn sich der Zustand einer Sitzung ändert. Weitere Informationen finden Sie unter Audiositzungsereignisse.
In seltenen Fällen muss eine Anwendung, die eine prozessspezifische Sitzung erstellt, die Steuerung der prozessspezifischen Sitzungen für zwei oder mehr Anwendungsinstanzen unter einer einzelnen Volumesteuerung in Sndvol konsolidieren. Weitere Informationen finden Sie unter Gruppierungsparameter.
Zugehörige Themen