#include #include #include #include #include #include #include #include #define NUM_PORT 24 static snd_seq_t *seq; static void init_seq(void) { int err; /* open sequencer */ err = snd_seq_open(&seq, "default", SND_SEQ_OPEN_DUPLEX, 0); if (err<0) printf("open sequencer"); /* set our client's name */ err = snd_seq_set_client_name(seq, "analyseurmidi"); if (err<0) printf("set client name"); } static void create_port(void) { int err; err = snd_seq_create_simple_port(seq, "analyseurmidi", SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE, SND_SEQ_PORT_TYPE_MIDI_GENERIC | SND_SEQ_PORT_TYPE_APPLICATION); if (err<0) printf("Port non créé \n"); } static void connect_port(void) { int err; err = snd_seq_connect_from(seq, 0, NUM_PORT, 0); if (err < 0) printf("Impossible de se connecter au port \n"); } int main(){ init_seq(); struct pollfd *pfds; int npfds, err; create_port(); connect_port(); npfds = snd_seq_poll_descriptors_count(seq, POLLIN); pfds = alloca(sizeof(*pfds) * npfds); for (;;) { snd_seq_poll_descriptors(seq, pfds, npfds, POLLIN); if (poll(pfds, npfds, -1) < 0) break; do { snd_seq_event_t *event; err = snd_seq_event_input(seq, &event); if (err < 0) break; if (event) { if (event->type == SND_SEQ_EVENT_NOTEON) printf("coucou %d\n",event->data.note.note); } } while (err > 0); fflush(stdout); } snd_seq_close(seq); return 0; }