Filtro de audio de Android rango de frecuencia

Estoy usando la plataforma Android, de la siguiente pregunta de referencia llego a saber que el uso de la clase AudioRecord que devuelve datos en bruto Puedo filtrar el rango de la frecuencia de audio depende de mi necesidad, pero para eso necesitaré un algoritmo. ¿Alguien puede ayudarme? Algoritmo para filtrar el rango b / w 14,400 bph y 16,200 bph.

Intenté "JTransform" pero no sé ¿puedo lograr esto con JTransform o no? Actualmente estoy usando "jfftpack" para mostrar efectos visuales que funcionan muy bien pero no puedo lograr el filtro de audio con esto.

Referencia aqui

Ayuda apreciada gracias de antemano. A continuación se muestra mi código como mencioné anteriormente. Estoy usando la biblioteca "jfftpack" para mostrar que puede encontrar esta referencia de la biblioteca en el código. No se confunda con eso.

private class RecordAudio extends AsyncTask<Void, double[], Void> {
        @Override
        protected Void doInBackground(Void... params) {
try {
    final AudioRecord audioRecord = findAudioRecord();
                    if(audioRecord == null){
                        return null;
                    }

                    final short[] buffer = new short[blockSize];
                    final double[] toTransform = new double[blockSize];

                    audioRecord.startRecording();


    while (started) {
                        final int bufferReadResult = audioRecord.read(buffer, 0, blockSize);

                        for (int i = 0; i < blockSize && i < bufferReadResult; i++) {
                            toTransform[i] = (double) buffer[i] / 32768.0; // signed 16 bit
                        }

                        transformer.ft(toTransform);
                        publishProgress(toTransform);

                    }
audioRecord.stop();
                audioRecord.release();
} catch (Throwable t) {
                Log.e("AudioRecord", "Recording Failed");
            }
            return null;

/**
         * @param toTransform
         */
        protected void onProgressUpdate(double[]... toTransform) {
            canvas.drawColor(Color.BLACK);
            for (int i = 0; i < toTransform[0].length; i++) {
                int x = i;
                int downy = (int) (100 - (toTransform[0][i] * 10));
                int upy = 100;
                canvas.drawLine(x, downy, x, upy, paint);
            }
            imageView.invalidate();
        }

Respuestas a la pregunta(1)

Su respuesta a la pregunta