¿Cómo generar el espectro de audio usando fft en C ++?

Quiero generar un espectro de audio (como se ve en este video ) de un archivo de audio mp3. Básicamente, este problema requiere calcular la fft de la señal de audio. ¿Cómo programo esto en C / C ++?

He visto algunas bibliotecas de código abierto como FFTW y realmente no sé cómo usarlas para mi problema. Cualquier ayuda sería muy apreciada. ¡Gracias por adelantado!

Ya hay bastantes preguntas similares / relacionadas sobre SO que vale la pena leer, ya que las respuestas contienen mucha información y consejos útiles, pero en esencia es necesario que haga esto:

  • convertir datos de audio al formato requerido por FFT (por ejemplo, int -> float, canales L / R separados)
  • aplicar la función de ventana adecuada (por ejemplo, la ventana de Hann aka Hanning )
  • aplicar FFT (NB: si usa una típica FFT compleja a compleja, entonces configure las partes imaginarias de la matriz de entrada a cero)
  • calcule la magnitud de los primeros N / 2 contenedores de salida FFT ( sqrt(re*re + im*im) )
  • opcionalmente convertir escala de magnitud a dB (log) ( 20 * log10(magnitude) )
  • trazar N / 2 (log) valores de magnitud

Tenga en cuenta que aunque FFTW es una FFT muy buena y muy rápida, puede ser un poco abrumadora para un principiante; también es muy costosa si desea incluirla como parte de un producto comercial. Recomiendo comenzar con KissFFT .