aboutsummaryrefslogtreecommitdiff
path: root/sound/mididrv.h
diff options
context:
space:
mode:
authorJamieson Christian2002-11-26 16:54:58 +0000
committerJamieson Christian2002-11-26 16:54:58 +0000
commit973164a74177f5f3fe3b15567f7a0ac329abdc52 (patch)
tree8244e071531983592feaf41ad128322f97ccf50a /sound/mididrv.h
parent4544d24fe2995426bb8687799f84fe673cca6f06 (diff)
downloadscummvm-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.h39
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,