diff options
Diffstat (limited to 'src/main/java/com/morlunk')
5 files changed, 21 insertions, 26 deletions
diff --git a/src/main/java/com/morlunk/jumble/audio/AudioInput.java b/src/main/java/com/morlunk/jumble/audio/AudioInput.java index 8991f6d..5c55892 100644 --- a/src/main/java/com/morlunk/jumble/audio/AudioInput.java +++ b/src/main/java/com/morlunk/jumble/audio/AudioInput.java @@ -58,8 +58,6 @@ public class AudioInput extends ProtocolHandler implements Runnable { public void onTalkStateChanged(boolean talking); - // Debug methods - /** * Called after a frame is passed into the speex preprocessor. * @param prob The probability of speech, from 0 to 1. diff --git a/src/main/java/com/morlunk/jumble/audio/AudioOutputSpeech.java b/src/main/java/com/morlunk/jumble/audio/AudioOutputSpeech.java index e98daf5..95f086e 100644 --- a/src/main/java/com/morlunk/jumble/audio/AudioOutputSpeech.java +++ b/src/main/java/com/morlunk/jumble/audio/AudioOutputSpeech.java @@ -29,6 +29,7 @@ import com.morlunk.jumble.model.User; import com.morlunk.jumble.net.JumbleUDPMessageType; import com.morlunk.jumble.net.PacketDataStream; +import java.util.Arrays; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; @@ -54,7 +55,7 @@ public class AudioOutputSpeech { private float[] mBuffer; private float[] mFadeOut; private float[] mFadeIn; - private Queue<BytePointer> mFrames = new ConcurrentLinkedQueue<BytePointer>(); + private Queue<byte[]> mFrames = new ConcurrentLinkedQueue<byte[]>(); private int mMissCount = 0; private float mAverageAvailable = 0; private boolean mHasTerminator = false; @@ -151,8 +152,7 @@ public class AudioOutputSpeech { if(mBufferFilled >= num) return mLastAlive; - FloatPointer out = new FloatPointer(mAudioBufferSize); - out.fill(0); + float[] out = new float[mAudioBufferSize]; boolean nextAlive = mLastAlive; while(mBufferFilled < num) { @@ -160,7 +160,7 @@ public class AudioOutputSpeech { resizeBuffer(mBufferFilled + mAudioBufferSize); if(!mLastAlive) - out.fill(0); + Arrays.fill(out, 0); else { IntPointer avail = new IntPointer(1); avail.put(0); @@ -207,14 +207,14 @@ public class AudioOutputSpeech { int size = (int) (header & ((1 << 13) - 1)); mHasTerminator = (header & (1 << 13)) > 0; - BytePointer audioData = new BytePointer(pds.dataBlock(size)); + byte[] audioData = pds.dataBlock(size); mFrames.add(audioData); } else { int header; do { header = pds.next() & 0xFF; if(header > 0) - mFrames.add(new BytePointer(pds.dataBlock(header & 0x7f))); + mFrames.add(pds.dataBlock(header & 0x7f)); else mHasTerminator = true; } while ((header & 0x80) > 0 && pds.isValid()); @@ -238,23 +238,23 @@ public class AudioOutputSpeech { } if(!mFrames.isEmpty()) { - BytePointer data = mFrames.poll(); + byte[] data = mFrames.poll(); if(mCodec == JumbleUDPMessageType.UDPVoiceCELTAlpha) { CELT7.celt_decode_float(mCELTAlphaDecoder, data, - data.capacity(), + data.length, out); } else if(mCodec == JumbleUDPMessageType.UDPVoiceCELTBeta) { CELT11.celt_decode_float(mCELTBetaDecoder, data, - data.capacity(), + data.length, out, Audio.FRAME_SIZE); } else if(mCodec == JumbleUDPMessageType.UDPVoiceOpus) { decodedSamples = Opus.opus_decode_float(mOpusDecoder, data, - data.capacity(), + data.length, out, mAudioBufferSize, 0); @@ -266,12 +266,9 @@ public class AudioOutputSpeech { // Speex.speex_decode(mSpeexDecoder, mSpeexBits, out); // } for(int i = 0; i < Audio.FRAME_SIZE; i++) - out.put(i, out.get(i) * (1.0f / 32767.f)); + out[i] *= (1.0f / 32767.f); } - data.deallocate(); - - if(mFrames.isEmpty()) synchronized (mJitterBuffer) { mJitterBuffer.updateDelay(null, new IntPointer(1)); @@ -295,11 +292,11 @@ public class AudioOutputSpeech { if (!nextAlive) { for (int i = 0; i < Audio.FRAME_SIZE; i++) { - out.put(i, out.get(i) * mFadeOut[i]); + out[i] *= mFadeOut[i]; } } else if (ts == 0) { for (int i = 0; i < Audio.FRAME_SIZE; i++) { - out.put(i, out.get(i) * mFadeIn[i]); + out[i] *= mFadeIn[i]; } } @@ -309,7 +306,7 @@ public class AudioOutputSpeech { } } - out.get(mBuffer, mBufferFilled, decodedSamples); + System.arraycopy(out, 0, mBuffer, mBufferFilled, decodedSamples); mBufferFilled += decodedSamples; } diff --git a/src/main/java/com/morlunk/jumble/audio/javacpp/CELT11.java b/src/main/java/com/morlunk/jumble/audio/javacpp/CELT11.java index 66dd219..f2c7cf7 100644 --- a/src/main/java/com/morlunk/jumble/audio/javacpp/CELT11.java +++ b/src/main/java/com/morlunk/jumble/audio/javacpp/CELT11.java @@ -43,8 +43,8 @@ public class CELT11 { public static native void celt_mode_destroy(@Cast("CELTMode*") Pointer mode); public static native @NoDeallocator Pointer celt_decoder_create(int sampleRate, int channels, IntPointer error); - public static native int celt_decode(@Cast("CELTDecoder*") Pointer st, @Cast("const unsigned char*") BytePointer data, int len, ShortPointer pcm, int frameSize); - public static native int celt_decode_float(@Cast("CELTDecoder*") Pointer st, @Cast("const unsigned char*") BytePointer data, int len, FloatPointer pcm, int frameSize); + public static native int celt_decode(@Cast("CELTDecoder*") Pointer st, @Cast("const unsigned char*") byte[] data, int len, short[] pcm, int frameSize); + public static native int celt_decode_float(@Cast("CELTDecoder*") Pointer st, @Cast("const unsigned char*") byte[] data, int len, float[] pcm, int frameSize); public static native int celt_decoder_ctl(@Cast("CELTDecoder*") Pointer st, int request, Pointer val); public static native void celt_decoder_destroy(@Cast("CELTDecoder*") Pointer st); diff --git a/src/main/java/com/morlunk/jumble/audio/javacpp/CELT7.java b/src/main/java/com/morlunk/jumble/audio/javacpp/CELT7.java index dd5b737..e180db4 100644 --- a/src/main/java/com/morlunk/jumble/audio/javacpp/CELT7.java +++ b/src/main/java/com/morlunk/jumble/audio/javacpp/CELT7.java @@ -43,8 +43,8 @@ public class CELT7 { public static native void celt_mode_destroy(@Cast("CELTMode*") Pointer mode); public static native @NoDeallocator Pointer celt_decoder_create(@Cast("CELTMode*") Pointer mode, int channels, IntPointer error); - public static native int celt_decode(@Cast("CELTDecoder*") Pointer st, @Cast("const unsigned char*") BytePointer data, int len, ShortPointer pcm); - public static native int celt_decode_float(@Cast("CELTDecoder*") Pointer st, @Cast("const unsigned char*") BytePointer data, int len, FloatPointer pcm); + public static native int celt_decode(@Cast("CELTDecoder*") Pointer st, @Cast("const unsigned char*") byte[] data, int len, short[] pcm); + public static native int celt_decode_float(@Cast("CELTDecoder*") Pointer st, @Cast("const unsigned char*") byte[] data, int len, float[] pcm); public static native int celt_decoder_ctl(@Cast("CELTDecoder*") Pointer st, int request, Pointer val); public static native void celt_decoder_destroy(@Cast("CELTDecoder*") Pointer st); diff --git a/src/main/java/com/morlunk/jumble/audio/javacpp/Opus.java b/src/main/java/com/morlunk/jumble/audio/javacpp/Opus.java index 962a2f5..df06fb8 100644 --- a/src/main/java/com/morlunk/jumble/audio/javacpp/Opus.java +++ b/src/main/java/com/morlunk/jumble/audio/javacpp/Opus.java @@ -46,8 +46,8 @@ public class Opus { public static native int opus_decoder_get_size(int channels); public static native @NoDeallocator Pointer opus_decoder_create(int fs, int channels, IntPointer error); public static native int opus_decoder_init(@Cast("OpusDecoder*") Pointer st, int fs, int channels); - public static native int opus_decode(@Cast("OpusDecoder*") Pointer st, @Cast("const unsigned char*") BytePointer data, int len, ShortPointer out, int frameSize, int decodeFec); - public static native int opus_decode_float(@Cast("OpusDecoder*") Pointer st, @Cast("const unsigned char*") BytePointer data, int len, FloatPointer out, int frameSize, int decodeFec); + public static native int opus_decode(@Cast("OpusDecoder*") Pointer st, @Cast("const unsigned char*") byte[] data, int len, short[] out, int frameSize, int decodeFec); + public static native int opus_decode_float(@Cast("OpusDecoder*") Pointer st, @Cast("const unsigned char*") byte[] data, int len, float[] out, int frameSize, int decodeFec); //public static native int opus_decoder_ctl(@Cast("OpusDecoder*") Pointer st, int request); public static native void opus_decoder_destroy(@Cast("OpusDecoder*") Pointer st); //public static native int opus_packet_parse(@Cast("const unsigned char*") BytePointer data, int len, ... @@ -62,7 +62,7 @@ public class Opus { public static native @NoDeallocator Pointer opus_encoder_create(int fs, int channels, int application, IntPointer error); public static native int opus_encoder_init(@Cast("OpusEncoder*") Pointer st, int fs, int channels, int application); public static native int opus_encode(@Cast("OpusEncoder*") Pointer st, @Cast("const short*") short[] pcm, int frameSize, @Cast("unsigned char*") byte[] data, int maxDataBytes); - public static native int opus_encode_float(@Cast("OpusEncoder*") Pointer st, @Cast("const float*") FloatPointer pcm, int frameSize, @Cast("unsigned char*") BytePointer data, int maxDataBytes); + public static native int opus_encode_float(@Cast("OpusEncoder*") Pointer st, @Cast("const float*") float[] pcm, int frameSize, @Cast("unsigned char*") byte[] data, int maxDataBytes); public static native void opus_encoder_destroy(@Cast("OpusEncoder*") Pointer st); public static native int opus_encoder_ctl(@Cast("OpusEncoder*") Pointer st, int request, Pointer value); } |