aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2010-01-05 10:28:09 +0000
committerFilippos Karapetis2010-01-05 10:28:09 +0000
commit3b8512b10429157ebf6f065247ec67e82d04c96d (patch)
tree70e9953a33eb32faa11853db399d2f0264e90158
parent8ccbe5acd56662cd66a9892c9d12f34408ae3434 (diff)
downloadscummvm-rg350-3b8512b10429157ebf6f065247ec67e82d04c96d.tar.gz
scummvm-rg350-3b8512b10429157ebf6f065247ec67e82d04c96d.tar.bz2
scummvm-rg350-3b8512b10429157ebf6f065247ec67e82d04c96d.zip
Cleanup, fixed fading of digital sound effects
svn-id: r47023
-rw-r--r--engines/sci/sound/midiparser_sci.cpp14
-rw-r--r--engines/sci/sound/midiparser_sci.h2
-rw-r--r--engines/sci/sound/music.h10
-rw-r--r--engines/sci/sound/soundcmd.cpp8
4 files changed, 20 insertions, 14 deletions
diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp
index 70421d7e15..ded7b59846 100644
--- a/engines/sci/sound/midiparser_sci.cpp
+++ b/engines/sci/sound/midiparser_sci.cpp
@@ -199,7 +199,7 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) {
}
}
if (info.basic.param1 == 7) // channel volume change -scale it
- info.basic.param2 = info.basic.param2 * _volume / 0x7F;
+ info.basic.param2 = info.basic.param2 * _volume / MUSIC_VOLUME_MAX;
info.length = 0;
break;
@@ -474,18 +474,16 @@ byte *MidiParser_SCI::midiFilterChannels(int channelMask) {
return _mixedData;
}
-void MidiParser_SCI::setVolume(byte bVolume) {
- if (bVolume > 0x7F)
- bVolume = 0x7F;
- if (_volume != bVolume) {
- _volume = bVolume;
+void MidiParser_SCI::setVolume(byte volume) {
+ assert(volume <= MUSIC_VOLUME_MAX);
+ if (_volume != volume) {
+ _volume = volume;
switch (_soundVersion) {
case SCI_VERSION_0_EARLY:
case SCI_VERSION_0_LATE: {
- MidiPlayer *SCIDriver = (MidiPlayer *)_driver;
int16 globalVolume = _volume * 15 / 127;
- SCIDriver->setVolume(globalVolume);
+ ((MidiPlayer *)_driver)->setVolume(globalVolume);
break;
}
diff --git a/engines/sci/sound/midiparser_sci.h b/engines/sci/sound/midiparser_sci.h
index a5b2074fbc..ff818eb381 100644
--- a/engines/sci/sound/midiparser_sci.h
+++ b/engines/sci/sound/midiparser_sci.h
@@ -54,7 +54,7 @@ public:
return false;
}
void unloadMusic();
- void setVolume(byte bVolume);
+ void setVolume(byte volume);
void stop() {
_abort_parse = true;
allNotesOff();
diff --git a/engines/sci/sound/music.h b/engines/sci/sound/music.h
index eaed0af64d..3c7b1492a6 100644
--- a/engines/sci/sound/music.h
+++ b/engines/sci/sound/music.h
@@ -154,6 +154,16 @@ public:
uint16 soundGetVoices();
uint32 soundGetTempo() const { return _dwTempo; }
+ bool soundIsActive(MusicEntry *pSnd) {
+ assert(pSnd->pStreamAud != 0);
+ return _pMixer->isSoundHandleActive(pSnd->hCurrentAud);
+ }
+
+ void updateAudioStreamTicker(MusicEntry *pSnd) {
+ assert(pSnd->pStreamAud != 0);
+ pSnd->ticker = (uint16)(_pMixer->getSoundElapsedTime(pSnd->hCurrentAud) * 0.06);
+ }
+
MusicEntry *getSlot(reg_t obj);
void pushBackSlot(MusicEntry *slotEntry) {
diff --git a/engines/sci/sound/soundcmd.cpp b/engines/sci/sound/soundcmd.cpp
index 06b87afdfd..f6059724f4 100644
--- a/engines/sci/sound/soundcmd.cpp
+++ b/engines/sci/sound/soundcmd.cpp
@@ -804,22 +804,20 @@ void SoundCommandParser::cmdUpdateCues(reg_t obj, int16 value) {
if (musicSlot->pStreamAud) {
// Update digital sound effect slots here
- Audio::Mixer *mixer = g_system->getMixer();
-
uint currentLoopCounter = musicSlot->pStreamAud->getNumPlayedLoops();
if (currentLoopCounter != musicSlot->sampleLoopCounter) {
// during last time we looped at least one time, update loop accordingly
musicSlot->loop -= currentLoopCounter - musicSlot->sampleLoopCounter;
musicSlot->sampleLoopCounter = currentLoopCounter;
}
- if (!mixer->isSoundHandleActive(musicSlot->hCurrentAud)) {
+ if (!_music->soundIsActive(musicSlot)) {
cmdStopSound(obj, 0);
} else {
- musicSlot->ticker = (uint16)(mixer->getSoundElapsedTime(musicSlot->hCurrentAud) * 0.06);
+ _music->updateAudioStreamTicker(musicSlot);
}
// We get a flag from MusicEntry::doFade() here to set volume for the stream
if (musicSlot->fadeSetVolume) {
- mixer->setChannelVolume(musicSlot->hCurrentAud, musicSlot->volume);
+ _music->soundSetVolume(musicSlot, musicSlot->volume);
musicSlot->fadeSetVolume = false;
}
} else {