Forum Replies Created
-
AuthorPosts
-
OK, thanks dnaldoog, I think I have my head around it now.
I’m off to give it a go on the PCM80 Panel I have on the go at the moment.
- This reply was modified 3 years, 5 months ago by spiffo.
OK I’ll answer some of this myself, please find attached a Layers Experiment.
The Order of the Layers is important even when not in Edit Mode, as it affects what is Visible and what is NOT Visible.
As far as I can work out, Layers at the bottom of the Layer Editor window are in the Foreground and Layers at the top of the list are in the Background, so if you have Modulators in the same physical X, Y space then you need to make sure that any modulator which needs to be visible on top of another is lower down in the list, closer to the Foreground if you will, or it could get hidden behind!
For instance with this panel attached if you move Layers 3 or 4 up higher in the list than Layers 1 and 2 then they end up getting hidden behind the tabs (which are on Layers 1 and 2).
Attachments:
You must be logged in to view attached files.Strange, I just opened it there and it works fine for me!
I’ve noticed that with the uiGroups you have to be careful not to accidently move one that’s on top of another because if you do it gets automatically assigned to the lower group again and the whole thing stops working again π
Basically you’re right, probably better off with layers, with that in mind, some questions:
1 When in Layer Editor the Layer listed at the bottom is the only one you can Edit, is that the only consequence of the list order?
2 Does a Layer always cover the entire area of the Panel, with you’re example they seem to?
3 If I used layers then personally I would want certain areas of the Panel to remain unaffected whilst other localised areas changed layers depending on something else, is that possible?- This reply was modified 3 years, 5 months ago by spiffo.
OK, after more testing, please find attached 2 Test Panels, one with uiGroups on top of one another and another with uiTabs
It is definitely possible to layer (for want of a better word) Tabs and Groups on top of one another and then make selective ones Visible / Invisible.
I was struggling with my PCM80 Panel but doing things in the following order seems to work:
1 Delete any text from the ‘Component Generic – Group’ entry
2 Un-Tick the ‘is component a member of a group’, the uiGroup will leap to the 0,0 position on the Panel
3 Drag the uiGroup back down to it’s original position
4 Check that in the Component Generic section that there is nothing in the ‘Group’ entry and ‘is component a member of a group’ is stil un-tickedAt the moment that is working, I can put 4 uiGroups in the same physical place on the Panel and make only one visible at any one time.
Attachments:
You must be logged in to view attached files.Mmmmm, I spoke too soon.
Placing one uiGroup on top of another one automatically makes the one on top a member of the lower group. So that means that setting the lower uiGroup invisible automatically makes all the other uiGroups on top of it invisible as well. If you set both uiGroups visible then you end up with a jumble of modulators from both groups all visible at the same time, which is not what I was after at all!
Removing the ‘Component Generic – Group’ setting or unticking the ‘Is component a member of a group’ doesn’t seem to make any difference. If you have one uiGroup on top of another one then it belongs to the lower group and that’s that!
I’m going to take a break and see if any divine inspiration strikes me when I’m doing something else π
Mmmmmm, that’s interesting I was solving this particular problem by using uiGroup Modulators on top of each other and then just setting them to visible / invisible like this:
panel:getModulatorByName(“plate_reverb_group”):getComponent():setVisible(false)
panel:getModulatorByName(“chamber_reverb_group”):getComponent():setVisible(true)
panel:getModulatorByName(“infinite_reverb_group”):getComponent():setVisible(false)So what is the killer advantage of using Layers then?
I mean what am I missing out on?No I never found an answer to this one, basically I gave up, and just continued in stand alone mode.
Yes, deleting the cache file was definitely one of the things I tried.
And yes, I was using Cakewalk on PC.
A test panel would be a good idea, if I ever finish this Lexicon PCM80 Panel I’ll come back to it.
August 14, 2020 at 8:36 pm in reply to: SysEx Formula for 4 Bytes of Nibblized Parameter Data? #119415Yep, the LFO Rate goes from 0 – 2500 (Decimal), 0 – 25 Hz in 0.01Hz increments!
That’s the largest range I can see looking through the MIDI Implementation, so actually you could do that in 3 Nibblized Bytes rather than 4.
I guess they knew 2 Bytes wasn’t going to cut it so just decided to go with 4, but as far as I can see so far, the highest MSB is always going to be 00.
August 14, 2020 at 5:20 pm in reply to: SysEx Formula for 4 Bytes of Nibblized Parameter Data? #119412For the record, on a Lexicon PCM80, that needs it’s parameters sending in 4 Bytes of Nibblized Data:
local lfo_rate_value = BigInteger(mod_lfo_rate:getModulatorValue())
local lsb1 = lfo_rate_value:getBitRangeAsInt(0,4)
local lsb2 = lfo_rate_value:getBitRangeAsInt(4,4)
local msb1 = lfo_rate_value:getBitRangeAsInt(8,4)
local msb2 = lfo_rate_value:getBitRangeAsInt(12,4)local lfo_rate_SysEx = string.format(“F0 06 07 00 0B 01 01 00 %.2x %.2x %.2x %.2x F7”,lsb1, lsb2, msb1, msb2)
panel:sendMidiMessageNow(CtrlrMidiMessage(lfo_rate_SysEx))
This works a treat!
August 13, 2020 at 8:38 pm in reply to: SysEx Formula for 4 Bytes of Nibblized Parameter Data? #119402After searching for a bit longer I came across a post from Possemo saying he doesn’t know of a way to split the Parameter Value over 4 Nibblized Bytes using ls ms in the SysEx Formula.
I guess I’ll have to use a LUA script then, unless someone knows different?
- This reply was modified 3 years, 7 months ago by spiffo.
So, you have a script that intentionally changes the value of a modulator but that you donβt want to unintentionally trigger a lua script, activated by that modulator when the value of that modulator changes.
For this purpose you have written another Lua script that sorts out the source of the value change.Well something like that but not exactly. My original post was just to see what methods people were using to block LUA Scripts from running when they don’t need to.
And everyone has been very helpful and I now have essentially 3 methods of attack:
1 Use setValue instead of setModulatorValue, you can stop LUA Scripts triggering if the Modulator doesn’t change value
2 Use Variables and Timers to stop any acivity for a certain amount of time
3 Pass the Mod, value & source into the function and use the source in an if statement to determine whether the script runs or notrunsource = function(–[[ CtrlrModulator –]] mod, –[[ number –]] value, –[[ number –]] source)
Is that just an alternatively way of writing:
function runsource(mod,value,source) ?
I’ve just tried and both ways seem to work, so this could definitely be a way forward!
Also I thought maybe you could just pass the source into the function like:
function runsource(source) but you can’t it seems, you need to do the full (mod,value,source) as they all appear to be passed into the function it that particular order.To prevent Lua functions to be fired you indeed need to set a boolean, add a test at the beginning of all your βOnChangeβ methods, launch a timer to reset the boolean after all methods have gone through the test.
Iβm using this for loading data in all modulators from a file.
Before starting the load, I set bLoadingProgram=true. In each OnChange methods iβm testing if bLoadingProgram == true and doing a direct return in that case.
All methods will be triggered due to the load of each parameters.
I also start a timer at load. Set it to enough time to have all your methods processed but not too much.
When stopping the timer, reset the boolean to false so your methods are executed nicely on manual turn of a button.Yep that could be another way, I already have a Test & Timer running at startup to stop any unnecessary activity but another Test and another Timer for stopping certain scripts from running when not needed would be another way forward.
“The more you learn, the more you realise how little you know”
Use the source
I think this is where you can use that mysterious third parameter to a callback function βsourceβ β I havenβt tested this and it may take some experimenting, but something like:
I’ve been staring at this stuff, but not being a coder by trade, actually an Electronics Engineer so much happier with hardware, I can’t make that much sense of it:
https://github.com/RomanKubiak/ctrlr/blob/master/Source/Lua/CtrlrLuaModulator.cpp
processor.setValueGeneric (CtrlrModulatorValue (newValue, CtrlrModulatorValue::changedByLua), force, false);
The line above, does that mean that when the Modulator Value gets set it also records that it was changedbyLUA?
value(“changedByLua”, 5),
That line above is at the bottom of the page, so does that mean that 5 is passed into the function?
If you aren’t a coder, this reference material is difficult to interpret for the newbie.
And some quick testing of setModulatorValue(var, boolean, boolean, boolean)
setModulatorValue(var, vst, midi, ui)
vst & ui appear to do nothing, I think that is well known?
midi if set to true the panel sends a MIDI Message whether the Modulator changes value or not
midi if set to false the panel does NOT send a midi message whether the Modulator changes value or notSo my conclusion is that dnaldoog is correct, I am better off using setValue, it gives a much better range of control over what happens, but it still won’t stop those LUA scripts from running if the Mod changes value π
Thanks, guys!
- This reply was modified 3 years, 9 months ago by spiffo.
yep, I was kinda wondering if someone would say something like that, at the time I could not thnk of another way to do it.
I’ve finished testing the setValue(variable, boolean, boolean) and here are my results:
setValue(var, force, mute)
mute = if true MIDI never sent, if false MIDI is sent only if the Modulator changes value
force = if true LUA Script always runs, if false LUA script only runs if Modulator changes valueSo basically you can mute the MIDI going out but you can NOT stop the LUA, if the Mod changes value it’s going to get triggered!
So just to clarify then, if I substitute:
setModulatorValue(variable, false, false, false)
for
setValue(variable, false)
No MIDI Message will be sent from the Modulator and no LUA Script will be triggered either?
@param newValue the value to set
@param force force value change
*/
void setValue(const int newValue, const bool force=false, const bool mute=false);
void setValue(const int newValue, const bool force=false);I lifted the above from github but it doesn’t seem to shed much light on the subject, force what, mute what exactly?
I think I need to do some testing.- This reply was modified 3 years, 9 months ago by spiffo.
Ah ok, it just confused me because it quite clearly states the limit is 16mb in the Download Window!
Cheers, as always.
OK, I’ve optimsed some of the larger graphics and got the file size down to 1.8mb
I still get the HTTP Error !
Thinking about it, I could optimise further as I use a lot of the same background image but just at different sizes, if I just use one large image then ‘stretch to fit’ in all cases I can get away with just the one background image only?
But there still seems to be something wrong with the Worpress Settings, can you confirm that you cannot create a Download any bigger than 1mb?
- This reply was modified 3 years, 9 months ago by spiffo.
Yep, it’s the ‘Compressed Binary + Resources’
It’s as big as it is, what can I say?
I could slim it down a bit by reusing more of the same graphics, switching to lower quality .jpg instead of .png, etc but that’s a lot more work for me and I’ll never get it under 1mb.
So my point is that there seems to be something wrong with the WordPress settings?
OK, it could be a size limit thing.
I just tried a small file and that worked fine.
My new updated DX11 Panel is 3.7mb which is below the 16mb limit that is stated but still ???
UPDATE: Yep anything over approx 1mb is giving me an HTTP Error
- This reply was modified 3 years, 9 months ago by spiffo.
-
AuthorPosts