Как генерировать звуковой спектр с помощью 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.