Multiple MIDI Port VST3 Processing

My VST3 created in JUCE is simultaneously processing 16 MIDI channels (one MIDI port). Is it possible to re-write it so that the VST3 will accept multiple MIDI ports where the data from different ports will be processed together and then sent through the assigned MIDI ports?

A plugin doesn’t have the concept of a ‘port’. The host knows about the ports and can route them to the plugin (on a single channel, multiple channels, etc, depends how the DAW is set up).

If you make a standalone app, you can then open multiple ports.

Thanks! So my plugin can receive MIDI from all available ports? But after processing, will the MIDI be transmitted to the port they came in through?

That’s up to the routing of the user in the DAW. In Cubase for example you can select “All Inputs” or do more manual routing like send each MIDI source into another channel.

None of this is guaranteed in the plugin-DAW contract though and you have no way of knowing in the plugin which input was used to send a particular message.

No. After processing there will only be one stream of MIDI. The DAW can then decide where to route that, but the information about the midi source will be gone.

The DAW could sometimes offer the user routings like send each channel to a different output.

Too bad. I had read this and hoped that simultaneous processing of channels in multiple ports was possible: So, what does VST3 have to offer that we can make use of with Reaktor 6.5 — Community

To be pedantic, VST3 doesn’t really support MIDI i/o in the first place (*). It has a different event type, and you can have any number of event busses. But calling them “midi channels” and “ports” is the wrong description of what happens in the API.

(*) it supports MIDI learn, but that is a bit limited.

1 Like

Right, but we’re also in the JUCE forum. In JUCE (in VST3) you get a MidiBuffer with MIDI channels and that’s it. :slight_smile:

Thanks Guys,

The VST3 is ready for release, but I am looking forward, hoping to expand the functionality in the future. Currently it works on 16 MIDI channels, but software such as VSL and Reaper offer multiple MIDI ports within their software. So I am looking for a way to make the VST3s functionality available for more that a single port, increasing the processed MIDI channels up to 16x16. A moderator at NI’s forum writes this:

3. Enhanced MIDI handling

VST3 plugins can provide a dedicated event handler bus, which allows for a wide variety of control and modulation messages beyond traditional simple MIDI messages. In fact, support isn’t only limited to the MIDI protocol, and other future control methods may utilize these functions. Advanced control of MIDI at a note level is now supported. For example, a particular event like a pitch bend can be associated with a specific note with a unique note ID, so that the modulation is applied to only that note, even in a polyphonic context like playing a chord.

4. Support for multiple MIDI I/O

With VST2, a particular plugin could only be assigned to single MIDI input and output. Now with VST3, plugins can support several MIDI ports at once which can be switched on the fly. This opens up a lot of possibilities while performing music live and allows for more flexible routing."

I don’t know if what he is writing is correct or not, but it made me curious if there was any possibility for my VST3 to process more than 16 MIDI channels. From the answers above I take there is no way to do it? The plugin is created in JUCE.

VST3-wrapped JUCE plugins only support up to one input/output event bus, since JUCE plugins have to be a common denominator between different plugin APIs and not all of them share the same feature sets.

In fact, VST3 event i/o is not MIDI. JUCE converts it to MIDI on input and from MIDI on output. This is a common misconception about VST3 plugins - they don’t support MIDI i/o, it’s up to the host to convert MIDI events into VST3 events and back. JUCE does this for you to present a common interface for different plugin APIs, some of which do support MIDI I/O. It’s a common misconception that VST3 supports MIDI i/o since most hosts present this to users and JUCE presents this to developers, but that’s not what’s happening under the hood of the API or the wrapper.

If you want to support multiple VST3 event busses, JUCE won’t help you. But if you want to support AU and AAX then VST3 isn’t going to help you, either.

You should ask on the reaper forums if a “port” corresponds to a VST3 event bus.


Once MIDI 2.0 rolls out in hosts it’s likely that you’ll get this support “for free” since a MIDI 2.0 “group” is logically a single “port” of 16 MIDI channels, and the only obvious way to convert MIDI 2.0 group values to VST3 events is by event bus ID.

Thanks Holy City,

For the functionality of the plugin it is not important if it is MIDI, as long as it receives and outputs MIDI (notes w/ parameters). If it today is impossible to ear-mark the notes of the 16 channels to a particular “port”, “group”, or “bus” as I believe Reaper calls it, then I guess I will have to wait for MIDI 2.0?

It’s probably possible, but not with JUCE. No idea if that is how JUCE will choose to implement MIDI 2.0 handling, but that would be the most obvious way to do it.

You’ll have to confirm with Reaper what exactly it calls a “port” in the context of VST3 hosting to be sure.