19 #ifndef __jack_midi_unpack_h__    20 #define __jack_midi_unpack_h__    23     MIDI_UNPACK_MAX_MSG = 1024
    29     unsigned char data[MIDI_UNPACK_MAX_MSG];
    37     u->size = 
sizeof(u->data);
    48 static const unsigned char midi_voice_len[] =
    60 static const unsigned char midi_system_len[] =
    73 int midi_unpack_buf(
midi_unpack_t *buf, 
const unsigned char *data, 
int len, 
void *jack_port_buf, jack_nframes_t time)
    76     for (i = 0; i < len; ++i) {
    77         const unsigned char byte = data[i];
    83         } 
else if (
byte < 0x80) 
    85             assert (buf->pos < buf->size);
    86             buf->data[buf->pos++] = byte;
    87         } 
else if (
byte < 0xF0) 
    89             assert (
byte >= 0x80 && 
byte < 0xF0);
    91             buf->need = midi_voice_len[(
byte-0x80)>>4];
    94         } 
else if (
byte == 0xF7) 
    96             assert (buf->pos < buf->size);
    97             buf->data[buf->pos++] = byte;
   100             assert (
byte >= 0xF0 && 
byte < 0xF8);
   103             buf->need = midi_system_len[
byte - 0xF0];
   105                 buf->need = buf->size;
   107         if (buf->pos == buf->need) {
   109             if (buf->data[0] >= 0x80 || (buf->data[0] == 0xF0 && buf->data[buf->pos-1] == 0xF7)) {
   111                 if ((buf->data[0] & 0xF0) == 0x90 && buf->data[2] == 0) {
   113                     jack_midi_data_t temp[3] = { 0x80, 0, 0x40 };
   114                     temp[0] |= buf->data[0] & 0x0F;
   115                     temp[1] = buf->data[1];
   123             if (buf->data[0] >= 0x80 && buf->data[0] < 0xF0)
   127                 buf->need = buf->size;
 
LIB_EXPORT int jack_midi_event_write(void *port_buffer, jack_nframes_t time, const jack_midi_data_t *data, size_t data_size)