Capture Sysex, change a byte then resend it

Is there a good way to capture a Sysex string, change a single byte, then resend the whole string?

I imagine a solution would involve capturing the bytes before and after the “target” byte and reassembling the string to send. I have no clue how to do that in BMTP.

For context:
I’m trying to assert Midi control over “multi mode” in my Blofeld synth (activate/deactivate multi mode). The only way to do that is to capture the “global parameters” with a Sysex “request” and to change the 2nd byte to 0 or 1 (off, on) then to send the string back as a Sysex “dump.”

Thanks in advance!

Sure here is an example where I change an APC40 MK2 SysEx message from the current mode to mode 2.

Incoming: Raw MIDI F0 47 7f 29 60 00 04 pp 09 07 01 f7

Rules:
// in this case pp will be 0x40 for mode 0 0x41 for mod 1 and 0x42 for mode 2
pp=0x42

Outgoing: Raw MIDI F0 47 7f 29 60 00 04 pp 09 07 01 f7

Steve Caldwell
Bome Customer Care


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

Thank you as always for the very quick response Steve.

This makes sense, but I don’t see how that can work in this use case:

  1. Capturing ~60 bytes of Sysex data from the synth. I need to capture this live.
  2. Substituting a variable for the second byte of the string.
  3. Sending the Sysex string with the variable value in place back to the synth.

I understand that I could incorporate a string of variables (one per incoming byte). This seems pretty cumbersome.

Is that the solution?

Thanks,
Dov

Hi,

Just capture the entire string as absolute execept for the byte you want to change. If you don’t like to type, then you can just click “capture incoming” on the incoming message, and capture it that way. Then edit the byte you want to change with the variable you want, change the variable value in rules and then send the same string (including the changed variable ) back out. I do this all the time with my FC-300 in SysEX mode to convert volume pedal SysEX to CC message.

You can capture pretty much as long as a string as you want (I haven’t found the limit). There is no need to capture everything into variables. Only the bytes you want to change.

Steve

I understand your suggestion. I’m sure it would work.

That said, I’m capturing the operating configuration of a synth in that Sysex. If something gets changed in the synth, I would have to recapture the Sysex string all over again.

I was hoping there’s a more “dynamic” way to capture the Sysex string and slice/dice it.

Thanks,
Dov

You;; find that there are usually only a few bytes that very for a given SysEX message, so I just substitute those bytes for variables. I like to use local variables so they don’t interfere with other translators but there are only 10 of them. If you use global variables, you must be careful not to have two translators that use the same variables. If they do, I usually use “Stop Processing” so that once the current translator realizes it belongs to it, further translators down the chain don’t also try to process that variable.

Locals variables are oo,pp,qq,rr,ss,tt,uu,vv, ww and xx.

You can set up different translators for differing incoming patterns so you may indeed need to have multiple translators.

This is the way it is done for now.

Steve Caldwell
Bome Customer Care


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

Thank you.