Cabbage Logo
Back to Cabbage Site

Cabbage VCV-rack export

I know this might be a pipedream but what about a VCV rack export for cabbage?
I think it would be game-changer for VCV surely if we can export csound/cabbage files directly to or create VCV rack modules.

1 Like

I got a basic Csound VCV interface working Ok. I think it would be quite a lot of work to recreate the same GUI interfaces in VCV as we have in Cabbage. I am leaning towards the same approach I took with CsoundUnity, that is users can develop instruments in Cabbage, but they would load as native interfaces in VCV. Building on Windows might also be a pain as Csound is now built with MSVC and not gcc. I canā€™t promise any movement on this soon, but itā€™s on my radar :wink:

1 Like

Hi Rory !

Your menu entry for exporting to a Rack plugin raised some interest on the official VCV Rack users group page. Whatā€™s the status of this aspect of Cabbage ? Is it going forward ? V1 of VCV Rack will be released soon, might be a good time to review the possibilities of Cabbage + VCV Rack. Btw, Iā€™ve used some Cabbage-made VSTs hosted in Rack, the results are iffy. Some plugins work fine but I often get a lot of JUCE assertion errors caused by the plugin.

Also btw: I built the latest Cabbage and CabbageLite. It was kind of a pain to get everything built that I wanted, particularly the full version of Cabbage, but I did get it all compiled and running. And given the very slight acceptance of VST3 in the major DAWs (excepting Bitwig, of course) I hope that Cabbage will continue to export as VST2.

Best regards,

dp

Hi Dave, Iā€™ve no returned the VSV Rack project in quite some time as I donā€™t use VCV. But It must be said that itā€™s only a simple implementation. On the other hand, doesnā€™t VCV rack now support VSTs? So doesnā€™t this make the whole thing rather redundant?

Regarding building on Linux, Iā€™ve not spent too much time in Linux lately, so Iā€™m not sure of where things stand there, but I will take a look shortly. And rest assured that I intend to support Linux Native VST in all forms :wink:

@davephillips it would appear that you were trying to build with the master branch? Iā€™d stay clear of that one as it is well behind the dev branch, which should build out of the box. Note that you will need to put the VST2 files into a vst2.x folder and place it within the /SDKs/VST_SDK/VST3_SDK/pluginterfaces folder. The contents of mine contains the following the following files:
aeffect.h aeffectx.h vstfxstore.h
After that it should build without any problems. I just tested here and it built straight out of a fresh clone of the develop branch.

Thanks, Rory, Iā€™m on develop now. I had a problem with the buildCabbage script, it wouldnā€™t pick up the path to the VST SDK. I resolved the problem by running Projucer on CabbageIDE.jucer and adding the path to the Extra Includes. Also, when I try to export as a VST effect or synth I get an error that /usr/bin/CabbagePluginEffect.so canā€™t be found, and indeed, I canā€™t find it. Am I missing steps somewhere ?

Did you run the installCabbage script? Doing so will install Cabbage and place binaries into the usual system dirs. If you donā€™t install, you should still be able to run Cabbage and export plugins so long as the .so files are contained in the same directory as the Cabbage app itself. Everything gets built into the ā€˜buildā€™ dir when buildCabbage.sh is called. Look in there for the .so files. If they are not there then they didnā€™t build.

The IDE now depends on the VST SDK too since I added the ability for it to load 3rd party plugins. Iā€™ll update the .jucer files. Thanks for letting me know.

Right-o, the .so files arenā€™t building. Iā€™m getting this error:

Compiling GenericCabbageEditor.cpp
/bin/sh: -c: line 0: unexpected EOF while looking for matching "' /bin/sh: -c: line 1: syntax error: unexpected end of file /bin/sh: -c: line 0: unexpected EOF while looking for matching"ā€™
/bin/sh: -c: line 1: syntax error: unexpected end of file
MakePluginEffect:199: recipe for target ā€˜build/intermediate/Release/include_juce_audio_plugin_client_Unity_f9553f92.oā€™ failed

Whatā€™s Unity and do I need it ? [Edit: Never mind, I looked it up. I donā€™t think I need it, so Iā€™m disabling it in the makefiles.]

Whoops, Iā€™ve also removed that from the dev branch. Sorry about that. Is it building Ok now?

Still no joy. Now the build fails here:

Compiling CsoundPluginProcessor.cpp
/bin/sh: -c: line 0: unexpected EOF while looking for matching "' /bin/sh: -c: line 1: syntax error: unexpected end of file MakePluginEffect:185: recipe for target 'build/intermediate/Release/CsoundPluginEditor_3f0e809d.o' failed make: *** [build/intermediate/Release/CsoundPluginEditor_3f0e809d.o] Error 1 make: *** Waiting for unfinished jobs.... /bin/sh: -c: line 0: unexpected EOF while looking for matching"ā€™
/bin/sh: -c: line 1: syntax error: unexpected end of file
MakePluginEffect:190: recipe for target ā€˜build/intermediate/Release/CsoundPluginProcessor_dc39856c.oā€™ failed
make: *** [build/intermediate/Release/CsoundPluginProcessor_dc39856c.o] Error 1
/bin/sh: -c: line 0: unexpected EOF while looking for matching "' /bin/sh: -c: line 1: syntax error: unexpected end of file MakePluginEffect:180: recipe for target 'build/intermediate/Release/CabbagePluginProcessor_8a6343af.o' failed make: *** [build/intermediate/Release/CabbagePluginProcessor_8a6343af.o] Error 1 /bin/sh: -c: line 0: unexpected EOF while looking for matching"ā€™
/bin/sh: -c: line 1: syntax error: unexpected end of file
MakePluginEffect:170: recipe for target ā€˜build/intermediate/Release/include_juce_audio_plugin_client_VST2_dd551e08.oā€™ failed
make: *** [build/intermediate/Release/include_juce_audio_plugin_client_VST2_dd551e08.o] Error 1
Compiling GenericCabbageEditor.cpp
/bin/sh: -c: line 0: unexpected EOF while looking for matching "' /bin/sh: -c: line 1: syntax error: unexpected end of file MakePluginEffect:175: recipe for target 'build/intermediate/Release/CabbagePluginEditor_4348213a.o' failed make: *** [build/intermediate/Release/CabbagePluginEditor_4348213a.o] Error 1 /bin/sh: -c: line 0: unexpected EOF while looking for matching"ā€™
/bin/sh: -c: line 1: syntax error: unexpected end of file
MakePluginEffect:195: recipe for target ā€˜build/intermediate/Release/GenericCabbageEditor_50c74848.oā€™ failed
make: *** [build/intermediate/Release/GenericCabbageEditor_50c74848.o] Error 1
cp: cannot stat ā€˜./build/CabbagePlugin.soā€™: No such file or directory
JUCE v5.4.1

I just pushed some changes through now to address a few things. I think they address the issues youā€™re having. Sorry about this, I know how frustrating it is! But the build and install scripts should work fine now.

Hey Rory, you rocked it, thank you ! All good now, export as VST works as advertised, Iā€™m a happy Cabbage camper again. Btw, I exported the waveguide1 processor, it loads and apparently works well in the VCV Host FX module. Iā€™ll let you know if I run into any really horrible problems. :slight_smile:

Meanwhile, yeh, I donā€™t know how much work you want to put into the Export As VCV Rack Module. Itā€™s a great idea, but if Rackā€™s VST hosting works okay thereā€™s not much need for that export function. I admit it would be cool though. At any rate, now is not the time to work on it, VCV Rack v1 is close to a release date and the code is still unsettled. If you do want to put any effort into it, you should probably wait until v1 shakes out after its release, let things settle into stability.

Thanks again for all the help, Rory, itā€™s much appreciated.

I already got bitten once by the constant state of flux in the VCV code base. Itā€™s like hitting a moving target. Iā€™ll definitely be waiting till it settles down again before revisiting it!

1 Like

Iā€™d like to help re-creating the GUI interfaces. Is there some basic documentation I can follow to learn how Cabbage GUI widgets are created and the basic differences between Cabbage GUI and VCV Rack GUI engines?

These are all the Cabbage widget classes in VCV Rack. These are native implementations of the ones in the main Cabbage IDE. You see that each one has to be drawn manually. You will see also that they inherit some basic VCVRack classes such as Knob, Switch , etc. That means I didnā€™t have to write my own event handlers to create the interaction between the widgets and the users. It might be possible to build a VCV Rack module using JUCE. If you could find any work done in this area it would probably make life a lot easier.

Yeah, I see a lot of functions starting with ā€œnvgā€. From where do the nvg-functions originate?

They are all part of the nanosvg library that Rack uses. Tbh, most of the code you see in CabbageRack is cobbled together from the examples provided by VCV Rack and what info I could source from other open source projects. The API docs are not so helpful from I recall.