aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorBorja Lorente2016-08-01 17:19:29 +0200
committerBorja Lorente2016-08-14 19:00:36 +0200
commitdd2908fe42d54037436e7b3a05bc275d11822a93 (patch)
treec17e824fbfcd99e651062a1882f2e162e9d2abe1 /engines
parent842bff03e0fd949bcac1b3fd4c281d3fc5547ca5 (diff)
downloadscummvm-rg350-dd2908fe42d54037436e7b3a05bc275d11822a93.tar.gz
scummvm-rg350-dd2908fe42d54037436e7b3a05bc275d11822a93.tar.bz2
scummvm-rg350-dd2908fe42d54037436e7b3a05bc275d11822a93.zip
MACVENTURE: Add basic audio playback
Diffstat (limited to 'engines')
-rw-r--r--engines/macventure/macventure.cpp2
-rw-r--r--engines/macventure/sound.cpp70
-rw-r--r--engines/macventure/sound.h8
3 files changed, 44 insertions, 36 deletions
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<ObjID, SoundAsset*>::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<ObjID, SoundAsset*>::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<ObjID, SoundAsset*> _assets;
+ Audio::SoundHandle _handle;
+ Audio::Mixer *_mixer;
};
} // End of namespace MacVenture