Alexander,
I'm not familiar with dsound + if (ichannels > 2) + FIXME("Conversion from %u to %u channels is not implemented, falling back to stereo", ichannels, ochannels); + dsb->mix_channels = 2; Does you code support 8 channels? Look through git history, and you'll see some patches made specifically for 6 or even 8 channel audio plus some 8->2 and 2->8 conversions. Without having a 5:1 or 7:1 card, I think this gives hints as to what apps expect from conversions. Of course, there's always a risk that an old bug analysis was biased by other bugs, leading to misconceptions and misbeliefs about the actual needs and behaviour.
About dsound: convert from fixed to floating point Using floats for frequencies is not bad. After all, modern mmdevapi does it too in IAudioClockAdjustment::SetSampleRate
Just avoid computing byte positions from floats...
BTW, AUDCLNT_STREAMFLAGS_RATEADJUST hints that the DSound mixer implements stuff that mmdevapi's mixer needs...
Regards, Jörg Höhle