В настоящее время я пытаюсь реализовать некоторый код с помощью 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<bufferSize; i++)
{
fftTempArray[i] = new Complex(audio[i], 0);
}
Complex[] fftArray = fft(fftTempArray);
Это может быть моим неправильным пониманием того, как этот класс должен работать, но возвращаемые значения перепрыгивают повсеместно и не представляют постоянной частоты даже в тишине. Кто-нибудь знает способ выполнения этой задачи, или я слишком усложняю вопрос, пытаясь захватить только небольшое количество частотных диапазонов, а не нарисовать его в виде графического представления?