diff -ur ScummVM-cvs20041113/kyra/kyra.cpp ScummVM-cvs20041113+hack/kyra/kyra.cpp
--- ScummVM-cvs20041113/kyra/kyra.cpp	2004-11-11 14:37:04.000000000 +0100
+++ ScummVM-cvs20041113+hack/kyra/kyra.cpp	2004-11-14 07:51:49.000000000 +0100
@@ -121,19 +121,25 @@
 	} else {
 		error("unknown game");
 	}
-	
-	MidiDriver *driver = GameDetector::createMidi(GameDetector::detectMusicDriver(MDT_NATIVE | MDT_PREFER_NATIVE));
-	if (driver) {
-		if (ConfMan.getBool("native_mt32"))
-			driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
-		_midiDriver = new MusicPlayer(driver, this);
-		assert(_midiDriver);
-		_midiDriver->hasNativeMT32(ConfMan.getBool("native_mt32"));
-		_midiDriver->setVolume(255);
-	} else {
-		warning("Couldn't create MIDI driver... No music!");
-		_midiDriver = NULL;
-	};
+
+	int midiDrv = GameDetector::detectMusicDriver(MDT_NATIVE | MDT_ADLIB | MDT_PREFER_NATIVE);
+	bool native_mt32 = (ConfMan.getBool("native_mt32") || (midiDrv == MD_MT32));
+
+	MidiDriver *driver = GameDetector::createMidi(midiDrv);
+	if (!driver) {
+		// In this case we should play the Adlib tracks, but for now
+		// the automagic MIDI-to-Adlib conversion will do.
+		driver = MidiDriver_ADLIB_create(_mixer);
+	} else if (native_mt32)
+		driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
+
+	_midiDriver = new MusicPlayer(driver, this);
+	assert(_midiDriver);
+	_midiDriver->hasNativeMT32(native_mt32);
+	_midiDriver->setVolume(255);
+
+	if (midiDrv == MD_MT32)
+		_midiDriver->setPassThrough(true);
 	
 	// Initialize backen
 	syst->initSize(320, 200);
diff -ur ScummVM-cvs20041113/kyra/sound.cpp ScummVM-cvs20041113+hack/kyra/sound.cpp
--- ScummVM-cvs20041113/kyra/sound.cpp	2004-11-11 14:37:35.000000000 +0100
+++ ScummVM-cvs20041113+hack/kyra/sound.cpp	2004-11-14 07:54:25.000000000 +0100
@@ -18,6 +18,7 @@
 	MusicPlayer::MusicPlayer(MidiDriver* driver, KyraEngine* engine) {
 		_engine = engine;
 		_driver = driver;
+		_passThrough = false;
 		_isPlaying = _nativeMT32 = false;
 		
 		memset(_channel, 0, sizeof(MidiChannel*) * 16);
@@ -73,6 +74,11 @@
 	}
 	
 	void MusicPlayer::send(uint32 b) {
+		if (_passThrough) {
+			_driver->send(b);
+			return;
+		}
+
 		uint8 channel = (byte)(b & 0x0F);
 		if ((b & 0xFFF0) == 0x07B0) {
 			// Adjust volume changes by master volume
diff -ur ScummVM-cvs20041113/kyra/sound.h ScummVM-cvs20041113+hack/kyra/sound.h
--- ScummVM-cvs20041113/kyra/sound.h	2004-11-11 14:37:35.000000000 +0100
+++ ScummVM-cvs20041113+hack/kyra/sound.h	2004-11-14 07:54:54.000000000 +0100
@@ -25,6 +25,7 @@
 		void stopMusic();
 		
 		void playTrack(uint8 track);
+		void setPassThrough(bool b)	{ _passThrough = b; }
 
 		//MidiDriver interface implementation
 		int open();
@@ -47,6 +48,7 @@
 		uint8 _channelVolume[16];
 		MidiDriver* _driver;
 		bool _nativeMT32;
+		bool _passThrough;
 		uint8 _volume;
 		bool _isPlaying;
 		MidiParser* _parser;
