4
#define CONTROLLER 0xb0
7
#define CHANPRESSURE 0xd0
9
/* These are the strings used in keynote to identify Standard MIDI File */
10
/* meta text messages. */
12
#define METATEXT "Text Event"
13
#define METACOPYRIGHT "Copyright Notice"
14
#define METASEQUENCE "Sequence/Track Name"
15
#define METAINSTRUMENT "Instrument Name"
16
#define METALYRIC "Lyric"
17
#define METAMARKER "Marker"
18
#define METACUE "Cue Point"
19
#define METAUNRECOGNIZED "Unrecognized"
22
class Midifile_reader {
25
int Mf_nomerge; /* 1 => continue'ed system exclusives are */
27
long Mf_currtime; /* current time in delta-time units */
28
int Mf_skipinit; /* 1 if initial garbage should be skipped */
30
// call finalize() when done or you may leak memory.
31
void finalize(); /* clean up before deletion */
32
// Note: rather than finalize, we should have ~Midifile_reader(),
33
// but at least VC++ complains that there is no Mf_free(), even
34
// though Mf_free is declared as virtual and this is an abstract
35
// class. I don't understand this, so finalize() is a workaround. -RBD
40
virtual void *Mf_malloc(size_t size) = 0; /* malloc() */
41
virtual void Mf_free(void *obj, size_t size) = 0; /* free() */
42
/* Methods to be called while processing the MIDI file. */
43
virtual void Mf_starttrack() = 0;
44
virtual void Mf_endtrack() = 0;
45
virtual int Mf_getc() = 0;
46
virtual void Mf_chanprefix(int) = 0;
47
virtual void Mf_portprefix(int) = 0;
48
virtual void Mf_eot() = 0;
49
virtual void Mf_error(char *) = 0;
50
virtual void Mf_header(int,int,int) = 0;
51
virtual void Mf_on(int,int,int) = 0;
52
virtual void Mf_off(int,int,int) = 0;
53
virtual void Mf_pressure(int,int,int) = 0;
54
virtual void Mf_controller(int,int,int) = 0;
55
virtual void Mf_pitchbend(int,int,int) = 0;
56
virtual void Mf_program(int,int) = 0;
57
virtual void Mf_chanpressure(int,int) = 0;
58
virtual void Mf_sysex(int,unsigned char*) = 0;
59
virtual void Mf_arbitrary(int,unsigned char*) = 0;
60
virtual void Mf_metamisc(int,int,unsigned char*) = 0;
61
virtual void Mf_seqnum(int) = 0;
62
virtual void Mf_smpte(int,int,int,int,int) = 0;
63
virtual void Mf_timesig(int,int,int,int) = 0;
64
virtual void Mf_tempo(int) = 0;
65
virtual void Mf_keysig(int,int) = 0;
66
virtual void Mf_sqspecific(int,unsigned char*) = 0;
67
virtual void Mf_text(int,int,unsigned char*) = 0;
84
int readmt(char*,int);
85
long to32bit(int,int,int,int);
91
void chanmessage(int,int,int);
93
unsigned char *Msgbuff;