Meta Messages are some of the most powerful and arcane features in Logic. But what are they, and why are they so useful?
In addition to standard MIDI messages, Logic uses two special message types to carry out certain operations and to communicate among its various components. In the Logic Notes column in SOS December 2002 we had a look at Fader messages, which are used for track-based automation. Here we'll examine Meta messages, which have several functions within Logic. One thing to keep in mind as you read this is that these special message types only travel within Logic — they never venture down the MIDI pipeline to confuse your gear or other MIDI applications.
At the present time, Meta messages serve three functions in Logic: they indicate special score symbols in the Event List; they can be used to automate some transport functions as well as Screenset changes; and they add functionality to Logic's Environment, where they can be used to change parameter values for some objects. The latter two applications are of the most interest — score symbols are handled automatically in the Score window and their appearance as Meta messages in the Event editor is rarely useful.
Meta messages are structured like MIDI Continuous Controller messages: they have a channel number between one and 16, a message number between zero and 127, and a data value, also between zero and 127. The channel number has no significance to the meaning of the Meta message, but does allow the messages to be routed within the Environment according to their channel. For example, you can use a Channel Splitter object to target Meta messages at different Environment objects according to the message's channel number. The message number tells what the Meta message does. Many of the numbers are unused, allowing room for new Meta message functions in the future. The data value serves different functions for different types of messages.
At this point you're undoubtedly wondering how to create a Meta message in a sequence. You do so in the Event list by holding the Apple key while clicking on the Full Message button (the button with the '001 011' icon). Once the message is inserted you can set its position, channel, type, and data value just like any MIDI message.
Meta message numbers from 49 to 52, when appearing in sequences on Logic tracks, cause Logic to perform various actions. Message 49 will cause Logic to jump to the Screenset number specified in the data value. An interesting use of that is to access Screensets that are multiples of 10 (zero, 10, 20, and so on), which can't be accessed from the computer keyboard. You may have played some Logic demo songs that automatically change Screensets as they play, and that's another application of Meta message 49. Message 50 will cause Logic to send a MIDI Song Select message, which will cause a song change on devices that use such messages. Message 51 will cause Logic's playback position to jump to the Marker whose number is the data value (starting with number one). With a little clever programming, you can use that to execute repeats and second endings in a score. Message number 52 will simply stop playback.
Inserting message 47 in a sequence causes Logic to transmit a single byte of MIDI data. Its value range is zero to 255. You should know what you're doing before you use that Meta message, but it allows you complete control over MIDI messages and gives you access to MIDI System messages which, other than SysEx messages, are inaccessible in any other way. The MIDI Tuning Request is an example of such a message.
Meta messages are probably most useful in the Environment. There they can be used to control the parameter values in a Transformer, to set the range maximum and minimum of a Fader, and to force a Fader to increment, decrement, and resend its value. There's even a Meta message for changing a Fader's value without sending it to the Fader's output. If you don't dabble in the Environment, those Meta messages will probably leave you cold, but they're what make possible many of the most useful Environments you may have downloaded and used.
A simple use of Meta messages in the Environment is to create buttons that cause Logic to jump to specific Screensets and Marker positions. To create a button in the Environment, create a new Fader object using one of the button styles. There are four button styles available, and the style can be changed from the object's Parameters box. Another option is to use the Text style, because this lets you display the button's function in the Fader object's text.
After you've created the Fader object, the next step is to set its Range Parameters to the same value — the number of the Marker or Screenset you want the button to target. Now clicking the button or text Fader will always cause the Fader to send the same number. The final step is to set the Fader object's Out Parameter to Meta and to set its '-1-' Parameter to the desired Meta message number: 49 for Screenset jumps and 51 for Marker jumps.
In the context of Marker jumps, I like to create a separate text-button for each song section (intro, verse, chorus, and so on). With Cycle Mode turned on, clicking the button will not only jump playback to the beginning of the cycle, but will also move the Locators to the Marker boundaries. (Note that Logic must be playing for the buttons to have any effect.) An alternative is to use a single Fader object (text or numerical is a good style choice here) the range of which spans the target Marker numbers. For a text-style Fader turn Behave As Menu on in the text window, and for a numerical Fader object set its Filter Parameter to Shot — that way you will get a single Marker jump each time you use the Fader. In the context of Screenset jumps, it's a good idea to include an Environment window displaying the buttons at the same position on each of the target Screensets.
Aside from using Fader objects to generate Meta messages in the Environment, you can use Transformer objects to convert any MIDI message to a Meta message, and you can play Meta messages into the Environment from sequences by assigning the receiving object (or any object cabled to it) to the Arrange track containing the sequence. Which method you use depends on the context. For example, you might convert MIDI note messages from a sequence to Meta messages for recording the currently sounding note pitches and velocities in a Transformer Universal Map. Or you might convert the output of one Fader to a Meta message for setting the range minimum or maximum of another Fader.
The Bang message (#99) is a particularly useful Meta message. When received by any Fader object (except one that's sending Meta messages, for reasons we won't go into here), it causes the object to resend its value. You might use that to send all values from a bank of Faders in a mixer or synth editor you've created. The Bang message value affects the outcome in various ways. If the value is an even number, the Bang message will be passed through the target object — useful when you want to Bang a whole chain of Faders. Values of 121 and 125 cause the Fader value to increment — with and without roll-over — before being sent (120 and 124 do the same with pass-through). Similarly, values of 123 and 127 cause the value to decrement.
Meta message 100 can also come in handy, as it temporarily changes Logic's tempo. The target tempo is the data value plus 50, and the tempo returns to the value in the Tempo List when playback stops or Logic jumps to the beginning of the cycle. Message 100 can't be used in sequences — it needs to be sent by a Fader object in the Environment to work.
Using Meta messages in the Environment is a big subject, but I hope that I've given give you an inkling of what's possible. For a quick overview of all the Meta messages available, check out the table below.