SysEx implementation on TR-8S and other Roland gear

ah, you were one step ahead of me :slight_smile:
I guess it is possible. Seems like the 2 same messages you do see could be start/end headers. Other than that I’m not sure i’m any more help.

I’m sure someone else on the forum will have some ideas :crossed_fingers:

I presume you have the Roland driver installed on your computer?

1 Like

Yep! Meanwhile i did what you suggested but using another, third party editor, and there i found the right hex codes for the knob i want to control. Now i just need to go from completely noob to creating a Max device with knobs :slight_smile:hope this will work :wink:

2 Likes

Interesting thread. I am currently investigating in a similar direction. I want to control specific parameters of the TR8S with an external MIDI controller, e.g. FilterCutoff and Release.
(While I still don’t understand, why the CTRL knobs have no detents… Maybe because prodcut engineers always work in daylight… and sober… XD)
Yesterday I managed to squeeze out two sysex messages for the Filter Cutoff on the LT channel:
F0 41 10 00 00 00 45 12 10 76 12 47 00 00 21 F7 (FltCutoff = 0)
F0 41 10 00 00 00 45 12 10 76 12 47 0F 0F 03 F7 (FltCutoff = 255)
I used midi-ox for this. I was also able to send these messages back to the TR8S and it worked. I will now have to see how I can use either midi-ox or maybe the bome midi translator to map my hardware controller CC messages to the corresponding range of sysex messages for the TR8S.
This site was a big help to understand how the sysex messages are set up: Eddie's Home - MIDI - SysEx Tutorial
The TR8S sysex messages look a little bit differently. You can see it when you just look at them for a while and find similiarities and patterns.
I am pretty certain they are designed like this:

Here is an example sysex message:
F0 41 10 00 00 00 45 12 10 76 22 09 0E 07 3A F7

F0 41 - sysex standard, always the same
10 - Device ID, always the same
00 00 00 - just 6 zeros, always the same
45 - Model ID, always the same
12 - what I read is: “specifies whether we are sending (12h) or requesting (11h) information.” I don’t fully understand this one yet.
10 76 22 09 - start address, remains the same for the same type of message (e.g. Filter Cutoff). Part of the checksum calculation. EDIT: The 76 is actually the Kit number -1. So this was taken from Kit number 76h = 118+1 = Kit 119.
0E 07 - contains the data we are sending. These are the actual controller values. Also part of the checksum calculation.
3A - Roland checksum. Must be calculated for each message indivdually (see the website I mentioned above). However, it somewhere says you could also just ignore it… will have to check. EDIT: I checked, the checksum has to be accurate or the TR8S will not accept the message. There is a way to calculate this automatically for each value with a formula. I will post this later.
F7 - sysex standard, always the same

This is where I am so far.

3 Likes

This is an almost accurate translation for the BOME Midi translator of CC#54 from a hardware controller to the LowTom Filter Cutoff in the TR8S in Kit No. 119. The instrument of the LowTom needs to have a FilterCutoff of course. Not all of the instruments have it.
I have no idea if this is of any use to anybody. What I wanted to say is: Yes, it works! :slight_smile:

[x] Translator 0.0: New Translator
Options: swallow
Incoming: Control Change on ch. 1 with CC#:54 (0x36) and any value set ‘pp’ to value
Rules:
qq=pp2
uu=qq/16
vv=uu
16
vv=qq-vv

//CHECKSUM
// Address
rr=223
// value 1
rr=rr+uu
rr=rr+vv
// Get remainder
rr=rr%128
// Skip next step if remainder is 0
if rr==0 then skip next rule
//Subtract from 128
rr=128-rr
// rr is now the checksum

Outgoing: MIDI F0 41 10 00 00 00 45 12 10 76 12 47 uu vv rr F7

1 Like

Yo! I Just found this thread. Thanks @Ache08 That is definitely of some value, as I was just about to start poking myself.

The problem I have is that I want to be able to control certain non-CC parameters, and am hoping I can get to them via sysex. The specific parameter I’m after at the moment is LFO Rate and LFO Waveform in the kit settings. Also the delay, reverb, master fx parameters.

1 Like

Just found this as well, I love the instrument but it’s been frustrating to integrate into a DAW setup. My only point of reference is the SH-01, which has a very complete sysex implementation that was greatly appreciated after software support ended. The document provides a memory map of the device and then describes how to use the data request and set messages to retrieve/set data in a given address (including checksum calculation). Check it out here.

If Ache08’s description above is accurate, then as far as I can tell, the form of the command is exactly the same for these devices, so it might be justified to hypothesize that the memory layout has some similarities as well. In any case, somebody just needs to do the painstaking work of mapping out the parameters with trial and error. Change one thing in the device and do a bulk request, then see what changed in the output and note it down in a spreadsheet.

I’ll get back to you guys if I find the will to get started on this.

Cheers.

1 Like

Hey! I forgot about this thread!

I’ve been slowly recording all the sysex numbers : parameter names. I basically need to do all of them as there are a few weird cases where the parameter numbers aren’t consecutively mapped (also they seem to be ‘grouped’ - eg fx type and then the fx parameters are like a subset of parameters, rather than a continuation of instrument parameters in terms of parameter number in sysex. Most parameter numbers are actually spaced in pairs, not sure why - eg parameter 02, then 04, etc. Possibly because they weren’t sure if they’d need extra resolution on controls beyond the 0-255. (Although they’re still only using 2/4 bytes eg: counting down from 255 it would be 0F 0F, 0F 0E, etc.

Some things make sense - eg the master delay and reverb seem to be on a separate ‘track’ value in sysex. Everything makes pretty much sense now.

If anyone wants to help, the next thing I need to do is check what the data throughput is like… like if it’s actually possible to say twiddle 2 knobs mapped to 2 sysex params in a ‘jamming’ sense and if the tr8s can handle the sudden burst of values (sysex parameter value message strings are like 20x longer than standard midi and then values are 0-255 instead of 0-127. I can send the message strings if anyone has the ability to check that, otherwise I will do once finished mapping parameters… I’m maybe 1/2-2/3 of the way there.

3 Likes

Hey @avlantis I’ve recently got a TR-8S for a steal due to a broken screen which I’m getting fixed today - super excited!

I’m interested in the sysex control to setup a BCR2000 - hoping for two way info exchange so the LED rings update on the BCR when I change kits etc on the TR-8S.

If you’d be willing to share your lists of sysex data you’ve gathered I’d be most appreciative! I could help full in the gaps, test to see if multiple simultaneous controls work nicely and also look getting parameter data via the ‘request’ function to update the LED rings.

I’ve not done any searching of the web to see if anyone else has achieved this yet though - might be impossible, might have already been done.

Anyway - very excited to get into this machine especially with the FM models, probability and so many FX!

Here it is for all to see.
@ThorntonForce

Once you figure out the structure it’s not hard to read, the pain is just labelling the parameters - you can’t do it in an automated fashion unless someone wants to code something up - because certain params/groups of params seem to be weirdly placed.sysex_captures_15052023.txt (10.9 KB)

4 Likes

Many thanks for this! I’ll digest, and when I have space to progress anything worth sharing I’ll come back to you with an update. Really appreciate it!

If you want to add to it, my setup for finding the parameters is pretty simple.

TR8S -USB to PC
Midi ox monitoring the tr8s midi ports
Use tr-editor, tweak a knob, look for the line in midi ox where the value is changing.

1 Like

Was just looking back through my old notes…
It’s hopefully obvious, but a lot of the params I just grabbed 2 lines for comparison so I could make sure only one value was changing by looking at the 2 lines, only one message actually necessary.

Yeah it’s clear and helpful! I’ve done this kinda thing previously for my MKS-70 but by sending data from a VST controller plugin for it IIRC.

I’ve got midi ox and use it with my BCR2000 units - thanks for the pointers!

Hi - I know this is an old thread

I was fiddling with TR8s sysex this week and worked out my own MT script.

I was checking have you got your script to change the values on the Tr8s smoothly. I tried yours out and it seems very jumpy ? - But I may have made a mistake.

My script changes one parameter very smoothly - but for some weird reason it only works on one parameter on one kit - So as mine is more simple than yours - it obviously doesn’t address some of the issues

Thanks

Richard

How to control TR8s via sysex messages.

I put a message up a couple of weeks ago trying to get some leads - but have now successfully worked out how to do it using Bome’s Midi Translator and analysing the messages coming from the TR8-s

Roland denied it supported Syses when I asked Technical support - but it definitely does. They have implemented it in a really complicated way - which is why it took quite a while to work out what was going on. I used to have an MKS70 which I controlled via sysex and as far I remember that just used one byte for the parameter and one for the value.

Anyway I have attached a Midi translator file which contains code to control the 1st 8 Delay sends on the TR8s with CC chan 5 CC 31->38.

Pressing escape resets the kit number variable

I have also tested on the verb sends and on the overall verb decay and all these principals work.

This example uses parameters from kit pieces which would not be relevant to master effects - its useful to be able to analyse the output of the Drum machine to work out what sysex message to use.

Here is a description below of how it works with the sums - it should be able to use it to build a Max for Live device or a TouchOsc iPad controller - if you were so inclined - which Im not at the moment.

Hope someone out there finds this useful

The Syses format is as follows

F0 41 10 00 00 00 45 12 10 xx pp zz rr tt ss F7

Where:

xx is the kit number

pp is the kit piece

Zz is the parameter number

Rr,tt,ss all change to change the value from 0 to 255

The variable yy is starting value for ss. This is not the same for every parameter. I so far have found no mathematical relationship between the parameter value and yy (the starting value)

The only way to establish this is to change the value of the parameter to zero on TR8S and check what the last byte is.

——————————————————————————

xx=k1-1

// k1=kit number

if pp<31 then exit rules, skip Outgoing Action

if pp>38 then exit rules, skip Outgoing Action

yy=111-pp

// yy is the starting point for each parameter - different starting point ofr each

// so far I cannot find a mathematical relationship

pp=pp-15

// pp is Kit piece

zz=16

// zz is parameter number - 16 is for delay send

qq=qq*2

rr=qq/16

ss=rr*16

tt=qq-ss

tt=tt-1

// if tt==-1 then rr=rr-1

if tt==-1 then tt=0

ss=yy-tt

ss=ss-rr

3 Likes

I dont think I can attach to this forum - but reply if you want the MT file

Sounds awesome - I’d love to take a look.
Unforunately I don’t have a bomebox if that’s what you’re using? Or is this the software component that runs on PC?
I have a blok.as midi hub which seemed good at the time, but is kind of hamstrung. I get a lot done with it, but if I could have my time over I’d have gotten a bomebox. I will eventually, but currently too much value in gear and not enough cash available. Nobody seems to be buying gear these days around my part of the world either.

Alright, slightly reviving this thread - the TR8s is a great machine, and it would have been amazing if you have more than “choosable” control to play with live. I’ve done a bit more Sysex analysis.
In the above, note that “ss” is simply the checksum.

To switch a knob’s function - F0 41 10 00 00 00 45 12 10 5A 06 [CC PP SS] F7 , where CC is the channel/drum you want to change 01 = BD , 0B = RC. PP = the param you want to change to. Depending on the instrument you are on, this value goes from 1 to however many parameters there are. SS = checksum.

More useful, is the ability to control the parameters directly without having to change the knob function. To do that:

F0 41 10 0 0 0 45 12 10 5A [CC PP MSB LSB SS] F7
Here:
CC = Channel 1 BD = 10 , Channel 10 RC = 1A
PP = Parameters you are changing.
MSB/LSB = the value you are changing to (0 to 0f00 , I think TBC])
SS = Checksum.

Examples for Param: 0C is PAN , 10 is Delay Send.
Maybe I make a full list later.

Enjoy!

3 Likes