] Android audio FFT для получения определенной амплитуды частоты с помощью аудиозаписи

В настоящее время я пытаюсь реализовать некоторый код с использованием Android, чтобы определять, когда через микрофон телефона воспроизводится ряд определенных диапазонов звуковых частот. Я установил класс, используя класс AudioRecord :

int channel_config = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int format = AudioFormat.ENCODING_PCM_16BIT;
int sampleSize = 8000;
int bufferSize = AudioRecord.getMinBufferSize(sampleSize, channel_config, format);
AudioRecord audioInput = new AudioRecord(AudioSource.MIC, sampleSize, channel_config, format, bufferSize);

Затем звук читается:

short[] audioBuffer = new short[bufferSize];
audioInput.startRecording();
audioInput.read(audioBuffer, 0, bufferSize);

Выполнение БПФ - вот где я застрял, так как у меня очень мало опыта в этой области. Я пытался использовать этот класс:

БПФ в Java и Сложный класс для работы с ним

Затем я отправляю следующие значения:

Complex[] fftTempArray = new Complex[bufferSize];
for (int i=0; i

Это может быть легко из-за того, что я неправильно понимаю, как это class предназначен для работы, но возвращаемые значения скачут повсюду и не соответствуют постоянной частоте даже в тишине. Кто-нибудь знает, как выполнить эту задачу, или я слишком усложняю дело, пытаясь захватить лишь небольшое количество частотных диапазонов, а не изобразить его в виде графического представления?

38
задан Amanda S 1 October 2012 в 18:45
поделиться