2015-03-17 7 views
0

Как можно Я рисую спектр для данного аудиофайла с Bass library?Рисование аудио спектра с помощью библиотеки Bass

Я имею в виду график, похожий на то, что порождает Audacity: enter image description here

Я знаю, что я могу получить данные FFT на данное время t (когда я играю аудио) с:

float fft[1024]; 
BASS_ChannelGetData(chan, fft, BASS_DATA_FFT2048); // get the FFT data 

Это путь Я получаю 1024 значения в массиве за каждый раз t. Правильно ли, что значения в этом массиве являются амплитудами сигнала (dB)? Если да, то как частота (Hz) связана с этими значениями? По индексу?

Я программист, но у меня нет опыта обработки аудио. Поэтому я не знаю, что делать, с данными, которые у меня есть, для построения необходимого спектра.

Я работаю с версией на C++, но примеры на других языках - это нормально (я могу их преобразовать).

+1

Вы ознакомились с этой ссылкой на своем сайте? Это может иметь то, что вам нужно в разделе замечаний. http://www.un4seen.com/doc/#bass/BASS_ChannelGetData.html –

+0

@ E.Moffat Да, но почему-то я не могу найти способ пойти дальше. Возможно, из-за моего отсутствия знаний в проблемах с обработкой аудио:/ – PolGraphic

ответ

2

Из документации этот флаг приведет к вычитанию величины FFT, а из его звуков это линейная величина.

dB = 10 * log10(intensity); 
dB = 20 * log10(pressure); 

(я не уверен, что образцы аудио файлов, являются ли измерение интенсивности или давления. Что выход микрофона линейно связан?)

Кроме того, он указывает длину ввода и длины от FFT, но половина FFT (соответствующая отрицательным частотам) отбрасывается. Поэтому самая высокая частота FFT будет составлять половину частоты дискретизации. Это происходит при N/2. Фактические документы фактически говорят

Например, с образцом БПФ 2048 будет возвращено 1024 значений с плавающей запятой. Если используется флаг BASS_DATA_FIXED, то значения FFT будут в форме с фиксированной запятой 8.24, а не с плавающей запятой. Каждое значение, или «bin», находится в диапазоне от 0 до 1 (может фактически повышаться, если данные образца являются плавающей точкой и не обрезаны). 1-ый бин содержит постоянную составляющую, то вторая содержит амплитуду на 1/2048 скорости выборки канала, а затем амплитуды на 2/2048, 3/2048 и т.д.

Это кажется довольно ясным, ,

+0

Спасибо, человек :) О вопросе - это файл .wav загружен и воспроизведен с человеческим голосом. Один глупый вопрос: следует ли вычислить значение 'db' для каждого из значений' fft [1024] 'для построения графика? Разве это не приведет к серии диаграмм (по одному для каждого раза 't' - каждый 'update()' вычисляемый массив 'fft' отличается, если я не приостанавливаю звук) вместо одной диаграммы, которую я хочу получить для некоторых период времени (Audacity «Частотный анализ»)? – PolGraphic

+1

@PolGraphic: Я недостаточно знаком с Audacity, чтобы точно знать, что он делает ... с вашего скриншота, похоже, используется FFT фиксированного размера и усредняет это по выбранному вами временному окну. Другой вариант - использовать FFT, соответствующий временному окну. Третий вариант - использовать диаграмму водопада - оси - это время и частота, а плотность мощности показана с использованием цвета. –

+0

, поэтому с некоторым упрощением я мог бы сказать, что Audacity рисует «среднюю» (рассчитанную так или иначе) диаграмму из серии диаграмм 'db/Hz' (по одной диаграмме за каждый раз' t')? – PolGraphic

 Смежные вопросы

  • Нет связанных вопросов^_^