MPE VST3 issue

Hi guys,

I cannot get MPE to work fine with the VST3 plugin format.
There are no problems with MPE when using AU or VST2.

I have implemented the AudioProcessor::supportsMPE method to return true.

We have our own host for testing our plugin but when I send MPE pressure (midi description = “channel pressure”) this is received in the plugin as “aftertouch”. AU and VST2 works fine with our own host.
When I test this with Tracktion 7.2.1, the channel pressure message is filtered by tracktion, and so is the timbre MPE message. No problems here with AU, didn’t try VST2 yet.

It might be a problem with our host, but I don’t have any problems with AU or VST2.
However, I am still looking for a good host to test MPE ;).

Thanks in advance,

We still haven’t found any solution.
Unfortunately, we don’t have a VST2 license so we really need clarification about this soon for a plugin we would like to release.

I don’t think Tracktion 7 has MPE support.
Try Waveform 9? (That does have proper MPE support)

Thanks David, I tried Waveform 9 but without success.
MPE pressure still comes into our plugin as aftertouch. So that doesn’t work because the MPEInstrument::processNextMidiEvent handles only channel pressure. In waveform, the midi clip “MIDI Channel Mode” is set to MPE.
We use the latest JUCE modules and projucer 5.4.1.

Maybe it matters that we disabled JUCE_VST3_CAN_REPLACE_VST2, because we couldn’t compile when enabling it (some VST2 stuff was missing).

Are you sure?
How are you adding the MPE note and expression data? By hand or using a Seaboard etc?

MPE data should get recorded to “Note Expression”, there’s a setting for this on the MIDI input device. These are tied to individual notes and can be changed via the floating editor.

I’ve double checked the code for this and there’s nothing that is creating aftertouch messages unless you specifically add them to the MIDI list. Maybe you’re using a controller that’s creating them?

FYI I think the problem here is a mis-match in juce_VST3Common.h between toEventList and toMidiBuffer:

static void toMidiBuffer (MidiBuffer& result, Steinberg::Vst::IEventList& eventList)
                case Steinberg::Vst::Event::kPolyPressureEvent:
                        result.addEvent (MidiMessage::aftertouchChange (createSafeChannel (,
                                                                        createSafeNote (e.polyPressure.pitch),
                                                                        denormaliseToMidiValue (e.polyPressure.pressure)),


static void toEventList (Steinberg::Vst::IEventList& result, MidiBuffer& midiBuffer,
                         Steinberg::Vst::IParameterChanges* parameterChanges = nullptr,
                         Steinberg::Vst::IMidiMapping* midiMapping = nullptr)
            else if (msg.isChannelPressure())
                e.type                   = Steinberg::Vst::Event::kPolyPressureEvent;
         = createSafeChannel (msg.getChannel());
                e.polyPressure.pitch     = createSafeNote (msg.getNoteNumber());
                e.polyPressure.pressure  = normaliseMidiValue (msg.getChannelPressureValue());


Because it works fine with AU, I am sure that I send correct data.

In juce_VST3Common.h in toMidiBuffer in
case Steinberg::Vst::Event::kPolyPressureEvent:
if I change this:
result.addEvent (MidiMessage::aftertouchChange
result.addEvent (MidiMessage::channelPressureChange

then it works fine.

1 Like

Can I expect this fix to be pushed soon to the juce developer branch?

I made a PR myself ->

Can someone from the Juce team give me an update?
Without this fix, no one can make MPE plugins for VST3 format.

Investigating this is near the top of our backlog.

Apologies for the delay - I attempted to avoid most of the UK winter by holidaying in a different hemisphere for 5 weeks and am still catching up with JUCE issues.


Ok good to hear that :slight_smile:

Any further progress on MPE and VST3? This is really mission critical to my project (=start-up business). We have our beta testers waiting for this fix and start to loose momentum and credibility… So, pleassssseeee increase the priority on this fix because it is a real showstopper…thx

1 Like

Does Jelle’s patch not work for you?

If you’re worried about losing momentum then can you temporarily patch JUCE?

OK…I will go for the temp patch…

Sorry for the delay:

Thanks tom!