-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmidi_data.h
More file actions
77 lines (63 loc) · 1.69 KB
/
midi_data.h
File metadata and controls
77 lines (63 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ifndef MIDI_DATA_H_FILE
#define MIDI_DATA_H_FILE
#include <stdint.h>
enum MIDI_EVENT_TYPE {
MIDI_EVENT_TYPE_MIDI,
MIDI_EVENT_TYPE_SYSEX,
MIDI_EVENT_TYPE_META,
};
enum MIDI_EVENT_META_TYPE {
MIDI_EVENT_TYPE_META_SHORT,
MIDI_EVENT_TYPE_META_LONG,
};
struct MIDI_EVENT_MIDI {
uint8_t status;
uint8_t data1;
uint8_t data2;
};
struct MIDI_EVENT_SYSEX {
uint8_t sysex_type; // 0xf0 or 0xf7
uint32_t data_len;
uint8_t *data;
};
struct MIDI_EVENT_META_SHORT {
uint8_t data[8];
};
struct MIDI_EVENT_META_LONG {
uint8_t *data;
};
struct MIDI_EVENT_META {
uint8_t meta_type;
uint32_t data_len;
enum MIDI_EVENT_META_TYPE type;
union {
struct MIDI_EVENT_META_SHORT short_data;
struct MIDI_EVENT_META_LONG long_data;
};
};
struct MIDI_EVENT {
uint32_t delta_time;
enum MIDI_EVENT_TYPE type;
union {
struct MIDI_EVENT_MIDI midi;
struct MIDI_EVENT_SYSEX sysex;
struct MIDI_EVENT_META meta;
};
};
struct MIDI_TRACK {
int n_events;
int alloc_events;
struct MIDI_EVENT *events;
};
struct MIDI_DATA {
uint8_t format;
uint16_t ticks_per_beat;
int n_tracks;
struct MIDI_TRACK tracks[];
};
struct MIDI_DATA *midi_new(uint8_t format, uint16_t ticks_per_beat, uint16_t n_tracks);
void midi_free(struct MIDI_DATA *midi);
struct MIDI_EVENT_MIDI *midi_add_midi_event(struct MIDI_DATA *midi, uint16_t track_num, uint32_t delta_time);
struct MIDI_EVENT_SYSEX *midi_add_sysex_event(struct MIDI_DATA *midi, uint16_t track_num, uint32_t delta_time);
struct MIDI_EVENT_META *midi_add_meta_event(struct MIDI_DATA *midi, uint16_t track_num, uint32_t delta_time);
#endif /* MIDI_DATA_H_FILE */