JUCE FFT Using Accelerate?

Does the JUCE FFT automatically use the Apple Accelerate framework on Mac and iOS? I vaguely remember an ADC talk that suggested as much but can’t find any documentation that says so.

From the docs for the FFT class: “This is only a simple low-footprint implementation and isn’t tuned for speed.”

The module itself has options for MKL and FFTW in the ProJucer but I don’t see any mention of Accelerate anywhere.

The FFT class will choose the best engine option it can find when created.

IIRC, if it can’t find a platform-specific engine then it’ll use the FFTFallback engine which is JUCE’s own implementation.

I’m not a mac guy so I don’t know about the Accelerate framework specifically, but JUCE’s FFT class does have an AppleFFT engine which I can only assume will use some Apple SDK:

1 Like

It’s been a while since I looked through the code but if nothing changed it works like this:

  • If you don’t deliberately switch off usage of the Accelerate vDSP framework it will use the Accelerate FFT as default FFT as well as it will use Accelerate calls behind some of the FloatVectorOperations
  • On Windows, Linux and Android however, the fallback implementation will be used as default.
  • Enabling MKL or FFTW through the Projucer will override those default choices.
1 Like