THE M-AUDIO ICONTROL: ITS MIDI IMPLEMENTATION AND A SAMPLE EMULATION Art Hunkins www.arthunkins.com abhunkin AT uncg DOT edu October 2007 Although designed as a dedicated controller for Apple's GarageBand, the inexpensive M-Audio iControl is HID-compliant for *both* the Mac and Windows XP. Thus it is potentially useful for a multitude of MIDI control applications on either platforms. Unfortunately, little is known of its MIDI implementation. The present article attempts to remedy this situation - as well as to show how the iControl can be emulated by other control surfaces (here the Edirol PCR-30/50/80). Before doing so, however, I want to mention that I've already made use of these MIDI implementation data by creating a Mackie Control Universal emulation on the iControl, part of a substantial set of MCU emulation scripts for diverse control surfaces. (They accompany my article, "Control Surface Emulation of the Mackie Control Universal" - see www.arthunkins.com/articles.htm. The VBScripts, designed for MIDIOx, are Windows only.) With this script, the iControl works well to substantially mimic MCU controls. MIDI Implementation of the iControl: The iControl implements a single fixed patch; it is not programmable. All messages sent on channel 1. All controls are Continuous Controllers. All buttons are 127 = on, 0 = off, momentary contact (press = on, release = off). The 8 channel pots and Joy Wheel are stepped encoders: one step clockwise = 1; one step counterclockwise = 127. When encoders are turned fast, steps can be greater than 1, and less than 127. Controller assignments: 7 buttons (left-most column), Volume through EQ: CC 97-103 Option: CC96 Track/Parameter: CC104 (up), 105 (down) 8 Track Selects: CC88-95 8 Rec Enable: CC64-71 8 Mute: CC80-87 8 Solo: CC72-79 8 Pots (rotary encoders): CC16-23 Jog Wheel (rotary encoder): CC24 6 Transport (left to right): CC106-111 These are: Record, Rewind to Start, Rewind, Play, Fast Forward and Cycle. Master Volume: CC7 (0-127) That's it; simple and straightforward enough. *Lots* of buttons (48 of them). As a challenge, I wrote a VBScript for MIDIOx (a free, Windows-based MIDI data-conversion utility - www.midiox.com) that allows the Edirol PCR-30/50/ 80 series controllers to emulate the iControl. As it stands, the script itself (PCRX02iControl.vbs) is fairly useless, since GarageBand - the chief application for iControl - is a Mac-only program! However, I think the script is an excellent template/guide for similar, Mac-based scripts, and can be very instructive. Indeed, it is a *complete* emulation of the iControl, in spite of the fact that the Edirol PCR's, like many other control surfaces, include only a limited number of button controllers (in this case, 9). The script illustrates several ways to adapt controls to serve in ways their designers never intended. (A prime example is, of course, the use of MIDI keyboard notes to substitute for button controls.) The script itself is highly commented; a simple text file, it can be viewed and edited in any text editor. I'll let it stand on its own, pointing out here only its more unusual features. First, though, I'd like to explain why the point of departure for my emulation is PCR patch 5, instead of default patch 0 (which would otherwise be preferable, as it cannot be overwritten). (Note that all factory patches are fully documented in the PCR manuals.) The advantages of patch 5 are: 1) only one port is used (except for pedal inputs, which are not in play here); 2) only one channel (16) is used; 3) all outputs are either CC or note messages (patch 0 includes several other types, including RPN and sysex); 4) like the iControl, natural groupings of CC's are numbered consecutively, thereby facilitating for/next loops. All these factors make a script based on patch 5 simpler, more efficient and easier to read/understand. Noteworthy Features of PCR0X2iControl.vbs: 1) The major challenge is to emulate the iControl's 48 buttons with the PCR's 9 buttons + keys. This imbalance leaves 39 buttons to be emulated by notes on the PCR - an unwieldy arrangement that would occupy most of the keyboard (rendering it useless for performance purposes) and prove a visual and ergonomic nightmare. My solution was to take four available sliders (S5-8) and turn them into a multifunction selector mechanism that designates a *single* group of 8 buttons (keys) as *either* Track Select, Record Enable, Mute or Solo. Doing so reduces the number of keys required to 15 (7 for the left-most column of iControl buttons + 8 "multifunction" buttons). 15 is a reasonable number of keys. To facilitate as "intuitive" a keyboard arrangement as possible, the user may designate the specific notes he/she wishes to emulate the buttons. 2) Making rotary pots or sliders emulate endless encoders is problematic at best. In order to achieve a more flexible approximation, S3 and S4 implement a "multiplication factor" for both Jog Wheel and the 8 pots. While the default factor is 1, adjusting S3 or S4 increases the range of S2 (Jog Wheel) or R1-8 (the 8-pot emulation) up to 10-fold - in integer increments. 3) A final option permits the user to either allow other MIDI messages to pass through the script, or to block them. Either option could be appropriate, depending on circumstance - especially whether or not the PCR were functioning in other ways besides iControl emulation. This option is exercised by commenting out the fourth-to-last script line or not. (Default is to let pass.)