Midi CC’s to sysex

0
0

Hi !

I just bought a Rolanbd TB-3 and discovered that one can tweak its sounds by using sysex. And I found some Ctrlr panels that allow me to do it.

BUT ! Sending sysex to the TB-3 with Ctrlr panels is good for live but I’d like to record (I can already record those sysex) and above all see in my daw the values I’m sending at specific moment of my daw project. Which is not really convenient with sysex ! So I’d prefer to edit clearly viewable midi cc’s in my daw and Bome MT will translate them into sysex which the TB-3 likes.

So, I bought Bome MT. The issue is that there is no “automatically checksum calculation” feature… That means that I must put the checksum in a variable. And that’s where I get troubles…

I want to modulate the filter EG sustain. And I’m sure that when I’ll understand how to calculate the checksum in the Bome rule section, I’ll be able to reproduce it for other parameters.

I show you the sysex for the filter EG sustain = 1 :

F0 41 10 00 00 7B 12 10 00 0A 08 01 5D F7     So, here the value = 01 and the cheksum = 5D, 93 in decimal.

For the filter EG sustain = 2 :

F0 41 10 00 00 7B 12 10 00 0A 08 02 5C F7

One can see that each time the value is incremented by 1, the checksum is decremented by 1.

So, fo the filter EG sustain = 0, the checksum will be 5E = 94 in decimal. That means that the checksum max value will be 94, first thing I don’t know to write in rules part !

But when the the filter EG sustain value will be 94, the checksum will be = 0. And the filter EG sustain = 95 the sysex is : F0 41 10 00 00 7B 12 10 00 0A 08 5F 7F F7. So, the checksum restarts from 7F.

Another thing with which I need help for writing it in the rules section.

I already affect the CC 12 value in the xx variable, in the “incoming” part of the translator. And the ss variable would be the checksum. So, here is the sysex I’ll put in the outgoing section :

F0 41 10 00 00 7B 12 10 00 0A 08 xx ss F7

Now, I just need to learn how to calculate and code the ss variable in the rules section !

Many thanks for help !

Marked as spam
Posted by (Q&A Forum: 2, Answers: 5)
February 10, 2019 3:35 pm
52 views
0
Private answer

Yeah ! It’s fully working ! I did that :

pp (variable for calculation)=34 (the sum)+xx (the CC2 value)
oo (another variable for calculation)=pp%128
if oo==128 then oo=0
ss (checksum)=128-oo

All that make me asking something else. xx, oo, etc variables are local variables and ga, js, etc, with 2 different letters are global Right ?

I don’t see a lot of local variables ! My question is : can I use the same local variables in several translators ?

 

And another question : are my “variables for calculation” variables mandatory ? Could I, as you seem to do, do like that :

ss=34+xx

ss=ss%128

if ss==128 then ss=0

ss=128-ss     ?

…………………….

After trying, it seems to work perfectly ! A big thank you ! It going to be easy for the other parameters. Really, thank you !

Marked as spam
Posted by (Q&A Forum: 2, Answers: 5)
February 10, 2019 6:43 pm

OK so say you have the following:

F0 41 10 00 00 7B 12 10 00 0A 08 xx ss F7

Since the calculation starts at the address, it looks like in this it would start after the 12
so all the values would would need in the calculation are

10 00 0A 08 xx

The above is all in hex so you would do this
ss=16+10+8 (in decimal and you can skip the 00 since it would not affect the checksum

so for this string this is the fixed value and all you need to do is worry about is xx after that.
so it would look like this so far
ss=16
ss=ss+10
ss=ss+8
then for the variable amount you do this
ss=ss+xx
// get remainder
ss=ss%128
// fix if zero
if ss==128 then ss=0
//subtract from 128
ss=128-ss

So ss is you checksum for output

There are 10 local variables oo,pp,qq,rr,ss,tt,uu,vv,ww,xx. Everything else is global.

You can use the same local variable in all translators as long as the incoming trigger is not exactly the same and it won’t affect the other translators. By contrast, all global variables are visible to all translators so the primary rule is if you want to share values use global variable, otherwise stick to local ones.

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

( at February 10, 2019 8:59 pm)

Thanks for everything ! I’m a sysex specialist, now ! 🙂

( at February 11, 2019 11:45 am)

Glad to have helped!

( at February 11, 2019 3:38 pm)
0
Private answer

Well… I don’t get it. I’ve found this on the link :

/ Calculate checksum

qq=qq%128
qq=128-qq
if qq==128 then qq=0

But in that calculation, I see only qq as variable. Is qq the cheksum value ? If it is, how can you calculate it without the entering midi cc value ?

Marked as spam
Posted by (Q&A Forum: 2, Answers: 5)
February 10, 2019 5:06 pm
0
Private answer

Oh ! Thanks ! I check that right now…

Marked as spam
Posted by (Q&A Forum: 2, Answers: 5)
February 10, 2019 4:38 pm
0
Private answer

I must not use CC12, the TB-3 uses it for other parameter. So let’s use CC2.

News : It works flawlessly up to CC2 = 94, so the cheksum = 0 with that rules :

pp (just a variable for calculation) =94-xx (the CC2 value)
ss (The cheksum) =pp

But above (CC2 = 96 & more), the checksum is supposed to restart from 127 (7F) and with my rules as it is now, the value is negative… I need help just for that, now ! I’m happy.

Bome midi translator is really awesome !

Thanks for help !

Marked as spam
Posted by (Q&A Forum: 2, Answers: 5)
February 10, 2019 4:37 pm

Please post your project file (as an answer since comments do not allow attachments).
I will then make the necessary corrections for one translator and explain what I did.

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

( at February 10, 2019 5:14 pm)
I found this text in my Roland VR-09 Manual. Roland calculates the checksum the same way on all of their stuff. The checksum is a value derived by adding the address, size and checksum itself and inverting the lower 7 bits. Here’s an example of how the checksum is calculated. We will assume that in the exclusive message we are transmitting, the address is aa bb ccH and the data or size is dd ee ffH. aa + bb + cc + dd + ee + ff = sum sum / 128 = quotient … remainder 128 – remainder = checksum (However, the checksum will be 0 if the remainder is 0.) Since most of the Sys Ex message is the same, you can pre-calculate the checksum at that point for the header section and then as variable data comes in, add to the pre-calculated value for just the data that varies and then at the end stuff the checksum into the outgoing variable. Note, the checksum calculations start at the address portion of the Sys Ex and not the initial Sys Ex header.
( at February 10, 2019 5:29 pm)
0
Private answer

Hi,

Please check out this post where I helped someone with Roland Sysex Calculation on his VB-99.  Come back to me if you have any more questions.

https://www.bome.com/support/kb/need-help-translating-an-expression-pedal-from-midi-to-sysex

Most of the Roland manuals describe how to calculate Sysex. The example in the project file above simply breaks it down in the way rules within Bome MT Pro handles it.

 

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

Marked as spam
Posted by (Q&A Forum: 36, Answers: 3116)
February 10, 2019 3:47 pm
Votes
Answers
Topic
0
votes
5
answers
asked 2 months ago by
updated 2 months ago by
0
votes
7
answers
asked 5 months ago by
updated 5 months ago by