From 2fd95ea452873b8e0265785275cdde8cb30a1452 Mon Sep 17 00:00:00 2001 From: Nikita Krapivin Date: Mon, 8 Nov 2021 18:26:46 +0000 Subject: [PATCH] Update Android support once again and add a Windows NDK build script. (#1) Co-authored-by: Nikita Krapivin Reviewed-on: https://gitea.moonside.games/MoonsideGames/FAudioGMS/pulls/1 Co-authored-by: Nikita Krapivin Co-committed-by: Nikita Krapivin --- android/Android.mk | 1 + android/FAudioGMS_JNI.c | 53 ++++++++++++++++++- android/build.ndk.cmd | 8 +++ .../AndroidSource/Java/FAudioGMSBridge.java | 10 ++-- .../screwyoyo/faudiogms/FAudioGMSNative.java | 11 +++- .../libs/arm64-v8a/libFAudioGMS.so | 4 +- .../AndroidSource/libs/arm64-v8a/libSDL2.so | 4 +- .../AndroidSource/libs/arm64-v8a/libhidapi.so | 4 +- .../libs/armeabi-v7a/libFAudioGMS.so | 4 +- .../AndroidSource/libs/armeabi-v7a/libSDL2.so | 4 +- .../libs/armeabi-v7a/libhidapi.so | 4 +- .../AndroidSource/libs/x86/libFAudioGMS.so | 4 +- .../AndroidSource/libs/x86/libSDL2.so | 4 +- .../AndroidSource/libs/x86/libhidapi.so | 4 +- .../AndroidSource/libs/x86_64/libFAudioGMS.so | 4 +- .../AndroidSource/libs/x86_64/libSDL2.so | 4 +- .../AndroidSource/libs/x86_64/libhidapi.so | 4 +- 17 files changed, 99 insertions(+), 32 deletions(-) create mode 100644 android/build.ndk.cmd diff --git a/android/Android.mk b/android/Android.mk index 616df6b..a84bcf0 100644 --- a/android/Android.mk +++ b/android/Android.mk @@ -63,6 +63,7 @@ LOCAL_MODULE := FAudioGMS # Tell ndk-build we rely on these two fellas: LOCAL_SHARED_LIBRARIES := SDL2 FAudio_static LOCAL_C_INCLUDES := $(SDL_PATH)/include $(FAUDIO_PATH)/include $(FAUDIOGMS_PATH)/src +LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES) LOCAL_SRC_FILES := $(FAUDIOGMS_PATH)/src/FAudioGMS.c $(LOCAL_PATH)/FAudioGMS_JNI.c include $(BUILD_SHARED_LIBRARY) diff --git a/android/FAudioGMS_JNI.c b/android/FAudioGMS_JNI.c index d4f1d46..04737a0 100644 --- a/android/FAudioGMS_JNI.c +++ b/android/FAudioGMS_JNI.c @@ -27,6 +27,11 @@ /* These are the Native -> JNI conv wrappers, they must only be built for Android */ #ifdef __ANDROID__ +/* no mangling please */ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + #include #include @@ -103,9 +108,9 @@ Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1StreamingSound_1LoadOGG JNIEXPORT jdouble JNICALL Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SoundInstance_1Play -(JNIEnv* jniEnv, jclass jniThis, jdouble _soundInstanceID, jdouble _loop) +(JNIEnv* jniEnv, jclass jniThis, jdouble _soundInstanceID) { - FAudioGMS_SoundInstance_Play(_soundInstanceID, _loop); + FAudioGMS_SoundInstance_Play(_soundInstanceID); return NOTHING; } @@ -125,6 +130,22 @@ Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SoundInstance_1Stop return NOTHING; } +JNIEXPORT jdouble JNICALL +Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SoundInstance_1SetPlayRegion +(JNIEnv* jniEnv, jclass jniThis, jdouble _soundInstanceID, jdouble _startInMilliseconds, jdouble _endInMilliseconds) +{ + FAudioGMS_SoundInstance_SetPlayRegion(_soundInstanceID, _startInMilliseconds, _endInMilliseconds); + return NOTHING; +} + +JNIEXPORT jdouble JNICALL +Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SoundInstance_1SetLoop +(JNIEnv* jniEnv, jclass jniThis, jdouble _soundInstanceID, jdouble _loop) +{ + FAudioGMS_SoundInstance_SetLoop(_soundInstanceID, _loop); + return NOTHING; +} + JNIEXPORT jdouble JNICALL Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SoundInstance_1SetPan (JNIEnv* jniEnv, jclass jniThis, jdouble _soundInstanceID, jdouble _pan) @@ -205,6 +226,14 @@ Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SoundInstance_1SetBandPa return NOTHING; } +JNIEXPORT jdouble JNICALL +Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SoundInstance_1QueueSoundInstance +(JNIEnv* jniEnv, jclass jniThis, jdouble _soundInstanceID, jdouble _queueSoundInstanceID) +{ + FAudioGMS_SoundInstance_QueueSoundInstance(_soundInstanceID, _queueSoundInstanceID); + return NOTHING; +} + JNIEXPORT jdouble JNICALL Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SoundInstance_1GetPitch (JNIEnv* jniEnv, jclass jniThis, jdouble _soundInstanceID) @@ -327,6 +356,22 @@ Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SoundInstance_1SetEffect return NOTHING; } +JNIEXPORT jdouble JNICALL +Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SetMasteringEffectChain +(JNIEnv* jniEnv, jclass jniThis, jdouble _effectChainID, double _effectGain) +{ + FAudioGMS_SetMasteringEffectChain(_effectChainID, _effectGain); + return NOTHING; +} + +JNIEXPORT jdouble JNICALL +Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SetMasteringEffectGain +(JNIEnv* jniEnv, jclass jniThis, jdouble _effectGain) +{ + FAudioGMS_SetMasteringEffectGain(_effectGain); + return NOTHING; +} + JNIEXPORT jdouble JNICALL Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1SetListenerPosition (JNIEnv* jniEnv, jclass jniThis, jdouble _x, jdouble _y, jdouble _z) @@ -383,6 +428,10 @@ Java_org_screwyoyo_faudiogms_FAudioGMSNative_FAudioGMS_1Destroy return NOTHING; } +#ifdef __cplusplus +} +#endif /* __cplusplus */ + #endif /* __ANDROID__ */ /* Do nothing for other platforms, because they, thankly, do not require JNI bindings... */ diff --git a/android/build.ndk.cmd b/android/build.ndk.cmd new file mode 100644 index 0000000..5e297e4 --- /dev/null +++ b/android/build.ndk.cmd @@ -0,0 +1,8 @@ + +cd /d %~dp0 +mkdir buildandroid + +call ndk-build NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=Android.mk APP_ABI="armeabi-v7a arm64-v8a x86 x86_64" APP_PLATFORM=android-16 APP_MODULES="SDL2 FAudio_static FAudioGMS" NDK_OUT=buildandroid\obj NDK_LIBS_OUT=buildandroid\lib + +xcopy /e /r /y buildandroid\lib ..\gamemaker\extensions\FAudioGMS\AndroidSource\libs +rd /s /q buildandroid diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/Java/FAudioGMSBridge.java b/gamemaker/extensions/FAudioGMS/AndroidSource/Java/FAudioGMSBridge.java index 8fa5470..5a2da1b 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/Java/FAudioGMSBridge.java +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/Java/FAudioGMSBridge.java @@ -22,12 +22,14 @@ import android.content.res.AssetManager; public class FAudioGMSBridge extends FAudioGMSNative implements IExtensionBase { public SDLActivity sdl; - public boolean paused; + public boolean handlenativepause; /* automatically pause all sounds on onPause or not? */ + public boolean paused; /* are we currently paused */ public FAudioGMSBridge() { super(); - paused = false; + handlenativepause = true; /* set this to false if you wish to handle pauses manually */ + paused = false; /* this one must be false at initialization */ SDL.setContext(RunnerJNILib.GetApplicationContext()); sdl = new SDLActivity(); } @@ -62,7 +64,7 @@ public class FAudioGMSBridge extends FAudioGMSNative implements IExtensionBase public void onPause() { sdl.onPause(); - if (!paused) + if (handlenativepause && !paused) { paused = true; FAudioGMS_PauseAll(); @@ -72,7 +74,7 @@ public class FAudioGMSBridge extends FAudioGMSNative implements IExtensionBase public void onResume() { sdl.onResume(); - if (paused) + if (handlenativepause && paused) { paused = false; FAudioGMS_ResumeAll(); diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/Sdk/org.screwyoyo.faudiogms/src/main/java/org/screwyoyo/faudiogms/FAudioGMSNative.java b/gamemaker/extensions/FAudioGMS/AndroidSource/Sdk/org.screwyoyo.faudiogms/src/main/java/org/screwyoyo/faudiogms/FAudioGMSNative.java index 73578d4..bfd143f 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/Sdk/org.screwyoyo.faudiogms/src/main/java/org/screwyoyo/faudiogms/FAudioGMSNative.java +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/Sdk/org.screwyoyo.faudiogms/src/main/java/org/screwyoyo/faudiogms/FAudioGMSNative.java @@ -18,10 +18,12 @@ public class FAudioGMSNative public native double FAudioGMS_StreamingSound_LoadOGG(String filepath); - public native double FAudioGMS_SoundInstance_Play(double soundInstanceID, double loop); + public native double FAudioGMS_SoundInstance_Play(double soundInstanceID); public native double FAudioGMS_SoundInstance_Pause(double soundInstanceID); public native double FAudioGMS_SoundInstance_Stop(double soundInstanceID); + public native double FAudioGMS_SoundInstance_SetPlayRegion(double soundInstanceID, double startInMilliseconds, double endInMilliseconds); + public native double FAudioGMS_SoundInstance_SetLoop(double soundInstanceID, double loop); public native double FAudioGMS_SoundInstance_SetPan(double soundInstanceID, double pan); public native double FAudioGMS_SoundInstance_SetPitch(double soundInstanceID, double pitch); public native double FAudioGMS_SoundInstance_SetVolume(double soundInstanceID, double volume); @@ -32,7 +34,9 @@ public class FAudioGMSNative public native double FAudioGMS_SoundInstance_SetLowPassFilter(double soundInstanceID, double lowPassFilter, double Q); public native double FAudioGMS_SoundInstance_SetHighPassFilter(double soundInstanceID, double highPassFilter, double Q); public native double FAudioGMS_SoundInstance_SetBandPassFilter(double soundInstanceID, double bandPassFilter, double Q); - + + public native double FAudioGMS_SoundInstance_QueueSoundInstance(double soundInstanceID, double queueSoundInstanceID); + public native double FAudioGMS_SoundInstance_GetPitch(double soundInstanceID); public native double FAudioGMS_SoundInstance_GetVolume(double soundInstanceID); public native double FAudioGMS_SoundInstance_GetTrackLengthInSeconds(double soundInstanceID); @@ -69,6 +73,9 @@ public class FAudioGMSNative public native double FAudioGMS_SoundInstance_SetEffectChain(double soundInstanceID, double effectChainID, double effectGain); public native double FAudioGMS_SoundInstance_SetEffectGain(double soundInstanceID, double effectGain); + public native double FAudioGMS_SetMasteringEffectChain(double effectChainID, double effectGain); + public native double FAudioGMS_SetMasteringEffectGain(double effectGain); + public native double FAudioGMS_SetListenerPosition(double x, double y, double z); public native double FAudioGMS_SetListenerVelocity(double xVelocity, double yVelocity, double zVelocity); diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libFAudioGMS.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libFAudioGMS.so index 2542d60..3606317 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libFAudioGMS.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libFAudioGMS.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c3948edd7499c2e558300a1b90f6f5e5e1cb486d80f9960c577f2cf663a26a7 -size 279904 +oid sha256:c125bd766e0fa651fbfcb395543993f77c787c6d6c1c101d46ba517819beb660 +size 281696 diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libSDL2.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libSDL2.so index 0c09659..f105fc0 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libSDL2.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libSDL2.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91f127491500ca94a8eda76a9d73d6d9f80b745bce9f37ee813791828764e908 -size 1450728 +oid sha256:b1499d57a4dc13241127cb6fea48c39df3e3c952aeea7b64a3938b75d948bd3f +size 1449200 diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libhidapi.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libhidapi.so index 9b58ab1..d8397ca 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libhidapi.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/arm64-v8a/libhidapi.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3cbdc467efc00791248d70728d0517c2db318e70fe68bb3f9e43b73136e1d4b6 -size 24280 +oid sha256:c999ba9859d6edc0923a36623c882a3f5482f8da745a3b0b7af0d63dab9195c1 +size 26376 diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libFAudioGMS.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libFAudioGMS.so index f4e81cc..daac046 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libFAudioGMS.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libFAudioGMS.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd28bf5f21d15166074ec2c817dd72f2f81a8507326615b1788a1a8c62669a69 -size 178060 +oid sha256:a43b954d1d673c0c5d441c9b609efe0e42f70f673086577db871da135de49180 +size 199440 diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libSDL2.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libSDL2.so index c18c4ec..24a6a01 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libSDL2.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libSDL2.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b39fa8542bb0d4258bbdcdc07c816e5dee484621e813c683db5761ba3e0952c -size 1029388 +oid sha256:603e24685688166f1330a8ba56eceadbcf5395a64beb8245a4f16de2c223675a +size 1072824 diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libhidapi.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libhidapi.so index 6e146cc..e63a093 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libhidapi.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/armeabi-v7a/libhidapi.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:320bae7e28e21dd64c40083bc9036423661341a35b0803f8018f3ef5f7c5c248 -size 17236 +oid sha256:30f92690471d15a599ba59652356d80b8ae73925bc13e543e41bd5f299c44c6e +size 26080 diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libFAudioGMS.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libFAudioGMS.so index 994cf9b..13473a0 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libFAudioGMS.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libFAudioGMS.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8535e4f92e1d7c0d56efac9e94bf8899b3becd23c1ac7351169ef7328651f419 -size 328360 +oid sha256:64a589c40744b1645defb9b79a1f50e791eeb7d9cb69b9675c8f6654390d2ce1 +size 314064 diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libSDL2.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libSDL2.so index 0eaec5d..9227c81 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libSDL2.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libSDL2.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:826f98889b6e3d36be70c06699fc1f4f109a92df478fa95fe128b9bc81f29c66 -size 1684220 +oid sha256:5129ba0ae695ed57ca41723012468a43e8464780a983bc0d688a48f3bd7facb5 +size 1650300 diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libhidapi.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libhidapi.so index b29ecc4..b7fd89a 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libhidapi.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86/libhidapi.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab221fc8a0de79cb175c33b240492b77a954a1286716359101273a31b6b69c14 -size 22424 +oid sha256:1a394c7041af8230fb22c1f2b8384a5c8d61d739330788d7855a8e701c2bc974 +size 26016 diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libFAudioGMS.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libFAudioGMS.so index a09a738..1eb305d 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libFAudioGMS.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libFAudioGMS.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b761e89f48c47093f5aaa62d78f319712a3d1e9bcfd21115824b89c38c77c659 -size 319784 +oid sha256:bbe06366eb5c6088b572a67c3745520567d9490d81a388372b54b1ad50eeccff +size 310640 diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libSDL2.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libSDL2.so index 4de4d9f..e69345b 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libSDL2.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libSDL2.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:923239b6a0353e1c105de66504ddc0d93a5c6554974cc6a513268a8bf652ccce -size 1660944 +oid sha256:88467425354b7d7ac1d7f77909f3768f56f29a80581c05bf3d01266cb5e3deb4 +size 1629720 diff --git a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libhidapi.so b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libhidapi.so index a50fbfa..47262a8 100644 --- a/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libhidapi.so +++ b/gamemaker/extensions/FAudioGMS/AndroidSource/libs/x86_64/libhidapi.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f750ac957990db9493a7cad6caf8cff7f9046b540ac41ca592584f571edb0ffd -size 25944 +oid sha256:d406276d177e47b1c4a0cf2921c6ac64862a9a3d5c67b128e412106dda242e62 +size 26648