In-game sound effects and voices should be working correctly now.
Implemented the following opcodes: - o1_PLAYSND - o1_ISSND - o1_STOPSND - o1_PLAYVOICE - o1_SOUNDRATE - o1_SETVOLUME svn-id: r31666
This commit is contained in:
parent
79d6c9f042
commit
b69ffa922a
5 changed files with 39 additions and 13 deletions
|
@ -92,6 +92,7 @@ public:
|
||||||
ScriptInterpreter *_script;
|
ScriptInterpreter *_script;
|
||||||
|
|
||||||
int _eventMouseX, _eventMouseY;
|
int _eventMouseX, _eventMouseY;
|
||||||
|
int _soundRate;
|
||||||
uint16 _eventKey;
|
uint16 _eventKey;
|
||||||
|
|
||||||
int32 _timers[50];
|
int32 _timers[50];
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "common/endian.h"
|
#include "common/endian.h"
|
||||||
|
#include "sound/mixer.h"
|
||||||
|
|
||||||
#include "made/resource.h"
|
#include "made/resource.h"
|
||||||
#include "made/graphics.h"
|
#include "made/graphics.h"
|
||||||
|
@ -162,11 +163,14 @@ void SoundResource::load(byte *source, int size) {
|
||||||
_soundData = new byte[_soundSize];
|
_soundData = new byte[_soundSize];
|
||||||
|
|
||||||
decompressSound(source + 14, _soundData, chunkSize, chunkCount);
|
decompressSound(source + 14, _soundData, chunkSize, chunkCount);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Audio::AudioStream *SoundResource::getAudioStream() {
|
Audio::AudioStream *SoundResource::getAudioStream(int soundRate, bool loop) {
|
||||||
return Audio::makeLinearInputStream(_soundData, _soundSize, 22050, 0, 0, 0);
|
byte flags = Audio::Mixer::FLAG_UNSIGNED;
|
||||||
|
if (loop)
|
||||||
|
flags |= Audio::Mixer::FLAG_LOOP;
|
||||||
|
|
||||||
|
return Audio::makeLinearInputStream(_soundData, _soundSize, soundRate, flags, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MenuResource */
|
/* MenuResource */
|
||||||
|
|
|
@ -91,7 +91,7 @@ public:
|
||||||
SoundResource();
|
SoundResource();
|
||||||
~SoundResource();
|
~SoundResource();
|
||||||
void load(byte *source, int size);
|
void load(byte *source, int size);
|
||||||
Audio::AudioStream *getAudioStream();
|
Audio::AudioStream *getAudioStream(int soundRate, bool loop = false);
|
||||||
protected:
|
protected:
|
||||||
byte *_soundData;
|
byte *_soundData;
|
||||||
int _soundSize;
|
int _soundSize;
|
||||||
|
|
|
@ -276,11 +276,19 @@ int16 ScriptFunctionsRtz::o1_VISUALFX(int16 argc, int16 *argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 ScriptFunctionsRtz::o1_PLAYSND(int16 argc, int16 *argv) {
|
int16 ScriptFunctionsRtz::o1_PLAYSND(int16 argc, int16 *argv) {
|
||||||
/*
|
int soundId = (argc == 1) ? argv[0] : argv[1];
|
||||||
Audio::SoundHandle audioStreamHandle;
|
bool loop = false;
|
||||||
_vm->_mixer->playInputStream(Audio::Mixer::kPlainSoundType, &audioStreamHandle,
|
if (argc > 1) {
|
||||||
_vm->_res->getSound(argv[0])->getAudioStream());
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -452,14 +460,24 @@ int16 ScriptFunctionsRtz::o1_SETCLIP(int16 argc, int16 *argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 ScriptFunctionsRtz::o1_ISSND(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) {
|
int16 ScriptFunctionsRtz::o1_STOPSND(int16 argc, int16 *argv) {
|
||||||
|
_vm->_mixer->stopHandle(_audioStreamHandle);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 ScriptFunctionsRtz::o1_PLAYVOICE(int16 argc, int16 *argv) {
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -643,7 +661,7 @@ int16 ScriptFunctionsRtz::o1_PICHEIGHT(int16 argc, int16 *argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 ScriptFunctionsRtz::o1_SOUNDRATE(int16 argc, int16 *argv) {
|
int16 ScriptFunctionsRtz::o1_SOUNDRATE(int16 argc, int16 *argv) {
|
||||||
//g_system->delayMillis(5000);
|
_vm->_soundRate = argv[0];
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -714,7 +732,8 @@ int16 ScriptFunctionsRtz::o1_PLACEMENU(int16 argc, int16 *argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 ScriptFunctionsRtz::o1_SETVOLUME(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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,8 @@ public:
|
||||||
virtual void setupExternalsTable() = 0;
|
virtual void setupExternalsTable() = 0;
|
||||||
protected:
|
protected:
|
||||||
MadeEngine *_vm;
|
MadeEngine *_vm;
|
||||||
|
Audio::SoundHandle _audioStreamHandle;
|
||||||
|
Audio::SoundHandle _voiceStreamHandle;
|
||||||
|
|
||||||
Common::Array<const ExternalFunc*> _externalFuncs;
|
Common::Array<const ExternalFunc*> _externalFuncs;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue