Построение звукового спектра

Я пытаюсь реализовать приложение, которое отображает спектр звука с использованием басов (http://www.un4seen.com/). Насколько я понимаю, мне придется:

  1. Получить данные БПФ из потока float [] buffer = new float [256]; Bass.BASS_ChannelGetData (дескриптор, буфер, (целое) (BASS_DATA_FFT_COMPLEX | BASS_DATA_FFT_NOWINDOW));

  2. Для каждого fft вычислите его величину

  3. Примените оконную функцию к БПФ (подойдет Ханнинг или Хэмминг)

  4. затем нарисуйте красивый спектральный анализ

Однако проблема в том, что:

  • Кажется, что BASS_DATA_FFT_COMPLEX BassData недоступен. Я вижу, что он должен быть доступен в документации http://www.bass.radio42.com/help/html/a13cfef0-1056-bb94-81c4-a4fdf21bd463.htm, но я не могу его использовать, так как получаю сообщение об ошибке, что BassData не включает такое перечисление
  • Кроме того, мне интересно, правильно ли то, что я делаю. Чтобы построить спектр, я должен просто построить график величины fft или plat величину fft в зависимости от частоты этого fft? В этом случае, как мне получить частоту, соответствующую этому fft? Я не возражаю против кода, вырезанного из любого языка (C / C ++, C #, VB, Java и т. Д.)

Примечание. Я не уверен, поможет ли это, но я использую вот что: построение графиков с использованием элемента управления Microsoft Chart. C # с BASS.NET API от http://www.bass.radio42.com/ Любая помощь и предложения очень ценятся


person Dillion Ecmark    schedule 13.05.2013    source источник


Ответы (1)


Вы перепутали порядок шагов - вам нужно применить оконную функцию к данным во временной области перед вычислением БПФ. Обычно это следующие шаги:

1. acquire time domain data
2. apply window function
3. calculate FFT
4. calculate log magnitude of FFT (log(re*re+im*im))
5. plot log magnitude (with appropriate scaling) against frequency

Обратите внимание, что использование логарифмической величины для оси Y дает эффективную шкалу dB, которая является более естественным и полезным способом просмотра амплитуды звука, чем линейная шкала амплитуды.

Обычно для визуализации звука и т. Д. Вы применяете шаги 1–5 выше к последовательным блокам данных во временной области, обычно с перекрытием 50%.

person Paul R    schedule 13.05.2013