Skip to content

Commit

Permalink
Rewrote music.c to support any number of decode libraries using a com…
Browse files Browse the repository at this point in the history
…piled-in plugin interface

Mix_LoadWAV_RW() can now load sound formats that were previously available only as music.

This is still work in progress. Testing and project updates need to happen on other platforms.
  • Loading branch information
slouken committed Oct 17, 2017
1 parent 095ceec commit a65a84a
Show file tree
Hide file tree
Showing 92 changed files with 5,095 additions and 6,173 deletions.
12 changes: 6 additions & 6 deletions Android.mk
Expand Up @@ -36,7 +36,7 @@ VORBIS_LIBRARY_PATH := external/libvorbisidec-1.2.1
SUPPORT_TIMIDITY ?= true

LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_CFLAGS := -DWAV_MUSIC
LOCAL_CFLAGS := -DMUSIC_WAV

LOCAL_SRC_FILES := $(notdir $(filter-out %/playmus.c %/playwave.c, $(wildcard $(LOCAL_PATH)/*.c))) \

Expand All @@ -47,19 +47,19 @@ LOCAL_SHARED_LIBRARIES := SDL2

ifeq ($(SUPPORT_TIMIDITY),true)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/timidity
LOCAL_CFLAGS += -DMID_MUSIC -DUSE_TIMIDITY_MIDI
LOCAL_CFLAGS += -DMUSIC_MID -DMUSIC_MID_TIMIDITY
LOCAL_SRC_FILES += $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/timidity/*.c))
endif

ifeq ($(SUPPORT_FLAC),true)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FLAC_LIBRARY_PATH)/include
LOCAL_CFLAGS += -DFLAC_MUSIC
LOCAL_CFLAGS += -DMUSIC_FLAC
LOCAL_SHARED_LIBRARIES += libFLAC
endif

ifeq ($(SUPPORT_MOD_MODPLUG),true)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(MODPLUG_LIBRARY_PATH)/src $(LOCAL_PATH)/$(MODPLUG_LIBRARY_PATH)/src/libmodplug
LOCAL_CFLAGS += -DMODPLUG_MUSIC -DMODPLUG_HEADER="<modplug.h>" -DHAVE_SETENV -DHAVE_SINF
LOCAL_CFLAGS += -DMUSIC_MOD_MODPLUG -DMODPLUG_HEADER="<modplug.h>" -DHAVE_SETENV -DHAVE_SINF
LOCAL_SRC_FILES += \
$(MODPLUG_LIBRARY_PATH)/src/fastmix.cpp \
$(MODPLUG_LIBRARY_PATH)/src/load_669.cpp \
Expand Down Expand Up @@ -99,15 +99,15 @@ endif

ifeq ($(SUPPORT_MP3_SMPEG),true)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(SMPEG_LIBRARY_PATH)
LOCAL_CFLAGS += -DMP3_MUSIC
LOCAL_CFLAGS += -DMUSIC_MP3_SMPEG
LOCAL_SHARED_LIBRARIES += smpeg2
endif

ifeq ($(SUPPORT_OGG),true)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(OGG_LIBRARY_PATH)/android \
$(LOCAL_PATH)/$(OGG_LIBRARY_PATH)/include \
$(LOCAL_PATH)/$(VORBIS_LIBRARY_PATH)
LOCAL_CFLAGS += -DOGG_MUSIC -DOGG_USE_TREMOR -DOGG_HEADER="<ivorbisfile.h>"
LOCAL_CFLAGS += -DMUSIC_OGG -DOGG_USE_TREMOR -DOGG_HEADER="<ivorbisfile.h>"
ifeq ($(TARGET_ARCH_ABI),armeabi)
LOCAL_CFLAGS += -D_ARM_ASSEM_
endif
Expand Down
2 changes: 1 addition & 1 deletion Makefile.in
Expand Up @@ -39,7 +39,7 @@ VERSION_OBJECTS = @VERSION_OBJECTS@
PLAYWAVE_OBJECTS = @PLAYWAVE_OBJECTS@
PLAYMUS_OBJECTS = @PLAYMUS_OBJECTS@

DIST = *.txt Android.mk Makefile.in SDL2_mixer.pc.in SDL_mixer.h SDL2_mixer.spec SDL2_mixer.spec.in debian VisualC Xcode Xcode-iOS acinclude autogen.sh build-scripts configure configure.in dynamic_flac.c dynamic_flac.h dynamic_fluidsynth.c dynamic_fluidsynth.h dynamic_modplug.c dynamic_modplug.h dynamic_mod.c dynamic_mod.h dynamic_mp3.c dynamic_mp3.h dynamic_ogg.c dynamic_ogg.h effect_position.c effect_stereoreverse.c effects_internal.c effects_internal.h fluidsynth.c fluidsynth.h external gcc-fat.sh libmikmod-3.1.12.zip load_aiff.c load_aiff.h load_flac.c load_flac.h load_mp3.c load_mp3.h load_ogg.c load_ogg.h load_voc.c load_voc.h mixer.c mixer.h music.c music_cmd.c music_cmd.h music_flac.c music_flac.h music_mad.c music_mad.h music_mod.c music_mod.h music_modplug.c music_modplug.h music_ogg.c music_ogg.h native_midi playmus.c playwave.c timidity wavestream.c wavestream.h version.rc
DIST = *.txt Android.mk Makefile.in SDL2_mixer.pc.in SDL_mixer.h SDL2_mixer.spec SDL2_mixer.spec.in debian VisualC Xcode Xcode-iOS acinclude autogen.sh build-scripts configure configure.in dynamic_flac.c dynamic_flac.h dynamic_fluidsynth.c dynamic_fluidsynth.h dynamic_modplug.c dynamic_modplug.h dynamic_mikmod.c dynamic_mikmod.h dynamic_smpeg.c dynamic_smpeg.h dynamic_ogg.c dynamic_ogg.h effect_position.c effect_stereoreverse.c effects_internal.c effects_internal.h fluidsynth.c fluidsynth.h external gcc-fat.sh load_aiff.c load_aiff.h load_flac.c load_flac.h load_mp3.c load_mp3.h load_ogg.c load_ogg.h load_voc.c load_voc.h mixer.c mixer.h music.c music_cmd.c music_cmd.h music_flac.c music_flac.h music_mad.c music_mad.h music_mikmod.c music_mikmod.h music_modplug.c music_modplug.h music_ogg.c music_ogg.h native_midi playmus.c playwave.c timidity wavestream.c wavestream.h version.rc

LT_AGE = @LT_AGE@
LT_CURRENT = @LT_CURRENT@
Expand Down
4 changes: 2 additions & 2 deletions README.txt
Expand Up @@ -20,11 +20,11 @@ and finally it can load MP3 music using the SMPEG or libmad libraries.

Tremor decoding is disabled by default; you can enable it by passing
--enable-music-ogg-tremor
to configure, or by defining OGG_MUSIC and OGG_USE_TREMOR.
to configure, or by defining MUSIC_OGG and OGG_USE_TREMOR.

libmad decoding is disabled by default; you can enable it by passing
--enable-music-mp3-mad
to configure, or by defining MP3_MAD_MUSIC
to configure, or by defining MUSIC_MP3_MAD
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
WARNING: The license for libmad is GPL, which means that in order to
use it your application must also be GPL!
Expand Down
24 changes: 14 additions & 10 deletions SDL_mixer.h
Expand Up @@ -66,12 +66,11 @@ extern DECLSPEC const SDL_version * SDLCALL Mix_Linked_Version(void);

typedef enum
{
MIX_INIT_FLAC = 0x00000001,
MIX_INIT_MOD = 0x00000002,
MIX_INIT_MODPLUG = 0x00000004,
MIX_INIT_MP3 = 0x00000008,
MIX_INIT_OGG = 0x00000010,
MIX_INIT_FLUIDSYNTH = 0x00000020
MIX_INIT_FLAC = 0x00000001,
MIX_INIT_MOD = 0x00000002,
MIX_INIT_MP3 = 0x00000008,
MIX_INIT_OGG = 0x00000010,
MIX_INIT_MID = 0x00000020,
} MIX_InitFlags;

/* Loads dynamic libraries and prepares them for use. Flags should be
Expand All @@ -97,7 +96,7 @@ extern DECLSPEC void SDLCALL Mix_Quit(void);
#define MIX_DEFAULT_FORMAT AUDIO_S16MSB
#endif
#define MIX_DEFAULT_CHANNELS 2
#define MIX_MAX_VOLUME 128 /* Volume of a chunk */
#define MIX_MAX_VOLUME SDL_MIX_MAXVOLUME /* Volume of a chunk */

/* The internal format for an audio chunk */
typedef struct Mix_Chunk {
Expand All @@ -114,6 +113,7 @@ typedef enum {
MIX_FADING_IN
} Mix_Fading;

/* These are types of music files (not libraries used to load them) */
typedef enum {
MUS_NONE,
MUS_CMD,
Expand All @@ -122,10 +122,9 @@ typedef enum {
MUS_MID,
MUS_OGG,
MUS_MP3,
MUS_MP3_MAD,
MUS_MP3_MPG,
MUS_MP3_MAD_UNUSED,
MUS_FLAC,
MUS_MODPLUG
MUS_MODPLUG_UNUSED
} Mix_MusicType;

/* The internal format for a music chunk interpreted via mikmod */
Expand Down Expand Up @@ -192,8 +191,10 @@ extern DECLSPEC void SDLCALL Mix_FreeMusic(Mix_Music *music);
*/
extern DECLSPEC int SDLCALL Mix_GetNumChunkDecoders(void);
extern DECLSPEC const char * SDLCALL Mix_GetChunkDecoder(int index);
extern DECLSPEC SDL_bool SDLCALL Mix_HasChunkDecoder(const char *name);
extern DECLSPEC int SDLCALL Mix_GetNumMusicDecoders(void);
extern DECLSPEC const char * SDLCALL Mix_GetMusicDecoder(int index);
extern DECLSPEC SDL_bool SDLCALL Mix_HasMusicDecoder(const char *name);

/* Find out the music format of a mixer music, or the currently playing
music, if 'music' is NULL.
Expand Down Expand Up @@ -625,6 +626,7 @@ extern DECLSPEC void SDLCALL Mix_CloseAudio(void);
/* We'll use SDL for reporting errors */
#define Mix_SetError SDL_SetError
#define Mix_GetError SDL_GetError
#define Mix_ClearError SDL_ClearError

/* Ends C function definitions when using C++ */
#ifdef __cplusplus
Expand All @@ -633,3 +635,5 @@ extern DECLSPEC void SDLCALL Mix_CloseAudio(void);
#include "close_code.h"

#endif /* SDL_MIXER_H_ */

/* vi: set ts=4 sw=4 expandtab: */
76 changes: 76 additions & 0 deletions VisualC-WinRT/UWP_VS2015/SDL_mixer-UWP.sln
@@ -0,0 +1,76 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL2_mixer-UWP", "SDL_mixer-UWP.vcxproj", "{18665277-E558-4484-93F4-E4DC7BB614CB}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libogg_dynamic-UWP", "libogg_dynamic-UWP.vcxproj", "{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libvorbis_dynamic-UWP", "libvorbis_dynamic-UWP.vcxproj", "{6B6C1F59-6A82-4097-8907-04DF5C95D014}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libvorbisfile_dynamic-UWP", "libvorbisfile_dynamic-UWP.vcxproj", "{70EF3B8F-6AAF-401B-9818-3371E950E73C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|ARM = Release|ARM
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{18665277-E558-4484-93F4-E4DC7BB614CB}.Debug|ARM.ActiveCfg = Debug|ARM
{18665277-E558-4484-93F4-E4DC7BB614CB}.Debug|ARM.Build.0 = Debug|ARM
{18665277-E558-4484-93F4-E4DC7BB614CB}.Debug|x64.ActiveCfg = Debug|x64
{18665277-E558-4484-93F4-E4DC7BB614CB}.Debug|x64.Build.0 = Debug|x64
{18665277-E558-4484-93F4-E4DC7BB614CB}.Debug|x86.ActiveCfg = Debug|Win32
{18665277-E558-4484-93F4-E4DC7BB614CB}.Debug|x86.Build.0 = Debug|Win32
{18665277-E558-4484-93F4-E4DC7BB614CB}.Release|ARM.ActiveCfg = Release|ARM
{18665277-E558-4484-93F4-E4DC7BB614CB}.Release|ARM.Build.0 = Release|ARM
{18665277-E558-4484-93F4-E4DC7BB614CB}.Release|x64.ActiveCfg = Release|x64
{18665277-E558-4484-93F4-E4DC7BB614CB}.Release|x64.Build.0 = Release|x64
{18665277-E558-4484-93F4-E4DC7BB614CB}.Release|x86.ActiveCfg = Release|Win32
{18665277-E558-4484-93F4-E4DC7BB614CB}.Release|x86.Build.0 = Release|Win32
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Debug|ARM.ActiveCfg = Debug|ARM
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Debug|ARM.Build.0 = Debug|ARM
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Debug|x64.ActiveCfg = Debug|x64
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Debug|x64.Build.0 = Debug|x64
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Debug|x86.ActiveCfg = Debug|Win32
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Debug|x86.Build.0 = Debug|Win32
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Release|ARM.ActiveCfg = Release|ARM
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Release|ARM.Build.0 = Release|ARM
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Release|x64.ActiveCfg = Release|x64
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Release|x64.Build.0 = Release|x64
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Release|x86.ActiveCfg = Release|Win32
{B14F8B7F-C9FF-4FD3-B328-7C68AB801E85}.Release|x86.Build.0 = Release|Win32
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Debug|ARM.ActiveCfg = Debug|ARM
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Debug|ARM.Build.0 = Debug|ARM
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Debug|x64.ActiveCfg = Debug|x64
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Debug|x64.Build.0 = Debug|x64
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Debug|x86.ActiveCfg = Debug|Win32
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Debug|x86.Build.0 = Debug|Win32
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Release|ARM.ActiveCfg = Release|ARM
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Release|ARM.Build.0 = Release|ARM
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Release|x64.ActiveCfg = Release|x64
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Release|x64.Build.0 = Release|x64
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Release|x86.ActiveCfg = Release|Win32
{6B6C1F59-6A82-4097-8907-04DF5C95D014}.Release|x86.Build.0 = Release|Win32
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Debug|ARM.ActiveCfg = Debug|ARM
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Debug|ARM.Build.0 = Debug|ARM
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Debug|x64.ActiveCfg = Debug|x64
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Debug|x64.Build.0 = Debug|x64
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Debug|x86.ActiveCfg = Debug|Win32
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Debug|x86.Build.0 = Debug|Win32
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Release|ARM.ActiveCfg = Release|ARM
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Release|ARM.Build.0 = Release|ARM
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Release|x64.ActiveCfg = Release|x64
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Release|x64.Build.0 = Release|x64
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Release|x86.ActiveCfg = Release|Win32
{70EF3B8F-6AAF-401B-9818-3371E950E73C}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

0 comments on commit a65a84a

Please sign in to comment.