From dd2908fe42d54037436e7b3a05bc275d11822a93 Mon Sep 17 00:00:00 2001 From: Borja Lorente Date: Mon, 1 Aug 2016 17:19:29 +0200 Subject: MACVENTURE: Add basic audio playback --- engines/macventure/macventure.cpp | 2 +- engines/macventure/sound.cpp | 70 +++++++++++++++++++++------------------ engines/macventure/sound.h | 8 +++-- 3 files changed, 44 insertions(+), 36 deletions(-) (limited to 'engines') diff --git a/engines/macventure/macventure.cpp b/engines/macventure/macventure.cpp index 5d9d6f9938..21d98b1601 100644 --- a/engines/macventure/macventure.cpp +++ b/engines/macventure/macventure.cpp @@ -117,7 +117,7 @@ Common::Error MacVentureEngine::run() { _world = new World(this, _resourceManager); _scriptEngine = new ScriptEngine(this, _world); - _soundManager = new SoundManager(this); + _soundManager = new SoundManager(this, _mixer); _paused = false; _halted = false; diff --git a/engines/macventure/sound.cpp b/engines/macventure/sound.cpp index f7fb0b5a17..7eca8b4e8a 100644 --- a/engines/macventure/sound.cpp +++ b/engines/macventure/sound.cpp @@ -22,12 +22,45 @@ #include "macventure/sound.h" +#include "audio/mixer.h" +#include "audio/audiostream.h" +#include "audio/decoders/raw.h" + namespace MacVenture { +// SoundManager +SoundManager::SoundManager(MacVentureEngine *engine, Audio::Mixer *mixer) { + _container = nullptr; + Common::String filename = engine->getFilePath(kSoundPathID); + _container = new Container(filename); + _mixer = mixer; + debug(1, "Created sound manager with file %s", filename.c_str()); +} + +SoundManager::~SoundManager(){ + if (_container) + delete _container; + + Common::HashMap::iterator it; + for (it = _assets.begin(); it != _assets.end(); it++) { + delete it->_value; + } +} + +uint32 SoundManager::playSound(ObjID sound) { + ensureLoaded(sound); + _assets[sound]->play(_mixer, &_handle); + return _assets[sound]->getPlayLength(); +} + +void SoundManager::ensureLoaded(ObjID sound) { + if (!_assets.contains(sound)) + _assets[sound] = new SoundAsset(_container, sound); +} + SoundAsset::SoundAsset(Container *container, ObjID id) : _container(container), _id(id) { - //TODO Decode the sound if (_container->getItemByteSize(_id) == 0) warning("Trying to load an empty sound asset."); @@ -67,9 +100,9 @@ SoundAsset::SoundAsset(Container *container, ObjID id) : SoundAsset::~SoundAsset() {} -void SoundAsset::play() { - //TODO: Play song - warning("SoundAsset::play() not yet implemented"); +void SoundAsset::play(Audio::Mixer *mixer, Audio::SoundHandle *soundHandle) { + Audio::AudioStream *sound = Audio::makeRawStream(&_data.front(), _length, _frequency, Audio::FLAG_UNSIGNED); + mixer->playStream(Audio::Mixer::kPlainSoundType, soundHandle, sound); } uint32 SoundAsset::getPlayLength() { @@ -221,33 +254,4 @@ void SoundAsset::decode7e(Common::SeekableReadStream *stream) { } } -// SoundManager -SoundManager::SoundManager(MacVentureEngine *engine) { - _container = nullptr; - Common::String filename = engine->getFilePath(kSoundPathID); - _container = new Container(filename); - debug(1, "Created sound manager with file %s", filename.c_str()); -} - -SoundManager::~SoundManager(){ - if (_container) - delete _container; - - Common::HashMap::iterator it; - for (it = _assets.begin(); it != _assets.end(); it++) { - delete it->_value; - } -} - -uint32 SoundManager::playSound(ObjID sound) { - ensureLoaded(sound); - _assets[sound]->play(); - return _assets[sound]->getPlayLength(); -} - -void SoundManager::ensureLoaded(ObjID sound) { - if (!_assets.contains(sound)) - _assets[sound] = new SoundAsset(_container, sound); -} - } //End of namespace MacVenture diff --git a/engines/macventure/sound.h b/engines/macventure/sound.h index 58fc650b00..d1b1bb8a37 100644 --- a/engines/macventure/sound.h +++ b/engines/macventure/sound.h @@ -29,6 +29,8 @@ #include "common/file.h" #include "common/hashmap.h" +#include "audio/mixer.h" + namespace MacVenture { enum SoundType { @@ -47,7 +49,7 @@ public: SoundAsset(Container *container, ObjID id); ~SoundAsset(); - void play(); + void play(Audio::Mixer *mixer, Audio::SoundHandle *soundHandle); uint32 getPlayLength(); private: @@ -72,7 +74,7 @@ private: class SoundManager { public: - SoundManager(MacVentureEngine *engine); + SoundManager(MacVentureEngine *engine, Audio::Mixer *mixer); ~SoundManager(); uint32 playSound(ObjID sound); @@ -84,6 +86,8 @@ private: Container *_container; Common::HashMap _assets; + Audio::SoundHandle _handle; + Audio::Mixer *_mixer; }; } // End of namespace MacVenture -- cgit v1.2.3