[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,1.59,1.60 imuse.h,1.12,1.13 saveload.cpp,1.14,1.15 sound.cpp,1.31,1.32 sound.h,1.11,1.12 string.cpp,1.29,1.30
Pawe? Ko?odziejski
aquadran at users.sourceforge.net
Mon Oct 14 23:54:05 CEST 2002
Update of /cvsroot/scummvm/scummvm/scumm
In directory usw-pr-cvs1:/tmp/cvs-serv27838
Modified Files:
imuse.cpp imuse.h saveload.cpp sound.cpp sound.h string.cpp
Log Message:
cleanup sfx and music in imuse, changed talkdelay description(disable) in the dig
Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- imuse.cpp 14 Oct 2002 16:42:57 -0000 1.59
+++ imuse.cpp 15 Oct 2002 06:53:41 -0000 1.60
@@ -4998,6 +4998,7 @@
memset(_channel, 0, sizeof(channel) * MAX_DIGITAL_CHANNELS);
_scumm = scumm;
_scumm->_timer->installProcedure(imus_digital_handler, 200);
+ _pause = false;
}
IMuseDigital::~IMuseDigital() {
@@ -5395,9 +5396,11 @@
};
void IMuseDigital::handler() {
- bool new_mixer;
uint32 l = 0, i = 0;
+ if (_pause == true)
+ return;
+
for (l = 0; l < MAX_DIGITAL_CHANNELS;l ++) {
if (_channel[l]._used) {
if (_channel[l]._toBeRemoved == true) {
@@ -5449,11 +5452,9 @@
uint32 mixer_size = new_size;
if (_channel[l]._mixerTrack == -1) {
- new_mixer = true;
mixer_size *= 2;
new_size *= 2;
} else {
- new_mixer = false;
}
if (_channel[l]._isJump == false) {
@@ -5506,7 +5507,12 @@
}
}
- if (new_mixer) {
+
+ if (_channel[l]._mixerTrack == -1) {
+ _channel[l]._mixerTrack = _scumm->_mixer->playStream(NULL, -1, buf, mixer_size,
+ _channel[l]._freq, _channel[l]._mixerFlags);
+ continue;
+ } else if (_scumm->_mixer->_channels[_channel[l]._mixerTrack] == NULL) {
_channel[l]._mixerTrack = _scumm->_mixer->playStream(NULL, -1, buf, mixer_size,
_channel[l]._freq, _channel[l]._mixerFlags);
} else {
@@ -5692,6 +5698,10 @@
}
}
+void IMuseDigital::pause(bool pause) {
+ _pause = pause;
+}
+
int32 IMuseDigital::doCommand(int a, int b, int c, int d, int e, int f, int g, int h) {
byte cmd = a & 0xFF;
byte param = a >> 8;
@@ -5791,7 +5801,7 @@
} else if (param == 16) {
switch (cmd) {
case 0: // play music (state)
- debug(1, "IMuseDigital::doCommand 0x1000 (%d)", b);
+ debug(2, "IMuseDigital::doCommand 0x1000 (%d)", b);
if (_scumm->_gameId == GID_DIG) {
for(l = 0;; l++) {
if (_digStateMusicMap[l].room == -1) {
@@ -5799,7 +5809,7 @@
}
if (_digStateMusicMap[l].room == b) {
int16 music = _digStateMusicMap[l].table_index;
- debug(1, "Play imuse music: %s, %s, %s", _digStateMusicTable[music].name, _digStateMusicTable[music].title, _digStateMusicTable[music].filename);
+ debug(2, "Play imuse music: %s, %s, %s", _digStateMusicTable[music].name, _digStateMusicTable[music].title, _digStateMusicTable[music].filename);
if (_digStateMusicTable[music].filename[0] != 0) {
_scumm->_sound->playBundleMusic((char*)&_digStateMusicTable[music].filename);
}
@@ -5812,7 +5822,7 @@
return 1;
}
if (_ftStateMusicTable[l].index == b) {
- debug(1, "Play imuse music: %s, %s", _ftStateMusicTable[l].name, _ftStateMusicTable[l].audioname);
+ debug(2, "Play imuse music: %s, %s", _ftStateMusicTable[l].name, _ftStateMusicTable[l].audioname);
if (_ftStateMusicTable[l].audioname[0] != 0) {
for(r = 0; r < _scumm->_numAudioNames; r++) {
if (strcmp(_ftStateMusicTable[l].audioname, &_scumm->_audioNames[r * 9]) == 0) {
@@ -5826,14 +5836,14 @@
}
return 0;
case 1: // play music (seq)
- debug(1, "IMuseDigital::doCommand 0x1001 (%d)", b);
+ debug(2, "IMuseDigital::doCommand 0x1001 (%d)", b);
if (_scumm->_gameId == GID_DIG) {
for(l = 0;; l++) {
if (_digSeqMusicTable[l].index == -1) {
return 1;
}
if ((_digSeqMusicTable[l].index == b)) {
- debug(1, "Play imuse music: %s, %s, %s", _digSeqMusicTable[l].name, _digSeqMusicTable[l].title, _digSeqMusicTable[l].filename);
+ debug(2, "Play imuse music: %s, %s, %s", _digSeqMusicTable[l].name, _digSeqMusicTable[l].title, _digSeqMusicTable[l].filename);
if (_digSeqMusicTable[l].filename[0] != 0) {
_scumm->_sound->playBundleMusic((char*)&_digSeqMusicTable[l].filename);
}
@@ -5846,7 +5856,7 @@
return 1;
}
if (_ftSeqMusicTable[l].index == b) {
- debug(1, "Play imuse music: %s, %s", _ftSeqMusicTable[l].name, _ftSeqMusicTable[l].audioname);
+ debug(2, "Play imuse music: %s, %s", _ftSeqMusicTable[l].name, _ftSeqMusicTable[l].audioname);
if (_ftSeqMusicTable[l].audioname[0] != 0) {
for(r = 0; r < _scumm->_numAudioNames; r++) {
if (strcmp(_ftSeqMusicTable[l].audioname, &_scumm->_audioNames[r * 9]) == 0) {
Index: imuse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- imuse.h 8 Oct 2002 19:35:39 -0000 1.12
+++ imuse.h 15 Oct 2002 06:53:41 -0000 1.13
@@ -21,6 +21,7 @@
*/
class IMuseInternal;
+class MidiDriver;
class IMuse {
public:
@@ -108,6 +109,7 @@
} _channel[MAX_DIGITAL_CHANNELS];
Scumm * _scumm;
+ bool _pause;
public:
IMuseDigital(Scumm *scumm);
@@ -116,6 +118,7 @@
void startSound(int sound);
void stopSound(int sound);
void stopAll();
+ void pause(bool pause);
int32 doCommand(int a, int b, int c, int d, int e, int f, int g, int h);
int getSoundStatus(int sound);
};
Index: saveload.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/saveload.cpp,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- saveload.cpp 1 Oct 2002 21:19:52 -0000 1.14
+++ saveload.cpp 15 Oct 2002 06:53:41 -0000 1.15
@@ -115,6 +115,8 @@
_imuseDigital->stopAll();
}
+ _sound->stopBundleMusic();
+
_sound->pauseSounds(true);
CHECK_HEAP openRoom(-1);
@@ -614,8 +616,13 @@
int var120Backup;
int var98Backup;
- if (_mixer && !s->isSaving())
- _mixer->stopAll();
+ if (_mixer && !s->isSaving()) {
+ if (_imuseDigital) {
+ _imuseDigital->stopAll();
+ } else {
+ _mixer->stopAll();
+ }
+ }
if (_current_version == VER_V9)
s->saveLoadEntries(this, mainEntriesV9);
Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- sound.cpp 8 Oct 2002 19:35:39 -0000 1.31
+++ sound.cpp 15 Oct 2002 06:53:41 -0000 1.32
@@ -710,6 +710,12 @@
_soundsPaused = pause;
_scumm->_mixer->pause(pause);
+ _scumm->_sound->pauseBundleMusic(pause);
+
+ if (_scumm->_imuseDigital) {
+ _scumm->_imuseDigital->pause(pause);
+ }
+
if ((_scumm->_features & GF_AUDIOTRACKS) && _scumm->_vars[_scumm->VAR_MI1_TIMER] > 0) {
if (pause)
stopCDTimer();
@@ -843,8 +849,9 @@
void Sound::stopSfxSound() {
if (_scumm->_imuseDigital) {
_scumm->_imuseDigital->stopAll();
+ } else {
+ _scumm->_mixer->stopAll();
}
- _scumm->_mixer->stopAll();
}
@@ -901,6 +908,8 @@
_offsetSampleBundleMusic = 0;
_offsetBufBundleMusic = 0;
_pauseBundleMusic = false;
+ _musicBundleToBeRemoved = false;
+ _musicBundleToBeChanged = false;
_bundleMusicTrack = -1;
_numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(song);
_nameBundleMusic = song;
@@ -908,11 +917,9 @@
return;
}
if (strcmp(_nameBundleMusic, song) != 0) {
- _numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(song);
- _nameBundleMusic = song;
- _currentSampleBundleMusic = 0;
- _offsetSampleBundleMusic = 0;
- _offsetBufBundleMusic = 0;
+ _newNameBundleMusic = song;
+ _musicBundleToBeRemoved = false;
+ _musicBundleToBeChanged = true;
}
}
@@ -921,17 +928,7 @@
}
void Sound::stopBundleMusic() {
- _scumm->_timer->releaseProcedure(&music_handler);
- _nameBundleMusic = NULL;
- _bundleMusicTrack = -1;
- if (_musicBundleBufFinal) {
- free(_musicBundleBufFinal);
- _musicBundleBufFinal = NULL;
- }
- if (_musicBundleBufOutput) {
- free(_musicBundleBufOutput);
- _musicBundleBufOutput = NULL;
- }
+ _musicBundleToBeRemoved = true;
}
void Sound::bundleMusicHandler(Scumm * scumm) {
@@ -940,11 +937,36 @@
int32 rate = 22050;
int32 tag, size = -1, header_size = 0;
- ptr = _musicBundleBufOutput;
-
if (_pauseBundleMusic)
return;
+ if (_musicBundleToBeRemoved == true) {
+ _scumm->_timer->releaseProcedure(&music_handler);
+ _nameBundleMusic = NULL;
+ _scumm->_mixer->stopChannel(_bundleMusicTrack);
+ _bundleMusicTrack = -1;
+ if (_musicBundleBufFinal) {
+ free(_musicBundleBufFinal);
+ _musicBundleBufFinal = NULL;
+ }
+ if (_musicBundleBufOutput) {
+ free(_musicBundleBufOutput);
+ _musicBundleBufOutput = NULL;
+ }
+ return;
+ }
+
+ if (_musicBundleToBeChanged == true) {
+ _nameBundleMusic = _newNameBundleMusic;
+ _numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(_nameBundleMusic);
+ _currentSampleBundleMusic = 0;
+ _offsetSampleBundleMusic = 0;
+ _offsetBufBundleMusic = 0;
+ _musicBundleToBeChanged = false;
+ }
+
+ ptr = _musicBundleBufOutput;
+
for (k = 0, l = _currentSampleBundleMusic; l < num; k++) {
length = _scumm->_bundle->decompressMusicSampleByName(_nameBundleMusic, l, (_musicBundleBufOutput + ((k * 0x2000) + _offsetBufBundleMusic)));
_offsetSampleBundleMusic += length;
@@ -953,7 +975,7 @@
tag = READ_BE_UINT32(ptr); ptr += 4;
if (tag != MKID_BE('iMUS')) {
warning("Decompression of bundle song failed");
- _nameBundleMusic = NULL;
+ _musicBundleToBeRemoved = true;
return;
}
@@ -980,7 +1002,7 @@
}
if (size < 0) {
warning("Decompression sound failed (no size field)");
- _nameBundleMusic = NULL;
+ _musicBundleToBeRemoved = true;
return;
}
header_size = (ptr - _musicBundleBufOutput);
@@ -998,17 +1020,21 @@
}
}
- if (_currentSampleBundleMusic == num)
+ if (_currentSampleBundleMusic == num) {
_currentSampleBundleMusic = 0;
+ _offsetSampleBundleMusic = 0;
+ _offsetBufBundleMusic = 0;
+ }
size = OUTPUT_SIZE;
ptr = _musicBundleBufFinal;
byte * buffer = NULL;
uint32 final_size = decode12BitsSample(ptr, &buffer, size);
+
if (_bundleMusicTrack == -1) {
_bundleMusicTrack = _scumm->_mixer->playStream(NULL, -1, buffer, final_size, rate,
- SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_16BITS | SoundMixer::FLAG_STEREO);
+ SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_16BITS | SoundMixer::FLAG_STEREO, -1);
} else {
_scumm->_mixer->append(_bundleMusicTrack, buffer, final_size, rate,
SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_16BITS | SoundMixer::FLAG_STEREO);
Index: sound.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- sound.h 8 Oct 2002 19:35:39 -0000 1.11
+++ sound.h 15 Oct 2002 06:53:42 -0000 1.12
@@ -44,6 +44,7 @@
bool _soundVolumePreset;
char * _nameBundleMusic;
+ char * _newNameBundleMusic;
int32 _currentSampleBundleMusic;
int32 _numberSamplesBundleMusic;
int32 _offsetSampleBundleMusic;
@@ -52,6 +53,8 @@
byte * _musicBundleBufOutput;
bool _pauseBundleMusic;
int32 _bundleMusicTrack;
+ bool _musicBundleToBeChanged;
+ bool _musicBundleToBeRemoved;
int _talkChannel; /* Mixer channel actor is talking on */
File *_sfxFile;
Index: string.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/string.cpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- string.cpp 13 Oct 2002 05:39:26 -0000 1.29
+++ string.cpp 15 Oct 2002 06:53:42 -0000 1.30
@@ -475,7 +475,9 @@
charset._center = false;
charset._color = 15;
_bkColor = 0;
- _talkDelay = 1;
+ // FIXME: _talkdelay = 1 - display description, not correct ego actor talking,
+ // 0 - no display, correct ego actor talking
+ _talkDelay = 0;
restoreCharsetBg();
More information about the Scummvm-git-logs
mailing list