diff options
author | Paul Gilbert | 2007-11-18 08:11:29 +0000 |
---|---|---|
committer | Paul Gilbert | 2007-11-18 08:11:29 +0000 |
commit | 91959050080f5823a700a661d597c166775f14bb (patch) | |
tree | 118c1ab8ed85ebbca688d3400b59109c6518658d /engines/lure/sound.cpp | |
parent | ab445635cb9352400f5af406fe0024324e634e61 (diff) | |
download | scummvm-rg350-91959050080f5823a700a661d597c166775f14bb.tar.gz scummvm-rg350-91959050080f5823a700a661d597c166775f14bb.tar.bz2 scummvm-rg350-91959050080f5823a700a661d597c166775f14bb.zip |
Further fixes to sound code (thanks to eriktorbjorn)
svn-id: r29554
Diffstat (limited to 'engines/lure/sound.cpp')
-rw-r--r-- | engines/lure/sound.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/engines/lure/sound.cpp b/engines/lure/sound.cpp index fa7b0439b2..ec48c2541c 100644 --- a/engines/lure/sound.cpp +++ b/engines/lure/sound.cpp @@ -458,17 +458,20 @@ bool SoundManager::musicInterface_CheckPlaying(uint8 soundNumber) { debugC(ERROR_DETAILED, kLureDebugSounds, "musicInterface_CheckPlaying soundNumber=%d", soundNumber); musicInterface_TidySounds(); uint8 soundNum = soundNumber & 0x7f; + bool result = false; g_system->lockMutex(_soundMutex); ManagedList<MidiMusic *>::iterator i; for (i = _playingSounds.begin(); i != _playingSounds.end(); ++i) { MidiMusic *music = *i; - if (music->soundNumber() == soundNum) - return true; + if (music->soundNumber() == soundNum) { + result = true; + break; + } } g_system->unlockMutex(_soundMutex); - return false; + return result; } // musicInterface_SetVolume @@ -571,7 +574,14 @@ MidiMusic::MidiMusic(MidiDriver *driver, ChannelEntry channels[NUM_CHANNELS_INNE _channels = channels; _soundNumber = soundNum; _channelNumber = channelNum; + _numChannels = 8; + while ((_numChannels > 0) && ((_channelNumber + _numChannels > NUM_CHANNELS_INNER) || + (_channels[_channelNumber + _numChannels - 1].midiChannel == NULL))) + --_numChannels; + if (_numChannels == 0) + error("Unable to set any channels for MidiMusic object"); + _volume = _channels[channelNum].volume; _passThrough = false; |