login
.net

EnStLabProtocol

login
down

Decoding the Tonelab ST midi protocol

  • This is an incomplete list of the main protocol features. Please contribute if you have any more information!
  • All writing operations currently missing. I will add them when I've implemented them in StLab
  • Help is needed decoding the preset-data. See below.

General protocol layout:

  • All sent and received messages are SysEx-Midi-Messages
  • All messages are built this way:
    • Start bytes (containing model id)
    • Function code
    • variable optional amount of data
    • End byte

F0 42 30 00 01 08 Fc Data F7 
|- start bytes -| |       |-End byte
                  |- Function Code
 
 

Sendable function codes

  • 4e - switch preset to number
    • returns message with function code 23 on success
|- Function code
|  |---- Data
4e 00 NU
      |- Preset number 00-63
 
 

  • 40 - set current preset parameters
    • returns message function code 23 on success, 26 when sending incorrect data format
    • see preset data specification below
40 PRESET-DATA
 
 

  • 12 - get current preset number
    • no data is sent
    • receive a 42 command. see below

  • 10 - request the parameters currently set on the unit
    • no data is sent
    • receive a 40 command. see below

  • 1c - request preset parameter dump
    • returns a 4c command. see below
1c 10 XX
      |- preset number 00 - 63
 
 

Receivable function codes

  • 23 - last function was successful

  • 42 - receive current preset number
42 00 XX
      |- current preset number 00 - 63
 
 

  • 40 - dump of current parameters (must not have been saved)
    • see preset data specification below
40 PRESET-DATA
 
 

  • 4c - dump of a requested preset
    • see preset data specification below
    • PRESET-DATA starts with preset number
40 PRESET-DATA
 
 

  • 21 - write current parameters to preset
    • is sent when the user presses the write button and selected a preset number on the unit

Receivable error function codes

  • 24 - data load error
  • 26 - 26 data format error
  • 22 - data write error

Preset data specification

  • Most values are integer

	/*byte0            4            8            12           16           20           24       27
	 * NU 00 42 06 32  00 00 00 00  00 00 00 00  00 00 01 0A  08 00 62 00  50 07 0C 00  00 00 64 00;
	 *       XX PP PE  AM GG VV TR     MI BB PR  NR CA RE RV  S0 MD DD DF  S1 S2 ET ??  ?? ?? ?? ??
	 * 
	 * NU=(optional) Preset number when requesting preset data
	 * AM=AMP (GREEN: 0=Clean,1=CALI CLEAN,  ... 0A=BTO METAL) (ORANGE: 0B-..) (RED: 16-)
	 * VV=Volume 32=50
	 * BB=Bass   32=50
	 * MI=Middle 32=50
	 * TR=Treble 32=50
	 * GG=Gain   32=50
	 * PR=Presence 32=50
	 * NR=NR     32=100!
	 * CA=Cabinet 00-0A
	 * PE=Pedal edit 32=50
	 * PP=Pedal effect (00=COMP,... 05=TREB BOOST, 0A=FUZZ) (effects PE!)
	 * MD=Mod/Delay effect (00=CLASSIC CHORUS, ... 0A=CHORUS+DELAY)
	 * DD=Delay depth (00..32..64=100d)
	 * DF=Delay feedback (00-64=100)
	 * RE=Reverb effect (spring=00 ROOM=01 HALL=02)
	 * RV=Reverb value (00-28)
	 * XX=bin: ? 64 32 16 8 4 ? 1
	 *                          1=Pedal effect on/off
	 *                      4=Cabinet on/off
	 *                    8=Mod/Delay on: Speed is in Hz
	 *                 16=Mod/Delay on: Speed in ms
	 *              32=Reverb on/off
	 *           
	  S0 S1 S2=Delay speed: value=S016+S1+S2*256
	 *   if MD<6: measured in Hz, use 1000/value
	 *   else if MD==6: S0=00 S2=00: S1 = 00:-12, 05:-7, 07:-5, 0d:dt, 12:5, 14:7, 19:12
	 *   else if MD==7: S0=00 S2=00: S1 = 00: Up, 01: Down
	 *   else use value as it is. its measured in ms
         */
 
 

Help decoding the preset data

Bit thank you to Shaya, who helped me decoding the tapping (delay) speeds! You're great!

up
Home upload edit Recent Changes Find Page All Pages