[Scummvm-cvs-logs] CVS: scummvm insane.cpp,1.29,1.30 resource.cpp,1.81,1.82 sound.cpp,1.85,1.86

James Brown ender at users.sourceforge.net
Mon May 13 01:27:01 CEST 2002


Update of /cvsroot/scummvm/scummvm
In directory usw-pr-cvs1:/tmp/cvs-serv4511

Modified Files:
	insane.cpp resource.cpp sound.cpp 
Log Message:
The DIG SFX support - thanks to aquadran


Index: insane.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/insane.cpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- insane.cpp	12 May 2002 17:49:34 -0000	1.29
+++ insane.cpp	13 May 2002 08:25:58 -0000	1.30
@@ -257,8 +257,10 @@
 
 			break;
 		default :
-			error("trk %d: unknown tag inside iMUS %08x",
-			      trk, _imusSubTag[idx]);
+			error("trk %d: unknown tag inside iMUS %08x [%c%c%c%c]",
+			      trk, _imusSubTag[idx], _imusSubTag[idx] >> 24, 
+				  _imusSubTag[idx] >> 16, _imusSubTag[idx] >> 8,
+				  _imusSubTag[idx]);
 		}
 
 		_imusSubSize[idx] -= sublen;

Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/resource.cpp,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -d -r1.81 -r1.82
--- resource.cpp	12 May 2002 01:58:34 -0000	1.81
+++ resource.cpp	13 May 2002 08:25:58 -0000	1.82
@@ -557,13 +557,12 @@
 	basetag = fileReadDword();
 	total_size = fileReadDwordBE();
 
-	if (_gameId == GID_SAMNMAX || _features & GF_AFTER_V7) {
-		if (basetag == MKID('MIDI')) {
-			fileSeek(_fileHandle, -8, SEEK_CUR);
-			fileRead(_fileHandle, createResource(type, idx, total_size + 8),
-							 total_size + 8);
-			return 1;
-		}
+	//if (_gameId == GID_SAMNMAX || _features & GF_AFTER_V7) {
+	if (basetag == MKID('MIDI') || basetag == MKID('iMUS')) {
+		fileSeek(_fileHandle, -8, SEEK_CUR);
+		fileRead(_fileHandle, createResource(type, idx, total_size + 8),
+						 total_size + 8);
+		return 1;
 	} else if (basetag == MKID('SOU ')) {
 		best_pri = -1;
 		while (pos < total_size) {

Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound.cpp,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -d -r1.85 -r1.86
--- sound.cpp	12 May 2002 21:39:19 -0000	1.85
+++ sound.cpp	13 May 2002 08:25:58 -0000	1.86
@@ -87,6 +87,59 @@
 						data[1], data[2], data[3], data[4], data[5], data[6], data[7]
 				);
 #endif
+			if ((_gameId == GID_DIG) && (data[0] == 12)){
+				uint32 size, rate, tag, chan;
+				uint8 * ptr = getResourceAddress(rtSound, data[1]);
+				if (ptr != NULL) {
+					ptr+=16;       /* Skip header */
+					for (;;) {
+				    		tag = READ_BE_UINT32(ptr);  ptr+=4;
+						switch(tag) {
+							case MKID_BE('FRMT'):
+								size = READ_BE_UINT32(ptr); ptr+=16;					
+								rate = READ_BE_UINT32(ptr); ptr+=4;
+								chan = READ_BE_UINT32(ptr); ptr+=4;
+							break;
+							case MKID_BE('TEXT'):
+							case MKID_BE('REGN'):
+							case MKID_BE('STOP'):
+								size = READ_BE_UINT32(ptr); ptr+=size+4;
+							break;
+							case MKID_BE('DATA'):
+								size = READ_BE_UINT32(ptr); ptr+=4;
+							break;
+							default:
+								error("Unknown sfx header %c%c%c%c", tag>>24, tag>>16, tag>>8, tag);
+						}
+						if (tag == MKID_BE('DATA')) break;
+					}
+					if (chan == 1)
+					{
+						uint32 s_size = (size * 2) / 3;
+						byte * buffer = (byte*)malloc (s_size);
+						uint32 l = 0, r = 0, tmp;
+						memset (buffer, 0, s_size);
+						for (; l < size - 1; l += 3)
+						{
+							tmp = (ptr[l + 1] & 0x0f) << 8;
+							tmp = (tmp | ptr[l + 0]) << 4;
+							tmp -= 0x8000;
+//							buffer[r++] = (uint8)(tmp & 0xff);
+							buffer[r++] = (uint8)((tmp >> 8) & 0xff);
+
+							tmp = (ptr[l + 1] & 0xf0) << 4;
+							tmp = (tmp | ptr[l + 2]) << 4;
+							tmp -= 0x8000;
+//							buffer[r++] = (uint8)(tmp & 0xff);
+							buffer[r++] = (uint8)((tmp >> 8) & 0xff);
+						} 
+						_mixer->play_raw(NULL, buffer, s_size, rate, SoundMixer::FLAG_AUTOFREE);
+					} else {
+						warning("DIG: ignoring stereo sample");
+					}
+				}
+			}
+																										    																																						
 			if (!(_features & GF_AFTER_V7)) {
 				if (se)
 					_vars[VAR_SOUNDRESULT] =





More information about the Scummvm-git-logs mailing list