diff --git a/src/d_netcmd.c b/src/d_netcmd.c index bdbb3747e04066e5939ae4459705b3526e2cd226..6776208ac0f78f65f900d7bf6ff777b538a80191 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -866,6 +866,7 @@ void D_RegisterClientCommands(void) // s_sound.c CV_RegisterVar(&cv_soundvolume); CV_RegisterVar(&cv_digmusicvolume); + CV_RegisterVar(&cv_midimusicvolume); CV_RegisterVar(&cv_closedcaptioning); CV_RegisterVar(&cv_numChannels); diff --git a/src/m_menu.c b/src/m_menu.c index cd4bdb2fd81946b383da644c6eed232b923f7048..cc654e2c77f446194fd2aef5058f6ed2ffc6d748 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1498,7 +1498,7 @@ static menuitem_t OP_SoundOptionsMenu[] = {IT_STRING | IT_CVAR, NULL, "Default 1-Up sound", &cv_1upsound, 112}, {IT_STRING | IT_CVAR, NULL, "Reset Music Upon Dying", &cv_resetmusic, 122}, - {IT_STRING | IT_SUBMENU, NULL, "Advanced Settings...", &OP_SoundAdvancedDef, 142}, + {IT_STRING | IT_SUBMENU, NULL, "Advanced/MIDI Settings...", &OP_SoundAdvancedDef, 142}, }; #ifdef HAVE_OPENMPT @@ -1508,7 +1508,7 @@ static menuitem_t OP_SoundOptionsMenu[] = #endif #ifdef HAVE_MIXERX -#define MIXERX_MENUOFFSET 80 +#define MIXERX_MENUOFFSET 90 #else #define MIXERX_MENUOFFSET 0 #endif @@ -1522,9 +1522,10 @@ static menuitem_t OP_SoundAdvancedMenu[] = #ifdef HAVE_MIXERX {IT_HEADER, NULL, "MIDI Settings", NULL, OPENMPT_MENUOFFSET}, - {IT_STRING | IT_CVAR, NULL, "MIDI Player", &cv_midiplayer, OPENMPT_MENUOFFSET+12}, - {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "FluidSynth Sound Font File", &cv_midisoundfontpath, OPENMPT_MENUOFFSET+22}, - {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "TiMidity++ Config Folder", &cv_miditimiditypath, OPENMPT_MENUOFFSET+49}, + {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "MIDI Volume", &cv_midimusicvolume, OPENMPT_MENUOFFSET+12}, + {IT_STRING | IT_CVAR, NULL, "MIDI Player", &cv_midiplayer, OPENMPT_MENUOFFSET+22}, + {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "FluidSynth Sound Font File", &cv_midisoundfontpath, OPENMPT_MENUOFFSET+32}, + {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "TiMidity++ Config Folder", &cv_miditimiditypath, OPENMPT_MENUOFFSET+59}, #endif {IT_HEADER, NULL, "Focus settings", NULL, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET}, diff --git a/src/s_sound.c b/src/s_sound.c index a6814327c3f0cfda99f192552e0b4ec9c14aaa4f..d0089022a7094c78c7cc2134bb09ca9693d912ad 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -75,6 +75,7 @@ static consvar_t precachesound = CVAR_INIT ("precachesound", "Off", CV_SAVE, CV_ // actual general (maximum) sound & music volume, saved into the config consvar_t cv_soundvolume = CVAR_INIT ("soundvolume", "16", CV_SAVE, soundvolume_cons_t, NULL); consvar_t cv_digmusicvolume = CVAR_INIT ("digmusicvolume", "16", CV_SAVE, soundvolume_cons_t, NULL); +consvar_t cv_midimusicvolume = CVAR_INIT ("midimusicvolume", "16", CV_SAVE, soundvolume_cons_t, NULL); static void Captioning_OnChange(void) { @@ -831,6 +832,8 @@ void S_UpdateSounds(void) mobj_t *listenmobj = players[displayplayer].mo; mobj_t *listenmobj2 = NULL; + + boolean currentmidi = (I_SongType() == MU_MID || I_SongType() == MU_MID_EX); memset(&listener, 0, sizeof(listener_t)); memset(&listener2, 0, sizeof(listener_t)); @@ -838,8 +841,8 @@ void S_UpdateSounds(void) // Update sound/music volumes, if changed manually at console if (actualsfxvolume != cv_soundvolume.value) S_SetSfxVolume(cv_soundvolume.value); - if (actualmusicvolume != cv_digmusicvolume.value) - S_SetMusicVolume(cv_digmusicvolume.value); + if (actualmusicvolume != currentmidi ? cv_midimusicvolume.value : cv_digmusicvolume.value) + S_SetMusicVolume(-1); // We're done now, if we're not in a level. if (gamestate != GS_LEVEL) @@ -2346,13 +2349,19 @@ void S_ResumeAudio(void) void S_SetMusicVolume(INT32 volume) { + boolean currentmidi = (I_SongType() == MU_MID || I_SongType() == MU_MID_EX); + if (volume < 0) volume = cv_digmusicvolume.value; + if (currentmidi) + volume = cv_midimusicvolume.value; + if (volume < 0 || volume > 31) - CONS_Alert(CONS_WARNING, "digmusicvolume should be between 0-31\n"); - CV_SetValue(&cv_digmusicvolume, volume&31); - actualmusicvolume = cv_digmusicvolume.value; //check for change of var + CONS_Alert(CONS_WARNING, "Music volume should be between 0-31\n"); + + CV_SetValue(currentmidi ? &cv_midimusicvolume : &cv_digmusicvolume, volume&31); + actualmusicvolume = currentmidi ? cv_midimusicvolume.value : cv_digmusicvolume.value; //check for change of var I_SetMusicVolume(volume&31); } @@ -2491,7 +2500,7 @@ static void Command_RestartAudio_f(void) // These must be called or no sound and music until manually set. I_SetSfxVolume(cv_soundvolume.value); - S_SetMusicVolume(cv_digmusicvolume.value); + S_SetMusicVolume(-1); if (Playing()) // Gotta make sure the player is in a level P_RestoreMusic(&players[consoleplayer]); } diff --git a/src/s_sound.h b/src/s_sound.h index 276a4b5ce4025ed805307ae7d3f60e99a1260255..fd9fbc0dba48189e9a01eaabc5cacb5b6fa720af 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -29,7 +29,7 @@ extern openmpt_module *openmpt_mhandle; #define PICKUP_SOUND 0x8000 extern consvar_t stereoreverse; -extern consvar_t cv_soundvolume, cv_closedcaptioning, cv_digmusicvolume; +extern consvar_t cv_soundvolume, cv_closedcaptioning, cv_digmusicvolume, cv_midimusicvolume; extern consvar_t cv_numChannels; extern consvar_t cv_resetmusic;