From 8d1cf2534f925137bbcc740d36f70a98392648f0 Mon Sep 17 00:00:00 2001 From: sh123 Date: Sun, 31 Jul 2022 14:30:51 +0300 Subject: [PATCH] Refactoring --- .../com/radio/codec2talkie/transport/SoundModem.java | 9 +++++++-- libcodec2-android/src/main/cpp/Codec2JNI.cpp | 8 +++++++- .../src/main/java/com/ustadmobile/codec2/Codec2.java | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/transport/SoundModem.java b/codec2talkie/src/main/java/com/radio/codec2talkie/transport/SoundModem.java index af90ce2..76e2c40 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/transport/SoundModem.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/transport/SoundModem.java @@ -34,6 +34,7 @@ public class SoundModem implements Transport { private final byte[] _recordBitBuffer; private final short[] _playbackAudioBuffer; private final byte[] _playbackBitBuffer; + private final int _samplesPerSymbol; private final Context _context; private final SharedPreferences _sharedPreferences; @@ -54,6 +55,7 @@ public class SoundModem implements Transport { _recordBitBuffer = new byte[Codec2.fskDemodBitsBufSize(_fskModem)]; _playbackAudioBuffer = new short[Codec2.fskModSamplesBufSize(_fskModem)]; _playbackBitBuffer = new byte[Codec2.fskModBitsBufSize(_fskModem)]; + _samplesPerSymbol = Codec2.fskSamplesPerSymbol(_fskModem); constructSystemAudioDevices(); } @@ -118,8 +120,11 @@ public class SoundModem implements Transport { } _playbackBitBuffer[j] = dataBytesAsBits[i]; } - Codec2.fskModulate(_fskModem, _playbackAudioBuffer, Arrays.copyOf(_playbackBitBuffer, j)); - int r = _systemAudioPlayer.write(_playbackAudioBuffer, 0, _playbackAudioBuffer.length); + + // process tail + byte [] bitBufferTail = Arrays.copyOf(_playbackBitBuffer, j); + Codec2.fskModulate(_fskModem, _playbackAudioBuffer, bitBufferTail); + _systemAudioPlayer.write(_playbackAudioBuffer, 0, bitBufferTail.length * _samplesPerSymbol); _systemAudioPlayer.play(); return 0; } diff --git a/libcodec2-android/src/main/cpp/Codec2JNI.cpp b/libcodec2-android/src/main/cpp/Codec2JNI.cpp index e582b78..8facc51 100644 --- a/libcodec2-android/src/main/cpp/Codec2JNI.cpp +++ b/libcodec2-android/src/main/cpp/Codec2JNI.cpp @@ -108,6 +108,11 @@ namespace Java_com_ustadmobile_codec2_Codec2 { return conFsk->Nbits; } + static jint fskSamplesPerSymbol(JNIEnv * env, jclass clazz, jlong n) { + ContextFsk *conFsk = getContextFsk(n); + return conFsk->Ts; + } + static jint destroy(JNIEnv *env, jclass clazz, jlong n) { Context *con = getContext(n); codec2_destroy(con->c2); @@ -203,7 +208,8 @@ namespace Java_com_ustadmobile_codec2_Codec2 { {"fskDemodBitsBufSize","(J)I", (void *) fskDemodBitsBufSize}, {"fskModSamplesBufSize","(J)I", (void *) fskModSamplesBufSize}, {"fskDemodSamplesBufSize","(J)I", (void *) fskDemodSamplesBufSize}, - {"fskModBitsBufSize", "(J)I", (void *) fskModBitsBufSize} + {"fskModBitsBufSize", "(J)I", (void *) fskModBitsBufSize}, + {"fskSamplesPerSymbol","(J)I", (void *) fskSamplesPerSymbol} }; } 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 ab8f4cd..9d45622 100644 --- a/libcodec2-android/src/main/java/com/ustadmobile/codec2/Codec2.java +++ b/libcodec2-android/src/main/java/com/ustadmobile/codec2/Codec2.java @@ -42,6 +42,7 @@ public class Codec2 { public native static int fskModSamplesBufSize(long conFsk); public native static int fskDemodSamplesBufSize(long conFsk); public native static int fskModBitsBufSize(long conFsk); + public native static int fskSamplesPerSymbol(long conFsk); public native static long fskModulate(long conFsk, short[] outputSamples, byte[] inputBits); public native static long fskDemodulate(long conFsk, short[] inputSamples, byte[] outputBits);