diff options
author | Jamieson Christian | 2002-11-26 16:54:58 +0000 |
---|---|---|
committer | Jamieson Christian | 2002-11-26 16:54:58 +0000 |
commit | 973164a74177f5f3fe3b15567f7a0ac329abdc52 (patch) | |
tree | 8244e071531983592feaf41ad128322f97ccf50a /sound/mididrv.h | |
parent | 4544d24fe2995426bb8687799f84fe673cca6f06 (diff) | |
download | scummvm-rg350-973164a74177f5f3fe3b15567f7a0ac329abdc52.tar.gz scummvm-rg350-973164a74177f5f3fe3b15567f7a0ac329abdc52.tar.bz2 scummvm-rg350-973164a74177f5f3fe3b15567f7a0ac329abdc52.zip |
Restructured MIDI channel allocation architecture.
Adlib no longer suffers from 16-channel MIDI restrictions.
Fixes a regression in the MI2 intro music under Adlib.
svn-id: r5721
Diffstat (limited to 'sound/mididrv.h')
-rw-r--r-- | sound/mididrv.h | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/sound/mididrv.h b/sound/mididrv.h index 49fff19fd5..2c47344586 100644 --- a/sound/mididrv.h +++ b/sound/mididrv.h @@ -25,12 +25,14 @@ #include "scummsys.h" +class MidiChannel; + struct MidiEvent { uint32 delta; uint32 event; }; -/* Lowlevel Abstract Midi Driver Class */ +// Abstract MIDI Driver Class class MidiDriver { public: @@ -112,11 +114,44 @@ public: // Timing functions - MidiDriver now operates timers virtual void setTimerCallback (void *timer_param, void (*timer_proc) (void *)) = 0; virtual uint32 getBaseTempo (void) = 0; + + // Channel allocation functions + virtual MidiChannel *allocateChannel() = 0; + virtual MidiChannel *getPercussionChannel() = 0; +}; + + + +class MidiChannel { +public: + virtual void release() = 0; + + // Regular messages + virtual void noteOff (byte note) = 0; + virtual void noteOn (byte note, byte velocity) = 0; + virtual void programChange (byte program) = 0; + virtual void pitchBend (int16 bend) = 0; // -0x2000 to +0x1FFF + + // Control Change messages + virtual void controlChange (byte control, byte value) = 0; + virtual void modulationWheel (byte value) = 0; + virtual void volume (byte value) = 0; + virtual void panPosition (byte value) = 0; + virtual void pitchBendFactor (byte value) = 0; + virtual void detune (byte value) = 0; + virtual void priority (byte value) = 0; + virtual void sustain (bool value) = 0; + virtual void effectLevel (byte value) = 0; + virtual void chorusLevel (byte value) = 0; + virtual void allNotesOff() = 0; + + // SysEx messages + virtual void sysEx_customInstrument (uint32 type, byte *instr) = 0; }; -/* driver types */ +// MIDI Driver Types enum { MD_AUTO = 0, MD_NULL = 1, |