Making instruments and FXs in MaxMSP/M4L and Osmose : trying to figure out the basics

Hi there, I’m quite new to MPE, but have some experience with Max.
I’m trying to decipher the output of Osmose (port 2) with the help of Max, with the goal to make my own instruments and Midi FXs mainly in M4L.
I’m looking for practical resources. Do you have tips ? Good practice advices ? Please let me know !

So far, what I understood is (please feel free to comment/correct me !) :

Using mpeparse and midi parse objects, I found that :
Each voice has its own channel from 2 to 16. Per channel, I’ve witnessed 4 messages :

  • pitch bend (you have to use the @hires 1 attribute to make it useable)
  • aftertouch : this is the press of the ‘first press zone’ of the key, [0-127]
  • CC 74 and 87: cc74 relays the pressing of the key. Once you’ve reach the end of the ‘aftertouch zone’, cc74 goes [0-127]. CC87 happens concurrently to the ‘aftertouch zone’ : but I don’t get what is the nature of this value.
  • a pair of note and velocity : velocity is either 0 or 127 (off and on), and ignore the ‘note on’ threshold in the ‘sensitivity’ settings.

‘Poly key pressure’ output of midi parse never outputs anything : what is it used for ?

Then, how do you use this data ?
My assumptions are :
[polymidiin] is an object that helps dealing with mpe data in a [poly~] patcher
What else ?

I hope you’ll forgive my chaotic/heuristic approach to this. Looking forward for your help !


it would be easier to use port one not port two.

port one is ‘standard mpe’, which Max has built-in support for.
(strictly speak port one is whatever you set Ext Midi too)

port two is Haken’s own MPE+ which you could implement, but will be more effort.
I personally do NOT think you will gain much with MPE+

one of the primary reasons for MPE+ was to get 21bit pitchbend, since for the largest continuum 14 bit was not enough.
this is a mute point for the Osmose which has a very small range of movement on the X axis.

for sure MPE+ also makes Z/Y 14 bit, but with appropriate interpolation, you’ll find 7 bit fine.

as for specs… well midi association has MPE specs
and there are details on the HakenAudio website for the MPE+ specs


I’ll go into the documentation again. But what I’m missing, I guess, is some tutorial, or at least examples of MPE devices coded in Max/MSP, that could help a lot.
I mean, look at… roughly ZERO MPE synths !

CC87 is just used to provide the extra resolution of MPE+. I wont go into detail since its already described on Hakens page about MPE+ and you’ll need to be familiar with concepts such as msb and lsb. If you completely ignore the CC87 messages then you’ll mostly end up with normal MPE, since MPE+ is backwards compatible in that way.

the max help page for polymidiin… has an example, though quite simple.

the main thing is, max will do the voicing for you, which can be the tricky bit…

apart from that… the main usage, you already have…

CC74 = Y
channel AT = pressure/Z
for pitch you use note + pitchbend

as for using note on/velocity, thats your choice…
often I prefer to simply use Z to control the VCA.

I tend to only use the note on/velocity if I want to have ‘punchy’ sound,
something that is faster than the surface can provide.

generally I don’t tend to use as much automation, or envelopes for mpe synths,
rather we ‘play’ the envelope with our fingers.

but experiment, see what you like… its very personal, and also highly dependent on the surface.
… the Osmose is going to be very different in this regard to many mpe controllers.

one question though…
why use Max to create a synth?
you can use the Eagan Matrix to do so much… and it’ll be standalone.

is there something particular you are trying to create?
things based off samples, would be a reason to go external… as EM doesn’t do anything in this area.
but, personally, Im not a huge fan of samples with expressive controllers… you tend to lack control.

1 Like

Thanks !

Many reasons : samples, share to others, MIDI FXs…

That’s to be explored. I think wavetables could be awesome. Also, granular “travel” across a sample with Z axis seems to be worth exploring, don’t you think ?

1 Like

For some of those explorations and more in the way of instant gratification, consider using Surge XT since it has plenty of features, already works with MPE and is free.

1 Like

Oh, thank you for the suggestion !

No problem, although it Is probably missing a couple of the types of synthesis/sound sources that you mention, in which case you could consider exploring the MPE side of something like VCV rack.

eg you can probably explore wavetable stuff using Surge XT, but maybe not samples or granular.

1 Like

Oh and you can also blend those two different options because Surge XT modules are available for VCV rack, so you could reuse Surge familiarity in a modular context and then use other VCV modules to offer the bits that the main Surge XT doesnt offer.

1 Like

yeah, Ive done this with the Madrona Labs Soundplane …
(though as its continuous I could use X/Y to do scrub through samples)

wavetable synths are indeed fun, using Y to scan through is a very natural fit.

as @SteveElbows menioned, vcvrack is a fun choice too… as there are so many modules, and you can play with the expression lanes very easily as they are ‘just voltages’

I wasn’t implying we don’t need other synths etc… I use an eclectic mix of software/hardware with my controllers :slight_smile:

anyway, I was just curious what your motivations were, what you were thinking of doing.

enjoy your explorations

1 Like

Mine finally arrived yesterday. And as luck would have it, I can’t locate a headphone adapter to save my life, so I’ve just been exclusively looking at the raw MIDI output.

I think for my own use, it makes a lot of sense to process and repackage the signals outside of Ableton, because both ports have different strengths, and a max for live device can’t differentiate between those (or any) two inputs.

It’s too early to say for sure, but I think this might be a hard disagree.

Ignoring CC87 for a moment, have you compared the aftertouch response curves that each port is using? Slowly increasing pressure on a key, you’ll see the MPE+ version hit “35” before the standard MPE version crosses “1”.

Essentially, that extra resolution isn’t about needing smooth values, but flexible remapping.

The normal MPE signal is very opinionated. Which is great, when you share it’s opinions.

Like, a number of presets leverage “tap” as a different gesture than “press”. That’s part of the “Osmose sound”, and it’s very useful. You can have a short percussive sound responding to velocity, and a pad layer that operates independently of that.

The “normal MPE” port is optimized for those interactions.

Your MPE synth might not be.

The SWAM instruments are decidedly not. (Their MPE presets use a combination of pressure and velocity to determine how each note should be attacked. But no pressure data is provided to them, so that creates an integration challenge)

But if you have access to a linear high res signal which more closely aligns with the raw sensor data? You can output your own “normal MPE”, with different behaviors for different use cases.

That said, it’s possible the Osmose accepts external commands to reshape it’s output, which would obliviate that particular need. As I said, it arrived yesterday. Still exploring!

Congrats!! and have fun :wink:

1 Like

When it comes to the non-Haken, Expressive E MPE MIDI layer, I dont think there are MIDI signals that will change its behaviour. However there are a bunch of sensitivity settings within the built in menu system on the Osmoses own screen that do affect that MPE output. Including curves for the different dimensions, and also you tell it how far you need to press a key before note on/offs are triggered in that mode.

I expect the Osmose to follow the same MIDI signals as the other EaganMatrix devices.

It depends which ports you use. Because Osmose has an additional MIDI layer that Expressive E added themselves, which is unlike the other Haken devices, and is configured on the device itself via menus. But if you use the Haken MIDI instead then that should indeed behave like other EaganMatrix devices.

Most of them, I’m finding.
It does ignore some of Continuum’s documented commands, though.

The pitch table, for example. Totally meaningless.
Also, attenuation isn’t a thing. We do have pre and post levels, though.



The original post brought up max for live; and do you have to choose one there.

That’s less of a problem than I thought, because you can set the MPE+ port to output dynamic velocity, by either via loading a user preset configured that way, or by sending a 1 on CC 43 to it.

…but it is still a problem. You have to send most of your commands specifically to channel 16. Or possibly 2. But definitely not 1. So, there are more hoops to jump through.

That’s actually my biggest frustration right now. I don’t find it to be moot at all, for my needs.

I mean, I’m able to apply the CC87 data to get 14 bit pressure, but as that same CC is used for 21 bit pitch bend, I’m struggling to differentiate between the two. (it’s probably a timing issue in my max patch, but this is difficult to troubleshoot.)


One other frustration is that Haken categorizes the presets into different banks than Expressive E does. And any preset that you might load through MIDI commands is essentially invisible on the Osmose screen. As far as it’s concerned, you’re still browsing the list that they gave you. I find myself reinventing a lot of wheels…

That’s less applicable to this thread as a whole, but it is a bit maddening.

And also, I can’t seem to set or detect which category of global fx is selected. (reverb, mod delay, swept echo, analog echo, lpf echo, hpf echo) This mostly affects what the recirculator knobs do, and how they’re labeled in the built-in interface.

I can control them with knobs and faders from a different controller. I can automate them in my DAW. But every time I load a preset, the lables I apply to those parameters become instantly meaningless.

Again, grr.

There are some other things, but those are much more likely to get fixed in a firmware update.

On the whole, I do love this beast, and am very impressed with what controls are unlocked to us.

(As ever, my problems are very niche.)

Is 21 bit pitch bend even being output though? Although its mentioned in the MPE+ spec, back when I was studying the MPE+ output from the Osmose I dont think I ever saw a CC87 actually being sent to increase the resolution for pitch. It was being used for the other MPE dimensions though. But that was a few months ago now.

That’s just it; I can’t tell.

But it should be, because it’s outputting wider intervals via pressure glide, and expected to respond to same if you should happen to capture and play back that performance (to the internal synth).

So my assumption is that the CC87 stream, serving as 7 extra bits for both aftertouch and pitch bend, is complex beyond my ability to test or interpret accurately.

It is easier to blame myself, because the alternative is madness.

Apparently, the Attenuation is a feature only for the Slim Continuums.

CC87 handling: Eagan Matrix sends cc87, followed by the Midi for whatever signal it’s the least significant bits (LSB) for, whether that’s pressure, bend, or something else. Always the same order. So, when you get a cc87, save the value, and when you get a message that uses the extended precision, use the cc87 value and reset it to 0.

The Midi signals for the type of recirculator and the columns/parameters are not documented, just like the rest of the Eagan Matrix.

If you send the ch16 cc109 value 32, you get the list of preset names and their category codes back. This will be ch16, cc56 value 0 for the name and value 1 for the control text that encodes the categories. The cc56 is followed by a series of ch16 Channel Pressure messages where each value is one character of the text, followed by ch16, cc56, value 127 to terminate the data stream.

ch16 cc109, value 16 will return the current configuration – all the usual global settings, and also the MIDI defining everything in the Eagan Matrix on channel 15 (I think – you might need to pretend to be the Haken Editor by sending it ch16 cc 116 (any) to receive the matrix data). None of the Eagan Matrix MIDI is documented.

For the type of recirculator, it will be in this configuration reply. ch16, cc 62, bits in the mask 0x07 values 0=Reverb, 1=mod delay, 2=swept echo, 3=analog echo, 4=Digital echo LPF, 5=digital echo HPF
bit 0x40 signals Extended recirculator time (1/2 sample rate).

I know some of this because I have been posting about software I’m writing to work with EaganMatrix devices, Lippold noticed and (this still wows me) sent me a header file from the firmware source code that captures a lot of the Midi internal codes. Unfortunately, it’s not quite enough information to replicate the editor, because there’s still a few things that aren’t covered in that file. Some of the things in the matrix come across as cc56 byte streams representing some data structure (especially more recent features of the EM).

I’ve been able to decode some things by looking at parts of the Haken editor. I haven’t bought MAX, but I discovered that since you get the MAX console, you can double click entries logged there and get into the MAX patching UI for the component related to that item. Try double clicking on “SysPresets” early in the log when opening the editor. Since you’re working in MAX, those things will make a lot more sense to you than they do for me! I assume with full MAX you could see the entire Haken Editor and see how everything is done and communicated.

1 Like