Radio Drum MIDI control procotol v.2.00

by Fernando Lopez-Lezcano
nando@ccrma.stanford.edu

created on June 14th, 1994
v1.02a, October 28th, 1994
v2.00, December 6-8, 1996
Added Radio Drum id number to sysex messages and automatic position update.

v2.00 December 20 1996
Changed over to 3 byte sysex id scheme (Marion Systems id number)

v2.00 January 4 1997
display code, tilt mode

Protocol Description

Contents

System Exclusive Messages

All the protocol System Exclusive Messages have the following structure:

[SYSEX START]
[sysex manufacturer code]
contains the manufacturer code (0x00,0x00,0x59; Marion Systems)
[command]
an opcode that specifies the command to be executed (0 .. 127)
[radio drum id]
this id allows more than one Radio Drum to be hooked up to the same MIDI port of a controlling computer. For each drum sharing the interface the user has to set the id code through the front panel and from then on they can be addressed separately. The default id code for a Radio Drum is "0". Sending a code of "0" is equivalent to sending the command to all Radio Drums sharing the same MIDI interface.
[body]
size depends on the specified command
[SYSEX END]
Turn Protocol ON
Turns ON the MIDI protocol program inside the Radio Drum. After receiving it, the Radio Drum sends back a "Turn Protocol ON" system exclusive message, starts to recognize poll and position update requests on the specified MIDI channel and transmits on that same channel baton trigger, release, switch (if it has been enabled to do so) and position information (see position polls and automatic periodic position updates).

Turn Protocol OFF
Turns OFF the MIDI protocol program inside the Radio Drum. After receiving it, the Radio Drum will wait for an appropriate system exclusive message to select its operation mode.

Request surface calibration data dump
Requests a dump of the internal surface calibration data. In response to this message the program will send a dump of its internal surface calibration data.

Surface calibration data dump
Sends a dump of the internal surface calibration data. The message can be sent by the Radio Drum as a response to the Request Surface Calibration Data message or can be sent by the controlling device to set the surface calibration data to any desired value.

Each integer is sent as four MIDI bytes:

Trigger Calibration Dump Request
Requests a Trigger Calibration Dump message.

Trigger Calibration Dump
Dump of current trigger and release calibration constants. It can be sent by the controlling device to the Radio Drum to set the calibration to new values, or can be sent by the Radio Drum as a response to the Trigger Calibration Dump Request.

Each integer is sent as four MIDI bytes:

Request an A/D measurement
Request the last raw measurements of the internal A/D converter
  • 11110000 .. F0 ... SYSEX START
  • 00000000 .. 00
  • 00000000 .. 00
  • 01011001 .. 59 ... Marion Systems id code
  • 00001000 .. 06 ... request A/D measurement command
  • 0bbbbbbb .. bb ... radio drum id number (0 for all)
  • 11110111 .. FE ... SYSEX END
A/D measurement dump
Last set of measurements of the internal A/D converter and multiplexer. This command can only be sent by the Radio Drum and is the response to an Request an A/D measurement message. Each of the 16 measurements is sent as two MIDI bytes. The first one contains the 6 less significant bits of the measurement and the second contains the 6 most significant bits (the Radio Drum uses a 12 bit A/D converter).

Each sample is sent as two MIDI bytes:

Request a current raw baton height measurement
Request the last raw value of the height, as used by the baton trigger and release detection function. This value is potentially needed to perform calibration of the trigger and release heights of both batons.

Current raw baton height measurement
Last measurement of the raw baton height. This command can only be sent by the Radio Drum and is the response to an Request a current raw baton height measurement message.

Each integer is sent as four MIDI bytes:

Channel Messages

Baton and Switch Control
Selectively enables or disables the operation of baton triggers, releases and switch presses.

Request opcode:

iiii=00000 .. 00 ... enable baton 1
iiii=00001 .. 01 ... enable baton 2
iiii=00010 .. 02 ... enable baton 1 with tilt information
iiii=00011 .. 03 ... enable baton 2 with tilt information
iiii=00100 .. 04 ... disable baton 1
iiii=00101 .. 05 ... disable baton 2
iiii=00110 .. 06 ... enable switch 1
iiii=00111 .. 07 ... enable switch 2
iiii=01000 .. 08 ... disable switch 1
iiii=01001 .. 09 ... disable switch 2
Baton Trigger
Sent (if enabled) when the baton reverses direction (from going down to up) and is under the trigger threshold. Movement of the baton can send another trigger while it stays under the release threshold. The message can include x and y tilt information.

duration of message: 7 MIDI bytes; 2.24 msecs.

duration of message: 11 MIDI bytes; 3.52 msecs.

Baton Release
Sent (if enabled) when the baton crosses the release threshold going up.

duration of message: 7 MIDI bytes; 2.24 msecs.

Switch State
These messages are sent when one of the two switches changes state.

sssssss = 00 ... switch off
sssssss = 7f ... switch on
Automatic Position Update Requests
Each of the requests starts an automatic update of position information to be sent by the Radio Drum at periodic intervals. The controller sent is used to differentiate between requests and the controller value is the time in ticks between periodic position updates (one tick equals 4 milliseconds). A time of cero turns off the selected automatic position update. Illegal times are ignored by the program and a reasonable default used (for example: periodic requests where the period is shorter than the time it takes to send the information).

Position Update Request for baton 1
Enables or disables (with period = 0) periodic position updates for baton 1. Cancels a previous request that involves both batons.

  • 1011cccc .. B- ... controller
  • 00011011 .. 1b ... request automatic position update for baton 1
  • 0ttttttt .. tt ... ticks between updates (one tick=4mSecs); 0 to turn off
Position Update Request for baton 2
Enables or disables (with period = 0) periodic position updates for baton 2. Cancels a previous request that involves both batons.

  • 1011cccc .. B- ... controller
  • 00011100 .. 1c ... request automatic position update for baton 2
  • 0ttttttt .. tt ... ticks between updates (one tick=4mSecs); 0 to turn off
Position Update Request for both batons
Enables or disables (with period = 0) periodic position updates for both batons. Cancels any previous individual requests for baton 1 or baton 2.

  • 1011cccc .. B- ... controller
  • 00011101 .. 1d ... request automatic position update for both batons
  • 0ttttttt .. tt ... ticks between updates (one tick=4mSecs); 0 to turn off
Position Update Request for potentiometers
Enables or disables (with period = 0) periodic position updates for the potentiometers.

  • 1011cccc .. B- ... controller
  • 00011110 .. 1e ... request automatic position update for pots
  • 0ttttttt .. tt ... ticks between updates (one tick=4mSecs); 0 to turn off
Position Update Request for both batons and potentiometers
Enables or disables (with period = 0) periodic position updates for both batons and potentiometers. Cancels any previous individual requests for baton 1, baton 2 or potentiometers.

  • 1011cccc .. B- ... controller
  • 00011111 .. 1f ... request automatic position update for both batons and pots
  • 0ttttttt .. tt ... ticks between updates (one tick=4mSecs); 0 to turn off
Position Updates
Periodically sent after receiving a Position Update Request message, until cancelled in response to another Position Update Request message with period equal to cero.

Position Update for baton 1
  • 1011cccc .. B- ... controller
  • 00011011 .. 1b ... position update for baton 1
  • 0xxxxxxx .. xx ... baton 1 x
  • 1101cccc .. D- ... channel pressure
  • 0yyyyyyy .. yy ... baton 1 y
  • 0zzzzzzz .. zz ... baton 1 z
duration of message: 6 MIDI bytes; 1.92 msecs.

Position Update for baton 2
  • 1011cccc .. B- ... controller
  • 00011100 .. 1c ... position update for baton 2
  • 0xxxxxxx .. xx ... baton 2 x
  • 1101cccc .. D- ... channel pressure
  • 0yyyyyyy .. yy ... baton 2 y
  • 0zzzzzzz .. zz ... baton 2 z
duration of message: 6 MIDI bytes; 1.92 msecs.

Position Update for both batons
  • 1011cccc .. B- ... controller
  • 00011101 .. 1d ... position update for both batons
  • 0xxxxxxx .. xx ... baton 1 x
  • 1101cccc .. D- ... channel pressure
  • 0yyyyyyy .. yy ... baton 1 y
  • 0zzzzzzz .. zz ... baton 1 z
  • 0xxxxxxx .. xx ... baton 2 x
  • 0yyyyyyy .. yy ... baton 2 y
  • 0zzzzzzz .. zz ... baton 2 z
duration of message: 9 MIDI bytes; 2.88 msecs.

Position Update for potentiometers
  • 1011cccc .. B- ... controller
  • 00011110 .. 1e ... start of position update
  • 0ppppppp .. pp ... pot 1
  • 1101cccc .. D- ... channel pressure
  • 0ppppppp .. pp ... pot 2
  • 0ppppppp .. pp ... pot 3
  • 0ppppppp .. pp ... pot 4
duration of message: 7 MIDI bytes; 2.24 msecs.

Position Update for both batons and potentiometers
  • 1011cccc .. B- ... controller
  • 00011111 .. 1f ... start of position update
  • 0xxxxxxx .. xx ... baton 1 x
  • 1101cccc .. D- ... channel pressure
  • 0yyyyyyy .. yy ... baton 1 y
  • 0zzzzzzz .. zz ... baton 1 z
  • 0xxxxxxx .. xx ... baton 2 x
  • 0yyyyyyy .. yy ... baton 2 y
  • 0zzzzzzz .. zz ... baton 2 z
  • 0ppppppp .. pp ... pot 1
  • 0ppppppp .. pp ... pot 2
  • 0ppppppp .. pp ... pot 3
  • 0ppppppp .. pp ... pot 4
duration of message: 13 MIDI bytes; 4.16 msecs.

Poll Request
  • 1101cccc .. D- ... channel pressure
  • 000iiiii .. ii ... opcode
Request opcode:

iiiii=11011 .. 1b ... first baton position
iiiii=11100 .. 1c ... second baton position
iiiii=11101 .. 1d ... both baton positions
iiiii=11110 .. 1e ... all pots
iiiii=11111 .. 1f ... all (both batons and pots)

Controller Table

------------------------------------------------------------------------------
    2nd Byte Value |              Function                  |  3rd Byte
  Binary  |Hex|Dec |                                        | Value  |  Use
 - - - - -|- -|- - | - - - - - - - - - - - - - - - - - - - -|- - - - | - - - -
 00000000= 00=   0 | Continuous controller #0               | 0-127  |  MSB
 00000001= 01=   1 | Modulation wheel                       | 0-127  |  MSB
 00000010= 02=   2 | Breath control                         | 0-127  |  MSB
 00000011= 03=   3 | Continuous controller #3               | 0-127  |  MSB
 00000100= 04=   4 | Foot controller                        | 0-127  |  MSB
 00000101= 05=   5 | Portamento time                        | 0-127  |  MSB
 00000110= 06=   6 | Data Entry                             | 0-127  |  MSB
 00000111= 07=   7 | Main Volume                            | 0-127  |  MSB
 00001000= 08=   8 | Continuous controller #8               | 0-127  |  MSB
 00001001= 09=   9 | Continuous controller #9               | 0-127  |  MSB
 00001010= 0A=  10 | Continuous controller #10              | 0-127  |  MSB
 00001011= 0B=  11 | Continuous controller #11              | 0-127  |  MSB
 00001100= 0C=  12 | Continuous controller #12              | 0-127  |  MSB
 00001101= 0D=  13 | Continuous controller #13              | 0-127  |  MSB
 00001110= 0E=  14 | Continuous controller #14              | 0-127  |  MSB
 00001111= 0F=  15 | Continuous controller #15              | 0-127  |  MSB
 00010000= 10=  16 | Continuous controller #16              | 0-127  |  MSB
 00010001= 11=  17 | Continuous controller #17              | 0-127  |  MSB
 00010010= 12=  18 | Continuous controller #18              | 0-127  |  MSB
 00010011= 13=  19 | Continuous controller #19              | 0-127  |  MSB
 00010100= 14=  20 | Continuous controller #20              | 0-127  |  MSB
 00010101= 15=  21 | Continuous controller #21              | 0-127  |  MSB
 00010110= 16=  22 | Continuous controller #22              | 0-127  |  MSB
 00010111= 17=  23 | Continuous controller #23              | 0-127  |  MSB
 00011000= 18=  24 | Continuous controller #24              | 0-127  |  MSB
 00011001= 19=  25 | Continuous controller #25              | 0-127  |  MSB
 00011010= 1A=  26 | Continuous controller #26              | 0-127  |  MSB
 00011011= 1B=  27 | Continuous controller #27              | 0-127  |  MSB
 00011100= 1C=  28 | Continuous controller #28              | 0-127  |  MSB
 00011101= 1D=  29 | Continuous controller #29              | 0-127  |  MSB
 00011110= 1E=  30 | Continuous controller #30              | 0-127  |  MSB
 00011111= 1F=  31 | Continuous controller #31              | 0-127  |  MSB
 00100000= 20=  32 | Continuous controller #0               | 0-127  |  LSB
 00100001= 21=  33 | Modulation wheel                       | 0-127  |  LSB
 00100010= 22=  34 | Breath control                         | 0-127  |  LSB
 00100011= 23=  35 | Continuous controller #3               | 0-127  |  LSB
 00100100= 24=  36 | Foot controller                        | 0-127  |  LSB
 00100101= 25=  37 | Portamento time                        | 0-127  |  LSB
 00100110= 26=  38 | Data entry                             | 0-127  |  LSB
 00100111= 27=  39 | Main volume                            | 0-127  |  LSB
 00101000= 28=  40 | Continuous controller #8               | 0-127  |  LSB
 00101001= 29=  41 | Continuous controller #9               | 0-127  |  LSB
 00101010= 2A=  42 | Continuous controller #10              | 0-127  |  LSB
 00101011= 2B=  43 | Continuous controller #11              | 0-127  |  LSB
 00101100= 2C=  44 | Continuous controller #12              | 0-127  |  LSB
 00101101= 2D=  45 | Continuous controller #13              | 0-127  |  LSB
 00101110= 2E=  46 | Continuous controller #14              | 0-127  |  LSB
 00101111= 2F=  47 | Continuous controller #15              | 0-127  |  LSB
 00110000= 30=  48 | Continuous controller #16              | 0-127  |  LSB
 00110001= 31=  49 | Continuous controller #17              | 0-127  |  LSB
 00110010= 32=  50 | Continuous controller #18              | 0-127  |  LSB
 00110011= 33=  51 | Continuous controller #19              | 0-127  |  LSB
 00110100= 34=  52 | Continuous controller #20              | 0-127  |  LSB
 00110101= 35=  53 | Continuous controller #21              | 0-127  |  LSB
 00110110= 36=  54 | Continuous controller #22              | 0-127  |  LSB
 00110111= 37=  55 | Continuous controller #23              | 0-127  |  LSB
 00111000= 38=  56 | Continuous controller #24              | 0-127  |  LSB
 00111001= 39=  57 | Continuous controller #25              | 0-127  |  LSB
 00111010= 3A=  58 | Continuous controller #26              | 0-127  |  LSB
 00111011= 3B=  59 | Continuous controller #27              | 0-127  |  LSB
 00111100= 3C=  60 | Continuous controller #28              | 0-127  |  LSB
 00111101= 3D=  61 | Continuous controller #29              | 0-127  |  LSB
 00111110= 3E=  62 | Continuous controller #30              | 0-127  |  LSB
 00111111= 3F=  63 | Continuous controller #31              | 0-127  |  LSB
 01000000= 40=  64 | Damper pedal on/off (Sustain)          | 0=off  | 127=on
 01000001= 41=  65 | Portamento on/off                      | 0=off  | 127=on
 01000010= 42=  66 | Sustenuto on/off                       | 0=off  | 127=on
 01000011= 43=  67 | Soft pedal on/off                      | 0=off  | 127=on
 01000100= 44=  68 | Undefined on/off                       | 0=off  | 127=on
 01000101= 45=  69 | Undefined on/off                       | 0=off  | 127=on
 01000110= 46=  70 | Undefined on/off                       | 0=off  | 127=on
 01000111= 47=  71 | Undefined on/off                       | 0=off  | 127=on
 01001000= 48=  72 | Undefined on/off                       | 0=off  | 127=on
 01001001= 49=  73 | Undefined on/off                       | 0=off  | 127=on
 01001010= 4A=  74 | Undefined on/off                       | 0=off  | 127=on
 01001011= 4B=  75 | Undefined on/off                       | 0=off  | 127=on
 01001100= 4C=  76 | Undefined on/off                       | 0=off  | 127=on
 01001101= 4D=  77 | Undefined on/off                       | 0=off  | 127=on
 01001110= 4E=  78 | Undefined on/off                       | 0=off  | 127=on
 01001111= 4F=  79 | Undefined on/off                       | 0=off  | 127=on
 01010000= 50=  80 | Undefined on/off                       | 0=off  | 127=on
 01010001= 51=  81 | Undefined on/off                       | 0=off  | 127=on
 01010010= 52=  82 | Undefined on/off                       | 0=off  | 127=on
 01010011= 53=  83 | Undefined on/off                       | 0=off  | 127=on
 01010100= 54=  84 | Undefined on/off                       | 0=off  | 127=on
 01010101= 55=  85 | Undefined on/off                       | 0=off  | 127=on
 01010110= 56=  86 | Undefined on/off                       | 0=off  | 127=on
 01010111= 57=  87 | Undefined on/off                       | 0=off  | 127=on
 01011000= 58=  88 | Undefined on/off                       | 0=off  | 127=on
 01011001= 59=  89 | Undefined on/off                       | 0=off  | 127=on
 01011010= 5A=  90 | Undefined on/off                       | 0=off  | 127=on
 01011011= 5B=  91 | Undefined on/off                       | 0=off  | 127=on
 01011100= 5C=  92 | Undefined on/off                       | 0=off  | 127=on
 01011101= 5D=  93 | Undefined on/off                       | 0=off  | 127=on
 01011110= 5E=  94 | Undefined on/off                       | 0=off  | 127=on
 01011111= 5F=  95 | Undefined on/off                       | 0=off  | 127=on
                                                             -----------------
 01100000= 60=  96 | Data entry +1                          |       127
 01100001= 61=  97 | Data entry -1                          |       127
 01100010= 62=  98 | Undefined                              |        ?
 01100011= 63=  99 | Undefined                              |        ?
 01100100= 64= 100 | Undefined                              |        ?
 01100101= 65= 101 | Undefined                              |        ?
 01100110= 66= 102 | Undefined                              |        ?
 01100111= 67= 103 | Undefined                              |        ?
 01100111= 67= 103 | Undefined                              |        ?
 01100111= 67= 103 | Undefined                              |        ?
 01100111= 67= 103 | Undefined                              |        ?
 01100111= 67= 103 | Undefined                              |        ?
 01101000= 68= 104 | Undefined                              |        ?
 01101001= 69= 105 | Undefined                              |        ?
 01101010= 6A= 106 | Undefined                              |        ?
 01101011= 6B= 107 | Undefined                              |        ?
 01101100= 6C= 108 | Undefined                              |        ?
 01101101= 6D= 109 | Undefined                              |        ?
 01101110= 6E= 110 | Undefined                              |        ?
 01101111= 6F= 111 | Undefined                              |        ?
 01110000= 70= 112 | Undefined                              |        ?
 01110001= 71= 113 | Undefined                              |        ?
 01110010= 72= 114 | Undefined                              |        ?
 01110011= 73= 115 | Undefined                              |        ?
 01110100= 74= 116 | Undefined                              |        ?
 01110101= 75= 117 | Undefined                              |        ?
 01110110= 76= 118 | Undefined                              |        ?
 01110111= 77= 119 | Undefined                              |        ?
 01111000= 78= 120 | Undefined                              |        ?
 01111001= 79= 121 | Undefined                              |        ?
 01111010= 7A= 122 | Local control on/off                   | 0=off    127=on
 01111011= 7B= 123 | All notes off (!!)                     |        0
 01111100= 7C= 124 | Omni mode off (includes all notes off) |        0
 01111101= 7D= 125 | Omni mode on (includes all notes off)  |        0
 01111110= 7E= 126 | Poly mode on/off(with all notes off)   |       **
 01111111= 7F= 127 | Poly mode on(mono=off&all notes off)   |        0

 **Note: This equals the number of channels, or zero if the number of channels
         equals the number of voices in the receiver.