For a while now, I’ve been searching on the internet for some decent instructions on how to program toggles in Logic using a MIDI drum kit or keyboard. I’ve found a few hints here and there, but nothing that explains it from beginning to end. A couple of weeks back I finally managed to get a working setup so here’s a description of how to go about it.
The idea is simple. A toggle is a button that turns something on or off. The mute button is an example of a toggle. If it is enabled, a track is muted; if it is disabled, the track is unmuted. I wanted to be able to trigger the toggling using the MIDI output from an electronic drum kit. With such a setup, I’d be able play drums on the drum kit, but I could assign a couple of drum pads to mute and unmute tracks such as baselines, guitar riffs etc. I’d basically be able to play entire songs using only a drum kit 🙂
Most MIDI control panels like the Mackie Control or the Behringer BCR2000 have toggle buttons that are specifically designed for this purpose, but you can’t hit a MIDI control panel with a drum stick 😛 The problem with electronic drum kits, at least mine, is that it is capable of transmitting two types of MIDI commands only: Note On and Note Off messages. So the challenge is to translate these messages to the proper Logic Fader Data, and then route that data to the correct buttons. As an example, consider the following setup. I have a V-Drums kit which sends MIDI output to Logic at Port 6, and an SPD-S which sends to Port 7. I’ve attached Monitor objects to all my MIDI ports, and you can see some Note On and Note Off messages coming in from the drum pads. This could just as well have come from any MIDI keyboard, by the way.
I’m interested in controlling the mute button of a channel called SpaceStrings, where I’ve loaded an ES2 patch. The first step is to figure out to which Fader Data the channel mute button will respond. Attach a MIDI Monitor object and mouse-click the mute button to find out. In my case, it’s Fader (Channel) 1, where Data Byte 1 is 9 and Data Byte is either 0 (unmuted) or 1 (muted).
Now how to transform the incoming Note On and Note Off events into this Fader Data format? With Transformer objects – you’ll need four of them, as shown in the setup below. I’ll explain each of the Transformer objects, and I recommend not to omit the MIDI monitor objects. Strictly speaking you don’t need them, but they are quite useful for troubleshooting and for understanding what happens.The first step is to filter out the Note Offs. You’ll only want to keep the Note Ons. If you don’t do this, a single hit on a drum pad will result in two toggles (ON and OFF), rendering the setup useless. The first transformer takes care of this: any event coming in which is a Note with a velocity between 1 and 127 is routed to the top cable. Everything else is routed to the bottom cable where it is discarded. This trick makes use of the fact that Logic does not consider a Note Off to match the Velocity condition. It took me a while to figure this out!
The second Transformer is the actual toggle. It is called an alternating split, which is a standard Transformer function in Logic. Every note arriving at the toggle is alternately proxied to the top and the bottom Transformer outputs.
The last two Transformer objects take care of changing the incoming events to the correct target format. The top Transformer creates a “Mute Track” event (or “F 1 9 1“, in Logic Fader data terminology), the bottom Transformer creates a “Unmute Track” event (“F 1 9 0“).
To keep things tidy, I’ve created an Alias for the mixer object I want to control. The last Monitor object bundles the correctly formatted events and sends them to that Alias. Now run a cable from (in my example) port 6 or 7 to the “remove note off” Transformer object, and you’re done! Hit a stick on a drum pad, and see how your channel mutes and unmutes.
Now you probably don’t want your entire kit to cause this behavior. You will want to filter out specific notes prior to the “remove note off” Transformer. That way you could use e.g. the floor tom for toggling a guide track on and off, but still use all other pads to just play drums. Here’s a Transformer that filters out a single pad (C#3, in my case):
Of course it doesn’t have to stop here, you can use this mechanism for bypassing effects, solo’ing tracks, enabling and disabling plugin parameters, or more complex things like switching LFO destinations in a modulation matrix.
Have fun patching and let me know if you can’t get it to work!