master
sh123 2023-12-09 21:07:39 +02:00
rodzic 800af35e8f
commit 4b8321e425
3 zmienionych plików z 11 dodań i 7 usunięć

Wyświetl plik

@ -2,6 +2,7 @@ package com.radio.codec2talkie.protocol;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
@ -9,6 +10,7 @@ import androidx.preference.PreferenceManager;
import com.radio.codec2talkie.protocol.message.TextMessage; import com.radio.codec2talkie.protocol.message.TextMessage;
import com.radio.codec2talkie.protocol.position.Position; import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.settings.PreferenceKeys; import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.tools.DebugTools;
import com.radio.codec2talkie.transport.Transport; import com.radio.codec2talkie.transport.Transport;
import com.radio.opus.Opus; import com.radio.opus.Opus;
@ -24,7 +26,7 @@ public class AudioOpus implements Protocol {
private int _pcmFrameSize; private int _pcmFrameSize;
private char[] _recordAudioEncodedBuffer; private byte[] _recordAudioEncodedBuffer;
private short[] _playbackAudioBuffer; private short[] _playbackAudioBuffer;
private ProtocolCallback _parentProtocolCallback; private ProtocolCallback _parentProtocolCallback;
@ -51,7 +53,7 @@ public class AudioOpus implements Protocol {
_audioBufferSize = 10*_pcmFrameSize; _audioBufferSize = 10*_pcmFrameSize;
_playbackAudioBuffer = new short[_audioBufferSize]; _playbackAudioBuffer = new short[_audioBufferSize];
_recordAudioEncodedBuffer = new char[superFrameSize]; _recordAudioEncodedBuffer = new byte[superFrameSize];
_opusCon = Opus.create(SAMPLE_RATE, 1, Opus.OPUS_APPLICATION_VOIP, bitRate, complexity); _opusCon = Opus.create(SAMPLE_RATE, 1, Opus.OPUS_APPLICATION_VOIP, bitRate, complexity);
if (_opusCon == 0) { if (_opusCon == 0) {
@ -78,6 +80,7 @@ public class AudioOpus implements Protocol {
@Override @Override
public void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException { public void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException {
_parentProtocolCallback.onTransmitPcmAudio(src, dst, pcmFrame); _parentProtocolCallback.onTransmitPcmAudio(src, dst, pcmFrame);
Log.v(TAG, DebugTools.shortsToHex(pcmFrame));
int encodedBytesCnt = Opus.encode(_opusCon, pcmFrame, _pcmFrameSize, _recordAudioEncodedBuffer); int encodedBytesCnt = Opus.encode(_opusCon, pcmFrame, _pcmFrameSize, _recordAudioEncodedBuffer);
if (encodedBytesCnt == 0) { if (encodedBytesCnt == 0) {
Log.w(TAG, "Nothing was encoded"); Log.w(TAG, "Nothing was encoded");
@ -128,6 +131,7 @@ public class AudioOpus implements Protocol {
short [] decodedSamples = new short[decodedSamplesCnt]; short [] decodedSamples = new short[decodedSamplesCnt];
if (decodedSamplesCnt > 0) { if (decodedSamplesCnt > 0) {
System.arraycopy(_playbackAudioBuffer, 0, decodedSamples, 0, decodedSamplesCnt); System.arraycopy(_playbackAudioBuffer, 0, decodedSamples, 0, decodedSamplesCnt);
Log.v(TAG, DebugTools.shortsToHex(decodedSamples));
} else { } else {
Log.e(TAG, "Decode error: " + decodedSamplesCnt); Log.e(TAG, "Decode error: " + decodedSamplesCnt);
_parentProtocolCallback.onProtocolRxError(); _parentProtocolCallback.onProtocolRxError();

Wyświetl plik

@ -75,7 +75,7 @@ namespace Java_com_radio_opus_Opus {
return samples; return samples;
} }
static jint encode(JNIEnv *env, jclass clazz, jlong n, jshortArray in, jint frames, jcharArray out) static jint encode(JNIEnv *env, jclass clazz, jlong n, jshortArray in, jint frames, jbyteArray out)
{ {
Context *con = getContext(n); Context *con = getContext(n);
OpusEncoder *encoder = con->encoder; OpusEncoder *encoder = con->encoder;
@ -83,12 +83,12 @@ namespace Java_com_radio_opus_Opus {
jint outputArraySize = env->GetArrayLength(out); jint outputArraySize = env->GetArrayLength(out);
jshort* audioSignal = env->GetShortArrayElements(in, 0); jshort* audioSignal = env->GetShortArrayElements(in, 0);
jchar* encodedSignal = env->GetCharArrayElements(out, 0); jbyte* encodedSignal = env->GetByteArrayElements(out, 0);
int dataArraySize = opus_encode(encoder, audioSignal, frames, (unsigned char *)encodedSignal, outputArraySize); int dataArraySize = opus_encode(encoder, audioSignal, frames, (unsigned char *)encodedSignal, outputArraySize);
env->ReleaseShortArrayElements(in, audioSignal, JNI_ABORT); env->ReleaseShortArrayElements(in, audioSignal, JNI_ABORT);
env->ReleaseCharArrayElements(out, encodedSignal, 0); env->ReleaseByteArrayElements(out, encodedSignal, 0);
return dataArraySize; return dataArraySize;
} }
@ -97,7 +97,7 @@ namespace Java_com_radio_opus_Opus {
{"create", "(IIIII)J", (void *) create }, {"create", "(IIIII)J", (void *) create },
{"destroy", "(J)I", (void *) destroy }, {"destroy", "(J)I", (void *) destroy },
{"decode", "(J[B[SI)I", (void *) decode }, {"decode", "(J[B[SI)I", (void *) decode },
{"encode", "(J[SI[C)I", (void *) encode } {"encode", "(J[SI[B)I", (void *) encode }
}; };
} }

Wyświetl plik

@ -40,5 +40,5 @@ public class Opus {
public native static int destroy(long con); public native static int destroy(long con);
public native static int decode(long con, byte[] in, short[] out, int frames); public native static int decode(long con, byte[] in, short[] out, int frames);
public native static int encode(long con, short[] in, int frames, char[] out); public native static int encode(long con, short[] in, int frames, byte[] out);
} }