From 62b6c333d5f33f8957558c8678d383121d2139ab Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 10 Aug 2013 13:41:50 +0200 Subject: MORTEVIELLE: Play ambiant sounds --- engines/mortevielle/sound.cpp | 103 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 98 insertions(+), 5 deletions(-) (limited to 'engines/mortevielle/sound.cpp') diff --git a/engines/mortevielle/sound.cpp b/engines/mortevielle/sound.cpp index 717236546c..9d451dadd3 100644 --- a/engines/mortevielle/sound.cpp +++ b/engines/mortevielle/sound.cpp @@ -137,12 +137,14 @@ SoundManager::SoundManager(Audio::Mixer *mixer) { _speakerStream = new PCSpeaker(mixer->getOutputRate()); _mixer->playStream(Audio::Mixer::kSFXSoundType, &_speakerHandle, _speakerStream, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); + _audioStream = nullptr; } SoundManager::~SoundManager() { + if (_audioStream) + _audioStream->finish(); _mixer->stopHandle(_speakerHandle); - delete _speakerStream; - + delete _speakerStream; } /** @@ -177,7 +179,100 @@ int SoundManager::decodeMusic(const byte *PSrc, byte *PDest, int size) { } void SoundManager::litph(tablint &t, int typ, int tempo) { - return; + 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 + return; + + 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"); + const static int ambiantNoiseAdr[] = {0, 14020, + 14020, 18994, + 18994, 19630, + 19630, 22258, + 22258, 37322, + 37322, 44472, + 44472, 52324, + 52324, 59598, + 59598, 69748}; + if (val > 8) { + warning("unhandled index %d", val); + } else { + if (!_audioStream) + _audioStream = Audio::makeQueuingAudioStream(22428, false); + _audioStream->queueBuffer(&_vm->_noiseBuf[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"); + } + 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]); + i += 2; + } + break; + case 6: + warning("pari2"); + break; + default: + if (idx == 62) + warning("blab"); + else if (idx == 35) { + if (i < _vm->_speechManager._ptr_oct) + warning("unexpected 35"); + i = _vm->_speechManager._ptr_oct; + } else + warning("Other code: %d", idx); + break; + } + } } void SoundManager::playNote(int frequency, int32 length) { @@ -186,9 +281,7 @@ void SoundManager::playNote(int frequency, int32 length) { void SoundManager::playSong(const byte* buf, uint size, uint loops) { - int freq = kTempoMusic * 10 * 25.2; - warning("%d", freq); Audio::SeekableAudioStream *raw = Audio::makeRawStream(buf, size, freq, Audio::FLAG_UNSIGNED, DisposeAfterUse::NO); Audio::AudioStream *stream = Audio::makeLoopingAudioStream(raw, loops); Audio::SoundHandle songHandle; -- cgit v1.2.3