diff --git a/src/sound/music/i_music.cpp b/src/sound/music/i_music.cpp index d93498b1f..b73c630ca 100644 --- a/src/sound/music/i_music.cpp +++ b/src/sound/music/i_music.cpp @@ -52,7 +52,6 @@ #include "i_sound.h" #include "i_soundfont.h" #include "s_music.h" -#include "doomstat.h" #include "filereadermusicinterface.h" @@ -163,7 +162,7 @@ static void mus_sfclose(void* handle) reinterpret_cast(handle)->close(); } - +#ifndef ZMUSIC_LITE //========================================================================== // // Pass some basic working data to the music backend @@ -210,7 +209,7 @@ static void SetupDMXGUS() ZMusic_SetDmxGus(data.GetMem(), (uint32_t)data.GetSize()); } - +#endif //========================================================================== // @@ -239,9 +238,11 @@ void I_InitMusic(void) callbacks.SF_Close = mus_sfclose; ZMusic_SetCallbacks(&callbacks); +#ifndef ZMUSIC_LITE SetupGenMidi(); SetupDMXGUS(); SetupWgOpn(); +#endif } diff --git a/src/sound/music/i_music.h b/src/sound/music/i_music.h index af45ec1fe..b552f5c23 100644 --- a/src/sound/music/i_music.h +++ b/src/sound/music/i_music.h @@ -34,6 +34,8 @@ #ifndef __I_MUSIC_H__ #define __I_MUSIC_H__ +#include "c_cvars.h" + class FileReader; struct FOptionValues; @@ -50,4 +52,8 @@ void I_SetMusicVolume (double volume); extern int nomusic; +EXTERN_CVAR(Bool, mus_enabled) +EXTERN_CVAR(Float, snd_musicvolume) + + #endif //__I_MUSIC_H__ diff --git a/src/sound/music/music.cpp b/src/sound/music/music.cpp index 356587f45..6e8a03724 100644 --- a/src/sound/music/music.cpp +++ b/src/sound/music/music.cpp @@ -37,42 +37,19 @@ #include #include -#ifdef _WIN32 -#include -#endif -#include "i_system.h" + #include "i_sound.h" #include "i_music.h" - -#include "s_sound.h" -#include "s_sndseq.h" +#include "printf.h" #include "s_playlist.h" #include "c_dispatch.h" -#include "m_random.h" #include "filesystem.h" -#include "p_local.h" -#include "doomstat.h" #include "cmdlib.h" -#include "v_video.h" -#include "v_text.h" -#include "a_sharedglobal.h" -#include "gstrings.h" -#include "gi.h" -#include "po_man.h" -#include "serializer.h" -#include "d_player.h" -#include "g_levellocals.h" -#include "vm.h" -#include "g_game.h" #include "s_music.h" #include "filereadermusicinterface.h" #include -// MACROS ------------------------------------------------------------------ - - - // EXTERNAL FUNCTION PROTOTYPES -------------------------------------------- extern float S_GetMusicVolume (const char *music); @@ -86,6 +63,7 @@ MusPlayingInfo mus_playing; // music currently being played static FPlayList PlayList; float relative_volume = 1.f; float saved_relative_volume = 1.0f; // this could be used to implement an ACS FadeMusic function +MusicVolumeMap MusicVolumes; static FileReader DefaultOpenMusic(const char* fn) { @@ -381,7 +359,7 @@ bool S_ChangeMusic(const char* musicname, int order, bool looping, bool force) S_StopMusic(true); // Just record it if volume is 0 or music was disabled - if (snd_musicvolume <= 0) + if (snd_musicvolume <= 0 || !mus_enabled) { mus_playing.loop = looping; mus_playing.name = musicname; @@ -412,7 +390,9 @@ bool S_ChangeMusic(const char* musicname, int order, bool looping, bool force) if (mus_playing.handle != 0) { // play it - if (!S_StartMusicPlaying(mus_playing.handle, looping, S_GetMusicVolume(musicname), order)) + auto volp = MusicVolumes.CheckKey(musicname); + float vol = volp ? *volp : 1.f; + if (!S_StartMusicPlaying(mus_playing.handle, looping, vol, order)) { Printf("Unable to start %s: %s\n", mus_playing.name.GetChars(), ZMusic_GetLastError()); return false; @@ -424,7 +404,6 @@ bool S_ChangeMusic(const char* musicname, int order, bool looping, bool force) return false; } - //========================================================================== // // S_RestartMusic @@ -433,12 +412,17 @@ bool S_ChangeMusic(const char* musicname, int order, bool looping, bool force) void S_RestartMusic () { - if (!mus_playing.LastSong.IsEmpty()) + if (snd_musicvolume <= 0) return; + if (!mus_playing.LastSong.IsEmpty() && mus_enabled) { FString song = mus_playing.LastSong; mus_playing.LastSong = ""; S_ChangeMusic (song, mus_playing.baseorder, mus_playing.loop, true); } + else + { + S_StopMusic(true); + } } //========================================================================== diff --git a/src/sound/music/s_music.h b/src/sound/music/s_music.h index 707dc3cc2..81cbc6a9e 100644 --- a/src/sound/music/s_music.h +++ b/src/sound/music/s_music.h @@ -31,8 +31,6 @@ void S_ResetMusic (); bool S_StartMusic (const char *music_name); // Start music using , and set whether looping -bool S_SetupMusic(const char* musicname, int order, bool looping, FileReader(*OpenMusic)(const char* filename)); - bool S_ChangeMusic (const char *music_name, int order=0, bool looping=true, bool force=false); void S_RestartMusic (); diff --git a/src/sound/s_advsound.cpp b/src/sound/s_advsound.cpp index 5460563c2..7c00768b2 100644 --- a/src/sound/s_advsound.cpp +++ b/src/sound/s_advsound.cpp @@ -147,14 +147,6 @@ struct FBloodSFX char RawName[9]; // name of RAW resource }; -// music volume multipliers -struct FMusicVolume -{ - FMusicVolume *Next; - float Volume; - char MusicName[1]; -}; - // This is used to recreate the skin sounds after reloading SNDINFO due to a changed local one. struct FSavedPlayerSoundInfo { @@ -230,7 +222,6 @@ static const char *SICommandStrings[] = NULL }; -static FMusicVolume *MusicVolumes_; static TArray SavedPlayerSounds; static int NumPlayerReserves; @@ -247,28 +238,6 @@ static uint8_t CurrentPitchMask; // CODE -------------------------------------------------------------------- -//========================================================================== -// -// S_GetMusicVolume -// -// Gets the relative volume for the given music track -//========================================================================== - -float S_GetMusicVolume (const char *music) -{ - FMusicVolume *musvol = MusicVolumes_; - - while (musvol != NULL) - { - if (!stricmp (music, musvol->MusicName)) - { - return musvol->Volume; - } - musvol = musvol->Next; - } - return 1.f; -} - //========================================================================== // // S_CheckIntegrity @@ -744,12 +713,7 @@ void S_ClearSoundData() soundEngine->Clear(); Ambients.Clear(); - while (MusicVolumes_ != NULL) - { - FMusicVolume *me = MusicVolumes_; - MusicVolumes_ = me->Next; - M_Free(me); - } + MusicVolumes.Clear(); NumPlayerReserves = 0; PlayerClassesIsSorted = false; @@ -1179,13 +1143,9 @@ static void S_AddSNDINFO (int lump) case SI_MusicVolume: { sc.MustGetString(); - FString musname (sc.String); + FName musname (sc.String); sc.MustGetFloat(); - FMusicVolume *mv = (FMusicVolume *)M_Malloc (sizeof(*mv) + musname.Len()); - mv->Volume = (float)sc.Float; - strcpy (mv->MusicName, musname); - mv->Next = MusicVolumes_; - MusicVolumes_ = mv; + MusicVolumes[musname] = (float)sc.Float; } break;