This is a difficult idea to execute well.
One problem is–Roon does not really “own” the device volume controls. And this means that if we adjust them for the purpose of volume normalization, whoever does own the concept of “current volume” is going to have an incorrect impression of what the current volume actually is, which will lead to bad experiences. There are also quality assurance problems.
On Windows, WASAPI owns the current volume number. On mac, CoreAudio does. On Linux, ALSA does. On many Roon Ready devices, it’s owned externally to our part of the firmware–in some common place where it is shared between the DAC’s various networked and local inputs. And of course, in many cases the volume number is also visible to the end user in one or more places outside of Roon.
It is not safe for us to start modifying this number automatically because there’s no way for us to reliably “put it back” at the right time, or to keep track of which portions of the volume number were contributed by Roon during times when other software or the user is adjusting the volume independently during playback.
To make an example: lets say you’re playing a very quiet track that needs a +12.0dB adjustment, and the device’s current volume level is -20dB. So Roon starts playback, and at that time, it sets the device’s volume to -8dB. The “dumb” part of the device that’s not aware of this little hack records -8dB as the current volume number and playback proceeds.
Then, in the middle of playback, someone shuts off the device. It wakes back up and the volume is restored the -8dB. Then you play that song again. Now Roon wants to set the volume to +4dB. There’s no safe and reliable point of time for Roon to “undo” the +12dB adjustment, because it really can’t know what happened to the volume control during the period of time when it wasn’t connected to the device. Only the entity that owns the volume control would be in the position to make this determination, and it is not smart enough to separate “volume” from “normalization adjustment”.
Then there are the quality-assurance issues. Some devices apply volume adjustments on different time-frames, with different (often variable) delays, and some even ramp all volume changes over a relatively long period of time. Normalization gain adjustments should be sample accurate, or very close to it. We would not come close with real-world devices trying to do this through the main volume control.
Also, there are many devices who’s volume scale does not map onto dB in a straightforward way. We have no way of detecting these cases automatically, but if we tried to use the main volume control on one of these devices for volume leveling, the results would be weird, and it would feel like Roon’s fault.
Ultimately, this suggestion is a hack. I can imagine a narrow set of cases where it would work fairly well, but we can’t support or defend features that only work when the stars are aligned properly.
We fully intend to support this sort of adjustment on devices that can support a hidden volume adjustment. A couple of Roon Ready products are in the works that will have this feature. Unfortunately, USB Audio 2.0 doesn’t contain a standardized mechanism for this, so it’s unlikely to appear in USB based configurations.