diff options
-rw-r--r-- | engines/sci/resource.h | 1 | ||||
-rw-r--r-- | engines/sci/resource_audio.cpp | 3 | ||||
-rw-r--r-- | engines/sci/sound/drivers/adlib.cpp | 4 | ||||
-rw-r--r-- | engines/sci/sound/music.cpp | 1 | ||||
-rw-r--r-- | engines/sci/sound/music.h | 1 |
5 files changed, 9 insertions, 1 deletions
diff --git a/engines/sci/resource.h b/engines/sci/resource.h index 53c00f6ec0..8dc96bc3a9 100644 --- a/engines/sci/resource.h +++ b/engines/sci/resource.h @@ -512,6 +512,7 @@ class SoundResource { public: struct Channel { byte number; + bool isRhythm; byte poly; uint16 prio; uint16 size; diff --git a/engines/sci/resource_audio.cpp b/engines/sci/resource_audio.cpp index 590926dbbd..091f4f4423 100644 --- a/engines/sci/resource_audio.cpp +++ b/engines/sci/resource_audio.cpp @@ -664,7 +664,8 @@ SoundResource::SoundResource(uint32 resourceNr, ResourceManager *resMan, SciVers channel->data = resource->data + dataOffset; channel->size = READ_LE_UINT16(data + 4); channel->curPos = 0; - channel->number = *channel->data; + channel->number = *channel->data & 0xf; + channel->isRhythm = *channel->data & 0x20; channel->poly = *(channel->data + 1); channel->time = channel->prev = 0; channel->data += 2; // skip over header diff --git a/engines/sci/sound/drivers/adlib.cpp b/engines/sci/sound/drivers/adlib.cpp index 6d74151f1e..89ea426efc 100644 --- a/engines/sci/sound/drivers/adlib.cpp +++ b/engines/sci/sound/drivers/adlib.cpp @@ -73,6 +73,8 @@ public: bool loadResource(const byte *data, uint size); virtual uint32 property(int prop, uint32 param); + bool useRhythmChannel() { return _rhythmKeyMap != NULL; } + private: enum ChannelID { kLeftChannel = 1, @@ -177,6 +179,8 @@ public: void setVolume(byte volume) { static_cast<MidiDriver_AdLib *>(_driver)->setVolume(volume); } void playSwitch(bool play) { static_cast<MidiDriver_AdLib *>(_driver)->playSwitch(play); } void loadInstrument(int idx, byte *data); + + int getLastChannel() { return (static_cast<MidiDriver_AdLib *>(_driver)->useRhythmChannel() ? 8 : 15); } }; static const byte registerOffset[MidiDriver_AdLib::kVoices] = { diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp index 1e0fe1e103..61abc8f29f 100644 --- a/engines/sci/sound/music.cpp +++ b/engines/sci/sound/music.cpp @@ -102,6 +102,7 @@ void SciMusic::init() { // Find out what the first possible channel is (used, when doing channel // remapping). _driverFirstChannel = _pMidiDrv->getFirstChannel(); + _driverLastChannel = _pMidiDrv->getLastChannel(); } void SciMusic::miditimerCallback(void *p) { diff --git a/engines/sci/sound/music.h b/engines/sci/sound/music.h index 21d930fc9a..9fcbb9346d 100644 --- a/engines/sci/sound/music.h +++ b/engines/sci/sound/music.h @@ -223,6 +223,7 @@ private: MusicType _musicType; int _driverFirstChannel; + int _driverLastChannel; }; } // End of namespace Sci |