diff --git a/android/.classpath b/android/.classpath index a4763d1eec..bb0c759770 100644 --- a/android/.classpath +++ b/android/.classpath @@ -4,5 +4,6 @@ + diff --git a/android/app-android.cpp b/android/app-android.cpp index 2a9314899a..2d9a7dc322 100644 --- a/android/app-android.cpp +++ b/android/app-android.cpp @@ -294,7 +294,7 @@ extern "C" void Java_com_henrikrydgard_libnative_NativeRenderer_displayRender(JN } } -extern "C" void Java_com_henrikrydgard_libnative_NativeApp_audioRender(JNIEnv* env, jclass clazz, jshortArray array) { +extern "C" jint Java_com_henrikrydgard_libnative_NativeApp_audioRender(JNIEnv* env, jclass clazz, jshortArray array) { // Too spammy // ILOG("NativeApp.audioRender"); @@ -305,9 +305,16 @@ extern "C" void Java_com_henrikrydgard_libnative_NativeApp_audioRender(JNIEnv* e if (buf_size) { short *data = env->GetShortArrayElements(array, 0); int samples = buf_size / 2; - NativeMix(data, samples); - env->ReleaseShortArrayElements(array, data, 0); + samples = NativeMix(data, samples); + if (samples != 0) { + env->ReleaseShortArrayElements(array, data, 0); + return samples * 2; + } else { + env->ReleaseShortArrayElements(array, data, JNI_ABORT); + return 0; + } } + return 0; } extern "C" void JNICALL Java_com_henrikrydgard_libnative_NativeApp_touch diff --git a/android/src/com/henrikrydgard/libnative/NativeApp.java b/android/src/com/henrikrydgard/libnative/NativeApp.java index 4e02203621..79fa414ff5 100644 --- a/android/src/com/henrikrydgard/libnative/NativeApp.java +++ b/android/src/com/henrikrydgard/libnative/NativeApp.java @@ -21,7 +21,7 @@ public class NativeApp { public static native void joystickEvent(float x, float y); // will only be called between init() and shutdown() - public static native void audioRender(short[] buffer); + public static native int audioRender(short[] buffer); // Sensor/input data. These are asynchronous, beware! public static native void touch(float x, float y, int data, int pointerId); diff --git a/android/src/com/henrikrydgard/libnative/NativeAudioPlayer.java b/android/src/com/henrikrydgard/libnative/NativeAudioPlayer.java index d6fd249407..4b1c7a2fd7 100644 --- a/android/src/com/henrikrydgard/libnative/NativeAudioPlayer.java +++ b/android/src/com/henrikrydgard/libnative/NativeAudioPlayer.java @@ -81,8 +81,11 @@ public class NativeAudioPlayer { audioTrack.play(); Log.i(TAG, "Playing... minBuffersize = " + buffer_size); while (playing_) { - NativeApp.audioRender(buffer); - audioTrack.write(buffer, 0, buffer_size); + int validShorts = NativeApp.audioRender(buffer); + if (validShorts != 0) { + audioTrack.write(buffer, 0, validShorts); + } + Thread.yield(); } audioTrack.stop(); audioTrack.release();