aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sound/mpu401.cpp11
-rw-r--r--sound/mpu401.h2
2 files changed, 13 insertions, 0 deletions
diff --git a/sound/mpu401.cpp b/sound/mpu401.cpp
index 6c946ff686..3aab56e05d 100644
--- a/sound/mpu401.cpp
+++ b/sound/mpu401.cpp
@@ -74,6 +74,17 @@ MidiDriver_MPU401::MidiDriver_MPU401() : MidiDriver() {
}
}
+void MidiDriver_MPU401::sysEx_customInstrument (byte channel, uint32 type, byte *instr) {
+ if (type != 'ROL ')
+ return;
+
+ // The SysEx stream for a Roland MT-32 instrument definition starts with
+ // the Roland manufacturer ID. So we just need to substitute the appropriate
+ // device # (i.e. channel), and go.
+ instr[1] = channel;
+ sysEx (instr, 253);
+}
+
MidiChannel *MidiDriver_MPU401::allocateChannel() {
MidiChannel_MPU401 *chan;
uint i;
diff --git a/sound/mpu401.h b/sound/mpu401.h
index 7c9450e613..3f4cfecfee 100644
--- a/sound/mpu401.h
+++ b/sound/mpu401.h
@@ -90,6 +90,8 @@ public:
void setTimerCallback(void *timer_param, void (*timer_proc) (void *));
uint32 getBaseTempo(void) { return 0x4A0000; }
+ virtual void sysEx_customInstrument (byte channel, uint32 type, byte *instr);
+
MidiChannel *allocateChannel();
MidiChannel *getPercussionChannel() { return &_midi_channels [9]; }
};