Streamverwaltung
Nach dem Aufzählen der Audioendpunktgeräte im System und dem Identifizieren eines geeigneten Rendering- oder Erfassungsgeräts besteht die nächste Aufgabe für eine Audioclientanwendung darin, eine Verbindung mit dem Endpunktgerät zu öffnen und den Fluss der Audiodaten über diese Verbindung zu verwalten. WASAPI ermöglicht Clients das Erstellen und Verwalten von Audiostreams.
WASAPI implementiert mehrere Schnittstellen zum Bereitstellen von Streamverwaltungsdiensten für Audioclients. Die primäre Schnittstelle ist IAudioClient. Ein Client ruft die IAudioClient-Schnittstelle für ein Audioendpunktgerät ab, indem er die IMMDevice::Activate-Methode (mit dem Parameter iid, der auf REFIID IID IAudioClient festgelegt ist) für das Endpunktobjekt _ aufruft.
Der Client ruft die Methoden in der IAudioClient-Schnittstelle auf, um Folgendes zu tun:
- Erfahren Sie, welche Audioformate das Endpunktgerät unterstützt.
- Hier erhalten Sie die Endpunktpuffergröße.
- Hier erhalten Sie das Streamformat und die Latenz.
- Starten, Beenden und Zurücksetzen des Datenstroms, der durch das Endpunktgerät fließt.
- Greifen Sie auf zusätzliche Audiodienste zu.
Zum Erstellen eines Streams ruft ein Client die IAudioClient::Initialize-Methode auf. Mit dieser Methode gibt der Client das Datenformat für den Stream, die Größe des Endpunktpuffers und die Art und Weise an, ob der Stream im freigegebenen oder exklusiven Modus ausgeführt wird.
Die verbleibenden Methoden in der IAudioClient-Schnittstelle lassen sich in zwei Gruppen unterteilen:
- Methoden, die erst aufgerufen werden können, nachdem der Stream von IAudioClient::Initialize geöffnet wurde.
- Methoden, die vor oder nach dem Initialize-Aufruf jederzeit aufgerufen werden können.
Die folgenden Methoden können erst nach dem Aufruf von IAudioClient::Initialize aufgerufen werden:
- IAudioClient::GetBufferSize
- IAudioClient::GetCurrentPadding
- IAudioClient::GetService
- IAudioClient::GetStreamLatency
- IAudioClient::Reset
- IAudioClient::Start
- IAudioClient::Stop
Die folgenden Methoden können vor oder nach dem Aufruf von IAudioClient::Initialize aufgerufen werden:
Um auf die zusätzlichen Audioclientdienste zuzugreifen, ruft der Client die IAudioClient::GetService-Methode auf. Mit dieser Methode kann der Client Verweise auf die folgenden Schnittstellen abrufen:
-
Schreibt Renderingdaten in einen Endpunktpuffer für das Audiorendering.
-
Liest erfasste Daten aus einem Endpunktpuffer für die Audioerfassung.
-
Kommuniziert mit dem Audiositzungs-Manager, um die Audiositzung zu konfigurieren und zu verwalten, die dem Stream zugeordnet ist.
-
Steuert die Volumeebene der Audiositzung, die dem Stream zugeordnet ist.
-
Steuert die Lautstärkeebenen der einzelnen Kanäle in der Audiositzung, die dem Stream zugeordnet ist.
-
Überwacht die Streamdatenrate und die Streamposition.
Darüber hinaus sollten WASAPI-Clients, die eine Benachrichtigung über sitzungsbezogene Ereignisse erfordern, die folgende Schnittstelle implementieren:
-
Zum Empfangen von Ereignisbenachrichtigungen übergibt der Client einen Zeiger auf seine IAudioSessionEvents-Schnittstelle an die IAudioSessionControl::RegisterAudioSessionNotification-Methode als Aufrufparameter.
Schließlich kann ein Client eine API auf höherer Ebene verwenden, um einen Audiostream zu erstellen, aber auch Zugriff auf die Sitzungssteuerelemente und Volumesteuerelemente für die Sitzung benötigen, die den Stream enthält. Eine API auf höherer Ebene bietet diesen Zugriff in der Regel nicht. Der Client kann die Steuerelemente für eine bestimmte Sitzung über die IAudioSessionManager-Schnittstelle abrufen. Diese Schnittstelle ermöglicht es dem Client, die Schnittstellen IAudioSessionControl und ISimpleAudioVolume für eine Sitzung zu erhalten, ohne dass der Client die IAudioClient-Schnittstelle verwenden muss, um einen Stream zu erstellen und den Stream der Sitzung zu zuweisen. Ein Client ruft die IAudioSessionManager-Schnittstelle für ein Audioendpunktgerät ab, indem er die IMMDevice::Activate-Methode (mit dem Parameter iid, der auf REFIID IID IAudioSessionManager festgelegt ist) für das Endpunktobjekt _ aufruft.
Die Schnittstellen IAudioSessionControl, IAudioSessionEventsund IAudioSessionManager werden in der Headerdatei Audiopolicy.h definiert. Alle anderen WASAPI-Schnittstellen werden in der Headerdatei Audioclient.h definiert.
In den folgenden Abschnitten wird beschrieben, wie Sie WASAPI zum Verwalten von Audiostreams verwenden:
- Informationen zu WASAPI
- Rendern eines Streams
- Erfassen eines Streams
- Loopbackaufzeichnung
- Exclusive-Mode-Streams
- Wiederherstellen nach einem Invalid-Device Fehlers
- Verwenden eines Kommunikationsgeräts
- Streamrouting