Build a Synthesizer VST on Windows using Cabbage

Following up on my 2018 post I’ve taken a further look at Cabbage. Back in 2018 I could only get the standalone examples to work and they suffered from long latencies. The latest version 2.7.0 has installed reliably without long latencies. Furthermore, its packed with goodies not least ‘Export as VST and VST3’ and notably ‘Export as VCV Rack Module’. I’ve just played with a couple of standard paraphonic examples so far but everything worked and the VST export process is so simple and fast.

The Cabbage scripts combine the UI with Audio processing so its really easy to maintain and see the relationships between controls and processing. The GUI graphics are tolerable and there are extensions that look like they may improve the imagery further. Signal flow is easy to follow in the scripts. Here’s a classic Analogue synth core; VCO, LPFilter, and LFO modulating filter cutoff, with ADSR modulating stereo output amplitude:
and here's the relevant script:
kADSR1 madsr iAtt, iDec, iSus, iRel
aVCO vco2 iAmp, iFreq
kLFO lfo 1, kLFOFreq, 5
aLPFilter moogladder aVCO, kLFO*kCutOff, kRes
outs kAmp*(aLPFilter*kADSR1), kAmp*(aLPFilter*kADSR1)

In addition to VSTs I’ve exported a simple VCV Rack gain control module and it worked though the control graphics might be a little off-centred and oversized when rendered in Rack but its early days for me.
Cabbage was developed by Rory Walsh based at Dundalk Institute of Technology. It is based on Csound, initially developed in 1985 at MIT. With a library of over 1500 unit generators Csound provides the heavy lifting for audio processing and with that comes a massive improvement in sound design productivity.

Csound does impose some minor constraints notably with variable names. There a several variable types and each type uses a letter prefix to specify how often it changes. There is a global setting for sample rate i.e. sr = 44100. Variables beginning with ‘a’ such as audio samples will change with a rate equal to ‘sr’. A second global setting is control rate i.e. ksmps = 32 which specifies that control variables designated by the prefix ‘k’ will change every 32 samples. These are typically modulation variables. There are a further two types, ‘i’ (initialization) and ‘p’ (performance) that are read every time a note starts and stay the same while the note plays.

Cabbage takes the productivity hurdle out of VST development so you don’t have to worry about the structural and syntactical burdens of development systems such as JUCE or even SOUL. With Cabbage if you have an instrument or effect idea you can get to auditioning sound very quickly and the addition of the export to VCV function offers a whole new set of opportunities.

Oh and did I mention its free to distribute your plugins.

Returning to the original post back in 2018 my benchmark for VST development was SynthEdit scoring 18. I’d have to give at least that to Cabbage and there’s still more to explore.

Comments

Popular posts from this blog

VCV Rack interface with Cakewalk using VCV Bridge

Introducing Midichi, a MIDI chord interface

How to setup Cakewalk Generic Surface for Korg nanoKontrol