diff --git a/encoder/build.gradle b/encoder/build.gradle index 9a1cb7ebd4..a1bbe65e02 100644 --- a/encoder/build.gradle +++ b/encoder/build.gradle @@ -21,4 +21,5 @@ android { dependencies { api 'androidx.annotation:annotation:1.1.0' + implementation files('lib/TarsosDSP-Android-2.4-bin.jar') } diff --git a/encoder/lib/TarsosDSP-Android-2.4-bin.jar b/encoder/lib/TarsosDSP-Android-2.4-bin.jar new file mode 100644 index 0000000000..1479d2db2b Binary files /dev/null and b/encoder/lib/TarsosDSP-Android-2.4-bin.jar differ diff --git a/encoder/src/main/java/com/pedro/encoder/input/audio/MicrophoneManager.java b/encoder/src/main/java/com/pedro/encoder/input/audio/MicrophoneManager.java index aa2376d0aa..7f69d2c42b 100644 --- a/encoder/src/main/java/com/pedro/encoder/input/audio/MicrophoneManager.java +++ b/encoder/src/main/java/com/pedro/encoder/input/audio/MicrophoneManager.java @@ -9,9 +9,16 @@ import android.os.Handler; import android.os.HandlerThread; import android.util.Log; + import com.pedro.encoder.Frame; + import java.nio.ByteBuffer; +import be.tarsos.dsp.AudioDispatcher; +import be.tarsos.dsp.filters.BandPass; +import be.tarsos.dsp.io.TarsosDSPAudioFormat; +import be.tarsos.dsp.io.android.AndroidAudioInputStream; + /** * Created by pedro on 19/01/17. */ @@ -19,6 +26,7 @@ public class MicrophoneManager { private final String TAG = "MicrophoneManager"; + private final String FILTER_TAG = "MicrophoneManagerFilter"; private static final int BUFFER_SIZE = 4096; protected AudioRecord audioRecord; private GetMicrophoneData getMicrophoneData; @@ -34,6 +42,7 @@ public class MicrophoneManager { private boolean muted = false; private AudioPostProcessEffect audioPostProcessEffect; HandlerThread handlerThread; + HandlerThread filterThread; private CustomAudioEffect customAudioEffect = new NoAudioEffect(); public MicrophoneManager(GetMicrophoneData getMicrophoneData) { @@ -136,6 +145,16 @@ public void run() { private void init() { if (audioRecord != null) { + final TarsosDSPAudioFormat audioFormat = new TarsosDSPAudioFormat(22050f, 16, 1, true, false); + final AndroidAudioInputStream inputStream = new AndroidAudioInputStream(audioRecord, audioFormat); + final AudioDispatcher audioDispatcher = new AudioDispatcher(inputStream, BUFFER_SIZE, BUFFER_SIZE / 2); + audioDispatcher.addAudioProcessor(new BandPass(440, 500, 1024)); + + filterThread = new HandlerThread(FILTER_TAG); + filterThread.start(); + Handler filterHandler = new Handler(filterThread.getLooper()); + filterHandler.post(audioDispatcher); + audioRecord.startRecording(); running = true; Log.i(TAG, "Microphone started"); @@ -177,11 +196,13 @@ public synchronized void stop() { running = false; created = false; if (handlerThread != null) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - handlerThread.quitSafely(); - } else { - handlerThread.quit(); - } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { + handlerThread.quitSafely(); + filterThread.quitSafely(); + } else { + handlerThread.quit(); + filterThread.quit(); + } } if (audioRecord != null) { audioRecord.setRecordPositionUpdateListener(null);