Wednesday, January 12, 2011

Sysex strings for controlling JD-800 tones

If you've spent time working with sysex on the Roland JD-800, you may have noticed that the tone layer/active buttons don't send sysex. This means, among other things, that if you are trying to turn tones on and off during a performance and record it with a sequencer, these actions will not be recorded.

There is, however, a sysex string that you can send to a JD-800 to turn tones on and off. Here is the string; it's expressed in bytes as two hexadecimal digits per byte (most software sequencers will allow you to copy and paste this into a sysex editing dialog box):

F0 41 10 3D 12 00 00 21 0x 5y F7

The x and y are variables. A byte-by-byte breakdown of the string:
  • F0 The MIDI standard command byte that indicate that a sysex follows.
  • 41 Roland's manufacturer ID.
  • 10 The JD-800's unit number. The value "10" represents the factory default unit number of 17. If you have set your JD-800 to some other unit number, see the note at the end of this post.
  • 3D The model number for the JD-800.
  • 12 The command ID that tells the JD-800 to receive the following data.
  • 00 00 21 The address of the tone layer parameter in the single-mode edit buffer.
  • 0x is the parameter that tells the JD-800 which combination of tones should be on. The table below tells you how to set this value.
  • 5y is a checksum, which the synth uses to check to see that the sysex string was transmitted correctly; if the checksum value is incorrect, the JD-800 will ignore the sysex. The table below tells you how to set this too.
Set the x and y values according to this table:
[apologies for the white space problem below; I haven't been able to fix it]

Tones OnXY
A, B3C
A, B, C78
A, B, C, DF0
A, B, DB4
A, C5A
A, C, DD2
A, D96
B, C69
B, C, DE1
B, DA5
C, DC3

Sending the string turns on and off the selected combination of tones in the currently loaded patch. It only effects the edit buffer; it's exactly the same as pushing the buttons on the panel. The changes are not saved unless you write the patch to memory.

If you've changed your JD-800's unit number, you need to change the unit code in the sysex string. The JD-800 allows its unit number to be set to any value in the range 17-32. For unit number 17, the sysex code is 10, as show above. For unit 18, the code is 11; for unit 19, the code is 12, and so on... up to unit number 26, for which the code is 19. For unit 27, the code is 1A; for unit 28, the code is 1B, and so on... up to unit number 32, for which the code is 1F.

No comments: