Как генерировать звуковой спектр с помощью fft в C++? [закрытый]
Я хочу создать звуковой спектр (как показано в видео) аудиофайла mp3. В основном эта проблема требует вычисления БПФ аудиосигнала. Как это запрограммировать на C / C++?
Я просмотрел несколько библиотек с открытым исходным кодом, таких как библиотека FFTW и я действительно не знаю, как использовать это для моей проблемы. Любая помощь будет очень признательна. Заранее спасибо!
1 ответов
есть довольно много подобных / связанных вопросов на SO уже, которые стоит прочитать, поскольку ответы содержат много полезной информации и советов, но по сути вам нужно сделать это:
- преобразование аудио данных в формат, требуемый FFT (например, int -> float, отдельные каналы L/R)
- применять функция окна (например,Ханн ака Ханнинг окно)
- применить БПФ (NB: при использовании типичного комплекса к комплексу БПФ затем установите мнимые части входного массива в ноль)
- вычислить величину первых выходных бункеров N / 2 FFT (
sqrt(re*re + im*im)
) - дополнительно преобразовать величину в DB (log) масштаб (
20 * log10(magnitude)
) - график N / 2 (log) значения величины
обратите внимание, что, хотя FFTW-очень хороший и очень быстрый FFT, он может быть немного подавляющим для новичка - это также очень дорого, если вы хотите включить его в состав коммерческого продукта - я рекомендую начать с KissFFT.