https://bugs.winehq.org/show_bug.cgi?id=52592
--- Comment #6 from Rafał Mużyło galtgendo@o2.pl --- (In reply to Carlo Bramini from comment #4)
The problem is that waveOutGetID() does not return the same id that you used into waveOutOpen().
On Windows, waveOutGetID() returns WAVE_MAPPER (-1). On WINE, waveOutGetID() returns 63 on my system.
It is not the same thing and this seems wrong.
Good point. So, basically, waveOutGetID (and likely waveInGetID) need to explicitly special case WAVE_MAPPER, instead of pushing it through WINMM_DecomposeHWAVE (cause that one seems correct as it is).
Something like:
if (hWaveOut = WAVE_MAPPER) *lpuDeviceID = WAVE_MAPPER; else WINMM_DecomposeHWAVE((HWAVE)hWaveOut, lpuDeviceID, &is_out, &dev, &junk);
That way current WINMM_IsMapper check will make some sense.