12.2
Dumps
12
SYSEX IMPLEMENTATION
12.2.3 Data Packing
Sysex payload data is packed because of the 7-bit restriction of the MIDI format.
Byte Description
0:
byte 0, lowest 7 bits
1:
byte 1, lowest 7 bits
2:
byte 2, lowest 7 bits
3:
byte 3, lowest 7 bits
4:
tops, top 7th bits of the 4 preceeding bytes
5:
byte 4, lowest 7 bits
6:
byte 5, lowest 7 bits
7:
byte 6, lowest 7 bits
8:
byte 7, lowest 7 bits
9:
tops, top 7th bits of the 4 preceeding bytes
...
Packing algorithm:
int length = 3;
int size = sizeof(content);
for (int i = 0; i < size / 4; i++) {
int tops = 0;
sysex[+] = *data & 0x7F;
tops |= (*data++ & 0x80) >> 7;
sysex[+] = *data & 0x7F;
tops |= (*data++ & 0x80) >> 6;
sysex[+] = *data & 0x7F;
tops |= (*data++ & 0x80) >> 5;
sysex[+] = *data & 0x7F;
tops |= (*data++ & 0x80) >> 4;
sysex[+] = tops;
}
Unpacking algorithm:
int cursor = 3;
int blocks = (length - 4) / 5;
for (int i = 0; i < blocks; i++) {
int tops = sysex[ 4] ;
*data++ = sysex[+] | ((tops << 7) & 0x80);
*data++ = sysex[+] | ((tops << 6) & 0x80);
*data++ = sysex[+] | ((tops << 5) & 0x80);
*data++ = sysex[+] | ((tops << 4) & 0x80);
+;
}
54
Summary of Contents for TOORO
Page 56: ...13 SCHEMATICS 56...
Page 57: ...13 SCHEMATICS 57...
Page 58: ...13 SCHEMATICS 58...
Page 59: ...13 SCHEMATICS 59...
Page 60: ...13 SCHEMATICS 60...
Page 61: ...13 SCHEMATICS 61...
Page 62: ...13 SCHEMATICS 62...
Page 63: ...13 SCHEMATICS 63...
Page 64: ...13 SCHEMATICS 64...