From 89a99203733effe0a10e4e8df54dd8c6b42e52eb Mon Sep 17 00:00:00 2001 From: sh123 Date: Sun, 31 Jul 2022 18:50:30 +0300 Subject: [PATCH] Debugging --- .../radio/codec2talkie/tools/DebugTools.java | 18 ++++++++++++++++++ .../codec2talkie/transport/SoundModem.java | 9 ++++++++- libcodec2-android/src/main/cpp/Codec2JNI.cpp | 2 -- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/tools/DebugTools.java b/codec2talkie/src/main/java/com/radio/codec2talkie/tools/DebugTools.java index da719bf..c25589b 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/tools/DebugTools.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/tools/DebugTools.java @@ -15,6 +15,24 @@ public class DebugTools { return new String(hexChars); } + public static String shortsToHex(short[] shorts) { + StringBuilder s = new StringBuilder(); + for (short aShort : shorts) { + s.append(String.format("%04x ", aShort)); + } + return s.toString(); + } + + public static String byteBitsToString(byte[] bytesAsBits) { + StringBuilder s = new StringBuilder(); + for (int i = 0; i < bytesAsBits.length; i++) { + s.append(bytesAsBits[i]); + if (i % 8 == 7) s.append(' '); + else if (i % 4 == 3) s.append(':'); + } + return s.toString(); + } + public static boolean isPrintableAscii(byte value) { return (value >= 32 ) && (value < 127); 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 a91bacd..428695c 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/transport/SoundModem.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/transport/SoundModem.java @@ -7,11 +7,13 @@ import android.media.AudioFormat; import android.media.AudioRecord; import android.media.AudioTrack; import android.media.MediaRecorder; +import android.util.Log; import androidx.preference.PreferenceManager; import com.radio.codec2talkie.settings.PreferenceKeys; import com.radio.codec2talkie.tools.BitTools; +import com.radio.codec2talkie.tools.DebugTools; import com.ustadmobile.codec2.Codec2; import java.io.IOException; @@ -21,7 +23,8 @@ public class SoundModem implements Transport { private static final String TAG = SoundModem.class.getSimpleName(); - private static final int AUDIO_SAMPLE_SIZE = 48000; + // NOTE, codec2 library requires that sample_rate % bit_rate == 0 + public static final int AUDIO_SAMPLE_SIZE = 24000; private final String _name; @@ -108,12 +111,16 @@ public class SoundModem implements Transport { @Override public int write(byte[] srcDataBytesAsBits) throws IOException { + //Log.i(TAG, DebugTools.byteBitsToString(srcDataBytesAsBits)); byte[] dataBytesAsBits = BitTools.convertToNRZI(srcDataBytesAsBits); + //Log.i(TAG, DebugTools.byteBitsToString(dataBytesAsBits)); int j = 0; for (int i = 0; i < dataBytesAsBits.length; i++, j++) { if (j >= _playbackBitBuffer.length) { + //Log.i(TAG, DebugTools.byteBitsToString(_playbackBitBuffer)); Codec2.fskModulate(_fskModem, _playbackAudioBuffer, _playbackBitBuffer); + //Log.i(TAG, DebugTools.shortsToHex(_playbackAudioBuffer)); _systemAudioPlayer.write(_playbackAudioBuffer, 0, _playbackAudioBuffer.length); _systemAudioPlayer.play(); j = 0; diff --git a/libcodec2-android/src/main/cpp/Codec2JNI.cpp b/libcodec2-android/src/main/cpp/Codec2JNI.cpp index 8facc51..ee9be26 100644 --- a/libcodec2-android/src/main/cpp/Codec2JNI.cpp +++ b/libcodec2-android/src/main/cpp/Codec2JNI.cpp @@ -163,9 +163,7 @@ namespace Java_com_ustadmobile_codec2_Codec2 { conFsk->modBits[i] = v; } env->ReleaseByteArrayElements(inputBits, jbuf, 0); - fsk_mod(conFsk->fsk, conFsk->modBuf, conFsk->modBits, inputBitsSize); - jshort *jOutBuf = env->GetShortArrayElements(outputSamples, nullptr); for (int i = 0; i < conFsk->N; i++) { jOutBuf[i] = (int16_t)(conFsk->modBuf[i] * FDMDV_SCALE);