Home Forums General Using Ctrlr Can I copy all the faders from one tab to another without copying all the tabs?

This topic contains 88 replies, has 4 voices, and was last updated by  human fly 1 month, 1 week ago.

Viewing 20 posts - 1 through 20 (of 89 total)
  • Author
    Posts
  • #72929
    zmix
    zmix
    Participant

    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.
    #72949

    human fly
    Participant

    yeah, 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?

    #72950

    human fly
    Participant

    copying 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)

    #72970
    zmix
    zmix
    Participant

    Thank 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.

    #72971

    human fly
    Participant

    will 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 ..

    #72986
    zmix
    zmix
    Participant

    Thanks 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
    end

    Is 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?

    • This reply was modified 5 months ago by zmix zmix.
    • This reply was modified 5 months ago by zmix zmix.
    #72998

    human fly
    Participant

    here’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.
    #73002
    zmix
    zmix
    Participant

    That 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…

    #73004

    human fly
    Participant

    i 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)

    #73005
    zmix
    zmix
    Participant

    I 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?

    #73006

    human fly
    Participant

    yes you can – judging by the k1r panel. or you can use
    msb/lsb in the sysex message box.

    #73007
    zmix
    zmix
    Participant

    Perhaps 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..!!

    #73008

    human fly
    Participant

    ok, 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.

    #73009

    human fly
    Participant

    ok, 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?)

    #73010
    zmix
    zmix
    Participant

    Yes, 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…

    #73011
    zmix
    zmix
    Participant

    Ok, 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
    end

    #73016
    dnaldoog
    dnaldoog
    Participant

    Maybe 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
    #73017

    human fly
    Participant

    hey 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.

    #73018
    zmix
    zmix
    Participant

    Thanks 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)

    #73020

    human fly
    Participant

    have a look at this. seems to be sending msb changes
    to midi0x: see panel

    look 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.
Viewing 20 posts - 1 through 20 (of 89 total)

You must be logged in to reply to this topic.

Comments are closed.