Cabbage Logo
Back to Cabbage Site

Building cabbage VSTs for BitWig Studio

hello

i have jumped ship and installed Bitwig and have been using it VERY sucessfully on Ubuntu64.
I found several cabbage vsts and i would like to know if there is a how-to or a tutorial to follow to make my own?

Thank you for Cabbage it’s really great

Patrick

Hello,

If you want to export your instrument as a VST, it is no more difficult that going to"File --> Export as plugin Synth" or “Export as plugin Effect”, depending on what your instrument is doing (either a synth, responding to midi or an effect treating an audio signal).

If you want to learn Csound for creating synth, there is the FLOSS manual which is really well written to teach you the basics of audio with Csound and explain how a lot of opcodes work.
You can also have a look at all Cabaage example, look at Iain Mc Curdy Csound example and browse this forum to find quite of a few Csound/Cabbage synth that you can simply export as VST.
Hope this helps

hi and thank you kindly for the response. I have been using Csound since right around 1995. I learned from Dr. James Paul Sain at the FEMS[Florida Electro-acoustic Music Studio] in the mid to late 1990s. I spent quite a bit of time then when the big GUI to work with was the fltk widget set and have kept and maintained a set of csound benchmarks i love/use for about 20 years now. I was joking with Oyvind Brandestagg that i have be "bothering him for 17 years’ because back then he released what i felt/feel was the best csound tool i had encountered [until Cabbage] “Improsculpt” what i want to do with Cabbage --if it’s not already been done is make a GendySynth for use in Bitwig Studio, playable note-wise via midi of course and perhaps change breakpoints via CC.

Thank you so much for your reply and i am sure i’ll have questions as i go FW

Thanks!

pp

This all sounds very achievable with Cabbage. We should ask Oeyvind to update and publish Improsculpt as a Cabbage instrument. That would be cool.

1 Like

i asked him and he said he was into csound CLI these days :slight_smile:
I would love improsculpt in cabbage man…that would be Awesome

i want to build the GendySynth in/on linux for BitWig

Do you think i can do that with version 1 properly?

I know his latest research makes extensive use of Cabbage, but I’m not sure we’ll ever see a Cabbage Improsculpt. I’m not sure what a GendySynth is but I’m sure you can make it with Cabbage :wink: You can proceed with version 1, but I’m not sure why you would want to. Version 2 is much improved, especially with it comes to the GUI designer.

can you point me to a spot i don;t wanna break version 1

i mean the proper sources to build version 2, sorry i was not clear

Here. Build instructions here. Let me know how far you get. You can’t break the older version, unless you clone into the same folder. Best not to do that!

ok so this is what happened i place the Juce file in the wrong place so the ./buildCabbage script could not find it

shree@shree-linux:~/cabbage/Builds/LinuxMakefile$ ./buildCabbage

======== Build Script for Cabbage =========

This scripts assumes that Csound is installed in the default location, i.e, includes files
should be located in /user/local/include/csound while the Csound library itself should be
located in /user/local/lib It is also assumed that the VST SDK is located in ~/SDKs/

./buildCabbage: line 14: [: ==: unary operator expected
./buildCabbage: line 30: …/…/…/JUCE/extras/Projucer/Builds/LinuxMakefile/build/Projucer: No such file or directory
mv: cannot stat ‘Makefile’: No such file or directory
Cleaning Cabbage
Compiling FileTab.cpp
Compiling CabbageMainComponent.cpp
Compiling CabbageDocumentWindow.cpp
Compiling CabbageGraphComponent.cpp
Compiling CabbagePluginComponent.cpp
Compiling CabbageToolbarFactory.cpp
…/…/Source/Application/CabbageToolbarFactory.cpp: In member function ‘juce::ToolbarButton* CabbageToolbarFactory::createToggleButtonFromPNG(int, const juce::String&, const void*, size_t, const void*, size_t)’:
…/…/Source/Application/CabbageToolbarFactory.cpp:150:50: warning: ‘void juce::Button::setToggleState(bool, bool)’ is deprecated [-Wdeprecated-declarations]
togglePlayButton->setToggleState (true, false);
^
In file included from …/…/JuceLibraryCode/modules/juce_core/system/juce_StandardHeader.h:56:0,
from …/…/JuceLibraryCode/modules/juce_core/juce_core.h:174,
from …/…/JuceLibraryCode/modules/juce_audio_basics/juce_audio_basics.h:52,
from …/…/Source/Application/…/…/JuceLibraryCode/JuceHeader.h:17,
from …/…/Source/Application/…/CabbageIds.h:23,
from …/…/Source/Application/CabbageToolbarFactory.h:20,
from …/…/Source/Application/CabbageToolbarFactory.cpp:20:
…/…/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h:356:27: note: declared here
JUCE_DEPRECATED (void setToggleState (bool, bool));
^
…/…/JuceLibraryCode/modules/juce_core/system/juce_PlatformDefs.h:266:57: note: in definition of macro ‘JUCE_DEPRECATED’
#define JUCE_DEPRECATED(functionDef) functionDef __attribute
^
…/…/Source/Application/CabbageToolbarFactory.cpp: In member function ‘juce::ToolbarButton* CabbageToolbarFactory::createButtonFromSVG(int, const juce::String&, juce::String, juce::String)’:
…/…/Source/Application/CabbageToolbarFactory.cpp:183:54: warning: ‘void juce::Button::setToggleState(bool, bool)’ is deprecated [-Wdeprecated-declarations]
togglePlayButton->setToggleState (true, false);
^
In file included from …/…/JuceLibraryCode/modules/juce_core/system/juce_StandardHeader.h:56:0,
from …/…/JuceLibraryCode/modules/juce_core/juce_core.h:174,
from …/…/JuceLibraryCode/modules/juce_audio_basics/juce_audio_basics.h:52,
from …/…/Source/Application/…/…/JuceLibraryCode/JuceHeader.h:17,
from …/…/Source/Application/…/CabbageIds.h:23,
from …/…/Source/Application/CabbageToolbarFactory.h:20,
from …/…/Source/Application/CabbageToolbarFactory.cpp:20:
…/…/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h:356:27: note: declared here
JUCE_DEPRECATED (void setToggleState (bool, bool));
^
…/…/JuceLibraryCode/modules/juce_core/system/juce_PlatformDefs.h:266:57: note: in definition of macro ‘JUCE_DEPRECATED’
#define JUCE_DEPRECATED(functionDef) functionDef __attribute
^
Compiling AudioGraph.cpp
Compiling CabbagePluginEditor.cpp
Compiling CabbagePluginProcessor.cpp
Compiling CsoundPluginEditor.cpp
Compiling CsoundPluginProcessor.cpp
Compiling GenericCabbageEditor.cpp
Compiling GenericCabbagePluginProcessor.cpp
Compiling CabbageBinaryData.cpp
Compiling CabbageCodeEditor.cpp
Compiling CabbageEditorContainer.cpp
Compiling CabbagePropertiesPanel.cpp
Compiling ComponentLayoutEditor.cpp
Compiling ComponentOverlay.cpp
Compiling CabbageGenericPluginLookAndFeel.cpp
Compiling CabbageIDELookAndFeel.cpp
Compiling CabbageLookAndFeel2.cpp
Compiling CabbageSettings.cpp
Compiling CabbageSettingsWindow.cpp
Compiling CabbageColourProperty.cpp
Compiling CabbageNewProjectWindow.cpp
Compiling CabbageSSHFileBrowser.cpp
Compiling Soundfiler.cpp
Compiling TableManager.cpp
Compiling CabbageButton.cpp
Compiling CabbageCheckbox.cpp
Compiling CabbageComboBox.cpp
Compiling CabbageCsoundConsole.cpp
Compiling CabbageCustomWidgets.cpp
Compiling CabbageEncoder.cpp
Compiling CabbageFileButton.cpp
Compiling CabbageGenTable.cpp
Compiling CabbageGroupBox.cpp
Compiling CabbageImage.cpp
Compiling CabbageInfoButton.cpp
Compiling CabbageKeyboard.cpp
make: *** No rule to make target ‘…/…/Source/Widgets/CabbageNumberBox.cpp’, needed by ‘build/intermediate/Release/CabbageNumberBox_d8ec912a.o’. Stop.
make: *** Waiting for unfinished jobs…
Compiling CabbageLabel.cpp
cp: cannot stat ‘./build/Cabbage’: No such file or directory
./buildCabbage: line 36: …/…/…/JUCE/extras/Projucer/Builds/LinuxMakefile/build/Projucer: No such file or directory
mv: cannot stat ‘Makefile’: No such file or directory
Cleaning CabbagePluginEffect
make: *** No rule to make target ‘…/…/JuceLibraryCode/include_juce_audio_plugin_client_VST2.cpp’, needed by ‘build/intermediate/Release/include_juce_audio_plugin_client_VST2_dd551e08.o’. Stop.
make: *** Waiting for unfinished jobs…
cp: cannot stat ‘./build/CabbagePlugin.so’: No such file or directory
./buildCabbage: line 43: …/…/…/JUCE/extras/Projucer/Builds/LinuxMakefile/build/Projucer: No such file or directory
mv: cannot stat ‘Makefile’: No such file or directory
Cleaning CabbagePluginSynth
make: *** No rule to make target ‘…/…/JuceLibraryCode/include_juce_audio_plugin_client_VST2.cpp’, needed by ‘build/intermediate/Release/include_juce_audio_plugin_client_VST2_dd551e08.o’. Stop.
make: *** Waiting for unfinished jobs…
cp: cannot stat ‘./build/CabbagePlugin.so’: No such file or directory
./buildCabbage: line 50: …/…/…/JUCE/extras/Projucer/Builds/LinuxMakefile/build/Projucer: No such file or directory
mv: cannot stat ‘Makefile’: No such file or directory
make: MakeCabbageLite: No such file or directory
make: *** No rule to make target ‘MakeCabbageLite’. Stop.
make: MakeCabbageLite: No such file or directory
make: *** No rule to make target ‘MakeCabbageLite’. Stop.
cp: cannot stat ‘./build/CabbageLite’: No such file or directory
/tmp/ccTo7NTn.o: In function Csound::CompileCsdText(char const*)': testCsoundFile.cpp:(.text._ZN6Csound14CompileCsdTextEPKc[_ZN6Csound14CompileCsdTextEPKc]+0x23): undefined reference tocsoundCompileCsdText’
/tmp/ccTo7NTn.o: In function Csound::GetInputName()': testCsoundFile.cpp:(.text._ZN6Csound12GetInputNameEv[_ZN6Csound12GetInputNameEv]+0x18): undefined reference tocsoundGetInputName’
collect2: error: ld returned 1 exit status

But then YES indeed the Cabbage version i have installed no longer runs and requires that i run the .buildCabbage Script from THAT file again before it will launch. I am not crazy.
I’m not sure what the issue is but it is now the second time this has occurred :slight_smile:

maybe it breaks the cabbagehost link?
guessing sorry

so after i build the projucer
it i assume stay where it is becaus there is no install for it unless i am too much of a novice with JUCE

currently i have JUCE in my home directory with the SDKs and the cabbage sources
should it be anywhere else by chance?

Sorry for so many questions

okay well after building the projucer
it compiles for a while but stops at

Linking CabbageLite - App
/tmp/cc82h2bb.o: In function Csound::CompileCsdText(char const*)': testCsoundFile.cpp:(.text._ZN6Csound14CompileCsdTextEPKc[_ZN6Csound14CompileCsdTextEPKc]+0x23): undefined reference tocsoundCompileCsdText’
/tmp/cc82h2bb.o: In function Csound::GetInputName()': testCsoundFile.cpp:(.text._ZN6Csound12GetInputNameEv[_ZN6Csound12GetInputNameEv]+0x18): undefined reference tocsoundGetInputName’
collect2: error: ld returned 1 exit status

You need to update your version of Csound. The handiest thing would be to build yourself from source. What version do you currently have installed? Alternatively, you can comment out this line:

Btw, it should have built everything regardless of that last error. Look in the build directory, you should have a few binaries there.

–Csound version 6.10.1 (double samples) Jan 8 2018
[commit: 5a28597cf07076779e533a96ad5ccb7ad0ded6f9]

what version is needed?

i think that with 6,10,1 i am at the latest no?

the issue i am seeing that is in the Cabbage app now there is no way for me [in the application] to increase the audio buffer size in the Cabbage Settings i assume i can change it in orchestra

Are you using Jack? If not then you should be able to select the audio buffer sizes(see screen below).

If you’re not using Jack, then I recommend you do, in real time mode as you’ll get much better latency, but you’ll need to set the buffer size in Jack rather than Cabbage.

I’m afraid not. Only ksmps can be changed in the orc, but I recommend you keep this to 32 or 64 for best results. Are you experiencing problems with audio dropouts?

That’s right. I’m not sure why that error is popping up then. I will take a look.

yes i am using Jack
it may because of other settings but i am locked in at 48 and 512 i cannot select anything else