• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

Real-time LUFS-based level riding

caustik

Member
Audio Company
Forum Donor
Joined
Feb 4, 2025
Messages
26
Likes
46
Hey everyone,

I've been experimenting with real-time loudness leveling (LUFS-based, with the ability to swap K-weighting for ECMA-418 or ITU-468 for example). The LUFS side of things wasn't much of a problem because I've been working on that for about 4 years straight now. But one challenge I ran into was breaths getting pulled up by the leveler.

The solution that I've ended up going with was a "Guard" mechanism which uses a secondary, shorter LUFS window to quickly respond to out-of-distribution volume levels, which is where breaths tend to live. It basically maintains a rolling histogram of recent loudness measurements, at that shorter window duration, and let's you configure a percentile threshold where the leveler will hold gain instead of ampifying. That way it leaves the natural distance between the main audio and the breaths. There's also a parameter to suppress those breaths further, though generally you pay for that because you've got to ramp the gain back up for the next phrase.

It's working quite well, validated through a dataset of annotated breaths:
https://apu.software/analysis/Guard...ev-clean-3853_163249_000160_000000event2.html

The leveler itself continuously monitors the source audio's LRA and uses that to corral the target into the configured loudness/tolerance band. I've been enjoying tossing it on my PC's system audio via VB-Cable. I listen to lots of real-time dialog online and this fixes everyone's inconsistent microphone levels with very little configuration.

Has anyone else worked with this type of tech before? I'd love to hear any ideas for future improvements, or problems this tool should solve.

https://apu.software/leveler/
 
How is this different than using a compressor?

I think the most fundamental difference is it doesn't have a fixed transfer function/curve. Even with the loudness compressor's LRA-based "learn" function, what it is ultimately learning is the transfer function. The leveler is more like a physical model gravitating the signal toward the target loudness/tolerance.

You can accomplish similar things, in the end they are just different approaches to adjusting dynamic range. The leveler is more hands-off.
 
I’m not really doing breath-specific processing myself, but in Ableton Live I often use EQ Eight as a light shaping tool on stems mainly to gently tame or adjust harsh frequency areas like hi-hats in drum stems, or to make the kick drum, bass, a bit tighter or more present before any further processing.

I also sometimes combine this with basic noise profiling if needed, and general gain shaping to soften things like brass instruments or overly bright elements.

Nothing dynamic or advanced, just static frequency shaping and level balancing during the final processing stage (what I’d call my “mastering” stage :facepalm: ) before printing the final output.

Might not directly solve your real-time case, but it could reduce how much “extra energy” your LUFS system has to react to in the first place. I use Audacity for LUFS leveling my tracks.
 
Last edited:
I’m not really doing breath-specific processing myself, but in Ableton Live I often use EQ Eight as a light shaping tool on stems mainly to gently tame or adjust harsh frequency areas like hi-hats in drum stems, or to make kicks a bit tighter or more present before any further processing.

I also sometimes combine this with basic noise profiling if needed, and general gain shaping to soften things like brass instruments or overly bright elements.

Nothing dynamic or advanced, just static frequency shaping and level balancing during the final processing stage (what I’d call my “mastering” stage) before printing the final output.

Might not directly solve your real-time case, but it could reduce how much “extra energy” your LUFS system has to react to in the first place. I use Audacity for LUFS leveling my tracks.

That does give me an idea!

Right now, the leveler's `Tail Guard` is using a shorter window duration than the main LUFS-leveler. BUT, it inherits whichever equal-loudness contour you're using for the leveler. So generally either K-weighting or ECMA-418. But you've made me realize, the Guard would be better suited to use either ITU-468 or another contour which specifically isolate noise/breath frequencies.
 
Back
Top Bottom