int midi_sysex(int card, int device, char *filename)
{
int err, fd, count, size;
snd_rawmidi_t *handle;
char *buffer;
buffer = (char *)malloc(64 * 1024);
if (buffer == NULL)
return -ENOMEM;
if ((err = snd_rawmidi_open(&handle, card, device, SND_RAWMIDI_OPEN_OUTPUT)) < 0) {
fprintf(stderr, "open failed: %s\n", snd_strerror(err));
return err;
}
if ((err = snd_rawmidi_block_mode(handle, 1)) < 0) {
fprintf(stderr, "block failed: %s\n", snd_strerror(err));
snd_rawmidi_close(handle);
return err;
}
fd = open(filename, O_RDONLY);
if (fd < 0) {
perror("open file");
snd_rawmidi_close(handle);
return;
}
count = read(fd, buffer, 64 * 1024);
if (count <= 0) {
perror("read from file");
close(fd);
snd_rawmidi_close(handle);
return;
}
close(fd);
size = snd_rawmidi_write(handle, buffer, count);
printf("Bytes written %i from %i...\n", size, count);
snd_rawmidi_close(handle);
free(buffer);
return size;
}