Использование структуры WAVEFORMATEX
Для звуковых данных PCM не более чем на двух каналах и с 8-разрядными или 16-разрядными примерами используйте структуру WAVEFORMATEX , чтобы указать формат данных.
В следующем примере показано, как настроить структуру WAVEFORMATEX для 8-разрядного моно с частотой 11,025 килогерца (кГц) и 16-разрядного стерео 44,1 кГц. После настройки WAVEFORMATEX в примере вызывается функция IsFormatSupported, чтобы убедиться, что устройство вывода волновой формы PCM поддерживает этот формат. Исходный код для IsFormatSupported показан в примере в разделе Определение поддержки нестандартных форматов.
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);