Added new SDL_Mixer-X features to compensate for the upcoming/already done SDL_Mixer-X upgrade

This commit is contained in:
StarManiaKG 2024-03-21 22:00:04 -04:00
parent c4dbf42ded
commit 5488936366
11 changed files with 438 additions and 52 deletions

View file

@ -90,10 +90,26 @@ boolean I_SongPaused(void)
// MUSIC EFFECTS
/// ------------------------
boolean I_SetSongSpeed(float speed)
void I_SetSongSpeed(float speed) // StarManiaKG: was originally boolean, no longer needs to be //
{
(void)speed;
return false;
return;
}
float I_GetSongSpeed(void)
{
return 0.0f;
}
void I_SetSongPitch(float pitch)
{
(void)pitch;
return;
}
float I_GetSongPitch(void)
{
return 0.0f;
}
/// ------------------------

View file

@ -89,10 +89,26 @@ boolean I_SongPaused(void)
// MUSIC EFFECTS
/// ------------------------
boolean I_SetSongSpeed(float speed)
void I_SetSongSpeed(float speed) // StarManiaKG: was originally boolean, no longer needs to be //
{
(void)speed;
return false;
return;
}
float I_GetSongSpeed(void)
{
return 0.0f;
}
void I_SetSongPitch(float pitch)
{
(void)pitch;
return;
}
float I_GetSongPitch(void)
{
return 0.0f;
}
/// ------------------------

View file

@ -143,7 +143,11 @@ boolean I_SongPaused(void);
// MUSIC EFFECTS
/// ------------------------
boolean I_SetSongSpeed(float speed);
void I_SetSongSpeed(float speed); // StarManiaKG: was originally boolean, no longer needs to be //
float I_GetSongSpeed(void);
void I_SetSongPitch(float pitch);
float I_GetSongPitch(void);
/// ------------------------
// MUSIC SEEKING

View file

@ -3377,6 +3377,57 @@ static int lib_sSpeedMusic(lua_State *L)
return 0;
}
static int lib_sGetSpeedMusic(lua_State *L)
{
player_t *player = NULL;
//NOHUD
if (!lua_isnone(L, 1) && lua_isuserdata(L, 1))
{
player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
if (!player)
return LUA_ErrInvalid(L, "player_t");
}
if (!player || P_IsLocalPlayer(player))
lua_pushinteger(L, S_GetSpeedMusic());
else
lua_pushnil(L);
return 1;
}
static int lib_sPitchMusic(lua_State *L)
{
fixed_t fixedpitch = luaL_checkfixed(L, 1);
float pitch = FIXED_TO_FLOAT(fixedpitch);
player_t *player = NULL;
//NOHUD
if (!lua_isnone(L, 2) && lua_isuserdata(L, 2))
{
player = *((player_t **)luaL_checkudata(L, 2, META_PLAYER));
if (!player)
return LUA_ErrInvalid(L, "player_t");
}
if (!player || P_IsLocalPlayer(player))
S_PitchMusic(pitch);
return 0;
}
static int lib_sGetPitchMusic(lua_State *L)
{
player_t *player = NULL;
//NOHUD
if (!lua_isnone(L, 1) && lua_isuserdata(L, 1))
{
player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
if (!player)
return LUA_ErrInvalid(L, "player_t");
}
if (!player || P_IsLocalPlayer(player))
lua_pushinteger(L, S_GetPitchMusic());
else
lua_pushnil(L);
return 1;
}
static int lib_sStopMusic(lua_State *L)
{
player_t *player = NULL;
@ -3413,6 +3464,59 @@ static int lib_sSetInternalMusicVolume(lua_State *L)
return 1;
}
static int lib_sGetInternalMusicVolume(lua_State *L)
{
player_t *player = NULL;
//NOHUD
if (!lua_isnone(L, 1) && lua_isuserdata(L, 1))
{
player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
if (!player)
return LUA_ErrInvalid(L, "player_t");
}
if (!player || P_IsLocalPlayer(player))
lua_pushinteger(L, (UINT32)S_GetInternalMusicVolume());
else
lua_pushnil(L);
}
static int lib_sSetInternalSfxVolume(lua_State *L)
{
UINT32 sfxvolume = (UINT32)luaL_checkinteger(L, 1);
player_t *player = NULL;
//NOHUD
if (!lua_isnone(L, 2) && lua_isuserdata(L, 2))
{
player = *((player_t **)luaL_checkudata(L, 2, META_PLAYER));
if (!player)
return LUA_ErrInvalid(L, "player_t");
}
if (!player || P_IsLocalPlayer(player))
{
S_SetInternalSfxVolume(sfxvolume);
lua_pushboolean(L, true);
}
else
lua_pushnil(L);
return 1;
}
static int lib_sGetInternalSfxVolume(lua_State *L)
{
player_t *player = NULL;
//NOHUD
if (!lua_isnone(L, 1) && lua_isuserdata(L, 1))
{
player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
if (!player)
return LUA_ErrInvalid(L, "player_t");
}
if (!player || P_IsLocalPlayer(player))
lua_pushinteger(L, (UINT32)S_GetInternalSfxVolume());
else
lua_pushnil(L);
}
static int lib_sStopFadingMusic(lua_State *L)
{
player_t *player = NULL;
@ -4592,8 +4696,14 @@ static luaL_Reg lib[] = {
{"S_StopSoundByID",lib_sStopSoundByID},
{"S_ChangeMusic",lib_sChangeMusic},
{"S_SpeedMusic",lib_sSpeedMusic},
{"S_GetSpeedMusic",lib_sGetSpeedMusic},
{"S_PitchMusic",lib_sPitchMusic},
{"S_GetPitchMusic",lib_sGetPitchMusic},
{"S_StopMusic",lib_sStopMusic},
{"S_SetInternalMusicVolume", lib_sSetInternalMusicVolume},
{"S_GetInternalMusicVolume", lib_sGetInternalMusicVolume},
{"S_SetInternalSfxVolume", lib_sSetInternalSfxVolume},
{"S_GetInternalSfxVolume", lib_sGetInternalSfxVolume},
{"S_StopFadingMusic",lib_sStopFadingMusic},
{"S_FadeMusic",lib_sFadeMusic},
{"S_FadeOutStopMusic",lib_sFadeOutStopMusic},

View file

@ -8081,7 +8081,11 @@ static void M_DrawSoundTest(void)
}
else
{
V_DrawString(x, y, (t == st_sel ? V_YELLOWMAP : 0)|V_ALLOWLOWERCASE, soundtestdefs[t]->title);
if (strlen(soundtestdefs[t]->title) < 17)
V_DrawString(x, y, (t == st_sel ? V_YELLOWMAP : 0)|V_ALLOWLOWERCASE, soundtestdefs[t]->title);
else
V_DrawThinString(x, y, (t == st_sel ? V_YELLOWMAP : 0)|V_ALLOWLOWERCASE, soundtestdefs[t]->title));
if (curplaying == soundtestdefs[t])
{
V_DrawFill(165+140-9, y-4, 8, 16, 150);

View file

@ -4257,7 +4257,7 @@ void A_SuperSneakers(mobj_t *actor)
if (P_IsLocalPlayer(player) && !player->powers[pw_super])
{
if (S_SpeedMusic(0.0f) && (mapheaderinfo[gamemap-1]->levelflags & LF_SPEEDMUSIC))
if (mapheaderinfo[gamemap-1]->levelflags & LF_SPEEDMUSIC)
S_SpeedMusic(1.4f);
else
P_PlayJingle(player, JT_SHOES);

View file

@ -584,8 +584,8 @@ static inline void P_DoSpecialStageStuff(void)
players[i].powers[pw_underwater] = players[i].powers[pw_spacetime] = 0;
}
//if (sstimer < 15*TICRATE+6 && sstimer > 7 && (mapheaderinfo[gamemap-1]->levelflags & LF_SPEEDMUSIC))
//S_SpeedMusic(1.4f);
if (sstimer < 15*TICRATE+6 && sstimer > 7 && (mapheaderinfo[gamemap-1]->levelflags & LF_SPEEDMUSIC))
S_SpeedMusic(1.4f);
if (sstimer && !objectplacing)
{

View file

@ -165,6 +165,10 @@ static INT32 numofchannels = 0;
caption_t closedcaptions[NUMCAPTIONS];
// allow the grabbing of internal volumes
INT32 internal_volume = min(max(100, 0), 100);
INT32 internal_sfx_volume = 0;
void S_ResetCaptions(void)
{
UINT8 i;
@ -1787,9 +1791,10 @@ boolean S_MusicExists(const char *mname, boolean checkMIDI, boolean checkDigi)
/// Music Effects
/// ------------------------
boolean S_SpeedMusic(float speed)
void S_SpeedMusic(float speed) // StarManiaKG: was originally boolean, no longer needs to be //
{
return I_SetSongSpeed(speed);
I_SetSongSpeed(speed);
return;
}
/// ------------------------
@ -2402,6 +2407,36 @@ void S_SetInternalMusicVolume(INT32 volume)
I_SetInternalMusicVolume(min(max(volume, 0), 100));
}
INT32 S_GetInternalMusicVolume(void)
{
internal_volume = min(max(volume, 0), 100);
I_SetInternalMusicVolume((UINT8)internal_volume);
}
void S_SetInternalSfxVolume(INT32 volume)
{
if (volume < 0 || volume > 31)
{
CONS_Alert(CONS_WARNING, "sfxvolume should be between 0-31\n");
volume = (volume < 0 ? 0 : 31);
}
internal_sfx_volume = volume;
#ifdef HW3SOUND
hws_mode == HWS_DEFAULT_MODE ? I_SetSfxVolume(internal_sfx_volume&0x1F) : HW3S_SetSfxVolume(internal_sfx_volume&0x1F);
#else
// now hardware volume
I_SetSfxVolume(internal_sfx_volume&0x1F);
#endif
}
INT32 S_GetInternalSfxVolume(void)
{
if (!internal_sfx_volume && cv_soundvolume.value)
internal_sfx_volume = cv_soundvolume.value;
return internal_sfx_volume;
}
void S_StopFadingMusic(void)
{
I_StopFadingSong();
@ -2458,7 +2493,7 @@ static void Command_Tunes_f(void)
if (argc < 2) //tunes slot ...
{
CONS_Printf("tunes <name/num> [track] [speed] [position] / <-show> / <-default> / <-none>:\n");
CONS_Printf("tunes <name/num> [track] [speed] [pitch] [position] / <-show> / <-default> / <-none>:\n");
CONS_Printf(M_GetText("Play an arbitrary music lump. If a map number is used, 'MAP##M' is played.\n"));
CONS_Printf(M_GetText("If the format supports multiple songs, you can specify which one to play.\n\n"));
CONS_Printf(M_GetText("* With \"-show\", shows the currently playing tune and track.\n"));
@ -2496,8 +2531,8 @@ static void Command_Tunes_f(void)
strncpy(mapmusname, tunearg, 7);
mapmusname[6] = 0;
if (argc > 4)
position = (UINT32)atoi(COM_Argv(4));
if (argc > 5) // StarManiaKG: shifted up by one to account for the new pitch argument
position = (UINT32)atoi(COM_Argv(5));
mapmusflags = (track & MUSIC_TRACKMASK);
mapmusposition = position;
@ -2510,6 +2545,13 @@ static void Command_Tunes_f(void)
if (speed > 0.0f)
S_SpeedMusic(speed);
}
if (argc > 4)
{
float pitch = (float)atof(COM_Argv(4));
if (pitch > 0.0f)
S_PitchMusic(pitch);
}
}
static void Command_RestartAudio_f(void)
@ -2621,7 +2663,8 @@ void GameMIDIMusic_OnChange(void)
void MusicPref_OnChange(void)
{
if (M_CheckParm("-nomusic") || M_CheckParm("-noaudio") ||
M_CheckParm("-nomidimusic") || M_CheckParm("-nodigmusic"))
M_CheckParm("-nomidimusic") || M_CheckParm("-nodigmusic") ||
!sound_started) // StarManiaKG: prevents weird errors from popping up until the sound engine is actually started
return;
if (Playing())

View file

@ -177,7 +177,14 @@ boolean S_MusicExists(const char *mname, boolean checkMIDI, boolean checkDigi);
//
// Set Speed of Music
boolean S_SpeedMusic(float speed);
void S_SpeedMusic(float speed); // StarManiaKG: was originally boolean, no longer needs to be //
// Get Speed of Music
float S_GetSpeedMusic(void);
// Set Pitch of Music
void S_PitchMusic(float pitch);
// Get Pitch of Music
float S_GetPitchMusic(void);
// Music definitions
typedef struct musicdef_s
@ -315,6 +322,14 @@ void S_SetMusicVolume(INT32 digvolume, INT32 seqvolume);
#define S_SetMIDIMusicVolume(a) S_SetMusicVolume(-1,a)
#define S_InitMusicVolume() S_SetMusicVolume(-1,-1)
// Grab Internal Music Speed
INT32 S_GetInternalMusicVolume(void);
// Set Internal SFX Speed
void S_SetInternalSfxVolume(INT32 volume);
// Grab Internal SFX Speed
INT32 S_GetInternalSfxVolume(void);
INT32 S_OriginPlaying(void *origin);
INT32 S_IdPlaying(sfxenum_t id);
INT32 S_SoundPlaying(void *origin, sfxenum_t id);

View file

@ -94,6 +94,7 @@ UINT8 sound_started = false;
static Mix_Music *music;
static UINT8 music_volume, sfx_volume, internal_volume;
static float music_speed, music_pitch;
static float loop_point;
static float song_length; // length in seconds
static boolean songpaused;
@ -125,10 +126,75 @@ static int result;
#endif
#ifdef HAVE_MIXERX
//
// Timdity Handlers (By StarManiaKG) //
// (You can tell which is Timidity based :p)
//
#if defined(__WIN32__)
#define TIMIDITY_CFG "sf2/timidity"
#elif defined(__OS2__)
#define TIMIDITY_CFG "/@unixroot/etc/timidity"
#else
#define TIMIDITY_CFG "/etc/timidity"
#endif
static int I_SetTimidityCFG(const char *path)
{
#if SDL_MIXER_VERSION_ATLEAST(2,0,4)
return Mix_SetTimidityCfg(path);
#else
return Mix_Timidity_addToPathList(path);
#endif
}
static const char *I_GetTimidityCFG(void)
{
#if SDL_MIXER_VERSION_ATLEAST(2,0,4)
return Mix_GetTimidityCfg();
#else
static const char *CFGPaths[] = {
va("%s/timidity.cfg", cv_miditimiditypath.string),
TIMIDITY_CFG,
NULL
}
for (INT32 i = 0; CFGPaths[i]; i++)
{
SDL_RWops *rw = SDL_RWFromFile(CFGPaths[i], "r");
if (rw != NULL)
{
SDL_RWclose(rw);
return CFGPaths[i];
}
}
return NULL;
#endif
}
static void I_ControlTimidityCFG(void)
{
const char *path = va("%s/timidity.cfg", cv_miditimiditypath.string);
if (Mix_GetMidiPlayer() != MIDI_Timidity || (I_SongType() != MU_NONE && I_SongType() != MU_MID_EX))
return;
if (!I_SetTimidityCFG(path) && (I_GetTimidityCFG() != NULL && stricmp(I_GetTimidityCFG(), path))) // == 0 means error
CONS_Alert(CONS_ERROR, "Timdity CFG error: %s\n", Mix_GetError());
else
{
if (I_GetTimidityCFG() != NULL && stricmp(I_GetTimidityCFG(), path))
S_StartEx(true);
}
}
static void Midiplayer_Onchange(void)
{
boolean restart = false;
const char *fluidsynthsoundfonts = Mix_GetSoundFonts();
const char *timiditycfgs;
if (I_SongType() != MU_NONE && I_SongType() != MU_MID_EX && I_SongType() != MU_MID)
return;
@ -140,18 +206,19 @@ static void Midiplayer_Onchange(void)
restart = true;
}
if (!Mix_GetSoundFonts() || stricmp(Mix_GetSoundFonts(), cv_midisoundfontpath.string))
if (fluidsynthsoundfonts != NULL && stricmp(fluidsynthsoundfonts, cv_midisoundfontpath.string))
{
if (!Mix_SetSoundFonts(cv_midisoundfontpath.string)) // == 0 means error
CONS_Alert(CONS_ERROR, "Sound font error: %s", Mix_GetError());
else
restart = true;
}
#if SDL_MIXER_VERSION_ATLEAST(2,5,0)
Mix_SetTimidityCfg(cv_miditimiditypath.string);
#else
Mix_Timidity_addToPathList(cv_miditimiditypath.string);
#endif
I_ControlTimidityCFG();
timiditycfgs = I_GetTimidityCFG();
if (timiditycfgs != NULL && stricmp(timiditycfgs, va("%s/timidity.cfg", cv_miditimiditypath.string)))
restart = true;
if (restart)
S_StartEx(true);
@ -202,8 +269,8 @@ static void MidiSoundfontPath_Onchange(void)
static CV_PossibleValue_t midiplayer_cons_t[] = {{MIDI_OPNMIDI, "OPNMIDI"}, {MIDI_Fluidsynth, "Fluidsynth"}, {MIDI_Timidity, "Timidity"}, {MIDI_Native, "Native"}, {0, NULL}};
consvar_t cv_midiplayer = CVAR_INIT ("midiplayer", "OPNMIDI" /*MIDI_OPNMIDI*/, CV_CALL|CV_NOINIT|CV_SAVE, midiplayer_cons_t, Midiplayer_Onchange);
consvar_t cv_midisoundfontpath = CVAR_INIT ("midisoundfont", "sf2/8bitsf.SF2", CV_CALL|CV_NOINIT|CV_SAVE, NULL, MidiSoundfontPath_Onchange);
consvar_t cv_miditimiditypath = CVAR_INIT ("midisoundbank", "./timidity", CV_SAVE, NULL, NULL);
#endif
consvar_t cv_miditimiditypath = CVAR_INIT ("midisoundbank", TIMIDITY_CFG, CV_CALL|CV_NOINIT|CV_SAVE, NULL, I_ControlTimidityCFG);
#endif // HAVE_MIXERX
static void var_cleanup(void)
{
@ -211,6 +278,8 @@ static void var_cleanup(void)
music_bytes = fading_source = fading_target =\
fading_timer = fading_duration = 0;
music_speed = music_pitch = 1.0f;
songpaused = is_looping =\
is_fading = false;
@ -289,11 +358,7 @@ void I_StartupSound(void)
#ifdef HAVE_MIXERX
Mix_SetMidiPlayer(cv_midiplayer.value);
Mix_SetSoundFonts(cv_midisoundfontpath.string);
#if SDL_MIXER_VERSION_ATLEAST(2,5,0)
Mix_SetTimidityCfg(cv_miditimiditypath.string);
#else
Mix_Timidity_addToPathList(cv_miditimiditypath.string);
#endif
I_ControlTimidityCFG();
#endif
#if SDL_MIXER_VERSION_ATLEAST(1,2,11)
Mix_Init(MIX_INIT_FLAC|MIX_INIT_MP3|MIX_INIT_OGG|MIX_INIT_MOD);
@ -647,16 +712,16 @@ void I_SetSfxVolume(UINT8 volume)
static UINT32 get_real_volume(UINT8 volume)
{
#ifdef _WIN32
#if defined (HAVE_MIXERX) && (_WIN32) && !defined(SDL_MIXER_VERSION_ATLEAST(2,6,0)) // StarManiaKG: recent SDL_Mixer_X builds fix whatever issue was here, apparently :p //
if (I_SongType() == MU_MID)
// HACK: Until we stop using native MIDI,
// disable volume changes
return ((UINT32)31*128/31); // volume = 31
else
#endif
// convert volume to mixer's 128 scale
// then apply internal_volume as a percentage
return ((UINT32)volume*128/31) * (UINT32)internal_volume / 100;
// convert volume to mixer's 128 scale
// then apply internal_volume as a percentage
return ((UINT32)volume*128/31) * (UINT32)internal_volume / 100;
}
static UINT32 get_adjusted_position(UINT32 position)
@ -864,25 +929,28 @@ boolean I_SongPaused(void)
/// Music Effects
/// ------------------------
boolean I_SetSongSpeed(float speed)
void I_SetSongSpeed(float speed) // StarManiaKG: was originally boolean, no longer needs to be //
{
if (speed > 250.0f)
speed = 250.0f; //limit speed up to 250x
music_speed = speed;
#ifdef HAVE_GME
if (gme)
{
SDL_LockAudio();
gme_set_tempo(gme, speed);
SDL_UnlockAudio();
return true;
return;
}
else
#endif
#ifdef HAVE_OPENMPT
if (openmpt_mhandle)
{
if (speed > 4.0f)
speed = 4.0f; // Limit this to 4x to prevent crashing, stupid fix but... ~SteelT 27/9/19
music_speed = speed = 4.0f; // Limit this to 4x to prevent crashing, stupid fix but... ~SteelT 27/9/19
#if OPENMPT_API_VERSION_MAJOR < 1 && OPENMPT_API_VERSION_MINOR < 5
{
// deprecated in 0.5.0
@ -893,13 +961,111 @@ boolean I_SetSongSpeed(float speed)
#else
openmpt_module_ctl_set_floatingpoint(openmpt_mhandle, "play.tempo_factor", (double)speed);
#endif
return true;
return;
}
#else
(void)speed;
return false;
#endif
return false;
// StarManiaKG: a new speed system! (tons of modding options here!) //
#ifdef HAVE_MIXERX
if (music)
{
if (speed > 20.0f) // Limit this to 20x to prevent errors
{
CONS_Alert(CONS_WARNING, "I_SetSongSpeed(): Music speed cannot be set above 20x, lowering music speed to 20x.\n");
music_speed = speed = 20.0f;
}
if (FLOAT_TO_FIXED(I_GetSongSpeed()) != FLOAT_TO_FIXED(speed)) // StarManiaKG: prevents rapid and inconsistant music speeds when calling repeatedly //
{
#if (SDL_MIXER_VERSION_ATLEAST(2,6,0))
if (!(I_SongType() == MU_MID_EX || I_SongType() == MU_MID))
Mix_SetMusicSpeed(music, speed);
else
#endif
Mix_SetMusicTempo(music, speed);
}
return;
}
#endif
}
float I_GetSongSpeed(void)
{
#ifdef HAVE_MIXERX
if (music)
{
#if (SDL_MIXER_VERSION_ATLEAST(2,6,0))
if (!(I_SongType() == MU_MID_EX || I_SongType() == MU_MID))
return Mix_GetMusicSpeed(music);
else
#endif
return Mix_GetMusicTempo(music);
}
#endif
return music_speed;
}
void I_SetSongPitch(float pitch)
{
if (pitch > 250.0f)
pitch = 250.0f; // limit pitch up to 250x
music_pitch = pitch;
#ifdef HAVE_GME
if (gme)
{
SDL_LockAudio();
gme_set_stereo_depth(gme, pitch);
SDL_UnlockAudio();
return;
}
#endif
#ifdef HAVE_OPENMPT
if (openmpt_mhandle)
{
if (pitch > 4.0f)
music_pitch = pitch = 4.0f; // Limit this to 4x to prevent crashing, stupid fix but... ~StarManiaKG 20/1/24 (stolen from SteelT)
#if OPENMPT_API_VERSION_MAJOR < 1 && OPENMPT_API_VERSION_MINOR < 5
{
// deprecated in 0.5.0
char modspd[13];
sprintf(modspd, "%g", pitch);
openmpt_module_ctl_set(openmpt_mhandle, "play.pitch_factor", modspd);
}
#else
openmpt_module_ctl_set_floatingpoint(openmpt_mhandle, "play.pitch_factor", (double)pitch);
#endif
return;
}
#endif
#ifdef HAVE_MIXERX
if (music)
{
if (pitch > 20.0f)
{
CONS_Alert(CONS_WARNING, "I_SetSongPitch(): Music pitch cannot be set above 20x, lowering music pitch to 20x.\n");
music_pitch = pitch = 20.0f;
}
if (FLOAT_TO_FIXED(I_GetSongPitch()) != FLOAT_TO_FIXED(pitch)) // StarManiaKG: prevents rapid and inconsistant music pitches when calling repeatedly //
Mix_SetMusicPitch(music, pitch);
return;
}
#endif
}
float I_GetSongPitch(void)
{
#if defined (HAVE_MIXERX) && SDL_MIXER_VERSION_ATLEAST(2,6,0)
if (music)
return Mix_GetMusicPitch(music);
#endif
return music_pitch;
}
/// ------------------------
@ -1210,13 +1376,9 @@ boolean I_LoadSong(char *data, size_t len)
#ifdef HAVE_MIXERX
if (Mix_GetMidiPlayer() != cv_midiplayer.value)
Mix_SetMidiPlayer(cv_midiplayer.value);
if (!Mix_GetSoundFonts() || stricmp(Mix_GetSoundFonts(), cv_midisoundfontpath.string))
if (stricmp(Mix_GetSoundFonts(), cv_midisoundfontpath.string))
Mix_SetSoundFonts(cv_midisoundfontpath.string);
#if SDL_MIXER_VERSION_ATLEAST(2,5,0)
Mix_SetTimidityCfg(cv_miditimiditypath.string);
#else
Mix_Timidity_addToPathList(cv_miditimiditypath.string); // this overwrites previous custom path
#endif
I_ControlTimidityCFG(); // this overwrites previous custom path
#endif
#ifdef HAVE_OPENMPT
@ -1445,7 +1607,7 @@ void I_SetMusicVolume(UINT8 volume)
if (!I_SongPlaying())
return;
#ifdef _WIN32
#if defined (HAVE_MIXERX) && (_WIN32) && !defined(SDL_MIXER_VERSION_ATLEAST(2,6,0)) // StarManiaKG: recent SDL_Mixer_X builds fix whatever issue was here, apparently :p //
if (I_SongType() == MU_MID)
// HACK: Until we stop using native MIDI,
// disable volume changes

View file

@ -1370,10 +1370,26 @@ boolean I_SongPaused(void)
// MUSIC EFFECTS
/// ------------------------
boolean I_SetSongSpeed(float speed)
void I_SetSongSpeed(float speed) // StarManiaKG: was originally boolean, no longer needs to be //
{
(void)speed;
return false;
return;
}
float I_GetSongSpeed(void)
{
return 0.0f;
}
void I_SetSongPitch(float pitch)
{
(void)pitch;
return;
}
float I_GetSongPitch(void)
{
return 0.0f;
}
/// ------------------------