SOLVED: VST MIDI Effect Plugin

[EDIT] Oh, boy! I spent some time adding pictures to make sure I was crystal clear, but as a new user I’m restricted to embedding only a single image. I shall try to choose wisely and hope the post doesn’t suffer from removing the others…

I am looking for some clarification regarding the ability (or otherwise) to create VST MIDI Effect plugins.

Starting with the ArpeggiatorPlugin tutorial I have got so far with a pet project which, up to now, I have simply tested in debug mode by outputting to MS GS Wavetable Synth. All appears to be working just fine, although clearly the results don’t sound particularly impressive given how it is being rendered.

Now, though, when I try to use the plugin inside Cubase Pro 12, I am able to see the plugin, but only as what appears to be an Audio effect. In other words I can , for example, add the plugin as an insert effect of an audio channel in the mixer.

The plugin, compiled as a VST2, shows as an effect in the Cubase plugin manager. I have read much that indicates that VST3 does not support MIDI plugins. However, I started by creating a VST3 and had the same result. I have been careful to remove the VST3 before trying again with the VST2. The relevant settings in Projucer currently look as follows:

image

I should note here that what I am experiencing appears to be very similar to what @giohappy experienced in this post:

Having read a lot of back and forth about VST3 and, of course, the licensing implications of VST2 I was on the verge of giving up until I came across this relatively recent post which seems to indicate that @sluijten has been able to successfully create a VST3 that works as a MIDI plugin:

So my initial question is simple: can I create a VST MIDI Effect plugin (either VST2 or preferably, of course, VST3)?

If yes, the follow-on is the difficult question: can someone shoot me a couple of pointers as to what I may be doing wrong that means that Cubase is not properly recognizing the plugin?

With that out of the way, perhaps I should introduce myself since this is my first post. I spent some time about 6 months ago working with Juce to create an audio synth as part of another pet project. I enjoyed it so much that I even bought a Mac just so I could test plugins across operating systems (I primarily work in Windows). I saw something new that interested me recently but realized I could build something similar tailored specifically to my needs, which drew me back to Juce and this current conundrum about which I have posted. Being a professional developer with 30+ years experience, I recognize the challenges (and rewards!) of an endeavor of this scope and applaud everyone who has contributed to it.

Many thanks for all you and this community have done so far, and thanks in advance for any assistance that you can offer.

Here is the view of the plugin inserted as an effect on an audio track in the Cubase mixer:

image

…and here is a view of the Plugin Manager screen in Cubase:

image

You’ll want the following settings for your plugin to appear in most DAWs, as most DAWs don’t handle MIDI FX plugins.

That said, if you want the plugin to appear in Logic as an actual MIDI FX plugin you’ll need:

1 Like

Quoting one of Steinberg developers in their forum: “your frustration comes from the misunderstanding that you can build MIDI plug-ins with VST”.
(see VST3 and MIDI CC pitfall - #16 by Arne_Scheffler - VST 3 SDK - Steinberg Forums)

If you think that this is a missed opportunity, you’re not alone.

1 Like

Thank you, @leehu - that’s interesting info. I shall give it a whirl shortly and let you know how it goes.

Thank you, @Qfactor. I have seen much discourse on this forum and Steinberg’s about how the shift from VST2 to VST3 had affected the ability to write MIDI effect plugins. However, I had not yet seen such an unequivocal statement that VST was never intended to provide that capability.

That it does, but can no longer be used and it’s successor does not, seems counter-intuitive given the empirical evidence in the market that this capability is both useful and sought-after.

I will doggedly persevere a little longer, but may end up shrugging my shoulders as others have done. Thanks again for providing that clarification.

@leehu - That was exactly what I needed, thanks. Well, that and a couple of other forum posts:

Your advice makes sense, although not intuitively. However, if we think of my VST as an instrument and not an effect, it becomes more obvious. Like a VST synth, I accept MIDI input and do some processing on that input, although that processing doesn’t produce any audio output. However, like instruments may, it does generate MIDI output and, of course, that MIDI output can be used as an input to another instrument.

So for my future self, and for others asking the same question, my resulting setup in Cubase is:

  1. Add the VST as a Track instrument:
    image

  2. Route the appropriate MIDI input device (in my case Keylab 88) to the input of the ArpeggiatorPlugin instrument:
    image

  3. Route ArpeggiatorPlugin instrument’s MIDI output to the input of the relevant instrument(s):
    image

In the above case, I am routing the output to three separate instances of Halion. As it happens, I could route the output to a single instance since my plugin outputs across 16 MIDI channels, but the use case I wanted to prove out here was to go to separate instruments so that I’m not tied to a single multi-timbral instrument.

It sounds fantastic! - much better than MS GS Wavetable Synth :slight_smile: - and consequently I am encouraged to continue with this to flesh it out into something that others may find equally interesting.

Thank you so much, @leehu, for setting me on the right path.

Never satisfied, I built the VST3 version again and tried that with no dice. The VST2 version works exactly as expected, but VST3 remains silent - I presume because it is not generating any MIDI output. I plugged a MIDI Monitor effect into the Halion instrument and that is what I observed: messages flowing through when using the VST2, and no messages when using the VST3.

I’ve read a lot (both here and at Steinberg’s forum) about how MIDI is treated differently between VST2 and VST3, but haven’t come across anything that specifically states this isn’t possible - in fact quite the opposite, such as here:

…which specifically discusses MIDI CC events, whereas I’m currently only concerned with the simpler note events.

Any thoughts on what I may be missing that means no MIDI events are being output from my VST3 version?

UPDATE
The answer was already here right on this forum. My issue (noted in my first post) was that I’d started with the Arpeggiator tutorial. This example expressly omits all audio inputs, which are apparently needed for processBlock() to be called in a VST3. The specific answer I’m referring to was here from @stephenk (thank you! - worked first time):

I am now a very happy camper. I’ll let this community know if/when I finalize something useful. Thanks again to everyone I’ve quoted above.

3 Likes