определить частоту, учитывая байт [] записанных аудиоданных, используя java

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


person HXSP1947    schedule 09.09.2013    source источник
comment
Вам действительно следует придерживаться подхода Герцеля, а не БПФ, по причинам, которые я привел в ответ на ваш предыдущий вопрос.   -  person Paul R    schedule 09.09.2013


Ответы (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.
}
person BetaRide    schedule 09.09.2013