[Scummvm-cvs-logs] CVS: scummvm/kyra kyra.cpp,1.8,1.9 sound.cpp,1.1,1.2 sound.h,1.1,1.2

James Brown ender at users.sourceforge.net
Sun Nov 14 06:13:00 CET 2004


Update of /cvsroot/scummvm/scummvm/kyra
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1845/kyra

Modified Files:
	kyra.cpp sound.cpp sound.h 
Log Message:
Patch #1066150 from eriktorbjorn - Enable adlib emulated midi as fallback where hardware synth is unavailable.


Index: kyra.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/kyra.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- kyra.cpp	11 Nov 2004 13:35:21 -0000	1.8
+++ kyra.cpp	14 Nov 2004 14:11:54 -0000	1.9
@@ -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);

Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/sound.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- sound.cpp	11 Nov 2004 13:37:35 -0000	1.1
+++ sound.cpp	14 Nov 2004 14:11:54 -0000	1.2
@@ -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

Index: sound.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/sound.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- sound.h	11 Nov 2004 13:37:35 -0000	1.1
+++ sound.h	14 Nov 2004 14:11:54 -0000	1.2
@@ -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;





More information about the Scummvm-git-logs mailing list