33#ifndef _NICMIDI_FILEREAD_H
34#define _NICMIDI_FILEREAD_H
48class MIDIFileEventHandler {
50 MIDIFileEventHandler() {}
51 virtual ~MIDIFileEventHandler() {}
67 virtual void mf_arbitrary(
MIDIClockTime time,
int len,
unsigned char *data) = 0;
68 virtual void mf_metamisc(
MIDIClockTime time,
int b1,
int b2,
unsigned char *ch) = 0;
69 virtual void mf_meta16 (
MIDIClockTime time,
int type,
int b1,
int b2) = 0;
70 virtual void mf_smpte(
MIDIClockTime time,
int h,
int m,
int s,
int f,
int sf) = 0;
71 virtual void mf_timesig(
MIDIClockTime time,
int m1,
int m2,
int m3,
int m4) = 0;
72 virtual void mf_tempo(
MIDIClockTime time,
int b1,
int b2,
int b3) = 0;
73 virtual void mf_keysig(
MIDIClockTime time,
int sf,
int majmin) = 0;
74 virtual void mf_sqspecific(
MIDIClockTime time,
int len,
unsigned char *data) = 0;
75 virtual void mf_text(
MIDIClockTime time,
int type,
int len,
unsigned char *data) = 0;
82 virtual void mf_error(
const char* err) = 0;
83 virtual void mf_starttrack(
int trk) = 0;
84 virtual void mf_endtrack(
int trk) = 0;
85 virtual void mf_header(
int,
int,
int) = 0;
92 virtual void MetaEvent(
MIDIClockTime time,
int type,
int len,
unsigned char *buf);
115class MIDIFileReader {
119 MIDIFileReader (std::istream* ist,
120 MIDIFileEventHandler *ev_h,
121 unsigned long max_msg_len = 8192);
123 virtual ~MIDIFileReader();
124 virtual int ReadHeader();
125 virtual bool Parse();
127 int GetFormat()
const {
return header.format; }
128 int GetNumberTracks()
const {
return header.ntrks; }
129 int GetDivision()
const {
return header.division; }
133 virtual void mf_error(
const char*);
138 unsigned long to_be_read;
142 unsigned char* the_msg;
146 static const unsigned long _MThd = (
'M')*0x1000000 + (
'T')*0x10000 + (
'h')*0x100 + (
'd');
147 static const unsigned long _MTrk = (
'M')*0x1000000 + (
'T')*0x10000 + (
'r')*0x100 + (
'k');
151 unsigned long ReadVariableNum();
152 unsigned long Read32Bit();
158 int ReadMT(
unsigned long,
int);
160 void FormChanMessage(
unsigned char st,
unsigned char b1,
unsigned char b2);
164 std::istream* in_stream;
165 MIDIFileEventHandler* event_handler;
Stores a buffer of MIDI data bytes in a std::vector, plus a byte for the checksum.
Definition: sysex.h:45
The MIDITimedMessage class inherits from the MIDIMessage and represents a message associated with a s...
Definition: msg.h:382
unsigned long MIDIClockTime
The type of a variable which can hold a time in MIDI ticks.
Definition: midi.h:40
Contains the definition of the classes MIDIMessage and MIDITimedMessage.