From 2f949aa501269be8d914bbec40ce3d115dbc7172 Mon Sep 17 00:00:00 2001 From: sh123 Date: Sat, 9 Dec 2023 13:33:32 +0200 Subject: [PATCH] Update codec2 related interfaces --- .../com/radio/codec2talkie/app/AppWorker.java | 2 +- .../radio/codec2talkie/protocol/AudioCodec2.java | 13 +++++++++++-- .../protocol/AudioFrameAggregator.java | 15 ++++++++++----- .../codec2talkie/protocol/ProtocolFactory.java | 8 ++++---- .../com/radio/codec2talkie/protocol/Recorder.java | 14 +++++++++++--- 5 files changed, 37 insertions(+), 15 deletions(-) diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java b/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java index fc46285..75b3cce 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java @@ -97,7 +97,7 @@ public class AppWorker extends Thread { _stationItemRepository = new StationItemRepository((Application)context); _transport = TransportFactory.create(transportType, context); - _protocol = ProtocolFactory.create(_codec2Mode, context); + _protocol = ProtocolFactory.create(context); _processPeriodicTimer = new Timer(); diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AudioCodec2.java b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AudioCodec2.java index 21e1224..91fd781 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AudioCodec2.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AudioCodec2.java @@ -1,9 +1,13 @@ package com.radio.codec2talkie.protocol; import android.content.Context; +import android.content.SharedPreferences; +import com.radio.codec2talkie.R; import com.radio.codec2talkie.protocol.message.TextMessage; import com.radio.codec2talkie.protocol.position.Position; +import com.radio.codec2talkie.settings.PreferenceKeys; +import com.radio.codec2talkie.tools.AudioTools; import com.radio.codec2talkie.transport.Transport; import com.ustadmobile.codec2.Codec2; @@ -19,18 +23,23 @@ public class AudioCodec2 implements Protocol { private char[] _recordAudioEncodedBuffer; private short[] _playbackAudioBuffer; + private final SharedPreferences _sharedPreferences; private ProtocolCallback _parentProtocolCallback; - public AudioCodec2(Protocol childProtocol, int codec2ModeId) { + public AudioCodec2(Protocol childProtocol, SharedPreferences sharedPreferences) { _childProtocol = childProtocol; _codec2Con = 0; - constructCodec2(codec2ModeId); + _sharedPreferences = sharedPreferences; } @Override public void initialize(Transport transport, Context context, ProtocolCallback protocolCallback) throws IOException { _parentProtocolCallback = protocolCallback; _childProtocol.initialize(transport, context, _protocolCallback); + + String codec2ModeName = _sharedPreferences.getString(PreferenceKeys.CODEC2_MODE, context.getResources().getStringArray(R.array.codec2_modes)[0]); + int codec2ModeId = AudioTools.extractCodec2ModeId(codec2ModeName); + constructCodec2(codec2ModeId); } @Override diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AudioFrameAggregator.java b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AudioFrameAggregator.java index 493f80a..78d0493 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AudioFrameAggregator.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AudioFrameAggregator.java @@ -6,9 +6,11 @@ import android.util.Log; import androidx.preference.PreferenceManager; +import com.radio.codec2talkie.R; import com.radio.codec2talkie.protocol.message.TextMessage; import com.radio.codec2talkie.protocol.position.Position; import com.radio.codec2talkie.settings.PreferenceKeys; +import com.radio.codec2talkie.tools.AudioTools; import com.radio.codec2talkie.transport.Transport; import com.ustadmobile.codec2.Codec2; @@ -25,19 +27,18 @@ public class AudioFrameAggregator implements Protocol { private int _outputBufferPos; private byte[] _outputBuffer; - private final int _codec2FrameSize; - private final int _codec2ModeId; + private int _codec2FrameSize; private String _lastSrc; private String _lastDst; private int _lastCodec2Mode; + private final SharedPreferences _sharedPreferences; private ProtocolCallback _parentProtocolCallback; - public AudioFrameAggregator(Protocol childProtocol, int codec2ModeId) { + public AudioFrameAggregator(Protocol childProtocol, SharedPreferences sharedPreferences) { _childProtocol = childProtocol; - _codec2ModeId = codec2ModeId; - _codec2FrameSize = getPcmAudioBufferSize(codec2ModeId); + _sharedPreferences = sharedPreferences; } @Override @@ -48,6 +49,10 @@ public class AudioFrameAggregator implements Protocol { _outputBuffer = new byte[_outputBufferSize]; _outputBufferPos = 0; _childProtocol.initialize(transport, context, _protocolCallback); + + String codec2ModeName = _sharedPreferences.getString(PreferenceKeys.CODEC2_MODE, context.getResources().getStringArray(R.array.codec2_modes)[0]); + int codec2ModeId = AudioTools.extractCodec2ModeId(codec2ModeName); + _codec2FrameSize = getPcmAudioBufferSize(codec2ModeId); } @Override diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/ProtocolFactory.java b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/ProtocolFactory.java index 4862d10..cd9c955 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/ProtocolFactory.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/ProtocolFactory.java @@ -59,7 +59,7 @@ public class ProtocolFactory { return protocolType; } - public static Protocol create(int codec2ModeId, Context context) { + public static Protocol create(Context context) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); @@ -104,11 +104,11 @@ public class ProtocolFactory { } if (!freedvEnabled) { if (recordingEnabled) { - proto = new Recorder(proto, codec2ModeId); + proto = new Recorder(proto, sharedPreferences); } - proto = new AudioFrameAggregator(proto, codec2ModeId); - proto = new AudioCodec2(proto, codec2ModeId); + proto = new AudioFrameAggregator(proto, sharedPreferences); + proto = new AudioCodec2(proto, sharedPreferences); } if (aprsEnabled) { diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Recorder.java b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Recorder.java index 737a247..36fffc8 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Recorder.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Recorder.java @@ -1,12 +1,16 @@ package com.radio.codec2talkie.protocol; import android.content.Context; +import android.content.SharedPreferences; import android.text.TextUtils; import android.util.Log; import com.radio.codec2talkie.MainActivity; +import com.radio.codec2talkie.R; import com.radio.codec2talkie.protocol.message.TextMessage; import com.radio.codec2talkie.protocol.position.Position; +import com.radio.codec2talkie.settings.PreferenceKeys; +import com.radio.codec2talkie.tools.AudioTools; import com.radio.codec2talkie.tools.StorageTools; import com.radio.codec2talkie.transport.Transport; @@ -31,16 +35,17 @@ public class Recorder implements Protocol { private Timer _fileRotationTimer; final Protocol _childProtocol; - final int _codec2ModeId; + int _codec2ModeId; private String _prevSrcCallsign; private String _prevDstCallsign; + private final SharedPreferences _sharedPreferences; private ProtocolCallback _parentProtocolCallback; - public Recorder(Protocol childProtocol, int codec2ModeId) { + public Recorder(Protocol childProtocol, SharedPreferences sharedPreferences) { _childProtocol = childProtocol; - _codec2ModeId = codec2ModeId; + _sharedPreferences = sharedPreferences; _prevSrcCallsign = null; _prevDstCallsign = null; @@ -51,6 +56,9 @@ public class Recorder implements Protocol { _parentProtocolCallback = protocolCallback; _storage = StorageTools.getStorage(context); _childProtocol.initialize(transport, context, _protocolCallback); + + String codec2ModeName = _sharedPreferences.getString(PreferenceKeys.CODEC2_MODE, context.getResources().getStringArray(R.array.codec2_modes)[0]); + _codec2ModeId = AudioTools.extractCodec2ModeId(codec2ModeName); } @Override