~ubuntu-branches/ubuntu/breezy/soundtracker/breezy

« back to all changes in this revision

Viewing changes to app/midi-utils-050.c

  • Committer: Bazaar Package Importer
  • Author(s): Junichi Uekawa
  • Date: 2005-04-18 07:19:14 UTC
  • mfrom: (2.1.1 warty)
  • Revision ID: james.westby@ubuntu.com-20050418071914-b9m1ptfdnz8mqm7a
Tags: 0.6.7-5
* disable alsa (closes: #286350, #304711)
- it was doing double-free.
* update jack support, not enabled.
- 02_jack_output: Patch from Kai Vehmanen available as
  http://eca.cx/download/soundtracker-0.6.7-pre6-kv3.tar.gz
  applied.
- Build-Depend on libjack0.80.0-dev
- remove --disable-jack from configure line
* change soundtracker.1 section from 1x to 1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2000 Luc Tanguay <luc.tanguay@bell.ca>
 
3
 * Copyright (C) 1998-2001 Michael Krause
 
4
 *
 
5
 * This program is free software; you can redistribute it and/or modify
 
6
 * it under the terms of the GNU General Public License as published by
 
7
 * the Free Software Foundation; either version 2 of the License, or
 
8
 * (at your option) any later version.
 
9
 *
 
10
 * This program is distributed in the hope that it will be useful,
 
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 * GNU General Public License for more details.
 
14
 *
 
15
 * You should have received a copy of the GNU General Public License
 
16
 * along with this program; if not, write to the Free Software
 
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
18
 */
 
19
 
 
20
#include <config.h>
 
21
 
 
22
#if defined(DRIVER_ALSA_050)
 
23
 
 
24
#include <gtk/gtk.h>
 
25
#include "midi-utils.h"
 
26
#include "midi-settings.h"
 
27
 
 
28
/* Global variables. */
 
29
 
 
30
/* Local variables */
 
31
 
 
32
/* Next array taken from alsa-lib-0.5.5/test/seq-decode.c */
 
33
 
 
34
static char *event_names[256] = {
 
35
        /* 0   */       "System",
 
36
        /* 1   */       "Result",
 
37
        /* 2   */       "Reserved 2",
 
38
        /* 3   */       "Reserved 3",
 
39
        /* 4   */       "Reserved 4",
 
40
        /* 5   */       "Note",
 
41
        /* 6   */       "Note On",
 
42
        /* 7   */       "Note Off",
 
43
        /* 8   */       "Key Pressure",
 
44
        /* 9   */       "Reserved 9",
 
45
        /* 10   */      "Controller",
 
46
        /* 11   */      "Program Change",
 
47
        /* 12   */      "Channel Pressure",
 
48
        /* 13   */      "Pitchbend",
 
49
        /* 14   */      "Control14",
 
50
        /* 15   */      "Nonregparam",
 
51
        /* 16   */      "Regparam",
 
52
        /* 17   */      "Reserved 17",
 
53
        /* 18   */      "Reserved 18",
 
54
        /* 19   */      "Reserved 19",
 
55
        /* 20   */      "Song Position",
 
56
        /* 21   */      "Song Select",
 
57
        /* 22   */      "Qframe",
 
58
        /* 23   */      "SMF Time Signature",
 
59
        /* 24   */      "SMF Key Signature",
 
60
        /* 25   */      "Reserved 25",
 
61
        /* 26   */      "Reserved 26",
 
62
        /* 27   */      "Reserved 27",
 
63
        /* 28   */      "Reserved 28",
 
64
        /* 29   */      "Reserved 29",
 
65
        /* 30   */      "Start",
 
66
        /* 31   */      "Continue",
 
67
        /* 32   */      "Stop",
 
68
        /* 33   */      "Set Position Tick",
 
69
        /* 34   */      "Set Position Time",
 
70
        /* 35   */      "Tempo",
 
71
        /* 36   */      "Clock",
 
72
        /* 37   */      "Tick",
 
73
        /* 38   */      "Reserved 38",
 
74
        /* 39   */      "Reserved 39",
 
75
        /* 40   */      "Tune Request",
 
76
        /* 41   */      "Reset",
 
77
        /* 42   */      "Active Sensing",
 
78
        /* 43   */      "Reserved 43",
 
79
        /* 44   */      "Reserved 44",
 
80
        /* 45   */      "Reserved 45",
 
81
        /* 46   */      "Reserved 46",
 
82
        /* 47   */      "Reserved 47",
 
83
        /* 48   */      "Reserved 48",
 
84
        /* 49   */      "Reserved 49",
 
85
        /* 50   */      "Echo",
 
86
        /* 51   */      "OSS",
 
87
        /* 52   */      "Reserved 52",
 
88
        /* 53   */      "Reserved 53",
 
89
        /* 54   */      "Reserved 54",
 
90
        /* 55   */      "Reserved 55",
 
91
        /* 56   */      "Reserved 56",
 
92
        /* 57   */      "Reserved 57",
 
93
        /* 58   */      "Reserved 58",
 
94
        /* 59   */      "Reserved 59",
 
95
        /* 60   */      "Client Start",
 
96
        /* 61   */      "Client Exit",
 
97
        /* 62   */      "Client Change",
 
98
        /* 63   */      "Port Start",
 
99
        /* 64   */      "Port Exit",
 
100
        /* 65   */      "Port Change",
 
101
        /* 66   */      "Port Subscribed",
 
102
        /* 67   */      "Port Used",
 
103
        /* 68   */      "Port Unsubscribed",
 
104
        /* 69   */      "Port Unused",
 
105
        /* 70   */      "Sample",
 
106
        /* 71   */      "Sample Cluster",
 
107
        /* 72   */      "Sample Start",
 
108
        /* 73   */      "Sample Stop",
 
109
        /* 74   */      "Sample Freq",
 
110
        /* 75   */      "Sample Volume",
 
111
        /* 76   */      "Sample Loop",
 
112
        /* 77   */      "Sample Position",
 
113
        /* 78   */      "Sample Private1",
 
114
        /* 79   */      "Reserved 79",
 
115
        /* 80   */      "Reserved 80",
 
116
        /* 81   */      "Reserved 81",
 
117
        /* 82   */      "Reserved 82",
 
118
        /* 83   */      "Reserved 83",
 
119
        /* 84   */      "Reserved 84",
 
120
        /* 85   */      "Reserved 85",
 
121
        /* 86   */      "Reserved 86",
 
122
        /* 87   */      "Reserved 87",
 
123
        /* 88   */      "Reserved 88",
 
124
        /* 89   */      "Reserved 89",
 
125
        /* 90   */      "User 0",
 
126
        /* 91   */      "User 1",
 
127
        /* 92   */      "User 2",
 
128
        /* 93   */      "User 3",
 
129
        /* 94   */      "User 4",
 
130
        /* 95   */      "User 5",
 
131
        /* 96   */      "User 6",
 
132
        /* 97   */      "User 7",
 
133
        /* 98   */      "User 8",
 
134
        /* 99   */      "User 9",
 
135
        /* 100  */      "Instr Begin",
 
136
        /* 101  */      "Instr End",
 
137
        /* 102  */      "Instr Info",
 
138
        /* 103  */      "Instr Info Result",
 
139
        /* 104  */      "Instr Finfo",
 
140
        /* 105  */      "Instr Finfo Result",
 
141
        /* 106  */      "Instr Reset",
 
142
        /* 107  */      "Instr Status",
 
143
        /* 108  */      "Instr Status Result",
 
144
        /* 109  */      "Instr Put",
 
145
        /* 110  */      "Instr Get",
 
146
        /* 111  */      "Instr Get Result",
 
147
        /* 112  */      "Instr Free",
 
148
        /* 113  */      "Instr List",
 
149
        /* 114  */      "Instr List Result",
 
150
        /* 115  */      "Instr Cluster",
 
151
        /* 116  */      "Instr Cluster Get",
 
152
        /* 117  */      "Instr Cluster Result",
 
153
        /* 118  */      "Instr Change",
 
154
        /* 119  */      "Reserved 119",
 
155
        /* 120  */      "Reserved 120",
 
156
        /* 121  */      "Reserved 121",
 
157
        /* 122  */      "Reserved 122",
 
158
        /* 123  */      "Reserved 123",
 
159
        /* 124  */      "Reserved 124",
 
160
        /* 125  */      "Reserved 125",
 
161
        /* 126  */      "Reserved 126",
 
162
        /* 127  */      "Reserved 127",
 
163
        /* 128  */      "Reserved 128",
 
164
        /* 129  */      "Reserved 129",
 
165
        /* 130  */      "Sysex",
 
166
        /* 131  */      "Bounce",
 
167
        /* 132  */      "Reserved 132",
 
168
        /* 133  */      "Reserved 133",
 
169
        /* 134  */      "Reserved 134",
 
170
        /* 135  */      "User Var0",
 
171
        /* 136  */      "User Var1",
 
172
        /* 137  */      "User Var2",
 
173
        /* 138  */      "User Var3",
 
174
        /* 139  */      "User Var4",
 
175
        /* 140  */      "IPC Shm",
 
176
        /* 141  */      "Reserved 141",
 
177
        /* 142  */      "Reserved 142",
 
178
        /* 143  */      "Reserved 143",
 
179
        /* 144  */      "Reserved 144",
 
180
        /* 145  */      "User IPC0",
 
181
        /* 146  */      "User IPC1",
 
182
        /* 147  */      "User IPC2",
 
183
        /* 148  */      "User IPC3",
 
184
        /* 149  */      "User IPC4",
 
185
        /* 150  */      "Reserved 150",
 
186
        /* 151  */      "Reserved 151",
 
187
        /* 152  */      "Reserved 152",
 
188
        /* 153  */      "Reserved 153",
 
189
        /* 154  */      "Reserved 154",
 
190
        /* 155  */      "Reserved 155",
 
191
        /* 156  */      "Reserved 156",
 
192
        /* 157  */      "Reserved 157",
 
193
        /* 158  */      "Reserved 158",
 
194
        /* 159  */      "Reserved 159",
 
195
        /* 160  */      "Reserved 160",
 
196
        /* 161  */      "Reserved 161",
 
197
        /* 162  */      "Reserved 162",
 
198
        /* 163  */      "Reserved 163",
 
199
        /* 164  */      "Reserved 164",
 
200
        /* 165  */      "Reserved 165",
 
201
        /* 166  */      "Reserved 166",
 
202
        /* 167  */      "Reserved 167",
 
203
        /* 168  */      "Reserved 168",
 
204
        /* 169  */      "Reserved 169",
 
205
        /* 170  */      "Reserved 170",
 
206
        /* 171  */      "Reserved 171",
 
207
        /* 172  */      "Reserved 172",
 
208
        /* 173  */      "Reserved 173",
 
209
        /* 174  */      "Reserved 174",
 
210
        /* 175  */      "Reserved 175",
 
211
        /* 176  */      "Reserved 176",
 
212
        /* 177  */      "Reserved 177",
 
213
        /* 178  */      "Reserved 178",
 
214
        /* 179  */      "Reserved 179",
 
215
        /* 180  */      "Reserved 180",
 
216
        /* 181  */      "Reserved 181",
 
217
        /* 182  */      "Reserved 182",
 
218
        /* 183  */      "Reserved 183",
 
219
        /* 184  */      "Reserved 184",
 
220
        /* 185  */      "Reserved 185",
 
221
        /* 186  */      "Reserved 186",
 
222
        /* 187  */      "Reserved 187",
 
223
        /* 188  */      "Reserved 188",
 
224
        /* 189  */      "Reserved 189",
 
225
        /* 190  */      "Reserved 190",
 
226
        /* 191  */      "Reserved 191",
 
227
        /* 192  */      "Reserved 192",
 
228
        /* 193  */      "Reserved 193",
 
229
        /* 194  */      "Reserved 194",
 
230
        /* 195  */      "Reserved 195",
 
231
        /* 196  */      "Reserved 196",
 
232
        /* 197  */      "Reserved 197",
 
233
        /* 198  */      "Reserved 198",
 
234
        /* 199  */      "Reserved 199",
 
235
        /* 200  */      "Reserved 200",
 
236
        /* 201  */      "Reserved 201",
 
237
        /* 202  */      "Reserved 202",
 
238
        /* 203  */      "Reserved 203",
 
239
        /* 204  */      "Reserved 204",
 
240
        /* 205  */      "Reserved 205",
 
241
        /* 206  */      "Reserved 206",
 
242
        /* 207  */      "Reserved 207",
 
243
        /* 208  */      "Reserved 208",
 
244
        /* 209  */      "Reserved 209",
 
245
        /* 210  */      "Reserved 210",
 
246
        /* 211  */      "Reserved 211",
 
247
        /* 212  */      "Reserved 212",
 
248
        /* 213  */      "Reserved 213",
 
249
        /* 214  */      "Reserved 214",
 
250
        /* 215  */      "Reserved 215",
 
251
        /* 216  */      "Reserved 216",
 
252
        /* 217  */      "Reserved 217",
 
253
        /* 218  */      "Reserved 218",
 
254
        /* 219  */      "Reserved 219",
 
255
        /* 220  */      "Reserved 220",
 
256
        /* 221  */      "Reserved 221",
 
257
        /* 222  */      "Reserved 222",
 
258
        /* 223  */      "Reserved 223",
 
259
        /* 224  */      "Reserved 224",
 
260
        /* 225  */      "Reserved 225",
 
261
        /* 226  */      "Reserved 226",
 
262
        /* 227  */      "Reserved 227",
 
263
        /* 228  */      "Reserved 228",
 
264
        /* 229  */      "Reserved 229",
 
265
        /* 230  */      "Reserved 230",
 
266
        /* 231  */      "Reserved 231",
 
267
        /* 232  */      "Reserved 232",
 
268
        /* 233  */      "Reserved 233",
 
269
        /* 234  */      "Reserved 234",
 
270
        /* 235  */      "Reserved 235",
 
271
        /* 236  */      "Reserved 236",
 
272
        /* 237  */      "Reserved 237",
 
273
        /* 238  */      "Reserved 238",
 
274
        /* 239  */      "Reserved 239",
 
275
        /* 240  */      "Reserved 240",
 
276
        /* 241  */      "Reserved 241",
 
277
        /* 242  */      "Reserved 242",
 
278
        /* 243  */      "Reserved 243",
 
279
        /* 244  */      "Reserved 244",
 
280
        /* 245  */      "Reserved 245",
 
281
        /* 246  */      "Reserved 246",
 
282
        /* 247  */      "Reserved 247",
 
283
        /* 248  */      "Reserved 248",
 
284
        /* 249  */      "Reserved 249",
 
285
        /* 250  */      "Reserved 250",
 
286
        /* 251  */      "Reserved 251",
 
287
        /* 252  */      "Reserved 252",
 
288
        /* 253  */      "Reserved 253",
 
289
        /* 254  */      "Reserved 254",
 
290
        /* 255  */      "None"
 
291
};
 
292
 
 
293
/* Local functions prototypes */
 
294
 
 
295
/************************************************************************/
 
296
 
 
297
/***********************************************
 
298
 * Print MIDI event.
 
299
 * Adapted from alsa-lib-0.5.5/test/seq-decode.c.
 
300
 *
 
301
 * Level of details is determined by debug_level (see midi-settings.h).
 
302
 */
 
303
 
 
304
void midi_print_event(snd_seq_event_t *ev)
 
305
{
 
306
    if (ev->type == SND_SEQ_EVENT_SENSING) {
 
307
        return;
 
308
    }
 
309
 
 
310
    g_print("EVENT>>>");
 
311
 
 
312
    if (midi_settings.misc.debug_level > MIDI_DEBUG_BASIC) {
 
313
 
 
314
      g_print(" Type = %d, flags = 0x%x", ev->type, ev->flags);
 
315
 
 
316
      switch (ev->flags & SND_SEQ_TIME_STAMP_MASK) {
 
317
      case SND_SEQ_TIME_STAMP_TICK:
 
318
        g_print(", time = %d ticks", ev->time.tick);
 
319
        break;
 
320
 
 
321
      case SND_SEQ_TIME_STAMP_REAL:
 
322
        g_print(", time = %d.%09d",
 
323
                (int)ev->time.time.tv_sec,
 
324
                (int)ev->time.time.tv_nsec);
 
325
        break;
 
326
      }
 
327
 
 
328
      g_print("\nSource = %d.%d, dest = %d.%d, queue = %d\n",
 
329
              ev->source.client,
 
330
              ev->source.port,
 
331
              ev->dest.client,
 
332
              ev->dest.port,
 
333
              ev->queue);
 
334
    }
 
335
 
 
336
    g_print(" \"%s\"", event_names[ev->type]);
 
337
 
 
338
    /* decode actual event data... */
 
339
 
 
340
    switch (ev->type) {
 
341
    case SND_SEQ_EVENT_NOTE:
 
342
        g_print("; ch=%d, note=%d, velocity=%d, off_velocity=%d, duration=%d\n",
 
343
               ev->data.note.channel,
 
344
               ev->data.note.note,
 
345
               ev->data.note.velocity,
 
346
               ev->data.note.off_velocity,
 
347
               ev->data.note.duration);
 
348
        break;
 
349
 
 
350
    case SND_SEQ_EVENT_NOTEON:
 
351
        g_print("; ch=%d, note ON=%d, velocity=%d\n",
 
352
               ev->data.note.channel,
 
353
               ev->data.note.note,
 
354
               ev->data.note.velocity);
 
355
        break;
 
356
                
 
357
    case SND_SEQ_EVENT_NOTEOFF:
 
358
        g_print("; ch=%d, note OFF=%d, velocity=%d\n",
 
359
               ev->data.note.channel,
 
360
               ev->data.note.note,
 
361
               ev->data.note.velocity);
 
362
        break;
 
363
                
 
364
    case SND_SEQ_EVENT_KEYPRESS:
 
365
        g_print("; ch=%d, keypress=%d, velocity=%d\n",
 
366
               ev->data.note.channel,
 
367
               ev->data.note.note,
 
368
               ev->data.note.velocity);
 
369
        break;
 
370
                
 
371
    case SND_SEQ_EVENT_CONTROLLER:
 
372
        g_print("; ch=%d, param=%i, value=%i\n",
 
373
               ev->data.control.channel,
 
374
               ev->data.control.param,
 
375
               ev->data.control.value);
 
376
        break;
 
377
 
 
378
    case SND_SEQ_EVENT_PGMCHANGE:
 
379
        g_print("; ch=%d, program=%i\n",
 
380
               ev->data.control.channel,
 
381
               ev->data.control.value);
 
382
        break;
 
383
                        
 
384
    case SND_SEQ_EVENT_CHANPRESS:
 
385
    case SND_SEQ_EVENT_PITCHBEND:
 
386
        g_print("; ch=%d, value=%i\n",
 
387
               ev->data.control.channel,
 
388
               ev->data.control.value);
 
389
        break;
 
390
                        
 
391
    case SND_SEQ_EVENT_SYSEX:
 
392
    {
 
393
        unsigned char *sysex = (unsigned char *) ev + sizeof(snd_seq_event_t);
 
394
        int c;
 
395
 
 
396
        g_print("; len=%d [", ev->data.ext.len);
 
397
 
 
398
        for (c = 0; c < ev->data.ext.len; c++) {
 
399
            g_print("%02x%s", sysex[c], c < ev->data.ext.len - 1 ? ":" : "");
 
400
        }
 
401
        g_print("]\n");
 
402
    }
 
403
    break;
 
404
                        
 
405
    case SND_SEQ_EVENT_QFRAME:
 
406
        g_print("; frame = %i\n", ev->data.control.value);
 
407
        break;
 
408
                        
 
409
    case SND_SEQ_EVENT_CLOCK:
 
410
    case SND_SEQ_EVENT_START:
 
411
    case SND_SEQ_EVENT_CONTINUE:
 
412
    case SND_SEQ_EVENT_STOP:
 
413
        g_print("; queue = %i\n", ev->data.queue.queue);
 
414
        break;
 
415
 
 
416
    case SND_SEQ_EVENT_SENSING:
 
417
        g_print("\n");
 
418
        break;
 
419
 
 
420
    case SND_SEQ_EVENT_ECHO:
 
421
    {
 
422
        int i;
 
423
                                
 
424
        g_print("; ");
 
425
        for (i = 0; i < 8; i++) {
 
426
            g_print("%02i%s", ev->data.raw8.d[i], i < 7 ? ":" : "\n");
 
427
        }
 
428
    }
 
429
    break;
 
430
                        
 
431
    case SND_SEQ_EVENT_CLIENT_START:
 
432
    case SND_SEQ_EVENT_CLIENT_EXIT:
 
433
    case SND_SEQ_EVENT_CLIENT_CHANGE:
 
434
        g_print("; client = %i\n", ev->data.addr.client);
 
435
        break;
 
436
 
 
437
    case SND_SEQ_EVENT_PORT_START:
 
438
    case SND_SEQ_EVENT_PORT_EXIT:
 
439
    case SND_SEQ_EVENT_PORT_CHANGE:
 
440
    case SND_SEQ_EVENT_PORT_SUBSCRIBED:
 
441
    case SND_SEQ_EVENT_PORT_USED:
 
442
    case SND_SEQ_EVENT_PORT_UNSUBSCRIBED:
 
443
    case SND_SEQ_EVENT_PORT_UNUSED:
 
444
        g_print("; client = %i, port = %i\n",
 
445
                ev->data.addr.client, ev->data.addr.port);
 
446
        break;
 
447
 
 
448
    default:
 
449
        g_print("; not implemented\n");
 
450
    }
 
451
 
 
452
 
 
453
    switch (ev->flags & SND_SEQ_EVENT_LENGTH_MASK) {
 
454
    case SND_SEQ_EVENT_LENGTH_FIXED:
 
455
        return; /* sizeof(snd_seq_event_t);*/
 
456
 
 
457
    case SND_SEQ_EVENT_LENGTH_VARIABLE:
 
458
        return; /* sizeof(snd_seq_event_t) + ev->data.ext.len; */
 
459
    }
 
460
 
 
461
    return;
 
462
 
 
463
} /* midi_print_event() */
 
464
 
 
465
#endif /* defined(DRIVER_ALSA_050) */