A call to waveOutOpen returns WAVERR_BADFORMAT if a driver does not support the specified wave format.
Microsoft Windows does not currently support the looping of a wave header with a non-PCM format. An attempt to loop a non-PCM format will fail, but the system does not detect the failure until the header-submittal (not header-preparation) stage because of architectural constraints. Specifically, a call to waveOutPrepareHeader might accept a non-PCM wave header with WHDR_BEGINLOOP and/or WHDR_ENDLOOP set in dwFlags, but a subsequent call to waveOutWrite fails and returns MMSYSERR_INVALPARAM. If WHDR_BEGINLOOP and WHDR_ENDLOOP are not set in dwFlags, however, specifying dwLoops>1 does not cause waveOutWrite to fail.
When non-PCM data is playing, a call to waveOutBreakLoop fails with return code MMSYSERR_INVALPARAM.