Android audio FFT para recuperar la magnitud de frecuencia específica usando audiorecord

Actualmente estoy tratando de implementar algún código con Android para detectar cuándo se reproducen varios rangos de frecuencia de audio específicos a través del micrófono del teléfono. He configurado la clase usando laAudioRecord clase

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);

El audio se lee en:

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

Realizar una FFT es donde me quedo estancado, ya que tengo muy poca experiencia en esta área. He estado tratando de usar esta clase:

FFT en Java y Clase compleja para ir con ella

Luego envío los siguientes valores:

Complex[] fftTempArray = new Complex[bufferSize];
for (int i=0; i<bufferSize; i++)
{
    fftTempArray[i] = new Complex(audio[i], 0);
}
Complex[] fftArray = fft(fftTempArray);

Esto podría ser fácilmente un malentendido sobre cómo debe funcionar esta clase, pero los valores devueltos saltan por todos lados y no son representativos de una frecuencia constante incluso en silencio. ¿Alguien sabe de una manera de realizar esta tarea, o estoy complicando demasiado los asuntos para tratar de tomar solo un pequeño número de rangos de frecuencia en lugar de dibujarlo como una representación gráfica?

Respuestas a la pregunta(1)

Su respuesta a la pregunta