Receiving Midi Sysex with an Audio Plugin



I am completely stuck trying to make a simple Audio Plugin for Midi that translates Sysex to CC. It was easy to setup midi in Juce in the processBlock and with that I can translate CC to CC or manipulate midi notes, but I then noticed that Sysex is not received by the processBlock.

So in order to receive Sysex I have tried to setup a MidiInputCallback, but without luck so far. The AudioProcessor automatically takes the VST-midi input whereas with MidiInputCallback I have to define which midi input to take. Can it be that AudioProcessor and MidiInputCallback cannot be used at the same time? Is it possible to receive Sysex with the AudioProcessor (without having to setup a second Midi input)? Any advise is greatly appreciated.

Thanks a lot!

Plugins can receive sysex events.

If you're not receiving them, the most likely reason is that whatever host you're using doesn't support that..

Hi Jules, thank you for your fast reply. Sorry for the newby questions, but:

Did I understand correctly that processBlock() is not able to receive Sysex?

Did I understand correctly that the only way to setup a callback for midi sysex is by using MidiInputCallback and by adding an additional midi interface like:

midiInput = MidiInput::openDevice(MidiInput::getDefaultDeviceIndex(),this);

if(midiInput) { midiInput->start(); }

And finally, did I understand correctly that I add the MidiInputCallback in PluginProcessor.cpp?

thanks a lot for the help!

No, you didn't understand that correctly!

Like I said: a plugin can receive sysex message through its processBlock method. But only if the host sends those messages. You might want to check that before messing around with midi devices directly.


Thank you for solving this Jules! I did waist 4 days trying to get something work that cannot work, but well, such is life. Pretty worthless that most hosts dont support Sysex for their VSTs:

No respect for legacy synthesizers! Well, I will have to program a midi translator in an Arduino instead then :-/


if you need to translate Sysex in CC in order to control plug-ins or anything else,  you can do that very easily creating a very simple software based on Juce + CopperLan instead of using Arduino. Just open a MIDI port to listen to the MIDI controller (using Juce), translate Sysex as you wish, then  forward the CC to CopperLan (using a simple MIDI2CopperLan object)... If you wish I can give you a sample code doing this, then you just have to fill with your translation code...



Thanks Phil, I will check this out

Tak a look at this, it would be a good start :-)