[Scummvm-cvs-logs] scummvm master -> 63656348a7e09c7d026099c3bd204fca10393969

m-kiewitz m_kiewitz at users.sourceforge.net
Sun Jun 28 02:10:40 CEST 2015


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
63656348a7 TINSEL: DW1: add support for Miles Audio driver


Commit: 63656348a7e09c7d026099c3bd204fca10393969
    https://github.com/scummvm/scummvm/commit/63656348a7e09c7d026099c3bd204fca10393969
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2015-06-28T02:10:18+02:00

Commit Message:
TINSEL: DW1: add support for Miles Audio driver

- AdLib + MT32 support

Changed paths:
    engines/tinsel/music.cpp
    engines/tinsel/music.h
    engines/tinsel/tinsel.cpp



diff --git a/engines/tinsel/music.cpp b/engines/tinsel/music.cpp
index 8a7305f..354fce1 100644
--- a/engines/tinsel/music.cpp
+++ b/engines/tinsel/music.cpp
@@ -27,6 +27,8 @@
 #include "audio/audiostream.h"
 #include "audio/mididrv.h"
 #include "audio/midiparser.h"
+// Miles Audio for Discworld 1
+#include "audio/miles.h"
 #include "audio/decoders/adpcm.h"
 
 #include "backends/audiocd/audiocd.h"
@@ -373,8 +375,42 @@ void DeleteMidiBuffer() {
 	g_midiBuffer.pDat = NULL;
 }
 
-MidiMusicPlayer::MidiMusicPlayer() {
-	MidiPlayer::createDriver();
+MidiMusicPlayer::MidiMusicPlayer(TinselEngine *vm) {
+	_driver = NULL;
+	_milesAudioMode = false;
+	bool milesAudioEnabled = true;
+
+	if ((vm->getGameId() == GID_DW1) && (milesAudioEnabled)) {
+		// Discworld 1 uses Miles Audio 3
+		// use our own Miles Audio drivers
+		// DW1 has SAMPLE.AD + SAMPLE.OPL, but no SAMPLE.MT
+		::MidiDriver::DeviceHandle dev = ::MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM);
+		::MusicType musicType = ::MidiDriver::getMusicType(dev);
+
+		switch (musicType) {
+		case MT_ADLIB:
+			_driver = Audio::MidiDriver_Miles_AdLib_create("SAMPLE.AD", "SAMPLE.OPL");
+			break;
+		case MT_MT32:
+			_driver = Audio::MidiDriver_Miles_MT32_create("SAMPLE.MT");
+			break;
+		case MT_GM:
+			if (ConfMan.getBool("native_mt32")) {
+				_driver = Audio::MidiDriver_Miles_MT32_create("SAMPLE.MT");
+				musicType = MT_MT32;
+			}
+			break;
+		}
+		if (!_driver) {
+			// nothing got created yet? -> create default driver
+			MidiPlayer::createDriver();
+		} else {
+			_milesAudioMode = true;
+		}
+
+	} else {
+		MidiPlayer::createDriver();
+	}
 
 	int ret = _driver->open();
 	if (ret == 0) {
@@ -394,6 +430,11 @@ void MidiMusicPlayer::setVolume(int volume) {
 }
 
 void MidiMusicPlayer::send(uint32 b) {
+	if (_milesAudioMode) {
+		_driver->send(b);
+		return;
+	}
+
 	Audio::MidiPlayer::send(b);
 
 	byte channel = (byte)(b & 0x0F);
diff --git a/engines/tinsel/music.h b/engines/tinsel/music.h
index 0a78c39..422d80a 100644
--- a/engines/tinsel/music.h
+++ b/engines/tinsel/music.h
@@ -60,7 +60,7 @@ void dumpMusic();
 
 class MidiMusicPlayer : public Audio::MidiPlayer {
 public:
-	MidiMusicPlayer();
+	MidiMusicPlayer(TinselEngine *vm);
 
 	virtual void setVolume(int volume);
 
@@ -77,6 +77,8 @@ public:
 	// means. The default is 120.
 	uint32 getBaseTempo()	{ return _driver ? (109 * _driver->getBaseTempo()) / 120 : 0; }
 
+	bool _milesAudioMode;
+
 private:
 	void playXMIDI(uint32 size, bool loop);
 	void playSEQ(uint32 size, bool loop);
diff --git a/engines/tinsel/tinsel.cpp b/engines/tinsel/tinsel.cpp
index 57d8432..28e569c 100644
--- a/engines/tinsel/tinsel.cpp
+++ b/engines/tinsel/tinsel.cpp
@@ -890,7 +890,7 @@ void TinselEngine::initializePath(const Common::FSNode &gamePath) {
 }
 
 Common::Error TinselEngine::run() {
-	_midiMusic = new MidiMusicPlayer();
+	_midiMusic = new MidiMusicPlayer(this);
 	_pcmMusic = new PCMMusicPlayer();
 	_sound = new SoundManager(this);
 	_bmv = new BMVPlayer();






More information about the Scummvm-git-logs mailing list