Rule to increase/decrease an existing value by +1/-1

Hello,

I am a new Midi translator pro user. I am using MTP to translate Midi CC from a Faderfox EC4 to sysex to control the Yamaha TG77. So far everything is working fine and I am loving it.

But now I am struggling to find a solution (a rule) that could fix a jumping parameter value issue. I have already searched this forum for some help, but no luck so far. I will try to describe what I am trying to achieve.

This is the way I am using the translation so far:

It works flawlessly, and I am able to access all the synth parameters and control them. The value scaling between 0-127 is easily done inside the EC4 controller.

But with this method, I have a problem with value jumps, e.g., when I change the Synth Preset, all the in-Synth parameter value change, so when i use the EC4 encoder, which are still at the values of the previous Preset editing, there are value jumps.

My attempt to solve this issue was to limit the Faderfox CC value to just send two values, e.g., 0-1. As long as I turn the encoder to the left, it repeats sending the 0 and, by turning to the right the 1. (I checked the log window and by turning the Encoder the value retriggers…) So the idea is to define a Rule for the translation, that every time the value 1 is sent, the actual in-synth parameter value should increase by +1 and when a 0 is sent, the actual value should decrease by -1.

This is what I have tried so far and failed pitiful:

if pp==1 then gb=gb+1
if pp==0 then gb=gb-1

gb=gb+1
if gb>100 then gb=100
gb=gb-1
if gb<0 then gb=0

It is not that simple I guess, i am not even sure if this is the right way or if it is possible. I think I have to edit the outgoing SysEx data more carefully so that it doesn’t receive a completely new value but only adds or reduces the existing in-synth value by +1/-1.

I hope there is a way to get this to work?

Thanks for any help and feedback

Hi and welcome to the Bome community!

Does the synth send back any MIDI SysEX when you change parameters on it? If so we should be able to track the current value in Bome MIDI Translator Pro (MT Pro) and send the value back as a CC to your Faderfox EC4. That way it would stay in sync.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Thank you for the quick reply. Yes it does, the synth always transmits/sends back all the changed parameter.

This is what the log window tells:

A: The translation made by MT Pro
B: By changing the parameter directly from the front panel of the synth

Hi,

The below example should be of help.

I have 2 presets and have set the port inputs and outputs at the preset level.

The first preset only looks at your EC4 and sends to your Synth.

The second preset only looks at your Synth and sends to your EC4.

For more information about device selection, see this tutorial.

I have my aliases set up as follows, however you should change assignment based on the actual device you are using.

image

You can learn more about aliases from this tutorial.

The first preset has 3 translators.

The first one does translation of CC to SysEX as you have already done. However in the rules we set a ‘busy’ flag in global variable ‘ga’. We do this to avoid feedback that will come back from the synth to send back to your controller in another translator as you will see later.

The second translator sets a ‘Watchdog’ timer with a delay of 500ms. This time gets reset as you move your controller so as long as you are moving your controller, it will never trip.

The third translator will trip after you stop moving you encoder for the delay above. The rules in it set the value of ga back to 0 indicating ‘not busy’

The second preset has one translator and will convert SysEX back to CC to send to your controller. The rules look for the busy flag so only sends output when you are not moving your controller.

If you open the log window, you can see it in action. I put ‘Log’ rules through the project so that you can see how this all works.

CC8-to-Sysex-w-Feedback.bmtp (2.0 KB)

I hope this makes sense to you.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hi Steve, thank you very much. It makes sense and it also works. When the synth sends Sysex Out, my controller listens and updates the values.

Unfortunately the synth sends Sysex only when you use the data entry (a slider, and two buttons +1/-1, the slider is the same like the two buttons) on the front panel. The only way to change the parameter values from the front panel, is with the data entry, then the synths sends out the sysex data of the changed parameter with its exact value.

Here my Problem remains, lets say i switch the preset (e.g. in a live situation playing an another song), and when the new preset is loaded there is no sysex communcation to the midi out of the synth. In this situation all the parameter values changed and my EC4 controller is still having the values from the previous Preset. Here i get on every parameter tweak value jumps. It is a little bit tricky situation…

I´ve been thinking of a (may be) work around, but i am not sure if this is realistic to achieve with MT Pro. I hope you can give me some feedback to that idea:

The facts:

  • You can control every parameter of the synth with SysEx. Those SyEx are only received by the synth. When changing those parameters with a controller, none of them are send out of the synth,
  • The data entry (Slider & buttons) is the only way, when the synths sends out the controlled sysex data. Lyckily i also have the sysex of the data entry (two buttons, +1/-1)

Is it possible to combine three outgoing SysEx messages in the following way?:

  • One sysex to only reach the target parameter, but not changing its value

  • Then for the value change, +1 or -1 use the two data entry SysEx messages

  • the incoming message would only be two values, e.g. turning the encoder to right =+1 turning left=0

I am sry for the novel i wrote, but i hope it is understandable what i intend to do.

Anyway, MT Pro made already a brand new (beast of a) Synth… The solution for the value jumps would just be the icing on the cake

Thank you in advance

So when you move the slider, do you get a new base sysex followed by an increment/decrement? I think I know what the base looks like but what does the increment/decrement look like?

So I assume when you change the preset on your synth you would follow it immediately with a slider movement to update the controller. Then the next time you move the controller it should be at the right value and you could just send an increment/decrement to the synth. If we are always feed the value before the increment/decrement as you move the slider, we would not need to store a variable in MT Pro. Although if you have different parameters being sent, we would need to know the parameter number to send in the increment/decrement messages.

So I really need a better picture of what the Synth sends and receives instead of a single one parameter sysex message example that you showed.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Yes Exactly, by moving the Slider or pressing the -1/+1 Buttons on the front panel, you get a new base Sysex. Sry, i forgot to mention, by using the Slider you get value jumps, the value starts or decrease from the position of the Slider. But by pressing the -1 or +1 button you encrease or decrease the value by +1/-1. This also the only time the synth transmits the paramter change/Sysex to midi out. (you can see it in the first screenshot) Thats also a fast way to capture the midi Sysex for the outgoing translation. (instead of searching for it in the MIDI DATA FORMAT Manual.

And yes, when the preset is changed, i first would have to navigate to the parameter i would like to change, then dec or incr with -1/+1 button (on front panel or with midi controller), then the synth sends the update to the controller and from there i can use my controller for that parameter without value jumps.

This is the sysex for increment/decrement +1/-1 Button . Data range: off (00-3F), on (40-7F)
Button +1: F0 43 10 34 0D 00 00 1E 00 40 F7
Button -1: F0 43 10 34 0D 00 00 1C 00 40 F7
When in off range nothing happens…

Lets Take for example the Sub LFO Prameters:
SUB LFO Speed: F0 43 10 34 05 00 00 16 00 pp F7

This is how the log window looks like by incr/decr the LFO SPEED value with midi controller, usind the +1/-1 sysex:

image

This is how it looks by using the direct sysex parameter of Sub Lfo speed

image

Here is a little bit additional info, might be of help:

Here we have the SysEx data for pitch eg, main lfo and sub lfo. I marked the above used sub lfo Speed parameter:

Here are the sysexparameter for all the front panel buttons. The +1/-1 used obove are marked pink:

The Parameter Numbers are easy to get, the mystery is, how to implement the increment/decrement by +1/-1, this is where my brain stops….

Thank you!

OK, something like the attached should get you started.

The global of g0 will maintain the current value of the encoder. It is updated only from the value coming from the synth.

Translator 0.0 looks at SysEX messages coming back from the synth and sets the current value of g0 from that. It also updates the value of the MIDI Fighter Twister for LED feedback.

Translator 1.0 will with a CC of 8 on MIDI CH 3 will send either an increment or decrement SysEx message based on the last message that came from the synth in translator 0.0 (g0). It delays the outgoing message by 20ms to give the time for for g0 to be updated. That is probably longer than needed but I didn’t want to try and resend the value to quickly.

Translator 1.1 sends the updated value of g0 to update the synth with the new value received in translator 0.0.

Then the cycle repeats.

Note that I had to put a 500ms delay on the message sent back to the Midi Fighter Twister as if the message came back too fast, the controller would not update it’s value.

In this example I used MIDI CH 1 instead of 3

CC8-to-Sysex-w-Feedback-2023-11-15.bmtp (1.7 KB)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hi Steve, thank you very much for the help!

The updated project-file works really well, by reverse egineering it gave me a pretty nice crashcourse in MTP. But there is still a problem that i have to fix somehow. Unfortunately the incr/decr must be at the right parameter, for now i still have to navigate it manualy to the right parameter. i am afraid that it is a hardware limitation an i will have to take it. Anyway, i will keep on tweaking and if there is any progress i will give you an update :slight_smile:

Thank you very much again! :slight_smile:
Have a nice weekend!

Maybe another SysEX to select the hardware parameter first then the Inc/Dec followed by the new value.

not possible, unfortunately. There is no sysex to bring the inc/dec selection to a specific parameter, you have to navigate with up/down/left/right buttons there… the sysex message for the specific parameter is independent from the inc/dec

You could trigger the whole navigation path to the specific parameter selection (e.g. enter, 2x down, 1x right, enter, 2x right…) and at the end inc/dec haha, but no, because the selection is not always on the same starting point, so i will scratch a little bit my head and may be i missed something, hopefully…

So you said if it adjust inc/dec, you sythn sends all values as SysEX. Can’t you just pick the one you want from it’s message and then send the new value back on the paramter you want to send only?

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz