Possible? Midi-only VST (for use in Ableton Live)


#1

— Here’s the short question —

Is it possible to create a VST plugin that hosts (Ableton Live in particular) will recognize as doing only MIDI (and not audio) processing?

— The long question —

[To be clear: I’ve done just the meagerest of changes to the DemoJuceFilter VST example to try to get this to work – changing only a little of the DemoJuceFilter.cpp and JucePluginCharacteristics.h files]

I want to develop a VST plugin that Ableton Live will recognize as doing only MIDI – no audio – processing. Trouble is no matter what combination of settings I use in JucePluginCharacteristics.h I can’t seem to get it to work. I get one of two outcomes:

  1. Ableton sees it as both an audio and a MIDI plugin. This “works” in that I can pipe the MIDI out from this plugin to an Ableton instrument in a different track but I can’t choose channels nor drop an Ableton instrument into the plugin’s track (because it thinks the main output of the plugin is audio.)

  2. Ableton sees it as MIDI only but (it seems) the DemoJuceFilter::processBlock never gets called. (The BPM/Time Signature line in the Demo is never displayed – it’s completely blank.)

(Full discloser: [2] above has other problems but I’ll spare you.)

So, does anyone know the magic to get this to work? Or, conversely, is this some kind of VST limitation? Ableton Live strangeness?

I’d appreciate any clues, code, or even sympathy!

Steve


#2

Sounds like a VST limitation - they’re not designed to handle only midi, you’ve got to have that audio callback happening as well. Are there any plugins that work correctly in Ableton as midi-only? If so, are they VSTs, or are they MFXs?


#3

Jules! Thanks for the quick reply!

I figured it to be a VST thing. I’d looked through the wrapper code and it didn’t look like anything Juce-related could be causing the symptoms. But I don’t have much VST experience.

I’m at work right now but when I get home I’ll grab a couple of MIDI plugins and see what they do.

Thanks again,

Steve


#4

So I downloaded three different VST’s that generate MIDI messages and dropped them into Live. Sure enough they all acted just like the DemoFilter.

Steve


#5

Have you tried something like hypercyclic?
http://www.mucoder.net/hypercyclic/

otherwise…
I did a VST in Java that outputs only MIDI, I remember that working in Live. The settings were…
this.setProgram(0);
this.setNumInputs(0);
this.setNumOutputs(2);
//this.hasVu(false); //deprecated as of vst2.4
//this.hasClip(false); //deprecated as of vst2.4
this.canProcessReplacing(true);
this.canMono(true);
this.isSynth(true);

hmm, not sure how that translates to Juce / C++.

right, now I remember…!
You set it up as a synth plugin in Live, even though it doesn’t produce any sound. Then on a separate track you drop in a softsynth and set ‘MIDI From’ to your MIDI plugin, and choose the right device too.

So basically you need to write a softsynth that produces midi and no sound, then hope that your host app will allow you to do some creative MIDI routing.

hth,

/m


#6

Steve, Mars is right,
making a VST softsynth instrument with additional midi output is the only way
and afaik you cannot drop a synth after a midi-generating vsti into Live - instead you have to configure the IO-routing of the midi-receiving track to receive midi from your midi-generating track


#7

Thanks for the replies guys. Yeah, it’s pretty much as we all figured: VST’s are just not able to do a MIDI-only thing. Ah well, it’s not so bad routing around Live.

Thanks again,

Steve


#8

Hi! Just to note that noatikl, from http://www.intermorphic.com, which is a “pure MIDI” plug-in I wrote in Juce, is used by various ambient artists in Live; we’ve various bits of info on our site showing how to use it.

Bottom line: you need to route your data via a virtual MIDI port (e.g. IAC on Mac, or MIDI Yoke/Maple etc. on Windows).

Hoping this helps! :slight_smile:

Pete


#9

If you do want to have the MIDI effect in the same track as the instrument, you can make the effect on Max4Live, which is far easier than C++, and is fast enough for processing only MIDI. The downside is your plugin will work only on Ableton, and publishing will be different.

Edit:

Well, I've done it myself. Though Max4Live is much easier to learn then C++, when a program gets complex it's visual programming system tends to get messy. I'm pretty sure it would've been faster to code with JUCE. A possible workaround would be to create only the interface with visual objects and link them to a JS Max object, that allows you to code in JavaScript (also ridiculously easy for a C++ coder).

For coding with JUCE, I think the best way for a MIDI only aplication is to create your project in the Introjucer as a simple GUI app, not a plugin and not even an audio app, so you create only the MIDI ins, outs and callbacks you need.


#10

Does this restriction still exist? Is this a Live restriction or a general VST restriction? Is this the same with VST2 and VST3? thx