Получить частоту и высоту звука из записанного файла в Android

Я пытаюсь сделать приложение, где пользователь что-то скажет, а затем нажмет кнопку, которая даст ему значение частоты для того, что он сказал. Я много искал и пришел к выводу, что мне нужно сначала использовать класс аудиозаписи, чтобы записать голос, а затем использовать FFT для преобразования его в частоту. Мой основной вопрос заключается в том, что БПФ дает график частоты, и мне это не нужно, мне нужны частота и значение шага. Как я могу это сделать?

Пожалуйста, помогите мне:)

2 ответа

Если вы не собираете чистый звук (например, синусоидальную волну), ваши результаты на самом деле будут частотным диапазоном, который вы получаете в данный момент с помощью БПФ (см. Это описание).

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

Это определенно выполнимо!

Удачи.

Есть много вещей, которые вы можете использовать, чтобы помочь с этим процессом. JTransforms - это библиотека, которая позволяет легко принимать FFT. Вам нужно взять БПФ в нескольких точках, чтобы получить соответствующую частоту в каждой из этих точек. Когда я говорю "точка", я имею в виду, что вы должны разбить аудио на блоки, которые будут FFT-индивидуально. Эти блоки могут перекрываться для повышения точности. Они также могут быть обработаны окнами перед выполнением БПФ для большей точности.

Затем, результаты FFT необходимо манипулировать больше, чтобы сделать результат более точным. Это можно сделать с помощью анализа Cepstrum или анализа гармонического спектра продуктов и другими способами.

Наконец, имейте в виду, есть и другие решения, кроме FFT. Метод автокорреляции вообще не использует частотную область. Он проверяет фактические образцы аудиофайлов, чтобы определить частоту. Это может быть дороже в вычислительном отношении, но также может быть более точным.

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