I'm trying to use data from a SysEx dump to send CC messages. Not sure if this is possible so I'm following the advice in the help message and asking for assistance.
For starters, I have a limited understanding of Midi implementation so you'll have to bear with me if I use incorrect terminology.
What I'd like to do is put the data from an amplifier preset dump into an array of some sort and then call on specific "cells" and send as CC to a layout in Midi Designer. Here's an example of what the Amp sends to MD:
f0 08 21 12 02 00 00 00 00 53 74 61 64 69
75 6d 00 20 52 6f 63 6b 20 20 0a 20 20 40
5a 21 6a 14 2f 07 61 78 6e 03 36 03 00 00
20 7f 00 7f 7f 7f 00 7f 7f 7f 7f 79 7f
Here’s what I think I know 🤔
f0 08 21 12 02 00 = start to sysex message.
00 00 = Preset Number. C00 in this case.
53 74 61 64 69 75 6d 00 20 52 6f 63 6b 20 20. = Preset name. Stadium Rock in this case.
The rest should be specifying tone stack type, tone stack position, drive circuitry, effect type, reverb type, timbre, etc as well as Volume, Gain,Treble, Middle, Bass, Presence and Reverb. I can work that out by changing parameters on the Amp and seeing what changes in the Sysex message. (I've also asked Fender for a translation but not holding my breath on that one)
I know I could be dreaming here but I'd like to give it a crack and I've purchased StreamByter so why not?
There's someone on the audiobus and MD forum (spookyzoo or something along those lines) who posted about having done this with a Novation thingo so it is definitely possible.
You could write a little general script that converts each value in the sysex to an incrementing CC starting from (say) cc1 simply enough. Something like this:
if M0 == F0 08 21 12 # is this the message we want? assign I0 = $27 # index of 1st value in sysex message assign I1 = 1 # first CC number to use while MI0 != F7 # loop from 1st value to end of sysex send BF I1 Mi0 # send cc I1 on channel 16 calc I0 = I0 + 1 # next value field calc I1 = I1 + 1 # next CC to send end end In MD only setup the CCs you want and the others ignored. Hopefully not more than 126 values in the sysex message
I'm working on deciphering your script...a noob to this stuff ;-)
In general is the script doing this? 1. Identifying the message at line 1, 2.Identifying first value I want use (Decimal 27 in your example) and making that I0 3. Assign the CC I want to use with I0 4. Send BF (not sure what that is) to CC 5. Loop until hitting F7 (End of message)
I'm pretty sure the CC's aren't sequential and as I work through comparing dial changes on Amp with values in Sysex it looks Volume is using two values. Dial 1-5 on Amp equates to 0H-74H and then dial 6 is 12H and climbs to 7EH at dial 10. I'm trying to identify the second value that's changing.
There are 55 values in the sysex, 47 of which I'll want to use so I guess that's good?
We're back in lockdown here so plenty of time to play with it and learn some stuff.
Your a legend... Bear with me while I confirm I'm understanding all this...
1. Index 0 is 1st byte ergo Index 27 is 28th byte. 2. The B in BF means CC and the F is OFH ie 16? 3. Understand what messages I would see if we progressed down the loop path...which as you say won't be appropriate due non sequential CC's
The 14 bit MSB LSB thing has got me stuffed...I'll try to understand with a google/youtube search.
Thanks Abadam, I put the "M" in front but still got a "00" return.
Please refer to screenshot attached. Here's what I think is happening?? This will make more sense to you, I'm sure!! You can see the message request for the Sysex preset value dump at line 1 & 2 (not sure why it's repeated) and then at line 5 it gives correct response by sending B2 08 7E. This appears to happen before the 55 byte message is received but whatever,,it's there and it responds correctly. Then it reads message at line 10 and because there is no value at index 36 it returns zero, so the "indicator" slider initially reads 7E (126) but immediately jumps back to 00 (0).
This also occurred when I used the IF statement.
Another question, This is all going into "Input Rules", Is that correct?
Can't understand how 5 independent variables with range 1 to 10 could be encoded into a 0-127 range of a CC. What's the amp model? Sysex spec would be useful. Manufacturer should make available according to MIDI association, I think,
What values does CC32 range through when you turn just one knob (eg. treble) on its own?