Skip to content

Commit

Permalink
SDL_mixer: New package
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexpux committed Nov 3, 2015
1 parent 5fadc37 commit 941b8ac
Show file tree
Hide file tree
Showing 5 changed files with 223 additions and 0 deletions.
70 changes: 70 additions & 0 deletions mingw-w64-SDL_mixer/PKGBUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Maintainer: Alexey Pavlov <[email protected]>

_realname=SDL_mixer
pkgbase=mingw-w64-${_realname}
pkgname=${MINGW_PACKAGE_PREFIX}-${_realname}
pkgver=1.2.12
pkgrel=1
pkgdesc="A simple multi-channel audio mixer (mingw-w64)"
arch=('any')
url="http://www.libsdl.org/projects/SDL_mixer/"
license=('custom')
depends=("${MINGW_PACKAGE_PREFIX}-SDL"
"${MINGW_PACKAGE_PREFIX}-libvorbis"
"${MINGW_PACKAGE_PREFIX}-libmikmod"
"${MINGW_PACKAGE_PREFIX}-smpeg"
)
makedepends=("${MINGW_PACKAGE_PREFIX}-gcc"
"${MINGW_PACKAGE_PREFIX}-pkg-config"
"${MINGW_PACKAGE_PREFIX}-fluidsynth")
optdepends=("${MINGW_PACKAGE_PREFIX}-fluidsynth: MIDI software synth, replaces built-in timidity")
source=(http://www.libsdl.org/projects/SDL_mixer/release/${_realname}-${pkgver}.tar.gz
mikmod1.patch
mikmod2.patch
fluidsynth-volume.patch
double-free-crash.patch)
md5sums=('e03ff73d77a55e3572ad0217131dc4a1'
'c335d4ff1fe86950d1fc730745c9c96d'
'd13d98fef8ec51167a370fa7976a7a7f'
'eceb06e3a8b31fee300d7f33478401d4'
'b38c1b23751ca95631badeb9327d085e')
noextract=(${_realname}-${pkgver}.tar.gz)

prepare() {
[[ -d ${srcdir}/${_realname}-${pkgver} ]] && rm -rf ${srcdir}/${_realname}-${pkgver}
tar -xzf ${srcdir}/${_realname}-${pkgver}.tar.gz -C ${srcdir} || true

cd "${srcdir}/${_realname}-${pkgver}"

patch -Np1 -i ${srcdir}/mikmod1.patch
patch -Np1 -i ${srcdir}/mikmod2.patch
patch -Np1 -i ${srcdir}/fluidsynth-volume.patch
patch -Np1 -i ${srcdir}/double-free-crash.patch

#sed -e "/CONFIG_FILE_ETC/s|/etc/timidity.cfg|/etc/timidity++/timidity.cfg|" \
# -e "/DEFAULT_PATH/s|/etc/timidity|/etc/timidity++|" \
# -e "/DEFAULT_PATH2/s|/usr/local/lib/timidity|/usr/lib/timidity|" \
# -i timidity/config.h
}

build() {
[[ -d "${srcdir}/build-${MINGW_CHOST}" ]] && rm -rf "${srcdir}/build-${MINGW_CHOST}"
mkdir -p "${srcdir}/build-${MINGW_CHOST}"
cd "${srcdir}/build-${MINGW_CHOST}"
../${_realname}-${pkgver}/configure \
--prefix=${MINGW_PREFIX} \
--build=${MINGW_CHOST} \
--host=${MINGW_CHOST} \
--enable-shared \
--enable-static

make
}

package() {
cd "${srcdir}/build-${MINGW_CHOST}/"

make DESTDIR="${pkgdir}/" install
install -Dm644 "${srcdir}/${_realname}-${pkgver}/COPYING" \
"${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE"
}
31 changes: 31 additions & 0 deletions mingw-w64-SDL_mixer/double-free-crash.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

# HG changeset patch
# User Sam Lantinga <[email protected]>
# Date 1329087437 18000
# Node ID 2d713670db9b832b0c5aa700824900bc1fc3c3cd
# Parent df72f22b4b411ad4b08f924329678aabd5ac97d6
Fixed 1418 - crash on double free if loading WAV file failed

diff -r df72f22b4b41 -r 2d713670db9b mixer.c
--- a/mixer.c Mon Jan 30 21:41:45 2012 -0500
+++ b/mixer.c Sun Feb 12 17:57:17 2012 -0500
@@ -610,13 +610,15 @@
break;
default:
SDL_SetError("Unrecognized sound file type");
- return(0);
+ if ( freesrc ) {
+ SDL_RWclose(src);
+ }
+ loaded = NULL;
+ break;
}
if ( !loaded ) {
+ /* The individual loaders have closed src if needed */
SDL_free(chunk);
- if ( freesrc ) {
- SDL_RWclose(src);
- }
return(NULL);
}

22 changes: 22 additions & 0 deletions mingw-w64-SDL_mixer/fluidsynth-volume.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

# HG changeset patch
# User James Le Cuirot <[email protected]>
# Date 1330896767 0
# Node ID c92001a2c18f628698c58aa4e05a7335d10d0e9e
# Parent 2d713670db9b832b0c5aa700824900bc1fc3c3cd
Raise the maximum FluidSynth gain from 0.8 to 1.2 because apparently the former is too quiet in some cases.

diff -r 2d713670db9b -r c92001a2c18f fluidsynth.c
--- a/fluidsynth.c Sun Feb 12 17:57:17 2012 -0500
+++ b/fluidsynth.c Sun Mar 04 21:32:47 2012 +0000
@@ -176,8 +176,8 @@

void fluidsynth_setvolume(FluidSynthMidiSong *song, int volume)
{
- /* FluidSynth's default is 0.2. Make 0.8 the maximum. */
- fluidsynth.fluid_synth_set_gain(song->synth, (float) (volume * 0.00625));
+ /* FluidSynth's default is 0.2. Make 1.2 the maximum. */
+ fluidsynth.fluid_synth_set_gain(song->synth, (float) (volume * 1.2 / MIX_MAX_VOLUME));
}

int fluidsynth_playsome(FluidSynthMidiSong *song, void *dest, int dest_len)
66 changes: 66 additions & 0 deletions mingw-w64-SDL_mixer/mikmod1.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@

# HG changeset patch
# User Sam Lantinga <[email protected]>
# Date 1342998807 25200
# Node ID 56cad6484b04f83c8d42428c755a046678506436
# Parent c92001a2c18f628698c58aa4e05a7335d10d0e9e
Paul P Komkoff Jr fixed malloc/free mismatch in the MikMod driver

diff -r c92001a2c18f -r 56cad6484b04 CHANGES
--- a/CHANGES Sun Mar 04 21:32:47 2012 +0000
+++ b/CHANGES Sun Jul 22 16:13:27 2012 -0700
@@ -1,3 +1,7 @@
+1.2.13:
+Paul P Komkoff Jr - Sun Jul 22 16:12:28 PDT 2012
+ * Fixed malloc/free mismatch in the MikMod driver
+
1.2.12:
Sam Lantinga - Sat Jan 14 22:00:29 2012 -0500
* Fixed seek offset with SMPEG (was relative, should be absolute)
diff -r c92001a2c18f -r 56cad6484b04 dynamic_mod.c
--- a/dynamic_mod.c Sun Mar 04 21:32:47 2012 +0000
+++ b/dynamic_mod.c Sun Jul 22 16:13:27 2012 -0700
@@ -93,6 +93,13 @@
SDL_UnloadObject(mikmod.handle);
return -1;
}
+ mikmod.MikMod_free =
+ (void (*)(void*))
+ SDL_LoadFunction(mikmod.handle, "MikMod_free");
+ if ( mikmod.MikMod_free == NULL ) {
+ SDL_UnloadObject(mikmod.handle);
+ return -1;
+ }
mikmod.Player_Active =
(BOOL (*)(void))
SDL_LoadFunction(mikmod.handle, "Player_Active");
diff -r c92001a2c18f -r 56cad6484b04 dynamic_mod.h
--- a/dynamic_mod.h Sun Mar 04 21:32:47 2012 +0000
+++ b/dynamic_mod.h Sun Jul 22 16:13:27 2012 -0700
@@ -35,6 +35,7 @@
void (*MikMod_RegisterDriver)(struct MDRIVER*);
int* MikMod_errno;
char* (*MikMod_strerror)(int);
+ void (*MikMod_free)(void*);
BOOL (*Player_Active)(void);
void (*Player_Free)(MODULE*);
MODULE* (*Player_LoadGeneric)(MREADER*,int,BOOL);
diff -r c92001a2c18f -r 56cad6484b04 music_mod.c
--- a/music_mod.c Sun Mar 04 21:32:47 2012 +0000
+++ b/music_mod.c Sun Jul 22 16:13:27 2012 -0700
@@ -109,13 +109,13 @@

list = mikmod.MikMod_InfoDriver();
if ( list )
- free(list);
+ mikmod.MikMod_free(list);
else
mikmod.MikMod_RegisterDriver(mikmod.drv_nos);

list = mikmod.MikMod_InfoLoader();
if ( list )
- free(list);
+ mikmod.MikMod_free(list);
else
mikmod.MikMod_RegisterAllLoaders();

34 changes: 34 additions & 0 deletions mingw-w64-SDL_mixer/mikmod2.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@

# HG changeset patch
# User Sam Lantinga <[email protected]>
# Date 1343000017 25200
# Node ID 2ebb0d016f277f7f643d8a66ed0e1099e10d1fba
# Parent 56cad6484b04f83c8d42428c755a046678506436
Fixed normal linking with libmikmod and linking with earlier versions of libmikmod.

diff -r 56cad6484b04 -r 2ebb0d016f27 dynamic_mod.c
--- a/dynamic_mod.c Sun Jul 22 16:13:27 2012 -0700
+++ b/dynamic_mod.c Sun Jul 22 16:33:37 2012 -0700
@@ -97,8 +97,8 @@
(void (*)(void*))
SDL_LoadFunction(mikmod.handle, "MikMod_free");
if ( mikmod.MikMod_free == NULL ) {
- SDL_UnloadObject(mikmod.handle);
- return -1;
+ /* libmikmod 3.1 and earlier doesn't have it */
+ mikmod.MikMod_free = free;
}
mikmod.Player_Active =
(BOOL (*)(void))
@@ -246,6 +246,11 @@
mikmod.MikMod_RegisterDriver = MikMod_RegisterDriver;
mikmod.MikMod_errno = &MikMod_errno;
mikmod.MikMod_strerror = MikMod_strerror;
+#if LIBMIKMOD_VERSION < ((3<<16)|(2<<8))
+ mikmod.MikMod_free = free;
+#else
+ mikmod.MikMod_free = MikMod_free;
+#endif
mikmod.Player_Active = Player_Active;
mikmod.Player_Free = Player_Free;
mikmod.Player_LoadGeneric = Player_LoadGeneric;

0 comments on commit 941b8ac

Please sign in to comment.