[Scummvm-cvs-logs] scummvm master -> b38c161c18f223c4c9c7495a77682c4435d42121

m-kiewitz m_kiewitz at users.sourceforge.net
Wed Jul 1 12:39:48 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:
b38c161c18 AGOS: add Miles Audio support for simon 2


Commit: b38c161c18f223c4c9c7495a77682c4435d42121
    https://github.com/scummvm/scummvm/commit/b38c161c18f223c4c9c7495a77682c4435d42121
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2015-07-01T12:40:16+02:00

Commit Message:
AGOS: add Miles Audio support for simon 2

currently not enabled by default, because there are some
issues.

Changed paths:
    engines/agos/midi.cpp
    engines/agos/midi.h
    engines/agos/sound.cpp



diff --git a/engines/agos/midi.cpp b/engines/agos/midi.cpp
index 6048247..fb6faef 100644
--- a/engines/agos/midi.cpp
+++ b/engines/agos/midi.cpp
@@ -28,6 +28,8 @@
 #include "agos/midi.h"
 
 #include "agos/drivers/accolade/mididriver.h"
+// Miles Audio for Simon 2
+#include "audio/miles.h"
 
 #include "gui/message.h"
 
@@ -62,7 +64,7 @@ MidiPlayer::MidiPlayer() {
 	_queuedTrack = 255;
 	_loopQueuedTrack = 0;
 
-	_accoladeMode = false;
+	_musicMode = kMusicModeDisabled;
 }
 
 MidiPlayer::~MidiPlayer() {
@@ -85,30 +87,39 @@ int MidiPlayer::open(int gameType, bool isDemo) {
 
 	bool accoladeUseMusicDrvFile = false;
 	MusicType accoladeMusicType = MT_INVALID;
+	MusicType milesAudioMusicType = MT_INVALID;
 
 	switch (gameType) {
 	case GType_ELVIRA1:
-		_accoladeMode = true;
+		_musicMode = kMusicModeAccolade;
 		break;
 	case GType_ELVIRA2:
 	case GType_WW:
 		// Attention: Elvira 2 shipped with INSTR.DAT and MUSIC.DRV
 		// MUSIC.DRV is the correct one. INSTR.DAT seems to be a left-over
-		_accoladeMode = true;
+		_musicMode = kMusicModeAccolade;
 		accoladeUseMusicDrvFile = true;
 		break;
 	case GType_SIMON1:
 		if (isDemo) {
-			_accoladeMode = true;
+			_musicMode = kMusicModeAccolade;
 			accoladeUseMusicDrvFile = true;
 		}
 		break;
+	case GType_SIMON2:
+		//_musicMode = kMusicModeMilesAudio;
+		// currently disabled, because there are a few issues
+		break;
 	default:
 		break;
 	}
 
-	if (_accoladeMode) {
-		MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MT32);
+	MidiDriver::DeviceHandle dev;
+	int ret = 0;
+
+	switch (_musicMode) {
+	case kMusicModeAccolade:
+		dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MT32);
 		accoladeMusicType = MidiDriver::getMusicType(dev);
 
 		switch (accoladeMusicType) {
@@ -129,12 +140,43 @@ int MidiPlayer::open(int gameType, bool isDemo) {
 			accoladeMusicType = MT_MT32;
 			break;
 		default:
-			_accoladeMode = false;
+			_musicMode = kMusicModeDisabled;
+			break;
+		}
+		break;
+
+	case kMusicModeMilesAudio:
+		dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MT32);
+		milesAudioMusicType = MidiDriver::getMusicType(dev);
+
+		switch (milesAudioMusicType) {
+		case MT_ADLIB:
+		case MT_MT32:
+			break;
+		case MT_GM:
+			if (!ConfMan.getBool("native_mt32")) {
+				// Not a real MT32 / no MUNT
+				::GUI::MessageDialog dialog(("You appear to be using a General MIDI device,\n"
+											"but your game only supports Roland MT32 MIDI.\n"
+											"Music got disabled because of this.\n"
+											"You may choose AdLib instead.\n"));
+				dialog.runModal();
+			}
+			// Switch to MT32 driver in any case
+			milesAudioMusicType = MT_MT32;
+			break;
+		default:
+			_musicMode = kMusicModeDisabled;
 			break;
 		}
+		break;
+
+	default:
+		break;
 	}
 
-	if (_accoladeMode) {
+	switch (_musicMode) {
+	case kMusicModeAccolade: {
 		// Setup midi driver
 		switch (accoladeMusicType) {
 		case MT_ADLIB:
@@ -314,7 +356,7 @@ int MidiPlayer::open(int gameType, bool isDemo) {
 				error("MUSIC.DRV: contents not acceptable");
 		}
 
-		int ret = _driver->open();
+		ret = _driver->open();
 		if (ret == 0) {
 			// Reset is done inside our MIDI driver
 			_driver->setTimerCallback(this, &onTimer);
@@ -323,8 +365,42 @@ int MidiPlayer::open(int gameType, bool isDemo) {
 		//setTimerRate(_driver->getBaseTempo());
 		return 0;
 	}
+	
+	case kMusicModeMilesAudio: {
+		switch (milesAudioMusicType) {
+		case MT_ADLIB: {
+			_driver = Audio::MidiDriver_Miles_AdLib_create("MIDPAK.AD", "MIDPAK.AD");
+			break;
+		}
+		case MT_MT32:
+			_driver = Audio::MidiDriver_Miles_MT32_create("");
+			break;
+		case MT_GM:
+			if (ConfMan.getBool("native_mt32")) {
+				_driver = Audio::MidiDriver_Miles_MT32_create("");
+				milesAudioMusicType = MT_MT32;
+			}
+			break;
+
+		default:
+			break;
+		}
+		if (!_driver)
+			return 255;
+
+		ret = _driver->open();
+		if (ret == 0) {
+			// Reset is done inside our MIDI driver
+			_driver->setTimerCallback(this, &onTimer);
+		}
+		return 0;
+	}
+
+	default:
+		break;
+	}
 
-	MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_ADLIB | MDT_MIDI | (gameType == GType_SIMON1 ? MDT_PREFER_MT32 : MDT_PREFER_GM));
+	dev = MidiDriver::detectDevice(MDT_ADLIB | MDT_MIDI | (gameType == GType_SIMON1 ? MDT_PREFER_MT32 : MDT_PREFER_GM));
 	_nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32"));
 
 	_driver = MidiDriver::createMidi(dev);
@@ -342,7 +418,7 @@ int MidiPlayer::open(int gameType, bool isDemo) {
 
 	_map_mt32_to_gm = (gameType != GType_SIMON2 && !_nativeMT32);
 
-	int ret = _driver->open();
+	ret = _driver->open();
 	if (ret)
 		return ret;
 	_driver->setTimerCallback(this, &onTimer);
@@ -359,8 +435,8 @@ void MidiPlayer::send(uint32 b) {
 	if (!_current)
 		return;
 
-	if (_accoladeMode) {
-		// Send directly to Accolade driver
+	if (_musicMode != kMusicModeDisabled) {
+		// Send directly to Accolade/Miles Audio driver
 		_driver->send(b);
 		return;
 	}
diff --git a/engines/agos/midi.h b/engines/agos/midi.h
index de0c239..e262669 100644
--- a/engines/agos/midi.h
+++ b/engines/agos/midi.h
@@ -33,6 +33,12 @@ class File;
 
 namespace AGOS {
 
+enum kMusicMode {
+	kMusicModeDisabled = 0,
+	kMusicModeAccolade = 1,
+	kMusicModeMilesAudio
+};
+
 struct MusicInfo {
 	MidiParser *parser;
 	byte *data;
@@ -120,7 +126,7 @@ public:
 	virtual void metaEvent(byte type, byte *data, uint16 length);
 
 private:
-	bool _accoladeMode;
+	kMusicMode _musicMode;
 };
 
 } // End of namespace AGOS
diff --git a/engines/agos/sound.cpp b/engines/agos/sound.cpp
index 78c67b2..762f60b 100644
--- a/engines/agos/sound.cpp
+++ b/engines/agos/sound.cpp
@@ -515,7 +515,7 @@ void Sound::readSfxFile(const Common::String &filename) {
 
 // This method is only used by Simon2
 void Sound::loadSfxTable(const char *gameFilename, uint32 base) {
-	stopAll();
+	stopAllSfx();
 
 	delete _effects;
 	const bool dataIsUnsigned = true;






More information about the Scummvm-git-logs mailing list