From 14b393ab16736bb44dab6fd4a90b7bdd8ff782e0 Mon Sep 17 00:00:00 2001
From: mazmazz <mar.marcoz@outlook.com>
Date: Thu, 23 Aug 2018 10:19:04 -0400
Subject: [PATCH] Added I_GetMusicType and removed midimode variable: other
 targets

---
 src/android/i_sound.c  |  5 +++++
 src/djgppdos/i_sound.c |  9 ++++++++-
 src/dummy/i_sound.c    |  5 +++++
 src/sdl/sdl_sound.c    | 23 +++++++++++++++++++++
 src/win32/win_snd.c    | 45 +++++++++++++++++++++++++++++++++++-------
 5 files changed, 79 insertions(+), 8 deletions(-)

diff --git a/src/android/i_sound.c b/src/android/i_sound.c
index ed666428ce..f4ec1c5630 100644
--- a/src/android/i_sound.c
+++ b/src/android/i_sound.c
@@ -60,6 +60,11 @@ void I_SetSfxVolume(INT32 volume)
 //
 UINT8 music_started = 0;
 
+musictype_t I_GetMusicType(void)
+{
+	return MU_NONE;
+}
+
 void I_InitMusic(void){}
 
 void I_ShutdownMusic(void){}
diff --git a/src/djgppdos/i_sound.c b/src/djgppdos/i_sound.c
index cf66cbd2e8..51b97ccced 100644
--- a/src/djgppdos/i_sound.c
+++ b/src/djgppdos/i_sound.c
@@ -322,6 +322,13 @@ static int      islooping=0;
 static int      musicdies=-1;
 UINT8           music_started=0;
 
+musictype_t I_GetMusicType(void)
+{
+	if (currsong)
+		return MU_MID;
+	else
+		return MU_NONE;
+}
 
 /* load_midi_mem:
  *  Loads a standard MIDI file from memory, returning a pointer to
@@ -403,7 +410,7 @@ void I_ShutdownMusic(void)
 	if ( !music_started )
 		return;
 
-	I_StopSong(1);
+	I_StopSong();
 
 	music_started=false;
 }
diff --git a/src/dummy/i_sound.c b/src/dummy/i_sound.c
index 181abdf519..c3c971552b 100644
--- a/src/dummy/i_sound.c
+++ b/src/dummy/i_sound.c
@@ -61,6 +61,11 @@ void I_SetSfxVolume(UINT8 volume)
 //  MUSIC I/O
 //
 
+musictype_t I_GetMusicType(void)
+{
+	return MU_NONE;
+}
+
 void I_InitMusic(void){}
 
 void I_ShutdownMusic(void){}
diff --git a/src/sdl/sdl_sound.c b/src/sdl/sdl_sound.c
index a4334a78ee..3e09021015 100644
--- a/src/sdl/sdl_sound.c
+++ b/src/sdl/sdl_sound.c
@@ -1313,6 +1313,29 @@ void I_StartupSound(void)
 // MUSIC API.
 //
 
+musictype_t I_GetMusicType(void)
+{
+#ifdef HAVE_MIXER
+#ifdef HAVE_LIBGME
+	if (gme)
+		return MU_GME;
+	else
+#endif
+	if (!music)
+		return MU_NONE;
+	else if (Mix_GetMusicType(music) == MUS_MID)
+		return MU_MID;
+	else if (Mix_GetMusicType(music) == MUS_MOD || Mix_GetMusicType(music) == MUS_MODPLUG_UNUSED)
+		return MU_MOD;
+	else if (Mix_GetMusicType(music) == MUS_MP3 || Mix_GetMusicType(music) == MUS_MP3_MAD_UNUSED)
+		return MU_MP3;
+	else
+		return (musictype_t)Mix_GetMusicType(music);
+#else
+	return MU_NONE
+#endif
+}
+
 #ifdef HAVE_LIBGME
 static void I_ShutdownGMEMusic(void)
 {
diff --git a/src/win32/win_snd.c b/src/win32/win_snd.c
index e9311026fe..fd44b3570e 100644
--- a/src/win32/win_snd.c
+++ b/src/win32/win_snd.c
@@ -42,7 +42,6 @@
 static FMOD_SYSTEM *fsys;
 static FMOD_SOUND *music_stream;
 static FMOD_CHANNEL *music_channel;
-static boolean midimode;
 
 static UINT8 music_volume, midi_volume, sfx_volume;
 static INT32 current_track;
@@ -444,6 +443,41 @@ void I_SetSfxVolume(UINT8 volume)
 // MUSIC
 //
 
+musictype_t I_GetMusicType(void)
+{
+#ifdef HAVE_LIBGME
+	if (gme)
+		return MU_GME;
+#endif
+
+	if (!music_stream)
+		return MU_NONE;
+
+	FMOD_SOUND_TYPE type;
+	if (FMOD_Sound_GetFormat(music_stream, &type, NULL, NULL, NULL) == FMOD_OK)
+	{
+		switch(type)
+		{
+			case FMOD_SOUND_TYPE_WAV:
+				return MU_WAV;
+			case FMOD_SOUND_TYPE_MOD:
+				return MU_MOD;
+			case FMOD_SOUND_TYPE_MID:
+				return MU_MID;
+			case FMOD_SOUND_TYPE_OGGVORBIS:
+				return MU_OGG;
+			case FMOD_SOUND_TYPE_MP3:
+				return MU_MP3;
+			case FMOD_SOUND_TYPE_FLAC:
+				return MU_FLAC;
+			default:
+				return MU_NONE;
+		}
+	}
+	else
+		return MU_NONE;
+}
+
 void I_InitMusic(void)
 {
 }
@@ -479,10 +513,7 @@ boolean I_LoadSong(char *data, size_t len)
 		lumpnum = W_CheckNumForName(va("D_%s",musicname));
 		if (lumpnum == LUMPERROR)
 			return false;
-		midimode = true;
 	}
-	else
-		midimode = false;
 
 	data = (char *)W_CacheLumpNum(lumpnum, PU_MUSIC);
 	len = W_LumpLength(lumpnum);
@@ -686,7 +717,7 @@ void I_SetDigMusicVolume(UINT8 volume)
 {
 	// volume is 0 to 31.
 	music_volume = volume;
-	if (!midimode && music_stream)
+	if (I_GetMusicType() != MU_MID && music_stream)
 		FMR_MUSIC(FMOD_Channel_SetVolume(music_channel, volume / 31.0));
 }
 
@@ -776,7 +807,7 @@ void I_SetMIDIMusicVolume(UINT8 volume)
 {
 	// volume is 0 to 31.
 	midi_volume = volume;
-	if (midimode && music_stream)
+	if (I_GetMusicType() != MU_MID && music_stream)
 		FMR_MUSIC(FMOD_Channel_SetVolume(music_channel, volume / 31.0));
 }
 
@@ -795,7 +826,7 @@ boolean I_PlaySong(boolean looping)
 #endif
 
 	FMR(FMOD_System_PlaySound(fsys, FMOD_CHANNEL_FREE, music_stream, false, &music_channel));
-	if (midimode)
+	if (I_GetMusicType() != MU_MID)
 		FMR(FMOD_Channel_SetVolume(music_channel, midi_volume / 31.0));
 	else
 		FMR(FMOD_Channel_SetVolume(music_channel, music_volume / 31.0));
-- 
GitLab