View Issue Details
|ID||Category||Date Submitted||Last Update|
|0008318||features||2020-07-19 02:21||2020-08-04 21:03|
|Fixed in Version|
|Summary||0008318: Loudness analysis of whole session and conforming via master bus trim|
|Description||For classical albums I require hitting an integrated loudness or momentary/short-term max over the course of the whole album. Currently I need to export the whole session to wav+cue to ensure correct normalization to LUFS or true peak (whichever comes first) and then process other formats in fre:ac or similar. In order to keep the entire workflow in Ardour, there should be a function at the mastering stage to analyze the whole session (all active tracks via the master bus output) complete with the nice analysis graph. Following this, Ardour could offer to conform to a certain LUFS value (integrated, momentary/short-term max) or true peak via adding or subtracting gain from the master bus trim.|
|Steps To Reproduce||N/A|
|Additional Information||Exporting ranges for the individual pieces results in every range being normalized and thereby destroys the continuity of level. The plugin I use to conform to certain levels currently is Klangfreund's Multimeter. It is time consuming as you need to listen to the whole album in order to get a correct integrated value.|
|Tags||analysis, loudness, meter|
||Ardour 6.2-46-g239319c214 has an initial working prototype for this. So far available only in debug builds from the Range-selection context menu.|
Brilliant work, Robin. It operates as expected! A few comments based on first use and our IRC conversation:
1) Labels in "loudness mate" dialog should be "peak" and "true peak" to match the labels in the analysis window
2) I assume it is on your to-do list but target spin boxes for momentary and short-term max would be great (my preferred method as it is most like the "k-meter" approach)
3) A similar command could be added to the session menu that analyzes and offers calibration for all active tracks between start and end markers. It's where I would instinctively look given it affects the whole session and I assume the most-used workflow.
4) Assuming the range context menu would remain (good for checking individual tracks), perhaps it could be called "loudness calibration" or "loudness conforming" given it has nothing to do with "export".
I attach the various screenshots for a classical disc I made a couple of years ago in Ardour. Note that there's a tiny (rounding?) difference between the momentary max values in multimeter versus Ardour. I double-checked against the ebur128 command and it agrees with Ardour :)
a-amplifier.png (18,997 bytes)
a-amplifier.png (18,997 bytes)analysis window.png (304,948 bytes)
loudness mate measurement.png (167,988 bytes)
loudness mate measurement.png (167,988 bytes)
multimeter measurement.png (50,770 bytes)
multimeter measurement.png (50,770 bytes)
1) With regard the spin boxes of "loudness mate" I realized that one of the other features that I like about multimeter is that as you change the chosen target value, you get visual feedback about how the other values would be affected. I find it more useful than a delta, TBH. Here's a demo of multimeter in action: https://imgur.com/a/l85enXA. So, with that in mind, it seems to make more sense to have the ability to select only ONE of the spin boxes (not one loudness and one peak) and then have the other spin boxes show (in a different color or shade) how their values would be affected. This is where presets later on could be really useful so that as the user pushes past certain upper limits defined by the standard, the values turn red. E.g. EBU R128 "short-form" content stipulates not only integrated (-23 LUFS ±0.5 LUFS) and true peak (-1 dBTP) upper limits but also short-term max (-18 LUFS). In this case having red, yellow, green colors would be useful for "over limit" "within integrated bounds" and "at target" respectively.
2) If the controls are hidden by default, it would make sense to have a checkbox to "use master bus input trim" (instead of the new end-of-signal-path volume control) to allow for mastering into a true peak limiter and thereby satisfying both loudness and peak requirements for various streaming services.
A few names suggestions:
Loudness Check, Media Check, Loudness Normalizer, LUFS Leveler, LUFS Master, LUFS Control, LAN (Loudness Analyzer & Normalizer), Loudness Assistant.
My own favorites right now are LAN, Loudness Assistant and Loudness Check. I assume you wanted "functional" names versus things like LUFS-tikus ;)
A couple of small bugs: on 6.2-76-g1c98687bea when I click "show detailed report" closing the analysis window does not return me to the "loudness mate" dialog box. Also, there's a phantom "apply" button that doesn't need to be there.
1) I don't see a way to reset the master volume control to unity once set. Shift-clicking should be allowed in line with moving faders to unity. Perhaps if engaged, the knob should have a colored ring around it to make it clear it is engaged?
2) The analysis should ideally happen post volume control so that any application of gain is taken into account for subsequent analysis.
"show detailed report" was fixed in 6.2-81-gfced1a5dc1, the dialog was renamed "Loudness Analyzer & Normalizer" for session-anaysis, and "Loudness Assistant" when initiated from a range context-menu.
Also previously applied gain gain is now taken into account.
This is getting really close to ideal workflow! A few more things:
1) For efficiency's sake, pressing on LAN should start the analysis immediately. Perhaps the the opening dialog window as currently presented can have a checkbox for "don't show again in future"? The text could explain that the real-time option can be enabled by right-clicking on the LAN button?
2) Ideally the results page should remember previous selections and target numbers. My brain is thrown when I've just dealt with, say, -16 LUFS momentary max and running it again resets to EBU R128 values and selections.
3) Small gain changes are really difficult to see on the control knob. I'm still wondering whether shading the LAN button to show active gain is better (like the mute and solo buttons). Perhaps shift-clicking on the button could reset gain and completely remove the need for a knob?
Some more progress in 6.2-91-g02a31b97b2
Now "Loudness Assistant" is available from the session-menu (as suggested way above as item 3). When it's first used it also takes the user to the preference pane to enable it.
now re 0008318:0024782
1) I don't think this needs to be efficient. It's a rare operation and for the session-range, realtime export should remain an option.
2) The dialog recalls most recently used values (for as long as Ardour is not restarted). There are also some presets now, more need to be added (perhaps an "Apple Music" "Spotify" , "Classic CD" etc.) Those presets are fixed at compile-time.
3) Master-bus visuals have been overhauled, there's a slider now. shift+click to reset to unity, double-click for numeric edit.
I think we're getting close..
||All in agreement except that for point 1, I'm suggesting that the real-time option absolutely stay but be moved to a right-click option on the LAN button so that the chunk of text can be optionally avoided on subsequent usage. Clearly after even just a few runs of the "beta", I'm no longer reading it and so I see it as a needless second click. Some of the existing loudness plugins, including yours, allow for optional resetting of values on transport start which avoids extra interaction with the GUI. I see this baked-in loudness workflow in a similar way. However, it's a small point in the grand scheme of things and if this is an important part of Ardour usability then no worries at all. Looking forward to trying the next nightly!|
Great work for 6.2-91-g02a31b97b2. I think I feel less strongly about the text appearing every time now, especially with the tweak of the layout. It definitely feels more natural now. I love the session menu item and the loudness assistant range context menu is really useful for quick partial analysis.
So, the one remaining issue is that of presets and streaming standards. There are various use-case scenarios that seem to require an alternative solution. For example, a user has mixed/mastered a pop song into a peak limiter. When they use LAN, it reports -1 dBTP / -18 LUFS integrated. If they wish to conform to, say, Apple Music, they have already reached the peak target so LAN would offer no extra gain. Enabling only the integrated would push the true peaks to +1 dBTP given the placement of the gain control in the chain. For this, and plenty of other cases, the a-amplifier prototype seems like a better solution, or indeed adding it manually after analysis. Take the EBU R128 standard...there is never a case AFAIK when the user would be ok with settling for -1 dBTP / -25 LUFS int. They would always want to conform exactly (or within the ± bounds) to -1 dBTP / -23 int. I'm realizing that for music not close to 0 dB peaks (like my harpsichord recordings) I won't have any issues. For pop, rock, wide dynamic classical and particularly for situations where conforming exactly is part of the workflow i.e. broadcast, the normalizer part seems to need an alternative solution.
iZotope RX builds in a TP limiter for when files need to be conformed to simultaneous loudness and true peak values. While this isn't desirable for an Ardour session, an existing limiter on the masterbus does cause problems for LAN even though it is trying to be part of the mastering solution ;)
One option would be have an option or two buttons: "Apply to output" "Add [new] a-amp plugin with target gain".
I've removed the a-amp prototype for various reasons:
* it's not suitable for incremental changes
* user can re-order it and place a limiter after it
Since LAN measures the output it would receive an already limited signal, and then change the gain before the limiter.
If a limiter is involved we also need to measure the signal before the limiter.
Also I'm no longer sure if this should not have been part of the export workflow:
Say I want to have 3 versions, one for Spotify one for Apple-music and a CD. It'd be nice if all 3 could be exported in one go without manual intervention.
OK, good discussion points. The last point first: if moved to export, you would definitely need a transparent true peak limiter option so that the various standards can be conformed both to peak and loudness. We would also need a way to allow for individual FLAC, MP3 ranges but with loudness calculated over the entire session (classical albums, portions of broadcast material etc). The problem with including a peak limiter as part of export is that purists will want to tweak settings like release and attack if not liking "auto" modes.
Here's an idea: what if the LAN button functionality stayed exactly the same except it morphed into two plugins that could be placed anywhere in the chain much like the "player" and "recorder" plugins? A Loudness Analyzer and Loudness Normalizer? In the case of, say, Apple Music, the analyzer is placed at the end of the master bus plugin chain (like any loudness meter would be) and the Normalizer before a limiter so that when the LAN button on the analyzer plugin was pressed, it would add the gain to the normalizer (via the new slider). Let's say, again, that the initial reading was -1 dBTP and -18 LUFS int…the gain correction of +2 LU would be pushed into the existing limiter. On repeated analysis the new gain setting should give a correct read-out of c. -1 dBTP (because of the limiter) and c. -16 LUFS int (due to previous +2dB gain).
||I should also add that one of the joys of the LAN functionality is the speed at which loudness calculations can happen as part of the editing/mastering process...|
||I think in hindsight I should have used a choral track to begin with so I could have realized the shortcomings earlier. So, with a choral piece that I was asked to submit at -1 dBTP / -16 LUFS int, I just added the raw file into Ardour 6.2 and went through my usual workflow. My idea of switching to dual plugins works for me, at least. So, on first analysis it just so happens by coincidence that the read out was -1.1 dBTP and -17.9 LUFS int. To recreate my proposed LAN plugins I added an instance of your EBU R128 analyzer at the end of the chain with a-amplifier going into Loudmax. I set Loudmax (with inter-sampling) to -1 dB output and therefore a-amplifier to +3 dB. for a net +2dB increase. Running your analyzer again does indeed reach within 0.1 LU of the desired target level. It then becomes a case of leave it as is or iteratively add gain or compression etc to achieve the desired target. I realized that this is what I do all the time even before we started talking about a baked-in process. Therefore, the dual plugin idea (as long as the analyzer is "smart" enough to find the normalizer anywhere in the master bus chain) seems like the most musical and "engineer"-intuitive way to approach the loudness conformation challenge. Again, the offline analysis speed is what well and truly makes this enjoyable and efficient.|
I'm somewhat wary to introduce a feature that relies on ardour being "smart".
Perhaps we need two modes:
(A) The current "simple" mode: set output gain as-is.
(B) "assisted manual" mode, that just prints numbers (optional add an a-amp and zero output gain), and let the user do the rest.
As you already found out the "faster than realtime" play/export already facilitates manual tweaking with short turnaround times. So perhaps stream-lining (B) may be an option.
Allow to copy/paste gain values, or make the dialog non-modal (so that you can edit plugins with the result page visible).
If we add an option to analyze the signal at point other than the output, I think it should be immediately post fader. Then you can add a limiter (or gain-stages) after that and are on your own.
Even if we have a custom analysis-point mid-way through the master-bus, the "show detailed report (post export analysis)" should show the final output though.
Except that may be confusing unless we clarify this.
Prototyping is fun. We probably need a few more iterations..
PS. I've added a few presets earlier today: https://github.com/Ardour/ardour/blob/master/gtk2_ardour/loudness_dialog.cc#L53-L71
Just tried 6.2.120 and this is really fabulous. One major issue:
1) When applying "using the custom gain processor position", subsequent analysis should still take place at the very end of the chain. For example, I analyze a song, choose the YouTube preset and disable true peak so that the integrated loudness target gain is applied. On re-analyzing, despite a true-peak limiter after "Volume Ctrl" plugin, the true peak is reading 0.0 versus -1.0.
And a few minor quibbles:
2) "Custom gain processor position" is a bit of a mouthful! Perhaps "Custom amplifier position" or "Custom amplifier plugin".
3)The tooltip that accompanying is excellent. Perhaps explicitly noting "…potentially followed by a limiter to conform to both loudness and peak requirements" would be good.
That's about it. The conformity analysis is amazing but, again, requies that analysis is always end of the chain despite using the custom option.
||Hmm, ignore me. I don't think my settings on Loudmax were accurate. This is working perfectly. Just the minor quibbles then ;) Top job, Robin!|
A few suggested minor tweaks:
1) Can the "Custom Amplifier Position" button be shorter in length? There's a lot of space to the right of the words.
2) Perhaps the green ticks in the conformity analysis could be bolded so that they truly stand out from the yellow (similar to the green dots next the various target types).
3) Can Ardour remember the Conformity Analysis "fold down" was in view for repeated analysis? Also window position of analysis results?
When using the "Custom Amplifier Position", it would make more logical sense for the gain slider to appear as part of the plugin. When I continue to see the slider under the LAN button I can't shake the idea that the gain is applied just before the fader and not at the plugin position. So I guess this raises another issue, too: if the LAN slider is truly at the very end of the chain, when in use should it not appear after the fader, say, just above the ouput and comments boxes?
Having tested 6.2.134, I'm really happy. The full-width LAN button is much better and the initial dialog now seems digestible. Presets additions are excellent and only selfishly disappointed that "classical" went to the farm in the sky ;) Right-click processor box feels very intuitive.
A few minor (and I mean minor) tweaks:
1) Can the "Analyze" button align with the first line of text in the initial information?
2) I realized that Conformity Analysis on first use doesn't give the information that my brain expects: does my music currently conform to any of the standards? I like that it is always based on the suggested gain on subsequent uses. Could the preset start as a blank or "—"? (and then continue to remember any subsequent preset selection on re-running)?
3) I wonder if the right-click on the processor box should say "Custom LAN Gain Position"
4) By extension, the plugin itself might say "LAN Gain"?
3, 4 are good suggestions. except I'll make it "LAN Amp" and "Custom LAN Amp Position".
re 1: Ardour 6.2-135-g9a508735bf now has aligned buttons.
I'm unsure about 2. I think it's nice that a user has not not explicitly select something, and the dialog has a sane default (EBU R128).
||On point 2. I totally agree that a sane default is good practice. How about under the "conformity analysis" fold-down that it is made explicit that the provided analysis is always post suggested gain?|
The info text starts with "This allows the user to **analyze** and conform the loudness of the signal at the master-bus **output** ..." (emphasis mine).
PS. As outlined previously Ardour 6.2-137-g72adf2844e now uses "LAN Amp" in various places
||What I'm saying is that conformity analysis is putting ticks and crosses based on future suggested gain. This is confusing on running as you expect the conformity analysis to show the current state of affairs, no? I'm agreeing that EBU R128 should be the default preset but it should probably be made clear that conformity as shown is after applying any suggested gain.|
||I see what you mean. -- If a user adds a custom limiter after the LAN Amp, things may indeed be different and a "No constraints" preset can come in handy only to investigate conformity.|
||Yes but it has less to do with having a custom limiter and more to do with what might be expected when viewing those ticks and crosses. Not clear on first look that they are only valid if suggested gain is subsequently applied.|
|2020-07-19 02:21||bachstudies||New Issue|
|2020-07-19 02:21||bachstudies||Tag Attached: analysis|
|2020-07-19 02:21||bachstudies||Tag Attached: loudness|
|2020-07-19 02:21||bachstudies||Tag Attached: meter|
|2020-07-20 01:38||x42||Assigned To||=> x42|
|2020-07-20 01:38||x42||Status||new => feedback|
|2020-07-20 01:38||x42||Note Added: 0024771|
|2020-07-20 19:08||bachstudies||File Added: a-amplifier.png|
|2020-07-20 19:08||bachstudies||File Added: analysis window.png|
|2020-07-20 19:08||bachstudies||File Added: loudness mate measurement.png|
|2020-07-20 19:08||bachstudies||File Added: multimeter measurement.png|
|2020-07-20 19:08||bachstudies||Note Added: 0024774|
|2020-07-20 19:08||bachstudies||Status||feedback => assigned|
|2020-07-21 15:24||bachstudies||Note Added: 0024777|
|2020-07-21 15:35||bachstudies||Note Added: 0024778|
|2020-07-21 18:18||bachstudies||Note Added: 0024779|
|2020-07-22 01:29||x42||Note Added: 0024781|
|2020-07-22 14:26||bachstudies||Note Added: 0024782|
|2020-07-23 02:19||x42||Note Added: 0024793|
|2020-07-23 03:28||bachstudies||Note Added: 0024794|
|2020-07-23 16:25||bachstudies||Note Added: 0024796|
|2020-07-23 17:29||x42||Note Added: 0024797|
|2020-07-23 19:08||bachstudies||Note Added: 0024799|
|2020-07-23 19:16||bachstudies||Note Added: 0024800|
|2020-07-23 19:31||bachstudies||Note Added: 0024801|
|2020-07-23 20:18||x42||Note Added: 0024802|
|2020-07-31 21:39||bachstudies||Note Added: 0024878|
|2020-07-31 21:41||bachstudies||Note Added: 0024879|
|2020-08-02 16:20||bachstudies||Note Added: 0024880|
|2020-08-02 16:27||bachstudies||Note Added: 0024881|
|2020-08-04 17:30||bachstudies||Note Added: 0024888|
|2020-08-04 19:31||x42||Note Added: 0024890|
|2020-08-04 20:40||bachstudies||Note Added: 0024891|
|2020-08-04 20:54||x42||Note Added: 0024892|
|2020-08-04 20:57||bachstudies||Note Added: 0024893|
|2020-08-04 21:00||x42||Note Added: 0024894|
|2020-08-04 21:03||bachstudies||Note Added: 0024895|