Comment générer du spectre audio à l'aide de la fft en C++?
Je veux générer un spectre audio (comme on le voit dans cette vidéo) d'un fichier audio mp3. Fondamentalement, ce problème nécessite le calcul de la fft du signal audio. Comment ce programme en C/C++?
J'ai regardé un couple de bibliothèques open source tels que FFTW et je ne sais vraiment pas comment les utiliser pour mon problème. Toute aide serait grandement appréciée. Merci à l'avance!
- Avez-vous déjà savoir C ou C++? Si non, il est probablement préférable de commencer avec quelque chose de plus simple...
- Découvrez stackoverflow.com/questions/604453/...
- Savez-vous quelque chose à propos de DSP? FFTW est un outil fantastique, mais à moins que vous quoi que ce soit sur les transformées de Fourier/fenêtrage/résolution de bacs/etc. il sera très difficile de produire quoi que ce soit.
- La FFT est la partie la plus facile (et certainement pas le dernier mot) du spectre de puissance estimation de densité. Il existe de nombreuses autres considérations, en particulier de fenêtrage. Google
Slepian window
pour des techniques qui minimisent les fuites de courant. - Veuillez modifier votre question afin de montrer le code que vous avez jusqu'ici. Vous devez inclure au moins un plan (mais de préférence un minimum de reproductibles exemple) le code que vous rencontrez des problèmes, alors nous pouvons essayer de l'aider avec le problème spécifique. Vous devriez également lire Comment Demander.
Vous devez vous connecter pour publier un commentaire.
Il existe assez peu de similaire ou connexe des questions sur la DONC déjà qui sont bien la peine de lire les réponses contiennent beaucoup d'informations utiles et de conseils, mais en essence, vous devez faire ceci:
sqrt(re*re + im*im)
)20 * log10(magnitude)
)Note que bien que FFTW est un très bon et très rapide, FFT, il peut être un peu écrasante pour un débutant c'est aussi très cher si vous voulez l'inclure en tant que partie d'un produit commercial - je recommande de commencer avec KissFFT à la place.
20*log10
, prendre le carré de l'amplitude (le saut de l'sqrt), puis à l'échelle10*log10
. Mathématiquement équivalente, mais enregistre une inutilesqrt
appel.