foo
[bootcard] / tools / mididump / midi.h
1 #ifndef MIDI_H_
2 #define MIDI_H_
3
4 #include <stdio.h>
5
6 struct midi {
7         int ppqn, fps, ticks_per_frame;
8
9         int num_tracks;
10         struct midi_track *tracks;
11 };
12
13
14 struct midi_track {
15         char *name;
16         struct midi_event *head, *tail;
17         int num_ev;
18 };
19
20 struct midi_event {
21         long dt;
22         int type;
23         int channel;
24         int arg[2];
25
26         struct midi_event *next;
27 };
28
29 #define MIDI_NOTE_OFF                   8
30 #define MIDI_NOTE_ON                    9
31 #define MIDI_NOTE_AFTERTOUCH    10
32 #define MIDI_CONTROLLER                 11
33 #define MIDI_PROG_CHANGE                12
34 #define MIDI_CHAN_AFTERTOUCH    13
35 #define MIDI_PITCH_BEND                 14
36
37 #define MIDI_NOTE_NUM(ev)       ((ev)->arg[0])
38 #define MIDI_NOTE_VEL(ev)       ((ev)->arg[1])
39
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43
44 struct midi *midi_load(const char *fname);
45 void midi_free(struct midi *midi);
46
47 int midi_num_tracks(struct midi *midi);
48 struct midi_track *midi_track(struct midi *midi, int idx);
49
50 #ifdef __cplusplus
51 }
52 #endif
53
54 #endif  /* MIDI_H_ */