diff --git a/src/android/i_sound.c b/src/android/i_sound.c
index 3ce02b41965dc1214132ba38f4d365a87fc5d7c2..bf54c9ff096b772d29b6d2a838a71c5cba00d538 100644
--- a/src/android/i_sound.c
+++ b/src/android/i_sound.c
@@ -55,12 +55,22 @@ void I_SetSfxVolume(INT32 volume)
         (void)volume;
 }
 
-//
-//  MUSIC I/O
-//
+/// ------------------------
+//  MUSIC SYSTEM
+/// ------------------------
+
 UINT8 music_started = 0;
+UINT8 digmusic_started = 0;
+
+void I_InitMusic(void){}
 
-musictype_t I_GetMusicType(void)
+void I_ShutdownMusic(void){}
+
+/// ------------------------
+//  MUSIC PROPERTIES
+/// ------------------------
+
+musictype_t I_MusicType(void)
 {
 	return MU_NONE;
 }
@@ -75,23 +85,19 @@ boolean I_MusicPaused(void)
 	return false;
 }
 
-void I_InitMusic(void){}
+/// ------------------------
+//  MUSIC EFFECTS
+/// ------------------------
 
-void I_ShutdownMusic(void){}
-
-void I_PauseSong(void)
-{
-        (void)handle;
-}
-
-void I_ResumeSong(void)
+boolean I_SetSongSpeed(float speed)
 {
-        (void)handle;
+        (void)speed;
+        return false;
 }
 
-//
-//  MIDI I/O
-//
+/// ------------------------
+//  MUSIC PLAYBACK
+/// ------------------------
 
 UINT8 midimusic_started = 0;
 
@@ -102,9 +108,9 @@ boolean I_LoadSong(char *data, size_t len)
         return -1;
 }
 
-void I_SetMusicVolume(INT32 volume)
+void I_UnloadSong()
 {
-        (void)volume;
+
 }
 
 boolean I_PlaySong(boolean looping)
@@ -119,19 +125,17 @@ void I_StopSong(void)
         (void)handle;
 }
 
-void I_UnloadSong(void)
+void I_PauseSong(void)
 {
         (void)handle;
 }
 
-//
-//  DIGMUSIC I/O
-//
-
-UINT8 digmusic_started = 0;
+void I_ResumeSong(void)
+{
+        (void)handle;
+}
 
-boolean I_SetSongSpeed(float speed)
+void I_SetMusicVolume(INT32 volume)
 {
-        (void)speed;
-        return false;
+        (void)volume;
 }
diff --git a/src/djgppdos/i_sound.c b/src/djgppdos/i_sound.c
index 1ba8d7bae0d144f4c30cefb319018b3d7f0766e1..339b469d380352a0f257205398aa5770d72afdf7 100644
--- a/src/djgppdos/i_sound.c
+++ b/src/djgppdos/i_sound.c
@@ -140,15 +140,6 @@ void I_SetSfxVolume(INT32 volume)
 	set_volume (Volset(volume),-1);
 }
 
-void I_SetMusicVolume(INT32 volume)
-{
-	if (midi_disabled)
-		return;
-
-	// Now set volume on output device.
-	set_volume (-1, Volset(volume));
-}
-
 //
 // Starting a sound means adding it
 //  to the current list of active sounds
@@ -323,23 +314,9 @@ static int      musicdies=-1;
 UINT8           music_started=0;
 boolean         songpaused=false;
 
-musictype_t I_GetMusicType(void)
-{
-	if (currsong)
-		return MU_MID;
-	else
-		return MU_NONE;
-}
-
-boolean I_MusicPlaying()
-{
-	return (boolean)currsong;
-}
-
-boolean I_MusicPaused()
-{
-	return songpaused;
-}
+/// ------------------------
+//  MUSIC SYSTEM
+/// ------------------------
 
 /* load_midi_mem:
  *  Loads a standard MIDI file from memory, returning a pointer to
@@ -427,6 +404,76 @@ void I_ShutdownMusic(void)
 	music_started=false;
 }
 
+/// ------------------------
+//  MUSIC PROPERTIES
+/// ------------------------
+
+musictype_t I_MusicType(void)
+{
+	if (currsong)
+		return MU_MID;
+	else
+		return MU_NONE;
+}
+
+boolean I_MusicPlaying()
+{
+	return (boolean)currsong;
+}
+
+boolean I_MusicPaused()
+{
+	return songpaused;
+}
+
+/// ------------------------
+//  MUSIC EFFECTS
+/// ------------------------
+
+boolean I_SetSongSpeed(float speed)
+{
+	(void)speed;
+	return false;
+}
+
+/// ------------------------
+//  MUSIC PLAYBACK
+/// ------------------------
+
+boolean I_LoadSong(char *data, size_t len)
+{
+	int e = len; //Alam: For error
+	if (midi_disabled)
+		return 0;
+
+	if (memcmp(data,"MThd",4)==0) // support mid file in WAD !!!
+	{
+		currsong=load_midi_mem(data,&e);
+	}
+	else
+	{
+		CONS_Printf("Music Lump is not a MIDI lump\n");
+		return 0;
+	}
+
+	if (currsong==NULL)
+	{
+		CONS_Printf("Not a valid mid file : %d\n",e);
+		return 0;
+	}
+
+	return 1;
+}
+
+void I_UnloadSong(void)
+{
+	handle = 0;
+	if (midi_disabled)
+		return;
+
+	//destroy_midi(currsong);
+}
+
 boolean I_PlaySong(boolean looping)
 {
 	handle = 0;
@@ -440,6 +487,18 @@ boolean I_PlaySong(boolean looping)
 	return false;
 }
 
+void I_StopSong(void)
+{
+	handle = 0;
+	if (midi_disabled)
+		return;
+
+	islooping = 0;
+	musicdies = 0;
+	stop_midi();
+	songpaused = false;
+}
+
 void I_PauseSong (INT32 handle)
 {
 	handle = 0;
@@ -458,16 +517,19 @@ void I_ResumeSong (INT32 handle)
 	songpaused = false;
 }
 
-void I_StopSong(void)
+void I_SetMusicVolume(INT32 volume)
 {
-	handle = 0;
 	if (midi_disabled)
 		return;
 
-	islooping = 0;
-	musicdies = 0;
-	stop_midi();
-	songpaused = false;
+	// Now set volume on output device.
+	set_volume (-1, Volset(volume));
+}
+
+boolean I_SetSongTrack(INT32 track)
+{
+	(void)track;
+	return false;
 }
 
 // Is the song playing?
@@ -481,43 +543,3 @@ int I_QrySongPlaying(int handle)
 	return (midi_pos==-1);
 }
 #endif
-
-void I_UnloadSong(void)
-{
-	handle = 0;
-	if (midi_disabled)
-		return;
-
-	//destroy_midi(currsong);
-}
-
-boolean I_LoadSong(char *data, size_t len)
-{
-	int e = len; //Alam: For error
-	if (midi_disabled)
-		return 0;
-
-	if (memcmp(data,"MThd",4)==0) // support mid file in WAD !!!
-	{
-		currsong=load_midi_mem(data,&e);
-	}
-	else
-	{
-		CONS_Printf("Music Lump is not a MIDI lump\n");
-		return 0;
-	}
-
-	if (currsong==NULL)
-	{
-		CONS_Printf("Not a valid mid file : %d\n",e);
-		return 0;
-	}
-
-	return 1;
-}
-
-boolean I_SetSongSpeed(float speed)
-{
-	(void)speed;
-	return false;
-}
diff --git a/src/dummy/i_sound.c b/src/dummy/i_sound.c
index 6afbecf7670a8c0deb4ddcd9203ab810f7a81add..cab64e692f8d0f85aab65b6adced7daf7d7d3a87 100644
--- a/src/dummy/i_sound.c
+++ b/src/dummy/i_sound.c
@@ -57,11 +57,19 @@ void I_SetSfxVolume(UINT8 volume)
 	(void)volume;
 }
 
-//
-//  MUSIC I/O
-//
+/// ------------------------
+//  MUSIC SYSTEM
+/// ------------------------
+
+void I_InitMusic(void){}
+
+void I_ShutdownMusic(void){}
 
-musictype_t I_GetMusicType(void)
+/// ------------------------
+//  MUSIC PROPERTIES
+/// ------------------------
+
+musictype_t I_MusicType(void)
 {
 	return MU_NONE;
 }
@@ -76,28 +84,19 @@ boolean I_MusicPaused(void)
 	return false;
 }
 
-void I_InitMusic(void){}
-
-void I_ShutdownMusic(void){}
+/// ------------------------
+//  MUSIC EFFECTS
+/// ------------------------
 
-void I_SetMusicVolume(UINT8 volume)
-{
-	(void)volume;
-}
-
-void I_PauseSong(void)
-{
-	(void)handle;
-}
-
-void I_ResumeSong(void)
+boolean I_SetSongSpeed(float speed)
 {
-	(void)handle;
+	(void)speed;
+	return false;
 }
 
-//
-//  MIDI I/O
-//
+/// ------------------------
+//  MUSIC PLAYBACK
+/// ------------------------
 
 boolean I_LoadSong(char *data, size_t len)
 {
@@ -106,6 +105,11 @@ boolean I_LoadSong(char *data, size_t len)
 	return -1;
 }
 
+void I_UnloadSong(void)
+{
+	(void)handle;
+}
+
 boolean I_PlaySong(boolean looping)
 {
 	(void)handle;
@@ -118,19 +122,19 @@ void I_StopSong(void)
 	(void)handle;
 }
 
-void I_UnloadSong(void)
+void I_PauseSong(void)
 {
 	(void)handle;
 }
 
-//
-//  DIGMUSIC I/O
-//
+void I_ResumeSong(void)
+{
+	(void)handle;
+}
 
-boolean I_SetSongSpeed(float speed)
+void I_SetMusicVolume(UINT8 volume)
 {
-	(void)speed;
-	return false;
+	(void)volume;
 }
 
 boolean I_SetSongTrack(int track)
diff --git a/src/sdl/sdl_sound.c b/src/sdl/sdl_sound.c
index 24239f822d37a90b21a8be1b743a9c4877165b80..8af6ec686b38c564360494d87a6f668aec82582c 100644
--- a/src/sdl/sdl_sound.c
+++ b/src/sdl/sdl_sound.c
@@ -1313,7 +1313,7 @@ void I_StartupSound(void)
 // MUSIC API.
 //
 
-musictype_t I_GetMusicType(void)
+musictype_t I_MusicType(void)
 {
 #ifdef HAVE_MIXER
 #ifdef HAVE_LIBGME
@@ -1448,28 +1448,9 @@ static boolean LoadSong(void *data, size_t lumplength, size_t selectpos)
 }
 #endif
 
-
-void I_ShutdownMusic(void)
-{
-#ifdef HAVE_MIXER
-	if ((midi_disabled && digital_disabled) || !musicStarted)
-		return;
-
-	CONS_Printf("%s", M_GetText("I_ShutdownMusic: "));
-
-	I_UnloadSong();
-	I_StopSong();
-	Mix_CloseAudio();
-#ifdef MIX_INIT
-	Mix_Quit();
-#endif
-	CONS_Printf("%s", M_GetText("shut down\n"));
-	musicStarted = SDL_FALSE;
-	if (Msc_Mutex)
-		SDL_DestroyMutex(Msc_Mutex);
-	Msc_Mutex = NULL;
-#endif
-}
+/// ------------------------
+//  MUSIC SYSTEM
+/// ------------------------
 
 void I_InitMusic(void)
 {
@@ -1584,11 +1565,106 @@ void I_InitMusic(void)
 #endif
 }
 
-boolean I_PlaySong(INT32 handle, boolean looping)
+void I_ShutdownMusic(void)
 {
+#ifdef HAVE_MIXER
+	if ((midi_disabled && digital_disabled) || !musicStarted)
+		return;
+
+	CONS_Printf("%s", M_GetText("I_ShutdownMusic: "));
+
+	I_UnloadSong();
+	I_StopSong();
+	Mix_CloseAudio();
+#ifdef MIX_INIT
+	Mix_Quit();
+#endif
+	CONS_Printf("%s", M_GetText("shut down\n"));
+	musicStarted = SDL_FALSE;
+	if (Msc_Mutex)
+		SDL_DestroyMutex(Msc_Mutex);
+	Msc_Mutex = NULL;
+#endif
+}
+
+/// ------------------------
+//  MUSIC PROPERTIES
+/// ------------------------
+
+musictype_t I_MusicType(void)
+{
+	return MU_NONE;
+}
+
+boolean I_MusicPlaying(void)
+{
+	return false;
+}
+
+boolean I_MusicPaused(void)
+{
+	return false;
+}
+
+/// ------------------------
+//  MUSIC EFFECTS
+/// ------------------------
+
+boolean I_SetSongSpeed(float speed)
+{
+	(void)speed;
+	return false;
+}
+
+/// ------------------------
+//  MUSIC PLAYBACK
+//  \todo Merge Digital and MIDI
+/// ------------------------
+
+boolean I_LoadSong(char *data, size_t len)
+{
+#ifdef HAVE_MIXER
+	if (midi_disabled || !musicStarted)
+		return false;
+
+	if (!LoadSong(data, len, 0))
+		return false;
+
+	if (music[0])
+		return true;
+
+	CONS_Printf(M_GetText("Couldn't load MIDI: %s\n"), Mix_GetError());
+#else
+	(void)len;
+	(void)data;
+#endif
+	return false;
+}
+
+void I_UnloadSong(void)
+{
+#ifdef HAVE_MIXER
+
+	if (midi_disabled || !musicStarted)
+		return;
+
+	Mix_HaltMusic();
+	while (Mix_PlayingMusic())
+		;
+
+	if (music[handle])
+		Mix_FreeMusic(music[handle]);
+	music[handle] = NULL;
+	LoadSong(NULL, 0, handle);
+#else
 	(void)handle;
+#endif
+}
+
+boolean I_PlaySong(boolean looping)
+{
 #ifdef HAVE_MIXER
-	if (midi_disabled || !musicStarted || !music[handle])
+	if (!musicStarted || !music[handle])
 		return false;
 
 #ifdef MIXER_POS
@@ -1609,6 +1685,28 @@ boolean I_PlaySong(INT32 handle, boolean looping)
 	return false;
 }
 
+void I_StopSong(void)
+{
+	I_StopGME();
+#ifdef HAVE_MIXER
+	if (digital_disabled)
+		return;
+
+#ifdef MIXER_POS
+	if (canlooping)
+		Mix_HookMusicFinished(NULL);
+#endif
+
+	Mix_HaltMusic();
+	while (Mix_PlayingMusic())
+		;
+
+	if (music[1])
+		Mix_FreeMusic(music[1]);
+	music[1] = NULL;
+	LoadSong(NULL, 0, 1);
+}
+
 static void I_PauseGME(void)
 {
 #ifdef HAVE_LIBGME
@@ -1650,68 +1748,6 @@ void I_ResumeSong(void)
 #endif
 }
 
-void I_StopSong(void)
-{
-	I_StopGME();
-#ifdef HAVE_MIXER
-	if (digital_disabled)
-		return;
-
-#ifdef MIXER_POS
-	if (canlooping)
-		Mix_HookMusicFinished(NULL);
-#endif
-
-	Mix_HaltMusic();
-	while (Mix_PlayingMusic())
-		;
-
-	if (music[1])
-		Mix_FreeMusic(music[1]);
-	music[1] = NULL;
-	LoadSong(NULL, 0, 1);
-}
-
-void I_UnloadSong(void)
-{
-#ifdef HAVE_MIXER
-
-	if (midi_disabled || !musicStarted)
-		return;
-
-	Mix_HaltMusic();
-	while (Mix_PlayingMusic())
-		;
-
-	if (music[handle])
-		Mix_FreeMusic(music[handle]);
-	music[handle] = NULL;
-	LoadSong(NULL, 0, handle);
-#else
-	(void)handle;
-#endif
-}
-
-boolean I_LoadSong(char *data, size_t len)
-{
-#ifdef HAVE_MIXER
-	if (midi_disabled || !musicStarted)
-		return false;
-
-	if (!LoadSong(data, len, 0))
-		return false;
-
-	if (music[0])
-		return true;
-
-	CONS_Printf(M_GetText("Couldn't load MIDI: %s\n"), Mix_GetError());
-#else
-	(void)len;
-	(void)data;
-#endif
-	return false;
-}
-
 void I_SetMusicVolume(UINT8 volume)
 {
 #ifdef HAVE_MIXER
@@ -1727,6 +1763,18 @@ void I_SetMusicVolume(UINT8 volume)
 #endif
 }
 
+boolean I_SetSongTrack(int track)
+{
+	(void)track;
+	return false;
+}
+
+/// ------------------------
+//  MUSIC LOADING AND CLEANUP
+//  \todo Split logic between loading and playing,
+//        then move to Playback section
+/// ------------------------
+
 #ifdef HAVE_LIBGME
 static void I_CleanupGME(void *userdata)
 {
@@ -1961,19 +2009,6 @@ static void I_StopGME(void)
 #endif
 }
 
-boolean I_SetSongSpeed(float speed)
-{
-
-	(void)speed;
-	return false;
-}
-
-boolean I_SetSongTrack(int track)
-{
-	(void)track;
-	return false;
-}
-
 #ifdef MIXER_POS
 static void SDLCALL I_FinishMusic(void)
 {
diff --git a/src/win32/win_snd.c b/src/win32/win_snd.c
index d69562d413943ed76d23fcda0f59f26bf7c69044..3dbe6c5727a581f332a35a499b29d8d31a28e6c3 100644
--- a/src/win32/win_snd.c
+++ b/src/win32/win_snd.c
@@ -439,11 +439,24 @@ void I_SetSfxVolume(UINT8 volume)
 	sfx_volume = volume;
 }
 
-//
-// MUSIC
-//
+/// ------------------------
+//  MUSIC SYSTEM
+/// ------------------------
 
-musictype_t I_GetMusicType(void)
+void I_InitMusic(void)
+{
+}
+
+void I_ShutdownMusic(void)
+{
+	I_StopSong();
+}
+
+/// ------------------------
+//  MUSIC PROPERTIES
+/// ------------------------
+
+musictype_t I_MusicType(void)
 {
 #ifdef HAVE_LIBGME
 	if (gme)
@@ -491,29 +504,47 @@ boolean I_MusicPaused(void)
 	return fmpaused;
 }
 
-void I_InitMusic(void)
-{
-}
+/// ------------------------
+//  MUSIC EFFECTS
+/// ------------------------
 
-void I_ShutdownMusic(void)
+boolean I_SetSongSpeed(float speed)
 {
-	I_StopSong();
-}
+	FMOD_RESULT e;
+	float frequency;
+	if (!music_stream)
+		return false;
+	if (speed > 250.0f)
+		speed = 250.0f; //limit speed up to 250x
 
-void I_PauseSong(void)
-{
-	UNREFERENCED_PARAMETER(handle);
-	if (music_stream)
-		FMR_MUSIC(FMOD_Channel_SetPaused(music_channel, true));
-}
+#ifdef HAVE_LIBGME
+	// Try to set GME speed
+	if (gme)
+	{
+		gme_set_tempo(gme, speed);
+		return true;
+	}
+#endif
 
-void I_ResumeSong(void)
-{
-	UNREFERENCED_PARAMETER(handle);
-	if (music_stream)
-		FMR_MUSIC(FMOD_Channel_SetPaused(music_channel, false));
+	// Try to set Mod/Midi speed
+	e = FMOD_Sound_SetMusicSpeed(music_stream, speed);
+
+	if (e == FMOD_ERR_FORMAT)
+	{
+		// Just change pitch instead for Ogg/etc.
+		FMR(FMOD_Sound_GetDefaults(music_stream, &frequency, NULL, NULL, NULL));
+		FMR_MUSIC(FMOD_Channel_SetFrequency(music_channel, speed*frequency));
+	}
+	else
+		FMR_MUSIC(e);
+
+	return true;
 }
 
+/// ------------------------
+//  MUSIC PLAYBACK
+/// ------------------------
+
 boolean I_LoadSong(char *data, size_t len)
 {
 	char *data;
@@ -726,39 +757,79 @@ boolean I_LoadSong(char *data, size_t len)
 	return true;
 }
 
-boolean I_SetSongSpeed(float speed)
+void I_UnloadSong(void)
 {
-	FMOD_RESULT e;
-	float frequency;
-	if (!music_stream)
-		return false;
-	if (speed > 250.0f)
-		speed = 250.0f; //limit speed up to 250x
+	UNREFERENCED_PARAMETER(handle);
+	if (music_stream)
+		FMR(FMOD_Sound_Release(music_stream));
+	music_stream = NULL;
+}
 
+boolean I_PlaySong(boolean looping)
+{
 #ifdef HAVE_LIBGME
-	// Try to set GME speed
 	if (gme)
 	{
-		gme_set_tempo(gme, speed);
+		gme_start_track(gme, 0);
+		current_track = 0;
+		FMR(FMOD_System_PlaySound(fsys, FMOD_CHANNEL_FREE, music_stream, false, &music_channel));
+		FMR(FMOD_Channel_SetVolume(music_channel, music_volume / 31.0));
+		FMR(FMOD_Channel_SetPriority(music_channel, 0));
 		return true;
 	}
 #endif
 
-	// Try to set Mod/Midi speed
-	e = FMOD_Sound_SetMusicSpeed(music_stream, speed);
-
-	if (e == FMOD_ERR_FORMAT)
-	{
-		// Just change pitch instead for Ogg/etc.
-		FMR(FMOD_Sound_GetDefaults(music_stream, &frequency, NULL, NULL, NULL));
-		FMR_MUSIC(FMOD_Channel_SetFrequency(music_channel, speed*frequency));
-	}
+	FMR(FMOD_System_PlaySound(fsys, FMOD_CHANNEL_FREE, music_stream, false, &music_channel));
+	if (I_MusicType() != MU_MID)
+		FMR(FMOD_Channel_SetVolume(music_channel, midi_volume / 31.0));
 	else
-		FMR_MUSIC(e);
+		FMR(FMOD_Channel_SetVolume(music_channel, music_volume / 31.0));
+	FMR(FMOD_Channel_SetPriority(music_channel, 0));
+	current_track = 0;
 
 	return true;
 }
 
+void I_StopSong(void)
+{
+#ifdef HAVE_LIBGME
+	if (gme)
+		gme_delete(gme);
+	gme = NULL;
+#endif
+	current_track = -1;
+
+	I_UnloadSong();
+}
+
+void I_PauseSong(void)
+{
+	UNREFERENCED_PARAMETER(handle);
+	if (music_stream)
+		FMR_MUSIC(FMOD_Channel_SetPaused(music_channel, true));
+}
+
+void I_ResumeSong(void)
+{
+	UNREFERENCED_PARAMETER(handle);
+	if (music_stream)
+		FMR_MUSIC(FMOD_Channel_SetPaused(music_channel, false));
+}
+
+void I_SetMusicVolume(UINT8 volume)
+{
+	if (!music_stream)
+		return;
+
+	// volume is 0 to 31.
+	if (I_MusicType() == MU_MID)
+		music_volume = 31; // windows bug hack
+	else
+		music_volume = volume;
+
+	FMR_MUSIC(FMOD_Channel_SetVolume(music_channel, music_volume / 31.0));
+}
+
 boolean I_SetSongTrack(INT32 track)
 {
 	if (track != current_track) // If the track's already playing, then why bother?
@@ -803,66 +874,3 @@ boolean I_SetSongTrack(INT32 track)
 	}
 	return false;
 }
-
-//
-// Fuck MIDI. ... Okay fine, you can have your silly D_-only mode.
-//
-
-void I_SetMusicVolume(UINT8 volume)
-{
-	if (!music_stream)
-		return;
-
-	// volume is 0 to 31.
-	if (I_GetMusicType() == MU_MID)
-		music_volume = 31; // windows bug hack
-	else
-		music_volume = volume;
-
-	FMR_MUSIC(FMOD_Channel_SetVolume(music_channel, music_volume / 31.0));
-}
-
-boolean I_PlaySong(boolean looping)
-{
-#ifdef HAVE_LIBGME
-	if (gme)
-	{
-		gme_start_track(gme, 0);
-		current_track = 0;
-		FMR(FMOD_System_PlaySound(fsys, FMOD_CHANNEL_FREE, music_stream, false, &music_channel));
-		FMR(FMOD_Channel_SetVolume(music_channel, music_volume / 31.0));
-		FMR(FMOD_Channel_SetPriority(music_channel, 0));
-		return true;
-	}
-#endif
-
-	FMR(FMOD_System_PlaySound(fsys, FMOD_CHANNEL_FREE, music_stream, false, &music_channel));
-	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));
-	FMR(FMOD_Channel_SetPriority(music_channel, 0));
-	current_track = 0;
-
-	return true;
-}
-
-void I_StopSong(void)
-{
-#ifdef HAVE_LIBGME
-	if (gme)
-		gme_delete(gme);
-	gme = NULL;
-#endif
-	current_track = -1;
-
-	I_UnloadSong();
-}
-
-void I_UnloadSong(void)
-{
-	UNREFERENCED_PARAMETER(handle);
-	if (music_stream)
-		FMR(FMOD_Sound_Release(music_stream));
-	music_stream = NULL;
-}