Определить частоту с учетом байта [] записанных аудиоданных с использованием 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.
}