Multi control sysex string help?

I’m having trouble figuring out how to implement the modulation matrix on the Oberheim Matrix-1000. Basically, the modulation matrix on the Oberheim Matrix-1000 requires a group of all 3 values (source, amount, destination) within every Sysex string sent.

So, for the 1st of 10 mod matrix slots, this is the sysex string…

F0 10 06 0B 00 XX YY ZZ F7

XX is the source
YY is the amount
ZZ is the destination

Changing the source, amount, or destination resends the sysex string with the updated value.

What is the best way of implementing this? Is there a way for one control to access a value from another control? Almost like how the “type”: “value” accesses the list or fader value, but instead of within only that single control, it is a combination of 3 controls?

1 Like

that is a good one.

Of course, the most straightforward solution is to create controls that cover all required combinations of sources and destinations. But that is not what you want to do I assume.

I have actually thought about the “value-only” controls already. By “value-only” I mean a control that can change its value but does not send any MIDI message. The reason why I thought about that was the fact that sysex controls allow you to use values of other controls already.

Before the “value-only” feature is implemented, you could try the following:

  1. Create two list controls, one would be a list of Sources, and the second one a list of Destinations. These two would be sysex lists with their Data field left empty.
  2. Create third control that would be the modulation amount. That would be a sysex fader. The Data field of this control would have a reference to the Source control, Destination control, and to itself.

eg,

[
   "10",
   "06",
   "0B",
   "00",
   {
      "type":"value",
      "rules":[
         {
            "parameterNumber":1,
            "byteBitPosition":0,
            "bitWidth":7,
            "type":"sysex"
         }
      ]
   },
   {
      "type":"value",
      "rules":[
         {
            "parameterNumber":2,
            "byteBitPosition":0,
            "bitWidth":7,
            "type":"sysex"
         }
      ]
   },
   {
      "type":"value",
      "rules":[
         {
            "parameterNumber":3,
            "byteBitPosition":0,
            "bitWidth":7,
            "type":"sysex"
         }
      ]
   }
]

Providing:

  • parameterNumber 1 is the control with the list of Sources
  • parameterNumber 2 is the control itself
  • parameterNumber 3 is the control with teh list of Destinations

I made an example preset. I guess it will be easier to understand.

Of course it is a workaround and it has disadvantages:

  • Changing value of Source and Destination will send an empty sysex message. That most likely will not be an issue for Matrix
  • Electra will not remeber the Mod amount value for particular combinations of Sources and Destinations.

If there was some sort of little script (python or similar?) that could auto generate all sources and destinations combinations into a text file in the Electra One control format, I would just do that, but with 21 sources, and 32 destinations, I’m not about to sit here and type out 672 combinations manually.

As far as the workaround, that totally makes sense and sounds like it would work! I can’t imagine the empty sysex message will be an issue for the Matrix 1000.

Hey Martin,

Running into some other situations where the “value-only” parameter would be needed, so I assume others will as well.

For example, since the Oberheim Matrix 1000 was originally intended as a “preset synth” there isn’t a way to actually save a patch on the synth display other than sending the synth a sysex message.

The thing is, there are 2 sysex strings involved, first is the bank slot, and the second being the patch slot, but the second sysex string immediately saves the patch in that slot. This means in the current implementation, as you scrolled through the patch numbers, you would be saving over all the patches until you got to the one you actually wanted.

With the “value-only” parameter, you could essentially chose the bank number “X” (no data sent), chose the patch number “Y” (no data sent), and then make a momentary pad that actually sends the “X” and “Y” data to the synth.

(PS - thanks again for all the help yesterday!!!)