Roon's 64 bit floating point volume leveling

Usually, there is enough extra headroom available to make quite a large adjustment without losing any precision.

The 64bit number isn’t really involved in this discussion, because it is never the bottleneck for precision. There is always a smaller precision bottleneck somewhere between Roon and the DAC–typically 24 or 32 bits. Very occasionally there is a 16bit bottleneck–but this is limited to very old or very cheap devices not marketed at audiophiles.

Lets say you’re starting with CD quality content–16bit 44kHz. If you play that without volume leveling turned on, there are 16 bits of meaningful data there, and all of them will go to the playback device.

Now, say we turn on volume leveling and do a big adjustment like -18dB, so three bits. After the adjustment, we have a signal that has zeroes in the most significant three bits, and the signal has “moved down” and is now consuming bits 4-19 instead of 1-16 like before.

The key is–Roon tries to avoid truncating that signal back to 16 bits again. Instead, we’ll send it out to the device as a 24 or 32 bit signal, to maintain full precision. As mentioned above, this is possible in the great majority of situations.

There really is not any meaningful amount of 32bit (or higher) source material–even “32-bit” DXD uses 32-bit floating representation, which only has 24bits of actual precision.

One case where precision is actually lost: when you play 24bit source material through volume leveling to a DAC that can only take 24 bits. This is not the theoretical ideal, but it’s also not particularly damaging in real life. There will virtually always be a dynamic range bottleneck further downstream in the system anyways.

For me, the benefits of volume leveling outweigh this small unavoidable compromise.

Here’s an example:

Just like I explained, we’re starting with 16bit content, applying volume leveling, but at the end, we truncate to 24bits to preserve the precision before sending it to the device.

15 Likes