Everything You Need To Know About MIDI Messages But Were Afraid To Ask

MIDI. There's a lot of musicians and producers who don't know how to use this protocol to improve their musical performances and add more expression to their instruments. Let's take a closer look.  

M.I.D.I.—Musical Instrument Digital Interface—shook up the industry when it was introduced in 1983, by separating the player’s performance from the sound of the instrument, and this powerful digital communication protocol has been going strong ever since. To make basic use of MIDI, a player or producer really doesn’t have to know much—or anything, really—about  how it works under the hood, but eventually even novice users get to the stage where they want to perform more advanced editing on a MIDI recording, or go even further—maybe tweak a sound to respond more expressively to performance gestures. Then they’re probably ready to dig a little deeper, and acquire some technical know-how about the inner working of MIDI, and the various MIDI messages that are used to craft the most expressive, musical performances. There won’t be room here to get into advanced applications, but I will cover the basics about the most common MIDI messages—so here goes.

Fig 1 The wonderful world of MIDI

Fig 1 The wonderful world of MIDI

 

Channel Voice Messages  

The bulk of the musical performance data of a MIDI recording falls into the message category of “Channel Voice Messages” (I’m going to ignore the old-school “Channel” designation here). The 7 Voice Messages are: 

• Note-On

• Note-Off

• Monophonic (Channel) Pressure/Aftertouch

• Polyphonic (Key) Pressure/Aftertouch

• PitchBend

• Program Change

• Control Change (or Continuous Controller) messages, a.k.a. CC messages, of which there 127 

Note messages  

The first question many people have, when presented with this list is “why are Note-On and Note-Off separate messages?”—in a standard “piano roll”-style MIDI editor display, a single bar includes both the beginning and end of each note. Well, when a Note-On message is generated—by a player depressing a key or tapping on a drum pad—the MIDI recorder (nowadays a Virtual Instrument (V.I.) track in a DAW) has no way of knowing how long that note will be held, and other, additional notes will likely be played before the key is let up. So the MIDI recorder keeps track of what notes are held down, and when the matching Note-Off message is received for each, it assembles the two related Note messages for that key into the one note bar you see in the editor display—the bar’s start & end points indicate when the key was depressed and released, respectively—the Note-On and Note-Off messages, put together for a complete picture of the performance (in respect to that one note!).  

Fig 2 A MIDI Piano-Roll display (C); a MIDI Event Editor window (R)

Fig 2 A MIDI Piano-Roll display (C); a MIDI Event Editor window (R)

This is accomplished by storing the appropriate information in two of the three data Bytes that make up every individual MIDI message. The 1st Byte contains a code to identify the message type as Note-On or Note-Off (the other messages in that list of 7 all have their unique codes, as well). The 2nd Byte (Data Byte 1) identifies the specific note (octave+pitch), and the 3rd Byte (Date Byte 2) registers the Note’s Velocity (I’ll come back to that in a minute). Each of these (8-bit) Bytes can hold 7 bits of usable data, so the range of all MIDI message values can have 128 possible values (27), from 0–127. For example, 128 individual notes are specified in the MIDI spec, extending from about 2 octaves below the lowest note on a standard 88-key piano keyboard to about 1.5 octaves above the highest piano note—Middle C is MIDI Note Number 60. (You should see these data Bytes and their values if you have a look in your DAW’s MIDI Event Editor). 

Note Velocity 

Velocity—the 3rd Byte (Data Byte 2) in each MIDI Note message—is one of the most important (and one of the most frequently-edited) bits of MIDI data. It carries data that describes the player’s touch—specifically how fast (velocity) the key (or drum pad) was pushed down. In more familiar musical terms, this corresponds to how hard the note was played—faster (higher) Velocities, up to the max of 127, indicate harder playing. How this information is interpreted by the sound source—the V.I.—is up to that Instrument’s sound designer, but 999 times out of 1000, the V.I. is programmed to react as a real instrument would—harder playing (higher MIDI Velocity values) results in notes that are louder, brighter, and (for percussive sounds) have sharper attacks. Tweaking Velocity data can be very handy for many reasons—to tame a heavy-handed performer, to compensate for a overly light or heavy MIDI keyboard action, or to simply correct the occasional missed or overplayed note in an otherwise well-played track.  

Continuous (streaming) MIDI messages 

Four of the next message types—PitchBend, CC, and the two types of Aftertouch messages—are intended for streaming-type (continuous) musical gestures. Since all individual MIDI messages are only three Bytes long, and each carries only one piece of performance data, longer strings of Aftertouch, Pitchbend, or CC messages are strung together—their values change gradually as the messages are generated, creating a gradually-changing datastream that is applied to various musically expressive parameters in a V.I., like volume, pitch, tone, brightness, etc. 

Fig 3 Strings of continuous (streaming) MIDI messages

Fig 3 Strings of continuous (streaming) MIDI messages

So these message strings would be utilized if you wanted to, say, hold a sampled trumpet note and swell it (gradually louder and brighter), or simulate the pitchbend or vibrato effect that a guitarist might apply to an otherwise bland sustaining note. (Almost) all these streaming-message types work the same way—they’re categorized by how they’re physically generated.  

Give Aftertouch some (after)thought 

The two Aftertouch (Pressure) messages are both generated by squeezing down on a key after the note has been triggered and is still being held down. By far the most common one is Channel, or Monophonic, Aftertouch. A pressure-sensitive strip in mounted below the MIDI keybed, and once the note has been struck (hitting the separate Velocity sensors) and is being held (sustained), the player pushes the already-depressed note down further, into the Aftertouch sensor strip. This continuous pressure generates a continuous stream of Aftertouch messages, with the values of each corresponding to the (changing) amounts of pressure being applied. If a V.I. is programmed to respond to this datastream with musical changes to the sound (as above), then the player can add expression to held notes, without needing an extra hand (or foot). 

With Channel (Monophonic) Aftertouch, there’s only one sensor for the entire keyboard, and pressing any note will generate Aftertouch messages that will necessarily be applied to all held notes on that particular Instrument. With the other Aftertouch type, Key (Polyphonic) Pressure, there are separate Aftertouch sensors for every key, so each note in a chord can have expression added to it independently. For years there were almost no keyboards available with Poly Pressure, but lately, specialized advanced MIDI controllers are making good use of it in a push for advanced MIDI expression (see Roli and Linn). 

PitchBend 

PitchBend messages are generated by one of the two wheels present on virtually all MIDI keyboard controllers—usually the left, spring-loaded one. This is another type of message that works by having the wheel generate a string of messages that gradually shifts a V.I.’s pitch either up or down. Unlike other MIDI messages, since PitchBend is bidirectional (up & down!), the Off position is not at the bottom of the wheel’s throw (0), but at the center (spring-loading makes the wheel jump back to the center Off position when you let go), so Off is a value of 64 (halfway between 0 (pitchbend down) and 127 (pitchbend up), of course).

The MIDI PitchBend messages themselves don’t know or care how far the pitch is actually “bent” up or down—they only register the position of the wheel. Once again, the V.I.’s sound designer (or you, if you choose to change the default value) sets how much pitch change will occur at the high and low extremes. The default for most patches (the ones where pitchbend makes sense musically) is usually two semitones up and down, but it could be set to any value, even as much as an octave or two, depending on the range the V.I. offers in its programming parameters.  

Program Change 

Program Change messages—to switch from one instrument patch to another—may not be entierely obsolete, but are not really needed these days, and so are rarely used with Virtual Instruments in a DAW. To save space, I’ll skip over them and move straight to...

Control Change (CC) messages

This is a big category, because it includes 127 (well 120, really) individual CC message types. All CC messages work just like the other continuous message types—long strings of them with gradually changing values provide for gradual, musically expressive performance gestures. Not all of the CC message sub-types are equally common—some are defined, while others are simply available to be assigned to any desired V.I. parameter. I’ll just cover a few of the most common ones.. 

Fig 4 MIDI PitchBend & Modwheel (CC1), and damper pedal (CC64)

Fig 4 MIDI PitchBend & Modwheel (CC1), and damper pedal (CC64)

CC#1 is defined as ModWheel, simply because it’s generated by the other (Modulation) wheel found on virtually all MIDI controllers (the one on the right). Most of the time, V.I.s have it assigned by default to add an automatic (LFO-generated) musical Vibrato effect, or for instruments where that would be inappropriate (piano), possible a Lowpass Filter, for tone control. But, again, it can reassigned (or doubly or triply assigned) to any expressive V.I. feature(s) you want. 

CC#64, though it can carry a continuous stream of CC messages, is usually implemented as an On-Off switch to control the MIDI keyboard’s damper pedal (0-63 = pedal up, 64-127 = pedal down). More advanced MIDI keyboards/pedals and V.I.s utilize continuous CC64 data to enable more advanced piano techniques like half-pedaling. 

If you happen to utilize one of Roland’s full-size MIDI drum kits to trigger a drum V.I. within your DAW, you’ll quickly learn that, while many drum V.I.s use CC#1 for continuously open/closed hi-hat control, Roland uses CC#4 (officially designated “Foot Control”), so you may have to re-assign this in the V.I. to get the hats to open & close properly. 

CC#7 and CC#10 are MIDI Volume and Pan, respectively (here, Volume means mixing volume, not player’s volume). In DAWs, these are not really needed anymore, but some DAW faders may still respond to them, so you should be aware of the possibility of unintentionally messing up mix settings with sliders on your MIDI controller (for example, Logic has a Preference to turn fader response to CC7/10 on or off, as desired).

Finally, CC#11 is defined as “Expression”—this is meant to be the player’s volume control, with a common example being an organ’s volume (swell) pedal. While the reset value is 0 (like almost all other MIDI messages), when it’s programmed into a V.I., the parameter it controls is usually set to a default value equivalent to 127, so if the CC is accidentally reset, the V.I.’s volume may drop to 0 (I’ve seen that happen a couple of times, but now that that you know about it, it'll be an easy fix if it should occur).

Wrap-up 

I’m already running way long, so I’ll stop here. For anyone who might want to really dig into MIDI, of course Ask.Video/macProVideo has plenty of courseware, and the actual MIDI 1.0 Spec document(s) (previously available only for a fee) have recently been made available for free download from the MIDI Manufacturers Association at www.midi.org, so there’s plenty of material out there to help you immerse yourself in the wonderful world of MIDI.

This video course on MIDI is one you simply HAVE to watch: entertaining, informative & down right awesome. Watch MIDI 101 in AskAudio Academy here now.

Joe is a musician, engineer, and producer in NYC. Over the years, as a small studio operator and freelance engineer, he's made recordings of all types from music & album production to v/o & post. He's also taught all aspects of recording and music technology at several NY audio schools, and has been writing articles for Recording magaz... Read More

Discussion

mt
sysex? rpn / nrpn? PC bank vs patch? Pitchbend is not 128 values (0-127) ppitch bend is a 14-bit message with 16,384 values.
Joe A
Hi mt -

Re Pitchbend.. True, PB messages have two data Bytes for 14-bit resolution. In the past, most DAWs displayed PB data as 7-bit, rather than as 14-bit, but it seems that nowadays they mostly show the full 14-bit range of values supported. However, this seems to be inconsistent -- i.e. Logic's MIDI Monitors show PB data as 7-bit 0-127/center=64, but the Piano Roll display shows it as 7-bit -64 to +63/center=0, and the Event List shows the full range of 14-bit data. Considering the short length of the article, I didn't feel I had the space to get into that level of detail, although, since many DAWs do display 14-bit PB data values, I might have tried to squeeze a mention in.

Re: "sysex? rpn / npn? PC bank vs patch?".. Again, given the short article length, I focused on Channel Voice Messages and just the most common CCs. You knew it wasn't really going to be absolutely "Everything...About MIDI" in less than 2000 words, right..? ;-)

Cheers,
Joe
Rounik
Perhaps I was a bit over optimistic when choosing the headline/title for this article ;-)
Alternatively, from mts' comments, it might be worth doing a more advanced part 2 on MIDI messages... :)
charnjit
Can I ask here about midi messege from DIY midi controller to FL studio?

Want to join the discussion?

Create an account or login to get started!