[Scummvm-git-logs] scummvm master -> 16eac57834b06d15c182ece6eaf15abd103606eb
sev-
sev at scummvm.org
Wed Jan 31 16:39:23 CET 2018
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
16eac57834 SCUMM: implement lipsync for v7 games
Commit: 16eac57834b06d15c182ece6eaf15abd103606eb
https://github.com/scummvm/scummvm/commit/16eac57834b06d15c182ece6eaf15abd103606eb
Author: Adrian Frühwirth (bonki at users.noreply.github.com)
Date: 2018-01-31T16:38:07+01:00
Commit Message:
SCUMM: implement lipsync for v7 games
Changed paths:
engines/scumm/imuse_digi/dimuse.h
engines/scumm/imuse_digi/dimuse_script.cpp
engines/scumm/sound.cpp
diff --git a/engines/scumm/imuse_digi/dimuse.h b/engines/scumm/imuse_digi/dimuse.h
index 11b1ea6..02f899d 100644
--- a/engines/scumm/imuse_digi/dimuse.h
+++ b/engines/scumm/imuse_digi/dimuse.h
@@ -161,6 +161,7 @@ public:
int32 getCurVoiceLipSyncHeight();
int32 getCurMusicLipSyncWidth(int syncId);
int32 getCurMusicLipSyncHeight(int syncId);
+ int32 getSoundElapsedTimeInMs(int soundId);
};
} // End of namespace Scumm
diff --git a/engines/scumm/imuse_digi/dimuse_script.cpp b/engines/scumm/imuse_digi/dimuse_script.cpp
index f181e5b..3913a1a 100644
--- a/engines/scumm/imuse_digi/dimuse_script.cpp
+++ b/engines/scumm/imuse_digi/dimuse_script.cpp
@@ -408,6 +408,19 @@ int32 IMuseDigital::getCurMusicLipSyncHeight(int syncId) {
return height;
}
+int32 IMuseDigital::getSoundElapsedTimeInMs(int soundId) {
+ Common::StackLock lock(_mutex, "IMuseDigital::getPosInMs()");
+ for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+ Track *track = _track[l];
+ if (track->used && !track->toBeRemoved && (track->soundId == soundId)) {
+ int32 pos = (_mixer->getSoundElapsedTime(track->mixChanHandle));
+ return pos;
+ }
+ }
+
+ return 0;
+}
+
void IMuseDigital::stopAllSounds() {
Common::StackLock lock(_mutex, "IMuseDigital::stopAllSounds()");
debug(5, "IMuseDigital::stopAllSounds");
diff --git a/engines/scumm/sound.cpp b/engines/scumm/sound.cpp
index 318a0b8..599871b 100644
--- a/engines/scumm/sound.cpp
+++ b/engines/scumm/sound.cpp
@@ -444,6 +444,9 @@ void Sound::processSfxQueues() {
if (_vm->_imuseDigital) {
finished = !isSoundRunning(kTalkSoundID);
+#if defined(ENABLE_SCUMM_7_8)
+ _curSoundPos = _vm->_imuseDigital->getSoundElapsedTimeInMs(kTalkSoundID) * 60 / 1000;
+#endif
} else if (_vm->_game.heversion >= 60) {
finished = !isSoundRunning(1);
} else {
@@ -451,20 +454,16 @@ void Sound::processSfxQueues() {
// calculate speech sound position simulating increment at 60FPS
_curSoundPos = (_mixer->getSoundElapsedTime(*_talkChannelHandle) * 60) / 1000;
}
-
if ((uint) act < 0x80 && ((_vm->_game.version == 8) || (_vm->_game.version <= 7 && !_vm->_string[0].no_talk_anim))) {
a = _vm->derefActor(act, "processSfxQueues");
if (a->isInCurrentRoom()) {
- if (isMouthSyncOff(_curSoundPos) && _mouthSyncMode) {
+ if (finished || (isMouthSyncOff(_curSoundPos) && _mouthSyncMode)) {
a->runActorTalkScript(a->_talkStopFrame);
_mouthSyncMode = 0;
- } else if (isMouthSyncOff(_curSoundPos) == 0 && !_mouthSyncMode) {
+ } else if (isMouthSyncOff(_curSoundPos) == 0 && !_mouthSyncMode) {
a->runActorTalkScript(a->_talkStartFrame);
_mouthSyncMode = 1;
}
-
- if (_vm->_game.version <= 6 && finished)
- a->runActorTalkScript(a->_talkStopFrame);
}
}
More information about the Scummvm-git-logs
mailing list