Welcome to the second installment of TCRM’s look at MIDI and MIDI sequencing. TCRM 22 included such topics as: MIDI interfaces, samplers, synthesizers, an outline of the MIDI language, sequencers, and an in depth look at some common channel voice messages (program change, note on, note off). This time we’ll deal more with MIDI messages such as continuous controllers and system exclusive as well as MIDI Time Code, and MIDI Machine Control.
MIDI Control Change
Last time, we discussed most of the common types of channel voice messages, but left one for this article… Control Change. There are 128 Control Change messages (CC 0-127), which are split into subcategories depending on their intended function according to the MIDI specification. Controllers 0 to 31 are intended to send musically expressive performance parameters in real-time from such things as knobs, faders, pedals, and wheels. Due to the ranged sweeping nature of these functions, these messages are known as continuous controllers. The most commonly used are CC 1 (modulation), CC 7 (main volume), and CC 10 (pan).
Like most basic MIDI channel messages, each of these controllers is capable of only 128 (0-127) discreet values. Remember that each word of a MIDI message is a byte – eight binary digits (aka. bits), ones or zeroes. One of these bits is a status bit that’s not available for data, leaving seven bits. Seven combinations of 1 and 0 gives you 128 possible values, or 7-bit resolution.
In some situations, this may not be enough. For this reason, controllers 32-63 can be paired up with 0-31, extending the value range to 16,384 (128 squared, or 14-bits)! For example, a modulation message could consist of CC 1 and CC 33; in such a pairing, one (expressing the larger numbers) is known as the MSB (most significant byte), the other as the LSB (least significant byte). You put the two bytes together to make a larger number of possibilities, for finer resolution. (MIDI Pitch Bend is a unique MIDI message that uses 14 bits of data, not a Control Change, as it was deemed too important to limit to only 7 bits. We’ll discuss it in more detail below.)
While such paired CC numbers are rare, there is one controller message that must make use of this sort of expansion… and then some: CC 0 (Bank Select).
As mentioned in TCRM 22, the Program Change message (used to recall individual patches or sounds) is only capable of 128 values. Current synths often store more than 1000 sounds. To identify these individually through MIDI, they are sorted into collections called banks. Each bank usually consists of either 100 or 128 patches. A synth with 8 banks of 128 programs has a total of 1,024 sounds available. Sound #50 on bank #3 can be recalled by sending two messages: CC 0 (Bank Select) #3 and Program Change #50. Pairing CC 0 (bank select MSB) and program change allows selection of up to 16,384 individual programs, but adding CC 32 (bank select LSB) to the mix expands this to over two million!
Because sending three different MIDI messages, with three different values, can be a confusing way for people to think of addressing a single synth patch, most sequencing software try to make this language invisible to the user. This is done either by removing numerical designations from the GUI and using names only, or by arranging patches by instrumental category and renumbering. In this last case, selecting Grand Piano #5 from a menu may actually send CC 0 #47, CC 32 #1, and Program Change #102. Sometimes, ignorance is bliss - that is, as long as everything is working right and no trouble-shooting is required.
Controllers 64 through 69 are specified as switches, turning things either on or off. These are used for such things as the keyboard sustain pedal (CC 64), soft pedal (CC 67), and to control the use of portamento (CC 65).
The last eight controllers (120-127) are known as Mode messages because they effect the way a synthesizer acts and responds to incoming channel voice messages.
Controller 123 is used to turn All Notes Off on the specified channel. This can be useful when there are notes stuck on (due to the user making changes in connections, programs, channels, or local control while notes are playing).
Controller 120, All Sound Off, will also turn all notes off and immediately mute the audio output of the specified channel. It is not intended to be used instead of CC 123 as it will truncate audio (the release portions of patches envelopes, reverb tails, etc…). CC 120 is also both a newer and less consistently implemented part of the MIDI language; many older synths won’t respond to it.
Controller 121 is a Reset All Controllers message. It will return all continuous controllers (as well as polyphonic aftertouch, channel aftertouch, and pitch bend) to an initialized state. This can be extremely useful for those who rely on numerous continuous controllers to make their tunes more expressive and dynamic.
Keyboard synthesizers, workstations and samplers have sounds and effects onboard unlike those keyboards that are MIDI controllers only. When you wish to use a keyboard to trigger sounds from other MIDI equipment, or a virtual synth on your computer, without triggering and hearing the built-in sounds of the keyboard you’re playing, then you need to be able to turn control of the “local” (onboard) sound generators off.
For instance, when connected to an external drum unit, pressing a note on the keyboard will trigger it’s internal sound (maybe a brass sound) as well as the external drum tones. (So why not just turn down the volume on the keyboard you’re playing? Possibly because that volume setting may also be transmitted via MIDI, or because you want to hear different sounds from the internal generators, like a bass line to the drum’s you’re triggering.)
The situation is further complicated when the keyboard/synth is connected to an external DAW or sequencer. When a note on the keyboard is pressed, it triggers a sound from its sound banks, then the MIDI note-on message travels to the sequencer where it’s to be recorded. The message is then echoed out from the sequencer back to the keyboard where it retriggers the sound. In this case, for every note pressed on the keyboard, two are played. The effects of this are not always as obvious as you might think. Sometimes, the two notes may sound in such rapid succession, that they are not heard as distinct attacks. Instead, they cause degradation of the sound due to interference. (refer to the wave file examples of this from TCRM 22).
There are two methods to solve this problem. The first uses Local Control Off (CC 122) – you either set this up in the menus of the keyboard itself, or you send it the MIDI message CC 122 from an external source. With local control turned off, the keyboards send messages out the MIDI out port, but not to the internal generators. Audio is triggered by messages only from the MIDI in port.
The second method stops the MIDI note command at the sequencer. This can be done by muting the output of the recording track, turning the sequencer function called “MIDI Echo” off, or re-channelizing and assigning the MIDI track output to an ineffective or bogus output.
The final set of controller codes we’ll look at are controllers 124-127. These are saved for the Omni Off, Omni On, Mono, and Poly MIDI mode commands respectively. If these commands are sent via MIDI, their channel designations must correspond to a receiving instruments basic channel. This is a special channel assigned for such circumstances.
These modes were very important in the early days of MIDI, when polyphony was limited and multitimbral synths were rare. Nowadays they’re much less common, as most synths are polyphonic and have multi-channel capability. Basically, the four mode messages function like so:
- If the Omni setting is On (CC 125), then a channel-instrument will respond to all voice messages equally, regardless of channel.
- When the Omni setting is turned Off (CC 124), the instrument will respond only to messages assigned to one specific, preselected channel (1-16).
- When a channel-instrument is set to Mono mode (CC 126), it will only play one note at a time.
- In Poly mode (CC 127), a channel’s instrument will play notes numbering up to its designed limit.
The combination of these are used to create what are known as the four basic MIDI Modes:
Mode 1: Omni On, Poly
Mode 2: Omni On, Mono
Mode 3: Omni Off, Poly
Mode 4: Omni Off, Mono
Mode 1 - In this mode, an instrument will respond to voice messages across all channels as if they were sent on a single channel. This means that only one channel-instrument responds to every voice message and all others are inactive. It will play as many notes as it’s design limitation allows. This mode is great if you’re not sure what channels a sending machine is transmitting on, but just want to dial up your favorite sound and play!
Mode 2 – As in Mode 1, will respond to voice messages across all channels as if they were sent on a single channel, but mode 2 limits the number of notes to only one at a time. Because of its limitations, this is the least common of the modes. In fact, some equipment will not even recognize the mode at all!
Mode 3 – The third mode allows each sound in a multitimbral synth to act upon its own specified channel, disregarding all others, and will play as many simultaneous notes as its design will allow. This is the most common and powerful Mode for use in the studio. It allows the greatest number of simultaneous sounds and notes.
Mode 4 – Each sound in a multi-channel synth responds independently to its own MIDI channel. The number of notes available on each channel-instrument, however, is limited to one at a time. This mode is a perfect fit for using MIDI guitar controllers. Each string is assigned its own channel and channel-instrument, and each is limited to only one note at a time (just like the strings on a real guitar).
Thinking outside the spec.
Because of their number and flexibility of use, controller codes are often used as an open data area of the MIDI language where the intention of the original specification can be ignored. The 128 codes are often remapped to whatever functions a manufacturer requires for a particular device. This is especially true in the case of MIDI controlled effects units, mixers, and modular synths. In fact, even some lighting arrays are controlled using these codes.
In the MIDI specification, controller codes 91-95 are set aside for controlling effects parameters. Since a number of current synth models do use these to control their internal effects processing, they are worth trying (see your device manual for MIDI implementation details). For dedicated effects units, and synths with more extensive effects, further MIDI messages must often be used. These are usually either unused controller codes, or system exclusive messages (see below).
RPNs and NRPNs
Further control over an instrument’s internal settings can be accomplished using a particular set of MSB/LSB control messages known as Registered and Non-Registered Parameter Numbers (RPNs and NRPNs). Controllers 100 and 101 are set aside as LSB and MSB, respectively, for parameters already agreed upon in the MIDI spec (and are therefore registered). In actuality, only six of these have been specified to date:
MSB/LSB RPN - definition
00/00 Pitch Bend Sensitivity - defines the range of the pitch-bend wheel in semitones and cents.
00/01 Fine Tuning - allows very precise tuning of a channel-instrument within a semitone either sharp or flat.
00/02 Coarse Tuning - really acts more as a transpose function, as each step is a semitone.
00/03 Tuning Program Select - allows individual selection of a preprogrammed tuning system.
00/04 Tuning Bank Select - similar to the idea of a program bank, this recalls a bank of tuning programs. It is followed by a tuning program select message.
127/127 Null Function – this turns off the previous RPN selection, allowing data entry devices to be retasked.
This leaves 16,378 RPNs still to be defined! (The General MIDI specification, intended to simplify and standardize the MIDI spec even further, only recognizes the first three RPNs. More on GM in TCRM 24)
After a parameter has been selected, data entry (CC 06 MSB/38 LSB), data increment (CC 96) and data decrement (CC 97) are used to change the value settings. So: to set course tuning, you send CC 101 #00, CC 100 #02, then CC 06 and 38 with MSB and LSB values to set the tuning value (or CC 96 or 97 to step up or down), then CC 101 #127 and CC 100 #127 to turn off course tuning so your data slider can be used for something else. Whew! Again, many DAWs and controllers make these details invisible and hopefully less painful to use.
Controllers 98 (LSB) and 99 (MSB) work the same way bit are set-aside for NRPNs. These are intended for manufacturers to use as they see fit for any particular device.
Touching and Bending
OK, there’s a last few voice messages to look at which are commonly confused as continuous controller codes… but they are not. Like the main continuous controllers, they are there to serve musically expressive purposes. However, there are MIDI voice messages specifically dedicated to pitch bend, channel pressure, and polyphonic key pressure.
Pitch bend allows real-time control over both upward and downward pitch changes to a channel-instrument. It is not note-specific, but affects all notes on the same channel. The exact response of a channel-instrument to the range of pitch bend data varies from patch to patch. Often, it is programmable by the user.
This changeable pitch bend range combines with the 14-bit resolution of MIDI Pitch Bend messages to create an interesting effect: the bigger the range, the coarser the steps become. This leads to an strange problem with many cheap controller keyboards today. They simplify data acquisition/transmission by only sending the MSB of Pitch Bend messages, setting the LSB to all zeros, reducing the effective resolution of Pitch Bend messages to 7 bits, but also reducing the accuracy of the bend, especially at greater ranges. A bend upwards of two octaves may be as much as a semitone flat!
The dedicated springloaded pitch wheel found on most MIDI keyboards brings the wheel back to the center (0… no pitch change) automatically when you let go. When pitch bend data is sent from a sequencer, however, there is no automatic return to 0. If pitch bend messages are sent to a channel-instrument as part of a final descending octave dive-bomb at the end of a tune, and if no “reset” values are sent, then any notes on that channel may still be down an octave when the next tune starts.
Channel Pressure (aka. Aftertouch) is an expressive parameter which relates to how much pressure is applied to the keys of a keyboard after a note has been depressed. It uses a single sensor across the range of the keyboard and, therefore, is not note-specific. Instead, all notes on the same channel are affected equally. Again, the exact response of any channel-instrument to aftertouch depends on its programming and can vary from patch. It may effect timbre, tremolo, pitch… or do nothing at all.
Polyphonic Key Pressure (aka. Poly Aftertouch) is a similar concept to channel pressure, only it is note specific. This means that each individual note of a 4-note harmony can have individually controlled aftertouch data. Because of its expense to implement, and difficulty of meaningful live performance, polyphonic key pressure response has never been common in MIDI instruments, although it’s made a bit of a comeback in recent years in software synths. Some instruments that will accept the messages transmute them into channel pressure. If you own a synth that does respond appropriately to poly aftertouch, it does offer a wealth of expressive possibilities. These are most easily realized directly from a sequencer by drawing in expression data for each note, rather than in real-time from a keyboard. Polyphonic key pressure keyboards were popular for a short period in the late 1980s but were very expensive to build and calibrate, and have largely vanished from the landscape except in collectors’ rigs.
As mentioned in TCRM 22, system messages are not channel specific. They are intended to be broadcast and received by all MIDI devices. There are three categories of system messages, real time, common, and exclusive.
System Real Time messages aid in making multiple devices act together during playback and recording. It includes a timing clock which supplies a relative time base based on musical time (tempo). There are 24 clock pulses per quarter note (ppq). This means that the absolute timing resolution varies with tempo. Faster tempos offer greater resolution per second.
There are also three basic transport commands: start, stop, and continue. The Start command begins playback from the beginning of a track. The Stop command stops playback but does not return the counter to zero. The Continue command will start playback from wherever the track was last left in time. In this way, pressing Stop... and, later, Continue works as a sort of pause function.
There are two more real time messages: System Reset and Active Sensing. System Reset can have drastic results and is really best avoided. It is not actually implemented very often, and it can be way too sweeping in its effects when it is. Active Sensing, however, can be useful as it checks MIDI connections and turns off stuck notes when connections are severed.
System Common includes less relative time-based messages than real time messages including MIDI Time Code (MTC), Song Select, and Song Position Pointer. MTC is used to synchronize two or more devices, supplying hours:minutes:seconds:frames:quarter frames. It is similar to the SMPTE format commonly used for video and film production. The Song Select message allows remote recall of the various songs that may be stored on an MDM, sequencer, or workstation. The Song Position message allows the playback (or insert) position to be moved to anywhere within a song. The system real time message continue can then start playback or recording to begin at that point.
One of the primary functions of System Exclusive (SysEx) messages is to transmit information that is specific to a particular device by a specific manufacturer. This allows MIDI communication of almost anything. The beginning of a system exclusive message contains a manufacturer ID that is followed by a specific device number. If this says it’s a message for a Yamaha 01V digital mixer, then every other connected device ignores the rest of the message. Patch librarians and editors communicate with MIDI devices via System Exclusive data.
A second part of the System Exclusive command set are known as Universal Exclusive messages. These include much more in-depth transport functions, as well as tuning standards, sample dump and file dump. It also encompasses MIDI Machine Control (MMC) messages as part of the MIDI specification for SMPTE time code, extended transport functions, mathematical functions, extended MTC, and video editing commands.
I know that was a lot of MIDI tech, but MIDI is a deep and powerful spec. Sequencing, the recording and playback of MIDI messages of all types, is also a large topic and will have to wait for next time….
John Shirley is a recording engineer, composer, programmer and producer. He’s also a Professor in the Sound Recording Technology program at the University of Massachusetts Lowell and chairman of their music department. You can check out some of his more wacky tunes on his Sonic Ninjutsu CD at http://www.cdbaby.com/cd/jshirley.
Supplemental Media Examples
Here, the Little fugue by J.S. Bach is realized using the AIR Vacuum virtual synth in ProTools. TCRM23_1.wav
Now, the MIDI Modulation Controller Code (#1) is used add some tremolo. TCRM23_2.wav
The same MIDI Modulation Controller Code is now remapped to add a wah effect. TCRM23_3.wav
Finally the Controller Code data is used to add a fast vibrato. TCRM23_4.wav
The Little fugue opening is now used to trigger the Xpand! virtual synth. TCRM23_5.wav
The timbre of the Xpand! patch is now changed by sending both CC 11 and aftertouch messages. TCRM23_6.wav
An example of how less expensive keyboard controllers sometimes limit pitch bend data by truncating the LSB. Note the obvious steps in the shifting pitch and the fact that the top of the 2-octave rise comes up a bit flat…. TCRM23_7.wav