Android AudioRecord Filter Frequenzbereich

Ich benutze die Android-Plattform. Aus der folgenden Referenzfrage erfahre ich, dass die Verwendung der AudioRecord-Klasse, die Rohdaten zurückgibt, von meinem Bedarf abhängt, aber dafür brauche ich einen Algorithmus. Kann mir jemand helfen, dies zu finden? Algorithmus zum Filtern des S / W-Bereichs von 14.400 bph und 16.200 bph.

Ich habe "JTransform" ausprobiert, aber ich weiß nicht, ob ich dies mit JTransform erreichen kann oder nicht. Momentan verwende ich "jfftpack", um visuelle Effekte anzuzeigen, was sehr gut funktioniert, aber ich kann damit keinen Audiofilter erzielen.

Referenz hier

hilfe danke im voraus. Das Folgende ist mein Code, wie ich oben erwähnt habe. Ich verwende die "jfftpack" -Bibliothek, um anzuzeigen. Vielleicht finden Sie diese Bibliotheksreferenz im Code. Bitte verwechseln Sie das nicht

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage