[SOLVED] Lemur doesn't load text on pad when starting
-
- Newbie
- Posts: 7
- Joined: 13 Jan 2017 12:53
[SOLVED] Lemur doesn't load text on pad when starting
Hi every one,
I can't succeed in having lemur loading text for my pads when starting. For this to work, I have to load the lemur editor on my PC, load my template, start synchro (with play/stop button) and connect to my tablet. Then I have to click actualisation button to finaly have my text loaded on my tablet.
I can see the blocks (pad / switch), but no text appears on them.
I join 2 files and my jzml to a better understanding.
I can't succeed in having lemur loading text for my pads when starting. For this to work, I have to load the lemur editor on my PC, load my template, start synchro (with play/stop button) and connect to my tablet. Then I have to click actualisation button to finaly have my text loaded on my tablet.
I can see the blocks (pad / switch), but no text appears on them.
I join 2 files and my jzml to a better understanding.
- Attachments
-
- reaper-scoring04.jzml
- (41.23 KiB) Downloaded 70 times
-
- here is my templates with the text loaded
- with-text.PNG (61.28 KiB) Viewed 2787 times
Last edited by daeavelwyn on 20 Jan 2017 00:54, edited 1 time in total.
-
- Regular
- Posts: 315
- Joined: 02 Nov 2013 11:19
Re: Lemur doesn't load text on pad when starting
OnLoad is one of those poorly documented things. The manual obliquely refers to the fact that it might not work in all cases, but they really don't go into details.
What is happening in your script is that when the OnLoad is executing, the variables labels are not always "available" at the time the script executes, so the pads get initialized to blanks.
What I've done to improve my odds is to create an initialize() script at a high level and set that to onLoad with local hardcoded arrays, kind of like this:
this was defined at the project level, parallel to ColorScheme() and it worked. try moving all the initializations into there and see if that works better.
As an aside, I try to avoid using containers unless there's a very good reason. If you're doing it just for grouping, it adds another level of indirection/reference when you work with objects inside the containers. It's definitely a personal style thing, but since Lemur is limited in the number of characters in a script file and I try to minimize the number of objects it has to deal with to keep performance as good as possible. Again, I don't have any special inside information, so my assumptions may be inaccurate; it's a style thing.
What is happening in your script is that when the OnLoad is executing, the variables labels are not always "available" at the time the script executes, so the pads get initialized to blanks.
What I've done to improve my odds is to create an initialize() script at a high level and set that to onLoad with local hardcoded arrays, kind of like this:
Code: Select all
decl labels={'Show current VSTi'}, pad_lbls={'Prev Marker ','Next Marker','Prev Region','Next Region','Prev Track','Next Track','Prev Folder','Next Folder'};
setattribute(Fx.Fx,'labels',labels);
setattribute(Navigation.Navigation,'labels',pad_lbls);
As an aside, I try to avoid using containers unless there's a very good reason. If you're doing it just for grouping, it adds another level of indirection/reference when you work with objects inside the containers. It's definitely a personal style thing, but since Lemur is limited in the number of characters in a script file and I try to minimize the number of objects it has to deal with to keep performance as good as possible. Again, I don't have any special inside information, so my assumptions may be inaccurate; it's a style thing.
-
- Newbie
- Posts: 7
- Joined: 13 Jan 2017 12:53
Re: Lemur doesn't load text on pad when starting
Hi oldgearguy,
Really thanks for your answer, I thought about this solution (I mean init script), but before starting to work on, I'd prefere to know if there isn't an easier solution...the best quality of programers : laziness
Regarding the containers, you are right, it's because i'm new with lemur scipting and I'd like to keep hierarchy the more readable as possible for now
I'll probably make a more optimized script later, but for now it really fits to my needs
thanks again for your reply
Really thanks for your answer, I thought about this solution (I mean init script), but before starting to work on, I'd prefere to know if there isn't an easier solution...the best quality of programers : laziness
Regarding the containers, you are right, it's because i'm new with lemur scipting and I'd like to keep hierarchy the more readable as possible for now
I'll probably make a more optimized script later, but for now it really fits to my needs
thanks again for your reply
-
- Regular
- Posts: 315
- Joined: 02 Nov 2013 11:19
Re: Lemur doesn't load text on pad when starting
You can try keeping it the way you have it and change from having a separate variable outside the text() initialization routine to creating one local to that routine. (use adaeavelwyn wrote:Hi oldgearguy,
Really thanks for your answer, I thought about this solution (I mean init script), but before starting to work on, I'd prefere to know if there isn't an easier solution...the best quality of programers : laziness
Regarding the containers, you are right, it's because i'm new with lemur scipting and I'd like to keep hierarchy the more readable as possible for now
I'll probably make a more optimized script later, but for now it really fits to my needs
thanks again for your reply
Code: Select all
decl label = {"Text1", "text2", "Text3"};
The idea is onLoad is running when the rest of your project is still being set up, so the script that is running needs to have all it's information already defined inside it.
-
- Newbie
- Posts: 7
- Joined: 13 Jan 2017 12:53
Re: [SOLVED] Lemur doesn't load text on pad when starting
Hi olgearguy,
So, i've tested your second option which works pretty cool, thanks
I'm now having an issue with the section name (woodwinds,brass and so). I'd like to create a loop that could assign the name from a vector. This loop would be in an init script. But, I can't figure how to concatenate stuff and get it working.
Here is the loop :
The TCP_Instruments_Name is declared at the highest level of the project like this :
TCP_Instruments_Name={'Woodwinds','Brass','Percussions','Keyboard - Harp','Voices','Strings','Sound Design','Band','Ethnic','Audio Input'};
But of course, Lemur doesn't accept such a syntax. I join the new jzml file. Thanks again for the time you take to help me
So, i've tested your second option which works pretty cool, thanks
I'm now having an issue with the section name (woodwinds,brass and so). I'd like to create a loop that could assign the name from a vector. This loop would be in an init script. But, I can't figure how to concatenate stuff and get it working.
Here is the loop :
Code: Select all
//RESET : Send every Instrument sitch to ON.
decl i;
for(i=0; i<sizeof(TCP_Instruments_Name); i++)
{
ShowHide_Instruments_TCP.Toggle_ShowHide_+TCP_Instruments_Name[i]+.x=1;
}
/* here is the old assignement method
ShowHide_Instruments_TCP.Toggle_ShowHide_Woodwinds.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Brass.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Percussions.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Keyboards_harp.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Voices.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Strings.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_SoundDesign.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Band.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Ethnic.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_AudioInput.x=1;*/
TCP_Instruments_Name={'Woodwinds','Brass','Percussions','Keyboard - Harp','Voices','Strings','Sound Design','Band','Ethnic','Audio Input'};
But of course, Lemur doesn't accept such a syntax. I join the new jzml file. Thanks again for the time you take to help me
- Attachments
-
- reaper-scoring04.jzml
- (40.08 KiB) Downloaded 65 times
-
- Regular
- Posts: 315
- Joined: 02 Nov 2013 11:19
Re: [SOLVED] Lemur doesn't load text on pad when starting
The generic way to do it is to build up a string with the name of the object you want to modify then pass that to findobject() and then you can use the return value.
So, something like:
note - I don't have a Lemur available, so this is just typed in off the top of my head. I never remember if that final "tgtObj.x = 1" works or if I have to use a setexpression() construct...
So, something like:
Code: Select all
myExamplescript()
{
decl TCP_Instruments_Name={'Woodwinds','Brass','Percussions','Keyboard - Harp','Voices','Strings','Sound Design','Band','Ethnic','Audio Input'};
decl i, myObjStr, tgtObj;
for (i=0; i < sizeof(TCP_Instruments_Name); i++) {
myObjStr = 'ShowHide_Instruments_TCP.Toggle_ShowHide_' + TCP_Instruments_Name[i];
tgtObj = findobject(myObjStr);
tgtObj.x = 1;
}
}
-
- Newbie
- Posts: 7
- Joined: 13 Jan 2017 12:53
Re: [SOLVED] Lemur doesn't load text on pad when starting
ok, i've tried several way, but still can't find how to easily debug with monitor (a real console / log out and a better text editor would make scripting in lemur really better...). Anyway, here is the script :
of course, it doesn't work
Code: Select all
//RESET : Send every Instrument sitch to ON.
decl TCP_Instruments_Name={'Woodwinds','Brass','Percussions','Keyboard - Harp','Voices','Strings','Sound Design','Band','Ethnic','Audio Input'};
decl i, myObjStr, tgtObj;
for (i=0; i < sizeof(TCP_Instruments_Name); i++)
{
myObjStr = 'ShowHide_Instruments_TCP.Toggle_ShowHide_'+TCP_Instruments_Name[i]+'.x';
tgtObj = findobject(myObjStr);
setexpression(tgtObj,myObjStr,1);
}
/*ShowHide_Instruments_TCP.Toggle_ShowHide_Woodwinds.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Brass.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Percussions.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Keyboards_harp.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Voices.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Strings.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_SoundDesign.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Band.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Ethnic.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_AudioInput.x=1;*/
-
- Newbie
- Posts: 7
- Joined: 13 Jan 2017 12:53
Re: [SOLVED] Lemur doesn't load text on pad when starting
Ok, so answering to myself :
I hope I could help
Code: Select all
//RESET : Send every Instrument sitch to ON.
decl TCP_Instruments_Name={'Woodwinds','Brass','Percussions','Keyboards_harp','Voices','Strings','SoundDesign','Band','Ethnic','AudioInput'};
decl i, myObjStr, tgtObj;
for (i=0; i < sizeof(TCP_Instruments_Name); i++)
{
myObjStr = 'ShowHide_Instruments_TCP.Toggle_ShowHide_'+TCP_Instruments_Name[i];
tgtObj = findobject(myObjStr);
setexpression(tgtObj,'x',1);
}
/*
The previous loop execute the following lines :
ShowHide_Instruments_TCP.Toggle_ShowHide_Woodwinds.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Brass.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Percussions.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Keyboards_harp.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Voices.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Strings.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_SoundDesign.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Band.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_Ethnic.x=1;
ShowHide_Instruments_TCP.Toggle_ShowHide_AudioInput.x=1;*/
-
- Regular
- Posts: 315
- Joined: 02 Nov 2013 11:19
Re: [SOLVED] Lemur doesn't load text on pad when starting
So that works? If so, great you figured it out. Like I said - since Lemur isn't documented down to the lowest level, I don't know when the reference to the object works directly and when it needs to be part of the setexpression() call. In theory, the object is known and someDynamicNamedObject.x should work. In any case, hope that helps you move forward.daeavelwyn wrote:Ok, so answering to myself :
I hope I could helpCode: Select all
//RESET : Send every Instrument sitch to ON. decl TCP_Instruments_Name={'Woodwinds','Brass','Percussions','Keyboards_harp','Voices','Strings','SoundDesign','Band','Ethnic','AudioInput'}; decl i, myObjStr, tgtObj; for (i=0; i < sizeof(TCP_Instruments_Name); i++) { myObjStr = 'ShowHide_Instruments_TCP.Toggle_ShowHide_'+TCP_Instruments_Name[i]; tgtObj = findobject(myObjStr); setexpression(tgtObj,'x',1); } /* The previous loop execute the following lines : ShowHide_Instruments_TCP.Toggle_ShowHide_Woodwinds.x=1; ShowHide_Instruments_TCP.Toggle_ShowHide_Brass.x=1; ShowHide_Instruments_TCP.Toggle_ShowHide_Percussions.x=1; ShowHide_Instruments_TCP.Toggle_ShowHide_Keyboards_harp.x=1; ShowHide_Instruments_TCP.Toggle_ShowHide_Voices.x=1; ShowHide_Instruments_TCP.Toggle_ShowHide_Strings.x=1; ShowHide_Instruments_TCP.Toggle_ShowHide_SoundDesign.x=1; ShowHide_Instruments_TCP.Toggle_ShowHide_Band.x=1; ShowHide_Instruments_TCP.Toggle_ShowHide_Ethnic.x=1; ShowHide_Instruments_TCP.Toggle_ShowHide_AudioInput.x=1;*/
Once you learn a handful of standard tricks like that, scripting becomes a bit less painful.
Monitor objects can be set using Monitor.value='string'; or for multiple values, Monitor.value={'string1', 'string2'};