Signal Processors... Meet MIDI
Signal processor control is one of MIDI's less well-known applications yet it offers enormous scope for the imaginative user. Craig Anderton is your guide...
MIDI is not just for keyboard players. Electric and acoustic musicians, from speed-trash-metal-postpunk guitarists to ballad singers, can take advantage of MIDI to control signal processors that shape and sculpt a sound into something unique and fresh. Whether live or in the studio, MIDI-controlled signal processing represents a new frontier that, so far at least, has been little explored. In particular, guitarists — whose sonic arsenal has been augmented by MIDI multieffects, program change footswitches, and MIDI control pedals — can benefit greatly from recent advances in signal processing technology.
There are two main areas of control. Individual effects parameters (echo time, delay feedback, chorus depth, filter bandwidth, etc.) can be controlled remotely via MIDI control pedals, sequencers, keyboards, and other generators of MIDI data; and programs can be switched with program change commands. These two options alone open up many possibilities.
Because much of this subject will be new to those who haven't used MIDI a lot (such as guitarists and traditional recording engineers), we'll start with a refresher course on MIDI, program changes, and continuous controllers.
MIDI stands for Musical Instrument Digital Interface, but the key word is "interface". MIDI's main purpose is to allow musical machines to communicate musical data to each other, such as which note is being played, which pedal is being moved, and so on.
Any MIDI system requires a transmitter of MIDI messages (eg. 'turn up the volume') and a receiver that will correctly interpret and act on these messages. The information is carried along a cable from the transmitter's MIDI out to the receiver's MIDI in. There are a variety of MIDI messages, many of which don't apply to signal processors. In fact, signal processors often deal with only two kinds of MIDI messages: program changes and continuous controllers, so we'll concentrate on those.
Note that most MIDI messages can have a unique 'channel' identification, from 1 to 16. In the Poly mode of operation (the most common for use with signal processors), receivers set to a particular channel will respond only to messages intended for that channel. Thus, two MIDI receivers set to receive different channels could monitor the same data stream, but still be independently controlled. Another mode, Omni, lets the receiver accept data coming in over any channel. If you're simply using a signal processor with one control device, setting the signal processor to Omni eliminates the need to concern yourself with setting channels.
Computer electronics brought about effects units that could store different groups of control settings as individual programs. This meant that once you had created a sound you liked, you could take a 'snapshot' of all the unit's parameters, and save this information in memory for later recall. Early units had only a dozen programs or so, but current signal processors can contain hundreds of programs.
The original MIDI spec allowed for 128 MIDI program change messages, which is why a lot of synthesizers and signal processors offer 128 programs. As usual, people wanted more — so now an addition to the MIDI spec. Bank Select messages, can select individual banks of programs. Although few pieces of gear use this option at present, you can expect to see it become more common in the years ahead.
The first mass-market, MIDI-controlled signal processor was a Yamaha delay line that responded to program changes issued by a master keyboard. Thus, if you connected the keyboard's MIDI out to the delay's MIDI in and changed programs, the delay line would change right along. You could set up an echo patch for strings, flanging for guitar, chorusing for brass patches, etc., and each would be selected in tandem with programs selected on the keyboard.
It soon became apparent that you might not always want a one-to-one correspondence between program numbers on your synth and signal processor. For example, you may want to use the same signal processing program for a dozen different synth patches, but copying the program to 12 different locations in the signal processor wastes program memory.
Consequently, most signal processors let you set up a program change table that specifies which program will be called up in response to a particular program change message. You might create a table where program change message 12 calls up signal processor program 16, program change message 2 calls up signal processor program 47, and so on.
Mapping is also useful with devices that have more than 128 programs but do not allow for Bank Select. You could map, say, program 125 to program 265. Although this would still only allow you to access 128 programs, they could come from a much larger pool of available programs.
Changing from one program to another is a good start, but for more subtle effects it's vital to be able to vary a particular parameter or group of parameters (brightness, reverb damping, decay time, etc.) within an individual program.
When you call up a program's parameter, you usually change its value by turning a front panel knob, or perhaps by pushing buttons to enter a particular value for that parameter. One way to change parameters in real time is to grab the knob and move it (or put the 'knob' in a pedal and use your foot), but that doesn't let you change multiple parameters at the same time, and you'll probably want to use your appendages for other purposes anyway. Fortunately, most signal processors will let you control parameters remotely by sending them MIDI continuous controller commands over a MIDI cable.
The idea of continuous controllers came about because synthesizers have pedals, knobs, levers, and other physical 'controllers' that alter some aspect of a synth's sound. However, controllers have gone well beyond that. Recording engineers can choose from several 'fader boxes' that resemble mini-mixing desks and emit a variety of MIDI signals; guitarists regularly use footpedals that produce controller messages.
Like program changes, continuous controller messages are transmitted over a MIDI output and received by a MIDI input. At the transmitting end, the unit's computer usually digitises the physical controller motion into 128 discrete values (0-127). As one example, consider a footpedal that generates continuous controller messages. Having the pedal all the way back typically generates a value of 0. Pushing down on the pedal increases the values until at midpoint, the pedal generates a value of 64. Continuing to push on the pedal until it reaches its maximum travel generates a value of 127.
MIDI identifies each continuous controller message by using an ID from 0 to 127. Don't confuse this with channel IDs; each channel can support up to 128 controllers, so a controller 7 message appearing over channel 2 is independent from a controller 7 message appearing over channel 3. Therefore, a signal processor with 128 different parameters could have each assigned to a unique controller number (1 for reverb first reflection time, 2 for reverb high-frequency decay, 3 for reverb low frequency decay, etc.).
When controlling a signal processor via continuous controllers, the basic idea is to assign a particular parameter to a continuous controller number. Then all you need is a control mechanism (such as a pedal) that generates controller messages of the same number. For example, if a device's level parameter is assigned to controller 7, and your pedal can generate controller 7, hook the pedal's MIDI out to the device's MIDI in and your pedal will control volume (providing that both are set to the same channel, of course). If you assign the chorus depth parameter to controller 12, then set the pedal to generate controller 12 data, the pedal will vary chorus depth.
Synthesizers have some standardised controller numbers (controller 7 usually varies the master volume) but with signal processors, you're pretty much on your own. You'll need to decide which controller numbers correspond to which parameters if they're assignable, although some units have fixed assignments.
With many signal processors, you can set different parameters to different controller numbers, and/or assign several parameters to the same controller number so that a single pedal motion could, for example, increase the level and reverberation time while boosting the upper midrange.
There are two common ways in which signal processors assign controller numbers to parameters:
• Per Program. Each program has an assignable parameter (or group of parameters) that can be controlled by continuous controller messages. For example, controller 5 might vary chorus depth in one program, or echo feedback in another. This is convenient if it's difficult to set the transmitter's controller number. (For example, there's one pedal for guitarists that only generates controller 7 messages. It requires that you map the parameter you want to control to respond to controller 7.)
• Global. With 'global' controller assignments, all (or at least most) parameters in the unit have a continuous controller number that is fixed, either at the factory, or by whatever assignment you give it. For instance, if echo feedback is assigned to controller 12, then every patch that uses echo feedback will have that parameter respond to controller 12 messages. This makes it necessary to select the desired controller number at the transmitter to accommodate the receiver, whereas with the per-program approach, it more common to change the target controller number at the receiver.
Different effects units use several ways to decide how continuous controllers will 'take over' from a pre-programmed setting. One is to add to (or subtract from) the programmed setting; usually 'inversion' and 'scaling' parameters will be available to allow you to control this response.
Scaling determines how far the parameter can vary from the programmed setting in response to a given amount of controller change. Inversion sets whether increasing controller values will increase (+ scaling) or decrease (- scaling) the parameter value. Often these are combined into one number, such as +50 (which represents 50% scaling of full value in a positive direction), -37 (37% scaling of full value in a negative direction), etc. Figure 1 shows an example of an input signal scaled to +50 and -100. Greater controller amplitudes increase or decrease the programmed parameter value, depending on whether the polarity is positive (+) or inverted (-).
If you ever have a situation where the continuous controller messages don't change a parameter very much, check the programmed value of the parameter being controlled. If its value is close to minimum or maximum, there won't be enough 'headroom' for the controller to make much difference, especially with scaling close to 100%.
Another design approach is to simply have the parameter follow the incoming controller value. A controller value of 0 would set the parameter to its minimum value, and 127 to its maximum. This works well with sequencers, where it's usually easy to adjust controller values. With footpedals, it's more of a problem since you might not always want the footpedal to cover a parameter's maximum possible range.
Yet another method prohibits parameters from responding to continuous controllers until the controller passes through the preprogrammed value. When that happens, the parameter follows the controller messages. This is helpful when switching between programs when a footpedal is programmed to control different parameters. The parameter will stay as originally programmed until you start using the pedal and go past the existing setting.
Now that you know how to control your signal processors, let's investigate some applications...
If you play to a MIDI sequencer or drum machine and have defined song structures, then controller events and program changes can be recorded as part of a sequence. For guitarists, this means that functions normally triggered by footswitches and pedals are completely automated, freeing you to concentrate on just singing and playing. (Speaking of singing, manipulating the harmonies on a Digitech IPS33 using continuous controllers can be fun.)
Sometimes a patch change is too abrupt to give the desired effect. For example, on one tune I use the same basic patch throughout but change the distortion drive for rhythm and lead parts.
This change often occurs over a measure or two, which sounds much better than just having an instant, switched change. During a lead section, continuous controllers also determine the amount of echo feedback, echo mix, and sustain. All of these changes happen over time (for example, as the solo progresses, the amount of echo feedback increases) which sounds very natural — but best of all, there's no pedalling or switching.
During mixdown, feed a taped vocal track into an Alesis Quadraverb or similar multieffects unit. The Quadraverb provides chorusing, EQ, reverb, and other effects typically used on voice; in addition, many parameters as well as overall level can be controlled via MIDI. You can therefore use a sequencer to automate all kinds of interesting vocal effects, and mix the vocal while you're at it. Similar units will usually provide the same sort of functions.
A MIDI guitar that uses pitch-to-MIDI conversion (like the Roland GR50, Casio PG380, or Gibson Max) can be played as a standard electric guitar. Normally the MIDI data drives synth modules, but there's no reason why you can't use the MIDI data solely to control processors that affect the straight guitar sound. For example, tie echo feedback to note pitch, so that higher notes have longer echoes (good for solos). Have EQ track the notes being played, or tie chorus depth to velocity so that louder sounds swirl more. Some MIDI guitars offer mechanical whammy bars and other physical controllers, giving you access to signal processor parameters at the guitar itself.
MIDI-controlled signal processors can add a lot of useful effects to acoustic sessions, but some people have the misconception that sequencing controller messages and program changes requires playing to a click trick. This isn't so. If you sync a sequencer to tape and set it to a fairly high tempo (like 180 beats per minute), you can treat the sequencer as an absolute time device that identifies elapsed time since the beginning of the tune. The sequencer serves not so much as a musical counter, but merely as a way to trigger program changes and churn out MIDI controller data on cue; as long as the sequencer remains synced to tape, program changes and controller messages recorded into the sequencer at a particular time will always play back at-that particular time. If the tape speed varies, the sequencer will follow along.
Some people assume that in order to have a program change or other message fall 'on the beat', it's necessary to play in time with a sequencer. However, a computer-based sequencer with average resolution, running at 180 bpm, can resolve 288 discrete events per second. This means the sequencer can record a piece of MIDI data about every 3/1000ths of a second (3 milliseconds), so the most you can be off from the beat will be 1.5 ms — certainly not something you'd notice.
Note that you don't need much sequencer power to do this sort of thing. In fact, you can run a spare sequencer (such as a small hardware sequencer) just for signal processors in sync with your main sequencer, increasing the number of available channels while you're at it.
For many guitarists, the most convenient way to access MIDI parameters will be with footpedals that produce continuous controller data. Several companies, including ART, Lake Butler Sound, and Morley make suitable MIDI control pedals. In addition, Anatek's Pocket Pedal can convert a standard resistive volume pedal (Yamaha FC7, Korg EXP2, Ensoniq/Emu keyboard pedal, Roland EV5, DOD/Digitech volume pedal, Ibanez VL10, etc.) into a MIDI pedal capable of sending controller messages 1,5,7, or pitch bend. (The controller numbers cannot be changed, so you'll have to do any mapping at your processor.) A normally open or closed footswitch plugged into the Pocket Pedal can send switch controllers 64, 65, and 66. Note that the effect's MIDI out should be connected to the Pocket Pedal's MIDI In, since this is how it gets its power.
Many sequencing programs (Vision, Beyond, Performer, etc.) now include on-screen 'virtual faders' that can be assigned to various continuous controllers. If your signal processor allows for multiple parameters to be controlled with continuous controllers, mousing around with software sliders is often a lot more convenient than using the signal processor's switches and sliders since you merely have to grab an on-screen fader and move it to change a parameter. The faders will often include a readout of the value, which is very helpful in determining how your processor will respond to different controller messages.
Figure 2 shows Vision's faders set up to control several functions in the Peavey ProFex. Faders F1-F5 are set to controllers 20-24, which are all transmitting over channel 1. To help remember which fader controls which function, each has been named in the MIDI Instruments window, and set to the same channel as the ProFex. With Vision, clicking on the rightmost triangle in a fader strip calls up a popup menu that contains a list of all available controllers.
Programming lots of controller messages into a sequence can drastically increase the sequence's memory requirements. Moving a mod wheel or pedal generates hundreds of events; too many of these can cause timing delays or result in 'MIDI clog'.
Fortunately, much of the time you can use a 'snapshot' approach and just insert a single controller values when you want to change a parameter. The parameter will remain at this value until changed again. Figure 3 shows a continuous controller fading in the master volume parameter. 3A shows the fade entered with a pedal; 3B shows a 'snapshot' version of the fade. There is little audible difference between the two. C shows the same signal, but thinned using a data thinning algorithm that removes data falling within a specified number of clock pulses or values of a neighbouring piece of data. Clearly, B and C use a lot less memory than A.
Some signal processors accept messages besides continuous controllers; note pitch, velocity, pressure, etc. These are handy for tying a processor's response to a specific note range on a keyboard, or for adding expression with velocity or pressure.
The above tips should get you going. There's a whole world of control out there, so crack open the manual, hook up a few MIDI cables, and make your own sounds. With synths sounding increasingly alike (and many people using the same factory patches anyway), signal processors remain an area where, thanks to MIDI control, you can exercise a great deal of creativity.
Feature by Craig Anderton
Previous article in this issue:
Next article in this issue:
mu:zines is the result of thousands of hours of effort, and will require many thousands more going forward to reach our goals of getting all this content online.
If you value this resource, you can support this project - it really helps!