I’d like the user to be able to insert my Midi plugin before a soft synth on the same track. It generates new midi harmony notes, and midi cc messages (pitch wheel etc.)
My VST3i midi generator plugin works fine in Reaper and Bitwig on the same track just before a soft synth. But in DAWs like Ableton, I believe my midi plugin needs to be on a separate track to the soft synth, and midi needs to be routed to it.
Same for Cubase and FL Studio I think. I tried to put my plugin as an ‘insert’ in Cubase, but apparently that’s not designed for midi operations(?)
My plugin has a bus layout with a silent audio channel to help make it compatible with DAWs like these.
Is there a way of building a VST3 version (not an ‘instrument’) that Ableton, Cubase and FL Studio will be able to insert on the same track as the soft synth… or am I stuck with having to distribute just a VST3i and have the end user do track routing ?
VST3 doesn’t have the concept of a MIDI Effect.
The only way to do this, like you did, is by creating a synth with MIDI output.
However: most DAWs still do let you do that routing, it just requires opening two tracks and routing the MIDI out of the generator into the sound source on another track.
You can see me demo it in Ableton Live with our plugin, Beat Scholar, here around 1:30:
The process is similar in Cubase and Studio One.
FL Studio does the MIDI routing in the settings for each plugin (the gear icon) where you can set a MIDI ‘track’ number to send and receive for the midi source and destination.
Also, we make a free product called “Plugin Buddy” that is meant to solve this problem.
It’s a plugin you can load on a single track, and it can host both your MIDI VST3 plugin and the instrument to simplify routing - especially useful if you have multiple MIDI effects in the same chain.
And for AAX, I gather that newer versions of Pro Tools will accept a Midi effect and be able to have the midi plugin and a soft synth on the same track. If JucePlugin_IsMidiEffect=1
AU, Logic I think can also if its not defined as a synth.
OK, let’s break it down:
Logic/AU: You need to use a ‘MIDI Effect’. In our case we distribute two AU versions of our MIDI plugins, one that is a synth (basically the same component as the regular one) and another one that is MIDI only. So the user sees “EON-Arp MIDI.component” “EON-Arp.component” with two different plugin codes (sometimes slightly different UIs too).
Pro Tools:
Pro Tools does support MIDI out-of-a-synth like VST3, that works similarly to Cubase, etc.
Also, recently they added support for MIDI FX so you can use that too - but it would again have to be a different plugin from the synth version if you plan on having one.
Also, one reason why we created Plugin Buddy is that it can be loaded as an AAX and internally load the VST3 version of MIDI plugins.
thanks, I think your scenario with Beat Scholar is slightly different in that your plugin seems to be triggering internal samples (audio) as well as having the ability to send out midi.
My plugin is purely a midi generator / manipulator. It shifts incoming midi notes, makes harmony notes, and can produce midi cc messages. In that case, I may not need two versions of the AU if I am thinking correctly (?)
appreciate the input
this is my first midi plugin, if I’d known all this sooner I might have included some multisamples inside the plugin so it could produce audio.
Ableton does let the user insert its own midi fx before synths, just not third party I believe. I would have thought FL Studio and Ableton etc. would have had that feature like Reaper does, but there you go.
Yes, it would be nice if DAW vendors would let you do ergonomic MIDI FX as inserts similar to Bitwig. That’s exactly why we created Plugin Buddy - to let the user have that ‘obvious’ flow of MIDI FX (or many)->Instrument, and that’s also why we made it free (it’s quite a common support issue for us).
On an unrelated midi question, would you mind if I ask what you do when the transport stops to clear the midi? Just curious if you’re doing something similar to me.
I am doing this:
Sending NoteOff messages 0-127 for all midi channels 1-16
Sending Sustain pedal offs for 1-16 also
For midi-panic I am doing something more dramatic, and adding AllSoundOff CC120, AllNotesOff CC123, Reset Pitch Wheel. Is that too drastic?
It’s hard to answer that question without context. In our MIDI plugins (EON-Arp and Beat Scholar) we just keep track of the notes on we generated and we send notes off just for those.
This is also important for state management of the plugin itself - for example our UI shows you which notes in the sequencer are currently playing, etc.
My plugin successfully sends new midi notes and even mod wheel messages to the synth (on another track in the channel rack.)
But with pitch wheel messages it’s not successful. It does send the messages but it forces the synth pitch wheel to the bottom position.
Any ideas what’s going on there? Pitch wheel works fine in other DAWs.
I tried the approach with using your Plugin Buddy and inserting the midi fx then the synth within FL, and it worked perfectly.
I also tried Patcher, and putting the “Midi Out” FL plugin between my plugin and synth… same result. Any ideas on what I need to do to get FL to process pitch wheel more accurately?
I’m not sure TBH, looks like FL is manipulating the pitch bend messages somehow.
If it works on other DAWs I don’t think it’s something you have to change in your code, just a matter of learning the dark corners of FL setup so you can tell your users what to do.
This may not be the right place to ask this, but I’ve been following your discussion.
I’ve been working on a MIDI-generating plugin. It’s currently configured as a VST3i. It has a Midi Input and a Midi Output “pin” in the AudioPluginHost, and it works fine to connect the MidiOutput pin to the MIDIOut there and route it to an external synth, for example.
How does one accomplish this in, say, Reaper?
Not routing the MIDI to some other instrument plugin, but routing it to a MIDI Track so it can be recorded and played on an external physical synth?
I tried creating a virtual MIDI Output, which shows up as an Input in Reaper - and while this works (to assign the virtual MIDI Input to a MIDI Track), it seems not a viable solution because if you save the project this way and then reopen it, it will say that the virtual MIDI Port is not found - because it tries to locate it before the plugin is instantiated I guess. So it’s not transparent to the user.
Reaper just lets you choose to record the MIDI out of the plugin instead of the MIDI input (See attached GIF).
Also, if you click the ‘routes’ button on each channel in the mixer, you can also route to it another channel/MIDI output (and then record it’s output, if you want to).
Oh, wow - that’s awesome. I have not gone very far down the path of figuring out how this plugin is supposed to work in various DAWs - mainly I’ve been working on it in the AudioPluginHost. I’m assuming from this that Reaper is an easy one, and they are all quite different?
I am finding that existing midi in the piano roll is passed to my plugin fine, and it works. But for live playing, the midi is not being processed by my plugin. This was a surprise for me since I thought it was all classed as “incoming midi” buffer.
Do I have to alter my bus layout or settings to take in live played midi? (this is the same behaviour for VST3 and CLAP).
Which plugin format are we talking about here?
The Projucer project you’re showing is what works for VST3 but won’t work for AU
I can’t see why it wouldn’t work - Live MIDI goes into the plugin the same way as piano roll MIDI. Which host did you test this on? Are you sure you did MIDI correctly in the host (ideally you test that part with another plugin that isn’t your plugin).