+static void *
+listen_to_alsa_midi (void *data)
+{
+ scherzo_midi_closure_t *closure = data;
+ int out_fd = closure->fd;
+ snd_rawmidi_t *midi_in;
+ unsigned char buf[MIDI_BUF_SIZE];
+ ssize_t bytes;
+ int err;
+
+ err = snd_rawmidi_open (&midi_in, NULL, "virtual", 0);
+ if (err) {
+ fprintf (stderr, "Failed to open virtual MIDI handle.");
+ return NULL;
+ }
+
+ while (1) {
+ bytes = snd_rawmidi_read (midi_in, buf, MIDI_BUF_SIZE);
+ write (out_fd, buf, bytes);
+ }
+
+ return NULL;
+}
+