How to generate the audio spectrum using fft in C++? [closed]
Solution 1:
There are quite a few similar/related questions on SO already which are well worth reading as the answers contain a lot of useful information and advice, but in essence you need to do this:
- convert audio data to format required by FFT (e.g. int -> float, separate L/R channels)
- apply suitable window function (e.g. Hann aka Hanning window)
- apply FFT (NB: if using typical complex-to-complex FFT then set imaginary parts of input array to zero)
- calculate magnitude of first N/2 FFT output bins (
sqrt(re*re + im*im)
) - optionally convert magnitude to dB (log) scale (
20 * log10(magnitude)
) - plot N/2 (log) magnitude values
Note that while FFTW is a very good and very fast FFT it may be a little overwhelming for a beginner - it's also very expensive if you want to include it as part of a commercial product - I recommend starting with KissFFT instead.