From 77125218efd23b41cb12aab85ffd2f2cae620f1f Mon Sep 17 00:00:00 2001 From: sh123 Date: Sat, 5 Dec 2020 20:48:41 +0200 Subject: [PATCH] Enable dynamic mode set --- .../com/radio/codec2talkie/Codec2Player.java | 49 +++++++++++-------- .../com/radio/codec2talkie/MainActivity.java | 25 +++++++++- .../src/main/res/layout/activity_main.xml | 24 ++++++++- codec2talkie/src/main/res/values/strings.xml | 10 ++++ .../java/com/ustadmobile/codec2/Codec2.java | 3 -- 5 files changed, 86 insertions(+), 25 deletions(-) diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/Codec2Player.java b/codec2talkie/src/main/java/com/radio/codec2talkie/Codec2Player.java index 4b6710b..90f7334 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/Codec2Player.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/Codec2Player.java @@ -26,11 +26,11 @@ public class Codec2Player extends Thread { private final int AUDIO_SAMPLE_SIZE = 8000; private final int SLEEP_DELAY_MS = 10; - private final long _codec2Con; + private long _codec2Con; private final BluetoothSocket _btSocket; - private final int _audioBufferSize; + private int _audioBufferSize; private boolean _isRecording = false; @@ -39,22 +39,22 @@ public class Codec2Player extends Thread { private final AudioTrack _audioPlayer; - private final short[] _playbackAudioBuffer; + private short[] _playbackAudioBuffer; // output data., mic -> bt private final OutputStream _btOutputStream; private final AudioRecord _audioRecorder; - private final short[] _recordAudioBuffer; - private final char[] _recordAudioEncodedBuffer; + private short[] _recordAudioBuffer; + private char[] _recordAudioEncodedBuffer; // loopback mode private boolean _isLoopbackMode; - private final ByteBuffer _loopbackBuffer; + private ByteBuffer _loopbackBuffer; // callbacks - private final KissProcessor _kissProcessor; + private KissProcessor _kissProcessor; private final Handler _onPlayerStateChanged; public Codec2Player(BluetoothSocket btSocket, Handler onPlayerStateChanged, int codec2Mode) throws IOException { @@ -97,7 +97,28 @@ public class Codec2Player extends Thread { .build(); _audioPlayer.play(); - _codec2Con = Codec2.create(codec2Mode); + setCodecModeInternal(codec2Mode); + } + + public void setLoopbackMode(boolean isLoopbackMode) { + _isLoopbackMode = isLoopbackMode; + } + + public void setCodecMode(int codecMode) { + Codec2.destroy(_codec2Con); + setCodecModeInternal(codecMode); + } + + public void startPlayback() { + _isRecording = false; + } + + public void startRecording() { + _isRecording = true; + } + + private void setCodecModeInternal(int codecMode) { + _codec2Con = Codec2.create(codecMode); _audioBufferSize = Codec2.getSamplesPerFrame(_codec2Con); int _audioEncodedBufferSize = Codec2.getBitsSize(_codec2Con); // returns number of bytes @@ -112,18 +133,6 @@ public class Codec2Player extends Thread { _kissProcessor = new KissProcessor(_audioEncodedBufferSize, _kissCallback); } - public void setLoopbackMode(boolean isLoopbackMode) { - _isLoopbackMode = isLoopbackMode; - } - - public void startPlayback() { - _isRecording = false; - } - - public void startRecording() { - _isRecording = true; - } - private final KissCallback _kissCallback = new KissCallback() { @Override protected void sendByte(byte b) { diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/MainActivity.java b/codec2talkie/src/main/java/com/radio/codec2talkie/MainActivity.java index 52051ab..5dddd87 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/MainActivity.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/MainActivity.java @@ -14,7 +14,9 @@ import android.os.Looper; import android.os.Message; import android.view.MotionEvent; import android.view.View; +import android.widget.AdapterView; import android.widget.Button; +import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; @@ -31,6 +33,9 @@ public class MainActivity extends AppCompatActivity { private final static int REQUEST_CONNECT_BT = 1; private final static int REQUEST_PERMISSIONS = 2; + private final static int CODEC2_DEFAULT_MODE = Codec2.CODEC2_MODE_450; + private final static int CODEC2_DEFAULT_MODE_POS = 0; + private final String[] _requiredPermissions = new String[] { Manifest.permission.BLUETOOTH, Manifest.permission.RECORD_AUDIO @@ -50,6 +55,10 @@ public class MainActivity extends AppCompatActivity { Button _btnPtt = (Button) findViewById(R.id.btnPtt); _btnPtt.setOnTouchListener(onBtnPttTouchListener); + Spinner _spinnerCodec2Mode = (Spinner) findViewById(R.id.spinnerCodecMode); + _spinnerCodec2Mode.setSelection(CODEC2_DEFAULT_MODE_POS); + _spinnerCodec2Mode.setOnItemSelectedListener(onCodecModeSelectedListener); + if (requestPermissions()) { startBluetoothConnectActivity(); } @@ -78,6 +87,20 @@ public class MainActivity extends AppCompatActivity { return true; } + private final AdapterView.OnItemSelectedListener onCodecModeSelectedListener = new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + String selectedCodec = getResources().getStringArray(R.array.codec2_modes)[position]; + String [] codecNameCodecId = selectedCodec.split("="); + if (_codec2Player != null) + _codec2Player.setCodecMode(Integer.parseInt(codecNameCodecId[1])); + } + + @Override + public void onNothingSelected(AdapterView parent) { + } + }; + private final View.OnTouchListener onBtnPttTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { @@ -137,7 +160,7 @@ public class MainActivity extends AppCompatActivity { _codec2Player = new Codec2Player( SocketHandler.getSocket(), onPlayerStateChanged, - Codec2.CODEC2_MODE_450); + CODEC2_DEFAULT_MODE); _codec2Player.setLoopbackMode(true); _codec2Player.start(); } catch (IOException e) { diff --git a/codec2talkie/src/main/res/layout/activity_main.xml b/codec2talkie/src/main/res/layout/activity_main.xml index 6da8f7d..30e186e 100644 --- a/codec2talkie/src/main/res/layout/activity_main.xml +++ b/codec2talkie/src/main/res/layout/activity_main.xml @@ -12,7 +12,9 @@ android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" - android:textAppearance="@style/TextAppearance.AppCompat.Medium" + android:text="Connected bluetooth" + android:textAppearance="@style/TextAppearance.AppCompat.Large" + android:textSize="14sp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -34,4 +36,24 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + + \ No newline at end of file diff --git a/codec2talkie/src/main/res/values/strings.xml b/codec2talkie/src/main/res/values/strings.xml index f63e2fb..99d7cea 100644 --- a/codec2talkie/src/main/res/values/strings.xml +++ b/codec2talkie/src/main/res/values/strings.xml @@ -1,4 +1,14 @@ Codec2Talkie push-to-talk + + CODEC2_MODE_450=10 + CODEC2_MODE_700C=8 + CODEC2_MODE_1200=5 + CODEC2_MODE_1300=4 + CODEC2_MODE_1400=3 + CODEC2_MODE_1600=2 + CODEC2_MODE_2400=1 + CODEC2_MODE_3200=0 + \ No newline at end of file diff --git a/libcodec2-android/src/main/java/com/ustadmobile/codec2/Codec2.java b/libcodec2-android/src/main/java/com/ustadmobile/codec2/Codec2.java index fd5e6a3..c132c0d 100644 --- a/libcodec2-android/src/main/java/com/ustadmobile/codec2/Codec2.java +++ b/libcodec2-android/src/main/java/com/ustadmobile/codec2/Codec2.java @@ -16,10 +16,7 @@ public class Codec2 { public static final int CODEC2_MODE_1400 = 3; public static final int CODEC2_MODE_1300 = 4; public static final int CODEC2_MODE_1200 = 5; - public static final int CODEC2_MODE_700 = 6; - public static final int CODEC2_MODE_700B = 7; public static final int CODEC2_MODE_700C = 8; - public static final int CODEC2_MODE_WB = 9; public static final int CODEC2_MODE_450=10; public static final int CODEC2_MODE_450PWB=11;