diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/mpu401.cpp | 11 | ||||
-rw-r--r-- | sound/mpu401.h | 2 |
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]; } }; |