- Topics: 14
- Replies: 638
- Total: 652
I know this is a pain in the a… – crunching 8-bit data into a 7-bit MIDI datastream is not an easy thing to do. There are 3 different methods I know of – from various manufacturers:
1.) the easy one: just use parameters with max 128 values (7-bit = 2 exponent 7 = 128). This is not suitable for every parameter. It will provide a somewhat coarse parameter resolution on e.g. filter cutoff. The big advantage: no conversion needed, just send the values.
2.) 4-bit nibbles: Break each 8-bit Byte into two 4-bit nibbles. This will double the datastream – not very efficient but ok for smaller dumps. It is relatively easy to build such dumps with Lua scripts within Ctrlr.
3.) the 7-bit worm: I’ve seen this method when I looked at the Korg 05R/W sysex dumps. It is highly efficient as there will be no wasted bits like on the 4-bit nibble method but definitely a pain in the a.. to code and decode.
This schematic explains it all:
MIDI DATA ( 1set = 7bit x 8Byte ) b7b7b7b7b7b7b7 b6 ~ b0 b6 ~~ b0 b6 ~ b0 +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-~~-+-+-+ +-+-+-+-+-+-+-+-+ |0| | | | | | | | |0| | | | | | | | |0| | | | | |0| | | | | | | | +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-~~-+-+-+ +-+-+-+-+-+-+-+-+ 7n+6,5,4,3,2,1,0 7n+0 7n+1 ~~ 7n+5 7n+6
To send the first seven 8-bit bytes you do the following: send eight 7-bit bytes. The first byte contanis the high bits of the following seven bytes, then it starts again with the next seven 8-bit bytes until the end. The last set will be a incomplete one with less than 7 bytes.
There are Lua methods done by Mauro De Carolis (who made the actual Korg 05R/W panel) which will code and decode any 7-bit worm into a proper 8-bit dump and vice-versa. Mauro published them under the GNU license, so they are freely distributable but must not be used in commercial projects. Look into the Korg 05R/W panel. Methods are called “midiToData” and “dataToMidi”.