Skip to content

Commit de96dda

Browse files
jgranickNotHyper-474
authored andcommitted
Initial support for SDL_sound
1 parent f109a08 commit de96dda

File tree

10 files changed

+383
-1
lines changed

10 files changed

+383
-1
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,6 @@
8383
path = project/lib/hashlink
8484
url = https://github.com/HaxeFoundation/hashlink
8585
shallow = true
86+
[submodule "project/lib/sdl_sound"]
87+
path = project/lib/sdl_sound
88+
url = https://github.com/icculus/SDL_sound

project/Build.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
<set name="LIME_PIXMAN" value="1" />
3333
<set name="LIME_PNG" value="1" />
3434
<set name="LIME_SDL" value="1" />
35+
<set name="LIME_SDL_SOUND" value="1" />
3536
<!-- <set name="LIME_SDL_ANGLE" value="1" if="windows" unless="static_link" /> -->
3637
<set name="LIME_SDL_ANGLE" value="1" if="windows LIME_SDL_ANGLE" unless="static_link" />
3738
<set name="LIME_SDL_ANGLE" value="1" if="windows angle" unless="static_link" />
@@ -51,6 +52,7 @@
5152
<set name="NATIVE_TOOLKIT_HAVE_MBEDTLS" value="1" if="LIME_MBEDTLS" />
5253
<set name="NATIVE_TOOLKIT_HAVE_PNG" value="1" if="LIME_PNG" />
5354
<set name="NATIVE_TOOLKIT_HAVE_SDL" value="1" if="LIME_SDL" />
55+
<set name="NATIVE_TOOLKIT_HAVE_SDL_SOUND" value="1" if="LIME_SDL_SOUND" />
5456

5557
<set name="NATIVE_TOOLKIT_SDL_STATIC" value="1" />
5658
<set name="NATIVE_TOOLKIT_SDL_ANGLE" value="1" if="LIME_SDL_ANGLE" />
@@ -272,6 +274,19 @@
272274

273275
</section>
274276

277+
<section if="LIME_SDL_SOUND">
278+
279+
<compilerflag value="-DLIME_SDL_SOUND" />
280+
<compilerflag value="-D__IPHONEOS__" if="ios || tvos" />
281+
<compilerflag value="-D__APPLETVOS__" if="tvos" />
282+
<compilerflag value="-DAPPLETV" if="tvos" />
283+
<compilerflag value="-DHAVE_STDIO_H" unless="windows" />
284+
<compilerflag value="-I${NATIVE_TOOLKIT_PATH}/sdl_sound/src/" />
285+
286+
<file name="src/media/decoders/SDL_sound.cpp" />
287+
288+
</section>
289+
275290
<section if="LIME_TINYFILEDIALOGS">
276291

277292
<compilerflag value="-I${NATIVE_TOOLKIT_PATH}/tinyfiledialogs/" />
@@ -364,6 +379,7 @@
364379
<include name="lib/pixman-files.xml" />
365380
<include name="lib/png-files.xml" />
366381
<include name="lib/sdl-files.xml" />
382+
<include name="lib/sdl_sound-files.xml" />
367383
<include name="lib/tinyfiledialogs-files.xml" />
368384
<include name="lib/vorbis-files.xml" />
369385
<include name="lib/vpx-files.xml" />
@@ -397,6 +413,7 @@
397413
<files id="native-toolkit-pixman" if="LIME_PIXMAN" />
398414
<files id="native-toolkit-png" if="LIME_PNG" />
399415
<files id="native-toolkit-sdl" if="LIME_SDL" unless="emscripten" />
416+
<files id="native-toolkit-sdl_sound" if="LIME_SDL_SOUND" />
400417
<files id="native-toolkit-tinyfiledialogs" if="LIME_TINYFILEDIALOGS" />
401418
<files id="native-toolkit-vorbis" if="LIME_VORBIS" />
402419
<files id="native-toolkit-vpx" if="LIME_VPX" />
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#ifndef LIME_MEDIA_DECODERS_SDL_SOUND_H
2+
#define LIME_MEDIA_DECODERS_SDL_SOUND_H
3+
4+
5+
#include <media/AudioBuffer.h>
6+
#include <utils/Resource.h>
7+
8+
9+
namespace lime {
10+
11+
12+
class SDL_sound {
13+
14+
15+
public:
16+
17+
static bool Decode (Resource *resource, AudioBuffer *audioBuffer);
18+
19+
20+
};
21+
22+
23+
}
24+
25+
26+
#endif

project/lib/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Lime includes code from several other C/C++ libraries, listed below. Lime prefer
1919
- [**Pixman**](http://pixman.org/) | [primary repo](https://gitlab.freedesktop.org/pixman/pixman) | [GitHub mirror](https://github.com/freedesktop/pixman)
2020
- [**libpng**](http://www.libpng.org/pub/png/libpng.html) | [primary repo](https://sourceforge.net/p/libpng/code) | [GitHub mirror](https://github.com/glennrp/libpng)[^1]
2121
- [**SDL**](https://www.libsdl.org/) | [primary repo](https://github.com/libsdl-org/SDL)
22+
- [**SDL_sound**](https://icculus.org/SDL_sound/) | [primary repo](https://github.com/icculus/SDL_sound)
2223
- [**tiny file dialogs**](https://sourceforge.net/projects/tinyfiledialogs/) | [primary repo](https://sourceforge.net/p/tinyfiledialogs/code) | [unofficial GitHub mirror](https://github.com/openfl/libtinyfiledialogs)[^1]
2324
- [**Vorbis**](https://www.xiph.org/vorbis/) | [primary repo](https://github.com/xiph/vorbis)
2425
- [**libvpx**](https://www.webmproject.org/tools/) | [primary repo](https://chromium.googlesource.com/webm/libvpx/) | [GitHub mirror](https://github.com/webmproject/libvpx/)

project/lib/sdl_sound

Submodule sdl_sound added at fdcecaf

project/lib/sdl_sound-files.xml

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
<xml>
2+
3+
<set name="SDLSOUND_DECODER_MODPLUG" value="1" />
4+
<set name="SDLSOUND_DECODER_MIDI" value="1" />
5+
<set name="SDLSOUND_DECODER_COREAUDIO" value="1" if="mac || ios || tvos" />
6+
7+
<files id="native-toolkit-sdl_sound-depends">
8+
9+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/dr_flac.h" />
10+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/dr_mp3.h" />
11+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound.h" />
12+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_internal.h" />
13+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/stb_vorbis.h" />
14+
15+
<section if="SDLSOUND_DECODER_MODPLUG">
16+
17+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/libmodplug.h" />
18+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/modplug.h" />
19+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/tables.h" />
20+
21+
</section>
22+
23+
<section if="SDLSOUND_DECODER_MIDI">
24+
25+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/common.h" />
26+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/instrum.h" />
27+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/mix.h" />
28+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/options.h" />
29+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/output.h" />
30+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/playmidi.h" />
31+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/readmidi.h" />
32+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/resample.h" />
33+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/tables.h" />
34+
<depend name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/timidity.h" />
35+
36+
</section>
37+
38+
</files>
39+
40+
<files id="native-toolkit-sdl_sound" tags="">
41+
42+
<cache value="1" />
43+
<tag value="${NATIVE_TOOLKIT_OPTIM_TAG}" if="NATIVE_TOOLKIT_OPTIM_TAG" />
44+
45+
<compilerflag value="-I${ANDROID_NDK_ROOT}/sources/android/cpufeatures" if="android" />
46+
47+
<compilerflag value="-I${NATIVE_TOOLKIT_PATH}/custom/sdl/include/" />
48+
<compilerflag value="-I${NATIVE_TOOLKIT_PATH}/sdl/include/" />
49+
<compilerflag value="-I${NATIVE_TOOLKIT_PATH}/sdl/src/hidapi/hidapi/" />
50+
<compilerflag value="-I${SDL_CONFIG_PATH}" if="SDL_CONFIG_PATH" />
51+
52+
<compilerflag value="-DHAVE_LIBC" />
53+
<compilerflag value="-D__IPHONEOS__" if="ios || tvos" />
54+
<compilerflag value="-D__TVOS__" if="tvos" />
55+
56+
<compilerflag value="-I${NATIVE_TOOLKIT_PATH}/sdl_sound/src/" />
57+
58+
<section if="winrt">
59+
60+
<compilerflag value="-D__WINRT__" />
61+
<compilerflag value="-DUNICODE" />
62+
63+
</section>
64+
65+
<section if="linux">
66+
67+
<compilerflag value="-D_REENTRANT" />
68+
<compilerflag value="-mmmx" unless="rpi" />
69+
<compilerflag value="-msse" unless="rpi" />
70+
<compilerflag value="-msse2" unless="rpi" />
71+
<compilerflag value="-msse3" unless="rpi" />
72+
<compilerflag value="-mssse3" unless="rpi" />
73+
74+
</section>
75+
76+
<section if="rpi">
77+
78+
<compilerflag value="-mfpu=neon" unless="HXCPP_ARM64" />
79+
<compilerflag value="-mfloat-abi=hard" unless="HXCPP_ARM64" />
80+
<compilerflag value="-I-abi=hard" />
81+
82+
<compilerflag value="-I/opt/vc/include" />
83+
<compilerflag value="-I/opt/vc/include/interface/vcos/pthreads" />
84+
<compilerflag value="-I/opt/vc/include/interface/vmcs_host/linux" />
85+
<compilerflag value="-I/usr/include/dbus-1.0" />
86+
<compilerflag value="-I/usr/include/interface/vcos/pthreads" />
87+
<compilerflag value="-I/usr/include/interface/vmcs_host/linux" />
88+
<compilerflag value="-I/usr/include/libdrm" />
89+
<compilerflag value="-I/usr/lib/arm-linux-gnueabihf/dbus-1.0/include" unless="HXCPP_ARM64" />
90+
<compilerflag value="-I/usr/lib/aarch64-linux-gnu/dbus-1.0/include" if="HXCPP_ARM64" />
91+
<compilerflag value="-I/usr/local/include" />
92+
93+
</section>
94+
95+
<section if="mac">
96+
97+
<compilerflag value="-DTARGET_API_MAC_CARBON" />
98+
<compilerflag value="-DTARGET_API_MAC_OSX" />
99+
<compilerflag value="-D_THREAD_SAFE" />
100+
<compilerflag value="-mmmx" unless="HXCPP_ARM64" />
101+
<compilerflag value="-msse" unless="HXCPP_ARM64" />
102+
<compilerflag value="-msse2" unless="HXCPP_ARM64" />
103+
<compilerflag value="-msse3" unless="HXCPP_ARM64" />
104+
<compilerflag value="-mssse3" unless="HXCPP_ARM64" />
105+
106+
<vflag name="-framework" value="AudioToolbox" if="SDLSOUND_DECODER_COREAUDIO" />
107+
108+
</section>
109+
110+
<section if="ios || tvos">
111+
112+
<vflag name="-framework" value="AudioToolbox" if="SDLSOUND_DECODER_COREAUDIO" />
113+
114+
</section>
115+
116+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound.c" />
117+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_aiff.c" />
118+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_au.c" />
119+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_coreaudio.c" />
120+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_flac.c" />
121+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_midi.c" />
122+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_modplug.c" />
123+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_mp3.c" />
124+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_raw.c" />
125+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_shn.c" />
126+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_voc.c" />
127+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_vorbis.c" />
128+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/SDL_sound_wav.c" />
129+
130+
<section if="SDLSOUND_DECODER_MODPLUG">
131+
132+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/fastmix.c" />
133+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_669.c" />
134+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_amf.c" />
135+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_ams.c" />
136+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_dbm.c" />
137+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_dmf.c" />
138+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_dsm.c" />
139+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_far.c" />
140+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_it.c" />
141+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_mdl.c" />
142+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_med.c" />
143+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_mod.c" />
144+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_mt2.c" />
145+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_mtm.c" />
146+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_okt.c" />
147+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_gdm.c" />
148+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_psm.c" />
149+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_ptm.c" />
150+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_s3m.c" />
151+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_stm.c" />
152+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_ult.c" />
153+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_umx.c" />
154+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/load_xm.c" />
155+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/mmcmp.c" />
156+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/modplug.c" />
157+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/snd_dsp.c" />
158+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/snd_flt.c" />
159+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/snd_fx.c" />
160+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/sndfile.c" />
161+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/libmodplug/sndmix.c" />
162+
163+
</section>
164+
165+
<section if="SDLSOUND_DECODER_MIDI">
166+
167+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/common.c" />
168+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/instrum.c" />
169+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/mix.c" />
170+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/output.c" />
171+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/playmidi.c" />
172+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/readmidi.c" />
173+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/resample.c" />
174+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/tables.c" />
175+
<file name="${NATIVE_TOOLKIT_PATH}/sdl_sound/src/timidity/timidity.c" />
176+
177+
</section>
178+
179+
</files>
180+
181+
</xml>

project/src/ExternalInterface.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@
4848
#include <utils/compress/Zlib.h>
4949
#include <vm/NekoVM.h>
5050

51+
#ifdef LIME_SDL_SOUND
52+
#include <media/decoders/SDL_sound.h>
53+
#endif
54+
5155
#ifdef HX_WINDOWS
5256
#include <locale>
5357
#include <codecvt>
@@ -386,6 +390,14 @@ namespace lime {
386390
bytes.Set (data);
387391
resource = Resource (&bytes);
388392

393+
#ifdef LIME_SDL_SOUND
394+
if (SDL_sound::Decode (&resource, &audioBuffer)) {
395+
396+
return audioBuffer.Value (buffer);
397+
398+
}
399+
#endif
400+
389401
if (WAV::Decode (&resource, &audioBuffer)) {
390402

391403
return audioBuffer.Value (buffer);
@@ -409,6 +421,14 @@ namespace lime {
409421

410422
Resource resource = Resource (data);
411423

424+
#ifdef LIME_SDL_SOUND
425+
if (SDL_sound::Decode (&resource, buffer)) {
426+
427+
return buffer;
428+
429+
}
430+
#endif
431+
412432
if (WAV::Decode (&resource, buffer)) {
413433

414434
return buffer;
@@ -436,6 +456,14 @@ namespace lime {
436456

437457
resource = Resource (val_string (data));
438458

459+
#ifdef LIME_SDL_SOUND
460+
if (SDL_sound::Decode (&resource, &audioBuffer)) {
461+
462+
return audioBuffer.Value (buffer);
463+
464+
}
465+
#endif
466+
439467
if (WAV::Decode (&resource, &audioBuffer)) {
440468

441469
return audioBuffer.Value (buffer);
@@ -459,6 +487,14 @@ namespace lime {
459487

460488
Resource resource = Resource (data ? hl_to_utf8 ((const uchar*)data->bytes) : NULL);
461489

490+
#ifdef LIME_SDL_SOUND
491+
if (SDL_sound::Decode (&resource, buffer)) {
492+
493+
return buffer;
494+
495+
}
496+
#endif
497+
462498
if (WAV::Decode (&resource, buffer)) {
463499

464500
return buffer;

project/src/backend/sdl/SDLApplication.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
#include "SDLJoystick.h"
44
#include <system/System.h>
55

6+
#ifdef LIME_SDL_SOUND
7+
#include "SDL_sound.h"
8+
#endif
9+
610
#ifdef HX_MACOS
711
#include <CoreFoundation/CoreFoundation.h>
812
#endif
@@ -51,6 +55,10 @@ namespace lime {
5155
SDL_SetEventFilter (HandleAppLifecycleEvent, NULL);
5256
#endif
5357

58+
#ifdef LIME_SDL_SOUND
59+
Sound_Init ();
60+
#endif
61+
5462
SDL_LogSetPriority (SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN);
5563

5664
currentApplication = this;
@@ -803,6 +811,10 @@ namespace lime {
803811
applicationEvent.type = EXIT;
804812
ApplicationEvent::Dispatch (&applicationEvent);
805813

814+
#ifdef LIME_SDL_SOUND
815+
Sound_Quit ();
816+
#endif
817+
806818
SDL_Quit ();
807819

808820
return 0;

0 commit comments

Comments
 (0)