aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2013-08-10 16:23:51 +0200
committerStrangerke2013-08-10 16:23:51 +0200
commit272740bb5c4ef1576ccf270f944c4f7dfef66d5c (patch)
tree9e070ed3e3d21cea24d25ffe632ec86d4f0ac1f5
parent673ea511ea4340cd6685343101d280535335b84b (diff)
downloadscummvm-rg350-272740bb5c4ef1576ccf270f944c4f7dfef66d5c.tar.gz
scummvm-rg350-272740bb5c4ef1576ccf270f944c4f7dfef66d5c.tar.bz2
scummvm-rg350-272740bb5c4ef1576ccf270f944c4f7dfef66d5c.zip
MORTEVIELLE: Handle sounds
-rw-r--r--engines/mortevielle/mortevielle.h3
-rw-r--r--engines/mortevielle/sound.cpp56
-rw-r--r--engines/mortevielle/speech.cpp5
3 files changed, 26 insertions, 38 deletions
diff --git a/engines/mortevielle/mortevielle.h b/engines/mortevielle/mortevielle.h
index bedb6a1ceb..19e580816d 100644
--- a/engines/mortevielle/mortevielle.h
+++ b/engines/mortevielle/mortevielle.h
@@ -52,7 +52,8 @@ namespace Mortevielle {
// Debug channels
enum {
kMortevielleCore = 1 << 0,
- kMortevielleGraphics = 1 << 1
+ kMortevielleGraphics = 1 << 1,
+ kMortevielleSounds = 1 << 2
};
// Game languages
diff --git a/engines/mortevielle/sound.cpp b/engines/mortevielle/sound.cpp
index 5dea574a81..01d7176ab2 100644
--- a/engines/mortevielle/sound.cpp
+++ b/engines/mortevielle/sound.cpp
@@ -201,38 +201,38 @@ void SoundManager::loadAmbiantSounds() {
}
void SoundManager::litph(tablint &t, int typ, int tempo) {
- if (_vm->_speechManager._typlec == 2) {
- warning("--->");
- for (int i = 0; i < _vm->_speechManager._ptr_oct; i++)
- warning("%d", _vm->_mem[(kAdrTroct * 16) + i]);
- warning("---<");
- } else
+ // Skip speech
+ if (_vm->_speechManager._typlec == 0)
return;
+ int freq = tempo * 10 * 25.2;
int i = 0;
while (i < _vm->_speechManager._ptr_oct) {
int idx = _vm->_mem[(kAdrTroct * 16) + i];
i++;
switch(idx) {
case 0: {
- warning("IPCX");
-/* adbrui
- dw 5CB0h, 0, 17224
- dw 6000h, 3656, 20108
- dw 6000h, 20108, 37446
- dw 6924h, 6, 8388
- dw 6B30h, 4, 1893
- dw 6BA6h, 6, 8595
-*/
int val = _vm->_mem[(kAdrTroct * 16) + i];
i++;
- warning("idx %d", val);
if (_vm->_speechManager._typlec == 0)
warning("vclas");
- else if (!_vm->_speechManager._typlec == 1)
- warning("duson");
- else { // 2
- warning("vadson");
+ else if (_vm->_speechManager._typlec == 1) {
+ debugC(5, kMortevielleSounds, "litph - duson");
+ const static int noiseAdr[] = {0, 17224,
+ 17224, 33676,
+ 33676, 51014,
+ 51014, 59396,
+ 59396, 61286,
+ 61286, 69875};
+ if (val > 5) {
+ warning("unhandled index %d", val);
+ } else {
+ if (!_audioStream)
+ _audioStream = Audio::makeQueuingAudioStream(freq, false);
+ _audioStream->queueBuffer(&_vm->_mem[(kAdrNoise * 16) + noiseAdr[val * 2]], noiseAdr[(val * 2) + 1] - noiseAdr[(val * 2)], DisposeAfterUse::NO, Audio::FLAG_UNSIGNED);
+ }
+ } else { // 2
+ debugC(5, kMortevielleSounds, "litph - vadson");
const static int ambiantNoiseAdr[] = {0, 14020,
14020, 18994,
18994, 19630,
@@ -246,37 +246,27 @@ void SoundManager::litph(tablint &t, int typ, int tempo) {
warning("unhandled index %d", val);
} else {
if (!_audioStream)
- _audioStream = Audio::makeQueuingAudioStream(22428, false);
+ _audioStream = Audio::makeQueuingAudioStream(freq, false);
_audioStream->queueBuffer(&_ambiantNoiseBuf[ambiantNoiseAdr[val * 2]], ambiantNoiseAdr[(val * 2) + 1] - ambiantNoiseAdr[(val * 2)], DisposeAfterUse::NO, Audio::FLAG_UNSIGNED);
-// Audio::SeekableAudioStream *raw = nullptr;
-// raw = Audio::makeRawStream(&_vm->_mem[(kAdrNoise * 16)] + ambiantNoiseAdr[val * 2], ambiantNoiseAdr[(val * 2) + 1], 22428, Audio::FLAG_UNSIGNED, DisposeAfterUse::NO);
-// Audio::SoundHandle soundHandle;
-// _mixer->playStream(Audio::Mixer::kSFXSoundType, &songHandle, raw, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::YES);
-// while (_mixer->isSoundHandleActive(songHandle) && !_vm->keyPressed() && !_vm->_mouseClick && !_vm->shouldQuit())
-// ;
-
}
}
break;
}
case 2: {
- warning("parc");
int val = _vm->_mem[(kAdrTroct * 16) + i];
i++;
int tmpidx = (val * 12) + 268;
val = _vm->_mem[(kAdrTroct * 16) + i];
i++;
- warning("%d %d", tmpidx, val);
- warning("reech");
+ warning("TODO: reech %d %d", tmpidx, val);
}
break;
case 4:
if (_vm->_speechManager._typlec) {
- warning("Skip interphoneme: %d %d", _vm->_mem[(kAdrTroct * 16) + i], _vm->_mem[(kAdrTroct * 16) + i + 1]);
i += 2;
} else {
// Speech
- warning("Interphoneme: consonne:%d voyelle:%d", _vm->_mem[(kAdrTroct * 16) + i], _vm->_mem[(kAdrTroct * 16) + i + 1]);
+ warning("TODO: Interphoneme: consonne:%d voyelle:%d", _vm->_mem[(kAdrTroct * 16) + i], _vm->_mem[(kAdrTroct * 16) + i + 1]);
i += 2;
}
break;
diff --git a/engines/mortevielle/speech.cpp b/engines/mortevielle/speech.cpp
index c721aa2e02..aaa2c6a906 100644
--- a/engines/mortevielle/speech.cpp
+++ b/engines/mortevielle/speech.cpp
@@ -536,9 +536,6 @@ void SpeechManager::handlePhoneme() {
do {
moveQueue();
charg_car(currWord);
- if (_typlec == 2)
- warning("%d %d %d %d %d", _queue[2]._acc, _queue[2]._code, _queue[2]._freq, _queue[2]._rep, _queue[2]._val);
-
trait_car();
} while (currWord < wordCount);
@@ -587,7 +584,7 @@ void SpeechManager::startSpeech(int rep, int ht, int typ) {
handlePhoneme();
_vm->_soundManager.litph(_tbi, typ, tempo);
- if (typ == 2) {
+ if (typ != 0) {
Audio::SoundHandle soundHandle;
_vm->_soundManager._mixer->playStream(Audio::Mixer::kSFXSoundType, &soundHandle, _vm->_soundManager._audioStream);
while (_vm->_soundManager._mixer->isSoundHandleActive(soundHandle) && !_vm->keyPressed() && !_vm->_mouseClick && !_vm->shouldQuit())