aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sfx/music.cpp
diff options
context:
space:
mode:
authorMartin Kiewitz2010-01-01 13:21:30 +0000
committerMartin Kiewitz2010-01-01 13:21:30 +0000
commit7cf1d5bd5df915fe0f26182b1c2d696ca8d11a34 (patch)
tree46c37c29988ef633d7678387d743abf03fdc2f34 /engines/sci/sfx/music.cpp
parentea86c41cc535b066b222a883cba4a9cf17697d6b (diff)
downloadscummvm-rg350-7cf1d5bd5df915fe0f26182b1c2d696ca8d11a34.tar.gz
scummvm-rg350-7cf1d5bd5df915fe0f26182b1c2d696ca8d11a34.tar.bz2
scummvm-rg350-7cf1d5bd5df915fe0f26182b1c2d696ca8d11a34.zip
SCI/newmusic: added fade and loop capability to samples (looping doesnt work yet), fixes lsl1 doll inflation endless loop
svn-id: r46820
Diffstat (limited to 'engines/sci/sfx/music.cpp')
-rw-r--r--engines/sci/sfx/music.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/engines/sci/sfx/music.cpp b/engines/sci/sfx/music.cpp
index d185334359..9d01c2266e 100644
--- a/engines/sci/sfx/music.cpp
+++ b/engines/sci/sfx/music.cpp
@@ -377,6 +377,13 @@ void SciMusic::soundPlay(MusicEntry *pSnd) {
_mutex.unlock();
if (pSnd->pStreamAud && !_pMixer->isSoundHandleActive(pSnd->hCurrentAud)) {
+ SegManager *segMan = ((SciEngine *)g_engine)->getEngineState()->_segMan; // HACK
+ uint16 loop = GET_SEL32V(segMan, pSnd->soundObj, loop);
+ // Are we supposed to loop the stream?
+ if (loop > 1)
+ pSnd->pStreamAud->setNumLoops(loop);
+ else
+ pSnd->pStreamAud->setNumLoops(1);
_pMixer->playInputStream(Audio::Mixer::kSFXSoundType, &pSnd->hCurrentAud,
pSnd->pStreamAud, -1, pSnd->volume, 0, false);
} else if (pSnd->pMidiParser) {
@@ -529,12 +536,15 @@ MusicEntry::~MusicEntry() {
void MusicEntry::onTimer(SciVersion soundVersion, Audio::Mixer *mixer) {
if (status != kSoundPlaying)
return;
+
+ if (fadeStep)
+ doFade(mixer);
+
if (pMidiParser) {
- if (fadeStep)
- doFade();
pMidiParser->onTimer();
ticker = (uint16)pMidiParser->getTick();
} else if (pStreamAud) {
+ // TODO: We need to update loop selector here, when sample is looping
if (!mixer->isSoundHandleActive(hCurrentAud)) {
ticker = SIGNAL_OFFSET;
signal = SIGNAL_OFFSET;
@@ -545,7 +555,7 @@ void MusicEntry::onTimer(SciVersion soundVersion, Audio::Mixer *mixer) {
}
}
-void MusicEntry::doFade() {
+void MusicEntry::doFade(Audio::Mixer *mixer) {
if (fadeTicker)
fadeTicker--;
else {
@@ -557,7 +567,10 @@ void MusicEntry::doFade() {
signal = SIGNAL_OFFSET;
}
- pMidiParser->setVolume(volume);
+ if (pMidiParser)
+ pMidiParser->setVolume(volume);
+ if (pStreamAud)
+ mixer->setChannelVolume(hCurrentAud, volume);
}
}