diff --git a/Visualization/ThirdParty/deadbeef/analyzer.c b/Visualization/ThirdParty/deadbeef/analyzer.c index 205517b60..3e153a283 100644 --- a/Visualization/ThirdParty/deadbeef/analyzer.c +++ b/Visualization/ThirdParty/deadbeef/analyzer.c @@ -56,7 +56,7 @@ static float _bin_for_freq_round(ddb_analyzer_t *analyzer, float freq); static float _freq_for_bin(ddb_analyzer_t *analyzer, int bin); static float -_interpolate_bin_with_ratio(float *fft_data, int bin, float ratio); +_interpolate_bin_with_ratio(float *fft_data, int bin, float ratio, int fft_size); #pragma mark - Public @@ -137,7 +137,7 @@ void ddb_analyzer_tick(ddb_analyzer_t *analyzer) { float *fft_data = analyzer->fft_data + ch * analyzer->fft_size; ddb_analyzer_bar_t *bar = analyzer->bars; for(int i = 0; i < analyzer->bar_count; i++, bar++) { - float norm_h = _interpolate_bin_with_ratio(fft_data, bar->bin, bar->ratio); + float norm_h = _interpolate_bin_with_ratio(fft_data, bar->bin, bar->ratio, analyzer->fft_size); // if the bar spans more than one bin, find the max value for(int b = bar->bin + 1; b <= bar->last_bin; b++) { @@ -424,6 +424,6 @@ _tempered_scale_bands_precalc(ddb_analyzer_t *analyzer) { } static float -_interpolate_bin_with_ratio(float *fft_data, int bin, float ratio) { - return fft_data[bin] + (fft_data[bin + 1] - fft_data[bin]) * ratio; +_interpolate_bin_with_ratio(float *fft_data, int bin, float ratio, int fft_size) { + return bin < fft_size ? (bin + 1 < fft_size ? (fft_data[bin] + (fft_data[bin + 1] - fft_data[bin]) * ratio) : fft_data[bin]) : 0.0; }