Loopbackaufzeichnung
Im Loopbackmodus kann ein Client von WASAPI den Audiostream erfassen, der von einem Renderingendpunktgerät wiedergegeben wird. Um einen Stream im Loopbackmodus zu öffnen, muss der Client:
- Rufen Sie eine IMMDevice-Schnittstelle für das Renderingendpunktgerät ab.
- Initialisieren Sie einen Erfassungsstream im Loopbackmodus auf dem Renderingendpunktgerät.
Nach dem Ausführen dieser Schritte kann der Client die IAudioClient::GetService-Methode aufrufen, um eine IAudioCaptureClient-Schnittstelle auf dem Renderingendpunktgerät abzurufen.
WASAPI stellt den Loopbackmodus in erster Linie zur Unterstützung des Akustik-Echoabbruchs (Acoustic Echo Cancellation, AEC) bereit. Für andere Arten von Audioanwendungen kann der Loopbackmodus jedoch nützlich sein, um die Systemmischung zu erfassen, die von der Audio-Engine wiedergegeben wird.
Im Codebeispiel unter Erfassen eines Streamskann die RecordAudioStream-Funktion leicht geändert werden, um einen Loopbackmodus-Erfassungsdatenstrom zu konfigurieren. Die erforderlichen Änderungen sind:
- Ändern Sie im Aufruf der IMMDeviceEnumerator::GetDefaultAudioEndpoint-Methode den ersten Parameter (dataFlow) von eCapture in eRender.
- Ändern Sie im Aufruf der IAudioClient::Initialize-Methode den Wert des zweiten Parameters (StreamFlags) von 0 in AUDCLNT _ STREAMFLAGS _ LOOPBACK.
In Versionen von Windows vor Windows 10 1703 empfängt der Erfassungsclient im Pullmodus keine Ereignisse, wenn ein Stream mit ereignisgesteuerter Pufferung initialisiert und loopbackfähig ist. Um dies zu umgehen, initialisieren Sie einen Renderstream im ereignisgesteuerten Modus. Jedes Mal, wenn der Client ein Ereignis für den Renderstream empfängt, muss er dem Erfassungsclient signalisieren, dass er den Erfassungsthread ausführen soll, der die nächsten Stichproben aus dem Erfassungsendpunktpuffer liest. In Windows 10 Versionen 1703 und höher werden ereignisgesteuerte Loopbackclients unterstützt, und die Problemumgehung im Zusammenhang mit dem Renderstream ist nicht mehr erforderlich.
Ein Client kann den Loopbackmodus nur für einen Stream im freigegebenen Modus (AUDCLNT _ SHAREMODE _ SHARED) aktivieren. Streams im exklusiven Modus können nicht im Loopbackmodus ausgeführt werden.
Die Implementierung des Loopbacks durch WASAPI hängt von den Funktionen der Hardware ab. Wenn die Hardware eine Loopback-PIN am Renderendpunkt unterstützt, verwendet WASAPI die auf diesem Pin bereitgestellten Audiodaten für den Loopbackstream. Wenn die Hardware keinen Loopbackpin unterstützt, kopiert WASAPI den Ausgabestream von der Audio-Engine in den Erfassungspuffer der Loopbackanwendung und kopiert die Audiodaten auf den Renderpin der Hardware.
Einige Hardwarehersteller implementieren Loopbackgeräte (im Gegensatz zu Pin-Instanzen auf Rendergeräten) in ihren Audioadaptern. Obwohl Hardware-Loopbackgeräte dem WASAPI-Loopbackmodus ähneln, können sie schwieriger zu verwenden sein.
Hardware-Loopbackgeräte haben die folgenden Nachteile für Audioanwendungen:
- Nicht alle Audioadapter verfügen über Loopbackgeräte. Daher funktionieren Anwendungen, die von ihnen abhängen, nicht auf allen Systemen.
- Bevor eine Anwendung von einem Loopbackgerät aufzeichnen kann, muss der Benutzer das Loopbackgerät identifizieren und für die Verwendung aktivieren.
Verschiedene Anbieter weisen ihren Hardware-Loopbackgeräten unterschiedliche Namen zu. Die folgenden Namen sind Beispiele:
- Stereomischung
- Waveoutmischung
- Gemischte Ausgabe
- Was Sie hören
Das Fehlen standardisierter Namen kann dazu führen, dass Benutzer Schwierigkeiten haben, ein Loopbackgerät in einer Liste von Gerätenamen zu identifizieren.
Ein Hardware-Loopbackgerät ist ein Erfassungsgerät. Wenn ein Adapter also ein Loopbackgerät unterstützt, kann eine Audioanwendung vom Gerät auf die gleiche Weise aufzeichnen wie von jedem anderen Erfassungsgerät.
Wenn Sie beispielsweise ein Hardware-Loopbackgerät als Standarderfassungsgerät auswählen, können Sie die RecordAudioStream-Funktion (ohne Änderung) im Codebeispiel unter Erfassen eines Streams verwenden, um den Datenstrom vom Gerät zu erfassen. (Sie können auch eine Legacy-Audio-API wie die Windows Multimediafunktionen waveInXxx verwenden, um den Stream vom Gerät zu erfassen.)
Wenn Ihr Audioadapter ein Hardware-Loopbackgerät enthält, können Sie die Windows Multimedia-Systemsteuerung Mmsys.cpl verwenden, um das Gerät als Standardgerät für die Erfassung festzulegen. Die Schritte lauten wie folgt:
Um Mmsys.cpl auszuführen, öffnen Sie ein Eingabeaufforderungsfenster, und geben Sie den folgenden Befehl ein:
control mmsys.cplAlternativ können Sie Mmsys.cpl ausführen, indem Sie mit der rechten Maustaste auf das Lautsprechersymbol im Infobereich rechts auf der Taskleiste klicken und Recording Devices (Aufzeichnungsgeräte) auswählen.
Nachdem das fenster Mmsys.cpl geöffnet wurde, klicken Sie mit der rechten Maustaste auf eine beliebige Stelle in der Liste der Aufzeichnungsgeräte, und überprüfen Sie, ob die Option Deaktivierte Geräte anzeigen aktiviert ist. (Andernfalls wird das Loopbackgerät nicht in der Liste angezeigt,wenn es deaktiviert ist.)
Durchsuchen Sie die Liste der Aufzeichnungsgeräte, um das Loopbackgerät zu suchen (sofern vorhanden). Wenn das Loopbackgerät deaktiviert ist, aktivieren Sie es, indem Sie mit der rechten Maustaste auf das Gerät klicken und auf Aktivieren klicken.
Klicken Sie abschließend mit der rechten Maustaste auf das Gerät, und klicken Sie auf Als Standardgerät festlegen, um das Loopbackgerät als Standarderfassungsgerät auszuwählen.
WASAPI unterstützt die Loopbackaufzeichnung, unabhängig davon, ob die Audiohardware ein Loopbackgerät enthält oder ob der Benutzer das Gerät aktiviert hat.
Windows Vista bietet DRM (Digital Rights Management). Inhaltsanbieter verlassen sich auf DRM, um ihre proprietäre Musik oder andere Inhalte vor nicht autorisiertem Kopieren und anderen unzulässigen Verwendungen zu schützen. Ebenso lässt ein vertrauenswürdiger Audiotreiber nicht zu, dass ein Loopbackgerät digitale Datenströme erfasst, die geschützte Inhalte enthalten. Windows Vista erlaubt nur vertrauenswürdigen Treibern die Wiedergabe geschützter Inhalte. Weitere Informationen zu vertrauenswürdigen Treibern und DRM finden Sie in der Windows DDK-Dokumentation.
WASAPI-Loopback enthält die Mischung aller wiedergegebenen Audiodaten, unabhängig von der Terminal services-Sitzung, aus der die Audiodaten stammen. Beispielsweise können Sie einen Loopbackclient in einem Dienst ausführen, der in Sitzung 0 ausgeführt wird, und Audiodaten aus allen Benutzersitzungen sowie Audiodaten erfassen, die von Sitzung 0 wiedergegeben werden.
Remotedesktop ermöglicht das Umleiten von Audiodaten an den Client. Dies wird implementiert, indem neue Audiogeräte erstellt werden, die nur für diese Sitzung angezeigt werden.