General

theory to "BANG" out a preset setting/bi-directional control

Started by SBPBK on .

Sign in or create an account to join the conversation.

19 posts

Topic starter
Hi,

I'm a Logic Pro user… After many hours making Lemur templates and setting things up in Logic's Environment, I am not far off from living in what I would consider a perfect Lemur world. :mrgreen:

I have enabled "bi-directional control" for all of my templates through some simple cabling in Logic's environment, making the CCs for each Lemur object correspond to the CC that the plug-in outputs for the mapped parameter, and using a simple transformer to transform the output message from "F 2" (or "Fader 2" - what is sent by default) to a Control Change on whatever MIDI channel necessary.

This bi-directional control is great if you're flipping back and forth during sound design, making changes to the plug-in settings using both the GUI and also its corresponding Lemur template. This, however, is useless when it comes to quickly going through your presets and making minor adjustments to the setting since loading a preset does not lead to every parameter outputting its newly set CC value, therefore it doesn't update the position of the objects within your template to reflect the new preset settings loaded and makes any sort of preset-based workflow not Lemur friendly, or at least not in what I would consider an ideal way.

From research I've done, there is no way to technically "bang" a preset out from a soft-synth, there are only certain workarounds that I've been able to come up with...

Since the issue at hand is that loading a preset doesn't output the CC values of the parameters that are changed upon loading the preset, you somehow need to manually engage each of the plug-in parameters that you have objects in your Lemur template assigned to in order for the values of the parameters in the plug-in's preset to be outputted (and essentially "updated) to your template.

Simply clicking on a knob on the plug-in GUI will output its CC value without changing it, but doing this for an entire plug-in (or at least the majority of the parameters in it) requires multiple clicks and is a waste of time to manually do. I considered making a "clicking" macro using a 3rd party program but this would require the GUI being open and in a specific location on the screen and is not ideal to me.

Since clicking the knobs on the GUI seemed to be the only "ghost" way (that I could figure out) of getting the CC values to output without actually changing their value, I turned to the idea of relative messages…. Before proceeding with a Lemur based version of this, I first tested it with my Livid Code which has endless knobs set to send relative messages. I mapped a single knob on the Code to ALL of the parameters of the plug-in that I had my Lemur objects mapped to, having as many as 100 parameters mapped to a single relative-message sending knob…

With this setup, in order to do a faux "bang" of a preset back out to my template, all I have to do is use this "all-controlling" single knob to send a +1 relative message followed by a -1 message. This will increase the CC values of all the plug-in parameters by 1 and then decrease them by 1, leaving all of the parameters at their original location within the preset and get them to bang out to the Lemur. I know this isn't foolproof, any parameters set to 127 within the plug-in preset BEFORE executing this +1/-1 action will ultimately end up being at 126, one CC value less than what they originally were within the plug-in, but I'd rather put up with that than not be able to bang out my settings at all. This has worked without fail for me thus far with this relative message coming from the Code.

That being said, I am wondering if it is a possibility to write a script for a Lemur object (a pad/button, ideally) to send this same relative +1 followed by a relative -1 message. I have seen the Relative Midi Objects/Templates here on the site but what I specifically am looking to do is have this type of message triggered by a pad/button so I don't have to worry about making sure I increase/decrease the knob the correct amount. Instead, simply pressing a button to trigger the messages (even if I have to press two buttons, one for relative +1 and one for relative -1) is a much more "defined" action and introduces less variables.

Any feedback/suggestions on this "relative +1/relative-1" concept of banging out presets, guidance on how to create a script for a button to send this relative message, or insight into how to trigger a "ghost" or essentially "relative 0" message to map to my parameters, would be much appreciated!

Cheers
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
I already have templates made with all my parameters already labeled, have already enabled parameter feedback through my environment setup.. That being said, is there still some sort of advantage if I were to use OSC instead? From what I'm aware, I would still need to have all the cabling in Logic's Environment in order for the messages to get sent back to the Lemur.. And are you suggesting using OSC rather than MIDI in regards to my main question of sending a +1/-1 relative message with a button? Other than the +1/-1 message, I am very pleased with how things are working out with MIDI, unless there is something about OSC that I don't know...
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
I recommend to buy TouchOSC if you haven't already, load the LogicPad template, and try it out. Or simply watch some videos on the net. It works out of the box, no configuration needed. I'm sure you'll be pleased to see what advantages OSC has to offer. Logic is one of the very few DAWs that understand OSC, so why not use it? The only reason could be that you had to rewrite your template, search for the proper OSC commands (you can look after them in the TouchOSC editor/LogicPad template), etc. Maybe there's a list somewhere.

About this +1/-1 thing, I admit I didn't understand the purpose of it. But with Lemur this shouldn't be a problem. Maybe you want to further explain what you want to do with that, or maybe it won't be necessary after you've seen what is possible with OSC.

EDIT: ah, I seem to understand. You want to have the plugin values displayed in Lemur. Sending +1 to each CC, and then -1, to get the actual state. No, these things are no more necessary with OSC. You may need to select another channel and then back, but you will have all current parameters correctly displayed, and as I said, also the parameter names, plugin name, timecode...
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
I've already looked into TouchOSC, as well as OSCulator, while researching all my possible ways of doing this. The way Logic seems to work (from my research) is that "true" bi-directional communication (where Logic has written code for a "control surface plug-in" of sorts for a specific piece of hardware/software) is available only for "supported" control surfaces (which TouchOSC recently became), but only when loaded with the template designated for Logic. I do not want to use a "general control" type of template as it is not workflow conducive, I want to have full control of my template's contents and design as they are all based around personal preference for sound design/live automation during the production process. I have no issues as far as getting Logic to talk to my Lemur is concerned, the environment makes doing so a piece of cake and actually, in my case, preferable as I have multiple templates open on various tabs, all pertaining to particular instances of softsynths (often multiple instances of the same type of softsynth) all on unique MIDI channels. This (along with toggling my control surface mode) allows me to switch between my tabs in my template, and have an almost "hardware"-esque setup, where I have all my desired synth parameters accessible for each individual instance of every synth in my session, each one located within a different tab in my template and communicating on a unique MIDI channel.

Unless I am mistaken in regards to what I said about TouchOSC and the bi-directional communication (which I did a lot of research on, and am pretty sure it's the case...), I am otherwise very happy with the way my Lemur and Logic marriage has developed and am simply looking for some guidance on how to script this +1/-1 relative message, which from what I surmise would be something related to the message that the Relative MIDI Fader object in the User Library sends, except I would prefer to use a button/pad object to send the message rather than a fader. The button is preferable because if I were to use a fader, I would have to manually execute a +1/-1 by moving the fader up and down, if I can script a button to send this same message it will introduce no manual execution variables.

Relative-knob-and-fader.jzlib
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
I understand, I do it the same way with Cubase. One interface for the DAW/plugins, and a couple for softsynths, all in one template. And also with MIDI only. I would like to do everything with OSC and profit from its advantages, but Cubase does not allow it.

I'm quite sure that Logic's OSC interface is open to any controller. It just has to use the correct OSC addresses. You could keep your template untouched in its design and add the custom OSC commands to each object.

There's one thing I'm not sure about. In the TouchOSC template as well as in the Mackie Control and also in the Mackie C4 Pro, plugin/softsynth parameters are arranged in the way the plugin developer has defined. Not exactly how we want them. There might be some work involved to get each parameter to its desired place in your softsynth interfaces. In OSC language for Logic, they are named /par1, /par2, etc. Should be not too difficult, but I've never done it.
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
Are you saying that the control surface plugin written for the TouchOSC General Logic Template outputs a message that if I setup a TouchOSC template in a particular way, I could create my own custom template (with objects formatted and arranged by personal choice) that still utilizes the bidirectional communication benefits of the control surface plugin... I would just need to find which messages (/par1, /par2, etc) were outputted for the parameters I wanted to map within my template? I would imagine that it outputs the parameters on a selected channel strip basis? So I would have to have that channel selected in my DAW in order to get the template to work? I don't remember thinking that reformatting the messages sent from the control surface plugin was really a possibility when I was doing research but maybe my information was wrong or my mind is just fuzzy, I'll have to reinvestigate.... Could be an interesting alternative.

However, I am still very content with Lemur and how I currently have things set, I am not eager to redo all the work that I've done in the recent past, simply find a solution for this relative +1/-1 script to be sent from a button...

If anybody has any ideas, it would be much appreciated!

Cheers
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
just made a little test and can confirm that you can control Logic with Lemur and OSC. But only from Lemur to Logic, not the other way round. Why I don't know. I set it up so that Logic sends feedback to port 8000, the Lemur receiving port.

That was really not to be expected. Actually it never occurred to me. Any software control with OSC is bi-directional, as long as the ports are correctly set. Logic is the only exception.

Please accept my apology for the waste of time. I'm deeply sorry about that.
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
No worries, I appreciate you taking the time to explore the OSC potential with Logic.

If anyone else has any ideas in regards to sending a relative message to Logic with Lemur with this button type of execution, it would be much appreciated!
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
SBPBK wrote: I do not want to use a "general control" type of template as it is not workflow conducive,
+1 to that. As a long time Logic/Mackie Control user, I personally get frustrated with the emulations since they never fully implement all the features of the protocol. While they can aid a particular workflow, they can't replace the mouse and keyboard entirely.

But, on to your issue. Assuming you have fader objects in Logic providing the conversion from cc to fader messages, as opposed to transformers, you can bang those faders with a button loaded with meta message 99 set up for increment without rollover. Another button to decrement without rollover.

Create something in Lemur that hits those buttons sequentially on template load.

You may be able to do it with one environment button however. Not sure it will work but you can try. Create a button and set its properties to Sysex. In the dialog that opens, enter the 2 meta events, for increment then decrement. I'll try this out later when I'm at the studio today, but I think it will work. If you're using multiple environment layers, best to place the button(s) on each layer. Then control all of them from a fanout on the clicks and ports layer. I've found that routing to be more reliable for some reason.

fader8
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
Hey fader8,

Great to meet a fellow Logic/Lemur user! The more I am on this forum, the more I see how amazing the Lemur community is and I feel fortunate (as should every other Lemur user) to have access to such a wealth of knowledge and help from experienced users.

In regards to my issue, I just want to clarify a couple things - As far as MIDI-IN is concerned, I am currently mapping everything with my Controller Assignments window rather than using the environment. The MIDI going back out to the Lemur sends through the environment, but I do NOT have MIDI going back out for all of my templates for 2 reasons… The first and primary reason being that (as I'm sure you're aware) some softsynths have more than 127 parameters which results in multiple synth parameters outputting an identical CC1 (controller) value, so I therefore can not have the bi-directional control in these cases, unless there is some work around that I just have yet to come by… In addition, I wouldn't be able to map these synths utilizing the environment (as far as I'm aware) because mapping within the Controller Assignments window gives the advantage of its mapping translation being on a 'CC to parameter name' basis, rather than a 'CC to CC' basis. My other reason for not utilizing the bi-directional control, is simply that it is sometimes not necessary.

The presets I am trying to "bang" out are presets that I am loading as AUPresets.... Even if I were to map my templates through the environment, the newly loaded AUPreset values on the GUI would not be physically represented by any objects within the environment.
fader8 wrote:Assuming you have fader objects in Logic providing the conversion from cc to fader messages, as opposed to transformers, you can bang those faders with a button loaded with meta message 99 set up for increment without rollover. Another button to decrement without rollover.
Do these meta 99 messages ever end up needing to get transformed to an 'absolute' CC2 value at any point or do they simply function as relative messages? When they get converted to CC information, the CC2 data it passes along will just be a relative message? Or do you mean using the meta message to bang the values of the fader objects within the environment out to my Lemur? I am not familiar with this type of message at all, but am really curious to try this out so any further insight you could provide would really be appreciated! Thanks so much for taking the time to respond about this, this is really something I am hopeful to figure out because it will make my Lemur/Logic setup absolutely seamless!

Also, you mentioning the clicks and ports section has made me curious. Thus far, I have not included it in my workflow but not for any particular reason… Is there something I might be missing out on?! Also, what do you mean about a 'fanout'? Always looking for cool new techniques! :mrgreen:
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
SBPBK wrote:In regards to my issue, I just want to clarify a couple things - As far as MIDI-IN is concerned, I am currently mapping everything with my Controller Assignments window rather than using the environment.
You're brave!
SBPBK wrote:The MIDI going back out to the Lemur sends through the environment, but I do NOT have MIDI going back out for all of my templates for 2 reasons… The first and primary reason being that (as I'm sure you're aware) some softsynths have more than 127 parameters which results in multiple synth parameters outputting an identical CC1 (controller) value, so I therefore can not have the bi-directional control in these cases, unless there is some work around that I just have yet to come by…
Yup, eg Ultrabeat. No workarounds for that.
SBPBK wrote:The presets I am trying to "bang" out are presets that I am loading as AUPresets.... Even if I were to map my templates through the environment, the newly loaded AUPreset values on the GUI would not be physically represented by any objects within the environment.
Thats a problem. If you want the values reflected in Lemur, you will have to map back each control. Minus the ones that you can't do to the aforementioned issue. As for using the controller assignments, you lose a lot of control because you can't process that data beyond just what's available to you in the CA window. Hard wiring converter faders/transformers in the environment is the best way to achieve what you want.
fader8 wrote:Assuming you have fader objects in Logic providing the conversion from cc to fader messages, as opposed to transformers, you can bang those faders with a button loaded with meta message 99 set up for increment without rollover. Another button to decrement without rollover.
SBPBK wrote:Do these meta 99 messages ever end up needing to get transformed to an 'absolute' CC2 value at any point or do they simply function as relative messages? When they get converted to CC information, the CC2 data it passes along will just be a relative message? Or do you mean using the meta message to bang the values of the fader objects within the environment out to my Lemur? I am not familiar with this type of message at all, but am really curious to try this out so any further insight you could provide would really be appreciated! Thanks so much for taking the time to respond about this, this is really something I am hopeful to figure out because it will make my Lemur/Logic setup absolutely seamless!
You don't transform meta messages. They are system messages and are strictly for controlling elements within Logic. You can sequence them on a track too. In fact, thats probably best for you. Hit play, the increment then decrement bang gets sent to all your incoming fader converters, causing the plugin to spit out fader messages to your outgoing fader converters, thus updating Lemur.
SBPBK wrote:Also, you mentioning the clicks and ports section has made me curious. Thus far, I have not included it in my workflow but not for any particular reason… Is there something I might be missing out on?! Also, what do you mean about a 'fanout'? Always looking for cool new techniques! :mrgreen:
When you bring MIDI into the environment for real time control like this, you want to reroute the inputting port away from the sequencer object. You can do that at the Physical Input object by cabling the desired port to something else, like a channel splitter for example. You can ask more about this at logicprohelp.com. Lots of folks can help you with this Logic stuff there. I moderate that forum with David Nahmani so I'll see it if you post.

I have just completed a large Logic project for on stage performance use. Each performer has control of their monitor cue mix from their iphones and 2 ipads control performance sequencing and main mix. Its nice to wander around in the audience and tweak! Any change from within Logic or from an iDevice, updates all devices. I use Osculator for the OSC-MIDI-OSC conversions, which has been fantastic. Lemur's been rock solid for this application.
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
fader8, can you explain why Logic's OSC implementation is restricted to TouchOSC? Isn't it a bit odd to use Osculator instead of directly addressing Logic? Is it true that Reaper is the only DAW that has true and open OSC support?
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
Phil999 wrote:fader8, can you explain why Logic's OSC implementation is restricted to TouchOSC?
Well, it's a start! Conveerting all Logics environment objects and its sequencer to support OSC is a big job. We can only hope that someone at Apple is already making progress on it.
Isn't it a bit odd to use Osculator instead of directly addressing Logic?
Not at the moment, considering the state of everything. It actually works quite well. I'm using it until I get a solid Max patch built up to do everything I need. I have Bluetooth and other control devices so even if Logic does get OSC support, I'll still have to have something running as an interface to it.
Is it true that Reaper is the only DAW that has true and open OSC support?
Max For Live , if you also own Max/MSP, is probably the only other. I don't think it's high on anyone's priority list. I can't go out and buy an 88 key controller that outputs OSC to UDP Ethernet, or USB, or Bluetooth yet, either.
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
fader8 wrote:You're brave!
Man, bizarre that you say that. After doing a bunch of new mappings last night, I arrive to the studio today to open Logic and find my Controller Assignment Preferences totally blank. Didn't back them up and now I'm out all that work… Between this happening and you saying that, I think it's a sign that this has got to go.
fader8 wrote:Assuming you have fader objects in Logic providing the conversion from cc to fader messages, as opposed to transformers, you can bang those faders with a button loaded with meta message 99 set up for increment without rollover. Another button to decrement without rollover.
fader8 wrote:You don't transform meta messages. They are system messages and are strictly for controlling elements within Logic. You can sequence them on a track too. In fact, thats probably best for you. Hit play, the increment then decrement bang gets sent to all your incoming fader converters, causing the plugin to spit out fader messages to your outgoing fader converters, thus updating Lemur.
So, just so I'm sure I understand what you mean as this is a new concept to me… Firstly, to cover mapping Lemur to the plugins using the environment… The way I would map my Lemur to my plugins via the environment would be a series of faders within the environment (1 for each parameter I want to map) whose incoming message type would be set to receive CC and send Fader info, forgoing a need for a transformer to convert the message from CC to Fader. Since my Lemur objects (for the most part) already reflect the CC1s of their corresponding plug-in parameters, I wouldn't really need to do much CC1 information conversion. I then would set up this bang message to send prior to the fader objects, which then would get directed to the various parameters I wanted to bang out (via the CC to Fader conversion the environment's fader objects provide) bypassing the fader object's values and just sending a relative+1/-1 message to the plugin, thus causing the values the knobs are set to within the GUI (as loaded by the AU-Preset) to bang back out to the Lemur? Or would the values that would be banged out be the values that the fader objects in the environment are set to? I would have to trigger this message every time I load a new AU-Preset but that is a small price to pay to be able to have my Lemur reflect the AU Preset's values for immediate tweaking.
fader8 wrote:Thats a problem. If you want the values reflected in Lemur, you will have to map back each control. Minus the ones that you can't do to the aforementioned issue.
If I were to map to my plugins via the environment instead, would I still need to map back out each control in order for it to bang out to the Lemur or is that only an issue I would run into if mapping through the Controller Assignments Window?
fader8 wrote:When you bring MIDI into the environment for real time control like this, you want to reroute the inputting port away from the sequencer object. You can do that at the Physical Input object by cabling the desired port to something else, like a channel splitter for example. You can ask more about this at logicprohelp.com. Lots of folks can help you with this Logic stuff there. I moderate that forum with David Nahmani so I'll see it if you post.
That's awesome, I love LogicProHelp - you guys rule!!! I thought I recognized your screenname, I knew I saw it somewhere else before! Thank you guys so much for being so awesome to every Logic user, I've certainly been on your forum a ton. I've actually been meaning to post AU Presets for Sylenth1, Gladiator, Nexus2, Circle (and I think a few other things that I made over the past few months) on your 3rd Party AU Presets page. Definitely a few synths that aren't currently up there. I am all about the way AU Presets impact my workflow, that's why I'm hopeful that I'll be able to get this to work to bang out newly loaded AU Presets to my Lemur for quick tweaking.
fader8 wrote:I have just completed a large Logic project for on stage performance use. Each performer has control of their monitor cue mix from their iphones and 2 ipads control performance sequencing and main mix. Its nice to wander around in the audience and tweak! Any change from within Logic or from an iDevice, updates all devices. I use Osculator for the OSC-MIDI-OSC conversions, which has been fantastic. Lemur's been rock solid for this application
That sounds insane! I would love to see that in action. If you guys ever post any videos online (or ever better, play in NYC!) you should definitely post it up on LogicProHelp, I would be really interested in checking that out.

Thanks again for responding to me and thank you sharing your expertise! I have done a lot of research on this and came up empty handed, you are the first person and first resource I've had in regards to figuring this out and I really appreciate your help and you taking the time to share information about this with me. :mrgreen:
Subject: Re: theory to "BANG" out a preset setting/bi-directional con
SB,
First, start simple. Pick one simple plugin that you want to control and load it on a channel strip in Logic.

In the clicks and ports environment layer, cable the incoming port from Lemur to a channel splitter.

Create a new env layer and move your channel strip to it. Create an ornament, name it, check its icon box.

Back at the channel splitter, route a channel to that ornament you just created.

Cable a monitor object to the output of the channel strip.

Move the parameter you want to control. The fader message number will show up.

Cable the output of the ornament to a text fader object. Convert the input cc to output fader messages to match the parameter. Remember that the channel # of the message changes depending on which slot the insert is in.

Cable the output of the channel strip to another text fader and use it to convert the fader message back to the same cc you have controlling the input side.

Cable that fader to an instrument whose port is set to your Lemur output port.

That's what you'll need to get reliable bidirectional control with any parameter.

fader8