You are here

Native VST plug-in support

This last week-end has seen a major rewrite of the plug-in infrastructure (qtractor, opening the way for more plug-in types, other than just LADSPA. So, effective today on CVS HEAD, you get native Linux VST support on Qtractor. Audio effects only however. This marks the way for the next working season, which is about having MIDI synth/instrument plug-ins, or DSSI and VSTi support for short.

However, building for VST support is not that easy. At least it does not work out of the box. First off, due to its licensing issues, you'll have to go through the nuisance and download yourself the VST SDK from the Steinberg Media Technologies GmbH site, specifically digging through the 3rd Party Developers section. It doesn't matter much whether you pick the VST 2.3 or VST 2.4 version, but you need to pick one and just one only. Do not ask for the recently announced VST 3.0. It won't work and I won't care :)

Once you have downloaded the VST SDK zip-archive, for which you'll have to accept their license and supply some personal data, you'll have to unpack the pertinent header files, which are found under the respective folder. Just copy those couple of files to somewhere on your system:

  • VST SDK 2.3: vstsdk2.3/source/common/
  • VST SDK 2.4: vstsdk2.4/pluginterfaces/vst2.x/
  • If you choose to copy those files into some standard include directory (eg. /usr/local/include) all will be handled automagically by the ./configure build step. Otherwise you'll need do supply the path yourself, as in ./configure --with-vst=/path/to/vstsdk2.x/include .

    Next step, once properly built you'll need to grab some native VST plug-ins and tell where those might be found. Currently, you'll need to set the VST_PATH environment variable with the paths where the plug-ins will reside and can be picked up by Qtractor.

    In case you don't know where to get them, some ready made Linux VST plug-ins can be found while browsing in here:

    Ah, almost forgot this one: as an added bonus, you can now drag-and-drop plug-in instances over the mixer strip chains. You can move, drag and drop inside the same strip and over to and from any other. Neat eh?

    rncbc aka Rui Nuno Capela


Okay, you're right. Flawlessly was not a very good choice of words. ;) There are a few quirky things still, but at least I'm actually able to get audio in and out of them, and see their GUIs.

Jackd gets shutdown occasionally when trying to add a plugin (any type) while the transport is running. What is really nice is that Qtractor now restarts jackd automatically. What is not so nice is it fails to reconnect any connections. [EDIT-1] I also noticed I'm ending up with multiple jackd processes.

[EDIT-2] Also, when using the EDIT button on the DSSI-VST mini Window to show the VST Control Interface, I can only use it once. If I close it, the EDIT button never re-opens it. I dunno if this is helpful, but here is the output from Qtractor's Messages window:
DSSIVSTPluginInstance::configure: show gui: value /tmp/rplugin_gui_fmZfI8
dssi-vst_gui: configure_handler, returning 0
RemoteVSTServer::showGUI(/tmp/rplugin_gui_fmZfI8): guiVisible is 1

dssi-vst_gui: No contact from plugin -- timed out on startup

dssi-vst_gui[1]: exiting

You are making unbelievable progress on this Rui! Very impressive indeed! :)


I have had this exact same problem using dssi-vst in Rosegarden. You can press the edit button and use the native windows gui once. After closing it, it won't open again. The problem is probably in dssi-vst and not the implementation of it within qtractor.

rncbc's picture

Yes, I've been struggling myself with this issue all week-end and tried too many programmatic and whatnot workarounds that I could juggle. To no avail. Once you close the DSST-VST GUI window you can't get it back, unless you drop and insert the plug-in again (ie. re-instantiate the plug-in) or restart the qtractor session.

However, toggling the "Edit" button it seems you can hide/show the WINE GUI alright, or least it works with some plug-ins. So that's this one fair warning for you to follow: DO NOT touch that Close button [X] of that wine window, never ;) Minimize seems to be the right alternative.

Guess this is small trouble, unfortunately it will get knocked back to DSSI-VST probably (hi Chris ;) or, horror of horrors, to WINE ? :(~

rncbc aka Rui Nuno Capela

I agree it is most likely a DSSI-VST issue. Also something that is probably a DSSI-VST issue, is the GUI stops reacting on some VSTs when not selected. In other words, the level meters and stuff like that quit working, but not the plugin itself.

Anyway, at least we have this now. I can live with not closing my VST plugins. Let's just move on and get the DSSI synth plugins working ;)


rncbc's picture

Aha, technically speaking, it is the responsibility of the VST host to keep some recurring thread to update the GUI at regular times and that should be only be supported iif the guest plug-in asks for it. Examples are in deed plug-ins that expose such eye-candy as VUmeters. Qtractor native Linux VST hosting has such mechanism, although not fully implemented ;) However, when dealing with Windows VSTs, it is dssi-vst who or which is to provide that functionality as a VST host, not Qtractor.

Or so I believe. I rather wear my conservative hat now. In the particular case of windows VSTs hosted by the DSSI-VST, updating the GUI a dozen times per second, just to let you see those VUmeters pumping pixels up and down, will just end stealing too many CPU cycles just for showing that, erm... eye-candy. It adds nothing to sound quality, just ... darn eye-candy :) Just think about the code path to get one single screen update: qtractor (osc-udp) -> dssi-vst_gui -> VST plug-in -> wine -> X..., back and forward. What a waste...

But one could argue that is eye-candy that sells. Fortunately, it might just occur, that we're not selling anything here :D

Unless someone show me the light
rncbc aka Rui Nuno Capela

Ture, most of this is really just that.....eye candy. However, some of it is quite useful, frequency analysis graphing and FFT displays, for example. Hard stuff to do without fancy gfx. If winders can do it with an average of 5ms latency, Linux can certainly do better with 1ms latency. :) However, as I said, many of these VSTis work pretty darn good under WINE, so I think the blame has to fall onto DSSI-VST for the problems we are experiencing. Since none of these problems appear to be show stoppers ATM, I can definetly work around the issues at hand.

and what about the vst headers from the LMMS project? are you planning binaries with these headers?
i mean, to allow the distribution of precompiled binaries with vst support...


rncbc's picture

Last time I've checked, the VST headers from the LMMS project are incomplete and does not cope with all the needed interfaces for what Qtractor implements as for fully native Linux VST hosting (as seen in primordial others, energyXT2 and JOST, as far as I can tell). I'm not completely sure, but the LMMS project features a Windows VST host, yet again through WINE, not a true Linux VST host.

However, what have the LMMS folks done that makes their VST headers legal in regard to the Steinberg SDK license? They just look like it's a snipped version of the original headers. Yep, I have my reasonable doubts, but as they say,... IANAL :)

rncbc aka Rui Nuno Capela

YO Rui!!!!!!!!!!!!!!!!
Im Logic user, and im looking for something similar on Linux.
I believe i found it :)

I love this Qtractor.

I give a hug 2 u man ( im unfortunatelly not know nothing about programming but i use
sequencer software, daw workstations, pro apps....)

Every day i see how "big" pro companies complicate their software and gui options ( try Samplitude, try protools above 6.0 version, just see its gui and u are sad man).

"Keep this interface clear" (maybe similar to old protools 5).

Thank YOU

rncbc's picture

Thanks man :)

Obviously you are welcome and I would much appreciate your comments and help keeping this project as clean as you wish.

There's no secret that it's trying to keep the user experience the less cluttered as possible, mostly due that I am its own primordial user ;) but sure it has been and still is being shaped to be as easy and seamless to use. And yes, it's all by you, and to you all.

rncbc aka Rui Nuno Capela


Add new comment