Streamverwaltung
Nach dem Aufzählen der Audioendpunktgeräte im System und dem Identifizieren eines geeigneten Rendering- oder Aufnahmegeräts besteht die nächste Aufgabe für eine Audioclientanwendung darin, eine Verbindung mit dem Endpunktgerät zu öffnen und den Audiodatenfluss über diese Verbindung zu verwalten. MIT WASAPI können Clients Audiostreams erstellen und verwalten.
WASAPI implementiert mehrere Schnittstellen, um Streamverwaltungsdienste für Audioclients bereitzustellen. Die primäre Schnittstelle ist IAudioClient. Ein Client ruft die IAudioClient-Schnittstelle für ein Audioendpunktgerät ab, indem er die IMMDevice::Activate-Methode (wobei parameter iid auf REFIID IID_IAudioClient festgelegt ist) für das Endpunktobjekt aufruft.
Der Client ruft die Methoden in der IAudioClient-Schnittstelle auf, um folgendes auszuführen:
- Ermitteln Sie, welche Audioformate das Endpunktgerät unterstützt.
- Rufen Sie die Größe des Endpunktpuffers ab.
- Rufen Sie das Streamformat und die Latenz ab.
- Starten, Beenden und Zurücksetzen des Datenstroms, der über das Endpunktgerät fließt.
- Greifen Sie auf zusätzliche Audiodienste zu.
Um einen Stream zu erstellen, 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 an, ob der Stream im freigegebenen oder exklusiven Modus ausgeführt wird.
Die verbleibenden Methoden in der IAudioClient-Schnittstelle sind in zwei Gruppen unterteilt:
- Methoden, die erst aufgerufen werden können, nachdem der Stream von IAudioClient::Initialize geöffnet wurde.
- Methoden, die jederzeit vor oder nach dem Initialize-Aufruf 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 IAudioClient::Initialize-Aufruf 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 Audiorenderingendpunktpuffer.
-
Liest erfasste Daten aus einem Audioaufnahmeendpunktpuffer.
-
Kommuniziert mit dem Audiositzungs-Manager, um die Audiositzung zu konfigurieren und zu verwalten, die dem Stream zugeordnet ist.
-
Steuert die Lautstärke der Audiositzung, die dem Stream zugeordnet ist.
-
Steuert die Lautstärke der einzelnen Kanäle in der Audiositzung, die dem Stream zugeordnet ist.
-
Überwacht die Datenrate und -position des Datenstroms.
Darüber hinaus sollten WASAPI-Clients, die eine Benachrichtigung über sitzungsbezogene Ereignisse erfordern, die folgende Schnittstelle implementieren:
-
Um Ereignisbenachrichtigungen zu empfangen, ü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 Audiodatenstrom 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 abzurufen, ohne dass der Client die IAudioClient-Schnittstelle verwenden muss, um einen Stream zu erstellen und den Stream der Sitzung zuzuweisen. Ein Client ruft die IAudioSessionManager-Schnittstelle für ein Audioendpunktgerät durch Aufrufen der IMMDevice::Activate-Methode (wobei der Parameter iid auf REFIID IID_IAudioSessionManager festgelegt ist) für das Endpunktobjekt ab.
Die Schnittstellen IAudioSessionControl, IAudioSessionEvents und IAudioSessionManager sind in der Headerdatei Audiopolicy.h definiert. Alle anderen WASAPI-Schnittstellen sind in der Headerdatei Audioclient.h definiert.
In den folgenden Abschnitten wird beschrieben, wie Sie WASAPI zum Verwalten von Audiostreams verwenden:
- Über WASAPI
- Rendern eines Datenstroms
- Erfassen eines Datenstroms
- Loopbackaufzeichnung
- Datenströme im exklusiven Modus
- Wiederherstellung nach einem Invalid-Device Fehler
- Verwenden eines Kommunikationsgeräts
- Streamrouting
Zugehörige Themen