Freigeben über


Audiositzungen

Eine Audiositzung ist eine Gruppe verwandter Audiostreams, die ein WASAPI-Client gemeinsam verwalten kann. Clients können den Lautstärke- und Stummschaltungszustand jeder einzelnen Sitzung steuern. Das System wendet clientspezifische Volume- und Stummschaltungseinstellungen einheitlich auf alle Datenströme in der Sitzung an.

Wenn ein Client einen Audiodatenstrom initialisiert, wird der Audiodatenstrom einer Audiositzung zugewiesen. Weitere Informationen finden Sie unter IAudioClient::Initialize.

Eine Audiositzung enthält entweder Renderingdatenströme oder Aufnahmedatenströme, aber nicht beide. Standardmäßig sind die Volume- und Stummschaltungseinstellungen für eine Renderingsitzung über Systemneustarts hinweg persistent. Die Volume- und Stummschaltungseinstellungen für eine Aufnahmesitzung sind nicht dauerhaft. (Eine Sitzung, die Datenströme enthält, die im Loopbackmodus ausgeführt werden, wird genauso behandelt wie eine Aufnahmesitzung. Das heißt, die Sitzungseinstellungen sind nicht dauerhaft. Weitere Informationen zum Loopbackmodus finden Sie unter Loopbackaufzeichnung.)

Jeder Audiodatenstrom gehört zu genau einer Sitzung. Ein Client weist einer bestimmten Sitzung zum Zeitpunkt der Initialisierung des Streamobjekts einen Audiodatenstrom zu. Der Datenstrom behält seine Mitgliedschaft in der Sitzung für die Lebensdauer des Datenstroms bei. Nachdem ein Streamobjekt erstellt wurde, ist das Objekt vorhanden, bis ein Client den letzten gezählten Verweis auf das Objekt freigibt, und dann wird das Objekt gelöscht.

Obwohl ein Client die Sitzung, der ein vorhandener Datenstrom zugewiesen ist, nicht ändern kann, kann er einen ähnlichen Effekt erzielen, indem er den Datenstrom löscht (indem er alle Verweise freigibt), einen neuen Datenstrom zum Ersetzen des gelöschten Datenstroms und das Zuweisen des neuen Datenstroms zu einer anderen Sitzung erstellen.

Jede Renderingsitzung stellt eine Teilmenge der Datenströme dar, die den globalen Mix bilden, der über ein bestimmtes Audioendpunktgerätwiedergegeben wird. Die globale Mischung kombiniert alle Sitzungen aus allen Anwendungen, die das Gerät gemeinsam nutzen.

Häufig weist eine Anwendung mit mehreren Streams alle Datenströme derselben Sitzung zu. Die Anwendung kann jedoch als Option unterschiedliche Streams verschiedenen Sitzungen zuweisen. Jeder Datenstrom, den die Anwendung nicht explizit einer Sitzung zuweist, gehört zur Standardsitzung.

Typische Audioanwendungen sollten das Ändern der Lautstärke- und Stummschaltungseinstellungen für Sitzungen vermeiden. Stattdessen steuern Benutzer diese Einstellungen über die Benutzeroberflächen von Steuerelementprogrammen. In Windows Vista zeigt das vom System bereitgestellte Programm Sndvol.exebeispielsweise eine Lautstärkeregelung und eine Stummschaltungssteuerung 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ärkesteuerelemente für Audiorendering-Endpunktgeräte an. Es werden keine Lautstärkesteuerelemente für Audioaufnahmegeräte angezeigt.

Eine Sitzung ist aktiv, wenn sie einen oder mehrere aktive Datenströme enthält. Ein aktiver Datenstrom befindet sich im ausgeführten Zustand. Ein inaktiver Datenstrom befindet sich im zustand beendet. Eine Sitzung wird aktiv, wenn der erste Datenstrom aktiv wird. Eine Sitzung wird inaktiv, wenn der letzte aktive Datenstrom inaktiv wird. Nachdem eine Sitzung für einen bestimmten Zeitraum inaktiv war, ändert das System den Status der Sitzung von inaktiv in "abgelaufen".

Sndvol zeigt Lautstärke- und Stummschaltungssteuerelemente für alle aktiven und inaktiven Renderingsitzungen an. Sndvol entfernt die Lautstärke- und Stummschaltungssteuerelemente für eine Sitzung, wenn sich der Status der Sitzung von "inaktiv" in "abgelaufen" ändert oder wenn die Sitzung beendet wird. (Eine Sitzung wird beendet, wenn der letzte seiner Datenströme gelöscht wird; d. h., wenn ein Client die endgültige Referenzanzahl für das letzte verbleibende Datenstromobjekt in der Sitzung loslässt.) Die einzige Ausnahme dieser Regel ist für Systembenachrichtigungssounds. Sndvol zeigt immer die Lautstärke- und Stummschaltungssteuerungen für Systembenachrichtigungssounds an, unabhängig vom Zustand der Sitzung für diese Sounds.

In der Regel gehört ein Datenstrom zu einer Sitzung, die nur den Prozess umfasst, der die Anwendung enthält, die den Datenstrom 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 prozessübergreifende Sitzungen in erster Linie, sodass:

  • Das Sndvol-Programm kann den Benutzer mit einer einzigen Lautstärkeregelung präsentieren, um Systembenachrichtigungssounds in allen Anwendungen zu verwalten.
  • Ein Media Player, der in einem Prozess ausgeführt wird, kann geschützte Inhalte in ein Entschlüsselungsprogramm streamen, das in einem anderen Prozess ausgeführt wird.

Ähnlich wie die 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 die Stummschaltung der Einstellungen des Benutzers beibehalten müssen, da der Anwendungsmix im Laufe der Zeit variiert.

Das Sndvol-Programm beschriftt 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 Standardwerte benutzern aussagekräftige Informationen bereit. Beachten Sie, dass eine prozessübergreifende Sitzung mehreren Anwendungen zugeordnet werden kann. In diesem Fall sind nur ein clientseitig bereitgestellter Anzeigename und -symbol aussagekräftig.

Obwohl die Volume- und Stummschaltungseinstellungen für eine Renderingsitzung standardmäßig für Systemneustarts dauerhaft 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 explizit den Namen und das Symbol der Sitzung zuweisen, wenn der Client den ersten Datenstrom der Sitzung zuweist. Das System behält den Anzeigenamen und das Symbol nur für eine Sitzung bei, bis die Sitzung beendet wird.

Jede Sitzung wird durch eine Sitzungs-GUID identifiziert. Zum Zeitpunkt, zu dem ein Client einen Datenstrom öffnet, weist der Client diesen Datenstrom einer bestimmten Sitzung zu. Der Client stellt die folgenden zwei Informationen bereit, um diese Sitzung zu identifizieren:

  • Eine Sitzungs-GUID.
  • Ob es sich bei der Sitzung um eine prozessübergreifende oder prozessspezifische Sitzung handelt – eine prozessspezifische Sitzung enthält nur Datenströme 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 Gültigkeitsbereichs aller Prozesse eindeutig, die auf dem Computer ausgeführt werden.

Bei 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 Clients in zwei verschiedenen Prozessen ihre jeweiligen Datenströme also 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 von den prozessspezifischen Sitzungen, obwohl sie dieselbe Sitzungs-GUID gemeinsam nutzen.

In Windows Vista weisen apIs auf höherer Ebene z. B. die Windows Multimedia-waveOutXxx Funktionen zu, und DirectSound weisen in der Regel die Audiodatenströme zu, die sie für standardmäßige, prozessspezifische Sitzungen erstellen, 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 eine oder mehrere Anwendungen datenströme der prozessübergreifenden Sitzung zuweisen, die durch den Sitzungs-GUID-Wert GUID_NULL identifiziert wird, 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 ein separates Volumesteuerelement für die Standard-, prozessspezifische Sitzung jedes Clients an und zeigt eine zusätzliche Lautstärkeregelung für die prozessübergreifende Sitzung an, die durch den Sitzungs-GUID-Wert GUID_NULL identifiziert wird, falls 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 Aufnahme- als auch Renderingdatenströme enthalten, da ein Aufnahmedatenstrom 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. Mindestens zwei Instanzen einer Anwendung können prozessspezifische Sitzungen mit identischen Sitzungs-GUIDs erstellen. Über das Sndvol-Programm kann der Benutzer verschiedene Lautstärke- und Stummschaltungseinstellungen für jede dieser Sitzungen auswählen. Nach dem Beenden dieser Sitzungen behält das System die Steuerungseinstellungen nur einer dieser Sitzungen bei – der letzten Sitzung, die beendet werden soll. Wenn später eine neue Instanz der Anwendung eine prozessspezifische Sitzung mit derselben Sitzungs-GUID wie zuvor erstellt, erbt diese Sitzung das zuvor gespeicherte Volume und die Stummschaltungseinstellungen.

Eine Anwendung sollte nicht versuchen, einen Datenstrom hinzuzufügen oder die Volumeebene einer Sitzung zu steuern, die im Besitz einer anderen, nicht verknüpften Anwendung ist. 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 die PlaySound--Funktion aufgerufen wird. Weitere Informationen finden Sie unter Benachrichtigungssounds für Ältere Audioanwendungen.

Eine Anwendung kann sich registrieren, um Benachrichtigungen zu empfangen, wenn sich der Status einer Sitzung ändert. Weitere Informationen finden Sie unter Audiositzungsereignisse.

In seltenen Fällen muss eine Anwendung, die eine prozessspezifische Sitzung erstellt, möglicherweise die Kontrolle der prozessspezifischen Sitzungen für zwei oder mehr Anwendungsinstanzen unter einer einzigen Volumesteuerung in Sndvol konsolidieren. Weitere Informationen finden Sie unter Gruppierungsparameter.

Programmierhandbuch