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.
[De functie die is gekoppeld aan deze pagina, Waveform Audio, is een verouderde functie. Het is vervangen door WASAPI- en Audio Graphs. WASAPI en Audio Graphs zijn geoptimaliseerd voor Windows 10 en Windows 11. Microsoft raadt ten zeerste aan dat nieuwe code WASAPI- en Audio Graphs gebruikt in plaats van Waveform Audio-, indien mogelijk. Microsoft stelt voor dat bestaande code die gebruikmaakt van de verouderde API's, indien mogelijk opnieuw worden geschreven om de nieuwe API's te gebruiken.]
In deze sectie wordt beschreven hoe u met waveform-audio-apparaten werkt en hoe u deze kunt openen, sluiten en er query's op kunt uitvoeren voor hun mogelijkheden. Ook wordt beschreven hoe u de apparaten in een systeem bijhoudt met behulp van apparaatgrepen en apparaat-id's.
Waveform-Audio uitvoerapparaten openen
Gebruik de functie waveOutOpen om een waveform-audio-uitvoerapparaat te openen voor afspelen. Met deze functie wordt het apparaat geopend dat is gekoppeld aan de opgegeven apparaat-id en wordt een ingang van het geopende apparaat geretourneerd door de ingang van een opgegeven geheugenlocatie te schrijven.
Sommige multimediacomputers hebben meerdere waveform-audio-uitvoerapparaten. Tenzij u een specifiek waveform-audio-uitvoerapparaat in een systeem wilt openen, moet u de vlag WAVE_MAPPER voor de apparaat-id gebruiken wanneer u een apparaat opent. De waveOutOpen functie kiest het apparaat in het systeem dat het beste de opgegeven gegevensindeling kan afspelen.
Query's uitvoeren op audioapparaten
Windows biedt de volgende functies om te bepalen hoeveel apparaten van een bepaald type beschikbaar zijn in een systeem.
Functie | Beschrijving |
---|---|
auxGetNumDevs- | Hiermee haalt u het aantal hulpuitvoerapparaten op dat aanwezig is in het systeem. |
waveInGetNumDevs- | Hiermee haalt u het aantal waveform-audio-invoerapparaten op dat aanwezig is in het systeem. |
waveOutGetNumDevs- | Hiermee haalt u het aantal waveform-audio-uitvoerapparaten op dat aanwezig is in het systeem. |
Audioapparaten worden geïdentificeerd door een apparaat-id. De apparaat-id wordt impliciet bepaald op basis van het aantal apparaten dat aanwezig is in een systeem. Apparaat-id's variëren van nul tot één kleiner dan het aantal aanwezige apparaten. Als er bijvoorbeeld twee waveform-audio-uitvoerapparaten in een systeem zijn, zijn geldige apparaat-id's 0 en 1.
Nadat u hebt vastgesteld hoeveel apparaten van een bepaald type aanwezig zijn in een systeem, kunt u een van de volgende functies gebruiken om een query uit te voeren op de mogelijkheden van elk apparaat.
Functie | Beschrijving |
---|---|
auxGetDevCaps- | Haalt de mogelijkheden van een opgegeven hulpuitvoerapparaat op. |
waveInGetDevCaps- | Haalt de mogelijkheden van een opgegeven waveform-audio-invoerapparaat op. |
waveOutGetDevCaps- | Haalt de mogelijkheden van een opgegeven waveform-audio-uitvoerapparaat op. |
Elk van deze functies vult een structuur met informatie over de mogelijkheden van een opgegeven apparaat. De volgende tabel bevat de structuren die overeenkomen met elk van deze functies.
Functie | Structuur |
---|---|
auxGetDevCaps- | AUXCAPS- |
waveInGetDevCaps- | WAVEINCAPS- |
waveOutGetDevCaps- | WAVEOUTCAPS- |
Standaardindelingen worden vermeld in de dwFormats lid van de WAVEOUTCAPS structuur. Waveform-audio-apparaten kunnen niet-standaardindelingen ondersteunen. Als u wilt bepalen of een bepaalde indeling (standaard of niet-standaard) wordt ondersteund door een apparaat, kunt u de functie waveOutOpen aanroepen met de vlag WAVE_FORMAT_QUERY. Met deze vlag wordt het apparaat niet geopend. U geeft de notatie in kwestie op in de WAVEFORMATEX structuur waarnaar wordt verwezen door de parameter pwfx doorgegeven aan waveOutOpen.
Waveform-audio-uitvoerapparaten variëren in de mogelijkheden die ze ondersteunen. De dwSupport lid van de WAVEOUTCAPS- structuur geeft aan of een apparaat dergelijke mogelijkheden ondersteunt, zoals volume- en pitchwijzigingen.
Apparaatgrepen en apparaat-id's
Elke functie waarmee een audioapparaat wordt geopend, geeft een apparaat-id, een aanwijzer naar een geheugenlocatie en enkele parameters die uniek zijn voor elk type apparaat. De geheugenlocatie wordt gevuld met een apparaatgreep. Gebruik deze apparaatgreep om het geopende audioapparaat te identificeren bij het aanroepen van andere audiofuncties.
Het verschil tussen id's en ingangen voor audioapparaten is subtiel maar belangrijk:
- Apparaat-id's worden impliciet bepaald op basis van het aantal apparaten dat aanwezig is in een systeem. Dit getal wordt verkregen met behulp van de auxGetNumDevs, waveInGetNumDevsof waveOutGetNumDevs functie.
- Apparaatgrepen worden geretourneerd wanneer apparaatstuurprogramma's worden geopend met behulp van de waveInOpen of waveOutOpen functie.
Er zijn geen functies die hulpaudioapparaten openen of sluiten. Hulpaudioapparaten hoeven niet te worden geopend en gesloten, zoals waveform-audio-apparaten, omdat er geen continue gegevensoverdracht aan hen is gekoppeld. Alle ondersteunende audiofuncties gebruiken apparaat-id's om apparaten te identificeren.
Waveform-Audio uitvoergegevenstypen
De volgende gegevenstypen worden gedefinieerd voor waveform-audio-uitvoerfuncties.
Type | Beschrijving |
---|---|
HWAVEOUT- | Greep naar een open waveform-audio-uitvoerapparaat. |
WAVEFORMATEX- | Structuur waarmee de gegevensindelingen worden opgegeven die worden ondersteund door een bepaald waveform-audio-invoerapparaat. Deze structuur wordt ook gebruikt voor waveform-audio-invoerapparaten. |
WAVEHDR- | Structuur die wordt gebruikt als header voor een blok waveform-audio-invoergegevens. Deze structuur wordt ook gebruikt voor waveform-audio-invoerapparaten. |
WAVEOUTCAPS- | Structuur die wordt gebruikt om de mogelijkheden van een bepaald waveform-audio-uitvoerapparaat op te vragen. |
Gegevensindelingen opgeven Waveform-Audio
Wanneer u de functie waveOutOpen aanroept om een apparaatstuurprogramma te openen om af te spelen of om een query uit te voeren of het stuurprogramma een bepaalde gegevensindeling ondersteunt, gebruikt u de parameter pwfx om een aanwijzer op te geven naar een WAVEFORMATEX- structuur met de aangevraagde waveform-audio-gegevensindeling. WAVEFORMATEX vervangt de WAVEFORMAT en PCMWAVEFORMAT structuren.
Voor audiogegevens die zijn gescheiden in meer dan twee kanalen of een steekproefgrootte hebben die geen veelvoud is van 8, moet u WAVEFORMATEXTENSIBLE-gebruiken. Deze structuur configureert gewoon de extra bytes die worden verwezen door de cbSize lid van WAVEFORMATEX- om extra informatie over de indeling te geven. WAVEFORMATEXTENSIBLE- kan worden gecast als WAVEFORMATEX-.
Er zijn ook twee klembordindelingen die u kunt gebruiken om audiogegevens weer te geven: CF_WAVE en CF_RIFF. Gebruik de CF_WAVE-indeling om gegevens weer te geven in een van de standaardindelingen, zoals PCM van 11 kHz of 22 kHz. Gebruik de CF_RIFF-indeling om complexere gegevensindelingen weer te geven die niet als standaard waveform-audiobestanden kunnen worden weergegeven.
Gegevens schrijven Waveform-Audio
Nadat u een stuurprogramma voor waveform-audio-audio-uitvoer hebt geopend, kunt u beginnen met het afspelen van een geluid. Windows biedt de functie waveOutWrite voor het verzenden van gegevensblokken naar waveform-audio-uitvoerapparaten.
Gebruik de WAVEHDR- structuur om het gegevensblok waveform-audio op te geven dat u verzendt met behulp van waveOutWrite-. Deze structuur bevat een aanwijzer naar een vergrendeld gegevensblok, de lengte van het gegevensblok en enkele vlaggen. Dit gegevensblok moet worden voorbereid voordat u het gebruikt; Zie audiogegevensblokkenvoor informatie over het voorbereiden van een gegevensblok.
Nadat u een gegevensblok naar een uitvoerapparaat hebt verzonden met behulp van waveOutWrite-, moet u wachten totdat het apparaatstuurprogramma klaar is met het gegevensblok voordat het wordt vrijgemaakt. Als u meerdere gegevensblokken verzendt, moet u de voltooiing van gegevensblokken controleren om te weten wanneer er extra blokken moeten worden verzonden. Zie audiogegevensblokkenvoor meer informatie over gegevensblokken.
PCM Waveform-Audio-gegevensindeling
De lpData lid van de WAVEHDR structuur wijst naar de waveform-audio-gegevensvoorbeelden. Voor 8-bits PCM-gegevens wordt elk voorbeeld vertegenwoordigd door één niet-ondertekende gegevens-byte. Voor 16-bits PCM-gegevens wordt elk voorbeeld vertegenwoordigd door een 16-bits ondertekende waarde. De volgende tabel bevat een overzicht van de maximum-, minimum- en middelpuntwaarden voor PCM-waveform-audiogegevens.
Gegevensindeling | Maximumwaarde | Minimumwaarde | Middelpuntwaarde |
---|---|---|---|
8-bits PCM | 255 (0xFF) | 0 | 128 (0x80) |
16-bits PCM | 32.767 (0x7FFF) | –32.768 (0x8000) | 0 |
PCM-gegevensverpakking
De volgorde van de gegevensbytes varieert tussen 8-bits en 16-bits indelingen en tussen mono- en stereo-indelingen. In de volgende lijst worden gegevensverpakkingen beschreven voor de verschillende PCM waveform-audio-gegevensindelingen.
PCM waveform-audio-indeling | Beschrijving |
---|---|
8-bits mono | Elk voorbeeld is 1 byte die overeenkomt met één audiokanaal. Voorbeeld 1 wordt gevolgd door steekproeven 2, 3, 4, enzovoort. |
8-bits stereo | Elk voorbeeld is 2 bytes. Voorbeeld 1 wordt gevolgd door steekproeven 2, 3, 4, enzovoort. Voor elk voorbeeld is de eerste byte kanaal 0 (het linkerkanaal) en de tweede byte kanaal 1 (het rechterkanaal). |
16-bits mono | Elk voorbeeld is 2 bytes. Voorbeeld 1 wordt gevolgd door steekproeven 2, 3, 4, enzovoort. Voor elk voorbeeld is de eerste byte de byte met lage volgorde van kanaal 0 en de tweede byte de byte met hoge volgorde van kanaal 0. |
16-bits stereo | Elk voorbeeld is 4 bytes. Voorbeeld 1 wordt gevolgd door steekproeven 2, 3, 4, enzovoort. Voor elk voorbeeld is de eerste byte de byte met lage volgorde van kanaal 0 (linkerkanaal); de tweede byte is de byte van hoog orde van kanaal 0; de derde byte is de byte met lage volgorde van kanaal 1 (rechterkanaal); en de vierde byte is de byte van hoog orde van kanaal 1. |
Anderen | Elk voorbeeld bevindt zich in een blok dat uit meerdere 4 bytes bestaat, maar de voorbeelden zijn mogelijk niet-byte uitgelijnd. De rangschikking van kanalen wordt opgegeven door een masker. Zie WAVEFORMATEXTENSIBLEvoor meer informatie. |
Waveform-Audio uitvoerapparaten sluiten
Nadat het afspelen van waveform-audio is voltooid, roept u waveOutClose- aan om het uitvoerapparaat te sluiten. Als waveOutClose- wordt aangeroepen terwijl een waveform-audiobestand wordt afgespeeld, mislukt de sluitingsbewerking en retourneert de functie een foutcode die aangeeft dat het apparaat niet is gesloten. Als u niet wilt wachten totdat het afspelen is beëindigd voordat u het apparaat sluit, roept u de waveOutReset--functie aan voordat u het sluit. Hiermee wordt het afspelen beëindigd en kan het apparaat worden gesloten. Zorg ervoor dat u de functie waveOutUnprepareHeader gebruikt om de voorbereiding op alle gegevensblokken op te schonen voordat u het apparaat sluit.