From 78b535b229580d5baeee3dc20c6071c25c266a98 Mon Sep 17 00:00:00 2001 From: Florin Popescu Date: Mon, 13 Jul 2026 01:00:07 +0200 Subject: parse replaygain reference loudness & album gain fields --- CONTRIBUTORS.md | 1 + MediaBrowser.Providers/MediaInfo/AudioFileProber.cs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index ef27a90ac2..14b944f819 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -235,6 +235,7 @@ - [Lampan-git](https://github.com/Lampan-git) - [elio42](https://github.com/elio42) - [rwebster85](https://github.com/rwebster85) + - [Florin-Popescu](https://github.com/Florin-Popescu) # Emby Contributors diff --git a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs index b70cba5b3b..63c01eaf5c 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs @@ -468,6 +468,24 @@ namespace MediaBrowser.Providers.MediaInfo } } + TryGetSanitizedAdditionalFields(track, "REPLAYGAIN_ALBUM_GAIN", out var trackAlbumGainTag); + + if (trackAlbumGainTag is not null) + { + if (trackAlbumGainTag.EndsWith("db", StringComparison.OrdinalIgnoreCase)) + { + trackAlbumGainTag = trackAlbumGainTag[..^2].Trim(); + } + + if (float.TryParse(trackAlbumGainTag, NumberStyles.Float, CultureInfo.InvariantCulture, out var value) && float.IsFinite(value)) + { + if (!audio.AlbumEntity.NormalizationGain.HasValue) + { + audio.AlbumEntity.NormalizationGain = value; + } + } + } + if (options.ReplaceAllMetadata || !audio.TryGetProviderId(MetadataProvider.MusicBrainzArtist, out _)) { if ((TryGetSanitizedAdditionalFields(track, "MUSICBRAINZ_ARTISTID", out var musicBrainzArtistTag) -- cgit v1.2.3 From e2adf2e2bf84c6f2ea33eeae191a506a29adb059 Mon Sep 17 00:00:00 2001 From: Florin Popescu Date: Thu, 16 Jul 2026 20:49:40 +0200 Subject: added null checks --- MediaBrowser.Providers/MediaInfo/AudioFileProber.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs index 63c01eaf5c..d592d99459 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs @@ -479,7 +479,7 @@ namespace MediaBrowser.Providers.MediaInfo if (float.TryParse(trackAlbumGainTag, NumberStyles.Float, CultureInfo.InvariantCulture, out var value) && float.IsFinite(value)) { - if (!audio.AlbumEntity.NormalizationGain.HasValue) + if (audio.AlbumEntity is not null && !audio.AlbumEntity.NormalizationGain.HasValue) { audio.AlbumEntity.NormalizationGain = value; } -- cgit v1.2.3 From f6f0fed2d133481ba225fed06d18a656125b7948 Mon Sep 17 00:00:00 2001 From: Florin Popescu Date: Tue, 28 Jul 2026 19:48:51 +0200 Subject: skip album ReplayGain parsing if no album or value already present --- MediaBrowser.Providers/MediaInfo/AudioFileProber.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs index d592d99459..81d4b640a3 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs @@ -468,18 +468,18 @@ namespace MediaBrowser.Providers.MediaInfo } } - TryGetSanitizedAdditionalFields(track, "REPLAYGAIN_ALBUM_GAIN", out var trackAlbumGainTag); - - if (trackAlbumGainTag is not null) + if (audio.AlbumEntity is not null && !audio.AlbumEntity.NormalizationGain.HasValue) { - if (trackAlbumGainTag.EndsWith("db", StringComparison.OrdinalIgnoreCase)) - { - trackAlbumGainTag = trackAlbumGainTag[..^2].Trim(); - } + TryGetSanitizedAdditionalFields(track, "REPLAYGAIN_ALBUM_GAIN", out var trackAlbumGainTag); - if (float.TryParse(trackAlbumGainTag, NumberStyles.Float, CultureInfo.InvariantCulture, out var value) && float.IsFinite(value)) + if (trackAlbumGainTag is not null) { - if (audio.AlbumEntity is not null && !audio.AlbumEntity.NormalizationGain.HasValue) + if (trackAlbumGainTag.EndsWith("db", StringComparison.OrdinalIgnoreCase)) + { + trackAlbumGainTag = trackAlbumGainTag[..^2].Trim(); + } + + if (float.TryParse(trackAlbumGainTag, NumberStyles.Float, CultureInfo.InvariantCulture, out var value) && float.IsFinite(value)) { audio.AlbumEntity.NormalizationGain = value; } -- cgit v1.2.3