~ubuntu-branches/ubuntu/oneiric/muse/oneiric

« back to all changes in this revision

Viewing changes to midiedit/drummap.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Kobras
  • Date: 2002-04-23 17:28:23 UTC
  • Revision ID: james.westby@ubuntu.com-20020423172823-w8yplzr81a759xa3
Tags: upstream-0.5.2
ImportĀ upstreamĀ versionĀ 0.5.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//=========================================================
 
2
//  MusE
 
3
//  Linux Music Editor
 
4
//  $Id: drummap.cpp,v 1.1 2002/01/30 14:10:08 muse Exp $
 
5
//
 
6
//  (C) Copyright 1999/2000 Werner Schweer (ws@seh.de)
 
7
//=========================================================
 
8
 
 
9
#include "drummap.h"
 
10
#include "xml.h"
 
11
 
 
12
char drumOutmap[DRUM_MAPSIZE];
 
13
char drumInmap[128];
 
14
 
 
15
DrumMap drumMap[DRUM_MAPSIZE];
 
16
 
 
17
//---------------------------------------------------------
 
18
//    GM default drum map
 
19
//---------------------------------------------------------
 
20
 
 
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 },
 
38
 
 
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 },
 
55
 
 
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 },
 
72
 
 
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 },
 
89
 
 
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 },
 
106
 
 
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 },
 
123
 
 
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 },
 
140
 
 
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 },
 
157
      };
 
158
 
 
159
//---------------------------------------------------------
 
160
//   initDrumMap
 
161
//    populate Inmap and Outmap
 
162
//---------------------------------------------------------
 
163
 
 
164
void initDrumMap()
 
165
      {
 
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;
 
173
            }
 
174
      }
 
175
 
 
176
//---------------------------------------------------------
 
177
//   operator ==
 
178
//---------------------------------------------------------
 
179
 
 
180
bool const DrumMap::operator==(const DrumMap& map) const
 
181
      {
 
182
      return
 
183
         (name == map.name)
 
184
         && quant == map.quant
 
185
         && len == map.len
 
186
         && channel == map.channel
 
187
         && port == map.port
 
188
         && lv1 == map.lv1
 
189
         && lv2 == map.lv2
 
190
         && lv3 == map.lv3
 
191
         && lv4 == map.lv4
 
192
         && enote == map.enote
 
193
         && anote == map.anote
 
194
         && mute == map.mute
 
195
         && selected == map.selected;
 
196
      }
 
197
 
 
198
//---------------------------------------------------------
 
199
//   writeDrumMap
 
200
//---------------------------------------------------------
 
201
 
 
202
void writeDrumMap(int level, Xml& xml, bool external)
 
203
      {
 
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];
 
208
 
 
209
            if (external) {
 
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);
 
222
                  }
 
223
            else {
 
224
                  // write only, if entry is different from initial entry
 
225
                  if (!external && *dm == *idm)
 
226
                        continue;
 
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);
 
254
                  }
 
255
            xml.tag(level--, "/entry");
 
256
            }
 
257
      xml.tag(level--, "/drummap");
 
258
      }
 
259
 
 
260
//---------------------------------------------------------
 
261
//   readDrummapEntry
 
262
//---------------------------------------------------------
 
263
 
 
264
static void readDrummapEntry(Xml& xml, DrumMap* dm)
 
265
      {
 
266
      for (;;) {
 
267
            Xml::Token token = xml.parse();
 
268
            const QString& tag = xml.s1();
 
269
            switch (token) {
 
270
                  case Xml::Error:
 
271
                  case Xml::End:
 
272
                        return;
 
273
                  case Xml::TagStart:
 
274
                        if (tag == "name")
 
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();
 
300
                        else
 
301
                              xml.unknown("DrumMapEntry");
 
302
                        break;
 
303
                  case Xml::Attribut:
 
304
                        if (tag == "idx") {
 
305
                              int idx = xml.s2().toInt();
 
306
                              dm = &drumMap[idx];
 
307
                              }
 
308
                        break;
 
309
                  case Xml::TagEnd:
 
310
                        if (tag == "entry")
 
311
                              return;
 
312
                  default:
 
313
                        break;
 
314
                  }
 
315
            }
 
316
      }
 
317
 
 
318
//---------------------------------------------------------
 
319
//   readDrummap
 
320
//---------------------------------------------------------
 
321
 
 
322
void readDrumMap(Xml& xml, bool external)
 
323
      {
 
324
      if (external) {
 
325
            const DrumMap* dm = &idrumMap[DRUM_MAPSIZE-1];
 
326
            for (int i = 0; i < DRUM_MAPSIZE; ++i)
 
327
                  drumMap[i] = *dm;
 
328
            }
 
329
      else {
 
330
            for (int i = 0; i < DRUM_MAPSIZE; ++i)
 
331
                  drumMap[i] = idrumMap[i];
 
332
            }
 
333
      int i = 0;
 
334
      for (;;) {
 
335
            Xml::Token token = xml.parse();
 
336
            const QString& tag = xml.s1();
 
337
            switch (token) {
 
338
                  case Xml::Error:
 
339
                  case Xml::End:
 
340
                        return;
 
341
                  case Xml::TagStart:
 
342
                        if (tag == "entry") {
 
343
                              readDrummapEntry(xml, external ? &drumMap[i] : 0);
 
344
                              ++i;
 
345
                              }
 
346
                        else if (tag == "comment")
 
347
                              xml.parse();
 
348
                        else
 
349
                              xml.unknown("DrumMap");
 
350
                        break;
 
351
                  case Xml::Attribut:
 
352
                        break;
 
353
                  case Xml::TagEnd:
 
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;
 
360
                                    }
 
361
                              return;
 
362
                              }
 
363
                  default:
 
364
                        break;
 
365
                  }
 
366
            }
 
367
      }
 
368