Apparaatindelingen
Voor een audiotoepassing is het een voordeel van het gebruik van een audio-API op een hoger niveau, zoals DirectSound of de Windows-multimedia-waveOutXxx-functies, is dat de API automatisch converteert tussen de streamindelingen die door de toepassing worden gebruikt en de indelingen die door het audioapparaat worden gebruikt. De kernaudio-API's zijn daarentegen restrictiever omdat toepassingsstreams indelingen moeten gebruiken die hetzelfde zijn als, of nauw verwant zijn aan de indelingen die door het apparaat worden gebruikt. Toepassingen die gebruikmaken van de kernaudio-API's om audiostreams af te spelen of op te nemen, zijn dus mogelijk vereist om enkele of alle conversies tussen streamindelingen uit te voeren.
Een toepassing die GEBRUIKMAAKT van WASAPI voor het beheren van streams in de gedeelde modus, kan afhankelijk zijn van de audio-engine om slechts beperkte indelingsconversies uit te voeren. De audio-engine kan converteren tussen een standaard PCM-voorbeeldgrootte die wordt gebruikt door de toepassing en de drijvendekommavoorbeelden die de engine gebruikt voor de interne verwerking. De indeling voor een toepassingsstroom moet echter doorgaans hetzelfde aantal kanalen en dezelfde samplefrequentie hebben als de streamindeling die door het apparaat wordt gebruikt.
Als een toepassing een apparaat in de exclusieve modus gebruikt, moet de toepassing een streamindeling gebruiken die de audiohardware expliciet ondersteunt. In de exclusieve modus wisselen de toepassing en het apparaat rechtstreeks audiogegevens uit zonder tussenkomst van de audio-engine.
Veel audioapparaten 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. Bovendien worden alleen niet-PCM-indelingen met vaste gegevenssnelheden ondersteund in de exclusieve modus. Een voorbeeld van een vaste niet-PCM-indeling is een 48-kHz Windows Media Audio Professional -audiostream (WMA Pro) die via een Sony/Philips digitale interface (S/PDIF) in digitale vorm passeert zonder te worden gedecodeerd. Zie WMA Pro-gegevensbereiken opgevenvoor meer informatie over het gebruik van WMA Pro-streams via S/PDIF.
WASAPI maakt gebruik van een WAVEFORMATEX of WAVEFORMATEXTENSIBLE structuur om een stroomindeling op te geven. Een WAVEFORMATEXTENSIBLE structuur is effectief een WAVEFORMATEX structuur die is uitgebreid om een groter scala aan indelingen te beschrijven. Elke indeling die kan worden beschreven door een zelfstandige WAVEFORMATEX structuur kan ook worden beschreven door een WAVEFORMATEXTENSIBLE structuur.
Het eerste lid van de structuur WAVEFORMATEXTENSIBLE is een WAVEFORMATEX structuur. De inhoud van een WAVEFORMATEX structuur geeft aan of het een zelfstandige WAVEFORMATEX structuur of een deel van een WAVEFORMATEXTENSIBLE structuur is.
Een zelfstandige WAVEFORMATEX structuur kan een indeling met een of twee kanalen en een steekproefgrootte van 8 bits adequaat beschrijven. Op zichzelf kan een WAVEFORMATEX structuur de toewijzing van kanalen aan sprekerposities niet opgeven. Hoewel WAVEFORMATEX de grootte van de container voor elk audiovoorbeeld specificeert, kan het niet het aantal bits van precisie in een voorbeeld opgeven (bijvoorbeeld 20 bits precisie in een 24-bits container). De WAVEFORMATEXTENSIBLE- structuur kan daarentegen zowel de toewijzing van kanalen aan luidsprekers als het aantal bits van precisie in elk voorbeeld opgeven.
Zie de Windows DDK-documentatie voor meer informatie over WAVEFORMATEX en WAVEFORMATEXTENSIBLE.
Vanaf Windows 7 is de WAVEFORMATEXTENSIBLE- uitgebreid om apparaatindelingen te vertegenwoordigen voor het verzenden van gecodeerde audio via een IEC 61937-compatibele interface. Zie Indelingen voor IEC 61937 Transmissionsvoor informatie over de nieuwe structuur.
De apparaatindeling opgeven
De volgende WASAPI-methoden gebruiken de WAVEFORMATEX- en WAVEFORMATEXTENSIBLE structuren om stroomindelingen te beschrijven:
De methode GetMixFormat haalt de stroomindeling op die de audio-engine gebruikt voor de interne verwerking van streams in de gedeelde modus. De methode maakt altijd gebruik van een WAVEFORMATEXTENSIBLE structuur, in plaats van een zelfstandige WAVEFORMATEX structuur, om de notatie op te geven.
De methode IsFormatSupported geeft aan of een audio-eindpuntapparaat een bepaalde streamindeling ondersteunt. De beller moet opgeven of de streamindeling is bedoeld voor gebruik in de gedeelde modus of in de exclusieve modus. Voor indelingen in de gedeelde modus voert de methode een query uit op de audio-engine om te bepalen of deze de opgegeven indeling ondersteunt. Voor exclusieve-modusindelingen voert de methode een query uit op het apparaatstuurprogramma. Sommige apparaatstuurprogramma's melden dat ze een PCM-indeling van 1 kanaal of 2-kanaals ondersteunen als de indeling is opgegeven door een zelfstandige WAVEFORMATEX structuur, maar zal dezelfde indeling afwijzen als deze is opgegeven door een WAVEFORMATEXTENSIBLE structuur. Als u betrouwbare resultaten van deze stuurprogramma's wilt verkrijgen, moeten toepassingen in de exclusieve modus IsFormatSupported tweemaal aanroepen voor elke PCM-indeling van 1 kanaal of 2-kanaals: één aanroep moet een zelfstandige WAVEFORMATEX structuur gebruiken om de indeling op te geven en de andere aanroep moet een WAVEFORMATEXTENSIBLE- structuur gebruiken om dezelfde indeling op te geven.
Nadat een toepassing GetMixFormat of IsFormatSupported heeft gebruikt om een geschikte indeling te vinden voor een gedeelde of exclusieve-modusstream, kan de toepassing de methode Initialiseren aanroepen om een stream met die indeling te initialiseren. Een toepassing die probeert een stream in de gedeelde modus te initialiseren met een indeling die niet identiek is aan de mixindeling die is verkregen uit de methode GetMixFormat, maar die hetzelfde aantal kanalen en dezelfde steekproeffrequentie als de combinatieindeling heeft, slaagt waarschijnlijk wel. Voordat u initialiserenaanroept, kan de toepassing IsFormatSupported aanroepen om te controleren of initialiseren de indeling accepteert.
De mixindeling die de audio-engine gebruikt voor de interne verwerking van streams in de gedeelde modus, is nauw verwant aan, maar is niet noodzakelijkerwijs identiek aan de streamindeling die het audio-eindpuntapparaat gebruikt in de gedeelde modus. Via het Configuratiescherm van Windows multimedia, Mmsys.cpl, kan de gebruiker de streamindeling selecteren die een audio-eindpuntapparaat gebruikt wanneer het werkt in de gedeelde modus. De stappen zijn als volgt:
Als u Mmsys.cplwilt uitvoeren, opent u een opdrachtpromptvenster en voert u de volgende opdracht in:
mmsys.cpl
U kunt ook Mmsys.cpl uitvoeren door met de rechtermuisknop op het luidsprekerpictogram in het systeemvak te klikken. Deze bevindt zich aan de rechterkant van de taakbalk en selecteert Afspeelapparaten of Opnameapparaten.
Nadat het venster Mmsys.cpl is geopend, selecteert u een apparaat in de lijst met afspeelapparaten of de lijst met opnameapparaten en klikt u op Eigenschappen.
Wanneer het eigenschappenvenster wordt geopend, klikt u op Geavanceerdeen selecteert u een indeling in de lijst met beschikbare indelingen in het vak Standaardindeling.
Stel dat de gebruiker de volgende standaardindeling selecteert in de lijst met beschikbare indelingen voor een afspeelapparaat:
2 kanaal, 16-bits, 44100 Hz (CD-kwaliteit)
Dit is de indeling die het apparaat vervolgens gaat gebruiken wanneer het werkt in de gedeelde modus. In Windows Vista gebruikt de audio-engine een enigszins gewijzigde versie van deze indeling voor de interne verwerking van streams in de gedeelde modus. De audio-engine gebruikt een indeling met hetzelfde aantal kanalen (twee) en dezelfde samplefrequentie (44100 Hz), maar converteert voorbeelden naar drijvendekommanummers voordat deze worden verwerkt. De audio-engine converteert de drijvende-kommavoorbeelden in de uitvoermix naar 16-bits gehele getallen voordat deze via het apparaat worden afgespeeld.
Een toepassing kan een query uitvoeren op de eigenschap PKEY_AudioEngine_DeviceFormat van een audio-eindpunt om de indeling voor de gedeelde modus te verkrijgen die de gebruiker voor het apparaat heeft geselecteerd. Zie Apparaateigenschappenvoor meer informatie over het uitvoeren van query's op de eigenschappen van een apparaat.
Sommige toepassingen kunnen de indeling vinden die is opgegeven door de eigenschap PKEY_AudioEngine_DeviceFormat van een apparaat, zodat deze een geschikte indeling is voor het openen van een stream in de exclusieve modus op het apparaat. Andere toepassingen die exclusieve modusstreams beheren, hebben mogelijk aanvullende vereisten die een complexe indelingsonderhandeling met het apparaat verplicht stellen. Normaal gesproken maakt een van deze toepassingen een lijst met geschikte indelingen, met de voorkeursindelingen aan het begin van de lijst. De toepassing roept vervolgens iteratief IsFormatSupported aan met elke opeenvolgende indeling in de lijst, beginnend aan het begin van de lijst, totdat er een indeling wordt gevonden die het apparaat ondersteunt.
Verwante onderwerpen