aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Iskrich2016-06-11 19:29:23 +0300
committerEugene Sandulenko2016-08-03 23:40:36 +0200
commite4428587b763b0f1da48de9decf251f98ddd3f00 (patch)
tree1d1e1e34c90848ccc73535b5c526a8f0f57610dc
parent049500d5ba26854034a04b6cd1a0305f79c8da24 (diff)
downloadscummvm-rg350-e4428587b763b0f1da48de9decf251f98ddd3f00.tar.gz
scummvm-rg350-e4428587b763b0f1da48de9decf251f98ddd3f00.tar.bz2
scummvm-rg350-e4428587b763b0f1da48de9decf251f98ddd3f00.zip
DIRECTOR: Support 2 tracking sound system
-rw-r--r--engines/director/director.cpp2
-rw-r--r--engines/director/score.cpp5
-rw-r--r--engines/director/score.h4
-rw-r--r--engines/director/sound.cpp33
-rw-r--r--engines/director/sound.h9
5 files changed, 38 insertions, 15 deletions
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index 3a39886b8f..00bf7b960c 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -78,7 +78,7 @@ Common::Error DirectorEngine::run() {
_mainArchive = new RIFFArchive();
_mainArchive->openFile("bookshelf_example.mmm");
- Score score(*_mainArchive, *_lingo);
+ Score score(*_mainArchive, *_lingo, *_soundManager);
score.startLoop();
if (getPlatform() == Common::kPlatformWindows)
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 948d83d6f6..a426e2b5cb 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -30,6 +30,7 @@
#include "director/dib.h"
#include "director/resource.h"
#include "director/lingo/lingo.h"
+#include "director/sound.h"
#include "graphics/palette.h"
#include "common/events.h"
@@ -38,12 +39,12 @@
namespace Director {
-Score::Score(Archive &movie, Lingo &lingo) {
+Score::Score(Archive &movie, Lingo &lingo, DirectorSound &soundManager) {
_surface = new Graphics::ManagedSurface;
_movieArchive = &movie;
_lingo = &lingo;
-
+ _soundManager = &soundManager;
_lingo->processEvent(kEventPrepareMovie, 0);
assert(_movieArchive->hasResource(MKTAG('V','W','S','C'), 1024));
diff --git a/engines/director/score.h b/engines/director/score.h
index ac43c1a227..b68cc40d55 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -33,6 +33,7 @@
namespace Director {
class Lingo;
+class DirectorSound;
#define CHANNEL_COUNT 24
@@ -264,7 +265,7 @@ public:
class Score {
public:
- Score(Archive &movie, Lingo &lingo);
+ Score(Archive &movie, Lingo &lingo, DirectorSound &soundManager);
~Score();
static Common::Rect readRect(Common::SeekableReadStream &stream);
void startLoop();
@@ -311,6 +312,7 @@ private:
Archive *_movieArchive;
Graphics::ManagedSurface *_surface;
Lingo *_lingo;
+ DirectorSound *_soundManager;
};
} //End of namespace Director
diff --git a/engines/director/sound.cpp b/engines/director/sound.cpp
index 35071c8072..8c757e256d 100644
--- a/engines/director/sound.cpp
+++ b/engines/director/sound.cpp
@@ -30,11 +30,12 @@
namespace Director {
DirectorSound::DirectorSound() {
- _soundHandle = new Audio::SoundHandle();
+ _sound1 = new Audio::SoundHandle();
+ _sound2 = new Audio::SoundHandle();
_mixer = g_system->getMixer();
}
-void DirectorSound::playWAV(Common::String filename) {
+void DirectorSound::playWAV(Common::String filename, uint8 soundChannel) {
Common::File *file = new Common::File();
if (!file->open(filename)) {
@@ -43,12 +44,14 @@ void DirectorSound::playWAV(Common::String filename) {
return;
}
- Audio::RewindableAudioStream *sound = Audio::makeWAVStream(file, DisposeAfterUse::YES);
- _mixer->playStream(Audio::Mixer::kSFXSoundType, _soundHandle, sound);
+ Audio::RewindableAudioStream *sound = Audio::makeWAVStream(file, DisposeAfterUse::YES);
+ if (soundChannel == 1)
+ _mixer->playStream(Audio::Mixer::kSFXSoundType, _sound1, sound);
+ else
+ _mixer->playStream(Audio::Mixer::kSFXSoundType, _sound2, sound);
}
-void DirectorSound::playAIFF(Common::String filename) {
-
+void DirectorSound::playAIFF(Common::String filename, uint8 soundChannel) {
Common::File *file = new Common::File();
if (!file->open(filename)) {
warning("Failed to open %s", filename.c_str());
@@ -57,11 +60,25 @@ void DirectorSound::playAIFF(Common::String filename) {
}
Audio::RewindableAudioStream *sound = Audio::makeAIFFStream(file, DisposeAfterUse::YES);
- _mixer->playStream(Audio::Mixer::kSFXSoundType, _soundHandle, sound);
+ if (soundChannel == 1)
+ _mixer->playStream(Audio::Mixer::kSFXSoundType, _sound1, sound);
+ else
+ _mixer->playStream(Audio::Mixer::kSFXSoundType, _sound2, sound);
+}
+
+bool DirectorSound::isChannelActive(uint8 channelID) {
+ if (channelID == 1) {
+ return _mixer->isSoundHandleActive(*_sound1);
+ } else if (channelID == 2) {
+ return _mixer->isSoundHandleActive(*_sound2);
+ }
+ error("Incorrect sound channel");
+ return false;
}
void DirectorSound::stopSound() {
- _mixer->stopHandle(*_soundHandle);
+ _mixer->stopHandle(*_sound1);
+ _mixer->stopHandle(*_sound2);
}
} //End of namespace Director
diff --git a/engines/director/sound.h b/engines/director/sound.h
index 3d842c8b51..8f36a3e247 100644
--- a/engines/director/sound.h
+++ b/engines/director/sound.h
@@ -32,14 +32,17 @@ namespace Director {
class DirectorSound {
private:
- Audio::SoundHandle *_soundHandle;
+ Audio::SoundHandle *_sound1;
+ Audio::SoundHandle *_sound2;
+
Audio::Mixer *_mixer;
public:
DirectorSound();
- void playWAV(Common::String filename);
- void playAIFF(Common::String filename);
+ void playWAV(Common::String filename, uint8 channelID);
+ void playAIFF(Common::String filename, uint8 channelID);
+ bool isChannelActive(uint8 channelID);
void stopSound();
};