Определить частоту с учетом байта [] записанных аудиоданных с использованием Java

Я провел небольшое исследование по определению частоты с учетом необработанного звука. Кажется, об этом много информации, но я не смог найти простую реализацию с использованием Java. То, что я хотел бы сделать, это разделить массив байтов с элементами 44.1K на выборки размером 44 (отбрасывая оставшуюся часть) и определить, есть ли в каждой выборке тон свыше 18 кГц (я пытаюсь найти, когда тон был Воспроизведение во время записи было забрано микрофоном). При необходимости я мог бы использовать более крупные выборки, но 44 элемента на выборку были бы идеальными. Я понимаю, что мне, вероятно, нужно использовать БПФ, но математика для меня немного тяжелая. Я пытался проанализировать массив, используя алгоритм Гёртцеля, но я не смог получить убедительные результаты. Тогда у меня возникает вопрос: как бы я разделил массив байтов с 44.1К элементов на 1002 выборки, определил частоту каждой выборки (или обнаружил, превышает ли частоту выборки 18 кГц), и какой будет примерная реализация этой выборки?, Пожалуйста, дайте код или псевдокод. Я прочитал много документации, которая там есть, мне просто нужно посмотреть пример.

1 ответ

Решение

О БПФ в Java, посмотрите на надежное и быстрое БПФ в Java

Все остальное - просто петля:

for (int i=0; i<sampleArray.length; i+=44) {
    if (findOver18KHz(sampleArray, i, i++44)) {
        // found tone over 18KHz
    }
}

/**
 * Check for a tone over 18KHz
 */
boolean findOver18KHz(int[] samples, start, end) {
  // call the FFT stuff
  // make sure you don't get an ArrayOutOfBoundsException for samples.
}
Другие вопросы по тегам