Everyone knows the scenario: a studio full of people all staring into one computer screen. After the initial fascination, the interest quickly dwindles, and the programmer gets increasingly irritated by everyone else laughing and joking around while he is 'doing all the work'. And the only thanks he'll get for that is to be accused of being a control freak, the one that holds all the power of the session. Let's face it — modern recording techniques, especially when MIDI based, don't exactly enhance that 'band feeling', where everyone can chip in and the writing and production process becomes a collective effort.
So when I was preparing for a session with multiple writers involved I thought that it would be nice to be able to have everyone jamming on an instrument without interfering with my programming. I wanted to be able to go into record without being inundated with MIDI information coming from all corners of the room. Also, I wanted to allow the players to play whenever they wanted, and I didn't want to have to stop three of them in order to record the fourth. That way all the players could vibe off each other.
Although Logic allows for the recording of multiple master keyboards/MIDI controllers, there are a few drawbacks when recording in the usual default MIDI Environment. Firstly, it is impossible to route the MIDI data to multiple ports without getting into a complex wiring situation that has to be disentangled should a player decide that he/she wants a different sound from a module that hangs off the end of a different MIDI lead. By the time you've rebuilt the Environment, the fickle musician will have moved on, or the session will have ground to a frustrating halt. The other disadvantage of using the usual MIDI Environment for multiple masters is that it isn't possible to record only one of the players at a time without lengthy demixing procedures, again a bit of a turn off for the discerning groove meister. So my idea was to have an Environment that prepared you for all of these eventualities and, once built, could stay part of the general setup of your studio.
The configuration I ended up with is quite complicated at first glance, but don't let that put you off, because it only takes about an hour to construct. As an example I'm going to show you how to go about setting things up for a single Unitor 8 system, with eight MIDI inputs and eight MIDI outputs, but this basic layout can be expanded using copy and paste to cover whatever setup you use. It would have been nice to be able to do everything in a modular form using Macro objects, but they don't allow for multiple outputs so unfortunately it wasn't possible.
Essentially, what you want to be able to do is feed any connected MIDI input directly to any of your sound modules (either external MIDI modules or internal virtual instruments) at the touch of a button. There are two different ways of implementing such a router, one which allows multiple players to record at the same time, and another which lets the programmer pick and choose who to record at any given time. Plus, you can combine the two where, for example, you want two players to jam along while two others are being recorded.
Have Your Say!
If you want to suggest changes or improvements to Logic, then here's your chance! The Emagic development team are inviting SOS readers to send in their suggestions of what they'd most like added or changed in Logic. Email your top five suggestions (in order of preference) to firstname.lastname@example.org, and we'll forward your lists on to the Logic team. We'll be asking them for feedback on which changes users deem most important and how these might be addressed.
So here's what to do. Start by setting all the master keyboards to output on different MIDI channels, so that you can separate the incoming MIDI signals using a Channel Splitter object. It is also useful to write down the port numbers (for example, 'USB1 in') of the keyboards, since this will make the labelling process a lot easier.
Next, prepare the cabling for each output port. You need to be able to address all individual instruments on one port with one cable. So in the case of Multi Instrument objects you don't need to do anything, but when a port is configured using single Instrument objects these should all be connected to the appropriate channel outputs of a Channel Splitter. The Channel Splitter objects should be labelled clearly with the name of the port they are addressing (for example, 'Split USB7') and should be on the same Environment layer as the instruments.
The next step is a little tedious, but makes the whole system very quick to use in the end. Create a new Environment layer, by selecting Insert from the Options menu's Layer submenu, and call it Direct Routing. Now, select Text from the New menu's Fader submenu, and name this new object Destinations. Double-clicking the fader will cause a list with values from zero to 127 to appear. Write into this list the names of the instruments in your system, starting with MIDI channel one on output port one, which goes into list position zero, and working your way up. Single-timbre instruments that occupy a port of their own only need appear once. This means that you can address more than eight output ports. In my example the Roland Jupiter 8 is the only instrument on port one and the Korg M1 only takes up eight channels of port seven. Therefore I still can address 16 different Audio Instrument objects and have a few slots unused.
The last entry in this list should be labelled Record, and will be used to route the signal back to the sequencer for recording. Each name in the list now has an individual controller number assigned to it, allowing the fader to act as the master switch that routes the incoming signal to the correct port and sets the MIDI channel for it. Set the Out field in the Fader object's Parameters box to an unused controller number (I've used 86 in this example), and limit the range to the maximum number of Destinations in the list (121 in this example).
Now that the Destinations Fader has been programmed with all the different routing destinations, you need to make a Cable Switcher object that will send the MIDI signals to the correct port according to your routing selection. In this example we need ten outputs from the switcher: eight USB MIDI ports, one cable to supply the 16 Audio Instrument objects, and one cable to route MIDI back into the sequencer input for recording.
Pull down the Environment window's New menu again, and head into the Fader submenu — you can find Cable Switcher in the Special submenu. Name the new object Port Switch and set the Range fields in its Parameters box to zero and nine respectively. Also set the In fields in the Parameters such that the object will respond to MIDI Continuous Controller number 86. If you change the object's style from Auto Style to As Text, then you can Double-click on the switch and enter a list of the names of the ports or groups of Audio Instrument objects you want to address.
Once this has been done, create a Transformer object from the New menu, and name it Prog2Port. This will re-map the controller information from the Destinations fader so that any groups of instruments using the same port generate the same value — in other words, all USB1 instruments get mapped to a value of zero, all USB2 instruments to a value of one, and so on. In the Transformer's Conditions set the Status field to '=' and the associated value to Control, and in the Operations set the '-2-' field to Use Map. Select the Destinations Fader, the Prog2Port Transformer, and the Port Switch Cable Switcher, and then select Cable Serially from the Environment window's Options menu. Once you get the Cable Switcher outputs connected up it should display the correct port for each destination you dial up on the Destinations fader. If it doesn't, check your Transformer's Universal Map and your controller settings, and tweak them accordingly.
When you click and hold in any window while holding the Control and Shift keys, the cursor becomes a four-way arrow, allowing you to scroll the window contents in two dimensions. You can also invoke two-dimensional scrolling by dragging just to the left of the window's horizontal scroll bar. Len Sasso
You can scrub audio in the Sample Editor window by dragging in the Time Ruler. If you hold the Shift key when releasing the mouse button, the closest region boundary will snap to the cursor position. Len Sasso
Next you need to create a Transformer that dynamically sets the MIDI channel of a signal, again under the control of the Destinations Fader. For this you can make use of the fact that Logic allows you to set Transformer parameters from an external source, using Meta messages. Create two new Transformers and one Fader; name one Transformer Set CH Range, the other Set Channel, and the Fader CH. On the Set CH Range Transformer set the Status Condition to '=' with an associated value of Control, and put Sub in the '-2-' Operations field.
Set the Fader's Out Parameters fields so that it outputs Meta message number 127, and also set the In fields so that it responds to MIDI Continuous Controller number 86. This means that the fader will convert the input MIDI messages from the Destinations Fader into suitable Meta messages. On the Set Channel Transformer, set the Operations Cha field to Fix. Connect the CH Fader to the Set Channel Transformer and move the fader up and down. The Operations Cha value should move from one through to 16.
Now cable from the Destinations Fader to the Set CH Range Transformer and on to the CH Fader. Moving the Destinations fader should now move the CH Fader, which in turn sends out Meta messages to set the destination MIDI channel for the Set Channel Transformer's processing. Create a Monitor object (again from the Environment window's New menu) and connect it to the output of the Set Channel Transformer. With all four elements selected, hold Alt and drag them to copy the ensemble as many times as you have ports to address. Connect the copies to the Destinations fader as before, and name the Monitor objects to reflect the names of the ports you want to address.
Connect the Sum output of your Physical Input object to the Port Switch Cable Switcher, and cable the individual outputs of the Cable Switcher to the output port Set Channel Transformers. Playing your master keyboard while moving the Destinations fader should then route the data to the different Monitor objects. The MIDI channels will also be changing, but probably not correctly. Use the Sub values in the Set Ch Range Transformers to offset the MIDI channels to sort this out.
All that remains to be done is to connect the output of the Monitor objects to the Channel Splitters in the Instrument and Audio Environment layers and to check that everything is happening as it should. The port that is addressed by the Record setting in the Destinations Fader list should be connected back to the sequencer's input. This allows you to record that individual master keyboard back in the usual way, effectively bypassing the whole routing setup. Note that the sequencer has to be running for virtual instruments to play — when Logic's transport is stopped the only Audio Instrument that will play is the one that is selected in the Arrange window.
By copying this ensemble and taking the input from the individual ports of the Physical Input object rather than from the Sum connection, you can get the separation of the different sources. It is also useful to connect a few copies (as many as you have MIDI keyboards/controllers) to a Channel Splitter with the icon enabled, which means that you can record onto a MIDI track (with the splitter being the Track Instrument in the Arrange window) and then separate the different signals from the sequencer afterwards.
This Logic Song file contains an Environment setup which allows you to jam with multiple musicians, as discussed in the article.
Note: PC users running Logic 5.x should download Tim Rainey's PC version of this Environment instead, which avoids crashes associated with Style 5 Meta faders.