Creative Console Articulation Switch
The accepted standard for changing the current articulation involves sending a MIDI note using some of the lowest possible values, outside the range typically represented on a keyboard. The 88 keys on a piano are represented by notes 21-108, leaving the values 0-20 and 109-127 underutilized most of the time - so why not use those bottom 21 values to mean something else?
This is a clever technical solution to the problem, but it's far from convenient for a variety of reasons. Firstly, it means that when seated in front a controller you have to either temporarily transpose it down a couple of octaves or use a different keyboard temporarily dedicated to the task. Secondly, articulations are generally laid out in a nice numeric sequence but I find it annoying to have to mentally convert between a MIDI note number and a seemingly arbitrary key on the keyboard. Surely there has to be a better way?
Tried and Abandoned
I went down a few blind alleys before settling on my current technique. The approach I spent the most time on involved automatically mapping MIDI channels to articulations. This held quite a bit of promise initially, until I realized one of my primary libraries had more than 16 different articulations for a single instrument. I eventually abandoned the approach to settle on what I describe below.
An Articulation "Shift Key"
I had recently acquired a set of Monogram Creative Console modules to use for recording multiple channels of performance expression, since they have a nice three-fader module along with several other modular options. Early on I had toyed with the idea that holding down one of the configurable buttons to shift into an articulation switch mode would be convenient. So my control cluster would look something like this:
I just couldn't see how to make it work in Logic initially. The flexible MIDI scripting environment can't be used for the task, and the Logic Pro MIDI Environment seemed too limited for what I had in mind. It turns out I just needed to dig a little deeper, because the MIDI Environment transformations are pretty capable - they're just not especially intuitive.
If you're not familiar with the MIDI Environment in Logic? It allows deep access to how MIDI routing works inside the DAW. To see the path from MIDI inputs to the sequencer, choose the MIDI Environment menu item in Logic's Window menu and switch the Layer to Clicks & Ports. This configuration is saved within individual projects, so tinker with a blank project to get a feel for it.
Here's how I made it work for me...
The key to the puzzle was realizing that a lot of power is buried in what Logic insists on calling "Faders." The Switch Fader in particular allowed me to re-route MIDI through a transformation in response to one MIDI signal, and then back to the original path in response to another. Here's what that looks like:
The default environment would have the Physical Input wired directly to the Input Notes visualization, so all I've done is add two parts: the switch (New > Fader > Special > Switch), and a MIDI transformer (New > Transformer). The image above has the switch selected to reveal how I have it configured. The part that makes it work is setting Input to Control, the MIDI Channel immediately below to 16, the enigmatically named -1- below that to 119 = Ctrl 119, and the Range to 0 1. What this does is cause the switch to respond to MIDI CC 119 messages on channel 16, where value 0 causes all subsequent MIDI messages to go out the first output, whereas value 1 switches it through the second output. For cosmetic reasons I've set Style to As Text and by double-clicking on the switch I've been able to edit the names associated with the numeric values: 0 is Off and 1 is On.
Following the flow, you'll find that MIDI coming out the top output on the switch goes directly to the Input Notes visualizer as before. This is the normal state where everything works as always - until that fateful CC message arrives, and the second output routs MIDI through the Transformer I've named Articulation Mapper. Here's my initial simple configuration for the Transformer:
The Mode here states that all events that don't match these criteria are left untouched. So while the switch is on, only keys in the range C3 to G#4 are remapped as described under Conditions. Next, you'll see settings that pass these notes through after changing their MIDI channel to 16, and subtracting 60 from their note value. This means that middle C will now be passed along as MIDI note C-2, the lowest keytrigger, and so on up to G#4 which is mapped down to the last note below the typical 88-key range.
So far, so good. Now all I needed was a way to send the CC messages in question.
Using the software included with the Monogram I set up a button to do just that:
Now I just hold down my new Articulation Shift button and the 21 keys starting from C3 send keyswitches starting at C-2. Everything works as expected. Or at least it works so long as I'm cautious about not holding a note before pressing shift and then releasing it, which can result in stuck notes. Sadly, there's no way to differentiate between note on and off messages with the transformation, much less keep track of what notes were held before engaging the switch. What I wouldn't give for access in the Environment to the full scripting environment available on individual tracks!
A More Natural Mapping?
Now, if only I could remember what key went with what articulation. This bothered me enough to change to a more complex transformation. Your mileage may vary. I was inspired by Spitfire Audio's own plug-in which organizes articulations into pages containing eight articulation, arranged in two rows of four.
Here's what I had in mind, using eight keys per octave to mirror the two rows...
This requires more than a simple arithmetic operation, using a new configuration for the Transformation based on a key-by-key map of input values to output.
I didn't want to remap every key above middle C to channel 16, only those affected, so I wound up with four similar maps to cover enough octaves to trigger every switch I need for all my libraries:
This works exactly as expected, and fits in neatly with the rest of my Monogram configuration. Now, back to more musical endeavors!