It will be controlling the boss katana amp (!)which has a lot of effects and parameters. The amp contains roughly 5 sections: eq, boost, modulation, amp, delay, reverb. The modulation section alone has 35 effects, each containing roughly 6 parameters like rate, mix, etc
You can understand that a MDP2 layout would contain hundreds of controls. Luckily there is streambyter and it maybe possible to use one knob for multiple parameters?
For example knob 1 from the modulation section controls the rate of the chorus, phaser, flanger, etc. i think this has be done before, could you give me hint in the right direction?
You can send multiple events when you see a specific event and use data from the trigger event to populate your send events. I'm assuming this is all sysex, so for my example I am going to make up a sysex convention to demonstrate how to do this. Consider this small example sysex message:
F0 41 12 34 56 20 F7
The first red part is made up Roland preamble. The green '56' represents a parameter number and the blue '20' represents that parameter's value. Let's assume this is 'knob 1'. So, to trap that event you would write:
# match roland + equip IF M0 == F0 41 12 34
# match 'knob 1', (hex 56) IF M4 == 56 # send your other events here SND M0 M1 M2 M3 57 M5 END
# match a different knob IF M4 == 60 # send events here END END
When we see that roland sysex message for knob 1, we send another sysex message with the same preamble (M0 M1 M2 M3) and 'knob 2' which I just made up to be identified by hex 57 and with the value from the original message (parameter value) at M5. For more outgoing knobs, you add more SND rules. For more incoming knobs you duplicate the IF M4 == 56/END clause and change '56' to the correct number for that knob.
Now, we could do something slightly more adventurous. Let's say we want to send the inverted parameter value to knob 3 which has a hex number of 58. ie. when knob 1 is set to 0, knob 3 is set to 127:
# calculate inverted value MAT I0 = 7F - M5
# send knob 3 with inverted value SND M0 M1 M2 M3 58 I0
That little bit of code above would sit in the IF M4 == 56/END clause in the original code at the top.
😳 strange things happening here Nic... mdp2 ‘s bewitched! Awesome! 😄 thanks!
I notice that the last bit -parameter value- is not doubled? And how do I control data, there’s a lot more Sysex now?
Vision: when turning for example turning knob 1-6 I can use those parameters, somehow by choice, for different sysex ranges, hence different fx, the clone data is being send and the original data blocked by choice. That sounds pretty far out to me? Is that even possible. (Trying to get my head around this.)
Crossing messages, didn’t read your last one. So checksum becomes an issue. What do I need for this and how do I know it becomes an issue, how do I know a script is not worling because of checksum? I understand MDP2 for a bit now but this sysex code doesn’t feel natural to me. I’m getting a bit used to it though.
I could not find the code I wrote before, but found the algorithm. I think this code will calculate and set the checksum for those katana messages generated by StreamByter:
# roland checksum for katana ASS I0 = M8 MAT I0 = I0 + M09 MAT I0 = I0 + M0A MAT I0 = I0 + M0B MAT I0 = I0 + M0C MAT I0 = I0 % 80 MAT I0 = 80 - I0 IF I0 == 80 ASS I0 = 0 END SND M0 M1 M2 M3 M4 M5 M6 M7 M8 M9 MA 56 M0C I0 ME
You will need to replicate this code for each time you need to calculate a checksum before a send.