If MCI_GETDEVCAPS_EXTENDED is specified in conjunction with MCI_GETDEVCAPS_ITEM, the MCI_GETDEVCAPS_WAVE_FORMAT value can be placed in the ulItem field for the waveaudio device as an extended request. The MCI_GETDEVCAPS_WAVE_FORMAT value allows an application to query if the device supports a specific waveaudio format. The application must fill in the ulBitsPerSample, ulFormatTag, ulSamplesPerSec, ulChannels, and ulFormatMode fields in the MCI_WAVE_GETDEVCAPS_PARMS data structure. The driver returns MCI_TRUE if the format is supported or returns a specific error describing why the command field failed if the format is not supported.
The following code fragment shows a portion of the Audio Recorder Sample program provided in the Toolkit (\TOOLKIT\SAMPLES\MM\RECORDER). This program uses the MCI_GETDEVCAPS message to determine the capabilities of the currently selected waveaudio device.
ULONG ulRC; /* return code from function */ MCI_WAVE_GETDEVCAPS_PARMS mciAudioCaps; /* MCI_GETDEVCAPS_PARMS structure */ memset( &mciAudioCaps , 0, sizeof(MCI_WAVE_GETDEVCAPS_PARMS)); /* Test to see if the device can play 11 kHz, 8-bit, mono files. */ mciAudioCaps.ulBitsPerSample = 8; mciAudioCaps.ulFormatTag = DATATYPE_WAVEFORM; mciAudioCaps.ulSamplesPerSec = 11025; mciAudioCaps.ulChannels = 1; mciAudioCaps.ulFormatMode = MCI_PLAY; mciAudioCaps.ulItem = MCI_GETDEVCAPS_WAVE_FORMAT; ulRC = mciSendCommand (mciOpenParms.usDeviceID, /* Device ID */ MCI_GETDEVCAPS, MCI_WAIT | MCI_GETDEVCAPS_EXTENDED | MCI_GETDEVCAPS_ITEM, (PVOID) &mciAudioCaps, 0); . . . /* Test to see if the device can record 11 kHz, 16-bit, mono files. */ mciAudioCaps.ulBitsPerSample = 16; mciAudioCaps.ulFormatTag = DATATYPE_WAVEFORM; mciAudioCaps.ulSamplesPerSec = 11025; mciAudioCaps.ulChannels = 1; mciAudioCaps.ulFormatMode = MCI_RECORD; mciAudioCaps.ulItem = MCI_GETDEVCAPS_WAVE_FORMAT; ulRC = mciSendCommand (mciOpenParms.usDeviceID, /* Device ID */ MCI_GETDEVCAPS, MCI_WAIT | MCI_GETDEVCAPS_EXTENDED | MCI_GETDEVCAPS_ITEM, (PVOID) &mciAudioCaps, 0);