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:

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

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:

  • IAudioRenderClient

    Schreibt Renderingdaten in einen Endpunktpuffer für das Audiorendering.

  • IAudioCaptureClient

    Liest erfasste Daten aus einem Endpunktpuffer für die Audioerfassung.

  • IAudioSessionControl

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

  • ISimpleAudioVolume

    Steuert die Volumeebene der Audiositzung, die dem Stream zugeordnet ist.

  • IChannelAudioVolume

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

  • IAudioClock

    Überwacht die Streamdatenrate und die Streamposition.

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 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:

Programmierhandbuch