The Microsoft documentation for the WAVEOUTCAPS struct lists a number of formats that an audio device can support:
I do not see any 24-bit variables listed here, although through I have confirmed my sound card is capable of opening a 24-bit output with a call to WaveOutOpen
(and playing 24bit audio files through that output).
I'm guessing that Microsoft defined additional variables somewhere for 18/20/24/32/48/64 bit output, but I can't find them. I tried searching on the net and nothing came up, and I tried using Visual Studio to search for variables in my current name space that start with "WAVE_FORMAT_" but did not find any additionally defined formats that way.
Is it possible to check for 4/18/20/24/32/48/64 bit output availability on Windows using the function WaveOutGetDevCap()
, or any similar function? If so, how?
waveOutXxx
is legacy API you, generally speaking, should not be used nowadays. This API is an emulation layer on top of real audio API and does not have to support 24-bit scenarios which did not exist at the time ofwaveOutXxx
. There are no specific new constants defined for newer formats and there are so many of them that there cannot be a separate bit for every one.You can compose a
WAVEFORMATEX
structure that describes your high bitness format (you would typically useWAVEFORMATEXTENSIBLE
variant of it) and check it againstwaveOutOpen
function.Or, rather, use WASAPI and
IAudioClient::Initialize
, see Rendering a Stream for details and the wayWAVEFORMATEX
structure is used there.