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!
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.