Home › Forums › General › Panels, Components, Macros › multi parameter sysex packets?
- This topic has 4 replies, 2 voices, and was last updated 8 years, 1 month ago by Possemo.
-
AuthorPosts
-
February 2, 2016 at 3:01 pm #68259
the synths i want to build pannels for are both fairly old synths that use a big sysex packet that contains all the parameters for a patch. (orla dse 12 fm synth, and simmons sds9 drum brain.)
is there a existing panel that works like this so i can get an idea of how to do it? all the ones i looked at so far have separate sysex message for each parameter.
i imagine that i have to create an object that has a sysex message full of variables and chnage the variables with gui sliders, then send that object when i want to update the patch on the synth. any pointers?
February 6, 2016 at 11:33 pm #68326In Roland language there are IPR sysex messages (Indvidual Parameter), APR (All Parameter) and BULK (All Patches – the wohle memory of the synth). Older synths probably just feature BULK or APR. So you will not be able to send single parameter values with a Ctrlr-fader or switch. You will have to use Lua scripting for this. With Lua scripting Ctrlr is able to do almost everything. APR and BULK are more features of a Librarian than an Editor. Look at my SuperJX-OS4.x panel. It is able to handle APR and DUMP. You can ask me if you have questions about the SuperJX panel.
I have to say that the SuperJX-OSv4.x Dumps are relatively simple. Most complex is the BULK. Some bytes are used for several different parameters which do not require an entire byte (switches and selectors).February 7, 2016 at 1:34 am #68329thanks, i’ll have a look at your superjx pannel
i’d rather avoid lua if possible, maybe there’s another wayi’ve been getting a bit deeper into ctrlr and i discovered global variables.
Can’t i just create a load of controllers attatched to global variables, then create a ‘send’ button with a sysex formula that contains the variables in the right order?i checked and there are enough global variables for all the voice parameters on the orla dse12. its’s a pretty simple synth, unfortunaty it dosen’t respond to Control Changes and it only has a single patch sysex format.
nobody has ever made a sysex editor for it.(maybe there was an atari editor, but it’s been lost in the mists of time)it sounds great but it’s really a pig to program from the front panel
February 8, 2016 at 3:54 pm #68397Your idea with the global variables goes in the right direction. But global variables are part of Lua. Btw if you dont declare variables to be “local” variables in Lua are always global.
You could get all parameter values and put them in the right order into a string and send it to the synth. For this it is easiest to usea a Lua table where you put all parameter values – look at my panel, procedure called “getPanelValues”:-- make a table called "PatchDataValuesTable" PatchDataValuesTable={} -- start to fill the table -- byte (1) to (7) used for message prefix PatchDataValuesTable[1]="f0" PatchDataValuesTable[2]="41" PatchDataValuesTable[3]="38" PatchDataValuesTable[4]="00" PatchDataValuesTable[5]="24" PatchDataValuesTable[6]="30" PatchDataValuesTable[7]="01" -- GET the Patch Parameters (Global Parameters) PatchDataValuesTable[26]=string.format("%.2x",panel:getModulatorByName("A/B_Balance") :getModulatorValue()) PatchDataValuesTable[27]=string.format("%.2x",panel:getModulatorByName("DualDetune") :getValueMapped()) PatchDataValuesTable[28]=string.format("%.2x",panel:getModulatorByName("SplitPointUpper"):getValueMapped()) PatchDataValuesTable[29]=string.format("%.2x",panel:getModulatorByName("SplitPointLower"):getValueMapped()) PatchDataValuesTable[30]=string.format("%.2x",panel:getModulatorByName("PortaTime") :getModulatorValue())
Then you only need a small part of my procedure called “sendPatchToSynth”. On my example the length of the sysex message is 279.
-- Get current patch data from panel by executing "getPanelValues" getPanelValues() -- Concatenate all Table values to a string. Put a Space between values PatchDat=table.concat(PatchDataValuesTable," ",1,279) -- Convert the String to a Memoryblock MemB=MemoryBlock(PatchDat) -- send the Memoryblock to the synth panel:sendMidiMessageNow(CtrlrMidiMessage(MemB))
then you just nee a Button in Ctrlr and set the script “sendPatchToSynh” to “called when mouse is down…” in the Button settings.
February 8, 2016 at 4:11 pm #68401But this will only work if your synth uses entire Bytes in the sysex-dump. there are some synths that are using “nibbleized” Bytes. Then it will start to get complicated…
-
AuthorPosts
- The forum ‘Panels, Components, Macros’ is closed to new topics and replies.