Volume Normalization, RG vs R128, album vs track adjustment, use tag info [done in 1.3]

In the current version I have the problem, that with volume leveling Tidal content is significant louder than local content and what is annoying in mixed playlists or radio mode. I have to reduce Tidal content by 4-5db to get the same volume.
Can I hope for a change in this behavior with 1.3?

LMS has an option “Adjustment for internet streams” where I can reduce streaming content by a fix value. Such an option would help (if problem is not solved otherwise).

Fantastic news. Thanks!

@AES67, I think the problem with TIDAL is the result of disagreements in the measurements between Roon’s old method and TIDAL’s (which is R128-based), and not something fundamental. Bringing Roon in line with R128 should address the discrepancy.


Sounds good. Thank you

There’s been brilliant news in this thread in the past few days. Thanks to all involved. All my local files are replay gain tagged by foobar2000, nice to see roon supporting it.

@brian is it possible to implement volume levelling via the volume control of Roon tested DACs and Roon endpoints (where they have variable outputs)? That way it would always be bit perfect and there wouldn’t be any software implementation compromises.

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.

Thanks for a detailed response @brian . That all seems logical enough. I have normalisation enabled for my ATV but was feeling more paranoid on my big rig. I think I will keep it on for Radio use and turn it off when I properly get into an album.

Just signed up last week and loving it! I haven’t got a setup that can match the quality of my CD player yet but the ease of use is so refreshing.

One thought on this:

Most output devices these days support 32bit samples, and there is virtually no source material out there with has more than 24bits of precision. This means we can make a signal quieter by up to 48dB without denying the DAC any information so long as the output samples from the normalization adjustment are at least 32bits wide.

Taking into account the changes that are coming in 1.3, I would not hesitate to use volume normalization at all, even in the most quality conscious situations. I find that the overall quality of my experience listening to music is much better when volume leveling is turned on, regardless of anything else.

I know some people get worried about having their music “processed”. The reality is, virtually all content was processed in the studio, and is going to be processed inside of the DAC chip again. Compared to what happens in the studio, and the things we know happen in the DAC chip, a modest gain adjustment, done right, in an environment with plenty of extra headroom is not a significant factor.

The important thing is that the DSP is performed responsibly and that it has been measured to ensure that it is doing what it supposed to. Modernizing our signal processing infrastructure, expanding capabilities, and going over everything from a verification/measurement angle to make sure we’re in good shape everywhere is one of the things we are doing for 1.3. The work on volume normalization in this thread is part of that effort.


A lot of detailed info in this thread – I won’t add more. I will, however, say that I agree that album-level gain adjustment is a necessity for some things, classical music being one of them. Track-level adjustment is also useful in cases. I like the method described as being used by LMS.


I don’t know about all theses details but my needs are for listening SESSION normalization. Think morning coffee, dinner party, other social event - within that playing having consistency so I don’t have to constantly tweak the volume (which is a little twitchy). I don’t care if the next day it resets or comes out slightly different.