[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