what I to try to achieve is controlling the voices that are used on a Yamaha Genos arranger via Cantabile.
When changing the panel voices on Genos via midi I have to work with midi-files containing a lot of sysex commands etc.
For the genos sounds I want to work with I have already redcorded the respective midi files containing all the commands needed to activate a specific voice and all of the effect parameters linked to that voice (I recorded the midi scripts via the multi-channel midi-recording-feature on the Genos).
The result is a bunch of midi-files each representing the setup for a specific voice that is activated on Genos as the “Upper 1” voice on midi channel 1.
So I can trigger a “Right 1 voice” - change in Cantabile by selecting the respective midi file in a media player object. Works pretty well so far.
But I also would like to set the “Right 2”, “Right 3” and “Left” voice on the Genos in the same way. To achieve this I will have to change each part of channel information in the midi file (in which channel 1 is referenced) to channel 2, 3 or 4 for the respective Genos Right 2/3/Left - voices.
Part of the work can be done by the midi channel routing/remapping featuere of Cantabile. But not for the sysex commands containing channel information.
I try to explain what I would like to do with the example from my first post:
001:2:0000 Sysex=F0 43 10 4C 08 00 60 40 F7 MultiPart : Ch 1 - AC2 Controler Number = 64
001:2:0000 Sysex=F0 43 10 4C 08 00 76 19 F7 MultiPart : Ch 1 - EQ Bass Frequency = 355 Hz
001:2:0000 Sysex=F0 43 10 4C 08 00 77 1C F7 MultiPart : Ch 1 - EQ Treble Frequency = 500 Hz
001:2:0000 Sysex=F0 43 10 4C 08 00 0C 3C F7 MultiPart : Ch 1 - Velocity Sense Depth = 60
001:2:0000 Sysex=F0 43 10 4C 08 00 0D 49 F7 MultiPart : Ch 1 - Velocity Sense Offset = 73
001:2:0000 Sysex=F0 43 10 4C 08 00 50 06 F7 MultiPart : Ch 1 - CAT LFO PMod Depth = 6
001:2:0000 Sysex=F0 43 10 4C 08 00 5B 05 F7 MultiPart : Ch 1 - AC1 LPF Control = -8850 cent
In this example I can identify a sysex that contains channel information that has to be changed
by its first bytes, those commands start (in this example) with “F0 43 10 4C 08”.
The next byte is the channel information which I would like to change.
So far it would be easy to do with a sysex decode / encode - combination. The problem is that the rest of the commands (the part after the channel information) is not static. Whatever it’s content may be it must be the same in the output as it was in the input. I do not see a way to resolve this by using the $(val), as the content of the two bytes after the channel byte can have different values from sysex to sysex within the midi script.
The input sysex is:
F0 43 10 4C 08 00 60 40 F7
The way I look at it is:
F0 43 10 4C 08 [channel byte] ?? ?? F7
The result has to be:
F0 43 10 4C 08 [changed channel byte] ?? ?? F7, where ?? ?? is the same content as before without knowing what the values of the bytes are in the sysex commands.
I hope it is understandable what I try to explain.