Is it possible to use a SC synth as a VST plugin?

Hello there , I am new to the forum
I know about VSTPlugin that turns SC into a VST Host but I was wondering if the opposite is possible making a VST synth via SC. Any suggestions ?

This is definitely possible, with some caveats…

JUST the server:

The SuperCollicerAU project (SuperCollider in an AudioUnits) plugin wraps up a very simple, fixed server configuration in an AU plugin, with AU parameters connected more or less to server OSC messages.

This package has only been sporadically maintained, but I believe was working relatively recently. AU is fundamentally quite similar to VST, so adapting it to the VST3 SDK would be … work, of course, but probably a pretty well defined project without a lot of surprises. I haven’t looked in AGES but if there are AU <> VST bridge plugins, these might let you use a SuperCollider AU plugin directly in a VST host without any work at all - something to look into.

This still means that you get none of sclang’s functionality for patterns, constructing events, or modifying things on the server…

The server plus sclang:

Running sclang stuff as part of a VST plugin is also in theory possible. This would be a more serious engineering project, but it would mean you could use sclang code to control the logic of your audio engine. There are some architectural issues to be resolved for sure, but obviously being able to define a VST plugin entirely using sclang would be massively, game-changeingly use useful.

I haven’t mentioned building the UI in sclang, because that requires…

Server plus sclang plus QT

To build your plugin UI in SuperCollider, you need QT. There are some big impediments to getting QT working in a VST plugin context. The most basic one is that you need to statically compile QT into sclang, and obfuscate the symbols so you don’t have symbol collisions with OTHER VST’s using QT. This is a supported thing, but would require a lot of rather painstaking build work.

Beyond that: adapting QT to run inside a VST3-provided window is, I would say, a big grey area. There are VST plugins that use QT (you can see this easily by using a tool like nm - you’ll see QT symbols), so it’s clearly possible. But, some serious adaptation would be required to get this working correctly - and there’s very little info available about how to do this. If it’s an interesting topic, you can find occasional discussions of this on QT and VST mailing lists, and there are at least one or two open source implementations of QT+VST that could be a reference point (last time I looked, none of them were anywhere near production quality, but things may have changed).

2 Likes

Oh boy that’s quite a lot of work. It’s ok I can start with a standalone simple synth and take it from there .

Yeah, this makes sense - I’d definitely take a look at the SuperColliderAU project: https://github.com/supercollider/SuperColliderAU

This should have roughly the same functional pieces as what a VST3 plugin needs. Gerard Roma, who I think is not on this forum, did most of the recent work on the AU implementation and may be able to give some pointers. There’s very good example and setup code in Steinberg’s VST3 SDK - definitely consider using those as a basis, since they should represent what Steinberg identifies as “good” VST3 development practices.

My problem is that I recently moved out from MacOS after 14 years being a user and I mainly use Manjaro linux while dual booting with Win 10 which I rarely use unless I have too. I wanted VST because its by far , ironically , the most cross platform.

My plan is to start with a simple synth, but because SC is so powerful I am flirting with the idea to add so many features to the synth that in turn will turn to a host/ DAW. Of course it will all depend , as its usually the case on my motivation. I like the idea of making a mini DAW tailor made for my needs to use together with my two hardware synths, Yamaha Motif ES6 and Alesis Andromeda A6.

So I am currently want to start very small and simple but also keep my options open. I am not married to any platform or plugin format but convenience is good to have.

I am coming from Cabbage which is a tool for CSOUND which provides a GUI (via JUCE) and a nice GUI designer. CSOUND can both host VST plugin but also have the option , which Gabbage also supports, to export to a vst plugin.

However because I am a hobbyist coder with 30 years of experience, the CSOUND language has been a horrible experience. I was able to make a CS-80 clone with added features which I exported as a VST3 plugin but at some point , even though it was lovely working with Gabbage awesome GUI designer, I got fed up with how bad the CSOUND syntax was.

So I decided to take a deep look into SC because I am a huge fan of Smalltalk , I also like QT as a GUI API. But I am going to miss the amazing Gabbage GUI designer but hey we cannot have all :smiley:

So yeah I asked this question not because I am super motivated to make a VST plugin but because I am a noob, like any noob overwhelmed with all the nice features that SC offers and I wanted to have a good idea what the easy options are available before committing to anything. I dont want to mess too much with code because this going to be a free part time GPL project. QT is a monster I rather not pick a fight with.

I also find that nice daw made with Supercollider LNX_Studio

http://lnxstudio.sourceforge.net/

but is not available for linux or windows it seems and no longer developed. But I could use of course as a learning source.

Do you need to move automatisation along? Otherwise, you could just route in/out of Jack. (perhaps SC even supports Jack-transport; I don’t know).

Might be a far shot, because it uses a different language (Scala instead of SCLang), but Mellite also has some ways of behaving like a DAW with embedded SuperCollider code.

Yes routing audio and midi is possible via Jack. Linux has also Cadence which puts anything that macos has audio and mid routing wise to shame. My main DAW was Reason.

I say was because
a) I moved to Linux and Wine does not support Reason
b) Reason+ is the new kid in the block which seems to move Reason to a subscription only service for the distance future, which I hate.
c) I have moved almost completely to open source for 3d graphics and game dev and trying to do the same with music production. LMMS has been my main DAW recently but I have been flirting with the idea of making my own mini DAW.

So exporting to VST is not that crucial which is why I was looking only for an easy solution , if there is none that ok too, I can live without VST export.

yeah I know Java but I dont know Scala

if you are asking how to send from SC to a daw —>

=D

no thats not what I am asking