Can I copy all the faders from one tab to another without copying all the tabs?

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

Viewing 20 posts - 1 through 20 (of 89 total)
  • Author
    Posts
  • #72929
    zmix
    Participant
      • Topics: 9
      • Replies: 65
      • Total: 74

      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
        • Topics: 124
        • Replies: 1070
        • Total: 1194
        • ★★★★

        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
          • Topics: 124
          • Replies: 1070
          • Total: 1194
          • ★★★★

          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
          Participant
            • Topics: 9
            • Replies: 65
            • Total: 74

            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
              • Topics: 124
              • Replies: 1070
              • Total: 1194
              • ★★★★

              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
              Participant
                • Topics: 9
                • Replies: 65
                • Total: 74

                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 6 years, 7 months ago by zmix.
                • This reply was modified 6 years, 7 months ago by zmix.
                #72998
                human fly
                Participant
                  • Topics: 124
                  • Replies: 1070
                  • Total: 1194
                  • ★★★★

                  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
                  Participant
                    • Topics: 9
                    • Replies: 65
                    • Total: 74

                    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
                      • Topics: 124
                      • Replies: 1070
                      • Total: 1194
                      • ★★★★

                      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
                      Participant
                        • Topics: 9
                        • Replies: 65
                        • Total: 74

                        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
                          • Topics: 124
                          • Replies: 1070
                          • Total: 1194
                          • ★★★★

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

                          #73007
                          zmix
                          Participant
                            • Topics: 9
                            • Replies: 65
                            • Total: 74

                            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
                              • Topics: 124
                              • Replies: 1070
                              • Total: 1194
                              • ★★★★

                              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
                                • Topics: 124
                                • Replies: 1070
                                • Total: 1194
                                • ★★★★

                                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
                                Participant
                                  • Topics: 9
                                  • Replies: 65
                                  • Total: 74

                                  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
                                  Participant
                                    • Topics: 9
                                    • Replies: 65
                                    • Total: 74

                                    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
                                    Participant
                                      • Topics: 4
                                      • Replies: 480
                                      • Total: 484
                                      • ★★

                                      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
                                        • Topics: 124
                                        • Replies: 1070
                                        • Total: 1194
                                        • ★★★★

                                        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
                                        Participant
                                          • Topics: 9
                                          • Replies: 65
                                          • Total: 74

                                          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
                                            • Topics: 124
                                            • Replies: 1070
                                            • Total: 1194
                                            • ★★★★

                                            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)
                                          • The forum ‘Using Ctrlr’ is closed to new topics and replies.
                                          There is currently 0 users and 79 guests online
                                          No users are currently active
                                          Forum Statistics
                                          Threads: 2,495, Posts: 17,374, Members: 77,605
                                          Most users ever online was 12 on January 22, 2019 3:47 pm
                                          Ctrlr