diff --git a/src/i_sound.h b/src/i_sound.h
index a88038b39e1b513aadc2039a7be43f6b29253e52..4e6a253333aed70eaafdaaa817188ff781706c78 100644
--- a/src/i_sound.h
+++ b/src/i_sound.h
@@ -247,6 +247,8 @@ UINT32 I_GetMusicPosition(void);
 
 boolean I_SetSongTrack(INT32 track);
 
+void I_SetInternalMusicVolume(UINT8 volume);
+
 /**	\brief The I_StartDigSong function
 
 	\param	musicname	music lump name
diff --git a/src/s_sound.c b/src/s_sound.c
index 3b0c87463af25c27e48e85697409ba9fc7ab6935..2d4de70b1c5b114d0bf9461a0edb0b41759e1273 100644
--- a/src/s_sound.c
+++ b/src/s_sound.c
@@ -1476,6 +1476,11 @@ void S_StopMusic(void)
 	}
 }
 
+void S_SetInternalMusicVolume(INT32 volume)
+{
+	I_SetInternalMusicVolume(min(max(volume, 0), 100));
+}
+
 void S_SetDigMusicVolume(INT32 volume)
 {
 	if (volume < 0 || volume > 31)
diff --git a/src/s_sound.h b/src/s_sound.h
index 096a03f1f4bd5d69a2a50fe2400a501f32c78c77..19b616ab2487800b6eb90c1e11ff915a5d885b8f 100644
--- a/src/s_sound.h
+++ b/src/s_sound.h
@@ -180,6 +180,7 @@ void S_UpdateSounds(void);
 
 FUNCMATH fixed_t S_CalculateSoundDistance(fixed_t px1, fixed_t py1, fixed_t pz1, fixed_t px2, fixed_t py2, fixed_t pz2);
 
+void S_SetInternalMusicVolume(INT32 volume);
 void S_SetDigMusicVolume(INT32 volume);
 void S_SetMIDIMusicVolume(INT32 volume);
 void S_SetSfxVolume(INT32 volume);
diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c
index 3b2857a9ee765c4969a2f2389f25678386e91435..5de1831ce8dba13bdc262a8f7613b73bfcf5e99c 100644
--- a/src/sdl/mixer_sound.c
+++ b/src/sdl/mixer_sound.c
@@ -1160,6 +1160,14 @@ boolean I_SetSongTrack(int track)
 	return false;
 }
 
+void I_SetInternalMusicVolume(UINT8 volume)
+{
+	internal_volume = volume;
+	if (!music)
+		return;
+	Mix_VolumeMusic(get_real_volume(midimode ? midi_volume : music_volume));
+}
+
 void I_StopFadingMusic()
 {
 	if (fading_id)