diff options
-rw-r--r-- | engines/made/made.h | 1 | ||||
-rw-r--r-- | engines/made/resource.cpp | 12 | ||||
-rw-r--r-- | engines/made/resource.h | 2 | ||||
-rw-r--r-- | engines/made/scriptfuncs.cpp | 35 | ||||
-rw-r--r-- | engines/made/scriptfuncs.h | 2 |
5 files changed, 39 insertions, 13 deletions
diff --git a/engines/made/made.h b/engines/made/made.h index a89bdedf2e..8c81df5d10 100644 --- a/engines/made/made.h +++ b/engines/made/made.h @@ -92,6 +92,7 @@ public: ScriptInterpreter *_script; int _eventMouseX, _eventMouseY; + int _soundRate; uint16 _eventKey; int32 _timers[50]; diff --git a/engines/made/resource.cpp b/engines/made/resource.cpp index cf49e0201b..be212be733 100644 --- a/engines/made/resource.cpp +++ b/engines/made/resource.cpp @@ -24,6 +24,7 @@ */ #include "common/endian.h" +#include "sound/mixer.h" #include "made/resource.h" #include "made/graphics.h" @@ -161,12 +162,15 @@ void SoundResource::load(byte *source, int size) { _soundSize = chunkCount * chunkSize; _soundData = new byte[_soundSize]; - decompressSound(source + 14, _soundData, chunkSize, chunkCount); - + decompressSound(source + 14, _soundData, chunkSize, chunkCount); } -Audio::AudioStream *SoundResource::getAudioStream() { - return Audio::makeLinearInputStream(_soundData, _soundSize, 22050, 0, 0, 0); +Audio::AudioStream *SoundResource::getAudioStream(int soundRate, bool loop) { + byte flags = Audio::Mixer::FLAG_UNSIGNED; + if (loop) + flags |= Audio::Mixer::FLAG_LOOP; + + return Audio::makeLinearInputStream(_soundData, _soundSize, soundRate, flags, 0, 0); } /* MenuResource */ diff --git a/engines/made/resource.h b/engines/made/resource.h index bba940de69..5508a65ffc 100644 --- a/engines/made/resource.h +++ b/engines/made/resource.h @@ -91,7 +91,7 @@ public: SoundResource(); ~SoundResource(); void load(byte *source, int size); - Audio::AudioStream *getAudioStream(); + Audio::AudioStream *getAudioStream(int soundRate, bool loop = false); protected: byte *_soundData; int _soundSize; diff --git a/engines/made/scriptfuncs.cpp b/engines/made/scriptfuncs.cpp index 852320a4ad..3010fc9b36 100644 --- a/engines/made/scriptfuncs.cpp +++ b/engines/made/scriptfuncs.cpp @@ -276,11 +276,19 @@ int16 ScriptFunctionsRtz::o1_VISUALFX(int16 argc, int16 *argv) { } int16 ScriptFunctionsRtz::o1_PLAYSND(int16 argc, int16 *argv) { - /* - Audio::SoundHandle audioStreamHandle; - _vm->_mixer->playInputStream(Audio::Mixer::kPlainSoundType, &audioStreamHandle, - _vm->_res->getSound(argv[0])->getAudioStream()); - */ + int soundId = (argc == 1) ? argv[0] : argv[1]; + bool loop = false; + if (argc > 1) { + loop = (argv[0] == 1); + } + + if (argv[0] > 0) { + if (!_vm->_mixer->isSoundHandleActive(_audioStreamHandle)) { + _vm->_mixer->playInputStream(Audio::Mixer::kPlainSoundType, &_audioStreamHandle, + _vm->_res->getSound(soundId)->getAudioStream(_vm->_soundRate, loop)); + } + } + return 0; } @@ -452,14 +460,24 @@ int16 ScriptFunctionsRtz::o1_SETCLIP(int16 argc, int16 *argv) { } int16 ScriptFunctionsRtz::o1_ISSND(int16 argc, int16 *argv) { - return 0; + if (_vm->_mixer->isSoundHandleActive(_audioStreamHandle)) + return 1; + else + return 0; } int16 ScriptFunctionsRtz::o1_STOPSND(int16 argc, int16 *argv) { + _vm->_mixer->stopHandle(_audioStreamHandle); return 0; } int16 ScriptFunctionsRtz::o1_PLAYVOICE(int16 argc, int16 *argv) { + if (argv[0] > 0) { + if (!_vm->_mixer->isSoundHandleActive(_voiceStreamHandle)) { + _vm->_mixer->playInputStream(Audio::Mixer::kPlainSoundType, &_voiceStreamHandle, + _vm->_res->getSound(argv[0])->getAudioStream(_vm->_soundRate, false)); + } + } return 0; } @@ -643,7 +661,7 @@ int16 ScriptFunctionsRtz::o1_PICHEIGHT(int16 argc, int16 *argv) { } int16 ScriptFunctionsRtz::o1_SOUNDRATE(int16 argc, int16 *argv) { - //g_system->delayMillis(5000); + _vm->_soundRate = argv[0]; return 1; } @@ -714,7 +732,8 @@ int16 ScriptFunctionsRtz::o1_PLACEMENU(int16 argc, int16 *argv) { } int16 ScriptFunctionsRtz::o1_SETVOLUME(int16 argc, int16 *argv) { - //!! g_system->delayMillis(5000); + _vm->_mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, argv[0] * 25); + _vm->_mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, argv[0] * 25); return 0; } diff --git a/engines/made/scriptfuncs.h b/engines/made/scriptfuncs.h index 971db34ffd..2f6def0fa9 100644 --- a/engines/made/scriptfuncs.h +++ b/engines/made/scriptfuncs.h @@ -45,6 +45,8 @@ public: virtual void setupExternalsTable() = 0; protected: MadeEngine *_vm; + Audio::SoundHandle _audioStreamHandle; + Audio::SoundHandle _voiceStreamHandle; Common::Array<const ExternalFunc*> _externalFuncs; |