From be68b60d8f86b471a2188526689dea89d4570f10 Mon Sep 17 00:00:00 2001 From: sh123 Date: Fri, 4 Dec 2020 18:16:54 +0200 Subject: [PATCH] Pass codec2 mode and loopback mode flag from outside --- .../com/radio/codec2talkie/Codec2Player.java | 25 ++++++++++++------- .../com/radio/codec2talkie/MainActivity.java | 8 +++++- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/radio/codec2talkie/Codec2Player.java b/app/src/main/java/com/radio/codec2talkie/Codec2Player.java index 1f9aff9..969db62 100644 --- a/app/src/main/java/com/radio/codec2talkie/Codec2Player.java +++ b/app/src/main/java/com/radio/codec2talkie/Codec2Player.java @@ -8,7 +8,6 @@ import android.media.AudioTrack; import android.media.MediaRecorder; import android.os.Handler; import android.os.Message; -import android.util.Log; import java.io.IOException; import java.io.InputStream; @@ -29,7 +28,7 @@ public class Codec2Player extends Thread { private final byte KISS_CMD_DATA = (byte)0x00; private final byte KISS_CMD_NOCMD = (byte)0x80; - private final int KISS_FRAME_MAX_SIZE = 16; + private final int KISS_FRAME_MAX_SIZE = 32; private enum KissState { VOID, @@ -44,6 +43,8 @@ public class Codec2Player extends Thread { private int _kissOutputFramePos; private int _kissInputFramePos; + private final boolean _kissLoopbackMode; + // common audio public static int PLAYER_DISCONNECT = 1; @@ -81,9 +82,10 @@ public class Codec2Player extends Thread { private ByteBuffer _loopbackBuffer; - public Codec2Player(BluetoothSocket btSocket, Handler onPlayerStateChanged) throws IOException { + public Codec2Player(BluetoothSocket btSocket, Handler onPlayerStateChanged, int codec2Mode, boolean loopbackMode) throws IOException { _onPlayerStateChanged = onPlayerStateChanged; + _kissLoopbackMode = loopbackMode; _btSocket = btSocket; _btInputStream = _btSocket.getInputStream(); @@ -120,7 +122,7 @@ public class Codec2Player extends Thread { .build(); _audioPlayer.play(); - _codec2Con = Codec2.create(Codec2.CODEC2_MODE_450); + _codec2Con = Codec2.create(codec2Mode); _audioBufferSize = Codec2.getSamplesPerFrame(_codec2Con); _audioEncodedBufferSize = Codec2.getBitsSize(_codec2Con); // returns number of bytes @@ -133,13 +135,15 @@ public class Codec2Player extends Thread { _playbackAudioEncodedBuffer = new byte[_audioEncodedBufferSize]; _kissInputFramePos = 0; - _loopbackBuffer = ByteBuffer.allocateDirect(100000); + _loopbackBuffer = ByteBuffer.allocateDirect(1024 * _audioEncodedBufferSize); } private void kissWriteByte(byte b) throws IOException{ - //_btOutputStream.write(b); - //Log.d("write stream", String.format("%x", b)); - _loopbackBuffer.put(b); + if (_kissLoopbackMode) { + _loopbackBuffer.put(b); + } else { + _btOutputStream.write(b); + } _kissOutputFramePos++; } @@ -261,6 +265,9 @@ public class Codec2Player extends Thread { } private boolean processPlayback() throws IOException { + if (_kissLoopbackMode) { + return processLoopbackPlayback(); + } int btBytes = _btInputStream.available(); if (btBytes > 0) { byte[] br = new byte[1]; @@ -328,7 +335,7 @@ public class Codec2Player extends Thread { if (_audioRecorder.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING) { processRecording(); } else { - if (!processLoopbackPlayback()) { + if (!processPlayback()) { try { Thread.sleep(SLEEP_DELAY_MS); } catch (InterruptedException e) { diff --git a/app/src/main/java/com/radio/codec2talkie/MainActivity.java b/app/src/main/java/com/radio/codec2talkie/MainActivity.java index 337f6cb..449728c 100644 --- a/app/src/main/java/com/radio/codec2talkie/MainActivity.java +++ b/app/src/main/java/com/radio/codec2talkie/MainActivity.java @@ -18,6 +18,8 @@ import android.widget.Button; import android.widget.TextView; import android.widget.Toast; +import com.ustadmobile.codec2.Codec2; + import java.io.IOException; import java.util.LinkedList; import java.util.List; @@ -130,7 +132,11 @@ public class MainActivity extends AppCompatActivity { } else if (resultCode == RESULT_OK) { _textBtName.setText(data.getStringExtra("name")); try { - _codec2Player = new Codec2Player(BluetoothSocketHandler.getSocket(), onPlayerStateChanged); + _codec2Player = new Codec2Player( + BluetoothSocketHandler.getSocket(), + onPlayerStateChanged, + Codec2.CODEC2_MODE_450, + true); _codec2Player.start(); } catch (IOException e) { e.printStackTrace();