aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2016-11-25 18:44:14 +0100
committerEugene Sandulenko2016-11-25 18:53:16 +0100
commit1523f987c38cdebcaa351ef1e05f3f7e81a9ce92 (patch)
treec761f7fd649c3850bbc897d619439f5f7a84eb4a
parent4d8cc0db680184d9a38d13d35d89e26dc02beabc (diff)
downloadscummvm-rg350-1523f987c38cdebcaa351ef1e05f3f7e81a9ce92.tar.gz
scummvm-rg350-1523f987c38cdebcaa351ef1e05f3f7e81a9ce92.tar.bz2
scummvm-rg350-1523f987c38cdebcaa351ef1e05f3f7e81a9ce92.zip
FULLPIPE: Added 4 sound channels like in original
-rw-r--r--engines/fullpipe/fullpipe.cpp12
-rw-r--r--engines/fullpipe/fullpipe.h8
-rw-r--r--engines/fullpipe/sound.cpp37
3 files changed, 41 insertions, 16 deletions
diff --git a/engines/fullpipe/fullpipe.cpp b/engines/fullpipe/fullpipe.cpp
index 2250a5d4d1..8a9b323761 100644
--- a/engines/fullpipe/fullpipe.cpp
+++ b/engines/fullpipe/fullpipe.cpp
@@ -123,7 +123,12 @@ FullpipeEngine::FullpipeEngine(OSystem *syst, const ADGameDescription *gameDesc)
_musicLocal = 0;
_trackStartDelay = 0;
- _sceneTrackHandle = new Audio::SoundHandle();
+ _soundStream1 = new Audio::SoundHandle();
+ _soundStream2 = new Audio::SoundHandle();
+ _soundStream3 = new Audio::SoundHandle();
+ _soundStream4 = new Audio::SoundHandle();
+
+ _stream2playing = false;
memset(_sceneTracks, 0, sizeof(_sceneTracks));
memset(_trackName, 0, sizeof(_trackName));
@@ -205,7 +210,10 @@ FullpipeEngine::~FullpipeEngine() {
delete _rnd;
delete _console;
delete _globalMessageQueueList;
- delete _sceneTrackHandle;
+ delete _soundStream1;
+ delete _soundStream2;
+ delete _soundStream3;
+ delete _soundStream4;
}
void FullpipeEngine::initialize() {
diff --git a/engines/fullpipe/fullpipe.h b/engines/fullpipe/fullpipe.h
index d8f438b3da..9b755a6504 100644
--- a/engines/fullpipe/fullpipe.h
+++ b/engines/fullpipe/fullpipe.h
@@ -182,6 +182,7 @@ public:
void playSound(int id, int flag);
void playTrack(GameVar *sceneVar, const char *name, bool delayed);
int getSceneTrack();
+ void updateTrackDelay();
void startSceneTrack();
void startSoundStream1(char *trackName);
void stopSoundStream2();
@@ -327,7 +328,12 @@ public:
void lift_openLift();
GameVar *_musicGameVar;
- Audio::SoundHandle *_sceneTrackHandle;
+ Audio::SoundHandle *_soundStream1;
+ Audio::SoundHandle *_soundStream2;
+ Audio::SoundHandle *_soundStream3;
+ Audio::SoundHandle *_soundStream4;
+
+ bool _stream2playing;
public:
diff --git a/engines/fullpipe/sound.cpp b/engines/fullpipe/sound.cpp
index 4ec8dd05ca..0c3eb02aa3 100644
--- a/engines/fullpipe/sound.cpp
+++ b/engines/fullpipe/sound.cpp
@@ -249,9 +249,9 @@ void Sound::stop() {
void FullpipeEngine::setSceneMusicParameters(GameVar *gvar) {
warning("STUB: FullpipeEngine::setSceneMusicParameters()");
-#if 0
stopSoundStream2();
+#if 0
if (soundStream3)
FSOUND_Stream_Stop(soundStream4);
#endif
@@ -305,11 +305,15 @@ void FullpipeEngine::setSceneMusicParameters(GameVar *gvar) {
_trackStartDelay = var->getSubVarAsInt("STARTDELAY");
}
+void FullpipeEngine::updateTrackDelay() {
+ _sceneTrackIsPlaying = false;
+ _trackStartDelay = _musicMinDelay + (_musicMaxDelay - _musicMinDelay) * (_updateTicks % 10) / 9;
+}
+
void FullpipeEngine::startSceneTrack() {
if (_sceneTrackIsPlaying) {
- if (!_mixer->isSoundHandleActive(*_sceneTrackHandle)) { // Simulate end of sound callback
- _sceneTrackIsPlaying = false;
- _trackStartDelay = _musicMinDelay + (_musicMaxDelay - _musicMinDelay) * (_updateTicks % 10) / 9;
+ if (!_mixer->isSoundHandleActive(*_soundStream1)) { // Simulate end of sound callback
+ updateTrackDelay();
}
}
@@ -369,7 +373,7 @@ void FullpipeEngine::startSoundStream1(char *trackName) {
stopAllSoundStreams();
#ifdef USE_VORBIS
- if (_mixer->isSoundHandleActive(*_sceneTrackHandle))
+ if (_mixer->isSoundHandleActive(*_soundStream1))
return;
Common::File *track = new Common::File();
@@ -379,17 +383,17 @@ void FullpipeEngine::startSoundStream1(char *trackName) {
return;
}
Audio::RewindableAudioStream *ogg = Audio::makeVorbisStream(track, DisposeAfterUse::YES);
- _mixer->playStream(Audio::Mixer::kMusicSoundType, _sceneTrackHandle, ogg);
+ _mixer->playStream(Audio::Mixer::kMusicSoundType, _soundStream1, ogg);
#endif
}
void FullpipeEngine::stopAllSounds() {
- // _mixer->stopAll();
+ _mixer->stopHandle(*_soundStream1);
+ _mixer->stopHandle(*_soundStream2);
+ _mixer->stopHandle(*_soundStream3);
+ _mixer->stopHandle(*_soundStream4);
- for (int i = 0; i < _currSoundListCount; i++)
- for (int j = 0; j < _currSoundList1[i]->getCount(); j++) {
- _currSoundList1[i]->getSoundByIndex(j)->stop();
- }
+ _stream2playing = false;
}
void FullpipeEngine::toggleMute() {
@@ -420,9 +424,9 @@ void FullpipeEngine::playSound(int id, int flag) {
void FullpipeEngine::playTrack(GameVar *sceneVar, const char *name, bool delayed) {
warning("STUB: FullpipeEngine::playTrack(var, %s, %d)", name, delayed);
-#if 0
stopSoundStream2();
+#if 0
if (soundStream3)
FSOUND_Stream_Stop(soundStream4);
#endif
@@ -511,10 +515,17 @@ void global_messageHandler_handleSound(ExCommand *cmd) {
}
void FullpipeEngine::stopSoundStream2() {
- warning("STUB: FullpipeEngine::stopSoundStream2()");
+ _stream2playing = false;
+
+ if (_mixer->isSoundHandleActive(*_soundStream3)) {
+ _mixer->stopHandle(*_soundStream2);
+ _mixer->stopHandle(*_soundStream3);
+ }
}
void FullpipeEngine::stopAllSoundStreams() {
+ warning("STUB: stopAllSoundStreams()");
+
// TODO: Differences from stopAllSounds()
_mixer->stopAll();
}