Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kärnljud-API:erna utgör grunden för undersystemet för användarlägesljud. Kärnljud-API:erna implementeras som ett tunt lager av systemkomponenter i användarläge som separerar klienter i användarläge från ljuddrivrutiner i kernelläge och ljudmaskinvara. Ljud-API:er på högre nivå, till exempel Media Foundation, får åtkomst till ljudenheter via kärnljud-API:erna. Dessutom kommunicerar vissa ljudprogram direkt med kärnljud-API:erna.
Api:erna för kärnljud stöder den användarvänliga uppfattningen om en ljudslutpunktsenhet. En ljudslutpunktsenhet är en programvaruabstraktion som representerar en fysisk enhet som användaren manipulerar direkt. Exempel på ljudslutpunktsenheter är högtalare, hörlurar och mikrofoner. Mer information finns i ljudslutpunktsenheter.
Följande diagram visar kärnljud-API:er och deras relation till de andra ljudkomponenterna i användarläge.
För enkelhetens skull visar föregående diagram endast en datasökväg för ljudåtergivning till slutpunktsenheten– diagrammet visar inte någon sökväg för ljudinspelningsdata. Kärnljud-API:erna innehåller MMDevice API, WASAPI, DeviceTopology APIoch EndpointVolume API, som implementeras i systemmodulerna Audioses.dll och Mmdevapi.dll användarläge.
Kärnljud-API:erna utgör en grund för API:er på högre nivå, till exempel Media Foundation, som kommunicerar med kärnkomponenten för ljud-API:er via dess SAR-komponent (Streaming Audio Renderer).
En klient för WASAPI skickar data till en slutpunktsenhet via en slutpunktsbuffert. Systemprogramvara och maskinvarukomponenter hanterar förflyttningen av data från slutpunktsbufferten till slutpunktsenheten på ett sätt som till stor del är transparent för klienten. För en slutpunktsenhet som ansluts till ett ljudkort med identifiering av jack-presence kan klienten dessutom bara skapa en slutpunktsbuffert för en slutpunktsenhet som finns fysiskt. Mer information om identifiering av jack-närvaro finns i Ljudslutpunktsenheter.
Föregående diagram visar två typer av slutpunktsbuffert. Om en klient för WASAPI öppnar en ström i delat läge, skriver klienten ljuddata till slutpunktsbufferten och den Windows ljudmotorn läser data från bufferten. I det här läget delar klienten ljudmaskinvaran med andra program som körs i andra processer. Ljudmotorn blandar strömmarna från dessa program och spelar upp den resulterande mixen genom maskinvaran. Ljudmotorn är en systemkomponent i användarläge (Audiodg.dll) som utför alla sina strömbearbetningsåtgärder i programvara. Om en klient däremot öppnar en ström i exklusivt lägehar klienten exklusiv åtkomst till ljudmaskinvaran. Vanligtvis kräver endast ett litet antal "pro audio" eller RTC-program exklusivt läge. Diagrammet visar både strömmar i delat läge och exklusivt läge, men endast en av dessa två strömmar (och dess motsvarande slutpunktsbuffert) finns, beroende på om klienten öppnar strömmen i delat läge eller i exklusivt läge.
I exklusivt läge kan klienten välja att öppna strömmen i valfritt ljudformat som slutpunktsenheten stöder. I delat läge måste klienten öppna strömmen i mixformatet som för närvarande används av ljudmotorn (eller ett format som liknar mixformatet). Ljudmotorns indataströmmar och utdatamixen från motorn är alla i det här formatet.
I läget med låg latens, som är tillgängligt för strömmar i delat läge, körs ljudmotorn i pull-läge, där svarstiden minskar avsevärt. Detta är användbart för kommunikationsprogram som kräver kort svarstid för ljudströmmar för snabbare strömning.
Program som hanterar ljudströmmar med låg latens kan använda MMCSS (Multimedia Class Scheduler Service) för att öka prioriteten för programtrådar som får åtkomst till slutpunktsbuffertar. MMCSS gör det möjligt för ljudprogram att köras med hög prioritet utan att neka CPU-resurser till program med lägre prioritet. MMCSS tilldelar en prioritet till en tråd baserat på dess aktivitetsnamn. Aktivitetsnamnen "Audio" och "Pro Audio" stöds till exempel för trådar som hanterar ljudströmmar. Som standard är prioriteten för en "Pro Audio"-tråd högre än för en "Ljud"-tråd. Mer information om MMCSS finns i dokumentationen om Windows SDK.
Api:erna för kärnljud stöder både PCM- och icke-PCM-strömformat. Ljudmotorn kan dock bara blanda PCM-strömmar. Därför kan endast strömmar i exklusivt läge ha icke-PCM-format. Mer information finns i Enhetsformat.
Ljudmotorn körs i en egen skyddad process, som är separat från den process som programmet körs i. För att stödja en ström i delat läge allokerar den Windows ljudtjänsten (rutan "Ljudtjänst" i föregående diagram) en korsprocessslutpunktsbuffert som är tillgänglig för både programmet och ljudmotorn. För exklusivt läge finns slutpunktsbufferten i minnet som är tillgänglig för både programmet och ljudmaskinvaran.
Den Windows ljudtjänsten är modulen som implementerar Windows ljudprincip. Ljudprincip är en uppsättning interna regler som systemet tillämpar på interaktioner mellan ljudströmmar från flera program som delar och konkurrerar om att använda samma ljudmaskinvara. Den Windows ljudtjänsten implementerar en ljudprincip genom att ange kontrollparametrarna för ljudmotorn. Ljudtjänstens uppgifter omfattar:
- Hålla reda på de ljudenheter som användaren lägger till i eller tar bort från systemet.
- Övervaka de roller som har tilldelats till ljudenheterna i systemet.
- Hantera ljudströmmar från grupper av uppgifter som producerar liknande klasser av ljudinnehåll (konsol, multimedia och kommunikation).
- Kontrollera volymnivån för den kombinerade utdataströmmen ("submix") för var och en av de olika typerna av ljudinnehåll.
- Informera ljudmotorn om bearbetningselementen i datavägarna för ljudströmmarna.
I vissa versioner av Windows är den Windows ljudtjänsten inaktiverad som standard och måste uttryckligen aktiveras innan systemet kan spela upp ljud.
I exemplet som visas i föregående diagram är slutpunktsenheten en uppsättning högtalare som är anslutna till ljudkortet. Klientprogrammet skriver ljuddata till slutpunktsbufferten och ljudmotorn hanterar information om att transportera data från bufferten till slutpunktsenheten.
Rutan med etiketten "Ljuddrivrutin" i föregående diagram kan vara en kombination av systembaserade och leverantörslevererade drivrutinskomponenter. När det gäller ett ljudkort på en PCI- eller PCI Express-buss tillhandahåller systemet portklasssystemdrivrutinen (Portcls.sys), som implementerar en uppsättning portdrivrutiner för de olika ljudfunktionerna i adaptern, och maskinvaruleverantören tillhandahåller en adapterdrivrutin som implementerar en uppsättning miniportdrivrutiner för att hantera enhetsspecifika åtgärder för portdrivrutinerna. När det gäller en hd-ljudstyrenhet och codec på en PCI- eller PCI Express-buss tillhandahåller systemet adapterdrivrutinen (Hdaudio.sys), och ingen drivrutin som tillhandahålls av leverantören behövs. När det gäller en ljudadapter på en USB-buss tillhandahåller systemet AVStream-klasssystemdrivrutinen (Ks.sys) plus USB-ljuddrivrutinen (Usbaudio.sys); igen behövs ingen drivrutin som tillhandahålls av leverantören.
För enkelhetens skull visar föregående diagram endast återgivningsströmmar. Kärnljud-API:erna stöder dock även inspelningsströmmar. I delat läge kan flera klienter dela den insamlade strömmen från en ljudmaskinvara. I exklusivt läge har en klient exklusiv åtkomst till den insamlade strömmen från enheten.
Relaterade ämnen