[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,2.43,2.44 imuse.h,1.31,1.32 sound.cpp,1.113,1.114

Jamieson Christian jamieson630 at users.sourceforge.net
Sun May 18 22:05:12 CEST 2003


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv11576/scummvm/scumm

Modified Files:
	imuse.cpp imuse.h sound.cpp 
Log Message:
Proof of concept for XMIDI parser in Humongous games.
You must still uncomment the VAR_SOUNDPARAM setting for this to work...?

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 2.43
retrieving revision 2.44
diff -u -d -r2.43 -r2.44
--- imuse.cpp	17 May 2003 19:07:45 -0000	2.43
+++ imuse.cpp	19 May 2003 05:04:37 -0000	2.44
@@ -408,6 +408,7 @@
 	void setBase(byte **base);
 
 	uint32 property(int prop, uint32 value);
+	MidiDriver *getMidiDriver();
 
 	static IMuseInternal *create(OSystem *syst, MidiDriver *midi);
 };
@@ -526,6 +527,25 @@
 	terminate();
 }
 
+MidiDriver *IMuseInternal::getMidiDriver() {
+	MidiDriver *driver = NULL;
+
+	if (_midi_native) {
+		driver = _midi_native;
+#if !defined(__PALM_OS__) // Adlib not supported on PalmOS
+	} else {
+		// Route it through Adlib anyway.
+		if (!_midi_adlib) {
+			_midi_adlib = MidiDriver_ADLIB_create();
+			initMidiDriver (_midi_adlib);
+		}
+		driver = _midi_adlib;
+#endif
+	}
+
+	return driver;
+}
+
 byte *IMuseInternal::findTag(int sound, char *tag, int index) {
 	byte *ptr = NULL;
 	int32 size, pos;
@@ -3488,6 +3508,7 @@
 int IMuse::clear_queue() { in(); int ret = _target->clear_queue(); out(); return ret; }
 void IMuse::setBase(byte **base) { in(); _target->setBase (base); out(); }
 uint32 IMuse::property(int prop, uint32 value) { in(); uint32 ret = _target->property (prop, value); out(); return ret; }
+MidiDriver *IMuse::getMidiDriver() { in(); MidiDriver *ret = _target->getMidiDriver(); out(); return ret; }
 
 // The IMuse::create method provides a front-end factory
 // for creating IMuseInternal without exposing that class

Index: imuse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.h,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- imuse.h	17 May 2003 17:20:26 -0000	1.31
+++ imuse.h	19 May 2003 05:04:38 -0000	1.32
@@ -66,6 +66,7 @@
 	int clear_queue();
 	void setBase(byte **base);
 	uint32 property(int prop, uint32 value);
+	MidiDriver *getMidiDriver();
 
 	// Factory methods
 	static IMuse *create(OSystem *syst, MidiDriver *midi);

Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.cpp,v
retrieving revision 1.113
retrieving revision 1.114
diff -u -d -r1.113 -r1.114
--- sound.cpp	12 May 2003 19:53:18 -0000	1.113
+++ sound.cpp	19 May 2003 05:04:38 -0000	1.114
@@ -31,6 +31,8 @@
 #include "common/config-file.h"
 #include "common/util.h"
 
+#include "sound/midiparser.h"
+
 Sound::Sound(Scumm *parent) {
 	memset(this,0,sizeof(Sound));	// palmos
 	
@@ -174,6 +176,8 @@
 	int rate;
 	byte flags = SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE;
 	
+debug (0, "playSound (%d)", soundID);
+
 	debug(3,"playSound #%d (room %d)", soundID, _scumm->getResourceRoomNr(rtSound, soundID));
 	ptr = _scumm->getResourceAddress(rtSound, soundID);
 	if (ptr) {
@@ -244,6 +248,25 @@
 
 			// XMI playing stuff goes here
 			// ptr should be pointing to XMI file in memory
+			// HACK (Jamieson630): Just to see if it works.
+			static MidiParser *parser = 0;
+
+			MidiDriver *driver = 0;
+			if (_scumm && _scumm->_imuse)
+				driver = _scumm->_imuse->getMidiDriver();
+			if (driver) {
+				driver->setTimerCallback (0, 0);
+				if (parser) {
+					delete parser;
+					parser = 0;
+				}
+				parser = MidiParser::createParser_XMIDI();
+				parser->setMidiDriver (driver);
+				parser->setTimerRate (driver->getBaseTempo());
+				parser->loadMusic (ptr, size);
+				driver->open();
+				driver->setTimerCallback (parser, &MidiParser::timerCallback);
+			}
 
 			// FIXME: dumping xmi files for testing, remove when working
 			if (1) {





More information about the Scummvm-git-logs mailing list