Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit onderwerp worden de software- en hardwaregerelateerde punten beschreven die u moet overwegen wanneer u besluit uw eigen WaveRT-minipoortstuurprogramma te ontwikkelen.
Microsoft heeft een set hardwareontwerprichtlijnen ontwikkeld voor een UAA- (Universal Audio Architecture) en de richtlijnen bevatten de functies die we aanbevelen voor een WaveRT-audioapparaat. De UAA-richtlijnen zijn nauw gebaseerd op de Hd-audiospecificatie (High Definition) die is ontwikkeld door Intel.
Windows Vista en nieuwere Windows-besturingssystemen bieden een HD-audiostuurprogramma voor UAA-compatibele audioapparaten. Dus als uw audioapparaat UAA-compatibel is, hoeft u geen eigen WaveRT-minipoortstuurprogramma te ontwikkelen. Maar voor audioapparaten met een aantal eigen, niet-UAA-hardwarefuncties moet u uw eigen WaveRT-minipoortstuurprogramma ontwikkelen om de eigen functies te ondersteunen.
Om u te helpen uw eigen WaveRT miniportstuurprogramma te ontwikkelen, raden we u aan eerst het stuurprogramma van de voorbeeldadapter te bekijken en vervolgens de WaveRT-vriendelijke UAA-functies te bekijken.
Het voorbeeldadapterstuurprogramma
Zie Voorbeeldaudiostuurprogramma'svoor meer informatie over het voorbeeldstuurprogramma.
De WaveRT-vriendelijke functies
Nadat u het stuurprogramma van de voorbeeldadapter hebt bekeken en uw WaveRT-minipoortstuurprogramma hebt ontworpen, moet u controleren of het de volgende software- en hardwarefuncties ondersteunt. Als gevolg hiervan wordt het minipoortstuurprogramma dat u bouwt, compatibel met het door het systeem geleverde WaveRT-poortstuurprogramma en met de werkingsmodus van de Windows Vista audio-engine.
Lage hardware-latentie. Een WaveRT-minipoortstuurprogramma moet een volledig werkende implementatie bieden van de methode IMiniportWaveRTStream::GetHWLatency methode. Deze methode is nodig om de eigenschap KSPROPERTY_RTAUDIO_HWLATENCY te ondersteunen.
FIFO interrupts. Een WaveRT-minipoortstuurprogramma moet automatisch onderbrekingen genereren bij FIFO-overloop en onderloop. Met deze functie kunt u glitches in de audiostream detecteren wanneer u tests uitvoert op het audioapparaat en de stuurprogrammasoftware. Zonder hardwareondersteuning (met andere woorden FIFO-interrupts), bestaat er geen handige en betrouwbare methode voor het verkrijgen van glitch-informatie.
Scatter-Gather DMA en bufferlus. Wanneer uw minipoortstuurprogramma een DMA-controller ondersteunt met scatter-gather mogelijkheden, kunnen gegevens in en uit de cyclische buffer worden verplaatst zonder tussenkomst van uw minipoortstuurprogramma.
Wanneer uw minipoortstuurprogramma ondersteuning biedt voor een DMA-controller die bufferlussen kan uitvoeren, kan de DMA-controller automatisch teruglopen naar het begin van de buffer nadat deze het einde van de buffer heeft bereikt met een lees- of schrijfbewerking. Het kan de wrap uitvoeren zonder tussenkomst van uw minipoortstuurprogramma.
Houd er rekening mee dat het WaveRT-poortstuurprogramma ondersteuning biedt voor bestaande hardwareontwerpen die niet de mogelijkheid hebben om overdrachten van spreidingsverzamelaars of automatische bufferlussen uit te voeren.
Als een audioapparaat geen spreidingsverzamelingsmogelijkheden heeft, moet het WaveRT-minipoortstuurprogramma eerst cyclische buffers toewijzen die bestaan uit pagina's die fysiek aaneengesloten zijn in het geheugen. Het minipoortstuurprogramma gebruikt vervolgens helperfuncties in het WaveRT-poortstuurprogramma om de gegevensoverdrachten en automatische bufferlussen uit te voeren. Het nadeel is dat een aanvraag voor het toewijzen van een groot blok aan aaneengesloten fysiek geheugen waarschijnlijker mislukt omdat de niet-gefragmenteerde geheugengroep van een systeem steeds gefragmenteerder wordt. Een apparaat met spreidingsvergaadfunctie wordt niet beïnvloed door geheugenfragmentatie.
Als een audioapparaat geen bufferlussen automatisch kan uitvoeren wanneer het DMA-kanaal het einde van de cyclische buffer bereikt, moet het WaveRT-minipoortstuurprogramma tussenkomen en het kanaal configureren om de overdracht van gegevens aan het begin van de buffer te starten.
Positieregisters. Voor nieuwe ontwerpen moeten hardware-implementeerfuncties een positieregister voor elk DMA-kanaal bevatten. Een positieregister geeft de huidige bufferpositie aan als een byte-offset vanaf het begin van de cyclische buffer. De waarde van het positieregister is nul aan het begin van de buffer. Wanneer het positieregister het einde van de cyclische buffer bereikt, loopt deze automatisch terug naar het begin van de buffer (wordt teruggezet naar nul) en blijft deze oplopen naarmate de bufferpositie vordert.
Positieregisters kunnen worden toegewezen aan virtueel geheugen, zodat clients de registers rechtstreeks kunnen lezen.
In het ideale geval moeten positieregisters de bufferpositie aangeven van de monsters die momenteel door de digitaal-naar-analoge en analoog-naar-digitale conversieprogramma's (DAC's en ADC's) van het audioapparaat worden verplaatst.
Deze informatie is echter mogelijk niet rechtstreeks beschikbaar via een audio-chipset die de digitale en analoge functies verdeelt in afzonderlijke buscontroller- en encoder/decoder -chips (codec). Normaal gesproken bevinden de positieregisters zich in de buscontrollerchip en elk register geeft de positie aan van de audiogegevens waarnaar de controller schrijft of leest vanuit de codecs.
Na het verkrijgen van een lezing van dit type positieregister kan de client de huidige positie schatten van de steekproeven die door de DAC's of ADC's worden verplaatst door de vertraging via de codec toe te voegen of af te trekken. De client verkrijgt de codec-vertraging van de KSPROPERTY_RTAUDIO_HWLATENCY eigenschapsaanvraag. Daarom moet een WaveRT-minipoortstuurprogramma de codecvertraging nauwkeurig rapporteren wanneer het poortstuurprogramma de IMiniportWaveRTStream::GetHardwareLatency methode aanroept als reactie op dit type eigenschapsaanvraag.
Houd er rekening mee dat het WaveRT-poortstuurprogramma ondersteuning biedt voor bestaande hardwareontwerpen die geen positieregisters hebben. Voor een apparaat met deze beperking moet het WaveRT-minipoortstuurprogramma de aanroepen naar de methode IMiniportWaveRTStream::GetPositionRegister laten mislukken door de foutcode STATUS_NOT_SUPPORTED te retourneren, waardoor het poortstuurprogramma verzoeken voor de eigenschap KSPROPERTY_RTAUDIO_POSITIONREGISTER laat mislukken. In dit geval moeten clients de huidige positie verkrijgen via de eigenschap KSPROPERTY_AUDIO_POSITION, wat zorgt voor de overhead van een overgang tussen de gebruikersmodus en de kernelmodus bij het lezen van elke positie.
Klokregister. Een klokregister is een optionele maar nuttige hardwarefunctie voor een waveRT-compatibel audioapparaat. Audiotoepassingsprogramma's kunnen klokregisters gebruiken om audiostreams te synchroniseren in twee of meer onafhankelijke audioapparaten met afzonderlijke en niet-gesynchroniseerde hardwareklokken. Zonder klokregisters kan een toepassing de drift tussen de hardwareklokken niet detecteren en compenseren.
De voorbeeldklok die door de audiohardware wordt gebruikt om audiogegevens via de digitaal-naar-analoge of analoge naar-digitale conversieprogramma's te kloken, moet worden afgeleid van de interne klok die het klokregister oploopt. Een klokregister dat wordt verhoogd met een snelheid die asynchroon is met betrekking tot de voorbeeldklok, is van geen gebruik voor synchronisatie en mag niet worden weergegeven.
Net als bij de positieregisters kan het klokregister worden toegewezen aan virtueel geheugen, zodat clients het register rechtstreeks kunnen lezen.
Audioverwerkingsobjecten. Een goed ontworpen WaveRT-minipoortstuurprogramma mag de audiogegevens nooit aanraken in de cyclische buffer van een audioapparaat. De hardware moet zo worden ontworpen dat audiogegevens rechtstreeks tussen de client en audiohardware stromen zonder tussenkomst van de software van het audiostuurprogramma.
API's zijn alleen beschikbaar voor gebruik met audiostreams in de gedeelde modus. Voor exclusieve streams wisselen toepassingen gegevens rechtstreeks uit met WaveRT-hardwareapparaten via cyclische buffers en kunnen geen andere onderdelen de gegevens in de buffers aanraken.
Zie Windows Audio Processing Objectsvoor meer informatie.