Loopback-opname
In loopback-modus kan een client van WASAPI de audiostream vastleggen die wordt afgespeeld door een renderingeindpuntapparaat. Als u een stream wilt openen in loopback-modus, moet de client het volgende doen:
- Haal een IMMDevice--interface op voor het renderingeindpuntapparaat.
- Initialiseer een opnamestroom in loopbackmodus op het renderingeindpuntapparaat.
Nadat u deze stappen hebt uitgevoerd, kan de client de methode IAudioClient::GetService aanroepen om een IAudioCaptureClient--interface op het renderingeindpuntapparaat te verkrijgen.
WASAPI biedt voornamelijk de loopbackmodus ter ondersteuning van akoestische echo-annulering (AEC). Andere typen audiotoepassingen kunnen echter de loopbackmodus nuttig vinden voor het vastleggen van de systeemmix die wordt afgespeeld door de audio-engine.
In het codevoorbeeld in Captureing a Streamkan de functie RecordAudioStream eenvoudig worden gewijzigd om een loopback-mode capture stream te configureren. De vereiste wijzigingen zijn:
- Wijzig in de aanroep van de methode IMMDeviceEnumerator::GetDefaultAudioEndpoint de eerste parameter (gegevensstroom) van eCapture in eRender.
- Wijzig in de aanroep van de methode IAudioClient::Initialize de waarde van de tweede parameter (StreamFlags) van 0 in AUDCLNT_STREAMFLAGS_LOOPBACK.
In versies van Windows vóór Windows 10 1703 ontvangt de pull-modus capture-client geen gebeurtenissen wanneer een stream wordt geïnitialiseerd met gebeurtenisgestuurde buffering en loopback is ingeschakeld. U kunt dit omzeilen door een renderstream te initialiseren in de gebeurtenisgestuurde modus. Telkens wanneer de client een gebeurtenis voor de renderstream ontvangt, moet deze de capture-client signaleren om de capture-thread uit te voeren die de volgende set voorbeelden van de buffer voor het vastleggen van eindpunt leest. In Windows 10-versies 1703 en hoger worden gebeurtenisgestuurde loopback-clients ondersteund en is de tijdelijke oplossing voor de renderstream niet meer nodig.
Een client kan de loopbackmodus alleen inschakelen voor een stream in de gedeelde modus (AUDCLNT_SHAREMODE_SHARED). Streams in exclusieve modus kunnen niet worden uitgevoerd in de loopback-modus.
De implementatie van loopback door WASAPI is afhankelijk van de mogelijkheden van de hardware. Als de hardware een loopbackpin op het rendereindpunt ondersteunt, gebruikt WASAPI de audio die op deze speld wordt geleverd voor de loopbackstream. Wanneer de hardware geen loopbackpin ondersteunt, kopieert WASAPI de uitvoerstroom van de audio-engine naar de capturebuffer van de loopback-toepassing, naast het kopiëren van de audiogegevens naar de renderpin van de hardware.
Sommige hardwareleveranciers implementeren loopback-apparaten (in plaats van exemplaren vast te maken op renderapparaten) in hun audioadapters. Hoewel hardware loopback-apparaten vergelijkbaar zijn met de WASAPI-loopbackmodus, kunnen ze moeilijker te gebruiken zijn.
Hardware loopback-apparaten hebben de volgende nadelen voor audiotoepassingen:
- Niet alle audioadapters hebben loopback-apparaten. Toepassingen die hiervan afhankelijk zijn, werken dus niet op alle systemen.
- Voordat een toepassing vanaf een loopback-apparaat kan opnemen, moet de gebruiker het loopback-apparaat identificeren en inschakelen voor gebruik.
Verschillende leveranciers wijzen verschillende namen toe aan hun hardware loopback-apparaten. De volgende namen zijn voorbeelden:
- Stereomix
- Waveout Mix
- Gemengde uitvoer
- Wat u hoort
Het ontbreken van gestandaardiseerde namen kan ertoe leiden dat gebruikers problemen ondervinden bij het identificeren van een loopback-apparaat in een lijst met apparaatnamen.
Een hardware loopback-apparaat is een opnameapparaat. Als een adapter dus ondersteuning biedt voor een loopback-apparaat, kan een audiotoepassing op dezelfde manier opnemen als het apparaat vanaf een ander opnameapparaat.
Als u bijvoorbeeld een hardwarelusback-apparaat selecteert als het standaardopnameapparaat, kunt u de functie RecordAudioStream (zonder wijziging) gebruiken in het codevoorbeeld in Een Stream- vastleggen om de stream van het apparaat vast te leggen. (U kunt ook een verouderde audio-API gebruiken, zoals de Windows-multimedia-waveInXxx--functies, om de stream van het apparaat vast te leggen.)
Als uw audioadapter een hardware loopback-apparaat bevat, kunt u het Configuratiescherm van Windows-multimedia, Mmsys.cpl, gebruiken om het apparaat aan te wijzen als het standaardopnameapparaat. De stappen zijn als volgt:
Als u Mmsys.cplwilt uitvoeren, opent u een opdrachtpromptvenster en voert u de volgende opdracht in:
control mmsys.cpl
U kunt ook Mmsys.cpl uitvoeren door met de rechtermuisknop op het luidsprekerpictogram in het systeemvak te klikken, dat zich aan de rechterkant van de taakbalk bevindt en Opnameapparatente selecteren.
Nadat het venster Mmsys.cpl is geopend, klikt u met de rechtermuisknop in de lijst met opnameapparaten en controleert u of de optie Uitgeschakelde apparaten weergeven is ingeschakeld. (Anders wordt het loopback-apparaat niet weergegeven in de lijst als het loopback-apparaat is uitgeschakeld.)
Blader door de lijst met opnameapparaten om het loopback-apparaat te zoeken (indien aanwezig). Als het loopback-apparaat is uitgeschakeld, schakelt u het in door met de rechtermuisknop op het apparaat te klikken en op inschakelen te klikken.
Als u ten slotte het loopback-apparaat wilt selecteren als het standaardopnameapparaat, klikt u met de rechtermuisknop op het apparaat en klikt u op Als standaardapparaat instellen.
WASAPI ondersteunt loopback-opname, ongeacht of de audiohardware een loopback-apparaat bevat of of de gebruiker het apparaat heeft ingeschakeld.
Windows Vista biedt DIGITAL Rights Management (DRM). Inhoudsproviders vertrouwen op DRM om hun eigen muziek of andere inhoud te beschermen tegen onbevoegd kopiëren en ander illegaal gebruik. Op dezelfde manier staat een vertrouwd audiostuurprogramma een loopback-apparaat niet toe om digitale streams vast te leggen die beveiligde inhoud bevatten. Met Windows Vista kunnen alleen vertrouwde stuurprogramma's beveiligde inhoud afspelen. Zie de Windows DDK-documentatie voor meer informatie over vertrouwde stuurprogramma's en DRM.
WASAPI-loopback bevat standaard de mix van alle audio die wordt afgespeeld, ongeacht de Terminal Services-sessie waaruit de audio afkomstig is. U kunt bijvoorbeeld een loopback-client uitvoeren in een service die wordt uitgevoerd in sessie 0 en audio vastleggen van alle gebruikerssessies, evenals audio die wordt afgespeeld vanuit sessie 0.
Vanaf Windows 10 Build 20348 kunt u specifieke processen en hun onderliggende processen opnemen of uitsluiten van loopback-opnamen door een AUDIOCLIENT_ACTIVATION_PARAMS door te geven in de aanroep naar IMMDevice::Activate. Zie de application loopback audio capture sample.
Met Extern bureaublad kunt u audio omleiden naar de client. Dit wordt geïmplementeerd door nieuwe audioapparaten te maken die alleen voor die sessie worden weergegeven.
Verwante onderwerpen