For DirectSound, the IDirectSoundCapture8::GetCaps() will give you the standard supported formats. The DSCCAPS struct dwFormats member will contain bit flags indicating supported formats. You can mask them out with the following defines: WAVE_FORMAT_1M08 /* 11.025 kHz, Mono, 8-bit */ WAVE_FORMAT_1S08 /* 11.025 kHz, Stereo, 8-bit */ WAVE_FORMAT_1M16 /* 11.025 kHz, Mono, 16-bit */ WAVE_FORMAT_1S16 /* 11.025 kHz, Stereo, 16-bit */ WAVE_FORMAT_2M08 /* 22.05 kHz, Mono, 8-bit */ WAVE_FORMAT_2S08 /* 22.05 kHz, Stereo, 8-bit */ WAVE_FORMAT_2M16 /* 22.05 kHz, Mono, 16-bit */ WAVE_FORMAT_2S16 /* 22.05 kHz, Stereo, 16-bit */ WAVE_FORMAT_4M08 /* 44.1 kHz, Mono, 8-bit */ WAVE_FORMAT_4S08 /* 44.1 kHz, Stereo, 8-bit */ WAVE_FORMAT_4M16 /* 44.1 kHz, Mono, 16-bit */ WAVE_FORMAT_4S16 /* 44.1 kHz, Stereo, 16-bit */ WAVE_FORMAT_44M08 /* 44.1 kHz, Mono, 8-bit */ WAVE_FORMAT_44S08 /* 44.1 kHz, Stereo, 8-bit */ WAVE_FORMAT_44M16 /* 44.1 kHz, Mono, 16-bit */ WAVE_FORMAT_44S16 /* 44.1 kHz, Stereo, 16-bit */ WAVE_FORMAT_48M08 /* 48 kHz, Mono, 8-bit */ WAVE_FORMAT_48S08 /* 48 kHz, Stereo, 8-bit */ WAVE_FORMAT_48M16 /* 48 kHz, Mono, 16-bit */ WAVE_FORMAT_48S16 /* 48 kHz, Stereo, 16-bit */ WAVE_FORMAT_96M08 /* 96 kHz, Mono, 8-bit */ WAVE_FORMAT_96S08 /* 96 kHz, Stereo, 8-bit */ WAVE_FORMAT_96M16 /* 96 kHz, Mono, 16-bit */ WAVE_FORMAT_96S16 /* 96 kHz, Stereo, 16-bit */ For non-standard or non-PCM formats you can try creating a capture buffer and see if it succeeds. IDirectSoundCapture8::CreateCaptureBuffer() returns DSERR_BADFORMAT if it fails. Mark