lsp-plugins icon indicating copy to clipboard operation
lsp-plugins copied to clipboard

Add support of EBU R.128 standard to the limiter.

Open sadko4u opened this issue 1 year ago • 7 comments

Original issue here: https://github.com/lsp-plugins/lsp-plugins-limiter/issues/2

There are several ways of determining "True" peak amplitude in broadcasting. And today's most popular standard is EBU-R. (there is even a library with MIT license which already implements the code: https://github.com/jiixyj/libebur128).

From the point of the UI, i think it could be 2 controls - checkbox for toggling between normal and TruePeak modes, and in case TruePeak mode enabled - the window size for measurement.

sadko4u avatar Aug 11 '23 16:08 sadko4u

You can also take some inspiration from Thomas Mundt plugins although for LUveler it is the ITU-R BS.1770 specification.

https://loudmax.blogspot.com/ https://luveler.blogspot.com/

EasyEffects has already implemented this library in its Autogain plugin, maybe you can take a look at it.

I hope you find it helpful.

p-chan5 avatar Aug 11 '23 17:08 p-chan5

I'm familiar with BS.1770 specification and already implemented the K-weighting filter (including also A, B, C and D). But there are another tasks to do at this moment.

sadko4u avatar Aug 11 '23 17:08 sadko4u

the reason why i mentioned this exact (ebu r 128) standard, is because as far as i know modern streaming services (like spotify or youtube) are using its measurement for track gain normalization - so it's crucial knowing the values during the mastering

actionless avatar Aug 11 '23 17:08 actionless

(For limiting, is it not sufficient to just enable oversampling to get True Peak limiting?)

I'm familiar with BS.1770 specification and already implemented the K-weighting filter (including also A, B, C and D).

FWIW, i think i said that elsewhere already, but it would be really really cool (but not required) to

  1. be able to K-Filter the sidechain before the RMS and/or have a global toggle to operate on Loudness Units instead of dB's One can do K-Filtering manually by passing sidechain through equalizer first, but that is somewhat cumbersome
  2. perhaps, support slightly longer reactivity window (EBUR128 momentary is 400ms)
  3. Fix the maximal lookahead window, it should not be smaller than the maximal reactivity window. Consider e.g. gating -- it perhaps makes sense for the gate to have prescience, and the current 20ms lookahead seems like not sufficient. One can pass the sidechain through delay plugin, but that is ugly

(I think that is on-topic here?)

LebedevRI avatar Aug 15 '23 21:08 LebedevRI

@LebedevRI i think the main point is not which of the standards is better, but which is actually used in the target broadcasting

actionless avatar Aug 15 '23 21:08 actionless

@LebedevRI i think the main point is not which of the standards is better, but which is actually used in the target broadcasting

Err, i did not say any of that. By sufficient, i simply mentioned that it is what ebur128_check_true_peak() does. Neither in jiixyj/libebur128 nor in ITU-R BS.1770-4 do i see anything about a window. I guess the idea would be the same as for sidechain reactivity for compressor? That was my question, please do not misintepret it as FUD/etc.

LebedevRI avatar Aug 15 '23 21:08 LebedevRI

sorry, i misinterpreted you were suggesting the optimal window size value

it's only 2 samples, and the rest is oversampling - so, i guess, oversampling value should be sync-ed with the global resampling set on the limiter

and that thing regarding M/S/I and 20 ms - it's related to loudness measurement of ebu, but not TruePeak measurement (it's also important to know those when posting stuff to broadcasting, but it's not up to limiter, but to the measurement tool)

actionless avatar Aug 15 '23 22:08 actionless