1
#define DEB(stmt) /* stmt */ /* For debug printing */
2
#define DEB2(stmt) /* stmt */ /* For debug printing */
3
#define DEB3(stmt) stmt /* For debug printing */
4
#define DEB_ALWAYS(stmt) stmt /* Interesting things */
6
#define _INCLUDE_POSIX_SOURCE 1
13
#include <sys/errno.h>
14
#include "../../../include/soundcard.h"
23
mlib_track *tracks[1024];
33
int ptrs[1024] = { 0 };
39
for (track = 0; track < ntrks; track++)
40
for (i = 0; i < 128; i++)
42
if (tracks[track]->pgm_map[i] != -1)
45
SEQ_LOAD_GMINSTR (dev, i);
47
tracks[track]->pgm_map[i] = i;
49
if (n == 0) /* No program changes. Assume pgm# 0 */
50
SEQ_LOAD_GMINSTR (dev, 0);
52
if (tracks[track]->drum_map[i] != -1)
53
SEQ_LOAD_GMDRUM (dev, i);
54
tracks[track]->drum_map[i] = i;
57
if (n == 0) /* No program changes detected */
58
SEQ_LOAD_GMINSTR (dev, 0); /* Acoustic piano */
65
int best = -1, best_time = 0x7fffffff;
67
for (i = 0; i < ntrks; i++)
68
if (ptrs[i] < tracks[i]->len)
70
ptr = &(tracks[i]->events[ptrs[i] * 12]);
84
ptr = &(tracks[best]->events[ptrs[best] * 12]);
102
if (event[0] == EV_SYSEX)
107
if ((event[0] & 0xf0) == 0x90)
111
if (event[0] == EV_CHN_COMMON && event[2] == MIDI_PGM_CHANGE)
113
event[4] = tracks[best]->pgm_map[event[4]];
118
memcpy (&_seqbuf[_seqbufptr], event, 8);
126
main (int argc, char *argv[])
131
oss_longname_t song_name;
132
char *p, *s, *devname="/dev/midi00";;
133
extern void OSS_set_timebase(int tb);
137
fprintf (stderr, "Usage: %s midifile\n", argv[0]);
148
if ((seqfd = open (devname, O_WRONLY, 0)) == -1)
156
OSS_init (seqfd, 1024);
159
if ((mdesc = mlib_open (argv[argp])) == NULL)
161
fprintf (stderr, "Can't open MIDI file %s: %s\n",
162
argv[argp], mlib_errmsg ());
165
ioctl(seqfd, SNDCTL_SETSONG, argv[argp]);
168
* Extract the file name part of the argument
179
memset(song_name, 0, sizeof(song_name));
180
strcpy(song_name, p);
184
if (ioctl(seqfd, SNDCTL_MIDI_SETMODE, &tmp)==-1)
186
perror("SNDCTL_MIDI_SETMODE");
191
tmp = mdesc->hdr.division;
192
printf("Timebase %d\n", tmp);
193
OSS_set_timebase(tmp);
194
if (ioctl(seqfd, SNDCTL_MIDI_TIMEBASE, &tmp)==-1)
196
perror("SNDCTL_MIDI_TIMEBASE");
202
while ((tracks[ntrks] = mlib_loadtrack (mdesc, &was_last)) != NULL)
206
DEB2 (printf ("Loaded track %03d: len = %d events, flags = %08x\n",
207
mdesc->curr_trk, tracks[ntrks]->len,
208
tracks[ntrks]->flags));
214
fprintf (stderr, "%s: %s\n", argv[argp], mlib_errmsg ());
218
tmp = (int) mdesc->timesig;
219
printf("Timesig %08x\n", tmp);
222
* Set the current song name (OSS 4.0 feature).
224
ioctl(seqfd, SNDCTL_SETSONG, song_name);
226
SEQ_DELTA_TIME (mdesc->hdr.division * 8);
227
SEQ_PGM_CHANGE(0, 0, 0);