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:

Die folgenden Methoden können erst nach dem Aufruf von IAudioClient::Initialize aufgerufen werden:

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:

  • IAudioRenderClient

    Schreibt Renderingdaten in einen Audiorenderingendpunktpuffer.

  • IAudioCaptureClient

    Liest erfasste Daten aus einem Audioaufnahmeendpunktpuffer.

  • IAudioSessionControl

    Kommuniziert mit dem Audiositzungs-Manager, um die Audiositzung zu konfigurieren und zu verwalten, die dem Stream zugeordnet ist.

  • ISimpleAudioVolume

    Steuert die Lautstärke der Audiositzung, die dem Stream zugeordnet ist.

  • IChannelAudioVolume

    Steuert die Lautstärke der einzelnen Kanäle in der Audiositzung, die dem Stream zugeordnet ist.

  • IAudioClock

    Überwacht die Datenrate und -position des Datenstroms.

Darüber hinaus sollten WASAPI-Clients, die eine Benachrichtigung über sitzungsbezogene Ereignisse erfordern, die folgende Schnittstelle implementieren:

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:

Programmierhandbuch