summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Dahlgren <mdahlgrengadd@users.noreply.github.com>2019-06-03 12:58:33 +0200
committerMartin Dahlgren <mdahlgrengadd@users.noreply.github.com>2019-06-03 12:58:33 +0200
commit17adece6ad2c3b07a5fc8180245b507e9285c8fe (patch)
tree79a4f221b8b4b326b7fea593f5e34af066a8ef6e
parentf78c7377c914f9f2f7dc428030a7cf07f7614df0 (diff)
downloadredot-engine-17adece6ad2c3b07a5fc8180245b507e9285c8fe.tar.gz
Add windowing before FFT to avoid flickering spectrogram
-rw-r--r--servers/audio/effects/audio_effect_spectrum_analyzer.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/servers/audio/effects/audio_effect_spectrum_analyzer.cpp b/servers/audio/effects/audio_effect_spectrum_analyzer.cpp
index 05cba416be..5a201b7dfa 100644
--- a/servers/audio/effects/audio_effect_spectrum_analyzer.cpp
+++ b/servers/audio/effects/audio_effect_spectrum_analyzer.cpp
@@ -81,9 +81,10 @@ void AudioEffectSpectrumAnalyzerInstance::process(const AudioFrame *p_src_frames
float *fftw = temporal_fft.ptrw();
for (int i = 0; i < to_fill; i++) { //left and right buffers
- fftw[(i + temporal_fft_pos) * 2] = p_src_frames[i].l;
+ float window = -0.5 * Math::cos(2.0 * Math_PI * (double)i / (double)to_fill) + 0.5;
+ fftw[(i + temporal_fft_pos) * 2] = window * p_src_frames[i].l;
fftw[(i + temporal_fft_pos) * 2 + 1] = 0;
- fftw[(i + temporal_fft_pos + fft_size * 2) * 2] = p_src_frames[i].r;
+ fftw[(i + temporal_fft_pos + fft_size * 2) * 2] = window * p_src_frames[i].r;
fftw[(i + temporal_fft_pos + fft_size * 2) * 2 + 1] = 0;
}