[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.45,1.45.2.1 dimuse_sndmgr.cpp,1.26,1.26.2.1
Pawel Kolodziejski
aquadran at users.sourceforge.net
Sat Feb 14 22:38:02 CET 2004
Update of /cvsroot/scummvm/scummvm/scumm/imuse_digi
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23217/scumm/imuse_digi
Modified Files:
Tag: branch-0-6-0
dimuse.cpp dimuse_sndmgr.cpp
Log Message:
synced with HEAD - fix for FT sounds loop
Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.45
retrieving revision 1.45.2.1
diff -u -d -r1.45 -r1.45.2.1
--- dimuse.cpp 14 Feb 2004 10:52:08 -0000 1.45
+++ dimuse.cpp 15 Feb 2004 06:30:47 -0000 1.45.2.1
@@ -208,19 +208,6 @@
void IMuseDigital::switchToNextRegion(int track) {
int num_regions = _sound->getNumRegions(_track[track].soundHandle);
- int num_jumps = _sound->getNumJumps(_track[track].soundHandle);
- if (_vm->_gameId == GID_FT) {
- if (_track[track].curRegion == -1) {
- _track[track].curRegion = 0;
- _track[track].regionOffset = 0;
- return;
- }
- if (num_jumps != 0)
- _track[track].regionOffset = 0;
- else
- _track[track].toBeRemoved = true;
- return;
- }
if (++_track[track].curRegion == num_regions) {
_track[track].toBeRemoved = true;
@@ -296,8 +283,13 @@
assert(channels == 1 || channels == 2);
assert(0 < freq && freq <= 65535);
- freq /= 25;
- freq *= 25;
+ // Round the frequency to a multiple of 25. This is done to
+ // ensure we don't run into data under-/overflows (this is a
+ // design limitation of the current IMuseDigital code, which
+ // pushes data 'blindly' into the mixer, instead of providing
+ // a pull based interface, i.e. a custom AudioInputStream
+ // subclass).
+ freq -= (freq % 25);
_track[l].iteration = _track[l].pullSize = freq * channels;
Index: dimuse_sndmgr.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.cpp,v
retrieving revision 1.26
retrieving revision 1.26.2.1
diff -u -d -r1.26 -r1.26.2.1
--- dimuse_sndmgr.cpp 18 Jan 2004 16:59:54 -0000 1.26
+++ dimuse_sndmgr.cpp 15 Feb 2004 06:30:47 -0000 1.26.2.1
@@ -49,16 +49,30 @@
void ImuseDigiSndMgr::prepareSound(byte *ptr, int slot) {
if (READ_UINT32(ptr) == MKID('Crea')) {
- int size = 0, rate = 0, loops = 0;
- _sounds[slot].resPtr = readVOCFromMemory(ptr, size, rate, loops);
+ int size = 0, rate = 0, loops = 0, begin_loop = 0, end_loop = 0;
+ _sounds[slot].resPtr = readVOCFromMemory(ptr, size, rate, loops, begin_loop, end_loop);
_sounds[slot].freeResPtr = true;
_sounds[slot].bits = 8;
_sounds[slot].freq = rate;
_sounds[slot].channels = 1;
+ _sounds[slot].region[0].offset = 0;
_sounds[slot].region[0].length = size;
_sounds[slot].numRegions++;
- if (loops != 0)
+ if (loops != 0) {
+ if (begin_loop == 0) {
+ _sounds[slot].region[1].offset = end_loop;
+ _sounds[slot].numRegions++;
+ } else {
+ _sounds[slot].region[0].length = begin_loop;
+ _sounds[slot].region[1].offset = begin_loop;
+ _sounds[slot].region[1].length = end_loop - begin_loop;
+ _sounds[slot].region[2].offset = end_loop;
+ _sounds[slot].numRegions += 2;
+ }
+ _sounds[slot].jump[0].dest = begin_loop;
+ _sounds[slot].jump[0].offset = end_loop;
_sounds[slot].numJumps++;
+ }
} else if (READ_UINT32(ptr) == MKID('iMUS')) {
uint32 tag;
int32 size = 0;
More information about the Scummvm-git-logs
mailing list