Skip to content

loudness

Measurement and normalization: sample peak + RMS in one fused pass, and the broadcast loudness family (integrated loudness, loudness range, true peak) per ITU-R BS.1770-4 and EBU R 128, validated against the EBU conformance signals.

y, sr = specux.audio.load("mix.wav")
lv = specux.audio.level(y) # Level(peak=..., rms=...)
lv.peak_db, lv.rms_db
I = specux.audio.loudness(y, sr) # integrated loudness, LUFS
lra = specux.audio.loudness_range(y, sr) # LU (needs >= 3 s)
tp = specux.audio.true_peak(y, sr) # dBTP (catches intersample peaks)

loudness needs at least 400 ms of audio; silence measures -inf.

normalize

specux.audio.normalize(y) # peak to -1 dBFS
specux.audio.normalize(y, mode="rms", target_db=-20.0)
specux.audio.normalize(y, mode="lufs", target_db=-14.0, sr=sr) # streaming target

Default targets per mode: -1 dBFS (peak), -20 dBFS (rms), -23 LUFS (lufs, the EBU R 128 anchor). mode="lufs" measures with the gated loudness above (so it needs sr) and applies a single gain, so channel balance is preserved; silent input comes back unchanged.