aboutsummaryrefslogtreecommitdiff
path: root/engines/sci
diff options
context:
space:
mode:
authorWalter van Niftrik2010-09-09 18:26:16 +0000
committerWalter van Niftrik2010-09-09 18:26:16 +0000
commit5eb0314e4cc94291f4ffb62cd2c7784ff1e26748 (patch)
tree523375883bcaed1043201dad8fa4acb57119dd29 /engines/sci
parent30080c7e070aa06fa1fb795db90392d85351a62c (diff)
downloadscummvm-rg350-5eb0314e4cc94291f4ffb62cd2c7784ff1e26748.tar.gz
scummvm-rg350-5eb0314e4cc94291f4ffb62cd2c7784ff1e26748.tar.bz2
scummvm-rg350-5eb0314e4cc94291f4ffb62cd2c7784ff1e26748.zip
SCI: Fix last MIDI channel number for adlib driver
svn-id: r52662
Diffstat (limited to 'engines/sci')
-rw-r--r--engines/sci/resource.h1
-rw-r--r--engines/sci/resource_audio.cpp3
-rw-r--r--engines/sci/sound/drivers/adlib.cpp4
-rw-r--r--engines/sci/sound/music.cpp1
-rw-r--r--engines/sci/sound/music.h1
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