From a38457789bc9a7d8b6aafc24e02290210b65563f Mon Sep 17 00:00:00 2001 From: neel1998 Date: Tue, 25 Jun 2019 22:16:13 +0530 Subject: [PATCH 1/2] fourier transform for built in mic input working fine --- .../pslab/activity/OscilloscopeActivity.java | 51 ++++++++++++++++--- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/io/pslab/activity/OscilloscopeActivity.java b/app/src/main/java/io/pslab/activity/OscilloscopeActivity.java index 3892449e2..5d0d5b35c 100644 --- a/app/src/main/java/io/pslab/activity/OscilloscopeActivity.java +++ b/app/src/main/java/io/pslab/activity/OscilloscopeActivity.java @@ -471,11 +471,9 @@ public void run() { } } - if (!isInBuiltMicSelected) { - if (audioJack != null) { - audioJack.release(); - audioJack = null; - } + if (!isInBuiltMicSelected && audioJack != null) { + audioJack.release(); + audioJack = null; } } } @@ -794,6 +792,10 @@ protected void onDestroy() { recordTimer.cancel(); recordTimer = null; } + if (audioJack != null) { + audioJack.release(); + audioJack = null; + } super.onDestroy(); } @@ -1011,11 +1013,40 @@ protected Void doInBackground(String... channels) { } short[] buffer = audioJack.read(); yDataString.add(new String[buffer.length]); - for (int i = 0; i < buffer.length; i++) { + + int n = buffer.length; + Complex[] fftOut = null; + if (isFourierTransformSelected) { + Complex[] yComplex = new Complex[n]; + for (int j = 0; j < n; j++) { + float audioValue = (float) map(buffer[j], -32768, 32767, -3, 3); + Log.d("mic", audioValue + ""); + yComplex[j] = Complex.valueOf(audioValue); + } + fftOut = fft(yComplex); + } + double factor = buffer.length * timeGap * 1e-3; + maxFreq = (n / 2 - 1) / factor; + double mA = 0; + for (int i = 0; i < n; i++) { float audioValue = (float) map(buffer[i], -32768, 32767, -3, 3); + if (!isFourierTransformSelected) { + entries.get(noOfChannels - 1).add(new Entry(i, audioValue)); + } else { + if (i < n / 2) { + float y = (float) fftOut[i].abs() / samples; + if (y > mA) { + mA = y; + } + entries.get(noOfChannels - 1).add(new Entry((float) (i / factor), y)); + } + } yDataString.get(noOfChannels - 1)[i] = String.valueOf(audioValue); - entries.get(noOfChannels - 1).add(new Entry(i, audioValue)); } + if (mA > maxAmp) { + maxAmp = mA; + } + } if (isRecording) { loggingXdata = String.join(" ", xDataString); @@ -1175,6 +1206,12 @@ public Complex[] fft(Complex[] input) { for (int k = 0; k < n / 2; k++) { double kth = -2 * k * Math.PI / n; Complex wk = new Complex(Math.cos(kth), Math.sin(kth)); + if (r[k] == null) { + r[k] = new Complex(1); + } + if (q[k] == null) { + q[k] = new Complex(1); + } y[k] = q[k].add(wk.multiply(r[k])); y[k + n / 2] = q[k].subtract(wk.multiply(r[k])); } From b3be49c8dfd2a08c2eb1c363ea75e22816762ab6 Mon Sep 17 00:00:00 2001 From: neel1998 Date: Tue, 25 Jun 2019 22:46:02 +0530 Subject: [PATCH 2/2] debugging statement removed --- app/src/main/java/io/pslab/activity/OscilloscopeActivity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/io/pslab/activity/OscilloscopeActivity.java b/app/src/main/java/io/pslab/activity/OscilloscopeActivity.java index 5d0d5b35c..426cf0bfa 100644 --- a/app/src/main/java/io/pslab/activity/OscilloscopeActivity.java +++ b/app/src/main/java/io/pslab/activity/OscilloscopeActivity.java @@ -1020,7 +1020,6 @@ protected Void doInBackground(String... channels) { Complex[] yComplex = new Complex[n]; for (int j = 0; j < n; j++) { float audioValue = (float) map(buffer[j], -32768, 32767, -3, 3); - Log.d("mic", audioValue + ""); yComplex[j] = Complex.valueOf(audioValue); } fftOut = fft(yComplex);