Thank you very much, Julius!
I will take some time to fully understand and then get back to you :)
Awesome.
Klaus


On 04.07.21 04:49, Julius Smith wrote:
> Hi Klaus,
> 
> I can never resist these things!   Faust makes it too enjoyable :-)
> 
> I made a pass, but there is a small scaling error.  I think it can be
> fixed by reducing boostFreqHz until the sine_test is nailed.
> The highpass is close (and not a source of the scale error), but I'm
> using Butterworth instead of whatever they used.
> I glossed over the discussion of "gating" in the spec, and may have
> missed something important there, but
> I simply tried to make a sliding rectangular window, instead of 75%
> overlap, etc.
> 
> If useful, let me know and I'll propose it for analyzers.lib!
> 
> Cheers,
> Julius
> 
> import("stdfaust.lib");
> 
> // Highpass:
> // At 48 kHz, this is the right highpass filter (maybe a Bessel or
> Thiran filter?):
> A48kHz = ( /* 1.0, */ -1.99004745483398, 0.99007225036621); 
> B48kHz = (1.0, -2.0, 1.0); 
> highpass48kHz = fi.iir(B48kHz,A48kHz);
> highpass = fi.highpass(2, 40); // Butterworth highpass: roll-off is a
> little too sharp
> 
> // High Shelf:
> boostDB = 4;
> boostFreqHz = 1430; // a little too high - they should give us this!
> highshelf = fi.high_shelf(boostDB, boostFreqHz); // Looks very close,
> but 1 kHz gain has to be nailed
> 
> kfilter = highshelf : highpass;
> 
> // Power sum:
> Tg = 0.4; // spec calls for 75% overlap of successive rectangular
> windows - we're overlapping MUCH more (sliding window)
> zi = an.ms_envelope_rect(Tg); // mean square: average power = energy/Tg
> = integral of squared signal / Tg
> 
> // Gain vector Gv = (GL,GR,GC,GLs,GRs):
> N = 5;
> Gv = (1, 1, 1, 1.41, 1.41); // left GL(-30deg), right GR (30), center
> GC(0), left surround GLs(-110), right surr. GRs(110)
> G(i) = *(ba.take(i+1,Gv));
> Lk(i) = kfilter : zi : G(i); // one channel, before summing and before
> taking dB and offsetting
> LkDB(i) = Lk(i) : 10 * log10 : -(0.691); // Use this for a mono input signal
> 
> // Five-channel surround input:
> Lk5 = par(i,5,Lk(i)) :> 10 * log10 : -(0.691);
> 
> // sine_test = os.oscrs(1000); // should give –3.01 LKFS, with
> GL=GR=GC=1 (0dB) and GLs=GRs=1.41 (~1.5 dB)
> sine_test = os.osc(1000);
>            
> process = sine_test : LkDB(0); // should read -3.01 LKFS - high-shelf
> gain at 1 kHz is critical
> // process = 0,sine_test,0,0,0 : Lk5; // should read -3.01 LKFS for
> left, center, and right
> // Highpass test: process = 1-1' <: highpass, highpass48kHz; // fft in
> Octave
> // High shelf test: process = 1-1' : highshelf; // fft in Octave
> 
> On Sat, Jul 3, 2021 at 1:08 AM Klaus Scheuermann <kla...@posteo.de
> <mailto:kla...@posteo.de>> wrote:
> 
>     Hello everyone :)
> 
>     Would someone be up for helping me implement an LUFS loudness analyser
>     in faust?
> 
>     Or has someone done it already?
> 
>     LUFS (aka LKFS) is becoming more and more the standard for loudness
>     measurement in the audio industry. Youtube, Spotify and broadcast
>     stations use the concept to normalize loudness. A very positive side
>     effect is, that loudness-wars are basically over.
> 
>     I looked into it, but my programming skills clearly don't match
>     the level for implementing this.
> 
>     Here is some resource about the topic:
> 
>     https://en.wikipedia.org/wiki/LKFS <https://en.wikipedia.org/wiki/LKFS>
> 
>     Specifications (in Annex 1):
>     
> https://www.itu.int/dms_pubrec/itu-r/rec/bs/R-REC-BS.1770-3-201208-S!!PDF-E.pdf
>     
> <https://www.itu.int/dms_pubrec/itu-r/rec/bs/R-REC-BS.1770-3-201208-S!!PDF-E.pdf>
> 
>     An implementation by 'klangfreund' in JUCE / C:
>     https://github.com/klangfreund/LUFSMeter
>     <https://github.com/klangfreund/LUFSMeter>
> 
>     There is also a free LUFS Meter in JS / Reaper by Geraint Luff.
>     (The code can be seen in reaper, but I don't know if I should paste it
>     here.)
> 
>     Please let me know if you are up for it!
> 
>     Take care,
>     Klaus
> 
> 
>     _______________________________________________
>     Faudiostream-users mailing list
>     Faudiostream-users@lists.sourceforge.net
>     <mailto:Faudiostream-users@lists.sourceforge.net>
>     https://lists.sourceforge.net/lists/listinfo/faudiostream-users
>     <https://lists.sourceforge.net/lists/listinfo/faudiostream-users>
> 
> 
> 
> -- 
> "Anybody who knows all about nothing knows everything" -- Leonard Susskind


_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users

Reply via email to