[Scummvm-cvs-logs] CVS: scummvm/scumm sound.cpp,1.160,1.161 resource.cpp,1.104,1.105
Jonathan Gray
khalek at users.sourceforge.net
Sun Jul 6 08:03:07 CEST 2003
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv17506
Modified Files:
sound.cpp resource.cpp
Log Message:
add support for MRAW/dmu files in 3DO humongous games, has the overlapping music problem again so will probably have to play music via digital imuse at some point
Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.cpp,v
retrieving revision 1.160
retrieving revision 1.161
diff -u -d -r1.160 -r1.161
--- sound.cpp 6 Jul 2003 10:39:02 -0000 1.160
+++ sound.cpp 6 Jul 2003 15:02:13 -0000 1.161
@@ -239,6 +239,24 @@
_scumm->_mixer->playRaw(NULL, sound, size, rate, flags, soundID);
return;
}
+ else if (READ_UINT32(ptr) == MKID('MRAW')) {
+ // pcm music in 3DO humongous games
+ // TODO play via imuse so isSoundRunning can properly report music value?
+ ptr += 8 + READ_BE_UINT32(ptr+12);
+ if (READ_UINT32(ptr) != MKID('SDAT'))
+ return;
+
+ size = READ_BE_UINT32(ptr+4) - 8;
+ rate = 22050;
+ flags = SoundMixer::FLAG_AUTOFREE;
+
+ // Allocate a sound buffer, copy the data into it, and play
+ sound = (char *)malloc(size);
+ memcpy(sound, ptr + 8, size);
+ _scumm->_mixer->playRaw(NULL, sound, size, rate, flags, soundID);
+
+ return;
+ }
// XMIDI
else if ((READ_UINT32(ptr) == MKID('MIDI')) && (_scumm->_features & GF_HUMONGOUS)) {
// Pass XMIDI on to IMuse unprocessed.
@@ -658,6 +676,7 @@
} else if (sound == -1) {
// getSoundStatus(), with a -1, will return the
// ID number of the first active music it finds.
+ // TODO handle MRAW (pcm music) in humongous games
return _scumm->_imuse->getSoundStatus(sound);
}
}
Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource.cpp,v
retrieving revision 1.104
retrieving revision 1.105
diff -u -d -r1.104 -r1.105
--- resource.cpp 6 Jul 2003 12:04:37 -0000 1.104
+++ resource.cpp 6 Jul 2003 15:02:13 -0000 1.105
@@ -848,6 +848,7 @@
// Specifies a seperate file to be used for music from what I gather.
int tmpsize;
int i = 0;
+ File dmuFile;
char buffer[128];
debug(1, "Found base tag FMUS in sound %d, size %d", idx, total_size);
debug(1, "It was at position %d", _fileHandle.pos());
@@ -861,15 +862,23 @@
tmpsize = _fileHandle.readUint32BE();
// SDAT contains name of file we want
- do {
+ for (i = 0; (buffer[i] != ' ') && (i < tmpsize - 8) ; i++) {
buffer[i] = _fileHandle.readByte();
- i++;
- } while (i < tmpsize && i < 128 && buffer[i] != ' ');
- buffer[i] = '\0';
+ }
+ buffer[tmpsize - 11] = '\0';
debug(1, "FMUS file %s", buffer);
-
- res.roomoffs[type][idx] = 0xFFFFFFFF;
- return 0;
+ if (dmuFile.open(buffer, getGameDataPath()) == false) {
+ warning("Can't open music file %s*", buffer);
+ res.roomoffs[type][idx] = 0xFFFFFFFF;
+ return 0;
+ }
+ dmuFile.seek(4, SEEK_SET);
+ total_size = dmuFile.readUint32BE();
+ debug(1, "dmu file size %d", total_size);
+ dmuFile.seek(-8, SEEK_CUR);
+ dmuFile.read(createResource(type, idx, total_size), total_size);
+ dmuFile.close();
+ return 1;
} else if (basetag == MKID('Crea')) {
_fileHandle.seek(-12, SEEK_CUR);
total_size = _fileHandle.readUint32BE();
More information about the Scummvm-git-logs
mailing list