[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