MIDI flow in Logic Audio

This tutorial comes with two environments that illustrate some of the things described here. You need Stuffit Expander to unpack it. Stuffit Expander is free, for Mac and PC, and can be downloaded here.

Download the "miditut.sit" archive.

In the following it's assumed that you have some external synthesizer or other device that sends Midi data, and that it's connected to a Midi interface which is connected to your computer.

  1. Overview
  2. Where does the Midi come from?
  3. Sending data to the sequencer
  4. Getting data out of Logic
    1. A basic Setup
    2. Creating Port objects
  5. The end

1. Overview

For those that don't like reading an entire tutorial (however unwise that may be), here is a quick overview of how Midi data is routed inside Logic, with a few examples of possible data routings. The following sections will describe the various parts of this overview in more detail.

  1. Midi data entering from external sources (be it outboard synths or other Midi-capable applications) enters Logic through the Physical Input object, so that's where you would "tap off" your outboard synth when playing live for example.
  2. In order to record midi data, you have to send it to the "to Rec & Thru" object (or the "(to Sequencer)" object, which is the same). This is the entry point for the sequencer-part of Logic.
  3. To get already recorded Midi data (in the form of a sequence on a track in the Arrange window) available for processing, you have to create a kind of outlet for that datastream. This is simply done by assigning the track containing the data to whichever environment object: Logic sends a track's data to whichever object the track is assigned to.
  4. The only environment objects which have a direct connection with the outside world are (in principle) the Instruments (Multi or not). So if you assign a track to an instrument, you do create a kind of outlet for the data, but the data immediately "disappears" to the outside world.

These are the basics. If you fully understand the above, it'll be perfectly clear where to cable which object in the environment for your particular need.

You then have various options:

Et cetera. The possibilities are endless. The most important part is understanding where the midi data is, where it comes from, and where it goes.

The following sections will take you through the above step by step. If you're new to Logic, download the tutorial songs if you haven't done so already, and follow the stuff below step by step. When you've reached the end of this tutorial, you'll (hopefully) fully understand how to achieve a particular Midi data routing that meets your needs.

top

2. Where does the Midi come from?

All Midi data, regardless of its origin, enters Logic through the Physical Input object. Whether you have a (multiport) Midi interface, or send Midi data from another program to Logic (e.g. by using the OMS IAC busses on a Macintosh), this is the place where you'll find all incoming data, all merged into one big Midi stream and coming out of the Physical Input's SUM output. Usually this is just fine. Sometimes however, when using a multiport interface, you might want to be able to distinguish between different Midi streams, depening on which port the data comes from. On USB Macs, the various ports are available through the M1-M32 outlets (on older Macs the M and P outlets carried data from Modem and Printer ports). On PCs something similar will probably apply. [Note: this is in Logic v5. Things might be different in v4.x] As soon as you connect some environment object to e.g. the M1 outlet, all data coming from your first Midiport will be sent to the M1 outlet instead of the SUM outlet. This indeed means that the same data is no longer available from the SUM outlet (which is what you'd probably expected).

If you downloaded the tutorial songs, open midi1.lso where you'll find a bare-bones environment. There are just two objects: the "Physical Input" object, and the "to Recording and Thru" object. From now on we'll call those PhysIn and RecThru (easier to read and type). Go to the window's New menu, and create a Monitor object. Drag it between PhysIn and RecThru. Click on PhysIn's "SUM" outlet, and hold the mousebutton down. Drag the mouse on top of the Monitor until it's highlighted and release the mousebutton. A cable will be created, connecting the one to the other. These environment cables are the way to transport Midi data from object to object.

Now play a few notes on your synth. You'll see the incoming Midi data being displayed in the Monitor object. If you first select the Monitor and then grab its lower right corner, you can make it bigger, so as to display more data (unfortunately you can only stretch the object vertically and not horizontally).

If you have a multiport Midi interface, let's check out where the various ports send their data to. Create another Monitor object, and connect it to the M1 outlet of the Physical Input object. Again play a few notes: which Monitor shows the incoming data? If the notes appear in the 2nd Monitor: congratulations, you just found your first Midi port. If not (i.e. the notes still appear in the first Monitor), then your synth probably isn't connected to the first Midiport: select the cable between PhysIn and 2nd Monitor and hit backspace to delete it (be careful to have only the cable selected and not some additional object, or otherwise you'll delete cable plus object). Now cable the M2 outlet to the second Monitor and again play some notes. Repeat if necessary to locate the correct outlet that carries the data sent by your master keyboard. If you have multiple keyboards connected to multiple Midiports, you can repeat the foregoing to locate each Midiport's datastream.

To clean up things, select the second Monitor and delete it (backspace). You once more should have just 3 objects: PhysIn, Monitor and RecThru, with the PhysIN's SUM output cabled to the Monitor.

Now in the Arrange window select an empty Midi track (which is any track that's not an Audio track), hit "Record" and play a few notes (in the tutorial song, you'll only have a few "No Output" tracks to choose from: pick any of them). Nothing happens? That's correct: all incoming Midi data is sent to the Monitor, which (still) is a dead-end. The Monitor isn't connected to anything, so the incoming data goes nowhere. More specifically: the data isn't sent to the sequencer part of Logic. We'll now fix that.

top

3. Sending data to the sequencer

This is confusing stuff: the Midi data clearly enters the program (since you see it appear in the Monitor), but it doesn't enter the sequencer. Apparently "the program" and "the sequencer" are two different things. Indeed: the sequencer is just a part of the entire Logic application, and you have to manually make sure that data entering the program reaches the sequencer-part.

The input for the sequencer is the RecThru object, so we can fix the problem easily by connecting the Monitor to the RecThru object: click-hold on the Monitor's outlet and drag until the RecThru object is highlighted. Let go of the mousebutton. We now have a chain PhysIn -> Monitor -> RecThru. Select an empty Midi track and hit "Record" once more. Play a few notes: you'll notice a new sequence being created which contains the notes you played. So this last cable simply forwarded the Midi data to the sequencer which thus finally has some material to record. Congratulations, you've just made your first functional environment patch!

Of course we could have omitted the Monitor object and connect the PhysIn object directly to RecThru. However, there is a slight advantage to the setup we now have. You'll notice that PhysIn only has one SUM output. So as soon as you want to send Midi data to several places at once (like the sequencer and some environment patch), you won't have enough outlets to connect to. Inserting a Monitor object solves this: as soon as you connected a cable between Monitor and RecThru, a 2nd outlet appeared on the Monitor object. This outlet will carry an exact copy of the data entering the object, and so you could hook up some environment patch to it (which then would cause a 3rd outlet on the Monitor to appear, to which you could connect yet another patch, et cetera).
All nice & shiny, but if you now hit Play in the Arrange window, you won't hear a thing. No wonder, as the track is assigned to "No Output". We should definitely do something about that.

top

4. Getting data out of Logic

4.1 A basic Setup

Sequencer data (i.e. the stuff you see in the Arrange window) is sent to whichever object the track containing the data is assigned to. If this is some environment patch, that is where the data will go upon playback. If it's an Instrument object instead, the track's Midi data will be sent to the Instrument. Since we want our recording to playback on our external synth, we should assign the track to some synth-like object. Fortunately this is quite easy: in the Environment window's New menu, pick either "Instrument" or "Multi Instrument". The former will give you a basic one-channel instrument whereas the latter creates a 16-channel instrument and is thus more suitable for multitimbral synths. Select the newly created instrument and check the parameter pane at the left side of the window. Here you'll see a "Port" setting. Clicking to the right of the word "Port", you should be able to pick the right output port of your Midi interface (details vary according to interface, use or non-use of OMS, etc, so I'll leave this one for you to figure out). In the parameter pane you can also name the new instrument: do so.

Relevant detail: if you created a Multi-instrument instead of a plain Instrument, you'll notice that the object's channels 1-16 are crossed out. Activate any of the channels by clicking on them once: the cross will disappear and the instrument's channel will be available for playback. In order to disable a channel again, click on the appropriate number of the Multi object, and in the instrument's parameter pane, uncheck the Icon checkbox: the channel number will be crossed again.

Now go to the Arrange window and click on "No Output". An instrument list should appear in which you can now select your newly created instrument (in cae of a Multi-instrument you'll see all available, activated channels). Hit Play: if all is well, you'll hear your recorded data being played back on your synth. If all is not well, you probably set the 'Port' parameter wrong on the Instrument or you picked a Multi's channel while the channel is not active on your external synth: fiddle around until you actually hear the recording being played back.

What have we done exactly? By assigning the track to some object, we have told Logic that this is the object that the recorded data should be sent to. We could have created e.g. a Monitor object and have assigned the track to it: the recorded Midi stream would then show up in the Monitor. Connecting some environment patch to the Monitor would then have forwarded the data to this patch. Instead of a Monitor, we created an Instrument. It's important to realise that Instruments are the only objects in Logic capable of maintaining an "outgoing" relationship with the outside world: by assigning the proper Port to the Instrument, data received by the Instrument is forwarded to your Midi interface, and thus (hopefully :-) to the correct outboard synth.

Still there's room for confusion though. It's possible you have 2 or more synths hooked up to one Midi port (by connecting one synth to the other's Midi Thru port). You could create 2 Instruments, of course, and assign both to the same port. This doesn't really reflect your actual setup however, and might thus be confusing. Some people (including me) prefer a somewhat different setup. Let's try it...

top

4.2 Creating Port objects

Create yet another Instrument (no Multi Instrument this time), and connect the (Multi-) Instrument you created previously to this new one. Logic will ask you if it should remove the Channel and Port settings: do so. Call the new Instrument "Midiport", and deselect its "icon" checkbox in the parameter pane: this will prevent the Midiport-object from showing up in the instrument list (the one that pops up when clicking on an Arrange track name). Set the Midiport's Port-parameter to the same port you used previously for the first Instrument you created. Finally, in the parameter pane click on the icon picture, and pick the 5-pin Midi plug (this of course is merely a cosmetical issue, but: looks do matter). Hit play: if all is well, you'll again hear your sequence play back, just as before. The difference is that we now have a setup that more closely reflects the actual cabling of your studio. If you have another synth connected to the same port, all you have to do now is create a new (Multi) Instrument and connect it to the "Midiport" object. No more thinking about Port settings or whatever, and a good representation of the "real world".

If you have a multiport interface, create a "Midiport" Instrument for each physical Midiport and in the parameter pane, assign them to the proper Port. Create (Multi) Instruments for each piece of outboard gear you have, and cable them to the right Midiport object. Now if you ever decide to change your (physical) Midi cabling, by e.g. hooking up Synth I to Port B instead of Port A, all you have to do is: click on the Synth I object's outlet and drag to Midiport B (i.e. cable Synth I to Midiport B). That's it: no more changing of Port assignments on various Instruments, but simply mimicking your physical cabling in Logic's environment.

Open midi2.lso to see what your setup now could look like. Notice that each Midiport is connected to 2 external instruments. Since each port can only carry 16 Midi channels, the synths have to split up the channels amongst them. The Drum Machine uses channel 10 (see its parameter pane), and thus you'd rather not have channel 10 appear for Synth 1 in the Arrange window's Instrument List. Click on the small "10" in the Synth 1 Instrument, and in the parameter pane uncheck its Icon (well, I already did that for you). You'll notice the small "10" is now crossed. In the same way the Sampler and Synth 2 share 16 Midi channels: Synth 2 uses channels 1-8 and the Sampler uses 9-16. Click on the track in the Arrange window to have the Instrument List appear, and check that indeed the proper channels for each instrument are available.

top

5. The end

This concludes our small tutorial on Midi datastreams inside Logic. You should now have a firm understanding of where the Midi data comes from and how you can send it where you want it to go. The first thing you should now probably do is to make a setup that reflects your own studio. If you save the song as "Autoload" (on Mac), or "Autoload.lso" (on PC's) in your Logic application's folder, you'll automatically have a working environment each time you start a new song.
In another tutorial we'll see how we can use Logic's environment to do some basic Midi processing, either in realtime, or to manipulate pre-recorded data. Now that you know all about Midiflow, you'll have a far easier time understanding basic Environment processing.

top

(c) H.J. Veenstra 2002.