Logic Pro 9 Controllers won't record after 'learned'

Hi all........I have this crazy problem to do with the controller assignment page

. If I assign a controller from a list in the plug in editor, it works fine and records. If I do it via the controller assignments page using the Learn button, it disappears from the input monitor and won't record, If I then change the range of the learned controller number on the controller assignments page - say 40 to 70 - when I move the controller it's seen in the input monitor until it reaches 40, then disappears (and won't record) until you reach 70...........It' driving me nuts.

Any ideas? Sonicmanipulator.

Peter Ostry

Staff member
You are talking about automation. Logic has two automation modes: region based and track based automation.

Region based automation writes incoming controller data to MIDI regions. It simply stores the controller types, numbers and values. This is what you seem to expect.

When you use the Controller Assignments, no MIDI gets written to regions because you work with track based automation. All data are linked to parameters and are written to a track's automation lane when the automation mode of the channelstrip is set to Touch, Latch or Write.

You may consult the Logic manual to learn about both automation modes.


There is a little trick using the IAC about that. As you have noted if you learn any CC# in the CA dialog then the Logic Physical input filters it.
Here is the trick:

1. Create a new environment fader and assign its Output definition to the CC# you plan to use (by default it is CC7 ch1.).
2. Create a new (Standard Instrument) object in the Environment and set its Port to the IAC.
3. Cable the Environment fader to the Instrument object, open the CA dialog and Learn the plugin parameter by mouse tweaking the Environment fader. In this scenario the Logic plugin parameter will be learned from the IAC bus - you will see that in the CA dialog.
4. Go to the click & Ports Environment layer and cut the "Sum" cable in the top pin of the Physical Input. Cable separate cables from all IN ports to the Input Monitor object, and do not patch a cable from the IAC pin port (the port bus you have used in step 2). This is to prevent any midi feedback.
5. Patch a second (bottom cable) from the Input Monitor object to the Instrument object you have created in step 2. This way you will bridge all devices to the IAC and CA and in the same time the CC# you want to use in Logic will be provided via the top Input Monitor cable to the Sequencer.

The CC# in question will not be filtered for your physical devices so you can use it in the CA dialog and in the Logic.

Thanks so much for that. Did the trick. I'm using a 36 wheel controller I've just made. So I'm sending a lot of controller data and my computer (Mac Book 1.83 GHz Core Duo. 2gig ram) is struggling but I belive it is the future of synth controllers for expressive playing! Video comming soon. Cheers, Sonicmanipulator.

Peter Ostry

Staff member
Hey Tangra, this is a clever workaround, thank you for that!

If I understand the problem and your trick right, the wish is to learn controller events by Controller Assignments AND have them available in the Environment.

As I understand your method you catch the events coming from the controller at the Physical Input and send them to the IAC bus. That way you get the incoming MIDI twice. One stream from the original port, one from the IAC. Now, if we force Logic to learn from the IAC, we still get MIDI from the controller. As I said, really clever.

Maybe we can make the workaround and the required actions a little less complicated. So far I've seen we don't need an environment fader for that. Look at the screenshot below.

With this technique, we can learn controller events from the particular device as usual via the Controller Assignments. Of course Logic learns from the original port but after learning we simply switch the input source to "IAC 1" and that's it:

Of course we get all data from the controller, assigned or not, in the Environment. But this is either what we want anyway or usually no problem at all.

What do you think?


What I think?

It is essential to be able to use a given controller # in CA and in the Environment - imagine it can be the Modulation wheel (CC1) for exampe. That's why I have developed this trick long time ago. You are right - there is not need using the Environment fader ( I'm familiar with that but decided to simplify the example and accent the idea of using the Environment as CA splitter tool - the enviro fader was just the material demo of the show.
So, thanks for the nice images and the update !

I hope many people will get rid of that though I have been posted that in some other forums and it seems that it was not understood very well...

As an example the IAC can be used to solve many problems in the Environment, and sometimes I have an idea to post an article about that but not sure if anybody will have interest of that - it can be some tech food for the DVD & online video training developers only...
I'd be very interested. I still don't understand this IAC thing. I have problems with controller assigments being on the CA page but not working until you relearn them......


I have problems with controller assignments being on the CA page but not working until you relearn them...
This is known as the "Input Ports Floating Issue" of the Logic physical input.
I have been posted a trick about in some other Logic forums (do not have time to search now)...

The trick is simple - IAC !
You know almost 99% of the trick - cause it is related to the trick I described here - i.e you must use to "Learn" your CA dialog via IAC and create a Template song environment scheme of the Physical Input cabling shown in the Fig.1 (the Peter's one above).

The theory is simple. Ones you have enabled IAC in the Mac AMS dialog it is constant, i.e it is not plug & play "floating" like the other input devices !
The plug & play feature causes the "Input Ports Floating Issue" and you temporary loose your CA assignments and must re-learn etc.

You can clear the CA (trash/backup the Logic Preferences file), re-learn via IAC (follow the 1st tip) I published here plus the Peter's update and schemes, create a new song with the Click & Ports environment cabling as shown in Fig.1 and save as template. In this scenario I believe that you will not have the issue you describe in the quote above anymore.



Peter Ostry

Staff member
Forgive me. >_< What is an IAC bus?
IAC = Inter-Application Communication

The IAC bus is a virtual MIDI bus inside your Mac. Any application can send to and read from this bus. Unlike virtual MIDI ports created by applications the IAC bus doesn't have an input or output. It is just here.

If you don't currently see an IAC bus you can activate it in the MIDI window of the Mac's Audio/Midi Setup by doubleclicking the IAC Driver icon:

One IAC bus is default, you can add more buses and name them. The screenshot above shows two IAC buses. They are called "Ports" but they are buses.

The advantage of the IAC bus is that it is always available, you don't need an input or output maintained by an application. This can also be a disadvantage because everything you send to an IAC bus comes immediately back. An application must be able to handle that.

Although the main purpose of IAC is to link several applications MIDI-wise, in Logic the typical usage is to send internal MIDI (from the Environment) to the IAC bus and get it back as external MIDI. For some Logic functions this makes a difference.

If you use a standalone virtual instrument you can also use the IAC bus to send MIDI from this instrument to Logic and vice versa.


Forgive me. >_< What is an IAC bus?
According to the official definitions it is some kind of ( Inter-application communication). OK ?
It is a virtual midi port providing 16 midi channels per each (bus/port). It can be used to cary midi thru different midi applications etc. Some similar utilities are known as "Virtual midi cables", "Midi Pipes", Midi Yoke" etc. Anymore questions ?
Thanks !

Edit: I'm sorry for the duplicated reply which matches the Peter's input - I was typing during his reply !


I still don't understand this IAC thing.
What needs better explanation - the IAC bus itself, what we are doing with it, or both?
First off, thanks to Peter and Tangra providing some fascinating insights in this thread!

I stumbled (yet again) across this particular thread because I was looking to get my head around a potential problem that I _think_? could be addressed with this IAC object. (Sorry, even after reading this thread a few times, I still wasn't sure)

Here's the issue:
I have 3 NanoKontrols (MIDI buttons, knobs, sliders) that I want to integrate into my environment in such a way as to make any/all parameters to either single or multiple instances of a given Logic vi accessible via the Nano's in a flexible manner for track-based automation.

This past week, I started using both TLI-authored macros and the CA page to map controllers to parameters. So far so good.

But before I got too deep into these assignments, it began to dawn on me that I was going to have a problem if I had more than one instance of a vi--all the mappings were MIDI-channel specific. If I addressed a vi on MIDI channel 2, what was going to happen when I wanted to address a new instance of the same vi on a new Track using channel 3 or 4, etc? The CA assignments were going to be useless. Was I going to have to change the MIDI channel on potentially dozens of assignments each time I wanted to address a new vi-instance on a different track?

So I began to think I needed something to grab the controller data before it hit the CA assignments that would (hopefully) either mask the transmitted MIDI channel of the Nano from the CA assignment and allow the assigned Track automation MIDI channel to channelize the data, OR, that the object I put between the Nano and the CA assignments can do the channelizing for me, even if I have to change the MIDI out channel of the object manually, at least it would operate in a global fashion for all transmitted messages.

[Some of this gets into MIDI signal flow, which I'm still not 100% clear on. For instance, where in the MIDI signal-flow are the CA assignments? Are they after the Sequencer Input but before the Track object?]

So, the short version of my question is, Is this (the IAC bus) it?

Can the IAC be used to essentially rechannelize-on-the-fly so I can set up my Nano's up on one MIDI channel, wired into an IAC bus, which will then be seen by the CA assignments page in such a way as to allow the assignments to apply over multiple instances (but on different MIDI channels) of a vi with a minimum of reconfiguration as I move from track to track applying automation?

Or is there another approach to making such a scheme work?

Thanks in advance for any insights! Tom


(apologies, my last post above didn't appear until I posted this...can't delete this, so its an explanation. There was a LUG server glitch over the past 20 minutes)


OK, so I've been reading (and re-reading) the exchange between Tangra and Peter for a while now, and I think I can state my question without adding 5 extra paragraphs before I get to it ;)

By using the IAC to resolve the 'floating input port' (thanks Tangra!) issue with Logic, what we're really doing is creating a dedicated assignment map for each/any vi we want, correct? Once we switch from the Learned device to the IAC 'device' there is a 1 to 1 correspondence between the IAC and the CA assignments, correct?

I guess what's tripping me up is, what happens if I want to address a second instance of the same vi, but on a different MIDI channel?

How does the second-instance vi get values from IAC that <i>don't</i> conflict with the assignments from the first-instance vi, without having to engage in CA-remapping for the different MIDI channel being addressed?

Even if I change the IAC input channel, doesn't the output channel have to remain the same in order to maintain mapping correspondence with the CA assignments? Or am I missing something? Does the Track MIDI channel do something to affect this scenario?

It seems like this is good for a many controllers to one assignment scenario, rather than what I'm looking for, which is a one controller to many assignments (ie MIDI channels). I want to be able to point, say, one controller at different instances of a multitimbral vi and not have the controller values for each instance conflict with each other.

Ideally, I guess what I want is the CA-assignments MIDI channel to follow the Track (or controller) MIDI channel. Probably not possible on its face, but short of defining the same mapping for every MIDI channel I want to use, I don't see how I can address multiple instances of a vi with controller values.

Any thoughts?