aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/scumm/imuse/imuse.cpp13
-rw-r--r--engines/scumm/imuse/imuse_internal.h3
-rw-r--r--engines/scumm/imuse/imuse_part.cpp10
-rw-r--r--engines/scumm/imuse/sysex_scumm.cpp11
4 files changed, 13 insertions, 24 deletions
diff --git a/engines/scumm/imuse/imuse.cpp b/engines/scumm/imuse/imuse.cpp
index 912ab71420..9fb6087e53 100644
--- a/engines/scumm/imuse/imuse.cpp
+++ b/engines/scumm/imuse/imuse.cpp
@@ -1673,15 +1673,12 @@ void IMuseInternal::reallocateMidiChannels(MidiDriver *midi) {
}
}
-void IMuseInternal::setGlobalAdLibInstrument(byte slot, byte *data) {
+void IMuseInternal::setGlobalInstrument(byte slot, byte *data) {
if (slot < 32) {
- _global_instruments[slot].adlib(data);
- }
-}
-
-void IMuseInternal::setGlobalPcSpkInstrument(byte slot, byte *data) {
- if (slot < 32) {
- _global_instruments[slot].pcspk(data);
+ if (_pcSpeaker)
+ _global_instruments[slot].pcspk(data);
+ else
+ _global_instruments[slot].adlib(data);
}
}
diff --git a/engines/scumm/imuse/imuse_internal.h b/engines/scumm/imuse/imuse_internal.h
index 8ac9e77535..4ab25907a4 100644
--- a/engines/scumm/imuse/imuse_internal.h
+++ b/engines/scumm/imuse/imuse_internal.h
@@ -500,8 +500,7 @@ protected:
int setImuseMasterVolume(uint vol);
void reallocateMidiChannels(MidiDriver *midi);
- void setGlobalAdLibInstrument(byte slot, byte *data);
- void setGlobalPcSpkInstrument(byte slot, byte *data);
+ void setGlobalInstrument(byte slot, byte *data);
void copyGlobalInstrument(byte slot, Instrument *dest);
bool isNativeMT32() { return _native_mt32; }
diff --git a/engines/scumm/imuse/imuse_part.cpp b/engines/scumm/imuse/imuse_part.cpp
index 630dd35442..53627f6a4a 100644
--- a/engines/scumm/imuse/imuse_part.cpp
+++ b/engines/scumm/imuse/imuse_part.cpp
@@ -194,13 +194,11 @@ void Part::set_onoff(bool on) {
}
void Part::set_instrument(byte * data) {
- _instrument.adlib(data);
- if (clearToTransmit())
- _instrument.send(_mc);
-}
+ if (_se->_pcSpeaker)
+ _instrument.pcspk(data);
+ else
+ _instrument.adlib(data);
-void Part::set_instrument_pcspk(byte *data) {
- _instrument.pcspk(data);
if (clearToTransmit())
_instrument.send(_mc);
}
diff --git a/engines/scumm/imuse/sysex_scumm.cpp b/engines/scumm/imuse/sysex_scumm.cpp
index 035953f140..0987ab5553 100644
--- a/engines/scumm/imuse/sysex_scumm.cpp
+++ b/engines/scumm/imuse/sysex_scumm.cpp
@@ -121,12 +121,9 @@ void sysexHandler_Scumm(Player *player, const byte *msg, uint16 len) {
++p; // Skip hardware type
part = player->getPart(a);
if (part) {
- if (len == 62) {
+ if (len == 62 || len == 48) {
player->decode_sysex_bytes(p, buf, len - 2);
part->set_instrument((byte *)buf);
- } else if (len == 48) {
- player->decode_sysex_bytes(p, buf, len - 2);
- part->set_instrument_pcspk((byte *)buf);
} else {
part->programChange(254); // Must be invalid, but not 255 (which is reserved)
}
@@ -137,10 +134,8 @@ void sysexHandler_Scumm(Player *player, const byte *msg, uint16 len) {
p += 2; // Skip hardware type and... whatever came right before it
a = *p++;
player->decode_sysex_bytes(p, buf, len - 3);
- if (len == 63)
- se->setGlobalAdLibInstrument(a, buf);
- else if (len == 49)
- se->setGlobalPcSpkInstrument(a, buf);
+ if (len == 63 || len == 49)
+ se->setGlobalInstrument(a, buf);
break;
case 33: // Parameter adjust