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 Fluss von Audiodaten über diese Verbindung zu verwalten. WASAPI- ermöglicht Clients das Erstellen und Verwalten von Audiodatenströmen.
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 die IMMDevice::Activate-Methode (mit Parameter iid auf REFIID IID_IAudioClient) für das Endpunktobjekt festgelegt wird.
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.
- Zugriff auf zusätzliche Audiodienste.
Zum Erstellen eines Datenstroms ruft ein Client die IAudioClient::Initialize-Methode auf. Über diese Methode gibt der Client das Datenformat für den Datenstrom, die Größe des Endpunktpuffers und an, ob der Datenstrom im freigegebenen oder exklusiven Modus ausgeführt wird.
Die übrigen Methoden in der IAudioClient Schnittstelle sind in zwei Gruppen unterteilt:
- Methoden, die erst aufgerufen werden können, nachdem der Datenstrom von IAudioClient::Initializegeöffnet wurde.
- Methoden, die jederzeit vor oder nach dem Aufruf des Initialize aufgerufen werden können.
Die folgenden Methoden können erst nach dem Aufruf von IAudioClient::Initializeaufgerufen werden:
- IAudioClient::GetBufferSize
- IAudioClient::GetCurrentPadding
- IAudioClient::GetService
- IAudioClient::GetStreamLatency
- IAudioClient:: zurücksetzen
- IAudioClient::Start
- IAudioClient::Stop
Die folgenden Methoden können vor oder nach dem IAudioClient::Initialize Aufrufs aufgerufen werden:
Um auf die zusätzlichen Audioclientdienste zuzugreifen, ruft der Client die IAudioClient::GetService-Methode auf. Über diese Methode kann der Client Verweise auf die folgenden Schnittstellen abrufen:
-
Schreibt Renderingdaten in einen Audiorenderingendpunktpuffer.
-
Liest erfasste Daten aus einem Endpunktpuffer für die Audioaufnahme.
-
Kommuniziert mit dem Audiositzungs-Manager, um die Audiositzung zu konfigurieren und zu verwalten, die dem Datenstrom zugeordnet ist.
-
Steuert die Lautstärke der Audiositzung, die dem Datenstrom zugeordnet ist.
-
Steuert die Lautstärkestufen der einzelnen Kanäle in der Audiositzung, die dem Datenstrom zugeordnet ist.
-
Überwacht die Datenrate und die Datenstromposition.
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 an die 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 Lautstärkesteuerelemente für die Sitzung benötigen, die den Datenstrom enthält. Eine API auf höherer Ebene stellt diesen Zugriff in der Regel nicht bereit. Der Client kann die Steuerelemente für eine bestimmte Sitzung über die IAudioSessionManager Schnittstelle abrufen. Diese Schnittstelle ermöglicht es dem Client, die IAudioSessionControl und ISimpleAudioVolume Schnittstellen für eine Sitzung abzurufen, ohne dass der Client die IAudioClient- Schnittstelle zum Erstellen eines Datenstroms und zum Zuweisen des Datenstroms zur Sitzung verwenden muss. Ein Client ruft die IAudioSessionManager- Schnittstelle für ein Audioendpunktgerät ab, indem die IMMDevice::Activate-Methode (mit Parameter iid auf REFIID IID_IAudioSessionManager) für das Endpunktobjekt festgelegt wird.
Die IAudioSessionControl, IAudioSessionEventsund IAudioSessionManager Schnittstellen werden in der Headerdatei "Audiopolicy.h" definiert. Alle anderen WASAPI-Schnittstellen werden in der Headerdatei "Audioclient.h" definiert.
In den folgenden Abschnitten wird die Verwendung von WASAPI zum Verwalten von Audiostreams beschrieben:
- über WASAPI-
- Rendern eines Stream-
- Erfassen eines Stream-
- Loopbackaufzeichnung
- Exclusive-Mode Streams
- Wiederherstellen von Invalid-Device Fehler-
- Verwenden eines Kommunikationsgeräts
Verwandte Themen