1
//=========================================================
4
// $Id: drummap.cpp,v 1.1 2002/01/30 14:10:08 muse Exp $
6
// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de)
7
//=========================================================
12
char drumOutmap[DRUM_MAPSIZE];
15
DrumMap drumMap[DRUM_MAPSIZE];
17
//---------------------------------------------------------
18
// GM default drum map
19
//---------------------------------------------------------
21
const DrumMap idrumMap[DRUM_MAPSIZE] = {
22
{ "Acoustic Bass Drum", 16, 32, 9, 0, 70, 90, 110, 127, 35, 35, false, false },
23
{ "Bass Drum 1", 16, 32, 9, 0, 70, 90, 110, 127, 36, 36, false, false },
24
{ "Side Stick", 16, 32, 9, 0, 70, 90, 110, 127, 37, 37, false, false },
25
{ "Acoustic Snare", 16, 32, 9, 0, 70, 90, 110, 127, 38, 38, false, false },
26
{ "Hand Clap", 16, 32, 9, 0, 70, 90, 110, 127, 39, 39, false, false },
27
{ "Electric Snare", 16, 32, 9, 0, 70, 90, 110, 127, 40, 40, false, false },
28
{ "Low Floor Tom", 16, 32, 9, 0, 70, 90, 110, 127, 41, 41, false, false },
29
{ "Closed Hi-Hat", 16, 32, 9, 0, 70, 90, 110, 127, 42, 42, false, false },
30
{ "High Floor Tom", 16, 32, 9, 0, 70, 90, 110, 127, 43, 43, false, false },
31
{ "Pedal Hi-Hat", 16, 32, 9, 0, 70, 90, 110, 127, 44, 44, false, false },
32
{ "Low Tom", 16, 32, 9, 0, 70, 90, 110, 127, 45, 45, false, false },
33
{ "Open Hi-Hat", 16, 32, 9, 0, 70, 90, 110, 127, 46, 46, false, false },
34
{ "Low-Mid Tom", 16, 32, 9, 0, 70, 90, 110, 127, 47, 47, false, false },
35
{ "Hi-Mid Tom", 16, 32, 9, 0, 70, 90, 110, 127, 48, 48, false, false },
36
{ "Crash Cymbal 1", 16, 32, 9, 0, 70, 90, 110, 127, 49, 49, false, false },
37
{ "High Tom", 16, 32, 9, 0, 70, 90, 110, 127, 50, 50, false, false },
39
{ "Ride Cymbal 1", 16, 32, 9, 0, 70, 90, 110, 127, 51, 51, false, false },
40
{ "Chinese Cymbal", 16, 32, 9, 0, 70, 90, 110, 127, 52, 52, false, false },
41
{ "Ride Bell", 16, 32, 9, 0, 70, 90, 110, 127, 53, 53, false, false },
42
{ "Tambourine", 16, 32, 9, 0, 70, 90, 110, 127, 54, 54, false, false },
43
{ "Splash Cymbal", 16, 32, 9, 0, 70, 90, 110, 127, 55, 55, false, false },
44
{ "Cowbell", 16, 32, 9, 0, 70, 90, 110, 127, 56, 56, false, false },
45
{ "Crash Cymbal 2", 16, 32, 9, 0, 70, 90, 110, 127, 57, 57, false, false },
46
{ "Vibraslap", 16, 32, 9, 0, 70, 90, 110, 127, 58, 58, false, false },
47
{ "Ride Cymbal 2", 16, 32, 9, 0, 70, 90, 110, 127, 59, 59, false, false },
48
{ "Hi Bongo", 16, 32, 9, 0, 70, 90, 110, 127, 60, 60, false, false },
49
{ "Low Bongo", 16, 32, 9, 0, 70, 90, 110, 127, 61, 61, false, false },
50
{ "Mute Hi Conga", 16, 32, 9, 0, 70, 90, 110, 127, 62, 62, false, false },
51
{ "Open Hi Conga", 16, 32, 9, 0, 70, 90, 110, 127, 63, 63, false, false },
52
{ "Low Conga", 16, 32, 9, 0, 70, 90, 110, 127, 64, 64, false, false },
53
{ "High Timbale", 16, 32, 9, 0, 70, 90, 110, 127, 65, 65, false, false },
54
{ "Low Timbale", 16, 32, 9, 0, 70, 90, 110, 127, 66, 66, false, false },
56
{ "High Agogo", 16, 32, 9, 0, 70, 90, 110, 127, 67, 67, false, false },
57
{ "Low Agogo", 16, 32, 9, 0, 70, 90, 110, 127, 68, 68, false, false },
58
{ "Cabasa", 16, 32, 9, 0, 70, 90, 110, 127, 69, 69, false, false },
59
{ "Maracas", 16, 32, 9, 0, 70, 90, 110, 127, 70, 70, false, false },
60
{ "Short Whistle", 16, 32, 9, 0, 70, 90, 110, 127, 71, 71, false, false },
61
{ "Long Whistle", 16, 32, 9, 0, 70, 90, 110, 127, 72, 72, false, false },
62
{ "Short Guiro", 16, 32, 9, 0, 70, 90, 110, 127, 73, 73, false, false },
63
{ "Long Guiro", 16, 32, 9, 0, 70, 90, 110, 127, 74, 74, false, false },
64
{ "Claves", 16, 32, 9, 0, 70, 90, 110, 127, 75, 75, false, false },
65
{ "Hi Wood Block", 16, 32, 9, 0, 70, 90, 110, 127, 76, 76, false, false },
66
{ "Low Wood Block", 16, 32, 9, 0, 70, 90, 110, 127, 77, 77, false, false },
67
{ "Mute Cuica", 16, 32, 9, 0, 70, 90, 110, 127, 78, 78, false, false },
68
{ "Open Cuica", 16, 32, 9, 0, 70, 90, 110, 127, 79, 79, false, false },
69
{ "Mute Triangle", 16, 32, 9, 0, 70, 90, 110, 127, 80, 80, false, false },
70
{ "Open Triangle", 16, 32, 9, 0, 70, 90, 110, 127, 81, 81, false, false },
71
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 82, 82, false, false },
73
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 83, 83, false, false },
74
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 84, 84, false, false },
75
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 85, 85, false, false },
76
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 86, 86, false, false },
77
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 87, 87, false, false },
78
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 88, 88, false, false },
79
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 89, 89, false, false },
80
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 90, 90, false, false },
81
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 91, 91, false, false },
82
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 92, 92, false, false },
83
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 93, 93, false, false },
84
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 94, 94, false, false },
85
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 95, 95, false, false },
86
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 96, 96, false, false },
87
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 97, 97, false, false },
88
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 98, 98, false, false },
90
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 83, 83, false, false },
91
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 84, 84, false, false },
92
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 85, 85, false, false },
93
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 86, 86, false, false },
94
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 87, 87, false, false },
95
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 88, 88, false, false },
96
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 89, 89, false, false },
97
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 90, 90, false, false },
98
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 91, 91, false, false },
99
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 92, 92, false, false },
100
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 93, 93, false, false },
101
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 94, 94, false, false },
102
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 95, 95, false, false },
103
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 96, 96, false, false },
104
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 97, 97, false, false },
105
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 98, 98, false, false },
107
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 83, 83, false, false },
108
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 84, 84, false, false },
109
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 85, 85, false, false },
110
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 86, 86, false, false },
111
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 87, 87, false, false },
112
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 88, 88, false, false },
113
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 89, 89, false, false },
114
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 90, 90, false, false },
115
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 91, 91, false, false },
116
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 92, 92, false, false },
117
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 93, 93, false, false },
118
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 94, 94, false, false },
119
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 95, 95, false, false },
120
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 96, 96, false, false },
121
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 97, 97, false, false },
122
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 98, 98, false, false },
124
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 83, 83, false, false },
125
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 84, 84, false, false },
126
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 85, 85, false, false },
127
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 86, 86, false, false },
128
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 87, 87, false, false },
129
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 88, 88, false, false },
130
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 89, 89, false, false },
131
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 90, 90, false, false },
132
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 91, 91, false, false },
133
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 92, 92, false, false },
134
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 93, 93, false, false },
135
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 94, 94, false, false },
136
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 95, 95, false, false },
137
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 96, 96, false, false },
138
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 97, 97, false, false },
139
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 98, 98, false, false },
141
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 83, 83, false, false },
142
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 84, 84, false, false },
143
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 85, 85, false, false },
144
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 86, 86, false, false },
145
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 87, 87, false, false },
146
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 88, 88, false, false },
147
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 89, 89, false, false },
148
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 90, 90, false, false },
149
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 91, 91, false, false },
150
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 92, 92, false, false },
151
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 93, 93, false, false },
152
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 94, 94, false, false },
153
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 95, 95, false, false },
154
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 96, 96, false, false },
155
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 97, 97, false, false },
156
{ "", 16, 32, 9, 0, 70, 90, 110, 127, 98, 98, false, false },
159
//---------------------------------------------------------
161
// populate Inmap and Outmap
162
//---------------------------------------------------------
166
for (int i = 0; i < DRUM_MAPSIZE; ++i)
167
drumMap[i] = idrumMap[i];
168
memset(drumInmap, 0, sizeof(drumInmap));
169
memset(drumOutmap, 0, sizeof(drumOutmap));
170
for (int i = 0; i < DRUM_MAPSIZE; ++i) {
171
drumInmap[drumMap[i].enote] = i;
172
drumOutmap[drumMap[i].anote] = i;
176
//---------------------------------------------------------
178
//---------------------------------------------------------
180
bool const DrumMap::operator==(const DrumMap& map) const
184
&& quant == map.quant
186
&& channel == map.channel
192
&& enote == map.enote
193
&& anote == map.anote
195
&& selected == map.selected;
198
//---------------------------------------------------------
200
//---------------------------------------------------------
202
void writeDrumMap(int level, Xml& xml, bool external)
204
xml.tag(level++, "drummap");
205
for (int i = 0; i < DRUM_MAPSIZE; ++i) {
206
DrumMap* dm = &drumMap[i];
207
const DrumMap* idm = &idrumMap[i];
210
xml.tag(level++, "entry");
211
xml.strTag(level, "name", dm->name);
212
xml.intTag(level, "quant", dm->quant);
213
xml.intTag(level, "len", dm->len);
214
xml.intTag(level, "channel", dm->channel);
215
xml.intTag(level, "port", dm->port);
216
xml.intTag(level, "lv1", dm->lv1);
217
xml.intTag(level, "lv2", dm->lv2);
218
xml.intTag(level, "lv3", dm->lv3);
219
xml.intTag(level, "lv4", dm->lv4);
220
xml.intTag(level, "enote", dm->enote);
221
xml.intTag(level, "anote", dm->anote);
224
// write only, if entry is different from initial entry
225
if (!external && *dm == *idm)
227
xml.tag(level++, "entry idx=\"%d\"", i);
228
if (dm->name != idm->name)
229
xml.strTag(level, "name", dm->name);
230
if (dm->quant != idm->quant)
231
xml.intTag(level, "quant", dm->quant);
232
if (dm->len != idm->len)
233
xml.intTag(level, "len", dm->len);
234
if (dm->channel != idm->channel)
235
xml.intTag(level, "channel", dm->channel);
236
if (dm->port != idm->port)
237
xml.intTag(level, "port", dm->port);
238
if (dm->lv1 != idm->lv1)
239
xml.intTag(level, "lv1", dm->lv1);
240
if (dm->lv2 != idm->lv2)
241
xml.intTag(level, "lv2", dm->lv2);
242
if (dm->lv3 != idm->lv3)
243
xml.intTag(level, "lv3", dm->lv3);
244
if (dm->lv4 != idm->lv4)
245
xml.intTag(level, "lv4", dm->lv4);
246
if (dm->enote != idm->enote)
247
xml.intTag(level, "enote", dm->enote);
248
if (dm->anote != idm->anote)
249
xml.intTag(level, "anote", dm->anote);
250
if (dm->mute != idm->mute)
251
xml.intTag(level, "mute", dm->mute);
252
if (dm->selected != idm->selected)
253
xml.intTag(level, "selected", dm->selected);
255
xml.tag(level--, "/entry");
257
xml.tag(level--, "/drummap");
260
//---------------------------------------------------------
262
//---------------------------------------------------------
264
static void readDrummapEntry(Xml& xml, DrumMap* dm)
267
Xml::Token token = xml.parse();
268
const QString& tag = xml.s1();
275
dm->name = xml.parse("name");
276
else if (tag == "quant")
277
dm->quant = xml.parseInt();
278
else if (tag == "len")
279
dm->len = xml.parseInt();
280
else if (tag == "channel")
281
dm->channel = xml.parseInt();
282
else if (tag == "port")
283
dm->port = xml.parseInt();
284
else if (tag == "lv1")
285
dm->lv1 = xml.parseInt();
286
else if (tag == "lv2")
287
dm->lv2 = xml.parseInt();
288
else if (tag == "lv3")
289
dm->lv3 = xml.parseInt();
290
else if (tag == "lv4")
291
dm->lv4 = xml.parseInt();
292
else if (tag == "enote")
293
dm->enote = xml.parseInt();
294
else if (tag == "anote")
295
dm->anote = xml.parseInt();
296
else if (tag == "mute")
297
dm->mute = xml.parseInt();
298
else if (tag == "selected")
299
dm->selected = xml.parseInt();
301
xml.unknown("DrumMapEntry");
305
int idx = xml.s2().toInt();
318
//---------------------------------------------------------
320
//---------------------------------------------------------
322
void readDrumMap(Xml& xml, bool external)
325
const DrumMap* dm = &idrumMap[DRUM_MAPSIZE-1];
326
for (int i = 0; i < DRUM_MAPSIZE; ++i)
330
for (int i = 0; i < DRUM_MAPSIZE; ++i)
331
drumMap[i] = idrumMap[i];
335
Xml::Token token = xml.parse();
336
const QString& tag = xml.s1();
342
if (tag == "entry") {
343
readDrummapEntry(xml, external ? &drumMap[i] : 0);
346
else if (tag == "comment")
349
xml.unknown("DrumMap");
354
if (tag == "drummap") {
355
memset(drumInmap, 0, sizeof(drumInmap));
356
memset(drumOutmap, 0, sizeof(drumOutmap));
357
for (int i = 0; i < DRUM_MAPSIZE; ++i) {
358
drumInmap[drumMap[i].enote] = i;
359
drumOutmap[drumMap[i].anote] = i;