Demo panel for MIDI receive/transmit routines

Home Forums General Using Ctrlr Demo panel for MIDI receive/transmit routines

Viewing 20 posts - 21 through 40 (of 71 total)
  • Author
    Posts
  • #73211
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    …meanwhile.. thinking of a way to save parameter values
    to presets…(different thing here, another little detour):

    there’s a method called panelSaveCurrent, and the preset buttons
    display which is active with a ‘led’ above it: this is just a
    label with a text hyphen, which changes colour for off(dark)/on(orange)

    (this is to avoid using an imported image, and because Ctrlr doesn’t have
    a native LED graphic)

    so, i was thinking that if ‘save’ checked “uiLabelTextColour” for all
    button ‘leds’ to find out which one is ‘on’ ie: colour == FFD28008,
    then that will be the preset to be saved ie: at this point, it will
    just write the bytes to the corresponding presetData label.

    anyway, so if i could use something like this:

    for i=1,4 do
    local s=L(panel:getComponent("ledText"..i):getProperty("uiLabelTextColour"))
    		
    etc.
    end
    end

    haven’t got it to work yet, but:
    if i can get it to send a string, it can also collect the current values,
    concatenate them, and send that instead.
    well that’s the current idea anyway.

    #73212
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    ok, this works: (hehe.. 😀 but i think the 2nd part could get rid of
    all the ‘if/elseifs’ with another iteration -couldn’t get it to compile
    like that though)

    for i=1,4 do
    local s=L(panel:getComponent("ledText"..i):getProperty("uiLabelTextColour"))
    if s == "FFD28008" then 
    	if i == 1 then panel:getComponent("lcd_presetData1"):setPropertyString("uiLabelText","saved1") 
    	elseif 	i == 2 then panel:getComponent("lcd_presetData2"):setPropertyString("uiLabelText","saved2")
    	elseif 	i == 3 then panel:getComponent("lcd_presetData3"):setPropertyString("uiLabelText","saved3")
    	elseif 	i == 4 then panel:getComponent("lcd_presetData4"):setPropertyString("uiLabelText","saved4")
    	end
    end
    end
    Attachments:
    You must be logged in to view attached files.
    #73214
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    here’s another one… now it can write the parameter
    values for current preset selection to corresponding
    display – the preset buttons *do not yet retrieve the
    data*. that’s the next step, and then it will be
    assigning retrieved data to update controls, hopefully.
    (the methods need tidying up, now have stuff they don’t
    need in the preset methods)

    Attachments:
    You must be logged in to view attached files.
    #73218
    dnaldoog
    Participant
    • Topics: 4
    • Replies: 480
    • Total: 484
    • ★★

    It looks like sendMidiMessageNow doesn’t like receiving an empty string

    if string.len(memB:toHexString(1)) >0 then
    	panel:sendMidiMessageNow(CtrlrMidiMessage(memB))
    end

    Maybe the L() function is an alias for

    std::string LGlobalFunctions::stringToLua (const String &string)
    {
        return (string.toUTF8().getAddress());
    }

    Looks like it converts the string to utf8.

    Regards,

    #73225
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    this morning’s installment: preset recall.
    preset1 will recall values written to the label(should do!)
    see demo panel below.

    (edit: just saw your reply )

    edit2: all presets recall now, and the ‘send’ menu will get the
    text from any presetData label to the DataA label at the bottom.
    rockin’. 😀

    Attachments:
    You must be logged in to view attached files.
    #73228
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    It looks like sendMidiMessageNow doesn’t like receiving an empty string

    spot on: i commented out the sendMidiMessageNow line and it stopped crashing.

    ?what is utf8 ? does MIDI use that?
    (google…
    https://en.wikipedia.org/wiki/UTF-8 )
    (this wiki does not enlighten me much…in this context)

    #73229
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    YEP: that fixed it – thanks again.

    and here the ‘recv’ menu recalls values
    to parameters/updating controls.

    Attachments:
    You must be logged in to view attached files.
    #73238
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    quick attempt to add ten name bytes to the ‘preset’.
    (see assignValues and saveCurrent)

    there’s something here to change the ledtext colour,
    that i thought was working, but haven’t yet succeeded
    in reproducing it with the ‘recv’ button (don’t know
    if it would logically need to happen, if one was
    recalling data to a different preset)

    >try the 2nd file, i couldn’t remove the first attachment.
    made a quick change with hex string.

    Attachments:
    You must be logged in to view attached files.
    #73246
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    latest silly idea: i want to do something like this:
    i have an ‘external bank’, a string representing 80 bytes of data,
    that i need to retrieve, and split into 4 ‘presets’, with
    something like this (this doesn’t work):

    --convert bank to table
    	tabl_extBank = {}
    	for i=1,80 do
    	local s=L(memB)
        table.insert(tabl_extBank,s)
    	end
    	--console(tostring(tabl_extBank))

    it doesn’t like local s=L(memB) -i think it needs to be converted
    to a hex string first or something. the plan then is to select
    table items in ranges to make new hex strings or strings to
    represent the 4 presets in the bank.(any alternative ideas welcome
    for this, i’m just progressing step by step. if it compiles, give
    it a try, and then move on)

    here’s the panel:

    (btw: found i can getSize() on a memblock so that’s what i’m
    using here instead of midi message – what else can we ‘getSize’ on?
    what’s the requirement?)

    Attachments:
    You must be logged in to view attached files.
    #73253
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    *strange*: i have managed to create *new properties in the properties
    pane* -??- by using ‘custom index’ to try to define ‘uiSliderThumbColour’
    for a group of objects contained on a uiTabs.

    this now appears as a custom thumb colour, and it still has the original
    thumb colour ( and i can’t seem to get rid of the new property…)

    see file below (is anyone following the topic?)

    d*mn. will this cause problems later? do i have to go back to
    previous file version?

    Attachments:
    You must be logged in to view attached files.
    #73256
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    this is what i did:

    --custom group items
    for k=1,10 do
    modul	= panel:getModulatorWithProperty("modulatorCustomIndex",k)
    tab	= modul:getComponent():getProperty("componentTabName")
    
    if tab =="tabs_ctrlrPanel" then
    modul:setProperty("uiSliderThumbColour","FFD28008", false)
    end
    end

    so this has created a new property that only refers to ‘custom’ items
    -and doesn’t do anything to the component on the panel, which still
    has its regular “uiSliderThumbColour” property, remaining the colour
    it was before. aagh. how do i get rid of the extra property now? 🙂

    and can you suggest anything as an alternative to what i’ve done to
    select all slider components on the tab to change their thumb colour?

    #73265
    dnaldoog
    Participant
    • Topics: 4
    • Replies: 480
    • Total: 484
    • ★★

    I did that a few times and wrote a function to clear them.

    Is this what you mean? You created a new modulator that is now showing on the panel editor menu (or whatever it is called)?

    removeComponentsIcreated=function(NAME)
        --[[While developing I occasionally accidentally created a component or Modulator -- this code removes that entity--]]
        --[[ COMPONENTS --]]
        panel:getModulatorByName(NAME):getComponent():removeProperty("uiSliderThumbColour")
           --[[ MODULATORS --]]
        panel:getModulatorByName(NAME):removeProperty("uiSliderThumbColour")
    end --function
    #73267
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    umm, *nearly*: (i’m a bit worried about deleting an entire property
    that i want here ! ) – if you look at the previous panel above, and
    click on any fader modulator(component) and scroll down to the
    ‘custom’ entries, you will see an extra ‘thumb colour’ entry:
    it has TWO thumb colour entries ! 🙂 (one is orange, and the other
    is with the regular ‘component’ properties, and is blue.

    so i’ve created a uiSlider property that only refers to the ‘custom’
    attributes … pretty weird…
    it probably doesn’t matter too much, but may cause some issue somewhere
    later – but i guess it’s like a plug that doesn’t have a socket to go into,
    so may not matter, but it disturbs my..how to call it.. desire for
    organisation? anyway, it’s an ‘anomaly’.

    maybe it should be removeCustomProperty?

    #73268
    dnaldoog
    Participant
    • Topics: 4
    • Replies: 480
    • Total: 484
    • ★★

    You created a Modulator called uiSliderThumbColour (orange) , but uiSliderThumbColour is a Component (blue).

    You would need to make a backup and try something like this: 🙂

    n = panel:getNumModulators()
    for i=0,n-1 do
    mod = panel:getModulatorByIndex(i)
    mod:removeProperty("uiSliderThumbColour")
    end
    #73269
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    hang on.. i’m struggling to understand that..
    what do you mean? i *created a modulator*?
    the modulator existed beforehand, but without that property.
    i wrote and ran that method, and it created an extra ‘property’,
    as far as i can see, on an existing modulator.

    because i did(whatever it was…)
    modul = panel:getModulatorWithProperty("modulatorCustomIndex",k)
    it seems to have added the ‘new’ property to the ‘custom’-relevant
    properties.

    i’m not going to pretend i understand ‘custom’: it doesn’t behave
    as expected. i just use this normally to ‘get’ a bunch of items
    that i want to apply (normally a random) to. and in this case it
    was so that i could have the thumb colour change on all faders each
    time i switched presets which i thought could look quite cool.

    meeeeh, but i don’t have any problem going back a version, i didn’t
    do that much in between v24 and v25, lost worse stuff before.

    just thought it was an interesting little glitch. hey it looks like
    one could spend a lifetime finding out stuff like this..

    #73270
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    ker-raazy ! you da man, dnaldoog 😀
    congrats, i have fixed it with that. brilliant.

    i have replaced the line:

    modul:setProperty("uiSliderThumbColour","FFD28008", false)

    with

    modul:removeProperty("uiSliderThumbColour")

    and ran it once, and the additional property is no longer there.
    nb: this only relates to the
    getModulatorWithProperty("modulatorCustomIndex",k)
    thing that i did. not something you want to do in everyday use..

    okay, seems to be back to normal now, and will remove both of
    those bits of code, and try to do it another way.

    >see the v.26 panel here, in the method: ‘panelPreset1’: it is
    all commented out now.(you should be able to reproduce it by
    using the first part once, then the second part, once, separately)

    so: what could you suggest to change ‘thumb colour’ on all
    10 faders belonging to that uiTabs? bearing in mind that
    already have a custom index.

    (mm: really do not grasp how the ‘custom’ properties work:
    had originally assumed that they all related to each other,
    but that does not seem to be the case, and now i find out
    that it is not necessarily a viable way to ‘tag’ modulators
    in order to apply an action to them.. merits a closer look,
    detailed explanation.)

    • This reply was modified 4 years, 8 months ago by human fly.
    Attachments:
    You must be logged in to view attached files.
    #73273
    dnaldoog
    Participant
    • Topics: 4
    • Replies: 480
    • Total: 484
    • ★★

    Glad it worked for you!

    To change the thumb colour on all sliders, you could put them into an array:

    _s={"wave","coarse","fine","cutoff","reso","atk","dec","sus","rel","level"} 
    -- some example properties you can change
    for _,v in pairs(_s) do -- 'v' is each element in the array _s
    panel:getModulatorByName(v):getComponent():setProperty ("uiSliderRotaryTextColour","FF00FFFF",true)
    panel:getModulatorByName(v):getComponent():setProperty ("uiSliderRotaryFillColour","FFffFFFF",true)
    panel:getModulatorByName(v):getComponent():setProperty ("uiSliderThumbColour","FF00FF00",true)
    panel:getModulatorByName(v):getComponent():setProperty ("uiSliderValueBgColour","FF00FFFF",true)
    panel:getModulatorByName(v):getComponent():setProperty ("uiSliderValueTextColour","FF000000",true)
    panel:getModulatorByName(v):getComponent():setProperty ("uiSliderTrackColour","FF000000",true)
    
    end

    then loop through and change any property you like. There is a full list of constructor?? (property) names in :

    • panel -> modulator list -> View -> Visible Columns

    ..scroll down and you will see all the uiSlider constructors (I don’t know if that’s the right term) – looking down the list, you can see uiSliderThumbColour (you already know the name)

    #73274
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    ok, i will give that a try next.

    something else i’m stuck on, is getting my big block of data,
    the ‘bank’, which is a text string, and splitting that into
    the 4 smaller ‘preset’ strings – i’ve been trying to put it
    into a format where i can getRange()
    ie: (1,20),(21,40),(41,60),(61,80)

    so i get this far:

    -- Retrieving ext Bank
    extBank = L(panel:getModulatorByName("lcd_bankDataB"):getComponent():getProperty("uiLabelText"))
    console("Retreiving external bank : "..extBank)
    
    --make a memory block from the string
    memB = MemoryBlock(extBank)
    
    --check size of received dump
    local size = memB:getSize()
       console("midiMessageReceived: " .. size .. "bytes")
    
    if size == 80 then 	--bank dump
    console("bank dump detected!")
    end

    but then it doesn’t like this:

    --convert bank to table
    	tabl_extBank = {}
    	for i=1,80 do
    	s=extBank:toHexString(1)
      	table.insert(tabl_extBank,s)
    	end

    and tells me toHexString() is a nil value. i was then thinking
    of doing getRange() on the table.

    it also doesn’t like:
    preset1Data = L(memB:getRange(1, 20))

    (i don’t really know what i can do with L() macros)

    #73276
    human fly
    Participant
    • Topics: 124
    • Replies: 1070
    • Total: 1194
    • ★★★★

    ok, here are your slider thumbs with changing colours.
    this is fun, and very useful.

    little question: you refer to this as an array: it looks
    much like a table, using {} brackets. is that just a different
    terminology, or to be considered as something distinct from a
    table?
    (tables have an index?)

    also, seeing the form you use: _s
    why the ‘_’, and how is it that you can use the 2 characters,
    ‘_’ and ‘s’ separately? does it have to take this form? is it
    a syntax form, or just something you are in the habit of using?

    (or, alternatively, why these characters, and why is ‘s’ used
    so often? – in the same way ‘i’ is used for iterations, and i’ve
    also seen ‘k’ used, as in the custom index example previously,
    which i cribbed from methods i’ve seen.)

    Attachments:
    You must be logged in to view attached files.
    #73278
    dnaldoog
    Participant
    • Topics: 4
    • Replies: 480
    • Total: 484
    • ★★

    I don’t know why I used ‘s’ 😕 – using an underscore for arrays is a matter of personal style for me, but I think underscore + capital letter should be avoided in Lua from what I read:

    http://www.lua.org/pil/1.3.html You should avoid identifiers starting with an underscore followed by one or more uppercase letters (e.g., _VERSION); they are reserved for special uses in Lua. Usually, I reserve the identifier _ (a single underscore) for a dummy variable.

    Maybe I should say table and not array? Maybe table is the more correct term in Lua?

    i is commonly used as the index and v as the value in looping though arrays tables. If another counter is needed then j is often used and then k for key in associative arrays or tables, but of course generally variable names should have more descriptive titles.

Viewing 20 posts - 21 through 40 (of 71 total)
  • The forum ‘Using Ctrlr’ is closed to new topics and replies.
There is currently 0 users and 44 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