#include #include #include #include #include #include #include #include #include #include #include #define NUM_PORT 24 static snd_seq_t *seq; void recup_num(){ FILE* fd; int num_port; fd=fopen("num_count2.txt","r"); fscanf(fd, "%d", &num_port); printf("num = %d \n", num_port); fclose(fd); } 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"); } void action(snd_seq_event_t *event){ if (event->type == SND_SEQ_EVENT_NOTEON) { printf("note : %d , velocite : %d\n",event->data.note.note, event->data.note.velocity); } if (event->type == SND_SEQ_EVENT_NOTEOFF) { printf("noteOFF : %2d , %d velocite : %d\n", event->data.note.channel, event->data.note.note, event->data.note.velocity); } if (event->type == SND_SEQ_EVENT_CONTROLLER) { printf("programme : %2d, %d %d\n", event->data.control.channel, event->data.control.param, event->data.control.value); } } 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) { action(event); } } while (err > 0); fflush(stdout); } snd_seq_close(seq); recup_num(); return 0; }