/* * Programmer: Dominik Schmidt-Philipp * Filename: main.c * * Dedicated to seleomlivet * */ #include // function declarations: void alsa_error(const char *format, ...); int main(int argc, char *argv[]) { int status; int mode = SND_RAWMIDI_SYNC; snd_rawmidi_t* midiin = NULL; const char* portname = "virtual"; if ((status = snd_rawmidi_open(&midiin, NULL, portname, mode)) < 0) { alsa_error("Problem opening MIDI input: %s", snd_strerror(status)); exit(1); } int i = 0; char buffer[3]; unsigned char message[3]; while (1) { if ((status = snd_rawmidi_read(midiin, buffer, 3)) < 0) { alsa_error("Problem reading MIDI input: %s", snd_strerror(status)); } // in case of MIDI running status, value bytes need to not override status byte for (i=1; i<=status;i++) { message[3-i] = (unsigned char) buffer[status-i]; } printf("%d: %x %x %x\n", status, message[0], message[1], message[2]); fflush(stdout); } snd_rawmidi_close(midiin); midiin=NULL; return 0; } ////////////////////////////// // // error -- print error message // void alsa_error(const char *format, ...) { va_list ap; va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); putc('\n', stderr); }