But you’ve got crossfade enabled, as shown by your signal path - something you deliberately must have chosen at some point!
That feature encompasses expanding the bit depth to 64 bit floating point to reduce any artifacts introduced by crossfading as much as possible, but finally necessitates reduction down to 24 bit before sending it on, which in itself necessitates dithering (not shown in signal path, though).
Any artifacts introduced by the operations are orders of magnitude below audibility threshold, so it would be far fetched blaming crossfade for what you hear…
FWIW, I actually run Roon through HQPlayer without any upsampling (since I have the Chord M Scaler which does that for me) since I do think it sounds just slightly better than playing from Roon directly with RAAT. The difference is so minor though that had I not already had a license for HQPlayer, I would not bother.
The examples given by Brian in the links above, although for headroom showed a similar example as I did. He then says it’s bit perfect by doing it that way.
Nice! Some serious items there. If you are so inclined, please post some room pics in this thread, I know there are many who would love to see your rig.
If you change the signal in any way it’s not bit perfect period. Bits have been changed you cannot get away from this. Whether you can hear any detriment to the sound it may be perceived as lossless and you hear no detriment but it is no longer bit perfect. This cannot be refuted.
If you can mathematically reverse the operation without losing information, it remains perfect. @Menzies was referring to Jamie’s Brian’s example for such an operation in the thread that was linked above
6dB = 1 bit. So a 3dB adjustment moves the audio down 1/2 of a bit. At the same time, we’ve expanded headroom to 32bits. You can mathematically reverse the adjustment without reducing the number of significant figures–so there is no information loss either. To be clear, this means you could:
Start with a 16bit signed integer signal
Convert to 64bit float
Apply a -3dB gain adjustment
Convert to 32bit signed integer
Convert back to 64bit float
Apply a +3dB gain adjustment
Convert back to 16bit signed integer
And the output signal would be bit-perfect to the original. So from an information-theoretic perspective, the gain-adjusted 32bit signal is lossless.
But you can’t do that in Roon. It’s 16bit to 64bit then 64bit to 16bit, 24 bit or 32bit. You cannot go back to 32 bit inbetween and back out beteeen steps that I know of. Any volume reduction will stop it being bit perfect. I did a test last night on my RME DAC using its bit perfect test. Dropped volume -3db then added +3db so effectively nulling the action and back out to 16bit. It fails.
But 16 to 64 then 32 is exactly what happens during volume leveling if the DAC accepts 32. If the end result in Brian’s conversion is bit perfect, then it has to be in the middle as well, no?
Edit: Anyway, he says “the gain-adjusted 32bit signal is lossless” referring to the middle. The rest is just the completion of the calculation back to the start
Edit 2: But your DAC says no, for whatever reason and my math sucks, so OK
Thanks for sticking with this. Lesson one, I should not try these things so late and after wine. I just tried it again this morning but not going back to 16bit which is what I read was happening this time left it outputting Roons default 32bit and yes it looks to pass bit perfect with two procedural eq back to back one with -3db attenuation and one with a 3db boost. This I tried from all sample rates and bitdepth test files all passed even though it’s not outputting the same bitdepth.So yes the maths is correct.