You are here

Layering Sounds In Logic's Virtual Instruments

Logic Tips & Techniques By Len Sasso
Published September 2004

Layering hardware sound modules is a simple matter, but things aren't nearly as easy when you're working with virtual instruments in Logic. Here are a few useful workarounds...

There are a number of situations in which you might like to play several different virtual-instrument sounds from the same live MIDI input. While Logic doesn't make this common task particularly easy, it can still be done. The problem is that Logic keeps only one Audio Instrument object in what is called 'live' mode. When MIDI is routed to multiple Audio Instrument objects, all but the one currently in live mode will exhibit some latency.

Two Audio Instrument tracks are record-enabled, and each one has a bypassed I/O plug-in inserted to ensure the virtual instrument remains permanently 'live'.Two Audio Instrument tracks are record-enabled, and each one has a bypassed I/O plug-in inserted to ensure the virtual instrument remains permanently 'live'.Before proceeding, three things should be noted. The methods described here are not necessary for playing back MIDI sequences from Arrange window tracks — Logic then keeps all required Audio Instrument objects live. Logic 's transport must also be running in order to layer virtual instruments, no matter which of the methods described here is used. Finally, you don't need to use these methods to layer different sounds from a single multi-channel virtual instrument, and you can even apply separate effects processing to the sounds if the virtual instrument also supports multiple outputs.

Layering Virtual Instruments

Logic comes with an effects plug-in called I/O, which you'll find in the Helper submenu of the effects plug-ins menu. The intended purpose of the I/O plug-in is to route audio out of and back into Logic for processing by external, hardware effects. To do that you choose an output and input of your audio interface from the I/O control panel. Output from the Audio object in which the I/O plug-in is inserted is routed to the chosen output, then received from the chosen input for further routing in Logic 's signal path. However, the useful by-product of the I/O plug-in for our current purposes is that it keeps the Audio object into which it is inserted in live mode.

It is probably now obvious that the trick to keeping a virtual instrument in live mode is to insert an I/O plug-in into its Instrument Audio object. What may be less obvious is that you don't need to somehow connect the output and input specified for the I/O plug-in — you can simply put it into bypass mode by clicking its Bypass button. However, you do need to specify an actual output and input in the I/O plug-in's control panel.

Once you have 'enlivened' the virtual instruments you wish to layer, there's still the issue of getting the same MIDI input stream to each of them. The simplest method is to create and record-enable an Arrange track for each of the Instrument Audio objects. Selecting any of those tracks will then play each of the virtual instruments inserted in those Audio Instrument objects (when, as mentioned, Logic 's transport is running).

Managing Note Off Messages When Splitting Notes

Environment constructions that separate notes by their Velocity, or by some complex condition that does not route all notes of the same pitch to the same place can leave hanging notes during live play-through, because MIDI Note Off messages can wind up going down a different path than their associated Note Ons. A simple and effective solution is to separate all Note Offs before the processing and send them simultaneously to all destinations. That uses a little extra MIDI bandwidth (which is cheap), but ensures that the matching Note Off always gets to the right place.

To separate the Note Offs, use a Transformer set to Condition Splitter (True->Top Cable) mode. Set its Status Condition to '= Notes' and set its Vel condition to '= 0'. All Note Offs (notes with velocity value of zero) will now go to the top cable, while all Note Ons will go to the second cable. Since you need to route the Note Offs to several places, cable the top Transformer cable into a new Monitor object, and cable the Monitor's outputs to the desired destinations. Cable the Transformer's second cable to the input of the process.

A More Convenient Method

Although simple, that method for recording MIDI to be played by the group of virtual instruments is not the most convenient. MIDI gets recorded on the selected track and Aliases of the recorded sequence get placed on each of the other record-enabled tracks. There's nothing wrong with that, but it becomes awkward when you want to start moving the MIDI sequence around in the Arrange window.

An alternate method is to create a neutral Environment object, such as a Monitor, and cable one of its outputs to each of the targeted Audio Instrument objects. Assigning that object to an Arrange track and selecting that track will then get the MIDI routed to each of the virtual instruments. When you record, a single MIDI sequence will be placed on the selected track, though it will still play all the virtual instruments. Note that you do not need or want to record-enable the Audio Instrument objects in that case.

Here MIDI Note Off events are split by the NOF To Top Transformer object and sent to all Audio Instrument objects. Note Ons are routed to an Alternating Split Transformer, which splits them between the two connected Audio Instrument Objects.Here MIDI Note Off events are split by the NOF To Top Transformer object and sent to all Audio Instrument objects. Note Ons are routed to an Alternating Split Transformer, which splits them between the two connected Audio Instrument Objects.

The issue of keeping multiple Audio Instrument objects in live mode also arises when you want to apply some form of Environment processing to MIDI destined for several virtual instrument plug-ins. You might, for example, wish to cable several outputs from a Channel Splitter to different Audio Instrument objects. That would allow keyboards or other controllers on different MIDI channels to simultaneously play different virtual instruments.

Other Environment objects that send different MIDI messages to their outputs include the Mapped Instrument, the Delay Line, the Chord Memoriser, and the Transformer in some of its modes. With the Mapped Instrument, you can assign both cable and MIDI channel for individual pitches, which allows you to use different drum-synth plug-ins for different drum sounds played from the same MIDI drum part.

Individual repeats from the Delay Line are routed cyclically through all the used cables. For example, if you connect a cable to two Audio Instrument objects and set the number of repeats to two, the incoming (original) note will go to the first cable, the first repeat to the second cable, and the second repeat to the first cable. You can generate all kinds of interesting echo effects using different cablings and numbers of repeats. The Chord Memoriser, when its Cable Split option is turned on, sends successively higher chord notes to lower cable outlets. If there are more chord notes than cables, the extras all go to the last cable.

The Transformer modes that use different cables are Condition Splitter (True->Top Cable) and Alternating Split. With the former, you set Conditions that the incoming note must satisfy to go to the top cable, and all other notes go to the second cable. Conditions might include notes within a certain pitch, velocity, or MIDI-channel range. In the case of a velocity range, special care has to be taken for notes with zero velocities, which are interpreted as Note Offs.

Alternating Split mode simply sends incoming notes to alternating cables. You need to be careful with live MIDI input, because MIDI Note On and Note Off messages count as individual events. Cabling the top cable to one Audio Instrument object and the second cable to another will result in Note On messages going to one virtual instrument and Note Off messages to the other — a sure prescription for hanging notes. The trick is to precede the Alternating Split Transformer by a Condition Splitter Transformer that sends the Note Offs to both Audio Instrument objects and sends only the Note Ons to the Alternating Split Transformer.

Of course, using single Environment objects to create splits and layers is just scratching the surface. You can use the Environment to separate and route notes by just about any complex criteria you can imagine. For example, you could route notes within a given scale to one virtual instrument and notes outside the scale to another. You could have individual notes create arpeggiated sequences routed to different virtual instruments. Whatever process you choose, be it simple layering or complex note-generating techniques, the methods outlined here will get all your virtual instruments singing in sync.

Logic Tips

  • It's not unusual to wind up creating a lot of regions you don't use in an arrangement. Periodically using Select Unused from the Audio window's Edit menu to select and delete them will clean up your audio file list. The Edit menu's Select Files submenu offers other convenient selection options, but requires that the Project Manager's database be loaded to work.
  • If you're trying to use Logic 's Audio To MIDI Groove Template or Audio To Score functions and not getting what you want, try applying extreme EQ to the audio file to emphasize the groove or melody, then Bouncing the result to create a new file from which those processes might work better.
  • The Matrix Edit window's Functions menu has an option to include non-note MIDI events when selecting a range of notes. If you're moving notes around in a sequence that contains other data that you want tied to those notes (such as pitch-bend, modulation, aftertouch, or poly pressure) it's a good idea to turn that option on. On the other hand, if the sequence contains automation that is not note related, leave the option off. Volume, pan, and expression are examples of the latter kind of automation. If the sequence has both kinds of non-note data, open an Event editor, suppress all data types you don't want to move, and select the data between notes manually.