aboutsummaryrefslogtreecommitdiff
path: root/engines/mortevielle/sound.cpp
diff options
context:
space:
mode:
authorStrangerke2013-08-10 13:41:50 +0200
committerStrangerke2013-08-10 13:41:50 +0200
commit62b6c333d5f33f8957558c8678d383121d2139ab (patch)
tree64ad991a84c532f50345e7bf818b13434d3fde51 /engines/mortevielle/sound.cpp
parent7d6d7a7945dc75f94fce5e68ed0b0d784edb43c1 (diff)
downloadscummvm-rg350-62b6c333d5f33f8957558c8678d383121d2139ab.tar.gz
scummvm-rg350-62b6c333d5f33f8957558c8678d383121d2139ab.tar.bz2
scummvm-rg350-62b6c333d5f33f8957558c8678d383121d2139ab.zip
MORTEVIELLE: Play ambiant sounds
Diffstat (limited to 'engines/mortevielle/sound.cpp')
-rw-r--r--engines/mortevielle/sound.cpp103
1 files changed, 98 insertions, 5 deletions
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;