Comment générer le spectre audio en utilisant fft en C++? [fermé]

je veux générer un spectre audio (comme vu dans cette vidéo) d'un fichier audio mp3. Fondamentalement, ce problème nécessite de calculer le fft du signal audio. Comment puis-je programmer ceci en C/C++?

j'ai regardé quelques bibliothèques open source comme FFTW<!-Et je ne sais vraiment pas comment les utiliser pour mon problème. Toute aide serait grandement appréciée. Merci à l'avance!

31
demandé sur too honest for this site 2011-01-13 03:05:11

1 réponses

il y a un certain nombre de questions similaires/connexes sur SO déjà qui valent la peine d'être lus car les réponses contiennent beaucoup d'informations et de conseils utiles, mais en essence, vous devez faire ceci:

  • convertir les données audio au format requis par FFT (par exemple int -> float, séparer les canaux L/R)
  • appliquer adapté fonction de fenêtre(e.g. Hann alias Hanning window)
  • appliquer FFT (NB: si vous utilisez FFT typique de complexe à complexe, alors définir les parties imaginaires de tableau d'entrée à zéro)
  • calculez l'amplitude des premiers bacs de sortie N / 2 FFT (sqrt(re*re + im*im))
  • convertir optionnellement magnitude en dB (log) échelle (20 * log10(magnitude))
  • graphe n / 2 (log) valeurs de magnitude

notez que si FFTW est un très bon et très rapide FFT il peut être un peu écrasant pour un débutant - il est également très cher si vous voulez l'inclure dans le cadre d'un produit commercial - je recommande de commencer par KissFFT à la place.

52
répondu Paul R 2017-01-31 22:32:27