[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