// // Created by versustune on 12.06.20. // #include "FFT.h" void FFT::pushNextSampleIntoFifo (float sample) noexcept { { if (fifoIndex == fftSize) // [11] { if (!nextFFTBlockReady) // [12] { zeromem (fftData, sizeof (fftData)); memcpy (fftData, fifo, sizeof (fifo)); nextFFTBlockReady = true; } fifoIndex = 0; } fifo[fifoIndex++] = sample; // [12] } } void FFT::drawNextFrameOfSpectrum () { window.multiplyWithWindowingTable (fftData, fftSize); // [1] fft.performFrequencyOnlyForwardTransform (fftData); // [2] auto mindB = -80.0f; auto maxdB = 0.0f; for (int i = 0; i < scopeSize; ++i) { auto level = jmap (Decibels::gainToDecibels (fftData[i], mindB), mindB, maxdB, -1.0f, 1.0f); scopeData[i] = level; } }