БПФ Звуковой анализ

Я пытаюсь написать код, который будет. взять звук с микрофона моего компьютера и б. выведите частоту (т. е. высоту звука) звука. Это не должно быть очень точным, но должно работать. Я провел много часов, просматривая различные форумы по этому предмету, и обнаружил, что все они должны быть очень полезными, за исключением того, что я мог бы получить больше знаний по этому вопросу. Тем не менее, я не очень опытный программист, и большинство ответов, которые я видел, выходят у меня из головы. Я понимаю, что, возможно, я откусила больше, чем могу прожевать, учитывая моего новичка, но если бы кто-нибудь мог дать действительно практичное и легкое для понимания руководство о том, как мне следует осуществить это, я был бы очень благодарен. Пожалуйста, прости мой основной вопрос:).

Я хотел написать его на Java, но у меня есть опыт работы с Python и Swift.

2 ответа

Есть много решений для вашей проблемы. Если вы хорошо разбираетесь в математике, вы можете посмотреть на определение БПФ и реализовать формулу.

Однако, эта работа уже была сделана другими программистами, и есть много различных библиотек, которые реализуют функцию FFT.

В python вы можете использовать numpy. Или, если вы предпочитаете Java, вы можете использовать этот фрагмент: http://introcs.cs.princeton.edu/java/97data/FFT.java.html

Для чтения с микрофона вы можете использовать: https://docs.oracle.com/javase/tutorial/sound/capturing.html

(здесь есть пример получения звука с микрофона: Java Sound API - захват микрофона)

Итак, вам просто нужно использовать второй код, прочитать данные как 16-битный PCM с прямым порядком байтов и передать их в функцию FFT.

Я уже некоторое время использую Processing, и у нее есть несколько хороших аудиобиблиотек с поддержкой FFT. По умолчанию обработка - это библиотека java, поэтому вы можете попробовать ее (вы можете использовать ее в eclipse/netbeans/ и т. Д., Если минимальная IDE по умолчанию не подходит).

Вам не нужно использовать Processing с этими библиотеками, они все-таки являются библиотеками Java.

У Minim есть класс FFT с forward() и logAverages()

У Beads также есть класс FFT, и есть книга, которая более детально описывает анализ.

Обе библиотеки также предлагают поддержку ввода звука.

Другие вопросы по тегам