Discover how to control your hardware synths using Max For Live.
Back in the May 2008 issue of SOS, Simon Sherbourne's Live Technique column demonstrated how to use Ableton Live 7's new External Instrument and External Audio Effect devices to integrate hardware instruments and effects into Live. This month, we'll be extending this concept, using Max For Live to build dedicated controller devices that will allow patch browsing plus control and automation of common MIDI parameters.
To briefly recap, the Live External Instrument device can be placed on any MIDI track. The device allows you to specify which physical MIDI port that track will send to, as well as which audio input(s) to receive audio from. As long as the hardware instrument is connected to the input(s) on the audio interface, the result is a dedicated device for communicating and receiving audio from that instrument. Live will even take care of the latency introduced by the interface's input buffer!
The External Instrument device gives Live a useful connection to the outside world, but tells it nothing about exactly what external hardware is connected and how to control it. Let's take the example of a synthesizer. Most modern synthesizers allow some degree of MIDI control over their parameters, using MIDI Control Changes. Control Change number 52 might adjust the filter's cutoff frequency, and Live is quite capable of sending this Control Change using MIDI clips and envelopes. But what if, instead of dealing with abstract numbers, users could build a dedicated control device for their external instruments, complete with knobs and sliders that could be automated just like a software synthesizer?
You can probably see where this is heading... Max For Live can be used to build dedicated devices for external hardware. When saved in a rack with the External Instrument device, the entire rack acts just like a software synthesizer. You grab the rack, drop it to a MIDI track, browse patches and tweak parameters.
So where to start? There's not space to go into the basics of Max For Live in this article (although we've covered the essentials before in the April and May 2010 issues of SOS), so we must assume some basic knowledge. If you can find your way from Patching mode to Presentation mode, and you know how to create basic Objects, you'll probably be fine. In terms of Max For Live programming, everything presented here is very simple.
Let's suppose that we'd like to try making a controller device for a synthesizer. Start by loading a blank Max MIDI Effect to a MIDI track in Live. In Patching mode, double-click in an empty area, and from the Object Palette's 'All' tab, choose 'Object'. In the resulting object, type 'midiin' (without the quotes). Repeat this process and create an object called 'midiout'. Connect the output of midiin to the input of midiout. This connection will ensure that any MIDI data received by the device is passed through to the output.
Now let's build our first control, a knob to control the synthesizer's filter cutoff frequency. Double-click to insert an object, go to the Live tab on the Object Palette, and choose the 'live.dial' object. This is the most suitable control object for automation within Live.
In order to get the knob to behave correctly, we need to set a few parameters in the Object Inspector. Hit Ctrl/Apple‑I with the new live.dial selected to open the Inspector and then click the Parameter tab. The important parameters to change are Long Name, Modulation Mode, Unit Style and Parameter Visibility. Copy the parameters from the screenshot above.
Now that our first knob is set up, we need to tell it what to do. Like the example above, we'll assume that our synthesizer responds to MIDI Control Change 52 for the Filter Cutoff Frequency. You will need to consult your manual to find the exact Control Change numbers for your particular instrument. As before, double click in the blank area and add an empty object. In that object, type 'ctlout 52' (no quotes). The ctlout object transmits MIDI Control Changes. The 52 tells the object which controller number to transmit. All that is left to do is connect the leftmost output of the dial to the leftmost input of the ctlout object. We now have a working, automatable knob for controlling the filter cutoff frequency of the synthesizer. Now you can save the device and try it out within Live.
The next stage is to copy and paste this live dial and it's ctlout object for as many parameters as you want to control on your synth. Quite often it's easier to stick to the kind of parameters you feel you would want to automate during a song: you don't always need to make an entire programming environment with every parameter available. You will need to change the Inspector name parameters as well as the ctlout Control Change number for each control.
Bank & Program Change
Once all the parameters are set up and working, we can look at Bank and Program Change selectors. These will send out MIDI messages to change the patch on your instrument, assuming that your instrument supports this and is enabled to receive them.
The circuit in the screen to the right is a little more complex. The live.tab object at the top gives us two buttons to move up and down the programs. The only parameter that needs changing from the default in the Inspector is the Range/Enum. It should read 'Up Down'. The live.numbox in the middle allows direct selection of a particular program number from 1 to 128, and the Up/Down buttons interact with this via the various message boxes and maths objects. The live.numbox requires a few tweaks to the parameters in the Inspector. Change Type to 'Int (0‑255)' and Range/Enum to '1 128'. The last Live element is the live.menu object, which allows us to choose a Bank. Not all synthesizers use or need bank change commands, so this may not be necessary.
With all the correct MIDI controller knobs and the Program/Bank Changes, you should now have a fully working MIDI controller customised for your synthesizer (or drum machine, effects box, sampler, etc). Save and exit the Max environment.
The last step is the most beautiful of all. Turn your newly created controller device into a Live rack by right-clicking on the device title bar and selecting 'Group'. Now you can add the External Instrument device and set up your MIDI channel and audio inputs. While you're there, why not add an arpeggiator from Live's MIDI effects menu (perhaps your hardware synth doesn't have one), and even assign the most commonly used parameters to the rack's macro knobs, by right-clicking any knob and choosing 'Map to...'. Next, save this rack as a new device, by clicking the small Save icon in the top right of the rack's Title Bar.
From now on, you will have a single device preset which you can drag to a MIDI channel and which will not only remember which MIDI and audio ports your synth is connected to, but also give you automation capability for any parameter you choose (providing that parameter has MIDI Control Change bindings in the instrument itself, of course). Hardware integration with the ease and sophistication of software. You've got to love that!
What About SysEx?
SysEx (SYStem EXclusive) MIDI messages are complex strings of MIDI data sometimes used by hardware manufacturers to address the shortcomings of using Control Change messages, the biggest being that only 127 Control Changes are available. Larger digital workstation synths will often use SysEx messages to control just about every aspect of the synth, which can run into thousands of parameters.
The bad news is that Ableton Live 8 has no support at all for SysEx, although Max For Live does. There are workarounds to allow Max For Live to send SysEx without going through Live, but they are only for the brave. If you want to investigate further, try the following links at the Ableton web site: http://forum.ableton.com/viewtopic.php?f=35&t=138440 http://forum.ableton.com/viewtopic.php?f=35&t=149983.