[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.135,1.136 dimuse.h,1.79,1.80 dimuse_script.cpp,1.40,1.41 dimuse_track.cpp,1.56,1.57

Pawel Kolodziejski aquadran at users.sourceforge.net
Sat Jan 28 08:31:07 CET 2006


Update of /cvsroot/scummvm/scummvm/scumm/imuse_digi
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1886/imuse_digi

Modified Files:
	dimuse.cpp dimuse.h dimuse_script.cpp dimuse_track.cpp 
Log Message:
experimental imuse without timer thread usage, it might still have issue stoped audio while switching rooms

Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.135
retrieving revision 1.136
diff -u -d -r1.135 -r1.136
--- dimuse.cpp	18 Jan 2006 17:39:48 -0000	1.135
+++ dimuse.cpp	28 Jan 2006 16:30:38 -0000	1.136
@@ -38,23 +38,20 @@
 	: soundId(-1), used(false), stream(NULL), stream2(NULL) {
 }
 
-void IMuseDigital::timer_handler(void *refCon) {
-	IMuseDigital *imuseDigital = (IMuseDigital *)refCon;
-	imuseDigital->callback();
-}
-
 IMuseDigital::IMuseDigital(ScummEngine *scumm, int fps)
 	: _vm(scumm) {
 	_pause = false;
 	_sound = new ImuseDigiSndMgr(_vm);
 	_callbackFps = fps;
+	_interval = 1000000 / fps;
+	_counter = _interval;
+	_firstCall = true;
 	resetState();
 	for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
 		_track[l] = new Track;
 		_track[l]->trackId = l;
 		_track[l]->used = false;
 	}
-	_vm->_timer->installTimerProc(timer_handler, 1000000 / _callbackFps, this);
 
 	_audioNames = NULL;
 	_numAudioNames = 0;
@@ -62,7 +59,6 @@
 
 IMuseDigital::~IMuseDigital() {
 	stopAllSounds();
-	_vm->_timer->removeTimerProc(timer_handler);
 	for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
 		delete _track[l];
 	}
@@ -79,8 +75,6 @@
 }
 
 void IMuseDigital::saveOrLoad(Serializer *ser) {
-	Common::StackLock lock(_mutex, "IMuseDigital::saveOrLoad()");
-
 	const SaveLoadEntry mainEntries[] = {
 		MK_OBSOLETE(IMuseDigital, _volVoice, sleInt32, VER(31), VER(42)),
 		MK_OBSOLETE(IMuseDigital, _volSfx, sleInt32, VER(31), VER(42)),
@@ -203,142 +197,154 @@
 }
 
 void IMuseDigital::callback() {
-	Common::StackLock lock(_mutex, "IMuseDigital::callback()");
+	if (_firstCall) {
+		_thisTime = _vm->_system->getMillis();
+		_firstCall = false;
+	}
 
-	for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
-		Track *track = _track[l];
-		if (track->used && !track->readyToRemove) {
-			if (track->toBeRemoved) {
-				track->readyToRemove = true;
-				continue;
-			}
+	_lastTime = _thisTime;
+	_thisTime = _vm->_system->getMillis();
+	int32 interval = 1000 * (_thisTime - _lastTime);
+	if (interval > 100000) {
+		warning("IMuseDigital::callback: long interval: %d", interval);
+		interval = _interval;
+	}
 
-			if (_pause || !_vm)
-				return;
+	_counter -= interval;
 
-			if (track->volFadeUsed) {
-				if (track->volFadeStep < 0) {
-					if (track->vol > track->volFadeDest) {
-						track->vol += track->volFadeStep;
-						if (track->vol < track->volFadeDest) {
-							track->vol = track->volFadeDest;
-							track->volFadeUsed = false;
-						}
-						if (track->vol == 0) {
-							track->toBeRemoved = true;
+	while (_counter <= 0) {
+		_counter += _interval;
+
+		if (_vm->_quit)
+			return;
+
+		for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
+			Track *track = _track[l];
+			if (track->used && !track->toBeRemoved) {
+				if (track->volFadeUsed) {
+					if (track->volFadeStep < 0) {
+						if (track->vol > track->volFadeDest) {
+							track->vol += track->volFadeStep;
+							if (track->vol < track->volFadeDest) {
+								track->vol = track->volFadeDest;
+								track->volFadeUsed = false;
+							}
+							if (track->vol == 0) {
+								track->toBeRemoved = true;
+							}
 						}
-					}
-				} else if (track->volFadeStep > 0) {
-					if (track->vol < track->volFadeDest) {
-						track->vol += track->volFadeStep;
+					} else if (track->volFadeStep > 0) {
+						if (track->vol < track->volFadeDest) {
+							track->vol += track->volFadeStep;
 						if (track->vol > track->volFadeDest) {
-							track->vol = track->volFadeDest;
-							track->volFadeUsed = false;
+								track->vol = track->volFadeDest;
+								track->volFadeUsed = false;
+							}
 						}
 					}
+					debug(5, "Fade: sound(%d), Vol(%d)", track->soundId, track->vol / 1000);
 				}
-				debug(5, "Fade: sound(%d), Vol(%d)", track->soundId, track->vol / 1000);
-			}
 
-			const int pan = (track->pan != 64) ? 2 * track->pan - 127 : 0;
-			const int vol = track->vol / 1000;
-			Audio::Mixer::SoundType type = Audio::Mixer::kPlainSoundType;
+				const int pan = (track->pan != 64) ? 2 * track->pan - 127 : 0;
+				const int vol = track->vol / 1000;
+				Audio::Mixer::SoundType type = Audio::Mixer::kPlainSoundType;
 
-			if (track->volGroupId == 1)
-				type = Audio::Mixer::kSpeechSoundType;
-			if (track->volGroupId == 2)
-				type = Audio::Mixer::kSFXSoundType;
-			if (track->volGroupId == 3)
-				type = Audio::Mixer::kMusicSoundType;
+				if (track->volGroupId == 1)
+					type = Audio::Mixer::kSpeechSoundType;
+				if (track->volGroupId == 2)
+					type = Audio::Mixer::kSFXSoundType;
+				if (track->volGroupId == 3)
+					type = Audio::Mixer::kMusicSoundType;
 
-			if (track->stream) {
-				byte *data = NULL;
-				int32 result = 0;
+				if (track->stream) {
+					byte *data = NULL;
+					int32 result = 0;
 
-				if (track->curRegion == -1) {
-					switchToNextRegion(track);
-					if (track->toBeRemoved)
-						continue;
-				}
+					if (track->curRegion == -1) {
+						switchToNextRegion(track);
+						if (track->toBeRemoved)
+							continue;
+					}
 
-				int bits = _sound->getBits(track->soundHandle);
-				int channels = _sound->getChannels(track->soundHandle);
+					int bits = _sound->getBits(track->soundHandle);
+					int channels = _sound->getChannels(track->soundHandle);
 
-				int32 mixer_size = track->iteration / _callbackFps;
+					int32 mixer_size = track->iteration / _callbackFps;
 
-				if (track->stream->endOfData()) {
-					mixer_size *= 2;
-				}
+					if (track->stream->endOfData()) {
+						mixer_size *= 2;
+					}
 
-				if ((bits == 12) || (bits == 16)) {
-					if (channels == 1)
-						mixer_size &= ~1;
-					if (channels == 2)
-						mixer_size &= ~3;
-				} else {
-					if (channels == 2)
-						mixer_size &= ~1;
-				}
+					if ((bits == 12) || (bits == 16)) {
+						if (channels == 1)
+							mixer_size &= ~1;
+						if (channels == 2)
+							mixer_size &= ~3;
+					} else {
+						if (channels == 2)
+							mixer_size &= ~1;
+					}
 
-				if (mixer_size == 0)
-					continue;
+					if (mixer_size == 0)
+						continue;
 
-				do {
-					if (bits == 12) {
-						byte *ptr = NULL;
+					do {
+						if (bits == 12) {
+							byte *ptr = NULL;
 
-						mixer_size += track->mod;
-						int mixer_size_12 = (mixer_size * 3) / 4;
-						int length = (mixer_size_12 / 3) * 4;
-						track->mod = mixer_size - length;
+							mixer_size += track->mod;
+							int mixer_size_12 = (mixer_size * 3) / 4;
+							int length = (mixer_size_12 / 3) * 4;
+							track->mod = mixer_size - length;
 
-						int32 offset = (track->regionOffset * 3) / 4;
-						int result2 = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &ptr, offset, mixer_size_12);
-						result = BundleCodecs::decode12BitsSample(ptr, &data, result2);
+							int32 offset = (track->regionOffset * 3) / 4;
+							int result2 = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &ptr, offset, mixer_size_12);
+							result = BundleCodecs::decode12BitsSample(ptr, &data, result2);
 
-						free(ptr);
-					} else if (bits == 16) {
-						result = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &data, track->regionOffset, mixer_size);
-						if (channels == 1) {
-							result &= ~1;
-						}
-						if (channels == 2) {
-							result &= ~3;
+							free(ptr);
+						} else if (bits == 16) {
+							result = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &data, track->regionOffset, mixer_size);
+							if (channels == 1) {
+								result &= ~1;
+							}
+							if (channels == 2) {
+								result &= ~3;
+							}
+						} else if (bits == 8) {
+							result = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &data, track->regionOffset, mixer_size);
+							if (channels == 2) {
+								result &= ~1;
 						}
-					} else if (bits == 8) {
-						result = _sound->getDataFromRegion(track->soundHandle, track->curRegion, &data, track->regionOffset, mixer_size);
-						if (channels == 2) {
-							result &= ~1;
 						}
-					}
 
-					if (result > mixer_size)
-						result = mixer_size;
+						if (result > mixer_size)
+							result = mixer_size;
 
-					if (_vm->_mixer->isReady()) {
-						_vm->_mixer->setChannelVolume(track->handle, vol);
-						_vm->_mixer->setChannelBalance(track->handle, pan);
-						track->stream->append(data, result);
-						track->regionOffset += result;
-					}
-					free(data);
+						if (_vm->_mixer->isReady()) {
+							_vm->_mixer->setChannelVolume(track->handle, vol);
+							_vm->_mixer->setChannelBalance(track->handle, pan);
+							track->stream->append(data, result);
+							track->regionOffset += result;
+						}
+						free(data);
 
-					if (_sound->isEndOfRegion(track->soundHandle, track->curRegion)) {
-						switchToNextRegion(track);
-						if (track->toBeRemoved)
-							break;
-					}
-					mixer_size -= result;
-					assert(mixer_size >= 0);
-				} while (mixer_size != 0);
-			} else if (track->stream2) {
-				if (_vm->_mixer->isReady()) {
-					if (!track->started) {
-						track->started = true;
-						_vm->_mixer->playInputStream(type, &track->handle, track->stream2, -1, vol, pan, false);
-					} else {
-						_vm->_mixer->setChannelVolume(track->handle, vol);
-						_vm->_mixer->setChannelBalance(track->handle, pan);
+						if (_sound->isEndOfRegion(track->soundHandle, track->curRegion)) {
+							switchToNextRegion(track);
+							if (track->toBeRemoved)
+								break;
+						}
+						mixer_size -= result;
+						assert(mixer_size >= 0);
+					} while (mixer_size != 0);
+				} else if (track->stream2) {
+					if (_vm->_mixer->isReady()) {
+						if (!track->started) {
+							track->started = true;
+							_vm->_mixer->playInputStream(type, &track->handle, track->stream2, -1, vol, pan, false);
+						} else {
+							_vm->_mixer->setChannelVolume(track->handle, vol);
+							_vm->_mixer->setChannelBalance(track->handle, pan);
+						}
 					}
 				}
 			}

Index: dimuse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.h,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -d -r1.79 -r1.80
--- dimuse.h	18 Jan 2006 17:39:48 -0000	1.79
+++ dimuse.h	28 Jan 2006 16:30:38 -0000	1.80
@@ -45,8 +45,6 @@
 class IMuseDigital : public MusicEngine {
 private:
 
-	int _callbackFps;
-
 	struct Track {
 		int trackId;
 
@@ -86,7 +84,6 @@
 
 	Track *_track[MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS];
 
-	Common::Mutex _mutex;
 	ScummEngine *_vm;
 	ImuseDigiSndMgr *_sound;
 
@@ -101,8 +98,10 @@
 	int32 _curMusicSeq;
 	int32 _curMusicCue;
 
-	static void timer_handler(void *refConf);
-	void callback();
+	int _callbackFps;
+	int32 _lastTime, _thisTime, _interval, _counter, _diff;
+	bool _firstCall;
+
 	void switchToNextRegion(Track *track);
 	int allocSlot(int priority);
 	void startSound(int soundId, const char *soundName, int soundType, int volGroupId, AudioStream *input, int hookId, int volume, int priority);
@@ -132,6 +131,9 @@
 	IMuseDigital(ScummEngine *scumm, int fps);
 	virtual ~IMuseDigital();
 
+	void callback();
+	void addDiff(int32 diff) { _diff += diff; }
+
 	void setAudioNames(int32 num, char *names);
 
 	void startVoice(int soundId, AudioStream *input);

Index: dimuse_script.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_script.cpp,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -d -r1.40 -r1.41
--- dimuse_script.cpp	18 Jan 2006 17:39:48 -0000	1.40
+++ dimuse_script.cpp	28 Jan 2006 16:30:38 -0000	1.41
@@ -163,15 +163,13 @@
 	debug(5, "flushTracks()");
 	for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
 		Track *track = _track[l];
-		if (track->used && (track->readyToRemove ||
-				(_vm->_insaneRunning && track->toBeRemoved))) { // INSANE hack for sync timer mode
+		if (track->used && track->toBeRemoved) {
 			if (track->stream) {
 				if (!track->stream->endOfStream()) {
 	 				track->stream->finish();
 	 			}
 				if (track->stream->endOfStream()
-						|| _vm->_mixer->isPaused() // hack for paused Mixer
-						|| _vm->_insaneRunning) { // INSANE hack for sync timer mode
+						|| _vm->_mixer->isPaused()) { // hack for paused Mixer
 					_vm->_mixer->stopHandle(track->handle);
 					delete track->stream;
 					track->stream = NULL;
@@ -194,7 +192,7 @@
 	bool found = false;
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
+		if (track->used && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
 			found = true;
 		}
 	}
@@ -238,7 +236,7 @@
 	if (msPos < 65536) {
 		for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 			Track *track = _track[l];
-			if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
+			if ((track->soundId == soundId) && track->used) {
 				_sound->getSyncSizeAndPtrById(track->soundHandle, syncId, sync_size, &sync_ptr);
 				if ((sync_size != 0) && (sync_ptr != NULL)) {
 					sync_size /= 4;
@@ -265,7 +263,7 @@
 int32 IMuseDigital::getPosInMs(int soundId) {
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
+		if ((track->soundId == soundId) && track->used) {
 			int32 pos = (5 * (track->dataOffset + track->regionOffset)) / (track->iteration / 200);
 			return pos;
 		}
@@ -280,7 +278,7 @@
 		Track *track = _track[l];
 		if (track->soundId == sound) {
 			if ((track->stream2 && _vm->_mixer->isSoundHandleActive(track->handle)) ||
-				(track->stream && track->used && !track->readyToRemove)) {
+				(track->stream && track->used)) {
 					return 1;
 			}
 		}
@@ -293,7 +291,7 @@
 	debug(5, "IMuseDigital::stopSound(%d)", soundId);
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
+		if ((track->soundId == soundId) && track->used) {
 			track->toBeRemoved = true;
 		}
 	}
@@ -304,7 +302,7 @@
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
+		if (track->used && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
 			soundId = track->soundId;
 		}
 	}
@@ -337,7 +335,7 @@
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
+		if (track->used && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
 			soundId = track->soundId;
 		}
 	}
@@ -355,7 +353,7 @@
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
+		if (track->used && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
 			soundId = track->soundId;
 		}
 	}
@@ -383,14 +381,13 @@
 		if (!foundNotRemoved)
 			break;
 		flushTracks();
-		_vm->_system->delayMillis(50);
-#if defined(_WIN32_WCE) || defined (PALMOS_MODE) || defined(__SYMBIAN32__)
-		_vm->parseEvents(); // timers are events, we need to consume them
-#endif
 	}
 }
 
 void IMuseDigital::pause(bool p) {
+	if ((_pause) && (!p)) {
+		_thisTime = _vm->_system->getMillis();
+	}
 	_pause = p;
 }
 

Index: dimuse_track.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_track.cpp,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -d -r1.56 -r1.57
--- dimuse_track.cpp	18 Jan 2006 17:39:48 -0000	1.56
+++ dimuse_track.cpp	28 Jan 2006 16:30:38 -0000	1.57
@@ -47,8 +47,7 @@
 		debug(5, "IMuseDigital::startSound(): All slots are full");
 		for (l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 			Track *track = _track[l];
-			if (track->used && !track->toBeRemoved &&
-					(lowest_priority > track->priority) && !track->stream2) {
+			if (track->used && (lowest_priority > track->priority) && !track->stream2) {
 				lowest_priority = track->priority;
 				trackId = l;
 			}
@@ -76,17 +75,8 @@
 	}
 
 	Track *track = _track[l];
-	while (track->used) {
-		// The designated track is not yet available. So, we call flushTracks()
-		// to get it processed (and thus made ready for us). Since the actual
-		// processing is done by another thread, we also call parseEvents to
-		// give it some time (and to avoid busy waiting/looping).
-		flushTracks();
-#ifndef __PLAYSTATION2__
-		_vm->parseEvents();
-#endif
-	}
-
+	flushTracks();
+	assert(!track->used);
 	track->pan = 64;
 	track->vol = volume * 1000;
 	track->volFadeDest = 0;
@@ -191,7 +181,7 @@
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
+		if ((track->soundId == soundId) && track->used) {
 			track->priority = priority;
 		}
 	}
@@ -202,18 +192,16 @@
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
+		if ((track->soundId == soundId) && track->used) {
 			track->vol = volume * 1000;
 		}
 	}
 }
 
 void IMuseDigital::setHookId(int soundId, int hookId) {
-	Common::StackLock lock(_mutex, "IMuseDigital::setHookId()");
-
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
+		if ((track->soundId == soundId) && track->used) {
 			track->curHookId = hookId;
 		}
 	}
@@ -224,7 +212,7 @@
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
+		if (track->used && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
 			soundId = track->soundId;
 		}
 	}
@@ -237,7 +225,7 @@
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
+		if (track->used && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
 			soundName = track->soundName;
 		}
 	}
@@ -250,7 +238,7 @@
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
+		if ((track->soundId == soundId) && track->used) {
 			track->pan = pan;
 		}
 	}
@@ -265,19 +253,18 @@
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
+		if ((track->soundId == soundId) && track->used) {
 			track->volGroupId = volGroupId;
 		}
 	}
 }
 
 void IMuseDigital::setFade(int soundId, int destVolume, int delay60HzTicks) {
-	Common::StackLock lock(_mutex, "IMuseDigital::setFade()");
 	debug(5, "IMuseDigital::setFade(%d, %d, %d)", soundId, destVolume, delay60HzTicks);
 
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if ((track->soundId == soundId) && track->used && !track->toBeRemoved) {
+		if ((track->soundId == soundId) && track->used) {
 			track->volFadeDelay = delay60HzTicks;
 			track->volFadeDest = destVolume * 1000;
 			track->volFadeStep = (track->volFadeDest - track->vol) * 60 * (1000 / _callbackFps) / (1000 * delay60HzTicks);
@@ -290,7 +277,7 @@
 	debug(5, "IMuseDigital::fadeOutMusic");
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		Track *track = _track[l];
-		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
+		if (track->used && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
 			cloneToFadeOutTrack(track, fadeDelay);
 			track->toBeRemoved = true;
 		}
@@ -303,39 +290,36 @@
 
 	debug(5, "IMuseDigital::cloneToFadeOutTrack(%d, %d)", track->trackId, fadeDelay);
 
-	{
-		Common::StackLock lock(_mutex, "IMuseDigital::cloneToFadeOutTrack()");
-		for (int l = MAX_DIGITAL_TRACKS; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
-			if (!_track[l]->used) {
-				fadeTrack = _track[l];
-				break;
-			}
+	for (int l = MAX_DIGITAL_TRACKS; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
+		if (!_track[l]->used) {
+			fadeTrack = _track[l];
+			break;
 		}
-		if (fadeTrack == 0)
-			error("IMuseDigital::cloneToFadeOutTrack() Can't find free fade track");
-
-		fadeTrack->pan = track->pan;
-		fadeTrack->vol = track->vol;
-		fadeTrack->volGroupId = track->volGroupId;
-		fadeTrack->priority = track->priority;
-		fadeTrack->soundId = track->soundId;
-		fadeTrack->dataOffset = track->dataOffset;
-		fadeTrack->regionOffset = track->regionOffset;
-		fadeTrack->curRegion = track->curRegion;
-		fadeTrack->curHookId = track->curHookId;
-		fadeTrack->iteration = track->iteration;
-		fadeTrack->mixerFlags = track->mixerFlags;
-		fadeTrack->mod = track->mod;
-		fadeTrack->toBeRemoved = track->toBeRemoved;
-		fadeTrack->readyToRemove = track->readyToRemove;
-		fadeTrack->souStream = track->souStream;
-		fadeTrack->started = track->started;
-		fadeTrack->stream2 = track->stream2;
-		strcpy(fadeTrack->soundName, track->soundName);
-		fadeTrack->soundType = track->soundType;
-		fadeTrack->soundHandle = _sound->cloneSound(track->soundHandle);
-		assert(fadeTrack->soundHandle);
 	}
+	if (fadeTrack == 0)
+		error("IMuseDigital::cloneToFadeOutTrack() Can't find free fade track");
+
+	fadeTrack->pan = track->pan;
+	fadeTrack->vol = track->vol;
+	fadeTrack->volGroupId = track->volGroupId;
+	fadeTrack->priority = track->priority;
+	fadeTrack->soundId = track->soundId;
+	fadeTrack->dataOffset = track->dataOffset;
+	fadeTrack->regionOffset = track->regionOffset;
+	fadeTrack->curRegion = track->curRegion;
+	fadeTrack->curHookId = track->curHookId;
+	fadeTrack->iteration = track->iteration;
+	fadeTrack->mixerFlags = track->mixerFlags;
+	fadeTrack->mod = track->mod;
+	fadeTrack->toBeRemoved = track->toBeRemoved;
+	fadeTrack->readyToRemove = track->readyToRemove;
+	fadeTrack->souStream = track->souStream;
+	fadeTrack->started = track->started;
+	fadeTrack->stream2 = track->stream2;
+	strcpy(fadeTrack->soundName, track->soundName);
+	fadeTrack->soundType = track->soundType;
+	fadeTrack->soundHandle = _sound->cloneSound(track->soundHandle);
+	assert(fadeTrack->soundHandle);
 
 	fadeTrack->volFadeDelay = fadeDelay;
 	fadeTrack->volFadeDest = 0;





More information about the Scummvm-git-logs mailing list