Skip to content

Commit a9a8dcd

Browse files
committed
added background music
1 parent dd18786 commit a9a8dcd

14 files changed

Lines changed: 840 additions & 12 deletions

File tree

CMakeLists.txt

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ set(CMAKE_C_VISIBILITY_PRESET hidden)
5252

5353
set(PPUC_INCLUDE_DIRS "")
5454
set(PPUC_STAGED_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third-party/include")
55+
set(PPUC_STAGED_BUILD_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third-party/build-libs/${PLATFORM}-${ARCH}")
56+
set(PPUC_STAGED_RUNTIME_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third-party/runtime-libs/${PLATFORM}-${ARCH}")
5557

5658
if(PPUC_USE_KMSDMD)
5759
find_path(PPUC_KMSDMD_INCLUDE_DIR
@@ -170,12 +172,62 @@ else()
170172
message(STATUS "espeak-ng speech backend: disabled")
171173
endif()
172174

175+
set(PPUC_HAS_SDL3_MIXER_HEADERS FALSE)
176+
if(EXISTS "${PPUC_STAGED_INCLUDE_DIR}/SDL3_mixer/SDL_mixer.h")
177+
set(PPUC_HAS_SDL3_MIXER_HEADERS TRUE)
178+
endif()
179+
180+
set(PPUC_HAS_SDL3_MIXER_LIBS FALSE)
181+
set(PPUC_SDL3_MIXER_LINK_NAME "")
182+
if(PLATFORM STREQUAL "win")
183+
if(ARCH STREQUAL "x64")
184+
if(EXISTS "${PPUC_STAGED_BUILD_LIB_DIR}/SDL3_mixer64.lib")
185+
set(PPUC_HAS_SDL3_MIXER_LIBS TRUE)
186+
set(PPUC_SDL3_MIXER_LINK_NAME SDL3_mixer64)
187+
endif()
188+
else()
189+
if(EXISTS "${PPUC_STAGED_BUILD_LIB_DIR}/SDL3_mixer.lib")
190+
set(PPUC_HAS_SDL3_MIXER_LIBS TRUE)
191+
set(PPUC_SDL3_MIXER_LINK_NAME SDL3_mixer)
192+
endif()
193+
endif()
194+
elseif(PLATFORM STREQUAL "win-mingw")
195+
if(ARCH STREQUAL "x64")
196+
if(EXISTS "${PPUC_STAGED_BUILD_LIB_DIR}/libSDL3_mixer64.dll.a")
197+
set(PPUC_HAS_SDL3_MIXER_LIBS TRUE)
198+
set(PPUC_SDL3_MIXER_LINK_NAME SDL3_mixer64)
199+
endif()
200+
endif()
201+
else()
202+
find_library(PPUC_SDL3_MIXER_LIBRARY
203+
NAMES SDL3_mixer
204+
PATHS "${PPUC_STAGED_RUNTIME_LIB_DIR}"
205+
)
206+
if(PPUC_SDL3_MIXER_LIBRARY)
207+
set(PPUC_HAS_SDL3_MIXER_LIBS TRUE)
208+
set(PPUC_SDL3_MIXER_LINK_NAME SDL3_mixer)
209+
endif()
210+
endif()
211+
212+
set(PPUC_ENABLE_SDL3_MIXER FALSE)
213+
if(PPUC_HAS_SDL3_MIXER_HEADERS AND PPUC_HAS_SDL3_MIXER_LIBS)
214+
set(PPUC_ENABLE_SDL3_MIXER TRUE)
215+
message(STATUS "SDL3_mixer background music: enabled")
216+
elseif(PPUC_HAS_SDL3_MIXER_HEADERS OR PPUC_HAS_SDL3_MIXER_LIBS)
217+
message(WARNING "SDL3_mixer background music: disabled due to incomplete staged artifacts")
218+
else()
219+
message(STATUS "SDL3_mixer background music: disabled")
220+
endif()
221+
173222
if(PPUC_ENABLE_ESPEAK_NG)
174223
target_compile_definitions(ppuc-pinmame PRIVATE PPUC_HAS_ESPEAK_NG)
175224
target_sources(ppuc-pinmame PRIVATE
176225
src/ESpeakNgSpeechService.cpp
177226
)
178227
endif()
228+
if(PPUC_ENABLE_SDL3_MIXER)
229+
target_compile_definitions(ppuc-pinmame PRIVATE PPUC_HAS_SDL3_MIXER)
230+
endif()
179231

180232
if(PLATFORM STREQUAL "win" OR PLATFORM STREQUAL "win-mingw")
181233
target_link_directories(ppuc-pinmame PUBLIC
@@ -213,6 +265,11 @@ if(PLATFORM STREQUAL "win" OR PLATFORM STREQUAL "win-mingw")
213265
${PPUC_ESPEAK_NG_LIBRARY}
214266
)
215267
endif()
268+
if(PPUC_ENABLE_SDL3_MIXER)
269+
target_link_libraries(ppuc-pinmame LINK_PUBLIC
270+
${PPUC_SDL3_MIXER_LINK_NAME}
271+
)
272+
endif()
216273
else()
217274
target_link_directories(ppuc-pinmame PUBLIC
218275
third-party/build-libs/${PLATFORM}-${ARCH}
@@ -261,6 +318,11 @@ else()
261318
${PPUC_ESPEAK_NG_LIBRARY}
262319
)
263320
endif()
321+
if(PPUC_ENABLE_SDL3_MIXER)
322+
target_link_libraries(ppuc-pinmame LINK_PUBLIC
323+
${PPUC_SDL3_MIXER_LINK_NAME}
324+
)
325+
endif()
264326
endif()
265327

266328
if(PPUC_BUILD_MENU)
@@ -278,6 +340,9 @@ target_include_directories(ppuc-menu PUBLIC
278340
target_compile_definitions(ppuc-menu PRIVATE
279341
PPUC_RUNTIME_LIB_SUBDIR="${PLATFORM}-${ARCH}"
280342
)
343+
if(PPUC_ENABLE_SDL3_MIXER)
344+
target_compile_definitions(ppuc-menu PRIVATE PPUC_HAS_SDL3_MIXER)
345+
endif()
281346

282347
if(PPUC_ENABLE_FLITE)
283348
target_compile_definitions(ppuc-menu PRIVATE PPUC_HAS_FLITE)
@@ -321,6 +386,11 @@ if(PLATFORM STREQUAL "win" OR PLATFORM STREQUAL "win-mingw")
321386
${PPUC_ESPEAK_NG_LIBRARY}
322387
)
323388
endif()
389+
if(PPUC_ENABLE_SDL3_MIXER)
390+
target_link_libraries(ppuc-menu LINK_PUBLIC
391+
${PPUC_SDL3_MIXER_LINK_NAME}
392+
)
393+
endif()
324394
else()
325395
target_link_directories(ppuc-menu PUBLIC
326396
third-party/build-libs/${PLATFORM}-${ARCH}
@@ -354,6 +424,11 @@ else()
354424
${PPUC_ESPEAK_NG_LIBRARY}
355425
)
356426
endif()
427+
if(PPUC_ENABLE_SDL3_MIXER)
428+
target_link_libraries(ppuc-menu LINK_PUBLIC
429+
${PPUC_SDL3_MIXER_LINK_NAME}
430+
)
431+
endif()
357432
endif()
358433
endif()
359434

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ These components are still in an early development stage and the documentation w
6767
* --speech-file path
6868
* path to a speech trigger text file used with speech trigger rules
6969
* optional
70+
* --music-files csv
71+
* comma-separated MP3 playlist for gameplay background music
72+
* plays only while the game is not in attract mode
73+
* ducks while PinMAME or speech audio is active
74+
* optional
7075
* --speech-backend value
7176
* speech backend to use: `auto`, `flite`, `espeak-ng`
7277
* optional

examples/ppuc-pinmame.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ PUPTriggers =
2626
# Optional speech trigger text file.
2727
SpeechFile =
2828

29+
# Optional comma-separated MP3 playlist for gameplay background music.
30+
MusicFiles =
31+
2932
# Optional translite image for in-game mode.
3033
Translite =
3134

platforms/config.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
set -e
44

55
SDL_IMAGE_SHA=96a73a551a857b7c8d0ca3cc553a266eabbab6a7
6+
SDL_MIXER_SHA=cedfeef30e93db35eee6b25759117da63f8e5a4f
67
FLITE_SHA=6c9f20dc915b17f5619340069889db0aa007fcdc
78
ESPEAK_NG_SHA=1.52.0
89
PINMAME_SHA=9c41f59d4e3d5e128e7be6befbee1ed12d5512fb

platforms/linux/aarch64/external.sh

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ NUM_PROCS=$(nproc)
88

99
echo "Building libraries..."
1010
echo " SDL_IMAGE_SHA: ${SDL_IMAGE_SHA}"
11+
echo " SDL_MIXER_SHA: ${SDL_MIXER_SHA}"
1112
echo " FLITE_SHA: ${FLITE_SHA}"
1213
echo " ESPEAK_NG_SHA: ${ESPEAK_NG_SHA}"
1314
echo " PINMAME_SHA: ${PINMAME_SHA}"
@@ -28,7 +29,7 @@ mkdir -p external ${CACHE_DIR}
2829
cd external
2930

3031
#
31-
# build libsdldmd, SDL3_image
32+
# build libsdldmd, SDL3_image, SDL3_mixer
3233
#
3334

3435
LIBSDLDMD_EXPECTED_SHA="${LIBSDLDMD_SHA}"
@@ -94,6 +95,45 @@ if [ "${SDL3_IMAGE_EXPECTED_SHA}" != "${SDL3_IMAGE_FOUND_SHA}" ]; then
9495
cd ..
9596
fi
9697

98+
SDL3_MIXER_EXPECTED_SHA="${SDL_MIXER_SHA}-${LIBSDLDMD_SHA}-mp3only-v1"
99+
SDL3_MIXER_FOUND_SHA="$([ -f SDL3_mixer/cache.txt ] && cat SDL3_mixer/cache.txt || echo "")"
100+
101+
if [ "${SDL3_MIXER_EXPECTED_SHA}" != "${SDL3_MIXER_FOUND_SHA}" ]; then
102+
echo "Building SDL3_mixer. Expected: ${SDL3_MIXER_EXPECTED_SHA}, Found: ${SDL3_MIXER_FOUND_SHA}"
103+
104+
rm -rf SDL3_mixer
105+
mkdir SDL3_mixer
106+
cd SDL3_mixer
107+
108+
curl -sL https://github.com/libsdl-org/SDL_mixer/archive/${SDL_MIXER_SHA}.tar.gz -o SDL_mixer-${SDL_MIXER_SHA}.tar.gz
109+
tar xzf SDL_mixer-${SDL_MIXER_SHA}.tar.gz
110+
mv SDL_mixer-${SDL_MIXER_SHA#release-} SDL_mixer 2>/dev/null || mv SDL_mixer-${SDL_MIXER_SHA} SDL_mixer
111+
cd SDL_mixer
112+
cmake \
113+
-DBUILD_SHARED_LIBS=ON \
114+
-DSDLMIXER_SAMPLES=OFF \
115+
-DSDLMIXER_FLAC=OFF \
116+
-DSDLMIXER_GME=OFF \
117+
-DSDLMIXER_MOD=OFF \
118+
-DSDLMIXER_MP3=ON \
119+
-DSDLMIXER_MP3_DRMP3=ON \
120+
-DSDLMIXER_MP3_MPG123=OFF \
121+
-DSDLMIXER_OPUS=OFF \
122+
-DSDLMIXER_VORBIS_STB=OFF \
123+
-DSDLMIXER_VORBIS_VORBISFILE=OFF \
124+
-DSDLMIXER_VORBIS_TREMOR=OFF \
125+
-DSDLMIXER_WAVPACK=OFF \
126+
-DSDL3_DIR=../../libsdldmd/libsdldmd/external/SDL/build \
127+
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
128+
-B build
129+
cmake --build build -- -j${NUM_PROCS}
130+
cd ..
131+
132+
echo "$SDL3_MIXER_EXPECTED_SHA" > cache.txt
133+
134+
cd ..
135+
fi
136+
97137
#
98138
# espeak-ng
99139
#
@@ -255,6 +295,9 @@ cp -r libsdldmd/libsdldmd/third-party/include/SDL3 ../third-party/include/
255295
cp -a SDL3_image/SDL_image/build/libSDL3_image.{so,so.*} ../third-party/runtime-libs/linux-aarch64/
256296
cp -r SDL3_image/SDL_image/include/SDL3_image ../third-party/include/
257297

298+
cp -a SDL3_mixer/SDL_mixer/build/libSDL3_mixer.{so,so.*} ../third-party/runtime-libs/linux-aarch64/
299+
cp -r SDL3_mixer/SDL_mixer/include/SDL3_mixer ../third-party/include/
300+
258301
cp -r espeak-ng/espeak-ng/install/include/espeak-ng ../third-party/include/
259302
cp -a espeak-ng/espeak-ng/install/lib/libespeak-ng*.so* ../third-party/runtime-libs/linux-aarch64/
260303
cp -R espeak-ng/espeak-ng/install/share/espeak-ng-data ../third-party/runtime-libs/linux-aarch64/

platforms/linux/x64/external.sh

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ NUM_PROCS=$(nproc)
88

99
echo "Building libraries..."
1010
echo " SDL_IMAGE_SHA: ${SDL_IMAGE_SHA}"
11+
echo " SDL_MIXER_SHA: ${SDL_MIXER_SHA}"
1112
echo " ESPEAK_NG_SHA: ${ESPEAK_NG_SHA}"
1213
echo " FLITE_SHA: ${FLITE_SHA}"
1314
echo " PINMAME_SHA: ${PINMAME_SHA}"
@@ -28,7 +29,7 @@ mkdir -p external ${CACHE_DIR}
2829
cd external
2930

3031
#
31-
# build libsdldmd, SDL3_image
32+
# build libsdldmd, SDL3_image, SDL3_mixer
3233
#
3334

3435
LIBSDLDMD_EXPECTED_SHA="${LIBSDLDMD_SHA}"
@@ -94,6 +95,45 @@ if [ "${SDL3_IMAGE_EXPECTED_SHA}" != "${SDL3_IMAGE_FOUND_SHA}" ]; then
9495
cd ..
9596
fi
9697

98+
SDL3_MIXER_EXPECTED_SHA="${SDL_MIXER_SHA}-${LIBSDLDMD_SHA}-mp3only-v1"
99+
SDL3_MIXER_FOUND_SHA="$([ -f SDL3_mixer/cache.txt ] && cat SDL3_mixer/cache.txt || echo "")"
100+
101+
if [ "${SDL3_MIXER_EXPECTED_SHA}" != "${SDL3_MIXER_FOUND_SHA}" ]; then
102+
echo "Building SDL3_mixer. Expected: ${SDL3_MIXER_EXPECTED_SHA}, Found: ${SDL3_MIXER_FOUND_SHA}"
103+
104+
rm -rf SDL3_mixer
105+
mkdir SDL3_mixer
106+
cd SDL3_mixer
107+
108+
curl -sL https://github.com/libsdl-org/SDL_mixer/archive/${SDL_MIXER_SHA}.tar.gz -o SDL_mixer-${SDL_MIXER_SHA}.tar.gz
109+
tar xzf SDL_mixer-${SDL_MIXER_SHA}.tar.gz
110+
mv SDL_mixer-${SDL_MIXER_SHA#release-} SDL_mixer 2>/dev/null || mv SDL_mixer-${SDL_MIXER_SHA} SDL_mixer
111+
cd SDL_mixer
112+
cmake \
113+
-DBUILD_SHARED_LIBS=ON \
114+
-DSDLMIXER_SAMPLES=OFF \
115+
-DSDLMIXER_FLAC=OFF \
116+
-DSDLMIXER_GME=OFF \
117+
-DSDLMIXER_MOD=OFF \
118+
-DSDLMIXER_MP3=ON \
119+
-DSDLMIXER_MP3_DRMP3=ON \
120+
-DSDLMIXER_MP3_MPG123=OFF \
121+
-DSDLMIXER_OPUS=OFF \
122+
-DSDLMIXER_VORBIS_STB=OFF \
123+
-DSDLMIXER_VORBIS_VORBISFILE=OFF \
124+
-DSDLMIXER_VORBIS_TREMOR=OFF \
125+
-DSDLMIXER_WAVPACK=OFF \
126+
-DSDL3_DIR=../../libsdldmd/libsdldmd/external/SDL/build \
127+
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
128+
-B build
129+
cmake --build build -- -j${NUM_PROCS}
130+
cd ..
131+
132+
echo "$SDL3_MIXER_EXPECTED_SHA" > cache.txt
133+
134+
cd ..
135+
fi
136+
97137
#
98138
# espeak-ng
99139
#
@@ -253,6 +293,9 @@ cp -r libsdldmd/libsdldmd/third-party/include/SDL3 ../third-party/include/
253293
cp -a SDL3_image/SDL_image/build/libSDL3_image.{so,so.*} ../third-party/runtime-libs/linux-x64/
254294
cp -r SDL3_image/SDL_image/include/SDL3_image ../third-party/include/
255295

296+
cp -a SDL3_mixer/SDL_mixer/build/libSDL3_mixer.{so,so.*} ../third-party/runtime-libs/linux-x64/
297+
cp -r SDL3_mixer/SDL_mixer/include/SDL3_mixer ../third-party/include/
298+
256299
cp -r espeak-ng/espeak-ng/install/include/espeak-ng ../third-party/include/
257300
cp -a espeak-ng/espeak-ng/install/lib/libespeak-ng*.so* ../third-party/runtime-libs/linux-x64/
258301
cp -R espeak-ng/espeak-ng/install/share/espeak-ng-data ../third-party/runtime-libs/linux-x64/

platforms/macos/arm64/external.sh

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ NUM_PROCS=$(sysctl -n hw.ncpu)
88

99
echo "Building libraries..."
1010
echo " SDL_IMAGE_SHA: ${SDL_IMAGE_SHA}"
11+
echo " SDL_MIXER_SHA: ${SDL_MIXER_SHA}"
1112
echo " FLITE_SHA: ${FLITE_SHA}"
1213
echo " ESPEAK_NG_SHA: ${ESPEAK_NG_SHA}"
1314
echo " PINMAME_SHA: ${PINMAME_SHA}"
@@ -99,7 +100,7 @@ if [ -n "${LIBSDLDMD_SHA}" ] && [ "${LIBSDLDMD_EXPECTED_SHA}" != "${LIBSDLDMD_FO
99100
fi
100101

101102
#
102-
# build SDL3_image against the SDL staged by libsdldmd
103+
# build SDL3_image and SDL3_mixer against the SDL staged by libsdldmd
103104
#
104105

105106
SDL3_IMAGE_EXPECTED_SHA="${SDL_IMAGE_SHA}-${LIBSDLDMD_SHA}"
@@ -136,6 +137,46 @@ if [ "${SDL3_IMAGE_EXPECTED_SHA}" != "${SDL3_IMAGE_FOUND_SHA}" ]; then
136137
cd ..
137138
fi
138139

140+
SDL3_MIXER_EXPECTED_SHA="${SDL_MIXER_SHA}-${LIBSDLDMD_SHA}-mp3only-v1"
141+
SDL3_MIXER_FOUND_SHA="$([ -f SDL3_mixer/cache.txt ] && cat SDL3_mixer/cache.txt || echo "")"
142+
143+
if [ "${SDL3_MIXER_EXPECTED_SHA}" != "${SDL3_MIXER_FOUND_SHA}" ]; then
144+
echo "Building SDL3_mixer. Expected: ${SDL3_MIXER_EXPECTED_SHA}, Found: ${SDL3_MIXER_FOUND_SHA}"
145+
146+
rm -rf SDL3_mixer
147+
mkdir SDL3_mixer
148+
cd SDL3_mixer
149+
150+
curl -sL https://github.com/libsdl-org/SDL_mixer/archive/${SDL_MIXER_SHA}.tar.gz -o SDL_mixer-${SDL_MIXER_SHA}.tar.gz
151+
tar xzf SDL_mixer-${SDL_MIXER_SHA}.tar.gz
152+
mv SDL_mixer-${SDL_MIXER_SHA#release-} SDL_mixer 2>/dev/null || mv SDL_mixer-${SDL_MIXER_SHA} SDL_mixer
153+
cd SDL_mixer
154+
cmake \
155+
-DBUILD_SHARED_LIBS=ON \
156+
-DSDLMIXER_SAMPLES=OFF \
157+
-DSDLMIXER_FLAC=OFF \
158+
-DSDLMIXER_GME=OFF \
159+
-DSDLMIXER_MOD=OFF \
160+
-DSDLMIXER_MP3=ON \
161+
-DSDLMIXER_MP3_DRMP3=ON \
162+
-DSDLMIXER_MP3_MPG123=OFF \
163+
-DSDLMIXER_OPUS=OFF \
164+
-DSDLMIXER_VORBIS_STB=OFF \
165+
-DSDLMIXER_VORBIS_VORBISFILE=OFF \
166+
-DSDLMIXER_VORBIS_TREMOR=OFF \
167+
-DSDLMIXER_WAVPACK=OFF \
168+
-DSDL3_DIR=../../libsdldmd/libsdldmd/external/SDL/build \
169+
-DCMAKE_OSX_ARCHITECTURES=arm64 \
170+
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
171+
-B build
172+
cmake --build build -- -j${NUM_PROCS}
173+
cd ..
174+
175+
echo "$SDL3_MIXER_EXPECTED_SHA" > cache.txt
176+
177+
cd ..
178+
fi
179+
139180
#
140181
# espeak-ng
141182
#
@@ -256,6 +297,9 @@ cp -r libsdldmd/libsdldmd/third-party/include/SDL3 ../third-party/include/
256297
cp -a SDL3_image/SDL_image/build/libSDL3_image.{dylib,*.dylib} ../third-party/runtime-libs/macos-arm64/
257298
cp -r SDL3_image/SDL_image/include/SDL3_image ../third-party/include/
258299

300+
cp -a SDL3_mixer/SDL_mixer/build/libSDL3_mixer.{dylib,*.dylib} ../third-party/runtime-libs/macos-arm64/
301+
cp -r SDL3_mixer/SDL_mixer/include/SDL3_mixer ../third-party/include/
302+
259303
mkdir -p ../third-party/include/flite
260304
cp -r flite/flite/install/include/* ../third-party/include/flite/
261305
cp -a flite/flite/install/lib/libflite*.a ../third-party/build-libs/macos-arm64/

0 commit comments

Comments
 (0)