Index: engines/kyra/kyra.cpp
===================================================================
--- engines/kyra/kyra.cpp	(revision 31502)
+++ engines/kyra/kyra.cpp	(working copy)
@@ -91,7 +91,7 @@
 	// more mature than our MIDI player. For example we are missing MT-32 support
 	// and it seems our MIDI playback code has threading issues (see bug #1506583
 	// "KYRA1: Crash on exceeded polyphony" for more information).
-	int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB/* | MDT_PREFER_MIDI*/);
+	int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_DIGMID/* | MDT_PREFER_MIDI*/);
 
 	if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98) {
 		// TODO: currently we don't support the PC98 sound data,
@@ -104,6 +104,9 @@
 	} else if (midiDriver == MD_ADLIB) {
 		_sound = new SoundAdlibPC(this, _mixer);
 		assert(_sound);
+	} else if (midiDriver == MD_DIGMID) {
+		_sound=new SoundDigitalMidi(this, _mixer);
+		assert(_sound);
 	} else {
 		bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
 
@@ -382,3 +385,4 @@
 
 } // End of namespace Kyra
 
+
Index: engines/kyra/sound.cpp
===================================================================
--- engines/kyra/sound.cpp	(revision 31502)
+++ engines/kyra/sound.cpp	(working copy)
@@ -545,6 +545,7 @@
 #endif // USE_FLAC
 #ifdef USE_VORBIS
 	{ ".VOG", Audio::makeVorbisStream },
+	{ ".OGG", Audio::makeVorbisStream },
 #endif // USE_VORBIS
 #ifdef USE_MAD
 	{ ".VO3", Audio::makeMP3Stream },
@@ -555,3 +556,4 @@
 } // end of namespace Kyra
 
 
+
Index: engines/kyra/sound.h
===================================================================
--- engines/kyra/sound.h	(revision 31502)
+++ engines/kyra/sound.h	(working copy)
@@ -73,7 +73,8 @@
 		kAdlib,
 		kMidiMT32,
 		kMidiGM,
-		kTowns
+		kTowns,
+		kDigitalMidi
 	};
 
 	virtual kType getMusicType() const = 0;
@@ -375,6 +376,64 @@
 	Common::Mutex _mutex;
 };
 
+/**
+ * Digital Replacement Driver for MIDI
+ *
+ * This device replaces the original midi (music and effects) with digital recordings
+ * Audio files available from http://pix.www.idnet.com/lokoggs.rar
+ *
+ * Currently only supports LOK1
+ *
+ */
+class SoundDigitalMidi : public Sound {
+public:
+	SoundDigitalMidi(KyraEngine *vm, Audio::Mixer *mixer);
+	~SoundDigitalMidi();
+
+	kType getMusicType() const { return kDigitalMidi; }
+
+	bool init() { return true; }
+
+	void loadSoundFile(uint file);
+
+	void playTrack(uint8 track);
+	void haltTrack();
+
+	void playSoundEffect(uint8 track);
+
+	void beginFadeOut();
+
+private:
+	void playMusic(uint8 *data, uint32 size);
+	void stopMusic();
+	void stopSoundEffect();
+
+	uint8 _musicVolume;
+	uint8 _sfxVolume;
+
+	Common::String _currentTrack;
+	Common::String _currentSoundEffect;
+
+	struct DigitalTrack {
+		const uint8 track;
+		const bool loop;
+	};
+
+	static const DigitalTrack _introTracks[];
+	static const DigitalTrack _kyra1aTracks[];
+	static const DigitalTrack _kyra1bTracks[];
+	static const DigitalTrack _kyra2aTracks[];
+	static const DigitalTrack _kyra3aTracks[];
+	static const DigitalTrack _kyra4aTracks[];
+	static const DigitalTrack _kyra4bTracks[];
+	static const DigitalTrack _kyra5aTracks[];
+	static const DigitalTrack _kyra5bTracks[];
+	static const DigitalTrack _kyramiscTracks[];
+
+	DigitalTrack getDigitalMusicTrack(uint8 track);
+	DigitalTrack getDigitalEffectsTrack(uint8 track);
+};
+
 class SoundTowns_EuphonyDriver;
 class SoundTowns : public MidiDriver, public Sound {
 public:
Index: engines/kyra/sound_digitalmidi.cpp
===================================================================
--- engines/kyra/sound_digitalmidi.cpp	(revision 0)
+++ engines/kyra/sound_digitalmidi.cpp	(revision 0)
@@ -0,0 +1,327 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+
+#include "common/system.h"
+#include "kyra/resource.h"
+#include "kyra/sound.h"
+
+#include "sound/mixer.h"
+#include "sound/voc.h"
+#include "sound/audiostream.h"
+
+#include "sound/mp3.h"
+#include "sound/vorbis.h"
+#include "sound/flac.h"
+
+#include "sound/audiocd.h"
+
+namespace Kyra {	
+
+SoundDigitalMidi::SoundDigitalMidi(KyraEngine *vm, Audio::Mixer *mixer) : Sound(vm, mixer) {
+}
+
+SoundDigitalMidi::~SoundDigitalMidi() {
+	stopMusic();
+	stopSoundEffect();
+}
+
+SoundDigitalMidi::DigitalTrack SoundDigitalMidi::getDigitalMusicTrack(uint8 track) {
+	  if (_vm->game() == GI_KYRA1) {
+		  if(_currentTrack == "kyra1a") return _kyra1aTracks[track];
+		  else if (_currentTrack == "kyra1b") return _kyra1bTracks[track];
+		  else if (_currentTrack == "kyra2a") return _kyra2aTracks[track];
+		  else if (_currentTrack == "kyra3a") return _kyra3aTracks[track];
+		  else if (_currentTrack == "kyra4a") return _kyra4aTracks[track];
+		  else if (_currentTrack == "kyra4b") return _kyra4bTracks[track];
+		  else if (_currentTrack == "kyra5a") return _kyra5aTracks[track];
+		  else if (_currentTrack == "kyra5b") return _kyra5bTracks[track];
+		  else if (_currentTrack == "kyramisc") return _kyramiscTracks[track];
+		  else if (_currentTrack == "intro") return _introTracks[track];
+	   }
+       return _introTracks[0]; //return empty track
+      
+ }
+SoundDigitalMidi::DigitalTrack SoundDigitalMidi::getDigitalEffectsTrack(uint8 track) {
+	 if (_vm->game() == GI_KYRA1) {
+		return getDigitalMusicTrack(track);
+	 }
+	 return _introTracks[0]; //return empty track
+}
+
+void SoundDigitalMidi::loadSoundFile(uint file) {
+	Common::String filename = fileListEntry(file);
+	filename.toLowercase();
+	_currentTrack = filename;
+	stopMusic();
+	stopSoundEffect();
+}
+
+void SoundDigitalMidi::stopMusic() {
+	if (AudioCD.isPlaying()) AudioCD.stop();
+}
+
+void SoundDigitalMidi::playTrack(uint8 track) {
+	DigitalTrack dTrack = getDigitalMusicTrack(track);
+	bool loop = dTrack.loop;
+	uint8 tracktoplay = dTrack.track;
+	
+	if(tracktoplay != 0) {
+		AudioCD.play(tracktoplay, loop ? -1 : 1, 0, 0);
+	}
+}
+
+void SoundDigitalMidi::haltTrack() {
+	if (AudioCD.isPlaying()) AudioCD.stop();
+}
+
+void SoundDigitalMidi::playSoundEffect(uint8 track) {
+	char filenamebuffer[25];
+	DigitalTrack dTrack=getDigitalEffectsTrack(track);
+	sprintf(filenamebuffer, "track%i", dTrack.track);
+	if(dTrack.track!=0) {
+		stopSoundEffect();
+		voicePlay(filenamebuffer,true);
+		_currentSoundEffect = filenamebuffer;
+	}
+}
+
+void SoundDigitalMidi::beginFadeOut() {
+// TODO: add fadeout support
+}
+
+void SoundDigitalMidi::stopSoundEffect() {
+	for (int i = 0; i < kNumChannelHandles; ++i) {
+		if (_soundChannels[i].file == _currentSoundEffect)
+			_mixer->stopHandle(_soundChannels[i].channelHandle);
+	}
+}
+
+const SoundDigitalMidi::DigitalTrack SoundDigitalMidi::_introTracks[] = {
+	{0, false},  {0, false},  {1, false}, {2, false},  {3, true},   {4, true},
+	{0, false},  {0, false},  {0, false}, {0, false},  {0, false},  {0, false},
+	{0, false},  {0, false},  {0, false}, {0, false},  {0, false},  {0, false},
+	{0, false},  {0, false},  {0, false}, {0, false},  {50, false}, {51, false},
+	{52, false}, {53, false}, {0, false}, {54, false}, {55, false}, {0, false},
+	{56, false}, {57, false}, {0, false}, {58, false}, {59, false}, {60, false},
+	{61, false}, {62, false}, {63, false}
+};
+
+const SoundDigitalMidi::DigitalTrack SoundDigitalMidi::_kyra1aTracks[] = {
+	{0, false},   {0, false},   {5, true},    {6, true},    {7, true},    {0, false},
+	{0, false},   {0, false},   {0, false},   {0, false},   {0, false},   {0, false},
+	{0, false},   {0, false},   {0, false},   {0, false},   {0, false},   {0, false},
+	{0, false},   {0, false},   {71, false},  {72, false},  {73, false},  {74, false},
+	{75, false},  {76, false},  {77, false},  {78, false},  {79, false},  {80, false}, 
+	{81, false},  {82, false},  {83, false},  {84, false},  {85, false},  {86, false},
+	{87, false},  {88, false},  {89, false},  {90, false},  {0, false},   {0, false},
+	{0, false},   {94, false},  {95, false},  {0, false},   {97, false},  {98, false},
+	{99, false},  {100, false}, {101, false}, {102, false}, {103, false}, {104, false},
+	{105, false}, {106, false}, {107, false}, {108, false}, {109, false}, {110, false}, 
+	{111, false}, {112, false}, {113, false}, {114, false}, {115, false}, {0, false},
+	{0, false},   {118, false}, {119, false}, {120, false}, {121, false}, {122, false},
+	{123, false}, {124, false}, {125, true},  {0, false},   {127, false}, {128, false},
+	{129, false}, {130, false}, {131, false}, {132, false}, {133, false}, {134, false},
+	{135, false}, {136, false}, {137, false}, {138, false}, {139, false}, {140, false},
+	{141, false}, {142, false}, {143, true},  {144, false}, {145, false}, {146, false},
+	{147, false}, {148, false}, {149, false}, {150, false}, {151, false}, {152, false},
+	{153, false}, {154, false}, {155, false}, {156, false}, {157, false}, {158, false}, 
+	{159, false}, {160, false}, {0, false},   {162, false}, {163, false}, {164, false},
+	{165, false}, {0, false},   {167, false}, {168, false}, {169, false}, {170, false}
+};
+const SoundDigitalMidi::DigitalTrack SoundDigitalMidi::_kyra1bTracks[] = {
+	{0, false},   {0, false},   {9, true},    {10, false},  {11, true},   {45, true},
+	{12, false},  {13, false},  {14, true},	  {15, false},  {0, false},   {8, false},
+	{0, false},   {16, true},   {17, true},   {0, false}, 	{0, false},   {0, false},
+	{0, false},   {0, false},   {71, false},  {72, false},  {73, false},  {74, false},
+	{75, false},  {76, false},  {77, false},  {78, false},  {79, false},  {80, false}, 
+	{81, false},  {82, false},  {83, false},  {84, false},  {85, false},  {86, false},
+	{87, false},  {88, false},  {89, false},  {90, false},  {0, false},   {0, false},
+	{0, false},   {94, false},  {95, false},  {0, false},   {97, false},  {98, false},
+	{99, false},  {100, false}, {101, false}, {102, false}, {103, false}, {104, false},
+	{105, false}, {106, false}, {107, false}, {108, false}, {109, false}, {110, false}, 
+	{111, false}, {112, false}, {113, false}, {114, false}, {115, false}, {0, false},
+	{0, false},   {118, false}, {119, false}, {120, false}, {121, false}, {122, false},
+	{123, false}, {124, false}, {125, true},  {0, false},   {127, false}, {128, false},
+	{129, false}, {130, false}, {131, false}, {132, false}, {133, false}, {134, false},
+	{135, false}, {136, false}, {137, false}, {138, false}, {139, false}, {140, false},
+	{141, false}, {142, false}, {143, true},  {144, false}, {145, false}, {146, false},
+	{147, false}, {148, false}, {149, false}, {150, false}, {151, false}, {152, false},
+	{153, false}, {154, false}, {155, false}, {156, false}, {157, false}, {158, false}, 
+	{159, false}, {160, false}, {0, false},   {162, false}, {163, false}, {164, false},
+	{165, false}, {0, false},   {167, false}, {168, false}, {169, false}, {170, false}
+};
+const SoundDigitalMidi::DigitalTrack SoundDigitalMidi::_kyra2aTracks[] = {
+	{0, false},   {0, false},   {18, true},   {19, true},   {20, false},  {21, true},
+	{22, false},  {23, true},   {0, false},   {0, false},   {0, false},   {0, false}, 
+	{0, false},   {0, false},   {0, false},   {0, false},   {0, false},   {0, false},
+	{0, false},   {0, false},   {71, false},  {72, false},  {73, false},  {74, false}, 
+	{75, false},  {76, false},  {77, false},  {78, false},  {79, false},  {80, false}, 
+	{81, false},  {82, false},  {83, false},  {84, false},  {85, false},  {86, false},
+	{87, false},  {88, false},  {89, false},  {90, false},  {0, false},   {0, false},
+	{0, false},   {94, false},  {95, false},  {0, false},   {97, false},  {98, false},
+	{99, false},  {100, false}, {101, false}, {102, false}, {103, false}, {104, false},
+	{105, false}, {106, false}, {107, false}, {108, false}, {109, false}, {110, false}, 
+	{111, false}, {112, false}, {113, false}, {114, false}, {115, false}, {0, false},
+	{0, false},   {118, false}, {119, false}, {120, false}, {121, false}, {122, false},
+	{123, false}, {124, false}, {125, true},  {0, false},   {127, false}, {128, false},
+	{129, false}, {130, false}, {131, false}, {132, false}, {133, false}, {134, false},
+	{135, false}, {136, false}, {137, false}, {138, false}, {139, false}, {140, false},
+	{141, false}, {142, false}, {143, true},  {144, false}, {145, false}, {146, false},
+	{147, false}, {148, false}, {149, false}, {150, false}, {151, false}, {152, false},
+	{153, false}, {154, false}, {155, false}, {156, false}, {157, false}, {158, false}, 
+	{159, false}, {160, false}, {0, false},   {162, false}, {163, false}, {164, false},
+	{165, false}, {0, false},   {167, false}, {168, false}, {169, false}, {170, false}
+};
+const SoundDigitalMidi::DigitalTrack SoundDigitalMidi::_kyra3aTracks[] = {
+	{0, false},   {0, false},   {5, true},    {25, true},   {26, true},   {0, false},
+	{0, false},   {0, false},   {0, false},   {0, false},   {0, false},   {0, false},
+	{0, false},   {0, false},   {0, false},   {0, false},   {0, false},   {0, false},
+	{0, false},   {0, false},   {71, false},  {72, false},  {73, false},  {74, false},
+	{75, false},  {76, false},  {77, false},  {78, false},  {79, false},  {80, false}, 
+	{81, false},  {82, false},  {83, false},  {84, false},  {85, false},  {86, false},
+	{87, false},  {88, false},  {89, false},  {90, false},  {0, false},   {0, false},
+	{0, false},   {94, false},  {95, false},  {0, false},   {97, false},  {98, false},
+	{99, false},  {100, false}, {101, false}, {102, false}, {103, false}, {104, false},
+	{105, false}, {106, false}, {107, false}, {108, false}, {109, false}, {110, false}, 
+	{111, false}, {112, false}, {113, false}, {114, false}, {115, false}, {0, false},
+	{0, false},   {118, false}, {119, false}, {120, false}, {121, false}, {122, false},
+	{123, false}, {124, false}, {125, true},  {0, false},   {127, false}, {128, false},
+	{129, false}, {130, false}, {131, false}, {132, false}, {133, false}, {134, false},
+	{135, false}, {136, false}, {137, false}, {138, false}, {139, false}, {140, false},
+	{141, false}, {142, false}, {143, true},  {144, false}, {145, false}, {146, false},
+	{147, false}, {148, false}, {149, false}, {150, false}, {151, false}, {152, false},
+	{153, false}, {154, false}, {155, false}, {156, false}, {157, false}, {158, false}, 
+	{159, false}, {160, false}, {0, false},   {162, false}, {163, false}, {164, false},
+	{165, false}, {0, false},   {167, false}, {168, false}, {169, false}, {170, false}
+};
+const SoundDigitalMidi::DigitalTrack SoundDigitalMidi::_kyra4aTracks[] = {
+	{0, false},   {0, false},   {27, true},   {28, true},   {47, false},  {48, false},
+	{49, false},  {29, false},  {30, true},   {64, false},  {0, false},   {0, false},
+	{0, false},   {0, false},   {0, false},   {0, false},   {0, false},   {0, false},
+	{0, false},   {0, false},   {71, false},  {72, false},  {73, false},  {74, false}, 
+	{75, false},  {76, false},  {77, false},  {78, false},  {79, false},  {80, false}, 
+	{81, false},  {82, false},  {83, false},  {84, false},  {85, false},  {86, false},
+	{87, false},  {88, false},  {89, false},  {90, false},  {0, false},   {0, false},
+	{0, false},   {94, false},  {95, false},  {0, false},   {97, false},  {98, false},
+	{99, false},  {100, false}, {101, false}, {102, false}, {103, false}, {104, false},
+	{105, false}, {106, false}, {107, false}, {108, false}, {109, false}, {110, false}, 
+	{111, false}, {112, false}, {113, false}, {114, false}, {115, false}, {0, false},
+	{0, false},   {118, false}, {119, false}, {120, false}, {121, false}, {122, false},
+	{123, false}, {124, false}, {125, true},  {0, false},   {127, false}, {128, false},
+	{129, false}, {130, false}, {131, false}, {132, false}, {133, false}, {134, false},
+	{135, false}, {136, false}, {137, false}, {138, false}, {139, false}, {140, false},
+	{141, false}, {142, false}, {143, true},  {144, false}, {145, false}, {146, false},
+	{147, false}, {148, false}, {149, false}, {150, false}, {151, false}, {152, false},
+	{153, false}, {154, false}, {155, false}, {156, false}, {157, false}, {158, false}, 
+	{159, false}, {160, false}, {0, false},   {162, false}, {163, false}, {164, false},
+	{165, false}, {0, false},   {167, false}, {168, false}, {169, false}, {170, false}
+};
+const SoundDigitalMidi::DigitalTrack SoundDigitalMidi::_kyra4bTracks[] = {
+	{0, false},   {0, false},   {0, false},   {0, false},   {0, false},   {0, false},
+	{0, false},   {0, false},   {0, false},   {0, false},   {31, true},   {65, false},
+	{0, false},   {0, false},   {0, false},   {0, false},   {0, false},   {0, false},
+	{0, false},   {0, false},   {71, false},  {72, false},  {73, false},  {74, false},
+	{75, false},  {76, false},  {77, false},  {78, false},  {79, false},  {80, false}, 
+	{81, false},  {82, false},  {83, false},  {84, false},  {85, false},  {86, false},
+	{87, false},  {88, false},  {89, false},  {90, false},  {0, false},   {0, false},
+	{0, false},   {94, false},  {95, false},  {0, false},   {97, false},  {98, false},
+	{99, false},  {100, false}, {101, false}, {102, false}, {103, false}, {104, false},
+	{105, false}, {106, false}, {107, false}, {108, false}, {109, false}, {110, false}, 
+	{111, false}, {112, false}, {113, false}, {114, false}, {115, false}, {0, false},
+	{0, false},   {118, false}, {119, false}, {120, false}, {121, false}, {122, false},
+	{123, false}, {124, false}, {125, true},  {0, false},   {127, false}, {128, false},
+	{129, false}, {130, false}, {131, false}, {132, false}, {133, false}, {134, false},
+	{135, false}, {136, false}, {137, false}, {138, false}, {139, false}, {140, false},
+	{141, false}, {142, false}, {143, true},  {144, false}, {145, false}, {146, false},
+	{147, false}, {148, false}, {149, false}, {150, false}, {151, false}, {152, false},
+	{153, false}, {154, false}, {155, false}, {156, false}, {157, false}, {158, false}, 
+	{159, false}, {160, false}, {0, false},   {162, false}, {163, false}, {164, false},
+	{165, false}, {0, false},   {167, false}, {168, false}, {169, false}, {170, false}
+};
+const SoundDigitalMidi::DigitalTrack SoundDigitalMidi::_kyra5aTracks[] = {
+	{0, false},   {0, false},   {33, true},   {34, true},   {0, true},    {7, true},
+	{66, false},  {67, false},  {68, false},  {69, false},  {0, false},   {70, false},
+	{0, false},   {0, false},   {0, false},   {0, false},   {0, false},   {0, false}, 
+	{0, false},   {0, false},   {71, false},  {72, false},  {73, false},  {74, false},
+	{75, false},  {76, false},  {77, false},  {78, false},  {79, false},  {80, false}, 
+	{81, false},  {82, false},  {83, false},  {84, false},  {85, false},  {86, false},
+	{87, false},  {88, false},  {89, false},  {90, false},  {0, false},   {0, false},
+	{0, false},   {94, false},  {95, false},  {0, false},   {97, false},  {98, false},
+	{99, false},  {100, false}, {101, false}, {102, false}, {103, false}, {104, false},
+	{105, false}, {106, false}, {107, false}, {108, false}, {109, false}, {110, false}, 
+	{111, false}, {112, false}, {113, false}, {114, false}, {115, false}, {0, false},
+	{0, false},   {118, false}, {119, false}, {120, false}, {121, false}, {122, false},
+	{123, false}, {124, false}, {125, true},  {0, false},   {127, false}, {128, false},
+	{129, false}, {130, false}, {131, false}, {132, false}, {133, false}, {134, false},
+	{135, false}, {136, false}, {137, false}, {138, false}, {139, false}, {140, false},
+	{141, false}, {142, false}, {143, true},  {144, false}, {145, false}, {146, false},
+	{147, false}, {148, false}, {149, false}, {150, false}, {151, false}, {152, false},
+	{153, false}, {154, false}, {155, false}, {156, false}, {157, false}, {158, false}, 
+	{159, false}, {160, false}, {0, false},   {162, false}, {163, false}, {164, false},
+	{165, false}, {0, false},   {167, false}, {168, false}, {169, false}, {170, false}
+};
+const SoundDigitalMidi::DigitalTrack SoundDigitalMidi::_kyra5bTracks[] = {
+	{0, false},   {0, false},   {35, false},  {36, false},  {0, false},   {37, false},
+	{38, false},  {39, false},  {40, false},  {41, false},  {0, false},   {0, false},
+	{0, false},   {0, false},   {0, false},   {0, false},	{0, false},   {0, false},
+	{0, false},   {0, false},   {71, false},  {72, false},  {73, false},  {74, false},
+	{75, false},  {76, false},  {77, false},  {78, false},  {79, false},  {80, false}, 
+	{81, false},  {82, false},  {83, false},  {84, false},  {85, false},  {86, false},
+	{87, false},  {88, false},  {89, false},  {90, false},  {0, false},   {0, false},
+	{0, false},   {94, false},  {95, false},  {0, false},   {97, false},  {98, false},
+	{99, false},  {100, false}, {101, false}, {102, false}, {103, false}, {104, false},
+	{105, false}, {106, false}, {107, false}, {108, false}, {109, false}, {110, false}, 
+	{111, false}, {112, false}, {113, false}, {114, false}, {115, false}, {0, false},
+	{0, false},   {118, false}, {119, false}, {120, false}, {121, false}, {122, false},
+	{123, false}, {124, false}, {125, true},  {0, false},   {127, false}, {128, false},
+	{129, false}, {130, false}, {131, false}, {132, false}, {133, false}, {134, false},
+	{135, false}, {136, false}, {137, false}, {138, false}, {139, false}, {140, false},
+	{141, false}, {142, false}, {143, true},  {144, false}, {145, false}, {146, false},
+	{147, false}, {148, false}, {149, false}, {150, false}, {151, false}, {152, false},
+	{153, false}, {154, false}, {155, false}, {156, false}, {157, false}, {158, false}, 
+	{159, false}, {160, false}, {0, false},   {162, false}, {163, false}, {164, false},
+	{165, false}, {0, false},   {167, false}, {168, false}, {169, false}, {170, false}
+};
+const SoundDigitalMidi::DigitalTrack SoundDigitalMidi::_kyramiscTracks[] = {
+	{0, false},   {0, false},   {42, true},   {43, true},   {36, false},  {0, false},
+	{0, false},   {0, false},   {0, false},   {0, false},   {0, false},   {0, false},
+	{0, false},   {0, false},   {0, false},   {0, false},   {0, false},   {0, false},
+	{0, false},   {0, false},   {71, false},  {72, false},  {73, false},  {74, false}, 
+	{75, false},  {76, false},  {77, false},  {78, false},  {79, false},  {80, false}, 
+	{81, false},  {82, false},  {83, false},  {84, false},  {85, false},  {86, false},
+	{87, false},  {88, false},  {89, false},  {90, false},  {0, false},   {0, false},
+	{0, false},   {94, false},  {95, false},  {0, false},   {97, false},  {98, false},
+	{99, false},  {100, false}, {101, false}, {102, false}, {103, false}, {104, false},
+	{105, false}, {106, false}, {107, false}, {108, false}, {109, false}, {110, false}, 
+	{111, false}, {112, false}, {113, false}, {114, false}, {115, false}, {0, false},
+	{0, false},   {118, false}, {119, false}, {120, false}, {121, false}, {122, false},
+	{123, false}, {124, false}, {125, true},  {0, false},   {127, false}, {128, false},
+	{129, false}, {130, false}, {131, false}, {132, false}, {133, false}, {134, false},
+	{135, false}, {136, false}, {137, false}, {138, false}, {139, false}, {140, false},
+	{141, false}, {142, false}, {143, true},  {144, false}, {145, false}, {146, false},
+	{147, false}, {148, false}, {149, false}, {150, false}, {151, false}, {152, false},
+	{153, false}, {154, false}, {155, false}, {156, false}, {157, false}, {158, false}, 
+	{159, false}, {160, false}, {0, false},   {162, false}, {163, false}, {164, false},
+	{165, false}, {0, false},   {167, false}, {168, false}, {169, false}, {170, false}
+};
+
+} // end of namespace Kyra
Index: sound/mididrv.cpp
===================================================================
--- sound/mididrv.cpp	(revision 31502)
+++ sound/mididrv.cpp	(working copy)
@@ -85,6 +85,7 @@
 	{"pcspk", "PC Speaker", MD_PCSPK, MDT_PCSPK},
 	{"pcjr", "IBM PCjr", MD_PCJR, MDT_PCSPK},
 	{"towns", "FM Towns", MD_TOWNS, MDT_TOWNS},
+	{"digitalmidi", "Digital MIDI Replacement", MD_DIGMID, MDT_DIGMID},
 #if defined(UNIX)
 	{"timidity", "TiMidity", MD_TIMIDITY, MDT_MIDI},
 #endif
@@ -206,6 +207,8 @@
 				musicDriver = MD_PCJR;
 			else if (flags & MDT_MIDI)
 				musicDriver = getDefaultMIDIDriver();
+			else if (flags & MDT_DIGMID)
+				musicDriver = MD_DIGMID;
 			else
 				musicDriver = MD_NULL;
 		}
Index: sound/mididrv.h
===================================================================
--- sound/mididrv.h	(revision 31502)
+++ sound/mididrv.h	(working copy)
@@ -82,7 +82,8 @@
 	MD_PCSPK,
 	MD_PCJR,
 	MD_TOWNS,
-	MD_TIMIDITY
+	MD_TIMIDITY,
+	MD_DIGMID
 };
 
 /**
@@ -101,7 +102,8 @@
 	MDT_ADLIB  = 1 << 1,      // Adlib: Maps to MD_ADLIB
 	MDT_TOWNS  = 1 << 2,      // FM-TOWNS: Maps to MD_TOWNS
 	MDT_MIDI   = 1 << 3,      // Real MIDI
-	MDT_PREFER_MIDI = 1 << 4  // Real MIDI output is preferred
+	MDT_PREFER_MIDI = 1 << 4, // Real MIDI output is preferred
+	MDT_DIGMID = 1 << 5       // Digital MIDI Replacement: Maps to MD_DIGMID
 };
 
 /**
