The Continuum Fingerboard can use MPE and MPE+ to communicate with other devices and programs. MPE is a Midi standard for multi-channel performance controllers. MPE+ is Haken Audio’s extension to MPE. This page explains the need for MPE+, and then gives details for implementing MPE+.
Advantage of MPE
MPE standardizes communications from multi-channel performance controllers to synthesizers. Before MPE it was possible to send fingers’ X,Y,Z position (pitch, front-back, pressure) from controller to synthesizer via Midi — the Continuum Fingerboard has successfully done this for almost two decades. But without a standard, it was challenging and time-consuming to configure the controller and the synthesizer to make things work properly. The purpose of MPE is to simplify this process.
MPE is missing a few essential features required to make full use of the Continuum Fingerboard. The Continuum Fingerboard has a faster and more accurate sensing system than other controllers; MPE+ allows the Continuum Fingerboard to transmit and receive this additional information.
The Continuum has exceptionally fast sensing, and this is especially important in the onset of a sound. Listen to the following two examples: in the first, the synthesizer is using full Z (pressure) sensitivity; in the second, the synthesizer is assuming the controller has slow Z. (For more discussion of these examples, see the Continuum Voltage Converter page.)
In the second example, no matter how fast the Continuum is played the percussive attack is slower than in the first example. This is due to excessive data smoothing in the synthesizer, and not a speed or accuracy problem with Midi.
Data smoothing is not a bad thing for the synthesizer to do — in fact, the Sampling Theorem tells us that smoothing is always necessary to avoid aliasing! Aliasing is not a problem unique to audio sample streams, but also X,Y,Z control streams encoded in Midi. The common sample rates for audio are 44.1, 48, or 96 kHz. The effective sample rate for the most popular MPE controllers’ Z data is ~25 Hz, and ~500 Hz for the Continuum Fingerboard. MPE+ lets the controller specify the best amount of smoothing to avoid update noise (aka zipper noise or aliasing) but still retain the finger motion information in the data. [Clarification: The Continuum internally has an effective sample rate of ~3 kHz for Z; this data is processed to create the optimized ~500 Hz effective sample rate control stream for Midi transmission.]
“MPE Strike Value” vs Attack Trajectory
Controllers vary greatly in how accurately they sense finger actions or automatically fabricate data. Shown on the left in the diagram below is a controller that outputs a single value (the flat area called “MPE Strike Value”) for the first ~40ms of the note, leaving the synthesizer to automate the details of the attack. The Continuum Fingerboard (shown on the right) produces nearly two dozen values during this time to represent the details of attack trajectory, giving the performer full control during this psychoacoustically critical part of the note. For the remainder of the note, the controller on the left does linear interpolation between limited data values, where the Continuum Fingerboard output has exceptionally high detail of finger motion.
In the diagram below the controller on the left shows the beginning of the notes having only one data point (the “MPE Strike”), and attack trajectory detail in the Continuum output on the right. Notice that for the controller on the left, there are only a handful of possible values for the “MPE Strike;” the controller on the left provides less than 3 effective bits of actual measured finger information for the first ~40ms of the note! Thus all details of note onsets are automated by an envelope on the synthesizer for the controller on the left; in contrast, the onset is finger-controlled for the Continuum Fingerboard, thus fundamentally eschewing MPE Strike.
14-bit Controllers are Flawed
The Continuum Fingerboard can sense pressure to better than the standard Midi CC range of 7 bits. Unfortunately, Midi’s implementation of expanded CC range (14-bit continuous controllers as MSB/LSB pairs) is fundamentally flawed, and MPE does not correct this flaw — so unfortunately MPE cannot transmit the Continuum’s precise pressure values.
The Midi spec explicitly states:
The MSB/LSB pair can be sent in either order (MSB first or LSB first).
It is permissible to send only MSB or only LSB.
The consequence of this is that a receiving synth immediately uses MSB values as they arrive, and LSB values as they arrive. Since the high 7 bits and the low 7 bits are not updated synchronously, this will always create intermediate glitch values. For example, updating from 14-bit controller value 0x137f to value 0x1401 always creates one of these two intermediate glitch values: 0x147f or 0x1301. This means the values have been reduced to 6 bits of accuracy (down from the normal Midi 7 bits) by using Midi14-bit controllers! MPE+ solves this problem with synchronous 14-bit updates.
In addition to resolving the glitch problem, MPE+ explicitly allows the controller to switch between 7-bit and 14-bit encoding simply by skipping the LSB. To achieve this, MPE+ encodes the MSB the same way (channel pressure) for 14-bit control as for 7-bit control, and the max value for 14-bit controllers is 0x3f80 (not 0x3fff).
MPE+ extends MPE in these important ways to make full use of the Continuum Fingerboard:
Controller specifies proper smoothing parameters (low pass cutoff frequencies) for X, Y, and Z.
MPE+ avoids using the “MPE Strike Value”; instead MPE+ uses a sequence of values that preserve details of the attack trajectory. MPE+ always has Midi Key Velocity at 127.
Notes may start at any pitch; the initial pitch of an MPE+ note is Midi Note Number plus preceding bend. Unlike other MPE controllers, the Continuum is not limited to starting notes at one-of-12 pitches. .
MPE+ has glitch-free 14-bit Y and Z updates, with value range from 0x0000 to 0x3f80.
MPE+ has an explicit way to switch between 7-bit and 14-bit Y and Z at any time. That way, the Continuum can use 7-bit values for best temporal resolution during the attack, and 14-bit values for best magnitude resolution during the sustain.
21-bit X (Bend) can be used in the rare situations that call for it, with value range from 0x000000 to 0x1FFF80.
The MPE+ extension defines three new RPN and one new CC.
MPE+ is backwards compatible with MPE.
Three NEW RPN
RPN 100 specifies the low-pass filter cutoff for X (bend data) in 2 Hz units (eg value 60 means 120 Hz cutoff, corresponding to a 240 Hz effective sample rate).
RPN 101 specifies the low-pass filter cutoff for Y (front-to-back finger position) in 2 Hz units.
RPN 102 specifies the low-pass filter cutoff for Z (finger pressure) in 2 Hz units.
RPN 0 is unchanged from MPE, except that MPE+ always uses a pitch bend range of 96.
The Continuum sends this RPN sequence (filter cutoff corresponds to half the effective sample rate):
Bend 96 (CC 101 value 0, CC 100 value 0, CC 6 value 96)
X low-pass filter cutoff at 120 Hz (CC 101 value 0, CC 100 value 100, CC 6 value 60)
Y low-pass filter cutoff at 60 Hz (CC 101 value 0, CC 100 value 101, CC 6 value 30)
Z low-pass filter cutoff at 250 Hz (CC 101 value 0, CC 100 value 102, CC 6 value 125)
Null RPN (CC 101 value 127, CC 100 value 127)
ONE NEW CC
CC 87 precedes CC 74, Channel Pressure, or Bend to provide 7 additional lsbs. If CC 87 is not present, its value defaults to 0. In this simple way MPE+ implements 14/21-bit X and 7/14-bit Y and Z.
To properly interpret MPE+, an MPE+ receiver must have an rxLSB register that it initializes to zero, and:
When CC 87 is received its data is stored to rxLSB. Initially, the meaning of the CC 87 data is unknown — it could be LSBs for X, Y, or Z. The MPE+ receiver simply stores the CC 87 data and waits for the next Midi message; the next Midi message will determine how that data will be used.
The next Midi message will be Channel Pressure, CC 74, or Bend. When the next message is received, rxLSB provides least significant bits. After using the value once, the MPE+ receiver zeros rxLSB.
if you want advice…
If you want to implement MPE+ to do quality encoding of your controller, please consider:
The onset of the sound is psychoacoustically super-important. Do not use MPE Strike (aka Midi Key Velocity) to represent the note onset; do not dumb down the attack trajectory of a sound to a single value. [The Continuum has an option to use Midi Key Velocity, but only for backwards compatibility with made-for-keyboards synthesizers.]
Pitch perception is a human’s most accurate sense, by many orders of magnitude.
At the start of a note, it is a good idea to send a single pitch, accurate to within a few cents. Do not dumb down the starting pitch of notes to equal temperament. [The Continuum has an option to “round initial” to a pitch grid, but Haken Audio encourages players to avoid using it except for rare presets that have an obscured pitch center (e.g. a preset using a supersaw or other ensemble sounding presets where a single note pitch center is complex). Starting every note of every preset on one-of-12-pitches-per-octave is one of the reasons electronic synthesizers tend to sound antiseptic compared to acoustic instruments.]
It will not be necessary to send another pitch update during the onset, unless the pitch is changing drastically.
When we talk about “the onset” we mean the first 10 or 20 ms of a note; attacks can vary greatly and a slow attack can easily be over 100 ms, but sticking with 10 or 20 ms time range is safe.
During this onset time, send 7 bit amplitudes (takes 2/3 ms each -- 2 bytes to encode in Midi using running mode), allowing as many pressure data points as possible during the onset.
After the onset (during the sustain -- after the first 20 ms), the pressure change will be slower (less percentage) but the human perception of the pressure (and its timbral effects in a well-designed EaganMatrix preset) will become more acute as a result. Switch to 14 bit pressure values when pressure changes are slow.
After the onset also start sending more pitch (bend) values.
Bend values are critical during longer sustained notes, needing at least 14 bits (and in extreme cases 21 bits) to encode pitch bend to full accuracy. This allows the melting away of intervallic pitch beating by subtly rolling fingers on the Continuum playing surface.