aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Kołodziejski2008-01-20 19:30:48 +0000
committerPaweł Kołodziejski2008-01-20 19:30:48 +0000
commitec66f6765c40bdc0a62be5a5755886bd38738ba8 (patch)
treeaebae23fee4b747c571f3cb03586a7e86b510c27
parente8374f6775cae3cc9a4b2f0613312bee4bf57d8d (diff)
downloadscummvm-rg350-ec66f6765c40bdc0a62be5a5755886bd38738ba8.tar.gz
scummvm-rg350-ec66f6765c40bdc0a62be5a5755886bd38738ba8.tar.bz2
scummvm-rg350-ec66f6765c40bdc0a62be5a5755886bd38738ba8.zip
added experimental hack to code to prevent the same start music again if old one didn't have chance finish. it's fix bug #1861704, it may fix other similiar things when seq is to null. added few changes to debug logs.
svn-id: r30590
-rw-r--r--engines/scumm/imuse_digi/dimuse.h1
-rw-r--r--engines/scumm/imuse_digi/dimuse_music.cpp2
-rw-r--r--engines/scumm/imuse_digi/dimuse_script.cpp6
-rw-r--r--engines/scumm/imuse_digi/dimuse_sndmgr.cpp2
-rw-r--r--engines/scumm/imuse_digi/dimuse_track.cpp15
5 files changed, 8 insertions, 18 deletions
diff --git a/engines/scumm/imuse_digi/dimuse.h b/engines/scumm/imuse_digi/dimuse.h
index 4783188c3b..9c0fa51e75 100644
--- a/engines/scumm/imuse_digi/dimuse.h
+++ b/engines/scumm/imuse_digi/dimuse.h
@@ -142,7 +142,6 @@ public:
void setPan(int soundId, int pan);
void setFade(int soundId, int destVolume, int delay60HzTicks);
int getCurMusicSoundId();
- char *getCurMusicSoundName();
void setHookId(int soundId, int hookId);
void setMusicVolume(int vol) {}
void stopSound(int sound);
diff --git a/engines/scumm/imuse_digi/dimuse_music.cpp b/engines/scumm/imuse_digi/dimuse_music.cpp
index 84f8599e5e..f0e34ab115 100644
--- a/engines/scumm/imuse_digi/dimuse_music.cpp
+++ b/engines/scumm/imuse_digi/dimuse_music.cpp
@@ -316,6 +316,8 @@ void IMuseDigital::playComiMusic(const char *songName, const imuseComiTable *tab
fadeOutMusic(60);
return;
}
+ if (getCurMusicSoundId() == table->soundId)
+ return;
if (table->transitionType == 4)
_stopingSequence = true;
if (table->transitionType == 2) {
diff --git a/engines/scumm/imuse_digi/dimuse_script.cpp b/engines/scumm/imuse_digi/dimuse_script.cpp
index 83ccebb1be..8a05f31110 100644
--- a/engines/scumm/imuse_digi/dimuse_script.cpp
+++ b/engines/scumm/imuse_digi/dimuse_script.cpp
@@ -174,6 +174,7 @@ void IMuseDigital::flushTrack(Track *track) {
if (track->souStreamUsed) {
_mixer->stopHandle(track->mixChanHandle);
} else if (track->stream) {
+ debug(5, "flushTrack() - soundId:%d", track->soundId);
// Finalize the appendable stream, then remove our reference to it.
// Note that there might still be some data left in the buffers of the
// appendable stream. We play it nice and wait till all of it
@@ -193,10 +194,11 @@ void IMuseDigital::flushTrack(Track *track) {
void IMuseDigital::flushTracks() {
Common::StackLock lock(_mutex, "IMuseDigital::flushTracks()");
- debug(5, "flushTracks()");
+ debug(6, "flushTracks()");
for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
Track *track = _track[l];
if (track->used && track->toBeRemoved && !_mixer->isSoundHandleActive(track->mixChanHandle)) {
+ debug(5, "flushTracks() - soundId:%d", track->soundId);
memset(track, 0, sizeof(Track));
}
}
@@ -204,7 +206,7 @@ void IMuseDigital::flushTracks() {
void IMuseDigital::refreshScripts() {
Common::StackLock lock(_mutex, "IMuseDigital::refreshScripts()");
- debug(5, "refreshScripts()");
+ debug(6, "refreshScripts()");
if (_stopingSequence) {
parseScriptCmds(0x1001, 0, 0, 0, 0, 0, 0, 0);
diff --git a/engines/scumm/imuse_digi/dimuse_sndmgr.cpp b/engines/scumm/imuse_digi/dimuse_sndmgr.cpp
index 5600ac21a1..1511b9aefc 100644
--- a/engines/scumm/imuse_digi/dimuse_sndmgr.cpp
+++ b/engines/scumm/imuse_digi/dimuse_sndmgr.cpp
@@ -633,7 +633,7 @@ int ImuseDigiSndMgr::getJumpFade(SoundDesc *soundDesc, int number) {
}
int32 ImuseDigiSndMgr::getDataFromRegion(SoundDesc *soundDesc, int region, byte **buf, int32 offset, int32 size) {
- debug(5, "getDataFromRegion() region:%d, offset:%d, size:%d, numRegions:%d", region, offset, size, soundDesc->numRegions);
+ debug(6, "getDataFromRegion() region:%d, offset:%d, size:%d, numRegions:%d", region, offset, size, soundDesc->numRegions);
assert(checkForProperHandle(soundDesc));
assert(buf && offset >= 0 && size >= 0);
assert(region >= 0 && region < soundDesc->numRegions);
diff --git a/engines/scumm/imuse_digi/dimuse_track.cpp b/engines/scumm/imuse_digi/dimuse_track.cpp
index 111f3acbde..05fa2eaddf 100644
--- a/engines/scumm/imuse_digi/dimuse_track.cpp
+++ b/engines/scumm/imuse_digi/dimuse_track.cpp
@@ -218,26 +218,13 @@ int IMuseDigital::getCurMusicSoundId() {
Track *track = _track[l];
if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
soundId = track->soundId;
+ break;
}
}
return soundId;
}
-char *IMuseDigital::getCurMusicSoundName() {
- Common::StackLock lock(_mutex, "IMuseDigital::getCurMusicSoundName()");
- char *soundName = NULL;
-
- for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
- Track *track = _track[l];
- if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
- soundName = track->soundName;
- }
- }
-
- return soundName;
-}
-
void IMuseDigital::setPan(int soundId, int pan) {
Common::StackLock lock(_mutex, "IMuseDigital::setPan()");
debug(5, "IMuseDigital::setPan(%d, %d)", soundId, pan);