Чтение аудиобайтов в реальном времени - PullRequest
2 голосов
/ 20 февраля 2011

Цель состоит в том, чтобы получить простой 2D-визуализатор звука, который несколько отзывчив на музыку.

Я настроил основы, где у меня есть графика, которая будет реагировать на некоторые вводимые данные. Имея файл, я загружаю audioInputStream для воспроизведения (это работает нормально), и он работает в потоке , В другом потоке я хотел бы извлечь байтовые данные со скоростью, близкой к воспроизведению (или, возможно, быстрее, чтобы учесть задержку в обработке этих данных). Затем я хочу передать это процессу FFT и передать полученные данные моему графическому объекту, который будет использовать его в качестве параметра для любой визуализации.

У меня есть два вопроса для этого процесса:

1) Как я могу получить байтовые данные и обработать их со скоростью, которая будет соответствовать нормальному воспроизведению файла? Является ли использование audioInputStream подходом?

2) Как только я делаю БПФ, какой хороший способ получить полезные данные (например, спектр мощности? Каким-то образом отфильтровывать определенные частоты? И т. Д.)

1 Ответ

0 голосов
/ 10 февраля 2015

Некоторые соображения относительно (2) использования БПФ для извлечения «функций».

Вы должны рассчитать краткосрочные БПФ, например, 512 баллов, когда для этого достаточно свободных циклов ЦП. Для визуализации нет необходимости сохранять всю информацию (то есть работать с перекрывающимися окнами), вместо этого вы можете рассчитать FFT 100 мс 5 раз в секунду.

Затем вы должны рассчитать логарифмический спектр мощности в дБ (децибел). Это дает вам довольно хорошее впечатление о подробном частотном содержании вашего звука.

В зависимости от того, что вы хотите визуализировать, вы можете, например, объединить некоторые низкочастотные линии БПФ (рассчитать среднеквадратичное значение), чтобы получить «басовое» содержание вашего звука и т. Д.

Подробнее см. в этом посте .

...