Highlights
BS.1770 loudness modes — ReplayGain 2.0 and EBU R128 (opt-in)
mp3rgain now ships an in-house ITU-R BS.1770-4 integrated loudness engine (K-weighting + gating, zero new dependencies) behind two new flags (#269, #270, #271 / #273, #274):
--rg2— ReplayGain 2.0: normalize to the −18 LUFS reference (the same perceived level as the classic 89 dB reference; only the measurement algorithm changes)--r128— EBU R128: normalize to the −23 LUFS broadcast target
ReplayGain 1.0 stays the default and keeps producing values identical to mp3gain/aacgain — existing libraries stay coherent on re-scan. Both modes compose with -r/-a/-d/-m/-k and write the standard REPLAYGAIN_* tags through the same lossless global_gain pipeline (undo included). Measurements cross-check against ffmpeg -af ebur128 within 0.05 LU. JSON output gains analysis_mode and loudness_lufs fields.
The GUI (mp3rgui) gets a matching Analysis mode selector (RG 1.0 / RG 2.0 / R128) with LUFS loudness display (#272 / #275).
Breaking changes (why this is 3.0)
Unused public library API removed (#266 / #276): write_id3v2_undo, Channel::other(), MIN_GAIN, apply_aac_gain, apply_aac_gain_with_undo, and apply_aac_gain_with_undo_to_path. All had zero internal, GUI, or test usage; use apply_aac_gain_to_path / GainOptions for the equivalent functionality. The CLI is fully backward-compatible — no command-line behavior changes.
Other Changes
- Post-review simplification pass over the v3.0 code: consolidated mode helpers (
AnalysisMode::unit()/name()), unified JSON construction, mono/stereo fast path in the BS.1770 analyzer (#277) analyze_track_with_mode()andAlbumAnalysisOptions.modefor library consumers- Docs: README, man page,
--help, and technical comparison updated for the new modes - CI: bumped docker/login-action (#268)
- Website (mp3rgain.tyna.ninja) linked from README and crates.io metadata
Full Changelog: v2.11.0...v3.0.0