int card_in = -1, device_in = 0;
int card_out = -1, device_out = 0;
snd_rawmidi_t *handle_in = NULL, *handle_out = NULL;
- unsigned char ibuf[512], obuf[512];
+ unsigned char ibuf[512], obuf[512], iname[32], oname[32];
struct timeval start, end;
long long diff;
snd_rawmidi_status_t istat, ostat;
card_in = card_out;
if (card_out == -1)
card_out = card_in;
+
+ sprintf(iname, "hw:%i,%i", card_in, device_in);
+ sprintf(oname, "hw:%i,%i", card_out, device_out);
if (verbose) {
fprintf(stderr, "Using: \n");
fprintf(stderr, "card %d, device %d\n", card_out, device_out);
}
- err = snd_rawmidi_open(&handle_in, card_in, device_in, SND_RAWMIDI_OPEN_INPUT | SND_RAWMIDI_OPEN_NONBLOCK);
+ err = snd_rawmidi_open(&handle_in, iname, SND_RAWMIDI_OPEN_INPUT, SND_RAWMIDI_NONBLOCK);
if (err) {
fprintf(stderr,"snd_rawmidi_open %d %d failed: %d\n",card_in,device_in,err);
exit(EXIT_FAILURE);
}
- err = snd_rawmidi_open(&handle_out, card_out, device_out, SND_RAWMIDI_OPEN_OUTPUT);
+ err = snd_rawmidi_open(&handle_out, oname, SND_RAWMIDI_OPEN_OUTPUT, 0);
if (err) {
fprintf(stderr,"snd_rawmidi_open %d %d failed: %d\n",card_out,device_out,err);
exit(EXIT_FAILURE);
err = snd_rawmidi_status(handle_out, &ostat);
if (err < 0)
fprintf(stderr, "output stream status error: %d\n", err);
- printf("input.status.queue = %li\n", istat.queue);
- printf("input.status.overrun = %li\n", istat.overrun);
- printf("output.status.queue = %li\n", ostat.queue);
- printf("output.status.overrun = %li\n", ostat.overrun);
+ printf("input.status.avail = %li\n", istat.avail);
+ printf("input.status.xruns = %li\n", istat.xruns);
+ printf("output.status.avail = %li\n", ostat.avail);
+ printf("output.status.xruns = %li\n", ostat.xruns);
diff = timediff(end, start);
printf("Time diff: %Liusec (%Li bytes/sec)\n", diff, ((long long)opos * 1000000) / diff);
int verbose = 0;
int card_in = -1,device_in = -1;
int card_out = -1,device_out = -1;
+ char iname[32], oname[32];
char* node_in = 0;
char* node_out = 0;
}
}
}
+
+ sprintf(oname, "hw:%i,%i", card_out, device_out);
if (verbose) {
fprintf(stderr,"Using: \n");
}
if (card_in!=-1) {
- err = snd_rawmidi_open(&handle_in,card_in,device_in,O_RDONLY);
+ sprintf(iname, "hw:%i,%i", card_in, device_in);
+ err = snd_rawmidi_open(&handle_in,iname,SND_RAWMIDI_OPEN_INPUT,0);
if (err) {
fprintf(stderr,"snd_rawmidi_open %d %d failed: %d\n",card_in,device_in,err);
}
}
if (node_in && (!node_out || strcmp(node_out,node_in))) {
- fd_in = open(node_in,O_RDONLY);
+ fd_in = open(node_in,O_RDONLY);
if (fd_in<0) {
fprintf(stderr,"open %s for input failed\n",node_in);
}
signal(SIGINT,sighandler);
if (card_out!=-1) {
- err = snd_rawmidi_open(&handle_out,card_out,device_out,O_WRONLY);
+ sprintf(oname, "hw:%i,%i", card_out, device_out);
+ err = snd_rawmidi_open(&handle_out,oname,SND_RAWMIDI_OPEN_OUTPUT,0);
if (err) {
fprintf(stderr,"snd_rawmidi_open %d %d failed: %d\n",card_out,device_out,err);
}
ch=0x90; snd_rawmidi_write(handle_out,&ch,1);
ch=60; snd_rawmidi_write(handle_out,&ch,1);
ch=100; snd_rawmidi_write(handle_out,&ch,1);
- snd_rawmidi_output_drain(handle_in);
+ snd_rawmidi_output_drain(handle_out);
sleep(1);
ch=0x90; snd_rawmidi_write(handle_out,&ch,1);
ch=60; snd_rawmidi_write(handle_out,&ch,1);
}
if (handle_in) {
- snd_rawmidi_output_drain(handle_in);
+ snd_rawmidi_input_drain(handle_in);
snd_rawmidi_close(handle_in);
}
if (handle_out) {
- snd_rawmidi_output_drain(handle_in);
- snd_rawmidi_close(handle_in);
+ snd_rawmidi_output_drain(handle_out);
+ snd_rawmidi_close(handle_out);
}
if (fd_in!=-1) {
close(fd_in);