# Lemur and LPX: bidirectional?



## teammwrp (Jun 19, 2018)

Hi, new here.

Is there a way to set up Lemur such that it can tell which track is selected in Logic and change its display/available options from that selection?

Thanks


----------



## WindcryMusic (Jun 20, 2018)

Not if you are limiting yourself to only those two pieces, as far as I know, but OSCulator (highly recommended in any event) has a Logic Pro control surface plugin that adds some bidirectional capabilities, including but not limited to track selection. I’m in the process of setting up a Lemur <-> OSCulator <-> LPX template; I do have it auto-selecting the correct page of articulations in Lemur whenever the track is changed in LPX, and it works beautifully.


----------



## teammwrp (Jun 21, 2018)

WindcryMusic said:


> Not if you are limiting yourself to only those two pieces, as far as I know, but OSCulator (highly recommended in any event) has a Logic Pro control surface plugin that adds some bidirectional capabilities, including but not limited to track selection. I’m in the process of setting up a Lemur <-> OSCulator <-> LPX template; I do have it auto-selecting the correct page of articulations in Lemur whenever the track is changed in LPX, and it works beautifully.


That's good to hear!


----------



## bpford (Jun 21, 2018)

WindcryMusic said:


> Not if you are limiting yourself to only those two pieces, as far as I know, but OSCulator (highly recommended in any event) has a Logic Pro control surface plugin that adds some bidirectional capabilities, including but not limited to track selection. I’m in the process of setting up a Lemur <-> OSCulator <-> LPX template; I do have it auto-selecting the correct page of articulations in Lemur whenever the track is changed in LPX, and it works beautifully.



I set this up as well at some point but I remember it being contingent on having a template in logic that is locked in...meaning you can't change track names or, in some cases, reorder your tracks. It seemed inflexible and a bit finicky.

What method are you using? Would you mind sharing your Lemur file?


----------



## WindcryMusic (Jun 21, 2018)

bpford said:


> I set this up as well at some point but I remember it being contingent on having a template in logic that is locked in...meaning you can't change track names or, in some cases, reorder your tracks. It seemed inflexible and a bit finicky.
> 
> What method are you using? Would you mind sharing your Lemur file?



In my case the track names do have to be exact matches for what Lemur expects, but it hasn’t been a problem for me since I have very much standardized my naming scheme anyway, and I’m primarily going to be using this with a template where the track names are pretty much set in stone. Track order hasn’t been an issue for me at all, though ... I’ve changed things around a number of times without issues. In fact I think it’s kind of beautiful how it all “just works“. Also, I have a nice little partial string match function that someone else here on VI-C came up with, which I could put to use for even more relaxed track name matching someday if I ever start having problems with the exact naming scheme.

Fundamentally, what I’m doing is loading up a bunch of expressions in Lemur, encapsulated within a dedicated TrkNames container, each of which contains a vector with the track name string and then a few indexes to select the right articulation interface, pane and articulation set. Then I have a function watching for the track change OSC messages from Logic, at which point it iterates through all of the expressions in the TrkNames container until it finds a match. At that point it puts the correct interface and pane into focus, and then set a separate global expression with a value identifying the articulation set, and THAT expression change causes another function to be triggered, which resets the button names and visibilities on that pane as needed for that specific articulation set (relying upon another set of expressions in a different dedicated Artics container, each of which contains a vector of references to expressions in yet another container that describe each articulation ... I got this idea from a YT video by Mihkel Zilmer, another composer who frequents this forum, even though his videos are about using Lemur with Cubase).

Sorry, but I don’t think I’m going to want to post my Lemur template when it is finished, since it is very specific to my setup and dependent upon a number of other components including a customized Osculator setup with a whole suite of OSC commands that I’ve defined for my own use, plus ARTzID v2, and then some Kontakt multiscripting I’ve started doing for some tracks. However, I do have the thought in mind of making a series of YT videos on how it all works together once it is finished, along the lines of what Mihkel did, but using the Logic/Osculator/Lemur approach.


----------



## bpford (Jun 21, 2018)

WindcryMusic said:


> In my case the track names do have to be exact matches for what Lemur expects, but it hasn’t been a problem for me since I have very much standardized my naming scheme anyway, and I’m primarily going to be using this with a template where the track names are pretty much set in stone. Track order hasn’t been an issue for me at all, though ... I’ve changed things around a number of times without issues. In fact I think it’s kind of beautiful how it all “just works“. Also, I have a nice little partial string match function that someone else here on VI-C came up with, which I could put to use for even more relaxed track name matching someday if I ever start having problems with the exact naming scheme.
> 
> Fundamentally, what I’m doing is loading up a bunch of expressions in Lemur, encapsulated within a dedicated TrkNames container, each of which contains a vector with the track name string and then a few indexes to select the right articulation interface, pane and articulation set. Then I have a function watching for the track change OSC messages from Logic, at which point it iterates through all of the expressions in the TrkNames container until it finds a match. At that point it puts the correct interface and pane into focus, and then set a separate global expression with a value identifying the articulation set, and THAT expression change causes another function to be triggered, which resets the button names and visibilities on that pane as needed for that specific articulation set (relying upon another set of expressions in a different dedicated Artics container, each of which contains a vector of references to expressions in yet another container that describe each articulation ... I got this idea from a YT video by Mihkel Zilmer, another composer who frequents this forum, even though his videos are about using Lemur with Cubase).
> 
> Sorry, but I don’t think I’m going to want to post my Lemur template when it is finished, since it is very specific to my setup and dependent upon a number of other components including a customized Osculator setup with a whole suite of OSC commands that I’ve defined for my own use, plus ARTzID v2, and then some Kontakt multiscripting I’ve started doing for some tracks. However, I do have the thought in mind of making a series of YT videos on how it all works together once it is finished, along the lines of what Mihkel did, but using the Logic/Osculator/Lemur approach.



OK. Cool, yes this is exactly how I was doing it as well, probably just not as sophisticated as you. I think I abandoned it because at the time, I wasn't going to do a set in stone template. But I've changed tact on that. Would love to see a video explanation at some point, though, since I'm going to revisit it. 

Are you manually inputting your articulation names into your containers/vectors? 

If only Logic allowed you to extract the data in an articulation set...


----------



## WindcryMusic (Jun 21, 2018)

bpford said:


> OK. Cool, yes this is exactly how I was doing it as well, probably just not as sophisticated as you. I think I abandoned it because at the time, I wasn't going to do a set in stone template. But I've changed tact on that. Would love to see a video explanation at some point, though, since I'm going to revisit it.
> 
> Are you manually inputting your articulation names into your containers/vectors?
> 
> If only Logic allowed you to extract the data in an articulation set...



Yes, I’m manually inputting the names of the individual articulations (well, cutting and pasting them one at a time, since I can only create one expression at a time). But as far as creating the vectors of articulations that apply to each track/patch, that I have spreadsheets set up for: I create a spreadsheet row for each articulation on the pane (note that each of my articulation panes in Lemur supports as many as a dozen or more tracks, e.g., all of the various Spitfire string libraries), assign a “short name” and the UACC number (or an appropriate CC32 number for non-Spitfire libraries), then have a column of checkmarks for each track/patch in which I check off the supported articulations, and then another column of formulas that automatically accumulates a comma-delimited list of articulation short names for each track/patch, which I can then cut and paste in a single operation. So at least that part is a lot easier than it would be without the spreadsheet.


----------



## bpford (Jun 21, 2018)

WindcryMusic said:


> Yes, I’m manually inputting the names of the individual articulations (well, cutting and pasting them one at a time, since I can only create one expression at a time). But as far as creating the vectors of articulations that apply to each track/patch, that I have spreadsheets set up for: I create a spreadsheet row for each articulation on the pane (note that each of my articulation panes in Lemur supports as many as a dozen or more tracks, e.g., all of the various Spitfire string libraries), assign a “short name” and the UACC number (or an appropriate CC32 number for non-Spitfire libraries), then have a column of checkmarks for each track/patch in which I check off the supported articulations, and then another column of formulas that automatically accumulates a comma-delimited list of articulation short names for each track/patch, which I can then cut and paste in a single operation. So at least that part is a lot easier than it would be without the spreadsheet.



Oh that's smart. 

I use ARTzID, so I just have all the keyswitches as buttons on the Lemur interface sending out C-2 through C1, and then depending on which track I select in Logic, it just renames the labels of each of those buttons corresponding to the stored articulation list associated with that instrument. ARTzID and the logic articulation sets take care of the rest.

The shortened name workaround to the character limit is a revelation though. I hadn't quite figured out how I was going to fit some instruments with 30+ articulations into one expression, so thanks for that tip.

It would be great if there was a little program that could parse the .plist files of all the already typed names in my logic articulation sets, grab the relevant info and spit out an xml or csv file.


----------



## WindcryMusic (Jun 21, 2018)

bpford said:


> Oh that's smart.
> 
> I use ARTzID, so I just have all the keyswitches as buttons on the Lemur interface sending out C-2 through C1, and then depending on which track I select in Logic, it just renames the labels of each of those buttons corresponding to the stored articulation list associated with that instrument. ARTzID and the logic articulation sets take care of the rest.
> 
> The shortened name workaround to the character limit is a revelation though. I hadn't quite figured out how I was going to fit some instruments with 30+ articulations into one expression, so thanks for that tip.



Glad to hear that description might have helped a bit. I use three character abbreviated names, e.g. lng=Long, l8v=Long Octaves, etc. Including commas and the surrounding brackets, and since I believe an expression is limited to 256 characters, that allows for 63 articulations. And my articulation panes can accommodate a maximum of 60 buttons, which works out nicely.

One (perhaps over the top) complexity of my template is that I wanted to have the same types of articulations in the same place in the template across all instruments, so that (for example) I always know the standard long/sustain patches are in one area, the shorts in another area, effects in another, legatos along the bottom, etc. The idea is to develop muscle memory for where certain articulations are, rather than having to always look. And since the largest subset of my libraries are from Spitfire, I’m using UACC for all of them, to avoid having to create my own mappings for all of those libraries. But that introduces some complexities when I try to make other libraries as compliant as possible with those same rules, since as far as I know, you can’t dynamically alter a Lemur button to send a different range of CC values. (I too use ARTzID for much of that, whereas for the Spitfire stuff ARTzID is in most cases just set to pass through the UACC values unchanged, while sparing me from the issue of having articulations assigned to mod wheel events and so forth.)


----------



## WindcryMusic (Jun 21, 2018)

bpford said:


> It would be great if there was a little program that could parse the .plist files of all the already typed names in my logic articulation sets, grab the relevant info and spit out an xml or csv file.



P.S.: I don’t know of such a program, but it seems to me that it would be quite easy to write, even with just a scripting language like Python. If someone else hasn’t done one by the time I have some free time again, I might even have to try making one myself. Sorry to say that I don’t need it for my own template building since I am working top-down starting with Lemur, and plan to create the Logic articulation sets from the ARTzID setups using nameX.


----------



## bpford (Jun 22, 2018)

WindcryMusic said:


> P.S.: I don’t know of such a program, but it seems to me that it would be quite easy to write, even with just a scripting language like Python. If someone else hasn’t done one by the time I have some free time again, I might even have to try making one myself. Sorry to say that I don’t need it for my own template building since I am working top-down starting with Lemur, and plan to create the Logic articulation sets from the ARTzID setups using nameX.



My brother, bless him, hooked me up with a shell script to run in terminal, so that's hours of my life saved.

I'm not clear on why, if you're using ARTzID, you wouldn't just keep your switches consistent in Lemur and adjust your articulation ID's so that they are the same ID number for each articulation? Wouldn't that be less complicated?


----------



## WindcryMusic (Jun 22, 2018)

bpford said:


> I'm not clear on why, if you're using ARTzID, you wouldn't just keep your switches consistent in Lemur and adjust your articulation ID's so that they are the same ID number for each articulation? Wouldn't that be less complicated?



For some libraries I’m sort of doing that, but too many of my libraries don’t work with the UACC script, which IIRC is the only ARTzID script that allows tweaking each and every CC in an independent fashion, because they can’t select articulations by CC value. (Okay, the OT script can direct articulations independently, too, but it is limited to only 16 articulations, and just about all of my tracks are set up with more than that.) I’ve ended up using the Combinatrix a lot for the non-SF libraries, but there I have to assign contiguous segments of keyswitches to each MIDI channel in Kontakt, which means I can’t use ARTzID to juggle the individual articulations to respond to the same CC values from Lemur. 

I wish ARTzID has a script that would be sort of like UACC, but instead would allow setting the combination of a MIDI channel and a keyswitch (not a CC) value … it would be another big interface, even if it was constrained to something like 64 inputs, but it would simplify a lot of my setups.

And then there’s the Cinematic Studio Strings script, hehe. I’m creating a unique articulation page just for that one, too.


----------



## Peter Schwartz (Jun 22, 2018)

Hi Windcry, maybe we've talked about this before, but write to me at the support email address with a description of what you're looking for, and let me see what I can come up with.


----------



## WindcryMusic (Jun 23, 2018)

Peter Schwartz said:


> Hi Windcry, maybe we've talked about this before, but write to me at the support email address with a description of what you're looking for, and let me see what I can come up with.



Thanks, Peter. Actually, I've started dabbling with something tonight, and I might be able to do a bit more than that ... if so, I'll let you know offline within the next several days.


----------



## Peter Schwartz (Jun 23, 2018)

Got your email, thanks! Now check your email!


----------

