I hadn't even considered exclusive mode playback. It is shared mode which converts all playback to 32-bit floating point internally.
If the output device is <32-bit, then the mixer has to downconvert it to 16-bit or 24-bit.
Since JRiver feeds that into their own audio engine, it gets converted to 64-bit and then back down to whatever your output device supports.
Currently, it looks like this:
- 16-bit source
- 32-bit FP mixer input
- 16-bit or 24-bit mixer output (JRiver WDM device)
- 64-bit JRiver audio engine
- 24-bit output to DAC
If the WDM driver supported 32-bit floating point:
- 16-bit source
- 32-bit FP mixer input
- 32-bit FP mixer output (no conversion)
- 64-bit JRiver audio engine
- 24-bit output to DAC
Here, none of the processing stages reduce precision, except for the final output.
I don't know if playback devices are capable of supporting 32-bit floating point though.
"32-bit" is supported, but I don't know if that can be 32-bit integer, 32-bit floating point, or both.