De WAVEFORMATEX-structuur gebruiken
[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.]
Voor PCM-audiogegevens op niet meer dan twee kanalen en met 8-bits of 16-bits voorbeelden gebruikt u de WAVEFORMATEX- structuur om de gegevensindeling op te geven.
In het volgende voorbeeld ziet u hoe u een WAVEFORMATEX structuur instelt voor 11.025 kilohertz (kHz) 8-bits mono en voor 44,1 kHz 16-bits stereo. Nadat u WAVEFORMATEXhebt ingesteld, roept het voorbeeld de functie IsFormatSupported aan om te controleren of het PCM-waveform-uitvoerapparaat de indeling ondersteunt. De broncode voor IsFormatSupported wordt weergegeven in een voorbeeld in Ondersteuning voor niet-standaardindeling bepalen.
UINT wReturn;
WAVEFORMATEX pcmWaveFormat;
// Set up WAVEFORMATEX for 11 kHz 8-bit mono.
pcmWaveFormat.wFormatTag = WAVE_FORMAT_PCM;
pcmWaveFormat.nChannels = 1;
pcmWaveFormat.nSamplesPerSec = 11025L;
pcmWaveFormat.nAvgBytesPerSec = 11025L;
pcmWaveFormat.nBlockAlign = 1;
pcmWaveFormat.wBitsPerSample = 8;
pcmWaveFormat.cbSize = 0;
// See if format is supported by any device in system.
wReturn = IsFormatSupported(&pcmWaveFormat, WAVE_MAPPER);
// Report results.
if (wReturn == 0)
MessageBox(hMainWnd, "11 kHz 8-bit mono is supported.",
"", MB_ICONINFORMATION);
else if (wReturn == WAVERR_BADFORMAT)
MessageBox(hMainWnd, "11 kHz 8-bit mono NOT supported.",
"", MB_ICONINFORMATION);
else
MessageBox(hMainWnd, "Error opening waveform device.",
"Error", MB_ICONEXCLAMATION);
// Set up WAVEFORMATEX for 44.1 kHz 16-bit stereo.
pcmWaveFormat.wFormatTag = WAVE_FORMAT_PCM;
pcmWaveFormat.nChannels = 2;
pcmWaveFormat.nSamplesPerSec = 44100L;
pcmWaveFormat.nAvgBytesPerSec = 176400L;
pcmWaveFormat.nBlockAlign = 4;
pcmWaveFormat.wBitsPerSample = 16;
pcmWaveFormat.cbSize = 0;
// See if format is supported by any device in the system.
wReturn = IsFormatSupported(&pcmWaveFormat, WAVE_MAPPER);
// Report results.
if (wReturn == 0)
MessageBox(hMainWnd, "44.1 kHz 16-bit stereo is supported.",
"", MB_ICONINFORMATION);
else if (wReturn == WAVERR_BADFORMAT)
MessageBox(hMainWnd, "44.1 kHz 16-bit stereo NOT supported.",
"", MB_ICONINFORMATION);
else
MessageBox(hMainWnd, "Error opening waveform device.",
"Error", MB_ICONEXCLAMATION);