diff options
author | Bastien Bouclet | 2017-07-21 12:25:09 +0200 |
---|---|---|
committer | Bastien Bouclet | 2017-07-22 20:38:56 +0200 |
commit | a2fc282e1c872a725f58b5d87d783191f1fe3987 (patch) | |
tree | 1b814d8c69e3d8fe06785b158a76a4c784195602 /engines/mohawk/sound.cpp | |
parent | 01480f9a00bdc237477f6867c9b6404ec160c3f5 (diff) | |
download | scummvm-rg350-a2fc282e1c872a725f58b5d87d783191f1fe3987.tar.gz scummvm-rg350-a2fc282e1c872a725f58b5d87d783191f1fe3987.tar.bz2 scummvm-rg350-a2fc282e1c872a725f58b5d87d783191f1fe3987.zip |
MOHAWK: Myst: Move the sound code to its own class
Diffstat (limited to 'engines/mohawk/sound.cpp')
-rw-r--r-- | engines/mohawk/sound.cpp | 111 |
1 files changed, 2 insertions, 109 deletions
diff --git a/engines/mohawk/sound.cpp b/engines/mohawk/sound.cpp index 5907c5b002..81d83fc7b9 100644 --- a/engines/mohawk/sound.cpp +++ b/engines/mohawk/sound.cpp @@ -21,9 +21,6 @@ */ #include "common/debug.h" -#include "common/events.h" -#include "common/system.h" -#include "common/textconsole.h" #include "audio/mididrv.h" #include "audio/midiparser.h" @@ -33,7 +30,9 @@ #include "audio/decoders/raw.h" #include "audio/decoders/wave.h" +#include "mohawk/mohawk.h" #include "mohawk/sound.h" +#include "mohawk/resource.h" namespace Mohawk { @@ -185,13 +184,11 @@ Sound::Sound(MohawkEngine* vm) : _vm(vm) { _midiDriver = NULL; _midiParser = NULL; _midiData = NULL; - _mystBackgroundSound.type = kFreeHandle; initMidi(); } Sound::~Sound() { stopSound(); - stopBackgroundMyst(); if (_midiParser) { _midiParser->unloadMusic(); @@ -225,12 +222,6 @@ Audio::RewindableAudioStream *Sound::makeAudioStream(uint16 id, CueList *cueList Audio::RewindableAudioStream *audStream = NULL; switch (_vm->getGameType()) { - case GType_MYST: - if (_vm->getFeatures() & GF_ME) - audStream = Audio::makeWAVStream(_vm->getResource(ID_MSND, convertMystID(id)), DisposeAfterUse::YES); - else - audStream = makeMohawkWaveStream(_vm->getResource(ID_MSND, id), cueList); - break; case GType_ZOOMBINI: audStream = makeMohawkWaveStream(_vm->getResource(ID_SND, id)); break; @@ -273,26 +264,6 @@ Audio::SoundHandle *Sound::playSound(uint16 id, byte volume, bool loop, CueList return NULL; } -Audio::SoundHandle *Sound::replaceSoundMyst(uint16 id, byte volume, bool loop) { - debug (0, "Replacing sound %d", id); - - // The original engine also forces looping for those sounds - switch (id) { - case 2205: - case 2207: - case 5378: - case 7220: - case 9119: // Elevator engine sound in mechanical age is looping. - case 9120: - case 9327: - loop = true; - break; - } - - stopSound(); - return playSound(id, volume, loop); -} - void Sound::playMidi(uint16 id) { uint32 idTag; if (!(_vm->getFeatures() & GF_HASMIDI)) { @@ -430,82 +401,4 @@ uint Sound::getNumSamplesPlayed(uint16 id) { return 0; } -uint16 Sound::convertMystID(uint16 id) { - // Myst ME is a bit more efficient with sound storage than Myst - // Myst has lots of sounds repeated. To overcome this, Myst ME - // has MJMP resources which provide a link to the actual MSND - // resource we're looking for. This saves a lot of space from - // repeated data. - if (_vm->hasResource(ID_MJMP, id)) { - Common::SeekableReadStream *mjmpStream = _vm->getResource(ID_MJMP, id); - id = mjmpStream->readUint16LE(); - delete mjmpStream; - } - - return id; -} - -void Sound::replaceBackgroundMyst(uint16 id, uint16 volume) { - debug(0, "Replacing background sound with %d", id); - - // TODO: The original engine does fading - - Common::String name = _vm->getResourceName(ID_MSND, convertMystID(id)); - - // Only the first eight characters need to be the same to have a match - Common::String prefix; - if (name.size() >= 8) - prefix = Common::String(name.c_str(), name.c_str() + 8); - else - prefix = name; - - // Check if sound is already playing - if (_mystBackgroundSound.type == kUsedHandle && _vm->_mixer->isSoundHandleActive(_mystBackgroundSound.handle) - && _vm->getResourceName(ID_MSND, convertMystID(_mystBackgroundSound.id)).hasPrefix(prefix)) { - // The sound is already playing, just change the volume - changeBackgroundVolumeMyst(volume); - return; - } - - // Stop old background sound - stopBackgroundMyst(); - - // Play new sound - Audio::RewindableAudioStream *rewindStream = makeAudioStream(id); - - if (rewindStream) { - _mystBackgroundSound.type = kUsedHandle; - _mystBackgroundSound.id = id; - _mystBackgroundSound.samplesPerSecond = rewindStream->getRate(); - - // Set the stream to loop - Audio::AudioStream *audStream = Audio::makeLoopingAudioStream(rewindStream, 0); - - _vm->_mixer->playStream(Audio::Mixer::kPlainSoundType, &_mystBackgroundSound.handle, audStream, -1, volume >> 8); - } -} - -void Sound::stopBackgroundMyst() { - if (_mystBackgroundSound.type == kUsedHandle) { - _vm->_mixer->stopHandle(_mystBackgroundSound.handle); - _mystBackgroundSound.type = kFreeHandle; - _mystBackgroundSound.id = 0; - } -} - -void Sound::pauseBackgroundMyst() { - if (_mystBackgroundSound.type == kUsedHandle) - _vm->_mixer->pauseHandle(_mystBackgroundSound.handle, true); -} - -void Sound::resumeBackgroundMyst() { - if (_mystBackgroundSound.type == kUsedHandle) - _vm->_mixer->pauseHandle(_mystBackgroundSound.handle, false); -} - -void Sound::changeBackgroundVolumeMyst(uint16 vol) { - if (_mystBackgroundSound.type == kUsedHandle) - _vm->_mixer->setChannelVolume(_mystBackgroundSound.handle, vol >> 8); -} - } // End of namespace Mohawk |