[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