• General
  • Using Bela to create MPE (MIDI Polyphonic Expression) controller

Howdy!

I'm trying to make an MPE controller that will track multiple analog inputs, and I'm looking to have the Bela behave like an MPE device to control virtual instruments in Ableton Live. I'm doing my work in Puredata, trying to get my head around the [poly] object, and I'm a bit lost on how to use is in a way to do MPE.

Anyone have any examples of making an MPE device from a Bela? Doesn't necessarily have to be Puredata.

As for making a MIDI device with Bela, check out the PureData/cv-midi-cv example on the IDE.

As for MPE specifically, I think the advice you got on the PureData facebook group (I assume it was you?) was a good starting point: [poly] gives you an output index that is the "voice number". If you use [poly 15] you'll have 15 voices (as the 15 channels in MPE). Then get the index output of [poly] and use it to address a specific channel. E.g.:

[poly]
| << output is voice, note, velocity
[$2 $3 $1( << reorder the output: note, velocity, voice (channel)
|
[noteout]

if you need to send also other types of channel messages (e.g.: control change), you should keep track of the voice(channel) number and use it in the other midi objects (e.g.: [ctlout])

    5 days later

    giuliomoro Yup. That was me on the facebook group. I took a look at the [poly] object on your recommendation and it makes sense, but what I wasn't really clear on is what I would need to add around it to support 6 note polyphony with pitch bend, volume, and tone, values on each. It seems like something someone would have already done at some point, and probably better than I could do. Thanks for the pointer to the midi-cv examples. Definitely some clues in there, but I'm still having trouble seeing how it all goes together. I'll keep noodling away at it.

      spDuchamp but what I wasn't really clear on is what I would need to add around it to support 6 note polyphony with pitch bend, volume and tone

      it really depends on what you have that is generating such controls. Honestly, as long as you are using fewer than 16 channels, you don't even need poly and can do static voice assignation. Each of your "control generators" can send their note messages, CC, pitch bend, aftertouch to a fixed MIDI channel ( e.g.: use channels 1-6). Then any global controls (e.g.: volume CC, global pitch bend) should go on channel 16. That's already MPE as far as I can tell.

      What [poly] brings to the table when you are using more than 15 voices it can do voice stealing, kill an old note and give you the channel number to use for your new note.