Подтвердить что ты не робот

Как сгенерировать аудио спектр с помощью fft в С++?

Я хочу создать звуковой спектр (как показано в это видео) mp3-аудиофайла. В основном эта проблема требует вычисления fft аудиосигнала. Как мне запрограммировать это на C/С++?

Я просмотрел несколько библиотек с открытым исходным кодом, таких как FFTW, и я действительно не знаю, как использовать эти для моей проблемы. Любая помощь будет принята с благодарностью. Спасибо заранее!

4b9b3361

Ответ 1

Существует много аналогичных/связанных вопросов по SO, которые хорошо читаются, поскольку ответы содержат много полезной информации и советов, но по существу вам нужно это сделать:

  • конвертировать аудиоданные в формат, требуемый FFT (например, int → float, отдельные каналы L/R)
  • примените подходящую (например, Hann aka Hanning window)
  • применить FFT (NB: если использовать типичный комплексно-сложный FFT, тогда установите мнимые части входного массива на нуль)
  • рассчитать величину первых N/2 выходов БПФ (sqrt(re*re + im*im))
  • опционально преобразуйте масштаб в шкалу dB (log) (20 * log10(magnitude))
  • график N/2 (log) значения величины

Обратите внимание, что, хотя FFTW - очень хороший и очень быстрый FFT, он может быть немного подавляющим для новичков - он также очень дорог, если вы хотите включить его в состав коммерческого продукта - я рекомендую начинать с KissFFT.