| 
							- #include <stdio.h>
 - #include <unistd.h>
 - #include <assert.h>
 - #include <jack/jack.h>
 - #include <jack/midiport.h>
 - 
 - static jack_port_t* port;
 - 
 - static void
 - describe (jack_midi_event_t* event, char* buffer, size_t buflen)
 - {
 - 	assert (buflen > 0);
 - 
 - 	buffer[0] = '\0';
 - 
 - 	if (event->size == 0) {
 - 		return;
 - 	}
 - 
 - 	int type = event->buffer[0] & 0xf0;
 - 	int channel = event->buffer[0] & 0xf;
 - 
 - 	switch (type) {
 - 	case 0x90:
 - 		assert (event->size == 3);
 - 		snprintf (buffer, buflen, "note on (channel %d): pitch %d, velocity %d", channel, event->buffer[1], event->buffer[2]);
 -                 break;
 - 	case 0x80:
 - 		assert (event->size == 3);
 - 		snprintf (buffer, buflen, "note off (channel %d): pitch %d, velocity %d", channel, event->buffer[1], event->buffer[2]);
 -                 break;
 - 	case 0xb0:
 - 		assert (event->size == 3);
 - 		snprintf (buffer, buflen, "control change (channel %d): controller %d, value %d", channel, event->buffer[1], event->buffer[2]);
 - 		break;
 -         default:
 -                 break;
 - 	}
 - }
 - 
 - int
 - process (jack_nframes_t frames, void* arg)
 - {
 - 	void* buffer;
 - 	jack_nframes_t N;
 - 	jack_nframes_t i;
 - 	char description[256];
 - 
 - 	buffer = jack_port_get_buffer (port, frames);
 - 	assert (buffer);
 - 
 - 	N = jack_midi_get_event_count (buffer);
 - 	for (i = 0; i < N; ++i) {
 - 		jack_midi_event_t event;
 - 		int r;
 - 
 - 		r = jack_midi_event_get (&event, buffer, i);
 - 		if (r == 0) {
 - 			size_t j;
 - 
 - 			printf ("%d:", event.time);
 - 			for (j = 0; j < event.size; ++j) {
 - 				printf (" %x", event.buffer[j]);
 - 			}
 - 
 - 			describe (&event, description, sizeof (description));
 - 			printf (" %s", description);
 - 
 - 			printf ("\n");
 - 		}
 - 	}
 - 
 - 	return 0;
 - }
 - 
 - 
 - int
 - main (int argc, char* argv[])
 - {
 - 	jack_client_t* client;
 - 	char const default_name[] = "midi-monitor";
 - 	char const * client_name;
 - 	int r;
 - 
 - 	if (argc == 2) {
 - 		client_name = argv[1];
 - 	} else {
 - 		client_name = default_name;
 - 	}
 - 
 - 	client = jack_client_open (client_name, JackNullOption, NULL);
 - 	if (client == NULL) {
 - 		fprintf (stderr, "Could not create JACK client.\n");
 - 		exit (EXIT_FAILURE);
 - 	}
 - 
 - 	jack_set_process_callback (client, process, 0);
 - 
 - 	port = jack_port_register (client, "input", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
 - 	if (port == NULL) {
 - 		fprintf (stderr, "Could not register port.\n");
 - 		exit (EXIT_FAILURE);
 - 	}
 - 
 - 	r = jack_activate (client);
 - 	if (r != 0) {
 - 		fprintf (stderr, "Could not activate client.\n");
 - 		exit (EXIT_FAILURE);
 - 	}
 - 
 - 	/* run until interrupted */
 - 	while (1) {
 - 	#ifdef WIN32
 - 		Sleep(1000);
 - 	#else
 - 		sleep(1);
 - 	#endif
 - 	};
 - 
 - 	return 0;
 - }
 
 
  |