From a98507f737365c008e95f28a4c8749c343bac06f Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 11 Jul 2021 09:11:59 +0200 Subject: [PATCH] - fixed endless loop in replay gain analyzer when getting passed music with an unhandled sample rate. --- source/common/audio/music/music.cpp | 19 +++++++++++-------- source/common/thirdparty/gain_analysis.cpp | 1 + 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/source/common/audio/music/music.cpp b/source/common/audio/music/music.cpp index bc0359cb8..4266d2cd3 100644 --- a/source/common/audio/music/music.cpp +++ b/source/common/audio/music/music.cpp @@ -618,17 +618,20 @@ static void CheckReplayGain(const char *musicname, EMidiDevice playertype, const ZMusic_Close(handle); GainAnalyzer analyzer; - analyzer.InitGainAnalysis(fmt.mSampleRate); - int result = analyzer.AnalyzeSamples(lbuffer.Data(), rbuffer.Size() == 0 ? nullptr : rbuffer.Data(), lbuffer.Size(), rbuffer.Size() == 0? 1: 2); + int result = analyzer.InitGainAnalysis(fmt.mSampleRate); if (result == GAIN_ANALYSIS_OK) { - auto gain = analyzer.GetTitleGain(); - Printf("Calculated replay gain for %s at %f dB\n", hash.GetChars(), gain); + result = analyzer.AnalyzeSamples(lbuffer.Data(), rbuffer.Size() == 0 ? nullptr : rbuffer.Data(), lbuffer.Size(), rbuffer.Size() == 0 ? 1 : 2); + if (result == GAIN_ANALYSIS_OK) + { + auto gain = analyzer.GetTitleGain(); + Printf("Calculated replay gain for %s at %f dB\n", hash.GetChars(), gain); - gainMap.Insert(hash, gain); - mus_playing.replayGain = gain; - mus_playing.replayGainFactor = dBToAmplitude(mus_playing.replayGain + mus_gainoffset); - SaveGains(); + gainMap.Insert(hash, gain); + mus_playing.replayGain = gain; + mus_playing.replayGainFactor = dBToAmplitude(mus_playing.replayGain + mus_gainoffset); + SaveGains(); + } } } diff --git a/source/common/thirdparty/gain_analysis.cpp b/source/common/thirdparty/gain_analysis.cpp index 30ebccdef..23d618d27 100644 --- a/source/common/thirdparty/gain_analysis.cpp +++ b/source/common/thirdparty/gain_analysis.cpp @@ -251,6 +251,7 @@ GainAnalyzer::ResetSampleFrequency(int samplefreq) { freqindex = 9; break; case 11025: + case 11111: // SW shareware tries to play a VOC with this frequency as music. This is close enough to 11025 to use the same table. freqindex = 10; break; case 8000: