[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