Giter Site home page Giter Site logo

jumble's Introduction

Jumble

An Android service implementation of the Mumble protocol, designed as the backend of Plumble.

About

The primary goal of the Jumble project is to encourage developers to embrace the Mumble protocol on Android through a free, complete, and stable implementation. At the moment, development is focused on improving stability and security.

Prior to the release of Jumble, all implementations of the Mumble protocol on Android have been using the same non-free code developed by @pcgod. To ensure the unencumbered use of Jumble, no sources or derivatives will be copied from that project.

Projects using Jumble

Plumble 3.0+

Including in your project

Jumble is a standard Android library project using the gradle build system. See here for instructions on how to include it into your gradle project.

Currently, there is no tutorial to integrate Jumble with your project. In the mean time, please examine the exposed interface IJumbleService as well as Plumble's implementation.

License

Jumble is now licensed under the GNU GPL v3+. See LICENSE.

If you wish to incorporate Jumble into your proprietary project, please email me to discuss licensing.

jumble's People

Contributors

acomminos avatar buddybutterfly avatar k3d3 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jumble's Issues

jnicelt11 won't load

I'm making an app integrating Jumble, and connecting to my server is now working, but now I get this:

    java.lang.UnsatisfiedLinkError: Couldn't load jnicelt11 from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/sh.weme.wemesh.debug-123.apk", zip file "/data/data/sh.weme.wemesh.debug/code_cache/secondary-dexes/sh.weme.wemesh.debug-123.apk.classes2.zip"],nativeLibraryDirectories=[/data/app-lib/sh.weme.wemesh.debug-123, /vendor/lib, /system/lib]]]: findLibrary returned null

Audio really quiet

When other users talk to me, I can hear them, but they're really quiet

Connect to more than one server at a time with Jumble

Is it possible to use Jumble to connect to two or more servers simultaneously? I'm considering making a voice bridge that would benefit from being able to do that.

If not, can you advise which areas of the code would need to be modified to allow such a configuration please?

Remove AIDL support

It isn't very likely that proper multi-{threading,process} support will ever be introduced in Jumble, making our use of AIDL a crutch. It makes sense to continue the development of Jumble as a library that may have an external interface exposed by client implementations, such as Plumble's IPC.

NDK build celt-0.11.0 catch Error

hi:
When I download celt-0.11.0 code ,build Jumble in Abdrid Studio v2.3 , I found error, anyone know what cause?
Thanks!

:libraries:Jumble:ndkBuild
Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-14.
Android NDK: WARNING: APP_PLATFORM android-14 is higher than android:minSdkVersion 1 i
n /work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/AndroidManifest.xml. NDK binaries will not be comptible with devices older than android-14. See https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md for more information.
make: Entering directory `/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni'
[armeabi-v7a] Compile thumb : jnicelt11 <= bands.c

In file included from /work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/bands.c:41:
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/mathops.h:155:49: warning: operator '<<' has lower precedence than '-'; '-' will be evaluated first [-Wshift-op-parentheses]
static const celt_word16 C[5] = {-6801+(1<<13-DB_SHIFT), 15746, -5217, 2545, -1401};
~~~~^~~~~~~~~
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/mathops.h:155:49: note: place parentheses around the '-' expression to silence this warning
static const celt_word16 C[5] = {-6801+(1<<13-DB_SHIFT), 15746, -5217, 2545, -1401};
~~^~~~~~~~~
。。。。。

/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/mathops.h:155:49: note: place parentheses around the '-' expression to silence this warning
static const celt_word16 C[5] = {-6801+(1<<13-DB_SHIFT), 15746, -5217, 2545, -1401};
~~^~~~~~~~~
1 warning generated.

[armeabi-v7a] Compile thumb : jnicelt11 <= plc.c

In file included from /work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/plc.c:34:
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/mathops.h:155:49: warning: operator '<<' has lower precedence than '-'; '-' will be evaluated first [-Wshift-op-parentheses]
static const celt_word16 C[5] = {-6801+(1<<13-DB_SHIFT), 15746, -5217, 2545, -1401};
~~~~^~~~~~~~~
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/mathops.h:155:49: note: place parentheses around the '-' expression to silence this warning
static const celt_word16 C[5] = {-6801+(1<<13-DB_SHIFT), 15746, -5217, 2545, -1401};
~~^~~~~~~~~
1 warning generated.

[armeabi-v7a] Compile thumb : jnicelt11 <= quant_bands.c

In file included from /work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/quant_bands.c:33:
In file included from /work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/quant_bands.h:36:
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/mathops.h:155:49: warning: operator '<<' has lower precedence than '-'; '-' will be evaluated first [-Wshift-op-parentheses]
static const celt_word16 C[5] = {-6801+(1<<13-DB_SHIFT), 15746, -5217, 2545, -1401};
~~~~^~~~~~~~~
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/mathops.h:155:49: note: place parentheses around the '-' expression to silence this warning
static const celt_word16 C[5] = {-6801+(1<<13-DB_SHIFT), 15746, -5217, 2545, -1401};
~~^~~~~~~~~
1 warning generated.

[armeabi-v7a] Compile thumb : jnicelt11 <= rate.c

/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/rate.c:498:44: warning: operator '>>' has lower precedence than '+'; '+' will be evaluated first [-Wshift-op-parentheses]
extra_fine = IMIN(excess >> stereo+BITRES, MAX_FINE_BITS-ebits[j]);
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/arch.h:68:21: note: expanded from macro 'IMIN'
#define IMIN(a,b) ((a) < (b) ? (a) : (b)) /< Minimum int value. */
^
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/rate.c:498:44: note: place parentheses around the '+' expression to silence this warning
extra_fine = IMIN(excess >> stereo+BITRES, MAX_FINE_BITS-ebits[j]);
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/arch.h:68:21: note: expanded from macro 'IMIN'
#define IMIN(a,b) ((a) < (b) ? (a) : (b)) /
< Minimum int value. */
^
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/rate.c:498:44: warning: operator '>>' has lower precedence than '+'; '+' will be evaluated first [-Wshift-op-parentheses]
extra_fine = IMIN(excess >> stereo+BITRES, MAX_FINE_BITS-ebits[j]);
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/arch.h:68:33: note: expanded from macro 'IMIN'
#define IMIN(a,b) ((a) < (b) ? (a) : (b)) /< Minimum int value. */
^
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/rate.c:498:44: note: place parentheses around the '+' expression to silence this warning
extra_fine = IMIN(excess >> stereo+BITRES, MAX_FINE_BITS-ebits[j]);
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/arch.h:68:33: note: expanded from macro 'IMIN'
#define IMIN(a,b) ((a) < (b) ? (a) : (b)) /
< Minimum int value. */
^
2 warnings generated.

[armeabi-v7a] Compile thumb : jnicelt11 <= vq.c

In file included from /work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/vq.c:33:
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/mathops.h:155:49: warning: operator '<<' has lower precedence than '-'; '-' will be evaluated first [-Wshift-op-parentheses]
static const celt_word16 C[5] = {-6801+(1<<13-DB_SHIFT), 15746, -5217, 2545, -1401};
~~~~^~~~~~~~~
/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/celt-0.11.0-src/libcelt/mathops.h:155:49: note: place parentheses around the '-' expression to silence this warning
static const celt_word16 C[5] = {-6801+(1<<13-DB_SHIFT), 15746, -5217, 2545, -1401};
~~^~~~~~~~~
1 warning generated.

[armeabi-v7a] Compile++ thumb: jnicelt11 <= jnicelt11.cpp

/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/jnicelt11.cpp:1047:22: error: use of undeclared identifier 'celt_mode_info'
int rvalue = celt_mode_info((const CELTMode*)ptr0, arg1, ptr2);
^
1 error generated.
make: *** [/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/obj/local/armeabi-v7a/objs/jnicelt11//work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni/jnicelt11.o] Error 1

make: Leaving directory `/work_studio/mumbleServer/Plumble-android/libraries/Jumble/src/main/jni'
:libraries:Jumble:ndkBuild FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':libraries:Jumble:ndkBuild'.

Process 'command '/Users/huanghuorong3/Library/Android/sdk/ndk-bundle/ndk-build'' finished with non-zero exit value 2

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

How to ignore SSL error?

I am trying to connect to a server with a self-signed certificate, and I just want to ignore the ssl handshake failure -- how can I do that?

Add ability to reconnect to the current channel

This'd make transitioning between WiFi and 4G when using Plumble less painful.

Could probably do something like

            try {
                IChannel currChannel = mBinder.getSessionChannel();
                if (currChannel != null)
                    mReconnectChannel = currChannel.getId();
            } catch (RemoteException e) {}}

in setReconnecting() and then rejoin that channel in connect(), but I'm not that clear on how state should be managed between connection attempts, so I haven't been able to get it to work.

Duped messages due to multiple addTCPMessageHandlers(mModelHandler) calls

JumbleConnection.addTCPMessageHandlers(mModelHandler) gets called in both JumbleService.connect() and JumbleService.connectionSynchronized(), putting JumbleService.mModelHandler in JumbleConnection.mTCPHandlers twice, and causing the handler to be called twice for every message.

The easiest way to repro this is with text messages in Plumble master. For each one you receive, you'll have two in the chat view.

If the handler needs to be added in both places, checking if a handler is in JumbleConnection.mTCPHandlers before actually adding it in JumbleConnection.addTCPMessageHandlers() might work.

Build issue

Hello,
I have a problem with build. When I want to build Jumble with NDK I got this issues:

Jumble/src/main/jni/celt-0.7.0-src/libcelt/celt.c:660: error: undefined reference to 'find_spectral_pitch' Jumble/src/main/jni/celt-0.7.0-src/libcelt/celt.c:1250: error: undefined reference to 'find_spectral_pitch' Jumble/src/main/jni/celt-0.7.0-src/libcelt/modes.c:379: error: undefined reference to 'pitch_state_alloc' Jumble/src/main/jni/celt-0.7.0-src/libcelt/modes.c:451: error: undefined reference to 'pitch_state_free'
I downloaded celt from http://www.celt-codec.org/downloads/.

thanks

Question: Whisper Target Limit

A couple of clarifications:

Is the whisper target limit per server or per user? Do all users share the same set of whisper targets on one server, or is the limit just a matter of the number of targets that one user can transmit to at once.

Secondly, how quickly can the registered targets be changed? Is it fast enough that one can expect to reconfigure the registered targets before each transmission?

Thank you

Change target on voicedata msg

Hi,

I'm trying to change the target on voice data message but I can't find where tho.
What I want to do is create another push to talk button that will target another registered voicetargetId instead of the default 0 (Normal talking). Is there a way to do it? If not, Could you give me a hint of where in the code I can change it?

Sorry if it's a dumb question. I already tried to find on my own but I'm still an android beginner.

Thank you a lot, you have done a great work so far!

EDIT:

Sorry I posted the question in the wrong spot.

Start versioning

I'd like to start versioning Jumble for API stability once AIDL is killed (#14).

Lint issues prevent gradle from building

../../libs/sc-morlunk-prov-1.51.0.0.jar: Invalid package reference in library; not included in Android: javax.naming.directory. Referenced from org.spongycastle.jce.provider.X509LDAPCertStoreSpi.
../../libs/sc-morlunk-prov-1.51.0.0.jar: Invalid package reference in library; not included in Android: javax.naming. Referenced from org.spongycastle.jce.provider.X509LDAPCertStoreSpi.

as well as "incomplete translation"

Audio recording and permissions in Marshmallow

Users must explicitly give their permission inside the application to use the microphone in Android 6.0 and later. And these permission checks should happen as late as possible so the user can understand the purpose. However, these use-cases are not handled in the library.

Specifically:

  • User hasn't used the microphone yet (push-to-send mode)
  • User has disabled the microphone permission in System settings

Right now Jumble will simply fail with an exception. No input or output audio. I did a quick test and added additional checks to the AudioHandler.java class along with an additional method to start recording later (triggered after the user has granted the permission). Seems to work. Not sure about side-effects.

private boolean canRecordAudio() {
        return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ContextCompat.checkSelfPermission(mContext, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) ? false : true;
    }

// Usage sample
if(canRecordAudio()) {
            mInput = new AudioInput(this, mAudioSource, mSampleRate);
        } else {
            mInput = null;
        }
// Additional checks later

Leak in AudioOutput.java

mDecodeExecutorService gets leaked.
need to shutdown the executor on stopPlaying in AudioOutput.java

Docs?

Are there any Documentation how to programm with this as library?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.