Como gerar o espectro de áudio usando fft em C ++?

Eu quero gerar um espectro de áudio (como visto neste vídeo ) de um arquivo de áudio mp3. Basicamente, este problema requer o cálculo do fft do sinal de áudio. Como faço para programar isso em C / C ++?

Eu olhei para um par de bibliotecas de código aberto, como FFTW e eu realmente não sei como usá-los para o meu problema. Qualquer ajuda seria muito apreciada. Desde já, obrigado!

Existem algumas questões relacionadas com o SO que valem a pena ler, pois as respostas contêm muitas informações e conselhos úteis, mas na essência você precisa fazer isso:

  • converter dados de áudio para formato exigido pela FFT (por exemplo, int -> float, canais L / R separados)
  • aplicar function de janela adequada (por exemplo, Hann aka Hanning window )
  • aplique FFT (NB: se estiver usando FFT complexo complexo para complexo, em seguida, defina partes imaginárias da matriz de input para zero)
  • calcular a magnitude das primeiras checkboxs de saída N / 2 FFT ( sqrt(re*re + im*im) )
  • opcionalmente converter magnitude para dB (log) escala ( 20 * log10(magnitude) )
  • enredo valores de magnitude N / 2 (log)

Note que enquanto o FFTW é um FFT muito bom e muito rápido, pode ser um pouco avassalador para um iniciante – também é muito caro se você quiser incluí-lo como parte de um produto comercial – eu recomendo começar com o KissFFT .