diff options
author | Filippos Karapetis | 2011-12-08 00:14:04 -0800 |
---|---|---|
committer | Filippos Karapetis | 2011-12-08 00:14:04 -0800 |
commit | 02fed995a96e697927c6b71ae6ca22e29b02febd (patch) | |
tree | e6cbe77c6cba0c3947158f11516945754ed293f1 /engines/dreamweb/dreamweb.cpp | |
parent | 7d3c622f6aa36f5a2e2e57cfe6b607e1d9472d7f (diff) | |
parent | 45a99e727675913f77100d2e4957c763ccb7546d (diff) | |
download | scummvm-rg350-02fed995a96e697927c6b71ae6ca22e29b02febd.tar.gz scummvm-rg350-02fed995a96e697927c6b71ae6ca22e29b02febd.tar.bz2 scummvm-rg350-02fed995a96e697927c6b71ae6ca22e29b02febd.zip |
Merge pull request #129 from fingolfin/dreamweb-sound
DREAMWEB: Move sound related code to a new source file
Diffstat (limited to 'engines/dreamweb/dreamweb.cpp')
-rw-r--r-- | engines/dreamweb/dreamweb.cpp | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp index df39c4dfd6..451d8ff13d 100644 --- a/engines/dreamweb/dreamweb.cpp +++ b/engines/dreamweb/dreamweb.cpp @@ -30,9 +30,6 @@ #include "common/timer.h" #include "common/util.h" -#include "audio/mixer.h" -#include "audio/decoders/raw.h" - #include "graphics/palette.h" #include "graphics/surface.h" @@ -377,170 +374,6 @@ void DreamWebEngine::cls() { _system->fillScreen(0); } -void DreamWebEngine::playSound(uint8 channel, uint8 id, uint8 loops) { - debug(1, "playSound(%u, %u, %u)", channel, id, loops); - - int bank = 0; - bool speech = false; - Audio::Mixer::SoundType type = channel == 0? - Audio::Mixer::kMusicSoundType: Audio::Mixer::kSFXSoundType; - - if (id >= 12) { - id -= 12; - bank = 1; - if (id == 50) { - speech = true; - type = Audio::Mixer::kSpeechSoundType; - } - } - const SoundData &data = _soundData[bank]; - - Audio::SeekableAudioStream *raw; - if (!speech) { - if (id >= data.samples.size() || data.samples[id].size == 0) { - warning("invalid sample #%u played", id); - return; - } - - const Sample &sample = data.samples[id]; - uint8 *buffer = (uint8 *)malloc(sample.size); - if (!buffer) - error("out of memory: cannot allocate memory for sound(%u bytes)", sample.size); - memcpy(buffer, data.data.begin() + sample.offset, sample.size); - - raw = Audio::makeRawStream( - buffer, - sample.size, 22050, Audio::FLAG_UNSIGNED); - } else { - uint8 *buffer = (uint8 *)malloc(_speechData.size()); - if (!buffer) - error("out of memory: cannot allocate memory for sound(%u bytes)", _speechData.size()); - memcpy(buffer, _speechData.begin(), _speechData.size()); - raw = Audio::makeRawStream( - buffer, - _speechData.size(), 22050, Audio::FLAG_UNSIGNED); - - } - - Audio::AudioStream *stream; - if (loops > 1) { - stream = new Audio::LoopingAudioStream(raw, loops < 255? loops: 0); - } else - stream = raw; - - if (_mixer->isSoundHandleActive(_channelHandle[channel])) - _mixer->stopHandle(_channelHandle[channel]); - _mixer->playStream(type, &_channelHandle[channel], stream); -} - -void DreamWebEngine::stopSound(uint8 channel) { - debug(1, "stopSound(%u)", channel); - assert(channel == 0 || channel == 1); - _mixer->stopHandle(_channelHandle[channel]); - if (channel == 0) - _channel0 = 0; - else - _channel1 = 0; -} - -bool DreamWebEngine::loadSpeech(const Common::String &filename) { - if (ConfMan.getBool("speech_mute")) - return false; - - Common::File file; - if (!file.open("speech/" + filename)) - return false; - - debug(1, "loadSpeech(%s)", filename.c_str()); - - uint size = file.size(); - _speechData.resize(size); - file.read(_speechData.begin(), size); - file.close(); - return true; -} - -void DreamWebEngine::soundHandler() { - _base.data.byte(DreamGen::kSubtitles) = ConfMan.getBool("subtitles"); - _base.volumeAdjust(); - - uint volume = _base.data.byte(DreamGen::kVolume); - //.vol file loaded into soundbuf:0x4000 - //volume table at (volume * 0x100 + 0x3f00) - //volume value could be from 1 to 7 - //1 - 0x10-0xff - //2 - 0x1f-0xdf - //3 - 0x2f-0xd0 - //4 - 0x3e-0xc1 - //5 - 0x4d-0xb2 - //6 - 0x5d-0xa2 - //7 - 0x6f-0x91 - if (volume >= 8) - volume = 7; - volume = (8 - volume) * Audio::Mixer::kMaxChannelVolume / 8; - _mixer->setChannelVolume(_channelHandle[0], volume); - - uint8 ch0 = _base.data.byte(DreamGen::kCh0playing); - if (ch0 == 255) - ch0 = 0; - uint8 ch1 = _base.data.byte(DreamGen::kCh1playing); - if (ch1 == 255) - ch1 = 0; - uint8 ch0loop = _base.data.byte(DreamGen::kCh0repeat); - - if (_channel0 != ch0) { - _channel0 = ch0; - if (ch0) { - playSound(0, ch0, ch0loop); - } - } - if (_channel1 != ch1) { - _channel1 = ch1; - if (ch1) { - playSound(1, ch1, 1); - } - } - if (!_mixer->isSoundHandleActive(_channelHandle[0])) { - _base.data.byte(DreamGen::kCh0playing) = 255; - _channel0 = 0; - } - if (!_mixer->isSoundHandleActive(_channelHandle[1])) { - _base.data.byte(DreamGen::kCh1playing) = 255; - _channel1 = 0; - } - -} - -void DreamWebEngine::loadSounds(uint bank, const Common::String &filename) { - debug(1, "loadSounds(%u, %s)", bank, filename.c_str()); - Common::File file; - if (!file.open(filename)) { - warning("cannot open %s", filename.c_str()); - return; - } - - uint8 header[0x60]; - file.read(header, sizeof(header)); - uint tablesize = READ_LE_UINT16(header + 0x32); - debug(1, "table size = %u", tablesize); - - SoundData &soundData = _soundData[bank]; - soundData.samples.resize(tablesize / 6); - uint total = 0; - for(uint i = 0; i < tablesize / 6; ++i) { - uint8 entry[6]; - Sample &sample = soundData.samples[i]; - file.read(entry, sizeof(entry)); - sample.offset = entry[0] * 0x4000 + READ_LE_UINT16(entry + 1); - sample.size = READ_LE_UINT16(entry + 3) * 0x800; - total += sample.size; - debug(1, "offset: %08x, size: %u", sample.offset, sample.size); - } - soundData.data.resize(total); - file.read(soundData.data.begin(), total); - file.close(); -} - uint8 DreamWebEngine::modifyChar(uint8 c) const { if (c < 128) return c; |