Freigeben über


RenderSharedEventDriven

Diese Beispielanwendung verwendet die Core Audio-APIs, um Audiodaten auf einem vom Benutzer angegebenen Ausgabegerät zu rendern. In diesem Beispiel wird die ereignisgesteuerte Pufferung für einen Renderingclient im freigegebenen Modus veranschaulicht. Bei einem Stream im freigegebenen Modus teilt der Client den Endpunktpuffer mit der Audio-Engine.

Dieses Thema enthält folgende Abschnitte:

BESCHREIBUNG

In diesem Beispiel werden die folgenden Features veranschaulicht.

  • MMDevice-API für Die Aufzählung und Auswahl von Multimediageräten.
  • WASAPI für Streamverwaltungsvorgänge.

Anforderungen

Produkt Version
Windows SDK Windows 7
Visual Studio 2008

 

Herunterladen des Beispiels

Dieses Beispiel ist an den folgenden Speicherorten verfügbar.

Standort Pfad/URL
Windows SDK \Programme\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\RenderSharedEventDriven\...

 

Erstellen des Beispiels

Führen Sie zum Erstellen des RenderSharedEventDriven-Beispiels die folgenden Schritte aus:

  1. Öffnen Sie die CMD-Shell für das Windows SDK, und wechseln Sie zum Beispielverzeichnis RenderSharedEventDriven.
  2. Führen Sie den Befehl start WASAPIRenderSharedEventDriven.sln im Verzeichnis RenderSharedEventDriven aus, um das Projekt WASAPIRenderSharedEventDriven im Visual Studio-Fenster zu öffnen.
  3. Wählen Sie im Fenster die Projektmappenkonfiguration Debuggen oder Freigeben aus, wählen Sie in der Menüleiste das Menü Erstellen aus, und wählen Sie die Option Erstellen aus. Wenn Sie Visual Studio nicht über die CMD-Shell für das SDK öffnen, hat Visual Studio keinen Zugriff auf die SDK-Buildumgebung. In diesem Fall wird das Beispiel nur erstellt, wenn Sie die Umgebungsvariable MSSdk explizit festlegen, die in der Projektdatei WASAPIRenderSharedEventDriven.vcproj verwendet wird.

Ausführen des Beispiels

Wenn Sie die Demoanwendung erfolgreich erstellen, wird eine ausführbare Datei WASAPIRenderSharedEventDriven.exe generiert. Geben WASAPIRenderSharedEventDriven Sie zum Ausführen in ein Befehlsfenster gefolgt von erforderlichen oder optionalen Argumenten ein. Im folgenden Beispiel wird gezeigt, wie das Beispiel ausgeführt wird, indem Sie die Wiedergabedauer auf dem Standard-Multimediagerät angeben.

WASAPIRenderSharedEventDriven.exe -d 20 -multimedia

Die folgende Tabelle zeigt die Argumente.

Argument BESCHREIBUNG
-? Zeigt Hilfe an.
-H Zeigt Hilfe an.
-f Sinuswellenfrequenz in Hz.
-l Audiorenderlatenz in Millisekunden.
-d Sinuswellendauer in Sekunden.
-M Deaktiviert die Verwendung von MMCSS.
-Konsole Verwenden Sie das Standardkonsolengerät.
-Kommunikation Verwenden Sie das Standardkommunikationsgerät.
-Multimedia Verwenden Sie das Standard-Multimediagerät.
-Endpunkt Verwenden Sie den im Switchwert angegebenen Endpunktbezeichner.

 

Wenn die Anwendung ohne Argumente ausgeführt wird, listet sie die verfügbaren Geräte auf und fordert den Benutzer auf, ein Gerät für die Renderingsitzung auszuwählen. Nachdem der Benutzer ein Gerät angegeben hat, rendert die Anwendung eine Sinuswelle mit 440 Hz für 10 Sekunden. Diese Werte können geändert werden, indem Sie die Switchwerte -f und -d angeben.

RenderSharedEventDriven veranschaulicht ereignisgesteuerte Pufferung. Das Beispiel zeigt Folgendes:

  • Instanziieren Sie einen Audioclient, konfigurieren Sie ihn für die Ausführung im exklusiven Modus, und aktivieren Sie die ereignisgesteuerte Pufferung, indem Sie das AUDCLNT_STREAMFLAGS_EVENTCALLBACK-Flag im Aufruf von IAudioClient::Initialize festlegen.
  • Ordnen Sie den Client den Beispielen zu, die gerendert werden können, indem Sie dem System ein Ereignishandle bereitstellen, indem Sie die IAudioClient::SetEventHandle-Methode aufrufen.
  • Erstellen Sie einen Renderthread, um Beispiele aus der Audio-Engine zu erstellen.
  • Überprüfen Sie das Mixformat des Geräteendpunkts, um zu ermitteln, ob die Beispiele gerendert werden können. Wenn das Gerät das Mixformat nicht unterstützt, werden die Daten in PCM konvertiert.
  • Behandeln Sie den Streamwechsel.

Nachdem die Renderingsitzung beginnt und der Stream gestartet wird, signalisiert die Audio-Engine das bereitgestellte Ereignishandle, um den Client jedes Mal zu benachrichtigen, wenn ein Puffer für die Verarbeitung des Clients bereit ist. Die Audiodaten können auch in einer timergesteuerten Schleife verarbeitet werden. Dieser Modus wird im Beispiel RenderSharedTimerDriven veranschaulicht.

Weitere Informationen zum Rendern eines Datenstroms finden Sie unter Rendern eines Streams.

SDK-Beispiele, die die Core-Audio-APIs verwenden