From 859ddc55b36d559fc1b73f151aa5a9b4a0c595ab Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Wed, 5 Nov 2025 12:46:41 +0400 Subject: [PATCH] spectrum: allocate the stuff on the fly --- src/gui/spectrum.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/gui/spectrum.cpp b/src/gui/spectrum.cpp index 1e4dfddb9..372d21364 100644 --- a/src/gui/spectrum.cpp +++ b/src/gui/spectrum.cpp @@ -157,6 +157,26 @@ void FurnaceGUI::drawSpectrum() { } if (spectrum.running) { for (int z=spectrum.mono?0:(chans-1); z>=0; z--) { + if (!spectrum.buffer[z]) { + spectrum.buffer[z]=(fftw_complex*)fftw_malloc(sizeof(fftw_complex)*spectrum.bins); + if (!spectrum.buffer[z]) spectrum.running=false; + } + if (!spectrum.in[z]) { + spectrum.in[z]=new double[spectrum.bins]; + if (!spectrum.in[z]) spectrum.running=false; + } + if (!spectrum.plan[z]) { + spectrum.plan[z]=fftw_plan_dft_r2c_1d(spectrum.bins,spectrum.in[z],spectrum.buffer[z],FFTW_ESTIMATE); + if (!spectrum.plan[z]) spectrum.running=false; + } + if (!spectrum.plot[z]) { + spectrum.plot[z]=new ImVec2[spectrum.bins/2]; + if (!spectrum.plot[z]) spectrum.running=false; + } + if (!spectrum.running) { + logE("oh no what why"); + break; + } // get buffer memset(spectrum.in[z],0,sizeof(double)*spectrum.bins); int needle=e->oscReadPos-spectrum.bins;