Forum Replies Created
-
AuthorPosts
-
It’s a standard inc/dec button, i’ll make a quick mockup panel when i’m at my own computer.
My bad, forgot to add a safety @ startup, it tries to read a value that does not exist yet. Fixed in atteched panel.
If you have questions ask away, i will try to help where i can in a “reasonable” timeframe.
Lua may look daunting in the beginning but once you get the hang of it you can do very cool stuff. For samplers it’s the way to go imo; so many variable parameters compared to synths that always have a fixed number of parameters.It does take alot of figuring out though, i started the emu Eos panel roughly 8 months ago and am now getting to a stage where i know enough to make it a “decent” panel. Been rewriting it for about 2 months now & it will be alot better than the one available now (which does work but is not well written knowing what i know now…)
- This reply was modified 11 years ago by Hecticcc.
Attachments:
You must be logged in to view attached files.Finally had some time to take a look at this, the panel i attached should give you a good starting point for constructing the right sysex messages for the s2000.
Instead of using the midi-properties i made it all in Lua because i think this is easiest to do this way. The sysex formula field is not flexible enough to handle “mixed” strings like this, with values coming from multiple modulators that need to be nibble-ized – correct me if i’m wrong about that Atom 😉
Look inside the Lua scripts of the panel, i tried explaining what is happening in the comments inside them.
If you need more help just gimme a shout 😉@ Atom – When i fetch the values for program and keygroup i need to subtract 1 from its value, but using the expressions did not do the trick for me.
I put “modulatorValue-1” in the first expression field but it does not pass the adapted value to Lua.
So now i do getValue()-1 but you already pointed out this is “scary stuff” @ runtime and i would like to get rid of it.Attachments:
You must be logged in to view attached files.You have to attach the script to a modulator; also note that the decision-making values should be fetched from other modulators that set the number of the program/keygroup you want to target.
The script is not complete for selecting the correct keygroup and programs like it is now because the part number is also a ms/ms splits, the numbers of the selection will have to be re-calculated by Ctrlr.
Also imo it will be “easier” to do this all in inside Lua instead of messing with the sysex formula of all modulators, from what i can tell there’s 4 variables, 3 of which are ms/ls splits.
Can you provide some strings where different parts and keygroups are selected/edited? If i know those i can try and cook something up.
Totally overlooked that field, thanks Atom 🙂
Thanks Atom, so to be sure set it to false for future compatibilty issues if/when you decide to implement undo, yes?
Nice going Synthetech 🙂
Here’s a little helper script for being able to change the sysex command to select another program / keygroup.
This is linked to a togglebutton so only two values/options but you can see what is happening.
For this i assumed the 10’th (and 11’th? – probably split in the same way) bit is the one needing to be changed.`
—
— Called when a modulator value changes
— @mod http://ctrlr.org/api/class_ctrlr_modulator.html
— @value new numeric value of the modulator
—
— example of how to change the sysex formula field contentssysexswitch = function(mod, value)
m = panel:getModulatorByName(“modulator-1”):getMidiMessage()
if value == 0 then m:setProperty(“midiMessageSysExFormula”,”F0 47 00 2A 48 00 00 00 07 00 01 00 ls ms F7″,true)
elseif value == 1 then m:setProperty(“midiMessageSysExFormula”,”F0 47 00 2A 48 00 00 00 07 00 02 00 ls ms F7″,true) endend
`ps, Atom, what does the bool do for setting this property? I tried both false & true and did not notice any change in behaviour.
Yes the sysex is sent out when you adjust a parameter with the jogwheel, i used to record automation like this with it. As long as you don’t overdo the amount of data being sent it responds quite fast too 🙂
Did some reading up on the sysex implementation of akai, it uses nibble-ized bytes so using “standard” lsb/msb splits will not work. It will never respond to the first character of a byte message; sending 11, 21…f1 fill be read as 01 by the Akai.
From what i read this is the way to handle it:
- Suppose you want cutoff to be set to max ie 127.
- First convert to hex = 7f
- Split this over two bytes, msb and lsb : 07 and 0f — Atom, my guess is this is where bigInteger has to be used to ensure proper splitting? I have no time right now to dig into this atm.
- Then send the message lsb first, so FO …… 0f 07 …..F7
As for the sysex listings there are no full specs to be found, plugging it in and analysing the sysex it spits out when you change a parameter seems to be the only way…
Gonna dig my s2000 up from the attic & hook it up again when i have more time, then i will be able to test some stuff out for this.
I was thinking about doing an s2000 panel aswell after finishing the Emu sampler panel, but if you want to work on this i will be glad to help out where i can.
Beware of how to do it though, making a good panel for a sampler is not easy. Many variable parameters, like amount of samples in a preset for instance, makes it tricky.
The good part about making a panel for a sampler is that you have to learn Ctrlr and Lua really well, and if you decide to make a panel for something “simpler” it is way easier to do because you already know lots of tricks 🙂
As for your lsb/msb problem, how are you assigning the midi-message? Do you use the slider’s properties directly, ie set to sysex and add formula with ls and ms placeholders; or are you using Lua?
Ok good to know, thanks Atom.
Did anyone have an issue with the menu-bar items not being clickable?
A user of my emu-panel can only access the software-rendering option, all the rest is greyed out…I noticed this sometimes happens in the win-builds when using as vst but clicking in the plugin and re-clicking the menubar fixes this, but not in Mac version apparently.
No prob 😉
1- This one has no impact on the midi-functions of the panel, is for graphics. Gonna look what happens, i thought i had squashed it…
2- Also noticed this and looking into it.
Cheerz,
Hec
Cool, thanks Atom.
I also noticed that when resetting the range this way it jumps to its “base” value (of course), but this can be remedied by grabbing the value @ start of the script and assign it again after doing the content manipulation, allowing visually seamless switching 🙂
This will make my rebuild (v3 lol) alot more practical – i used 5 different modulators for “cutoff” alone in the last rev to make sure the right values were indicated, and switched visibility for them depending on filtertype. But this made a mess for automation purposes as you can imagine…
I did some more trying in the mean while and found out i made an error in the syntax, now all is working as expected 😀
Attached the “proof-of concept” panel of this functionality in case other people want to look into it.
One thing does stump me still though, for the uiFixedSliders the values only get updated when the modulator itself changes value. Is there a way to force these “new” values so they update visually instantly? In the uiListbox it “just works”.
Attachments:
You must be logged in to view attached files.Great news 😀
As far as i can see you did not yet select the ports in the panel’s midi properties, hence no data can flow.
Attachments:
You must be logged in to view attached files.Did you try disabling the midi port in Cubase’s midi settings? If Cubase starts it opens the selected midi-ports and it “blocks” Ctrlr from selecting this midi port, because it cannot be opened by more than one application.
This is like this on all windows systems afaik, it’s how m$ handle midi-ports.
From what i can tell you still have to make a ms/ls split of the val1 value to get to the result you need.
You can do this using the bigInteger class, Atom posted an example here:http://ctrlr.org/forums/topic/converting-bytes/
Can’t we use tables to store links to modulators (or their components/properties) and use keys to get to them when we need them? Or is this also too taxing @ runtime because you still need to iterate over alot of keys?
From what i read here this is similar to using hash tables (the part “Tables as dictionaries”)
http://lua-users.org/wiki/TablesTutorial -
AuthorPosts