Logic Pro 9 Multi Port Midi Recording

dcer10

Logician
Hi All,

Im struggling with an issue with logic I thought some more experienced users might be able to help me with.

My aim is to record incoming midi data from multiple midi ports at the same time. Ideally I would like to have each port as a seperate track while recording which I can then demix to edit and play back.

I have 8-12 midi ports being used across multiple midi devices that record the output of multi port midi hardware sequencers and also other ports for midi cc inputs etc.

Currently I can only seem to record one midi track at a time which can be up to one midi port at a time, however in real use I always use multi ports at the same time. Recording only one port at a time takes away from the musical process too much so thats not an alternative, nor is setting up all of my external instrumements to be set up over 16 channels on one port.

Im guessing that the environment will be the key to my issue, can anyone offer some information to help me get started? Are there environments out there that will be set up for this purpose I can just edit to suit my rig?

Thanks in advance,

John
 
No way, or no easy way? (other than seperate takes)

Is there no amount of environment creation that can address this since environments use multiple ports? No thinking outside the square on this one possible??

Are you saying that the input is the only entry point to the sequencer and it does not know about ports at all? That seems to be a pretty major oversight if that's the case for the developers.
 
Upvote 0
The Sequencer Input object is the only entry to the sequencer (Arrange page) and it doesn't know about ports. You can play live to separate instruments from separate ports by cabling from the Physical Input object's port outlet directly to the instrument object, but you can't record that as a separate track per port because you have to go through the Sequencer Input to do so, and all ports get merged there.

Sucks, doesn't it? It's been one of my pet Logic annoyances since version 3.x - I've made a number of feature/enhancement requests over that time.
 
Upvote 0
Where do I sign up to join your petition to get this fixed ? :)

Thanks for the answer, at least I wont waste another 100hrs trying to find a work around.
 
Upvote 0
No way, or no easy way? (other than seperate takes)
Port information is available at the Physical Input object in the environment, on the layer Click&Ports. Once the data have left this object the port information is gone. And the sequencer input is after this object. Therefore you cannot directly record based on ports.

You can however do it indirectly to a certain degree. Consult the Logic manual about MIDI multitracking. In the English PDF this starts on page 461. Or just type multitracking into the search field.

Here is a short description:

MIDI multitracking via different MIDI channels is possible. Go to File -> Project Settings -> Recording and activate the checkbox "Auto demix by channel when multitrack recording". This will distribute recordings of different channels to their corresponding tracks.

Then ...

  1. Generate a couple of software instrument tracks.
  2. Set each one to a unique MIDI channel.
  3. Set your synths to the same channels.
  4. Record enable all tracks you want to record on.
  5. Record, stop recording.
  6. All data got recorded on the selected track but will instantly be distributed to the other tracks according to the MIDI channel.
The above method records and distributes notes and controller data strictly by channel. Data from keyboard splits or controller data on other channels will also get distributed, you may want that or not. And you may have a reason not to change MIDI channels on the hardware.

And you may ask yourself why Logic does not record from ports. We asked that ourselves a thousand times. I am sure the Logic background is only dark grey because it oxidated from our billions of tears.

But there is a workaround that might make you happy again and it is even mentioned in the manual:

In the environment, on the Click&Ports layer, you can cable each port you want separately to a transformer object. Set the transformers to output on different MIDI channels. This way you create a kind of port-to-channel conversion without changing anything in the hardware. At the end cable all transformers to the sequencer input. And - in case you removed it - cable the SUM port of the physical input also to the sequencer input.

Voilà, from now on each port comes on its own channel and you can start with multitracking. If you have more than 16 ports (converted to 16 channels), you cannot multitrack them at once. You can make a switching network with environment objects or re-cable every time or whatever you prefer. You may have additional work if you need to handle different channel data from your synths differently.

Not ideal, but better then nothing ...
 
Upvote 0
Thank you so much for your reply, this does look like the trick for me, and what I was hoping someone knew!

Now the hard part will be implementing it :) I do have more than 16 ports I use, but i'm sure I can rearrange my studio to accommodate to less. I'm not extremely skilled at creating environments yet, in fact all my previous attempts have ended in pain... I will try!

Why on earth has logic come so far and still has this very basic very frustrating issue? I guess that people using software instruments would not care, and thats the way its all going these days so external midi recording is less important to apple?? I guess maybe its the same reason that Sound Diver has been trashed? hehehe..

Thanks again.
 
Upvote 0
I'm not extremely skilled at creating environments yet, in fact all my previous attempts have ended in pain... I will try!
So you are going to change MIDI channels at the incoming port. I made a small patch for you and packed it into a macro. See the attached Logic file, you can try the function instantly:

20091102-qwjn3y3ftwsra5221is8g45t54.jpg


The macro is not protected, if you want to see the interior make it bigger and doubleclick somewhere in an empty space to upack it:

20091102-b43e4js74y5rjyywngkia49xse.jpg


The function is quite simple. Your MIDI flows from Macro-In to Macro-Out, passing a transformer that sets the channel for all MIDI data. This transformer is controlled by a numerical fader via Meta events.

You can copy the macro to your Logic project (preferable to a template), duplicate it as often as you want and cable each port of your synths to one of the macros. Finally connect all macros to the sequencer input and the whole thing may look like this:

20091102-txkfhr3tgq9dnw2fdya34fb4mq.jpg


Don't forget the cable between the SUM port and the sequencer! It transports all MIDI that is not processed on an individual port.

Have fun and tell me if you need a feature like switching in groups, processing control messages or something else. If you need such a function you got to have a plan for it, no trial and error please :cool:

Here is the file:
 

Attachments

  • PortChannel_1.logic.zip
    65.2 KB · Views: 247
Upvote 0
Hi, Thanks very much for making the environment example and the great screen shots. I have not been in front of the mac since, but keen to try it soon. I have one question, does this approach limit the recordable data to 1 midi channel per port? I tend to use multiple midi channels per port (not every channel on every port every time, but more than one per port every time).

Also, I assume that once the environment is there I can select the merge device as the input in each track and also the output to its normal port?

I will let you know how I go.
 
Upvote 0
I have one question, does this approach limit the recordable data to 1 midi channel per port?
No, the patch can be modified to allow as many channels as necessary. But Logic in MIDI multitracking mode is limited to one channel per track. Remember, with "demix by channel" Logic automatically puts the recorded events to the corresponding track, based on the channel number. If you have 4 tracks that are set to channels 1, 2, 3, 4 and record from a synth that sends on channels 2 and 3, your data will end up on tracks 2 and 3.

With an environment patch you can say that the data should go to track 13 and 14 instead but you cannot say that channel 2+3 should meet on track 8. You get always as many tracks with data as you have channels. You can merge regions afterwards which is no great deal but annoying.

I don't know what happens if some tracks are missing. If you send channel 1,2,3 and 5,6,7 but have only tracks for channel 5,6,7 and the recording track is 1 and set to "All channels". I would expect the channels 1+2+3 staying on the selected track but I think this trick is out of question because it seems to be unpracticable for multiple devices.

I tend to use multiple midi channels per port (not every channel on every port every time, but more than one per port every time).
The "every time" is the clue. If "every time" means that one device needs always the same and the next device needs something different but also always the same, then the chances are good for a stable environment system.

Also, I assume that once the environment is there I can select the merge device as the input in each track and also the output to its normal port?
Sorry, I did not understand this sentence. What is a merge device? For the output part, you have to rebuild the original channels. Until now we talked only about the input. Converting ports to channels and re-convert for playback is a bigger deal. Beyond a certain complexity it might be too much for a clumsy workaround.

The very bad thing is that Logic does not allow multitracking based on ports. Whatever solution we find, even if you use additional software like MidiPipe, will not change the fact that you have to convert ports to channels if you want multitracking in Logic. Maybe another DAW does a better job, I don't know.

---

A general question: I cannot imagine that you play on 20 hardware devices at once. How many do you actually record in one take?
 
Upvote 0
Hi Peter,

Thanks again for your help. A friend and I spent many hours on Friday night trying to work this out. Firstly we could not work out how to go from the environment to the track ie how would the arrange window be laid out to use this environment. Secondly we could not work out what the environment is meant to do. Perhaps we are not talking about the same thing here.

It seemed that your environment would grab any midi data coming in on which ever port it was connected to and to map all data to a selected midi channel. What I need is to use all channels on all ports. Mind you, I could not get your environment going with a recording to test properly, so perhaps I am missing the point??

I think that logic just isnt going to do it for me unless I have missed something here. And in which case, it might just all be too hard to do considering its something that in other sequencers such as cubase can be done quickly and easily ie set the "IN" port per track (track may contain all channels on that port), repeat for as many ports as you need, arm for record and go.

Your question about how many hardware devices I use at once can be answered by saying I have the following gear all connected to my sequencer all the time and I select as many tracks as I require from this "Bank" of gear each time I have a jam, and I dont want to be restricted to sitting setting up which ones before recording in an environment as its not very musical or inspiring :)

Korg Z1 (up to 6 channels)
Kurzweil K2661 (up to 16 channels)
Roland MC-808 (up to 16 channels)
Home made Midibox SID Synth (4 channels)
Home made Midibox SID Synth (8 channels)
Korg MS2000R 1 Channel
EMU Proteus 2000 (Up to 32 Channels)
Kurzweil K2000RS VX (Up to 16 Channels)
Yamaha TX81Z (Up to 4 channels)
Roland TR-909 1 Channel
Novation Drumstation 1 Channel

All this runs out of my home made midibox hardware sequencer which has 4xports (64 channels) and into my Mac via a Midisport 4x4 and 8x8 combined with all inputs from all keyboards and racks that send cc's and a Kenton Control Freak.

What I want to do is to record from my external sequencer, and also from other sources of midi data ie keyboards, controllers etc all into logic in real time (Ports Preserved). I have a bunch of instruments which during a "Jam" I may call on over a bunch of midi ports. My aim is to record potentially any midi data from any midi channel on any midi port and to have these separated by tracks on the arrange window which I can then demix.

Should I just go buy Cubase? Looks like exactly what I want to do is exactly what logic is very bad at :)

In any case, thanks again for taking the time to try to help.
 
Upvote 0
Howdy,
I face the same situation and, despite the (appalling and entirely stupid) inability of Logic to remember ports, found Logic to be the best choice for my situation.
I play in a band that performs only live improvisation. We record whatever we do. Logic gives me essentially unlimited audio tracks, which is great.
But Logic limits me to 16 simultaneous midi instruments, full stop.
I need at least that many, and for the following reason:
I want/need to be able to freely direct my various midi controllers (ranging from keyboards to a Continuum to an Octopus) to any one or more midi sound sources.
I cannot usefully couple controllers to sound sources because:
that will not support freely stacking/unstacking sounds from multiple sources on the same control stream
that will not support freely changing which sound source(s) any given midi controller is talking to at any given time.

My solution was to build an environment that provides:
a column of buttons where each column represents a midi controller and each button represents a midi target
The columns are created as macros, with the input feeding the first button -- it serves as 'global' (to that column) on/off control
The master control button is a switch that either sends the output onwards 'down' into all the other buttons, or off in to oblivion
The rows of buttons are aligned so the same vertical position in each column is always the same midi target
Each button that represents a target
The target buttons are switches that feed the incoming midi signal either into a transformer that forces the incoming midi channel to the desired output channel, and then sends it to the sequencer object, or else passes the signal on to oblivion

This works fairly well, although it does need a few more tweaks to be ideal.
Regardless, it requires that Logic be set to demix by channel and that each incoming controller be on its own port, that each target be in omni mode or set to the expected incoming channel (and so on).

The biggest problems are instruments, largely soft synths, that are inherently multi-timbral with different patches assigned to each channel. These can be worked with by setting the desired patch (and the gui of the soft synth) to the desired channel. But I find this needlessly fussy at start-up time.
My solution is to host soft-synths in something like ploque bidule (my choice) and use it to detect incoming midi channels (coming from Logic, so post-twiddling with channel) and reset the channel to 1 before sending it along to the proper soft synth.

It was a PITA to build, because Logic had a bunch of flaws in buttons and in macros during the period I was building the controller panel. I think it would be easier now.
But once its built, use is pretty darn easy, and it has served my needs for years now (modulo those little fixes I keep wanting to add -- note off on button off to avoid the occasional hanging note and some external midi control so I could more easily use a EuCon MC Mix or Kenton Control Freak to set/unset the various buttons, rather than having to use the mouse and monitor).

cheers,
Bill
 
Upvote 0
Firstly we could not work out how to go from the environment to the track
You don't go to a specific track. You go to the Sequencer Input. This is your door to the Arrange Window. Logic records MIDI only on the selected track.

Please read the "multitracking" chapter in the Logic manual.

how would the arrange window be laid out to use this environment.
Each track wouldbe set to one MIDI channel.

It seemed that your environment would grab any midi data coming in on which ever port it was connected to and to map all data to a selected midi channel.
No. You connect one or more transformer(s) to each port and set each transformer to a different channel. Up to 16 ports if each port delivers only one channel. Less ports if some of them deliver more than one channel.

What I need is to use all channels on all ports.
Simultaneously? Not possible.

As gryfon1 has put it:
gryfon1 said:
Logic limits me to 16 simultaneous midi instruments, full stop.
With "instruments" he means 16 recording tracks. From one port, from 3 ports, from 15 ports, however. But 16 different channels are the limit regardless how sophisticated your environment switching/converting matrix would be.

Should I just go buy Cubase?
If you cannot handle the situation with your hardware or in the Logic environment in a technically and musically practicable way, then yes, you need another sequencer for recording. So much I love Logic, it does not serve large hardware setups well.
 
Upvote 0
There is a way to keep ports separate during realtime record, while retaining channel info:

Basic technique takes the idea from NRPN MIDI or packet-based routing - you attach an extra "header" event immediately before each incoming event. This header encodes the incoming port information. So you might add a poly-pressure event, note 0, where the velocity = port number.

Tracks record based on MIDI channel as before, using "auto demix"

Then each recorded track also needs to pass through another transformer to decode that poly-pressure header, and use that to switch a cable-switcher (or network thereof) to direct the event to its correct destination based on the decoded port number.

You can, if you wish, re-record to separate the tracks at this point (16 channels at a time), by routing back to the sequencer input. If you want to edit using standard midi-track editing tools, you'll probably need to.

To make this all somewhat easier to manage, you can skip the multi-channel realtime record altogether, encode channel info into the event "header" as well (ie poly note# = channel), record it all to one selected track, and split it up later.

This technique (encode the port number) will handle any number of ports.

Alternately, you can use Peter's technique to convert port->channel, but also add an event header to encode the channel info for each port. This way, you get each port on its own track (via auto-demix), and the channel info can be restored by a playback transformer. This limits you to 16 ports max however.
 
Upvote 0
Great technique, John. I had no idea yet how to encode the recorded channels for later playback apart from using a second switching matrix that recovers the original port/channel information. The "header" method ist definitely an better and a very elegant solution.

But I think we cannot solve the initial problem:
My aim is to record potentially any midi data from any midi channel on any midi port and to have these separated by tracks on the arrange window which I can then demix.
So far I understand we are looking down at 64 channels on 12 ports and the requirement to choose freely from them without any preparation for certain combinations that do not exceed 16 channels. I cannot imagine how this can be done with Logic.

If Logic is the choice for editing and mixing, I would rather use another sequencer for recording and import the MIDI tracks to Logic afterwards.
 
Upvote 0
Yeah - you'd have to use port->channel transform + channel header as per my final paragraph (so 16 ports max, OK), record those by auto-demix in realtime, and then you'd need to make one additional re-record pass for each resulting port-track after the "jam" - this would restore the port-track's channel info, recorded to another track, which you could then use "split by channel" on.

I've done similar things in the past, but I would only do that second re-record pass and split when I actually wanted to edit the data on a per-channel basis. Otherwise I'd just leave it as combined tracks.
 
Upvote 0
If you cannot handle the situation with your hardware or in the Logic environment in a technically and musically practicable way

Dont know that this is the best way to describe it... I think its more that to get logic to do something very fundamental that its just not worth the hassle. I dont have any issue with my hardware or logic environment, logic has an issue with its feature set.

In any case, thanks for the comments from all of you. I think that its just too time consuming and anti musical to go through all that, so I have made the sacrifice (so I can still stay with Logic as I do love it for other uses) to reduce my rig to 16 channels only across all the instruments. I have got it up an running exacly as I wish (with this limitation of course) and Im living with it. Theres already limitations ie when you need more channels from a particular instrument.

Im using a program I found which is very similar to studio patches from the old OMS and I have all the routing done outside logic and im very happy with it.

I do hope apple update logic to have multi port recording capability in the way I would like to use one day, but considering I have had logic since v3 I and its not really improved in terms of these kinds of features, im sure its not going to, and this will be my last investment into logic until it is improved to contain things like this that are so nessecary in my view.
 
Upvote 0
Peter Ostry said:
If you cannot handle the situation with your hardware or in the Logic environment in a technically and musically practicable way
Dont know that this is the best way to describe it...
Probably not, I am Austrian and my main language is German. I do not always find the best way to describe something.

I wanted to tell you that there is no way to multitrack MIDI in Logic if you need all channels on all your ports all the time. You can think about restricting your needs and use methods how John and I described, but if they do not fit your requirements you cannot work the way you want. This is not your fault, it's Logic's fault because multitracking based on MIDI ports should simply work.

I think its more that to get logic to do something very fundamental that its just not worth the hassle.
Absolutely. But that's the job of Apple. Mainstage does work on a port basis, btw. Logic does not. You can (and should) send a feature request to Apple and it will certainly not be the first one abut this issue. The more the better.

... reduce my rig to 16 channels ...
... Im living with it ...
Im using a program I found which is very similar to studio patches from the old OMS and I have all the routing done outside logic and im very happy with it.
Sounds great. I know only MidiPipe for this kind of tasks, which program do you use? And how do you handle the playback to all the hardware, once you merged your individual channels in another program?
 
Upvote 0
Back
Top