I know this has been discussed a couple of times before but I want to bring it up again, because I’m realizing this is the biggest sticking point for using the Hapax exactly how I would like. I plan to continue editing this post with updates, and use it as a resource to help others who would like to use the Hapax in conjuction with an MPE compatible controller (eg. the ROLI Seaboard).
Now I would like to preface with the disclaimer that I am not an expert on MIDI or MPE, and am really not much more than a novice. So if there is any incorrect information contained in this post, please comment so I can update accordingly. Now, on to the good stuff.
In 2018 the MIDI Manufacturers Associations adopted the MIDI Polyphonic Expression (MPE) ehancement into the official MIDI Specification. What does this mean?
MPE allows controllers to send additional expression information along with each note. In MPE, each note is assigned its own MIDI channel so the expressions can apply to each note individually, rather than as a global control. For example an “aftertouch” or “pressure” expression being sent to a chord of a polyphonic MPE synthesizer can apply that expressions to each voice individually, rather than the synthesizer output as a whole.
Generally, MIDI Channel 1 is reserved for “global” controls, and then channels 2-16 are reserved for sending Note ON/OFF messsages and Expression data for each individual note. It appears some controllers pre-assign a midi channel to each note on the piano roll, and others assign a new channel to each new note played in unison (ie. the first note played is Ch. 2, then additional notes are on Ch. 3, 4, 5, etc.).
While MPE is generally sent over 16 channels, the control can be “zoned” to a subset of MIDI Channels, reducing the number of simultaneous voices that be controlled with expressions individually. For example, with my Seaboard I can restrict the number of MIDI Channels to 1 in the ROLI Dashboard. When I do this, every note played is sent over MIDI Ch. 2 (remember Ch. 1 is reserver for global controls), and the expressions of any note will apply to all active notes because they are all on the same MIDI Channel.
These are the expressions sent from the ROLI Seaboard:
- Channel Pressure, recognized by the Hapax as “aftertouch”, achieved by applying pressure downwards on the keys.
- “Brightness”, recognized by the Hapax as CC74, achieved by sliding upwards and downwards on the keys.
- Pitch Wheel, recognized by the Hapax as pitchbend, achieved by sliding left to right on the keys.
- Strike or Velocity, recognized by the Hapax as Note ON Velocity, achieved by the initial impact on the key
- Lift or Release Velocity, recognized by the Hapax as Note OFF Velocity, achieved by the speed with which a key is released
The Squarp Hapax does not presently support MPE in any practical capacity. I will discuss why I believe this to be the case, as well as what possible features we may be added to have MPE support be more effective by the Hapax.
The foremost issue is the defining factor of MPE: it (most often) utilizes all 16 MIDI Channels simulatenously. This poses a number of problems with the current features and configuration of the Squarp Hapax:
The Hapax does not support “zoning” of the MPE midi-out, so an MPE Track in a project must have a dedicated MIDI out port that cannot be shared with any other track. This could potentially be solved by the incoming midi information being already zoned, however that is not always controllable. This limits the total possible number of MPE tracks in a Project to 5, assuming that one of the 6 available MIDI-Out ports is reserved for the other non-MPE tracks in a Project.
The inverse of the above: each MPE Track must have a dedicated MIDI input port, otherwise the same issue as above occurs in reverse: notes sent by the MPE controller will trigger any given Track listening only on MIDI Channel X, and any other MIDI data intended only for Channel X on that port would also trigger the MPE track.
Furthermore, because of the way input routing currently works on the Hapax, assuming you have set up multiple MPE tracks with different output ports as discussed above: an MPE Controller will trigger Note data on all of the MPE tracks simultaneously. Another way of thinking about this is that the MPE controller will trigger Notes for all Tracks listening to the input port with which it is connected.
Finally, there is no partial MPE Support. What do I mean by this? Well, for non-MPE synths, an MPE controller can still apply its expressions to various parameters on the synth globally, rather than on a per-note basis. In Bitwig this is done with the Expressions modulator. So, for example, I could map the Pressure expression to the volume of my synth, and applying pressure to notes will cause the instrument to play louder. This is not on a per-note basis, so lightly holding the first two notes of a chord and smashing down on the third will cause all the voices to play more loudly. However this is still a desirable effect to control.
This section is of course very subjective. I will try to consolidate the community’s feedback for the other MPE users out there. I’ll start with what I think are the lowest-hanging-fruit feature requests that get us the most immediate improvement, and end with what are probably far-fetched desires for the future of the Hapax.
1. Individual “Active MIDI Only” settings for each Track.
This is in regards to problem 3 above, and will do wonders for utilizing an MPE controller with the Hapax. Presently, the “All Active” Track Input Setting is the only setting which allows filtering of incoming MIDI notes to that Track while it is not the Active (selected) Track. If I want multiple Tracks to receive MPE data (related to problem 4 above), and have set their Input to the port with the MPE controller, playing the controller will trigger all of these Tracks at once. Using “All Active” is not a solution here, as there may be other controllers/midi-thru’s/etc on other input ports that should not be sent to these Tracks while selected. Instead I believe each Track should have an individual setting whether or not it accepts MIDI only when the Track is selected. I have already opened up a feature request for this, as I believe it is both very achievable and also useful for the Hapax community as a whole.
2. Ability to “Squash” MPE MIDI Out Data
This is in regards to problem 4 above, and will allow the wonderful expressions provided by MPE to control non-MPE synths. In combination with solution 1 this would make MPE controllers actually useful with the Hapax, as the polyphonic expressions could be used to control instruments on any of the 16 Tracks.
Proposal: The MPE Tracks on the Hapax can choose to “squash” all incoming MIDI information down to a single selected channel. ie, I play a chord on my MPE controller and Expression information is coming in on Channels 2, 3, & 4. The output of the Hapax will keep all of the MIDI information the same, and just change the MIDI Channel of each midi-message to be that selected by the user. You lose the polyphonic element of the expressions, but you lose that anyway with non-MPE synths and this allows the expressions to have an effect on 16 different instruments across the 16 different Hapax Tracks, one for each MIDI channel.
3. The ability to “Zone” the MPE midi-out channels for Hapax MPE Tracks.
This would give the ability to have multiple MPE Tracks on the same midi-output port, and allow for a greater total of full MPE tracks to be controlled by the Hapax. However I recognize the complexity and depth of the changes required by this ask.
For one, where the various zones must be selectable as different inputs within a DAW. For example now it is possible to select either an individual Hapax MIDI Channel as input (eg. HAPAX Channel 6), or ALL of the Hapax Channels. If a 8 and 4 Channel zones were to be available for MPE Tracks, then these would have to be selectable in the DAW as well. Examples: Hapax Channels 1-4, …Channels 12-16, Hapax Channels 1-8, Channels 9-16
Secondly, it cannot be guaranteed how the incoming MPE data will distribute the notes across MIDI Channels. So far I have seen two strategies: each key on the piano roll pre-mapped to specific MIDI channels, and each new active note increases the Channel number. These varying strategies would need to be mapped to the MPE output MIDI-Zone, and this mapping may prove to be complex.
Solutions 1 and 2 above should be very achievable, and would go a long way to enabling expressive control of instruments via an MPE controller connected to the Hapax. Again, for anyone with more knowledge or additional information, please comment below and I will regularly check-in and edit this post.