Home › Forums › General › Using Ctrlr › Can I copy all the faders from one tab to another without copying all the tabs?
Tagged: groups and tabs
- This topic has 88 replies, 4 voices, and was last updated 6 years, 3 months ago by human fly.
-
AuthorPosts
-
September 14, 2017 at 6:54 pm #72929
Hello…
I searched the forum and the web for this but I haven’t located the information I seek…
I am working on a panel for the Lexicon PCM-70 reverb unit.
This device uses the same parameter numbers across all the various algos, but with slight alterations in parameter ranges and number of parameters.
I have created a panel with 4 tabs (initially) and successfully created a panel with 29 faders.
I would like to copy all of these to the next tab, so I can make the required alterations without redoing everything from scratch.
When I used the copy, or “copy with children” commands, and paste into a newly selected tab I find that I either create a duplicate window — with all 4 original tabs — within the second tab. If I select a group of faders and try to copy/paste them into a new tab, I end up with those faders pasted on the background, and appearing in all tabs..
Is there a method I can use?
Should I be using “Layers” instead?
If I create 4 individual panels, can I merge them into tabs?
or I
Attachments:
You must be logged in to view attached files.September 17, 2017 at 10:03 am #72949yeah, very good Ctrlr question.
say you have a synth with 4 parts:
the best way for this is to create a uiGroup, and put
your first set of Modulators in it, positioned, sized, etc.
as you want them – do this on the workspace initially, not on
the uiTabs.(tell you why in a minute)then make a uiTabs, and give it 4 tabs
then make your copies of the uiGroup containing the Modulators,
and put each onto a tab.problems arise if you create group and modulators on the uiTabs,
and copy from there: copied modulators (this includes uiGroups
and uiTabs btw, they are all classified as ‘Modulators’) *retain
ownership attributes* when copied. so you need to edit/delete
these attributes once you’ve made a copy. i now always copy to the
workspace first, remove these attributes, then put the modulator/
group/tabs etc. where it needs to go, then save. seems to be the
way to avoid horrible problems, ie: everything you copied disappearing
next time you load the project. the objects are still there – you can
find them in the Modulator List – but they have jumped back into the
original container(group or tabs) at the position coordinates they
had on the workspace. the mistake then is finding them in the Modulator
List, and doing ‘make visible on canvas’, because they then jump to
top left hand corner coordinates, behind, or on top of, your panel.but i’ve got a feeling that may not answer your question 🙂
you want the same parameters to change role according to what
algorithm you select. is it just 4 algorithms? in which case,
the answer above is ok. or is it many more, ie per preset,
with dozens of presets?September 17, 2017 at 10:13 am #72950copying groups is one way. or you can multiselect modulators,
clicking the first one, then holding ‘Ctrl’ and clicking on the
rest, and pasting onto the workspace. but you can’t move them
all together after that. the advantage is that you don’t have to
have the uiGroup container (if that is an advantage, ie: to save
screen space).in practice, i’ve found that it is not too painful to grab them
and position them by hand, if you use snap positions. it is fairly
simple to copy the position coordinates and paste them in, or do
that in the Modulator List (as long as you don’t mess that up there).where things get complicated is if you changed label text size and
justification, or other attributes, and have to go through and
correct them one by one. that *is time-consuming.(i have, by now, got familiar with the effect of label ‘height’,
justification, size, etc. – as it all these affect what sizes
are available to you ie: in some situations with horizontal
sliders, for example, it can just vanish on reload, with just
the text showing, even though it looked ok when you saved. it’s
just height and justification that needs sorting out)September 19, 2017 at 3:30 pm #72970Thank you so much.. I’ll give this a try..!!
To be specific, I am trying to make it possible to access the basic algos in the unit by selecting a tab and then have the specific set of controls tailored to it
There are 7 different types of programs in the unit, and since there is no direct way to access the underlying algos I plan to have the selected tab send a program change to the unit to select the factory (ROM) preset, and then send the Ctrlr on screen Fader positions. Perhaps you have some procedural advice here, I’ve been unable to get the tab to send a simple program change (I’m such a newbie..!!). I’d like to understand the Ctrlr programming environment better.
September 20, 2017 at 1:06 pm #72971will require a bit of Lua to get the tab change to send a
midiMessage.(off top of head…and without being specific)you would associate the attribute ‘Called when modulator
value changes’ – often referred to here on the forum as
‘on value change’ or similar – with your ‘method’, which
would say eg: when this UItabs changes tab#, this midiMessage
command gets sent out.so what i suggest at this point is to have a look at some
library panels, and familiarise yourself with methods that
send midiMessages, see what they look like. i know that
sounds really unhelpful, but you’ll pick up a fair bit just
by analysing a decent relevant example (which i can’t think
of right now!) – more than i could describe textually here.it will go a bit like:
if tab0 is selected..(this progchange) will be sent out
elseif tab1 is selected..(that progchange) will be…etc.and you’ll have to use the midi bytes for progchange, as
opposed to sysex or midiCC (which i forget right now).
you may be able to do it directly via an attribute in the
properties panel – but if you can do it via lua you get
more control quite often over what you want to happen.which of course requires some first steps in lua…
expect to take a little detour for this, to get your
first method working.good panels to look at: D-50, with the partial onOff
method, it sends a midiMessage. other ones i look at
regularly (for other stuff) are dasfaker’s xp30 panel,
Carl Licroy’s JX3P and JX8P panels, goodweather’s DSI
Pro2 panel, Possemo’s Matrix1000 panel (most recent one,
i think, have it here, don’t know if it’s the same in
the library) – huge amount of info in these, without
even really knowing how to program 😀and i’ll have i little think about it. sounds like
you will just be calling that algorithm and then
having dedicated controls with the relevant parameter
names and ranges on each tab, if it’s like most
programmable multiFX, where each one offers different
function for same control layout depending on which
algo you’ve selected. er, it’s just that i’m trying
to think about something completely different at the
moment, need to ‘meditate’ upon it if i’m going to
get anything done today ..September 21, 2017 at 12:39 am #72986Thanks again for the reply..
Yes, it’s basically using the same parameter numbers and nearly identical ranges, with slight variations from algo to algo..
I suppose Lua is inevitable.. I know *nothing* about it, though.. Looking at other panems will be a great place to start, though so thanks. I was looking at the Lexicon MXP panel when I began but I was unable to see any “code” and it says “Invalid Resource” on the panel itself. The Korg Minilogue panel has a button that requests the current program and loads it into the panel, might be an approach I can modify to my panel?function loadProgramIntoPanel(midiSysExDump)
— Your method code here
modulatorValues = extractModulatorValuesFromMidiSysExDump(midiSysExDump)for key, value in pairs(modulatorValues) do
local modulator = panel:getModulatorByName(key)
local component = modulator:getComponent()if (component:getProperty(‘uiType’) == ‘uiListBox’) then
modulator:setValueMapped(value, true, true)
else
modulator:setModulatorValue(value, false, false, false)
end
–if (key == ‘vco1-octave’) then
–console(tostring(key) .. ” ” .. tostring(value))
–end
end
endIs there a Lua “library” of such functions?
As an aside, I did discover what I think is a “bug” in that the Panel isn’t passing the parameter names to the DAW when using the Audio Units Component
( here )
So I’m a bit leary to program 7 panels of 29 faders only to have them appear as “undefined” in the control surface I’m using to adjust the parameters..
Is there any way you could verify / debunk this for me?
September 21, 2017 at 8:23 am #72998here’s a little panel i just made, with buttons
controlling the uiTabs. there’s a bit of lua for
the button actions, but you don’t need to use lua
to send a midiMessage, as there is a property box
where you can enter the message you want to send.*just not with uiTabs* 🙂 got that wrong. so here,
it is the button sending the program change (which
is NOT correct here, it is just a specimen message,
you’ll have to find out what the ProgCh message is,
i can’t remember right now)(but i built you a little
demo panel..)the lua methods in this are just for controlling
what the buttons do (note the snazzy text colour
change…) – and you could have this send the
message instead if you wanted. here, it is just
selecting the componentTab number and changing
the ‘off’text featured on the button, to show
which is selected.note that i have removed the tabs on the uiTabs
by setting tab height etc. to ‘0’, because it
uses the buttons instead – nicer look, and you
can now put your uiTabs controls wherever you
want.the fader is a different object/’modulator’ each
time: appears the same but has a different value
range.so the button sends the program change, and the
fader sends the value for the parameter in the
range it needs for each.goodweather will hopefully come along and show
us how to put all those methods into one neat method
that checks all the buttons and identifies the
current one, but i haven’t worked out how to do that
yet, so separates seem to work in the meantime.note the bit of code at the beginning, that prevents
any of these from triggering when the panel is being
loaded. this is a useful little thing for buttons and
anything you don’t want to run at start-up, or else it
will. useful for panel buttons and the like.Attachments:
You must be logged in to view attached files.September 21, 2017 at 6:33 pm #73002That is a very slick looking panel..!
I’ve tried to cannibalize it for my purposes, only to discover that the PCM-70 will only accept program changes when the “PGM” button on the front panel is lit, but once it receives a sysex message it goes into a sort of edit mode, the PGM button is de-selected and any further program changes are ignored… hmmm…
Possibly will have to proceed by requesting a sysex dump of some specific location (which is only 312 bytes) and then edit the parameters from there using the assigned faders…
I’m a bit unclear about how to map the actual parameter values to the onscreen fader values.. for example, the “mix” parameter, via sysex, has a range from 462 to 562, while the parameter on the PCM-70 displays a range of 0-100. I assumed I could set the onscreen fader to a range of 0-100 the add 462 to it for the sysex range.. It’s a procedure outlined in one of atom’s tutorials “Expressions in Ctrlr” as simply “modulatorValue+N”, but somehow this is not appearing to me in the editable controller settings…
September 21, 2017 at 7:22 pm #73004i don’t know the unit.
ok. well i guess you need control over the PGM button – is there an
‘escape’ button to get you back if you don’t want to ‘write’?
you can probably continue editing until you’re ready to save, do that,
then back to PGM select. so there’ll be a ‘write’ sysex message..
??
have you got the sysex sheet? probably a good thing to stick it
up here, or the manual.the modulator+N is basically an offset vs the midi value.
so for a 0-127 pan setting for example, where you want the screen
control to display -63<0/centre>+63, it will be modulator-63
‘expression to evaluate when the midi message value from the
modulator value’but if the range is 462-562, that is beyond 0-127, so it will
involves msb/lsb (um, divide 462/128..your msb will be 03, er no,
02, – 00,01,02 – and lsb is the remainer, and so on)September 21, 2017 at 7:35 pm #73005I posted the Sysex section of the manual in another topic I created when I joined here, but here is a link to the V2.00 manual, the sysex info starting on page 53 looks identical to v3.00
Curious why I can’t make a fader / modulator that goes from 0-100 and add 462 to it?
Is the modifier value for a modulator really limited to 7 bit numbers?
September 21, 2017 at 7:54 pm #73006yes you can – judging by the k1r panel. or you can use
msb/lsb in the sysex message box.September 21, 2017 at 8:06 pm #73007Perhaps I’m not being clear…
I’m already sending the proper parameter values via sysex (462 – 562, for example)
At the moment the Ctrlr panel fader is displaying those values (462-562) as I move the fader.
The displayed parameter range in the PCM-70 is 0-100.
I would like to have the numbers displayed on the Ctrlr Panel read 0-100, matching the values displayed in the hardware.
After reading the tutorial, I got the impression that the correct way to do this was to assign the onscreen fader’s range to 0-100 and then add 462 to it to transmit the correct values required for the sysex parameter range.
This is how the procedure was described in atom’s tutorials “Expressions in Ctrlr” as “modulatorValue+N”.
I just can’t see where in the editor to change or add to the modulatorValue itself..
I hope this clarifies my conundrum..!!
September 21, 2017 at 8:32 pm #73008ok, so:
so how about you just put 0-100 on your faders, and
then edit the ‘value to send’ expression to read:
modulator+462 ? that should give you your offset,
and make the sysex send 462-562.because you want 0-100(panel value) to be 462-562(sysex value)
that’s how that box works.
and you do it in reverse for incoming values from the device
if you want 2way panel updating, with ‘evaluate…from midi message’,
the next box down.edit: i *think* the msb/lsb is dealt with together automatically,
have to have another look at the k1r panel.September 21, 2017 at 8:40 pm #73009ok, so he appears to put ‘MS LS’ for those 2 bytes.
i don’t know how you are doing the sysex message?
it seems like it would need 2 bytes for value.
since most midi values are in 0-127 range,
especially if the value range is 0-100.
since 462-562 sits across 2 full 0-127 ranges, it
is probably using msb/lsb, ie: the sysex entry has
‘MS LS’ (correct?)September 21, 2017 at 8:46 pm #73010Yes, exactly… I’m using MS LS to send the values in the sysex stream, and setting the ranges to 462 – 562 (etc) for each parameter…
September 21, 2017 at 8:59 pm #73011Ok, so I want to create a new “method”,, and call it something like “Add462”
What is the syntax to offset the sent value?
Add462 = function(–[[ CtrlrModulator –]] modulator, –[[ number –]] numericModulatorValue)
return numericModulatorValue
endSeptember 22, 2017 at 1:54 am #73016Maybe something like this to split large values greater than 127 into more than one byte?
function Add462(mod,value,source) if value > 511 then MSB=0x03 LSB=value -512 elseif value > 255 then MSB=0x02 LSB=value -256 elseif value > 127 then MSB=0x01 LSB=value -128 elseif value < 128 then MSB=0x00 LSB=value end panel:sendMidiMessageNow(CtrlrMidiMessage( {0xf0, 0x06, 0x00, ???, ???, MSB,LSB,0xF7})) end
September 22, 2017 at 2:16 am #73017hey that looks really good.
why doesn’t the ‘expression to evaluate’ box work here?
does it only work up to 128? doesn’t work with MSB?am looking at the K1r panel, which uses msb, and he uses
the numbers straight, without that box, and puts ‘MS LS’
in the sysex message.September 22, 2017 at 2:48 am #73018Thanks Guys…
I’m not having any trouble sending the MSB / LSB Sysex to the unit.
That is already working perfectly.
It’s just that the Ctrlr panel shows 462-562 as the values for the mix parameter, for example, (which are the sysex values I am sending across the 10 bits) and the Hardware unit correspondingly displays 0-100%.
What I would like is to have the Ctrlr panel controls to reflect the “real” parameter values (i.e. 0-100%), so looking for a way to “map the displayed values”, or similar etc..
I’d also like those values and parameter names to be visible in the Audio Units Host, which appears broken (?), with every parameter showing up as “undefined” in my DAW (Logic Pro)
September 22, 2017 at 3:06 am #73020have a look at this. seems to be sending msb changes
to midi0x: see panellook at the box ‘expression to evaluate’.
fader range is 0-100, and the box has ‘modulator value+462’.check its output: the panel is saved with loopbe1 selected,
so change that to whatever midi out you have.Attachments:
You must be logged in to view attached files. -
AuthorPosts
- The forum ‘Using Ctrlr’ is closed to new topics and replies.