Canorus 0.0
elements.h
Go to the documentation of this file.
1/*
2 *
3 * File: elements.h
4 *
5 * Copyright (C) 1999 Steve Ratcliffe
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 *
17 *
18 *
19 *
20 */
21
22#define MD_CONTAINER_BEGIN 50 /* Begining of container types */
23
24/*
25 * The basic element type. All elements have a time associated with
26 * them and most use the device and channel field.
27 */
28struct element {
29 short type; /* Element type */
30 guint32 element_time; /* Time for this element */
31 short device_channel; /* Device/channel for this element */
32};
33#define MD_ELEMENT(e) \
34 ((struct element *)md_check_cast((struct element *)(e), MD_TYPE_ELEMENT))
35
36
39 GPtrArray *elements; /* List of elements */
40};
41#define MD_CONTAINER(e) \
42 ((struct containerElement *)md_check_cast((struct element *)(e), MD_TYPE_CONTAINER))
43
44
47 short format; /* Midi format */
48 short tracks; /* Number of tracks */
49 short time_base; /* Time base value */
50};
51#define MD_ROOT(e) \
52 ((struct rootElement *)md_check_cast((struct element *)(e), MD_TYPE_ROOT))
53
54
58};
59#define MD_TRACK(e) \
60 ((struct trackElement *)md_check_cast((struct element *)(e), MD_TYPE_TRACK))
61
62
65};
66#define MD_TEMPOMAP(e) \
67 ((struct tempomapElement *)md_check_cast((struct element *)(e), MD_TYPE_TEMPOMAP))
68
69
72 short note;
73 short vel;
74 int length;
75 short offvel; /* Note Off velocity */
76};
77#define MD_NOTE(e) \
78 ((struct noteElement *)md_check_cast((struct element *)(e), MD_TYPE_NOTE))
79
80
84};
85#define MD_PART(e) \
86 ((struct partElement *)md_check_cast((struct element *)(e), MD_TYPE_PART))
87
88
91 short control; /* Controller number */
92 short value; /* Controller value */
93};
94#define MD_CONTROL(e) \
95 ((struct controlElement *)md_check_cast((struct element *)(e), MD_TYPE_CONTROL))
96
97
100 int program; /* Program number */
101};
102#define MD_PROGRAM(e) \
103 ((struct programElement *)md_check_cast((struct element *)(e), MD_TYPE_PROGRAM))
104
105
108 int note;
110};
111#define MD_KEYTOUCH(e) \
112 ((struct keytouchElement *)md_check_cast((struct element *)(e), MD_TYPE_KEYTOUCH))
113
114
118};
119#define MD_PRESSURE(e) \
120 ((struct pressureElement *)md_check_cast((struct element *)(e), MD_TYPE_PRESSURE))
121
122
125 int pitch;
126};
127#define MD_PITCH(e) \
128 ((struct pitchElement *)md_check_cast((struct element *)(e), MD_TYPE_PITCH))
129
130
134 unsigned char *data;
136};
137#define MD_SYSEX(e) \
138 ((struct sysexElement *)md_check_cast((struct element *)(e), MD_TYPE_SYSEX))
139
140
143};
144#define MD_META(e) \
145 ((struct metaElement *)md_check_cast((struct element *)(e), MD_TYPE_META))
146
147
150};
151#define MD_MAP(e) \
152 ((struct mapElement *)md_check_cast((struct element *)(e), MD_TYPE_MAP))
153
154
157 char key; /* Key signature */
158 char minor; /* Is this a minor key or not */
159};
160#define MD_KEYSIG(e) \
161 ((struct keysigElement *)md_check_cast((struct element *)(e), MD_TYPE_KEYSIG))
162
163
166 short top; /* 'top' of timesignature */
167 short bottom; /* 'bottom' of timesignature */
168 short clocks; /* Can't remember what this is */
169 short n32pq; /* Thirtysecond notes per quarter */
170};
171#define MD_TIMESIG(e) \
172 ((struct timesigElement *)md_check_cast((struct element *)(e), MD_TYPE_TIMESIG))
173
174
177 int micro_tempo; /* The tempo in microsec per quarter note */
178};
179#define MD_TEMPO(e) \
180 ((struct tempoElement *)md_check_cast((struct element *)(e), MD_TYPE_TEMPO))
181
182
185 int type; /* Type of text (lyric, copyright etc) */
186 char *name; /* Type as text */
187 char *text; /* actual text */
188 int length; /* length of the text (including a null?) */
189};
190#define MD_TEXT(e) \
191 ((struct textElement *)md_check_cast((struct element *)(e), MD_TYPE_TEXT))
192
193
196 short hours;
197 short minutes;
198 short seconds;
199 short frames;
201};
202#define MD_SMPTEOFFSET(e) \
203 ((struct smpteoffsetElement *)md_check_cast((struct element *)(e), MD_TYPE_SMPTEOFFSET))
204
205
211struct noteElement *md_note_new(short note, short vel, int length);
217struct pitchElement *md_pitch_new(int val);
218struct sysexElement *md_sysex_new(int status, unsigned char *data, int len);
221struct keysigElement *md_keysig_new(short key, short minor);
222struct timesigElement *md_timesig_new(short top, short bottom, short clocks,
223 short n32pq);
225struct textElement *md_text_new(int type, char *text);
227 short seconds, short frames, short subframes);
228void md_add(struct containerElement *c, struct element *e);
229void md_free(struct element *el);
230struct element *md_check_cast(struct element *el, int type);
231
232
233/* Defines for types */
234#define MD_TYPE_PART (0 + MD_CONTAINER_BEGIN)
235#define MD_TYPE_ROOT (1 + MD_CONTAINER_BEGIN)
236#define MD_TYPE_KEYTOUCH 2
237#define MD_TYPE_TEXT 3
238#define MD_TYPE_PITCH 4
239#define MD_TYPE_PROGRAM 5
240#define MD_TYPE_META 6
241#define MD_TYPE_PRESSURE 7
242#define MD_TYPE_NOTE 8
243#define MD_TYPE_ELEMENT 9
244#define MD_TYPE_SMPTEOFFSET 10
245#define MD_TYPE_TEMPO 11
246#define MD_TYPE_TEMPOMAP (12 + MD_CONTAINER_BEGIN)
247#define MD_TYPE_SYSEX 13
248#define MD_TYPE_TRACK (14 + MD_CONTAINER_BEGIN)
249#define MD_TYPE_KEYSIG 15
250#define MD_TYPE_TIMESIG 16
251#define MD_TYPE_CONTAINER 17
252#define MD_TYPE_MAP 18
253#define MD_TYPE_CONTROL 19
struct partElement * md_part_new(void)
struct element * md_element_new()
struct element * md_check_cast(struct element *el, int type)
struct programElement * md_program_new(int program)
struct metaElement * md_meta_new()
struct tempomapElement * md_tempomap_new()
void md_add(struct containerElement *c, struct element *e)
struct keysigElement * md_keysig_new(short key, short minor)
struct sysexElement * md_sysex_new(int status, unsigned char *data, int len)
struct pressureElement * md_pressure_new(int vel)
struct textElement * md_text_new(int type, char *text)
struct noteElement * md_note_new(short note, short vel, int length)
struct pitchElement * md_pitch_new(int val)
struct tempoElement * md_tempo_new(int m)
struct containerElement * md_container_new()
struct rootElement * md_root_new(void)
struct timesigElement * md_timesig_new(short top, short bottom, short clocks, short n32pq)
struct controlElement * md_control_new(short control, short value)
struct trackElement * md_track_new(void)
struct mapElement * md_map_new()
void md_free(struct element *el)
struct keytouchElement * md_keytouch_new(int note, int vel)
struct smpteoffsetElement * md_smpteoffset_new(short hours, short minutes, short seconds, short frames, short subframes)
unsigned int guint32
Definition: glib.h:76
Definition: glib.h:836
Definition: elements.h:37
GPtrArray * elements
Definition: elements.h:39
struct element parent
Definition: elements.h:38
Definition: elements.h:89
short value
Definition: elements.h:92
short control
Definition: elements.h:91
struct element parent
Definition: elements.h:90
Definition: elements.h:28
guint32 element_time
Definition: elements.h:30
short device_channel
Definition: elements.h:31
short type
Definition: elements.h:29
Definition: elements.h:155
char minor
Definition: elements.h:158
struct mapElement parent
Definition: elements.h:156
char key
Definition: elements.h:157
Definition: elements.h:106
int note
Definition: elements.h:108
struct element parent
Definition: elements.h:107
int velocity
Definition: elements.h:109
Definition: elements.h:148
struct metaElement parent
Definition: elements.h:149
Definition: elements.h:141
struct element parent
Definition: elements.h:142
Definition: elements.h:70
int length
Definition: elements.h:74
short offvel
Definition: elements.h:75
struct element parent
Definition: elements.h:71
short note
Definition: elements.h:72
short vel
Definition: elements.h:73
Definition: elements.h:81
struct containerElement parent
Definition: elements.h:82
guint32 final_time
Definition: elements.h:83
Definition: elements.h:123
int pitch
Definition: elements.h:125
struct element parent
Definition: elements.h:124
Definition: elements.h:115
int velocity
Definition: elements.h:117
struct element parent
Definition: elements.h:116
Definition: elements.h:98
struct element parent
Definition: elements.h:99
int program
Definition: elements.h:100
Definition: elements.h:45
struct containerElement parent
Definition: elements.h:46
short format
Definition: elements.h:47
short tracks
Definition: elements.h:48
short time_base
Definition: elements.h:49
Definition: elements.h:194
short hours
Definition: elements.h:196
short minutes
Definition: elements.h:197
short seconds
Definition: elements.h:198
short frames
Definition: elements.h:199
struct element parent
Definition: elements.h:195
short subframes
Definition: elements.h:200
Definition: elements.h:131
unsigned char * data
Definition: elements.h:134
int status
Definition: elements.h:133
struct element parent
Definition: elements.h:132
int length
Definition: elements.h:135
Definition: elements.h:175
int micro_tempo
Definition: elements.h:177
struct mapElement parent
Definition: elements.h:176
Definition: elements.h:63
struct containerElement parent
Definition: elements.h:64
Definition: elements.h:183
int length
Definition: elements.h:188
int type
Definition: elements.h:185
struct element parent
Definition: elements.h:184
char * name
Definition: elements.h:186
char * text
Definition: elements.h:187
Definition: elements.h:164
short clocks
Definition: elements.h:168
struct mapElement parent
Definition: elements.h:165
short top
Definition: elements.h:166
short bottom
Definition: elements.h:167
short n32pq
Definition: elements.h:169
Definition: elements.h:55
guint32 final_time
Definition: elements.h:57
struct containerElement parent
Definition: elements.h:56