Delen via


audioonderdelen User-Mode

In Windows Vista fungeren de kernaudio-API's als de basis van het audiosubsysteem in de gebruikersmodus. De kernaudio-API's worden geïmplementeerd als een dunne laag systeemonderdelen in de gebruikersmodus die clients in de gebruikersmodus scheiden van kernelmodusaudiostuurprogramma's en audiohardware. Audio-API's op een hoger niveau, zoals DirectSound en de Windows-multimediafuncties, hebben toegang tot audioapparaten via de kernaudio-API's. Daarnaast communiceren sommige audiotoepassingen rechtstreeks met de kernaudio-API's.

De kernaudio-API's ondersteunen het gebruiksvriendelijke concept van een audio-eindpuntapparaat. Een audio-eindpuntapparaat is een softwareabstractie die een fysiek apparaat vertegenwoordigt dat de gebruiker rechtstreeks bewerkt. Voorbeelden van audio-eindpuntapparaten zijn luidsprekers, hoofdtelefoons en microfoons. Zie Audio-eindpuntapparatenvoor meer informatie.

In het volgende diagram ziet u de belangrijkste audio-API's en hun relatie met de andere audioonderdelen in de gebruikersmodus in Windows Vista.

diagram van audiorenderingsonderdelen in de gebruikersmodus

Ter vereenvoudiging toont het voorgaande diagram alleen een gegevenspad voor audio-rendering naar het eindpuntapparaat. In het diagram wordt geen gegevenspad voor audio-opname weergegeven. De belangrijkste audio-API's zijn de MMDevice-API, WASAPI-, de DeviceTopology-APIen de EndpointVolume-API, die zijn geïmplementeerd in de systeemmodules Audioses.dll en Mmdevapi.dll gebruikersmodus.

Zoals in het voorgaande diagram wordt weergegeven, bieden de kernaudio-API's een basis voor de volgende API's op een hoger niveau:

  • Media Foundation
  • Windows multimedia waveXxx en mixerXxx functies
  • DirectSound
  • DirectMusic

DirectSound, de windows-multimediaaudiofuncties en Media Foundation (via de streaming audio renderer of SAR) communiceren rechtstreeks met de kernaudio-API's. DirectMusic communiceert indirect met de kernaudio-API's via DirectSound.

Een client van WASAPI geeft gegevens door aan een eindpuntapparaat via een eindpuntbuffer. Systeemsoftware en hardwareonderdelen beheren de verplaatsing van gegevens van de eindpuntbuffer naar het eindpuntapparaat op een manier die grotendeels transparant is voor de client. Bovendien kan de client voor een eindpuntapparaat dat is aangesloten op een audioadapter met detectie van jack-presence een eindpuntbuffer maken voor een eindpuntapparaat dat fysiek aanwezig is. Zie Audio-eindpuntapparatenvoor meer informatie over detectie van jack-presence.

In het voorgaande diagram ziet u twee typen eindpuntbuffer. Als een client van WASAPI een stream opent in gedeelde modus, schrijft de client audiogegevens naar de eindpuntbuffer en leest de Windows-audio-engine de gegevens uit de buffer. In deze modus deelt de client de audiohardware met andere toepassingen die in andere processen worden uitgevoerd. De audio-engine combineert de streams uit deze toepassingen en speelt de resulterende mix af via de hardware. De audio-engine is een systeemonderdeel in de gebruikersmodus (Audiodg.dll) dat alle stroomverwerkingsbewerkingen in software uitvoert. Als een client daarentegen een stream opent in exclusieve modus, heeft de client exclusieve toegang tot de audiohardware. Normaal gesproken is voor slechts een klein aantal pro-audio- of RTC-toepassingen exclusieve modus vereist. Hoewel in het diagram zowel de gedeelde modus als de exclusieve modusstreams worden weergegeven, bestaat slechts één van deze twee streams (en de bijbehorende eindpuntbuffer), afhankelijk van of de client de stream opent in de gedeelde modus of in de exclusieve modus.

In de exclusieve modus kan de client ervoor kiezen om de stream te openen in elke audio-indeling die het eindpuntapparaat ondersteunt. In de gedeelde modus moet de client de stream openen in de mixindeling die momenteel wordt gebruikt door de audio-engine (of een indeling die vergelijkbaar is met de mixindeling). De invoerstromen van de audio-engine en de uitvoermix van de engine hebben allemaal deze indeling.

In Windows 7 is een nieuwe functie met de naam modus voor lage latentie toegevoegd voor streams in de sharemodus is toegevoegd. In deze modus wordt de audio-engine uitgevoerd in de pull-modus, waarin de latentie aanzienlijk wordt verminderd. Dit is erg handig voor communicatietoepassingen die een lage latentie van de audiostream vereisen voor snellere streaming.

Toepassingen die audiostreams met lage latentie beheren, kunnen mmcss (Multimedia Class Scheduler Service) in Windows Vista gebruiken om de prioriteit van toepassingsthreads die toegang hebben tot eindpuntbuffers te verhogen. MET MMCSS kunnen audiotoepassingen met hoge prioriteit worden uitgevoerd zonder CPU-resources te weigeren voor toepassingen met een lagere prioriteit. MMCSS wijst een prioriteit toe aan een thread op basis van de taaknaam. Windows Vista ondersteunt bijvoorbeeld de taaknamen 'Audio' en 'Pro Audio' voor threads die audiostreams beheren. Standaard is de prioriteit van een Pro Audio-thread hoger dan die van een 'Audio'-thread. Zie de Windows SDK-documentatie voor meer informatie over MMCSS.

De kernaudio-API's ondersteunen zowel PCM- als niet-PCM-stroomindelingen. De audio-engine kan echter alleen PCM-streams combineren. Daarom kunnen alleen streams in de exclusieve modus niet-PCM-indelingen hebben. Zie Device Formatsvoor meer informatie.

De audio-engine wordt uitgevoerd in een eigen beveiligd proces, dat losstaat van het proces waarin de toepassing wordt uitgevoerd. Ter ondersteuning van een stream in de gedeelde modus wijst de Windows-audioservice (het vak 'Audioservice' in het voorgaande diagram) een eindpuntbuffer voor meerdere processen toe die toegankelijk is voor zowel de toepassing als de audio-engine. Voor de exclusieve modus bevindt de eindpuntbuffer zich in het geheugen dat toegankelijk is voor zowel de toepassing als de audiohardware.

De Windows-audioservice is de module waarmee Windows-audiobeleid wordt geïmplementeerd. Audiobeleid is een set interne regels die het systeem toepast op de interacties tussen audiostreams van meerdere toepassingen die delen en concurreren voor het gebruik van dezelfde audiohardware. De Windows-audioservice implementeert audiobeleid door de besturingsparameters voor de audio-engine in te stellen. De taken van de audioservice zijn:

  • Houd de audioapparaten bij die de gebruiker toevoegt aan of verwijdert uit het systeem.
  • De rollen bewaken die zijn toegewezen aan de audioapparaten in het systeem.
  • Het beheren van de audiostreams van groepen taken die vergelijkbare klassen audio-inhoud produceren (console, multimedia en communicatie).
  • Het volumeniveau van de gecombineerde uitvoerstroom beheren ('submix') voor elk van de verschillende typen audio-inhoud.
  • De audio-engine informeren over de verwerkingselementen in de gegevenspaden voor de audiostreams.

In sommige versies van Windows is de Windows-audioservice standaard uitgeschakeld en moet deze expliciet worden ingeschakeld voordat het systeem audio kan afspelen.

In het voorbeeld dat in het voorgaande diagram wordt weergegeven, is het eindpuntapparaat een set luidsprekers die zijn aangesloten op de audioadapter. De clienttoepassing schrijft audiogegevens naar de eindpuntbuffer en de audio-engine verwerkt de details van het transport van de gegevens van de buffer naar het eindpuntapparaat.

Het vak met het label 'Audiostuurprogramma' in het voorgaande diagram kan een combinatie zijn van door het systeem geleverde en door de leverancier geleverde stuurprogrammaonderdelen. In het geval van een audioadapter op een PCI- of PCI Express-bus levert het systeemstuurprogramma van poortklasse (Portcls.sys), waarmee een set poortstuurprogramma's voor de verschillende audiofuncties in de adapter wordt geïmplementeerd en de hardwareleverancier een adapterstuurprogramma levert waarmee een set minipoortstuurprogramma's wordt geïmplementeerd voor het verwerken van apparaatspecifieke bewerkingen voor de poortstuurprogramma's. In het geval van een High Definition Audio-controller en codec op een PCI- of PCI Express-bus levert het systeem het adapterstuurprogramma (Hdaudio.sys) en is er geen door de leverancier opgegeven stuurprogramma nodig. In het geval van een audioadapter op een USB-bus levert het systeem de AVStream-klassestuurprogramma (Ks.sys) plus het USB-audiostuurprogramma (Usbaudio.sys); opnieuw is er geen door de leverancier opgegeven stuurprogramma nodig.

Ter vereenvoudiging toont het voorgaande diagram alleen renderingstreams. De kernaudio-API's ondersteunen echter ook capturestreams. In de gedeelde modus kunnen verschillende clients de vastgelegde stream delen vanaf een audiohardwareapparaat. In de exclusieve modus heeft één client exclusieve toegang tot de vastgelegde stream vanaf het apparaat.

programmeerhandleiding voor