From 6be41108a6ffd0485407a2c5a24918e19dbbd698 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Fri, 29 Oct 2021 13:47:26 -0700 Subject: [PATCH] PauseAll and ResumeAll + some linux stuff --- README.md | 3 + gamemaker/extensions/FAudioGMS/FAudioGMS.yy | 11 +++- .../extensions/FAudioGMS/libFAudioGMS.so | 3 + gamemaker/extensions/FAudioGMS/libSDL2.so | 3 + .../FAudioGMS_Scripts/FAudioGMS_Scripts.gml | 2 +- src/FAudioGMS.c | 56 +++++++++++++++---- src/FAudioGMS.h | 2 + 7 files changed, 65 insertions(+), 15 deletions(-) create mode 100644 gamemaker/extensions/FAudioGMS/libFAudioGMS.so create mode 100644 gamemaker/extensions/FAudioGMS/libSDL2.so diff --git a/README.md b/README.md index 9b26f45..a52c6a9 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,9 @@ I will not be supporting 32-bit Windows. Catch up to 2004 and switch to 64-bit. - Xbox One - iOS +## Kind of Supported +- Android (nik provided android build scripts but I will not help you if it breaks, sorry, Android sucks) + ### Not Supported - Windows (32-bit) - HTML5 (if someone wants to try this go ahead but I'm not touching that garbage with a 10 foot pole) diff --git a/gamemaker/extensions/FAudioGMS/FAudioGMS.yy b/gamemaker/extensions/FAudioGMS/FAudioGMS.yy index 69ad3b6..ede25de 100644 --- a/gamemaker/extensions/FAudioGMS/FAudioGMS.yy +++ b/gamemaker/extensions/FAudioGMS/FAudioGMS.yy @@ -155,7 +155,12 @@ 2, 2, ],"resourceVersion":"1.0","name":"FAudioGMS_SetListenerVelocity","tags":[],"resourceType":"GMExtensionFunction",}, - ],"constants":[],"ProxyFiles":[],"copyToTargets":64,"order":[ + {"externalName":"FAudioGMS_PauseAll","kind":1,"help":"FAudioGMS_PauseAll()","hidden":false,"returnType":2,"argCount":0,"args":[],"resourceVersion":"1.0","name":"FAudioGMS_PauseAll","tags":[],"resourceType":"GMExtensionFunction",}, + {"externalName":"FAudioGMS_ResumeAll","kind":1,"help":"FAudioGMS_ResumeAll()","hidden":false,"returnType":2,"argCount":0,"args":[],"resourceVersion":"1.0","name":"FAudioGMS_ResumeAll","tags":[],"resourceType":"GMExtensionFunction",}, + ],"constants":[],"ProxyFiles":[ + {"TargetMask":7,"resourceVersion":"1.0","name":"libFAudioGMS.so","tags":[],"resourceType":"GMProxyFile",}, + {"TargetMask":7,"resourceVersion":"1.0","name":"libSDL2.so","tags":[],"resourceType":"GMProxyFile",}, + ],"copyToTargets":192,"order":[ {"name":"FAudioGMS_Init","path":"extensions/FAudioGMS/FAudioGMS.yy",}, {"name":"FAudioGMS_StaticSound_LoadWAV","path":"extensions/FAudioGMS/FAudioGMS.yy",}, {"name":"FAudioGMS_StaticSound_CreateSoundInstance","path":"extensions/FAudioGMS/FAudioGMS.yy",}, @@ -188,6 +193,8 @@ {"name":"FAudioGMS_SoundInstance_SetEffectGain","path":"extensions/FAudioGMS/FAudioGMS.yy",}, {"name":"FAudioGMS_SetListenerPosition","path":"extensions/FAudioGMS/FAudioGMS.yy",}, {"name":"FAudioGMS_SetListenerVelocity","path":"extensions/FAudioGMS/FAudioGMS.yy",}, + {"name":"FAudioGMS_ResumeAll","path":"extensions/FAudioGMS/FAudioGMS.yy",}, + {"name":"FAudioGMS_PauseAll","path":"extensions/FAudioGMS/FAudioGMS.yy",}, {"name":"FAudioGMS_StopAll","path":"extensions/FAudioGMS/FAudioGMS.yy",}, {"name":"FAudioGMS_Update","path":"extensions/FAudioGMS/FAudioGMS.yy",}, {"name":"FAudioGMS_Destroy","path":"extensions/FAudioGMS/FAudioGMS.yy",}, @@ -221,7 +228,7 @@ "tvosThirdPartyFrameworkEntries": [], "IncludedResources": [], "androidPermissions": [], - "copyToTargets": 64, + "copyToTargets": 192, "iosCocoaPods": "", "tvosCocoaPods": "", "iosCocoaPodDependencies": "", diff --git a/gamemaker/extensions/FAudioGMS/libFAudioGMS.so b/gamemaker/extensions/FAudioGMS/libFAudioGMS.so new file mode 100644 index 0000000..9fff8a4 --- /dev/null +++ b/gamemaker/extensions/FAudioGMS/libFAudioGMS.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fe5af1b711d864f00afadcc65b2c02524ce2e74e374102c0cf594156b418a25 +size 359552 diff --git a/gamemaker/extensions/FAudioGMS/libSDL2.so b/gamemaker/extensions/FAudioGMS/libSDL2.so new file mode 100644 index 0000000..dea6b6c --- /dev/null +++ b/gamemaker/extensions/FAudioGMS/libSDL2.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fdd8d5903ce4dd2904c5954c2ff4ee1f58d53ad46daa4bfed1d2bdf37aab15f +size 2142592 diff --git a/gamemaker/scripts/FAudioGMS_Scripts/FAudioGMS_Scripts.gml b/gamemaker/scripts/FAudioGMS_Scripts/FAudioGMS_Scripts.gml index 54d46ef..7068e2e 100644 --- a/gamemaker/scripts/FAudioGMS_Scripts/FAudioGMS_Scripts.gml +++ b/gamemaker/scripts/FAudioGMS_Scripts/FAudioGMS_Scripts.gml @@ -3,7 +3,7 @@ // Playing a StaticSound returns a SoundInstance. function LoadStaticSound(filename) { - var filePath = "audio\\static\\" + filename; + var filePath = working_directory + "audio/static/" + filename; var staticSoundID = FAudioGMS_StaticSound_LoadWAV(filePath); return new StaticSound(staticSoundID); } diff --git a/src/FAudioGMS.c b/src/FAudioGMS.c index b1f99fa..5d1578c 100644 --- a/src/FAudioGMS.c +++ b/src/FAudioGMS.c @@ -200,6 +200,8 @@ typedef struct FAudioGMS_SoundInstance F3DAUDIO_EMITTER* emitter; /* must not be NULL if is3D */ float stereoAzimuth[2]; + uint8_t isGlobalPaused; + union { FAudioGMS_StaticSound *staticSound; /* static sounds are loaded separately, so they do not belong to the instance */ @@ -583,13 +585,6 @@ static void FAudioGMS_INTERNAL_SoundInstance_SetVolume(FAudioGMS_SoundInstance* FAudioVoice_SetVolume(instance->handle, volume, 0); } -static void FAudioGMS_INTERNAL_SoundInstance_SetProperties(FAudioGMS_SoundInstance* instance, double pan, double pitch, double volume) -{ - FAudioGMS_INTERNAL_SoundInstance_SetPan(instance, pan); - FAudioGMS_INTERNAL_SoundInstance_SetPitch(instance, pitch); - FAudioGMS_INTERNAL_SoundInstance_SetVolume(instance, volume); -} - static FAudioGMS_SoundInstance* FAudioGMS_INTERNAL_SoundInstance_Init( uint32_t channelCount, uint32_t samplesPerSecond, @@ -602,6 +597,7 @@ static FAudioGMS_SoundInstance* FAudioGMS_INTERNAL_SoundInstance_Init( instance->isStatic = isStatic; instance->loop = 0; instance->destroyOnFinish = 0; + instance->isGlobalPaused = 0; instance->format.wFormatTag = FAUDIO_FORMAT_IEEE_FLOAT; instance->format.wBitsPerSample = 32; @@ -966,12 +962,9 @@ void FAudioGMS_SoundInstance_Play(double soundInstanceID, double loop) } } -void FAudioGMS_SoundInstance_Pause(double soundInstanceID) +static void FAudioGMS_INTERNAL_SoundInstance_Pause(FAudioGMS_SoundInstance* instance) { - RETURN_ON_NULL_DEVICE() - FAudioGMS_SoundInstance* instance = FAudioGMS_INTERNAL_LookupSoundInstance((uint32_t)soundInstanceID); - - if (instance != NULL) + if (instance != NULL) { if (instance->soundState == SoundState_Playing) { @@ -985,6 +978,13 @@ void FAudioGMS_SoundInstance_Pause(double soundInstanceID) } } +void FAudioGMS_SoundInstance_Pause(double soundInstanceID) +{ + RETURN_ON_NULL_DEVICE() + FAudioGMS_SoundInstance* instance = FAudioGMS_INTERNAL_LookupSoundInstance((uint32_t)soundInstanceID); + FAudioGMS_INTERNAL_SoundInstance_Pause(instance); +} + static void FAudioGMS_INTERNAL_SoundInstance_Stop(FAudioGMS_SoundInstance* instance) { if (instance != NULL) @@ -1639,6 +1639,38 @@ void FAudioGMS_Update() } } +void FAudioGMS_PauseAll() +{ + RETURN_ON_NULL_DEVICE() + uint32_t i; + + for (i = 0; i < device->soundInstanceCount; i += 1) + { + FAudioGMS_SoundInstance *instance = device->soundInstances[i]; + if (instance != NULL) + { + instance->isGlobalPaused = 1; + FAudioGMS_INTERNAL_SoundInstance_Pause(instance); + } + } +} + +void FAudioGMS_ResumeAll() +{ + RETURN_ON_NULL_DEVICE() + uint32_t i; + + for (i = 0; i < device->soundInstanceCount; i += 1) + { + FAudioGMS_SoundInstance *instance = device->soundInstances[i]; + if (instance != NULL && instance->isGlobalPaused) + { + instance->isGlobalPaused = 0; + FAudioGMS_INTERNAL_SoundInstance_Play(instance); + } + } +} + void FAudioGMS_StopAll() { RETURN_ON_NULL_DEVICE() diff --git a/src/FAudioGMS.h b/src/FAudioGMS.h index 194176a..8c118b5 100644 --- a/src/FAudioGMS.h +++ b/src/FAudioGMS.h @@ -101,6 +101,8 @@ FAUDIOGMSAPI void FAudioGMS_SoundInstance_SetEffectGain(double soundInstanceID, FAUDIOGMSAPI void FAudioGMS_SetListenerPosition(double x, double y, double z); FAUDIOGMSAPI void FAudioGMS_SetListenerVelocity(double xVelocity, double yVelocity, double zVelocity); +FAUDIOGMSAPI void FAudioGMS_PauseAll(); /* useful for mobile platforms, etc */ +FAUDIOGMSAPI void FAudioGMS_ResumeAll(); /* same as above */ FAUDIOGMSAPI void FAudioGMS_StopAll(); FAUDIOGMSAPI void FAudioGMS_Update();