MPE+

The Continuum Fingerboard uses MPE and MPE+ to communicate with other devices and programs.  MPE is a Midi standard for expressive 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 expressive controllers to synthesizers.  It was possible to send fingers’ X,Y,Z  position (pitch, front-back, pressure) from controller to synthesizer via Midi before MPE — the Continuum Fingerboard did this for over a decade before MPE.  But without a standard, it was challenging and time-consuming to configure the controller and the synthesizer to make things work properly.  With MPE this process is much simplified.

Why MPE+

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.

Data Smoothing

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 expressive 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.

“MPE Strike Value” vs Attack Trajectory

Controllers vary greatly in how accurately they sense finger actions or automatically fabricate data.  The controller at left below outputs a single value (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 every detail of finger motion.

FirstCD.jpg

At left below are more examples of 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 (which eschews MPE Strike).

FirstCD2.jpg

14-bit Controllers are Flawed

The Continuum Fingerboard can sense pressure to better than 7 bits. Unfortunately, Midi’s implementation of 14-bit continuous controllers (MSB/LSB pairs) is fundamentally flawed, and MPE does not correct this flaw — so 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.

A 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 creates 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.  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+ DETAILS

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 pitch bend range of 96.

The Continuum sends this RPN sequence (filter cutoff corresponds to half the effective sample rate):

  1. Bend 96 (CC 101 value 0, CC 100 value 0, CC 6 value 96)

  2. X low-pass filter cutoff at 120 Hz (CC 101 value 0, CC 100 value 100, CC 6 value 60)

  3. Y low-pass filter cutoff at 60 Hz (CC 101 value 0, CC 100 value 101, CC 6 value 30)

  4. Z low-pass filter cutoff at 250 Hz (CC 101 value 0, CC 100 value 102, CC 6 value 125)

  5. 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.