Index: main/inferno.c
===================================================================
--- main/inferno.c	(revision 114)
+++ main/inferno.c	(working copy)
@@ -515,14 +515,9 @@
 	#endif
 
 	if (Inferno_verbose) printf ("%s", TXT_VERBOSE_1);
-        ReadConfigFile();
-
-	arch_init();
-        cd_init();
-
-	if (init_graphics()) return 1;
 
 	//------------ Init sound ---------------
+	//MD2211, 2006-08-30 : moving sound init *before* ReadConfigFile(), so that we restore music volume properly.
 	if (!FindArg( "-nosound" ))	{
 		if (digi_init())	{
 #ifdef ALLEGRO
@@ -539,6 +534,14 @@
 	else {
 		if (Inferno_verbose) printf( "\n%s",TXT_SOUND_DISABLED );
 	}
+
+        ReadConfigFile();
+
+	arch_init();
+        cd_init();
+
+	if (init_graphics()) return 1;
+
 #ifdef NETWORK
 	if (!FindArg("-noserial"))	{
 		serial_active = 1;
Index: SConstruct
===================================================================
--- SConstruct	(revision 114)
+++ SConstruct	(working copy)
@@ -234,7 +234,9 @@
 'arch/linux/timer.c',
 'arch/linux/ukali.c',
 'arch/sdl/clipboard.c',
-'arch/sdl/digi.c',
+#'arch/sdl/digi.c',
+'arch/sdl/mixdigi.c',
+'arch/sdl/mixmusic.c',
 'arch/sdl/event.c',
 'arch/sdl/init.c',
 'arch/sdl/joy.c',
@@ -305,7 +307,7 @@
 env.Append(CPPDEFINES = [('D1XMAJOR', '\\"' + str(D1XMAJOR) + '\\"'), ('D1XMINOR', '\\"' + str(D1XMINOR) + '\\"')])
 env.Append(CPPPATH = ['include', 'main', 'arch/sdl/include'])
 env.Append(CPPDEFINES = ['NMONO', 'NETWORK', 'HAVE_NETIPX_IPX_H', 'SUPPORTS_NET_IP', '__SDL__', 'SDL_INPUT', 'SDL_AUDIO', '_REENTRANT'])
-sdllibs = ['SDL']
+sdllibs = ['SDL', 'SDL_mixer']
 
 # windows or *nix?
 if sys.platform == 'win32':
Index: arch/linux/hmiplay.c
===================================================================
--- arch/linux/hmiplay.c	(revision 114)
+++ arch/linux/hmiplay.c	(working copy)
@@ -24,6 +24,7 @@
 #include "music.h"
 #include "cfile.h"
 #include "args.h"
+#include "mixmusic.h"
 
 #include <SDL/SDL_thread.h>
 
@@ -826,6 +827,16 @@
 	if (FindArg("-nomusic"))
 		return;
 
+	printf("digi_play_midi_song %s loop %d\n", filename, loop);
+
+#ifdef SDL_AUDIO
+	if (FindArg("-sdl_music")) {
+		// New SDL_mixer playback
+		play_music(filename, loop);
+		return;
+	}
+#endif
+	// Old HMP playback
 	if (!filename)
 		send_ipc("p");
 	else
@@ -842,6 +853,16 @@
 	if(FindArg("-nomusic"))
 		return;
 
+	printf("digi_set_midi_volume %d\n", mvolume);
+
+#ifdef SDL_AUDIO
+	if (FindArg("-sdl_music")) {
+		// New SDL_mixer playback
+		set_music_volume(mvolume);
+		return;
+	}
+#endif
+	// Old HMP playback
 	sprintf(buf,"v%i",mvolume);
 	send_ipc(buf);
 }

