[Scummvm-git-logs] scummvm master -> 3852d1406111253a0cf335c49699d862940e0323

dreammaster dreammaster at scummvm.org
Mon Oct 24 02:11:37 CEST 2016


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:
3852d14061 TITANIC: Match the CWaveFile duration method closer to original


Commit: 3852d1406111253a0cf335c49699d862940e0323
    https://github.com/scummvm/scummvm/commit/3852d1406111253a0cf335c49699d862940e0323
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-10-23T20:11:30-04:00

Commit Message:
TITANIC: Match the CWaveFile duration method closer to original

Changed paths:
    engines/titanic/sound/sound.cpp
    engines/titanic/sound/wave_file.cpp
    engines/titanic/sound/wave_file.h
    engines/titanic/true_talk/true_talk_manager.cpp



diff --git a/engines/titanic/sound/sound.cpp b/engines/titanic/sound/sound.cpp
index a8c4849..e48c876 100644
--- a/engines/titanic/sound/sound.cpp
+++ b/engines/titanic/sound/sound.cpp
@@ -159,7 +159,7 @@ int CSound::playSound(const CString &name, CProximity &prox) {
 	if (!waveFile)
 		return -1;
 
-	prox._soundDuration = waveFile->getDuration();
+	prox._soundDuration = waveFile->getDurationTicks();
 	if (prox._soundType != Audio::Mixer::kPlainSoundType)
 		waveFile->_soundType = prox._soundType;
 
@@ -209,7 +209,7 @@ int CSound::playSpeech(CDialogueFile *dialogueFile, int speechId, CProximity &pr
 	if (!waveFile)
 		return -1;
 
-	prox._soundDuration = waveFile->getDuration();
+	prox._soundDuration = waveFile->getDurationTicks();
 	activateSound(waveFile, prox._disposeAfterUse);
 
 	return _soundManager.playSound(*waveFile, prox);
diff --git a/engines/titanic/sound/wave_file.cpp b/engines/titanic/sound/wave_file.cpp
index 3f855cd..ade94aa 100644
--- a/engines/titanic/sound/wave_file.cpp
+++ b/engines/titanic/sound/wave_file.cpp
@@ -43,8 +43,17 @@ CWaveFile::~CWaveFile() {
 	}
 }
 
-uint CWaveFile::getDuration() const {
-	return _stream ? _stream->getLength().secs() : 0;
+uint CWaveFile::getDurationTicks() const {
+	if (!_stream)
+		return 0;
+
+	// FIXME: The original uses acmStreamSize to calculate
+	// a desired size. Since I have no idea how the system API
+	// method works, for now I'm using a simple ratio of a
+	// sample output to input value
+	uint size = _size - 0x46;
+	double newSize = (double)size * (1475712.0 / 199836.0);
+	return newSize * 1000.0 / _stream->getRate();
 }
 
 bool CWaveFile::loadSound(const CString &name) {
diff --git a/engines/titanic/sound/wave_file.h b/engines/titanic/sound/wave_file.h
index 4237f1a..19d3679 100644
--- a/engines/titanic/sound/wave_file.h
+++ b/engines/titanic/sound/wave_file.h
@@ -46,9 +46,11 @@ public:
 	~CWaveFile();
 
 	/**
-	 * Returns the duration of the wave file in seconds
+	 * Returns the duration of the wave file
+	 * @returns	Total ticks. Not really sure how ticks
+	 * map to real time
 	 */
-	uint getDuration() const;
+	uint getDurationTicks() const;
 
 	/**
 	 * Return the size of the wave file
diff --git a/engines/titanic/true_talk/true_talk_manager.cpp b/engines/titanic/true_talk/true_talk_manager.cpp
index a3f9523..0e90676 100644
--- a/engines/titanic/true_talk/true_talk_manager.cpp
+++ b/engines/titanic/true_talk/true_talk_manager.cpp
@@ -407,7 +407,7 @@ uint CTrueTalkManager::readDialogueSpeech() {
 		CWaveFile *waveFile = _gameManager->_sound.getTrueTalkSound(
 			_dialogueFile, _titleEngine._indexes[idx] - _dialogueId);
 		if (waveFile) {
-			_speechDuration += waveFile->getDuration();
+			_speechDuration += waveFile->getDurationTicks();
 		}
 	}
 





More information about the Scummvm-git-logs mailing list