aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction
diff options
context:
space:
mode:
authorNicola Mettifogo2009-01-06 16:21:23 +0000
committerNicola Mettifogo2009-01-06 16:21:23 +0000
commitfa1d881ad44a515e57b87ba27b325d1eeb4a750b (patch)
tree35183034e8e725b83502983b4c5cf94a5b489fa2 /engines/parallaction
parentc528f888d0c227bc735a3ba2110ad9708bc1abd8 (diff)
downloadscummvm-rg350-fa1d881ad44a515e57b87ba27b325d1eeb4a750b.tar.gz
scummvm-rg350-fa1d881ad44a515e57b87ba27b325d1eeb4a750b.tar.bz2
scummvm-rg350-fa1d881ad44a515e57b87ba27b325d1eeb4a750b.zip
Implemented pauseEngineIntern, and fixed music volume handling in SoundMan.
svn-id: r35756
Diffstat (limited to 'engines/parallaction')
-rw-r--r--engines/parallaction/parallaction.cpp6
-rw-r--r--engines/parallaction/parallaction.h1
-rw-r--r--engines/parallaction/sound.cpp29
-rw-r--r--engines/parallaction/sound.h4
4 files changed, 37 insertions, 3 deletions
diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp
index 272152cd69..e1f26874e8 100644
--- a/engines/parallaction/parallaction.cpp
+++ b/engines/parallaction/parallaction.cpp
@@ -134,6 +134,12 @@ Common::Error Parallaction::init() {
return Common::kNoError;
}
+void Parallaction::pauseEngineIntern(bool pause) {
+ if (_soundMan) {
+ _soundMan->pause(pause);
+ }
+}
+
bool canScroll() {
return (_vm->_gfx->_backgroundInfo->width > _vm->_screenWidth);
}
diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h
index f7c79e1a3c..e5af0df7b9 100644
--- a/engines/parallaction/parallaction.h
+++ b/engines/parallaction/parallaction.h
@@ -253,6 +253,7 @@ public:
// Engine APIs
virtual Common::Error init();
virtual bool hasFeature(EngineFeature f) const;
+ virtual void pauseEngineIntern(bool pause);
// info
int32 _screenWidth;
diff --git a/engines/parallaction/sound.cpp b/engines/parallaction/sound.cpp
index 8c6174a0db..503f8b3303 100644
--- a/engines/parallaction/sound.cpp
+++ b/engines/parallaction/sound.cpp
@@ -49,6 +49,7 @@ public:
void play(Common::SeekableReadStream *stream);
void stop();
+ void pause(bool p);
void updateTimer();
void adjustVolume(int diff);
void setVolume(int volume);
@@ -74,6 +75,7 @@ private:
uint8 *_midiData;
bool _isLooping;
bool _isPlaying;
+ bool _paused;
int _masterVolume;
MidiChannel *_channelsTable[NUM_CHANNELS];
uint8 _channelsVolume[NUM_CHANNELS];
@@ -81,10 +83,12 @@ private:
};
MidiPlayer::MidiPlayer(MidiDriver *driver)
- : _driver(driver), _parser(0), _midiData(0), _isLooping(false), _isPlaying(false), _masterVolume(0) {
+ : _driver(driver), _parser(0), _midiData(0), _isLooping(false), _isPlaying(false), _paused(false), _masterVolume(0) {
assert(_driver);
memset(_channelsTable, 0, sizeof(_channelsTable));
- memset(_channelsVolume, 0, sizeof(_channelsVolume));
+ for (int i = 0; i < NUM_CHANNELS; i++) {
+ _channelsVolume[i] = 127;
+ }
open();
}
@@ -125,7 +129,21 @@ void MidiPlayer::stop() {
_mutex.unlock();
}
+void MidiPlayer::pause(bool p) {
+ _paused = p;
+
+ for (int i = 0; i < NUM_CHANNELS; ++i) {
+ if (_channelsTable[i]) {
+ _channelsTable[i]->volume(_paused ? 0 : _channelsVolume[i] * _masterVolume / 255);
+ }
+ }
+}
+
void MidiPlayer::updateTimer() {
+ if (_paused) {
+ return;
+ }
+
_mutex.lock();
if (_isPlaying) {
_parser->onTimer();
@@ -217,7 +235,6 @@ void MidiPlayer::timerCallback(void *p) {
player->updateTimer();
}
-
DosSoundMan::DosSoundMan(Parallaction *vm, MidiDriver *midiDriver) : SoundMan(vm), _musicData1(0) {
_midiPlayer = new MidiPlayer(midiDriver);
}
@@ -254,12 +271,18 @@ void DosSoundMan::playMusic() {
Common::SeekableReadStream *stream = _vm->_disk->loadMusic(_musicFile);
_midiPlayer->play(stream);
+ _midiPlayer->setVolume(255);
}
void DosSoundMan::stopMusic() {
_midiPlayer->stop();
}
+void DosSoundMan::pause(bool p) {
+ SoundMan::pause(p);
+ _midiPlayer->pause(p);
+}
+
void DosSoundMan::playCharacterMusic(const char *character) {
if (character == NULL) {
return;
diff --git a/engines/parallaction/sound.h b/engines/parallaction/sound.h
index e2e15fe601..2baa9aaa63 100644
--- a/engines/parallaction/sound.h
+++ b/engines/parallaction/sound.h
@@ -62,6 +62,8 @@ public:
virtual void stopMusic() = 0;
virtual void playCharacterMusic(const char *character) = 0;
virtual void playLocationMusic(const char *location) = 0;
+ virtual void pause(bool p) { }
+
void setMusicVolume(int value);
};
@@ -80,6 +82,8 @@ public:
void playCharacterMusic(const char *character);
void playLocationMusic(const char *location);
+
+ void pause(bool p);
};
#define NUM_AMIGA_CHANNELS 4