void FFT::performRealOnlyForwardTransform (float* d) const noexcept { const size_t scratchSize = 16 + sizeof (FFT::Complex) * (size_t) size; if (scratchSize < maxFFTScratchSpaceToAlloca) { performRealOnlyForwardTransform (static_cast<Complex*> (alloca (scratchSize)), d); } else { HeapBlock<char> heapSpace (scratchSize); performRealOnlyForwardTransform (reinterpret_cast<Complex*> (heapSpace.getData()), d); } }
void FFT::performFrequencyOnlyForwardTransform (float* d) const noexcept { performRealOnlyForwardTransform (d); const int twiceSize = size * 2; for (int i = 0; i < twiceSize; i += 2) { d[i / 2] = juce_hypot (d[i], d[i + 1]); if (i >= size) { d[i] = 0; d[i + 1] = 0; } } }