Re: Lemur 5
Posted: 15 Mar 2014 19:13
Great update Lemurguys .
Troubleshoot, share solutions, and explore Lemur programming with a community tailored to your need.
https://community.midikinetics.com/
Oh man, seriously? The new features (esp the canvas) look killer but this is absolutely crippling, dare I say a deal breaker, for anyone trying to take an OOP approach with any respectable degree of abstraction.nick_liine wrote:One can no longer use the dot notation indirectly, by placing a dot after a variable that was set to point to an object.
Code: Select all
deckLinks[1] = DeckA;
deckLinks[2] = DeckB;
deckLinks[3] = DeckC;
deckLinks[4] = DeckD;
DeckA.deckValue = 1;
DeckB.deckValue = 2;
DeckC.deckValue = 3;
DeckD.deckValue = 4;
Code: Select all
//now invalid
//m variable is from a MIDI_ARGS
//Column 1-4 objects are hidden containers that store values for visual feedback depending on which is focused upon
decl slot = m[0] - 22;
decl value = m[1];
decl channel = m[2];
decl deck = channel - 9;
decl deckObject = deckLinks[deck];
decl columnLink;
columnLink[1] = deckObject.Column1;
columnLink[2] = deckObject.Column2;
columnLink[3] = deckObject.Column3;
columnLink[4] = deckObject.Column4;
setexpression(columnLink[slot], 'filterState', value);
Code: Select all
//-----getColumLinks(d);
decl columnLink;
if (d == 4) {
columnLink[1] = DeckD.Column1;
columnLink[2] = DeckD.Column2;
columnLink[3] = DeckD.Column3;
columnLink[4] = DeckD.Column4;
} else if (d == 3) {
columnLink[1] = DeckC.Column1;
columnLink[2] = DeckC.Column2;
columnLink[3] = DeckC.Column3;
columnLink[4] = DeckC.Column4;
} else if (d == 2) {
columnLink[1] = DeckB.Column1;
columnLink[2] = DeckB.Column2;
columnLink[3] = DeckB.Column3;
columnLink[4] = DeckB.Column4;
} else {
columnLink[1] = DeckA.Column1;
columnLink[2] = DeckA.Column2;
columnLink[3] = DeckA.Column3;
columnLink[4] = DeckA.Column4;
}
return columnLink;
Code: Select all
decl t = MasterContainer.DeckObj.Content.Turntable.RemixControl;
setexpression(t.BottomLeft.CaptureSource, 'source', value);
Code: Select all
decl t = MasterContainer.DeckObj.Content.Turntable.RemixControl.BottomLeft.CaptureSource;
setexpression(t, 'source', value);
I also ran into this (see my posts a page or two back) and with liberal use of findobject() and getexpression() you can pretty much keep your data structure intact and use very similar code to access the info. I personally hate very long if..then..else constructs, so I worked hard to avoid that kind of code duplication.Traxus wrote:Oh man, seriously? The new features (esp the canvas) look killer but this is absolutely crippling, dare I say a deal breaker, for anyone trying to take an OOP approach with any respectable degree of abstraction.nick_liine wrote:One can no longer use the dot notation indirectly, by placing a dot after a variable that was set to point to an object.
What if I've got a heavy template that would otherwise duplicate a large compound object. Rather than pull a copy/paste you can just build the interface with the display logic, and then build two (or more) hidden objects loaded with functions that control/track the heavy lifting so that all the faders and knobs and so forth only have to exist once.
So for instance, if you've got 2 or more decks in DJ software, and are listening to midi out on all of them, storing these values, and updating the display based on which deck is focused/displayed in the template, you could save a ton of template space by building the display interface once and storing the values and so forth elsewhere...
I've also utilized variables to store objects when the chain I need to access is too long (lemur seems to error out when an object chain is longer than 6 or 7 objects but not when you store part of that chain in a variable and then tag the rest on the end)...
What is the reasoning behind removing support for this syntax? The new canvas capabilities sound amazing but this is a pretty limiting trade off imo...
If 'display' is an expression, all you need to do is "MIDI_ARGS = display", expressions can not have child expressions.whatisvalis wrote:With the update how do i now do the following?
MIDI_ARGS=display.value;
display is an expression
We have yet implemented a workaround the 256 array limit. It is on the wishlist.sculptair wrote:Any word on whether Liine increased the 256 bit limitation? I've been trying to learn subtractive analog synth using analog604's Mophodashboard and my Mopho desktop, but have been handicapped by the inability of Lemur to load all of the parameters of a Mopho preset.
Max memory will go from 32MB to 48MB in 5.0.2newtfish wrote:Yes, I also am noticing that the new 5 editor shows 5% higher template size than 4 editor.
Why is this?
Is it not possible to remove the limit on the editor? Keep the template size monitor there to let us know where we are. But dont truncate our templates when loading them up, or stop us from adding objects once we reached the limit. Seems like a sledgehammer is being used to crack a nut here. If the lemur ipad app cant handle the size then I guess we can only blame ourselves then for going over the limit....
I cant say Ive had any problems with templates that are 100% filesize on the ipad app.
Haven't messed with findobject yet, but it loos as though it takes a string of an objects node path as a paramater (rather than a raw object node path as per setexpression() or most other functions)?oldgearguy wrote: I also ran into this (see my posts a page or two back) and with liberal use of findobject() and getexpression() you can pretty much keep your data structure intact and use very similar code to access the info. I personally hate very long if..then..else constructs, so I worked hard to avoid that kind of code duplication.