Delen via


Hardware-Offloaded audioverwerking

Door hardware-uitgebestede audioverwerking kunnen de belangrijkste audioverwerkingstaken buiten de CPU van de computer worden uitgevoerd.

Audioverwerking kan zeer rekenintensief zijn. In veel scenario's kan het dus nuttig zijn om een toegewezen processor toe te staan om voor verwerkingstaken te zorgen, zoals het mengen en toepassen van effecten.

Wanneer u een stuurprogramma implementeert voor offloaded audio, ontwikkelt u een stuurprogramma dat offloaded audiostreams kan verwerken en die mogelijkheid aan het Windows-audiosysteem kan aanbieden.

De volgende onderwerpen in deze sectie bespreken de ontwikkeling van stuurprogramma's, de impact van de toepassing en andere problemen die u moet kennen wanneer u een audiostuurprogramma ontwikkelt voor een audioadapter waarmee een hardware-audio-engine wordt geïmplementeerd om offloade audiostreams te verwerken.

Implementatie van offloaded audiostuurprogramma's

Helperinterfaces voor uitgelagerde audioverwerking

Glitch-rapportage voor ausgelagerde audio

Voor meer informatie over offloaded APO's, zie Hardware Offloaded APO-effecten

Overzicht van Hardware-Offloaded architectuur voor audioverwerking

De software audio-engine

In het volgende diagram ziet u de Windows-software-audio-engine.

Diagram van de architectuur van het audiostuurprogramma met toepassing die wordt aangeroepen in SFX-, MFX- en EFX-effecten, waarmee verbinding wordt gemaakt met stuurprogramma's en audiohardware.

Audiostreams komen binnen in de software-audio-engine van de WASAPI-laag (Windows Audio Session API) en mogelijk via een API op een hoger niveau, zoals Media Foundation. In de software-audio-engine kunnen streameffecten (SFX) individueel op elke stream worden toegepast voordat de afzonderlijke streams worden gemengd. Daarna worden ze doorgegeven aan beschikbare eindpunteffecten (EFX) en verzonden naar de renderinghardware en luidsprekers.

De hardware-audioengine

De hardware-audio-engine wordt geïmplementeerd in de audioadapter en weerspiegelt grotendeels de functionaliteit van de software-audio-engine. Hoewel Windows ondersteuning biedt voor hardware-offloaded audioverwerking, is het audiostuurprogramma voor een specifieke audioadapter verantwoordelijk voor het beschikbaar maken van de onderliggende mogelijkheden van de audiohardware, met behulp van de topologie die in het volgende diagram wordt getoond.

De hardware-audio-engine moet één hostprocesstroom en maximaal n offloaded streams accepteren. Deze uitbesteedde datastromen worden rechtstreeks vanuit de toepassingslaag gerouteerd om in de hardware verwerkt te worden. Met andere woorden, de offloaded streams worden niet verwerkt door de software-audioverwerkingsengine. Het diagram toont een implementatie die is ontworpen voor het verwerken van maximaal drie offloaded streams. De hostprocesstroom is de uiteindelijke uitvoer van de software-mixer van alle streams die in de software-audio-engine zijn verwerkt. Elke hardwareaudio-engine moet ook een hardwaremixer bevatten.

Om pariteit met de software-audio-engine en de WASAPI-interface te behouden, is het noodzakelijk dat de hardware-audio-engine de uiteindelijke audio-uitvoerstroom teruggeeft aan de audiostack in de vorm van een loopbackstream. Dit is met name essentieel voor toepassingen en scenario's die afhankelijk zijn van Acoustic Echo Cancellation, waarvoor kennis van de uiteindelijke uitvoerstroom nodig is om echo's te annuleren en feedback te voorkomen.

Om een pad voor een loopback-stream te implementeren, is het audiostuurprogramma verantwoordelijk voor het blootstellen van een loopback-pin. Deze pin retourneert de audiogegevens van de uiteindelijke uitvoer van de audio-engine, als de gegevens zijn gecodeerd in een PCM-indeling. Anders wordt het resultaat na het mengen (maar vooraf coderen) geretourneerd. Dit betekent dat in het geval van audiogegevens die worden verwerkt met een hardware EFX die codeert voor een niet-PCM-indeling, de loopbackstream direct na de hardwaremixer wordt genomen, vóór de EFX-fase in de hardwareaudio-engine. Voor informatie over de KS-filtertopologie die de hardware-audio-engine vertegenwoordigt, zie Hardware Offloaded Audio Driver Implementation.

De geïntegreerde audioarchitectuur

In het volgende diagram ziet u een overzicht van de resulterende architectuur wanneer een hardware-audio-engine met de Windows-software-audio-engine werkt.

Diagram van geïntegreerde software- en hardwareaudio-engines, waarbij toepassingen worden aangeroepen in SFX-, MFX- en EFX-effecten, verbinding maken met stuurprogramma's, audiohardware en loopbackstream die leidt tot WASAPI-laag.

In een scenario waarin het audiostuurprogramma de ondersteuning voor offloaded audioverwerking heeft aangegeven, worden de eerste n (in dit geval drie) streams die worden geïnitialiseerd, rechtstreeks van de WASAPI-laag naar de hardware-audio-engine gerouteerd, waarbij de software-audio-engine wordt overgeslagen. Nieuwe audiostreams die het aantal n overstijgen dat door de hardware-audio-engine wordt ondersteund, worden voor verwerking via de software-audio-engine gerouteerd. De resulterende stream van de software-audio-engine wordt vervolgens als hostprocesstroom naar de hardware-audio-engine verzonden. De host-procestroom wordt gecombineerd met de eerste n streams, vervolgens wordt EFX-verwerking toegepast, en de resulterende stream wordt naar de luidsprekers verzonden.

De KS-filtertopologie

In besturingssystemen met Windows 8 en hoger is ondersteuning geboden voor een ingebouwde hardware-audio-engine om audiostreams te verwerken. Wanneer u een dergelijke audioadapter ontwikkelt, moet het bijbehorende audiostuurprogramma dit feit op een specifieke manier blootstellen aan het audiosysteem van de gebruikersmodus, zodat het audiosysteem de functies van deze adapter en het bijbehorende stuurprogramma kan detecteren, gebruiken en correct beschikbaar maken.

Om het mogelijk te maken voor audiostuurprogramma's om de hardwaremogelijkheden van deze nieuwe audioadapters beschikbaar te maken, heeft Windows 8 een KS-filtertopologie geïntroduceerd die het stuurprogramma moet gebruiken:

Diagram van KS-filtertopologie met invoerpin voor hostproces, audio-invoerpin voor offloading en loopback-uitvoerpin. Audioverwerking toegepast op de offloaded audio- en hostprocesinvoerpin, loopbackpad vanuit de laatste verwerkingsfase en twee streams via DAC uit de KS-filtertopologie.

Zoals in de vorige afbeelding wordt weergegeven, vertegenwoordigt een KS-filtertopologie de gegevenspaden via de hardware en worden ook de functies weergegeven die beschikbaar zijn op deze paden. In het geval van een audioadapter die offloaded audio kan verwerken, zijn de volgende ingangen en uitgangen (zogenaamde pinnen) op het KS-filter:

  • Eén Hostproces-pin. Dit vertegenwoordigt de invoer in het KS-filter van de software-audio-engine.

  • Eén loopback pin. Dit vertegenwoordigt een uitvoer van de hardware-audio-engine naar de WASAPI-laag (Windows Audio Session API).

  • Een aantal Offloaded-audio-pinnen. Hoewel in de afbeelding slechts één pin van dit type wordt weergegeven, is een IHV vrij om een willekeurig aantal (n) pinnen te implementeren.

De werkelijke service in het audiosysteem van de gebruikersmodus dat 'leidt' tot de detectie van de audioadapter en het bijbehorende stuurprogramma, is de AudioEndpointBuilder. De AudioEndpointBuilder-service bewaakt de KSCATEGORY_AUDIO klasse voor aankomsten en verwijderingen van de apparaatinterface. Wanneer een stuurprogramma voor een audioapparaat een nieuw exemplaar van de KSCATEGORY_AUDIO apparaatinterfaceklasse registreert, wordt er een melding voor aankomst van de apparaatinterface verzonden. De AudioEndpointBuilder-service detecteert de ontvangstmelding van de apparaatinterface en gebruikt een algoritme om de topologie van de audioapparaten in het systeem te onderzoeken, zodat deze de juiste actie kan ondernemen.

Wanneer u uw audiostuurprogramma ontwikkelt ter ondersteuning van een adapter die offloaded audio kan verwerken, moet uw stuurprogramma het KSNODETYPE_AUDIO_ENGINE audio-eindpunt gebruiken om de mogelijkheden van de hardwareaudio-engine beschikbaar te maken. Zie Het algoritme audio-eindpuntbouwer voor meer informatie over het detectieproces voor audio-eindpunten.

Overwegingen voor de gebruikersinterface

U hebt uw audiostuurprogramma ontwikkeld om de onderliggende hardwaremogelijkheden van een audioadapter te beheren die offloaded audio kan verwerken. Dit betekent dat uw stuurprogramma de beste kennis heeft over het beheren van de functies van de adapter. U moet dus een gebruikersinterface ontwikkelen die de functies van de adapter beschikbaar maakt voor de eindgebruiker in de vorm van opties die ze kunnen selecteren, inschakelen en/of uitschakelen.

Als u echter al een gebruikersinterface hebt die wordt gebruikt voor het beheren van audioverwerkingsobjecten (API's) die u hebt ontwikkeld, kan deze gebruikersinterface worden uitgebreid voor gebruik met uw nieuwe audioadapter. In dit geval bieden uw extensies aan de gebruikersinterface softwarebeheer voor de API's en hardwarebeheer voor de adapter.

Toepassingsimpact

De functionaliteit die wordt beschreven voor dit nieuwe type audioadapter en het bijbehorende stuurprogramma, kan worden gebruikt door UWP-apps via WASAPI, Media Foundation, Media Engine of de HTML 5-audiotags<>. Wave en DSound kunnen niet worden gebruikt, omdat ze niet beschikbaar zijn voor UWP-apps. Houd er ook rekening mee dat desktoptoepassingen niet de offloadmogelijkheden van audioadapters kunnen gebruiken die ondersteuning bieden voor hardware-offloaded audio. Deze toepassingen kunnen nog steeds audio weergeven, maar alleen via de hostpin die gebruikmaakt van de software-audio-engine.

Als een UWP-app media-inhoud streamt en Media Foundation, Media Engine of de HTML 5-audiotags <> gebruikt, wordt de app automatisch aangemeld voor hardware-offloading zolang de juiste audiocategorie is ingesteld voor de stream. Aanmelden voor offloading van hardware wordt per stream uitgevoerd.

UWP-apps die GEBRUIKMAKEN van WASAPI- of streamingcommunicatie moeten zich expliciet aanmelden voor offloading van hardware.

Implementatie van hardware-offloaded audiostuurprogramma's

Windows-audioverwerkingsobjecten