Cabbage Logo
Back to Cabbage Site

Standalone Cabbage

Well, I started by obnoxiously sending an email straight to Mr Walsh, and he graciously asked me to post here in order to benefit everyone. After having finished a fair sized piece of humble (cabbage) pie, I thus turn to the cabbage stew.

This is what I asked in the email:
Hi ho, Mr Walsh!

I think I asked you this before a long time ago, but can’t find the mail now, so I’ll ask again.

If I understand it correctly, it should be possible to create a standalone executable from Cabbage? Is that so? On windows?

How would one go about to do that? Can it include e.g. receiving OSC data for external control?

So many questions…

I see that something similar has been asked before, but I’m not sure I am smart enough to understand all parts of the instructions that were referred to, so any additional pointers and clues would be very welcome.

Regards,
Anders

Without further ado! Here you go:
https://ci.appveyor.com/project/rorywalsh/cabbage/builds/22879072/artifacts
If you wish to run an instrument as ‘standalone’ you will need to pass a filename to CabbageLite when you launch it. For example:

C:\GreatSoftware\CabbageLite.exe synth.csd

This will open the instrument in standalone mode. The standalone player doesn’t give users access to any editing tools although it does give users the option of selecting their preferred audio devices. These preferences are saved across sessions. You’ll probably end up writing a script to launch the instrument.

Regarding the OSC information, that’s up to how you write your instrument. Cabbage uses Csound’s OSC opcodes so if you already have an OSC enabled instrument written for Csound, you should be easily able to port it to Cabbage.

Let me know if you have any issues. :wink:

1 Like

Absolutely fantastic!
Thank you very much!!!

I’ll try this out and will report any issues in the unlikely event I stumble across them.

Regards,
Anders

You’re obviously new here :joy:

Hi there!

Is it possible to pass other arguments to CabbageLite in this way?

Windows Audio and DirectSound are causing a bad behaviour in my synthesizer, so I would like to configure my exe file to open CabbageLite always with ASIO by default.

Once you open CabbageLite and set the audio devices, it should remember them for the next time. There is a CabbageLite preferences file that holds this information. You can take a look there. What OS are you using?

CabbageLite does accept other command line arguments, but these are for exporting instruments.

Thank you rory,

Windows 10 64 bits

Is it possible to change this file in order to avoid Windows Audio? I can’t find it, where is it located?

Some people are having problems running my synthesizer, that’s because they have to change manually the audio settings to ASIO inside CabbageLite before executing it, otherwise it will not open (nothing is shown on the screen). After doing this step, the program runs normally, but I am afraid that this is causing many people not to try it.

If you would like to prove, here it is https://github.com/drlazz/elaine (I would appreciate any opinion / advice)

I’m about to present it in the forum, but I’m waiting until this problem is solved, also I should translate the manual to english :sweat_smile:

I have classes for most of the day so I’ll have to check this out later. The CabbageLite preference files in Windows should be located in Users/Username/AppDatas/Roaming/CabbageLite/ CabbageLite should remember the settings once a user has selected their preferred device. If not, it’s a bug that needs fixing. Maybe you can ask your mate to check this file before and after use to see that it is being correctly updated?

I just got around to checking this out. it’s quite a beast of synth! :wink: It’s great. Lots of great features. I did notice some issues with the tables, they don’t seem to be updating correctly? Are they for you? For example, the ADSR is no showing any ADSR for me.

Thank you Rory!! I’m glad you like it :smiley:

Oscillators must be updating in this way:

When changing the waveform

When changing the wavetable morph index

When changing the note upwards (anti-aliasing)

Envelope generator must be updating in this way:

Some features, including table updates, seems to have a bad behaviour with some audio controllers.

It’s working properly. Once you change the settings, it remembers for the next session. But it is a somewhat complicated installation for people trying to use the synthesizer. They have to open CabbageLite manually and change the audio configuration because the executable (bat file calling cabbageLite passing .csd file) won’t work in the first place. After that process, everything works fine.

I thought it could exist some kind of solution for the “first time running” problem, but I’m a noob in terms of program making, probably it’s impossible without changing Cabbage code, isn’t it?

I don’t think so. I will take a look, but by default Cabbage will always pick the standard operating system audio device. I’ll see about passing audio devices to the command line. It’s a really great synth.

I just pushed some code through the develop branch that will get CabbageLite to load ASIO4ALL drivers by default if they are available. I’ll post a link to a build once it’s cooked.

Hi @drlazz, can you try this version?

It works! Now it opens ASIO4all in the first instance. Thank you very much :slight_smile:

I’ve notice certain changes on the overall look and some widgets of Cabbage, it looks pretty cool!

I need to adapt the synth to this version. I’m having now the ADSR visual problem you’ve commented before.

It seems to ignore now the command line calling to the .csd file. I’ve created a bat file to show the output of the command in running time. Has anything changed related to command line parameters in the new version?

Oh, I’ve found the problem related with visuals, this init error ruins the entire performance of the instrument.

INIT ERROR in instr 100 line 2758: channel already exists with incompatible type
from file C:\Users\Dani\AppData\Local\Temp\temp_1bfc219c.csoundCabbageCsdText (1)
kMainPresets chnget.k “ElainePresets”

I have read this, it could be related? I’m extracting the channel info to a k-rate variable with the chnget opcode.

Nothing has changed with regards to the command line arguments as far as I can tell. But I will double check. If you wan to keep ysing the old style look just use style(“normal”) for the widget you want the old style on.

I’ll have to have a look at your code to see what is going on here. Unfortunately I won’t get a chance until tomorrow. Is the channel “ElainePresets” declared for any widgets?

hang on a moment, how old was the version you were using? It could be that is was using the older preset system where each preset was put into its own unique file? The more recent versions put all presets into a single xml file…just a thought…

[edit] just checked your repo, looks like it’s the newer preset system…

Sorry, I don’t understand this. The channel is declared in this line:

(Line 74) combobox bounds(64, 70, 65, 19), channel(“ElainePresets”), populate("*.snaps")

And I extract the data from channel in this other line:

(Line 2764) kMainPresets chnget “ElainePresets”

Yep, I’ve all the presets in a .snap file.

I’m not seeing that line, I’m seeing:

Anyhow, if you need to access that channel, it’s likely a string channel, so use

SPresets chnget “ElainePresets”

Sorry about that… I changed the name in local for testing. I was using that k-rate variable to refresh the oscillator view when changing the preset, but I realised that it’s a bad approach to that objective. It’s working now without that code :+1:

I’ve just solved this problem by changing CabbageLite.exe file to the project root path!

Seems that everything is working fine so I’ll post the synth in a few days, when manual is translated into English. It will probably be the worst translation in the history of software development :laughing:

Thank you very much for your help Rory!