Csound, Cabbage and Renoise

In the hopes that this may be of interest, check out Cabbage, http://cabbageaudio.com/

“Cabbage is a framework for developing audio plugins that use Csound as their processing engine. All the power of Csound can be wrapped into a VST plugin that can then be loaded in a variety of different host software. Cabbage provides users with a fully integrated IDE that allows drag and drop editing of GUI interfaces, real-time compilation, Csound debugger. Cabbage also ships with over 100 ready made audio effects and synthesisers.”

If you’re unfamiliar with Csound, http://csound.github.io/ Csound has over 1900 opcodes that can be combined for audio generation and processing so the possibilities are almost limitless. The Csound reference manual is here: http://csound.github.io/docs/manual/index.html (Yes, it’s huge.)

The vsts that Cabbage produces are around 12M in size, and can’t be further compressed with upx: http://upx.sourceforge.net/ Depending on the amount of signal processing overhead, just as in any synth or effect vst, CPU usage varies. As with any experiments, some things work better than others and I’ve found there are quirks and tweaks as well. I’m concentrating more on effects than generation because I tend to work more with samples than real time. So far, I’ve encountered few problems …

So, if your curious, give Cabbage a try and see what you think. You only need the Cabbage download, no Csound install is necessary, it’s all “in the box”.

Cheers.

Disclaimer: I’m not affiliated with the folks who created Cabbage. I just think it’s cool. :slight_smile:

This is great, some nice generators in the examples :slight_smile:

This is great, some nice generators in the examples :slight_smile:

There is some pretty cool stuff in there I’d agree.

Csound also has a Lua interface. https://csound.github.io/docs/manual/lua.html which uses LuaJIT, http://luajit.org/ . I’m thinking if we can create tools to access CDP, it might perhaps be feasible to access the Csound opcodes in some fashion. The potential opens up a whole new avenue to create Renoise instruments and tools. We’ll see … :slight_smile:

Cheers.

This looks like a real hard gamechanger for my plans. Thank you so much for pointing into this direction.

Also it seems very easy to expand the system with own code, even low level c routines from shared objects, which can augment with the whole big library of opcodes already there. Exactly what I was looking for all the time.

As for your interface ideas - yes, you can as well use lua (or other languages like python) to code your own “opcodes” (sound building blocks), as you can use it from the outside to load the whole csound library and engine, and then manipulate and execute programs from there. Csound is basically just a library. Cabbage wouldn’t be involved anymore from there, I think, maybe as a testing environment for the scripts you wish to run on your samples. But it is not really trivial, this would be one farily big tool if it was supposed to do more than running that csd script from disk. Was it that what you had in mind, sample mangling via csound like we can do via the CDP tool?

This looks like a real hard gamechanger for my plans. Thank you so much for pointing into this direction. Also it seems very easy to expand the system with own code, even low level c routines from shared objects, which can augment with the whole big library of opcodes already there. Exactly what I was looking for all the time.

You’re welcome and glad to hear it. I too think the potential is huge. :slight_smile:

Was it that what you had in mind, sample mangling via csound like we can do via the CDP tool?

I’d like to see “real time” mangling if it is possible as we’ve got static processing through CDP already. I’ve been experimenting with the Cabbage vst versions in real time fashion, using samples for the source and it seems to work a treat. My ideal would be to see Csound coupled with Viewbuilder controls and running in Renoise in real time with a native “look and feel” as we do with other tools or instruments. I really like the Viewbuilder motif. :slight_smile:

But, I’ll be the first to admit that my lua-fu is weak (I had to dig out my Programming in Lua book … ) and I haven’t had enough time learning the Renoise Lua implementation to be informed of what will and won’t work. :unsure: I hope the idea is realistic, but as they say, the devils in the details. I think a proof of concept would be useful too.

Right now my interest lies in how LuaJIT, which is used in both Renoise and Csound, will work in this case. I’ve no previous experience with it so I don’t know if there might be issues. However, I’m game to give it a go and would certainly welcome any information from those who have more experience with Lua in Renoise.

Cheers.

Not sure if I understood what your idea exactly is? You wish to kind of do what the the cabbage editors do (creating csound powered vst plugins with custom GUIs via a graphical interface), but as a renoise native tool? Other ways I couldn’t think of right now. Renoise only supports VST (and other similar) plugins for extending dsp, apart from the offline sample manipulation that tools like the CDP tool do. And VSTs won’t have access to the internal gui code - that you only have access from renoise lua tools, which then again can’t do realtime DSP like VSTs.

Idk how much sense this would make, I rather see potential in creating VSTs from cabbage externally, and then just using them in renoise. You must see that cabbage is just a moderately simple tool using the Csound api (and others) to simplify VST creation, and it also offers some juce based gui elements and a simple scripting and drag&drop tool to create them. But as far as I see (I could be wrong, though), cabbage isn’t a library or so, but a program (or rather - two programs, cabbage itself and the “host”), so you’d have to shred cabbage into parts (it is written in c++ I think), and then import those into a renoise lua tool. Would be kind of cool, but very impractical and redundant imho, and lots of lots of lots of work.

Maybe it would be possible to create a little “helper” in renoise/lua that will kind of organise your cabbage/csound plugins on per song basis, and automate compiling and loading the VSTs as well as keeping their sources around the song and launching the cabbage editors for creating/debuggin plugins. You could also try to develop juce gui widgets for cabbage that kind of try to look like the renoise native ones, and maybe transfer theme settings, so the resulting VSTs can be designed to kind of look more like the renoise gui. But this is just a fancy imho, and juce gui elements are coded in C++ and not lua I believe.

You wish to kind of do what the the cabbage editors do (creating csound powered vst plugins with custom GUIs via a graphical interface), but as a renoise native tool?

Yep, I thought it might be interesting to create tool and instrument interfaces to Csound as “native” Renoise.

[EDIT] After reading Neurogami’s post below, it looks like what I envisioned works already to some degree. I’m going to check out some of the other examples and see how well the parameters map to Viewbuilder widgets.

Cheers.

Poked around a bit to see what this was. Found it easy to take one of the example effect csd files and export it as VST (the pitch-shifting demo) and then use it in Renoise. Very cool.

I then tried to follow the docs to create an effect (the reverb example) but it didn’t work. No output. After some hacking about I was able to change the code to get it working in Renoise. (It was how the CsScore section defines instrument behavior, but I really couldn’t tell you what had to change and why, only that I copied stuff from the working Pitch Shifter demo code and played around some.)

The reverb example has three params, and these show up in the fx’s panel when added to a track. You can also pop up the external editor to see the Cabbage GUI for these params but you don’t have to do this to use it. 9I don’t know how well this works if you use other GUI widgets, but the Cabbage rslider widgets just appear in the default panel as sliders, though they appear as rotator things in the external GUI.

And the params can be automated. Very cool indeed.

(I mention this last part because I’ve a few 3rd-party VST and they don’t all expose their parameters quite so nicely; you have to use the external editor to set them.)

Yep watch out what the tutorials or examples are geared for. Csound is originally an antique egghead beast, and the score seemed initially to be there to actually compose music with it, and many examples feature some sort of melody or sound fx making via this. When doing cabbage vsts you have a different context and you will need to make your modules run all the time with the “i” score codes (most cabbage examples seem to do 606024*7 seconds, meaning if you run that vst for more than a week through it will stop working… :smashed:) - or understanding midi triggering of modules if you use instruments, and depend on the f0 code to let the setup be active.

this looks really cool, thanks for sharing!

I’m messing with this… found it a few days ago.
Seems to work well with renoise. Having some growing pains migrating csoundexamples to real-time vst’s, but nothing unmanageable.

If I want to programmaticallygenerate a score… its seems this isn’t the tool for it… and I best to learn the LUA interface of renoise?

you were rather looking for this: http://www.renoise.com/tools/xstream ?

Yesterday I installed CSound on my Win10 laptop. Today I went to open a Renoise song and all of my tools failed to load. The error message included references to the CSound install dir. WTF, I thought.

CSound adds some env var, including two related to lua. LUA_PATH and LIA_CPATH. I’m guessing Renoise (or it’s bundled lua interpreter) looks at one or both of these.

I deleted those vars and after that my tools loaded fine. I think the trouble was related to my tools including a file called Utilities.lua though I don’t know why that naming would break stuff.

Yesterday I installed CSound on my Win10 laptop. Today I went to open a Renoise song and all of my tools failed to load. The error message included references to the CSound install dir. WTF, I thought.

CSound adds some env var, including two related to lua. LUA_PATH and LIA_CPATH. I’m guessing Renoise (or it’s bundled lua interpreter) looks at one or both of these.

I deleted those vars and after that my tools loaded fine. I think the trouble was related to my tools including a file called Utilities.lua though I don’t know why that naming would break stuff.

Hey thanks for mentioning that. I just had the same problem and didn’t even think about csound being the problem. Saved me some time.

csound installation was a bit weird anyway. Also I can’t start csoundqt because of missing dlls and stuff, although I think I have everything required installed. Gonna give cabbage a try.

Hi everybody !

About Csound and Renoise, i was wondering. I’ve been using Csound for a few months, and i know renoise since a couple of years.

I’m really interessed about both.

I would like to do something to write some Csound score using the wonderful tracker interface of renoise.

But i think i would need to create some scripting tools for this. The different things i would need are :

-Build a kind of “different track” with a note note editor like the tracker one in Renoise - but replacing the habitual values “C-3 01 Vol Pan Dly FX”, with the variables corresponding to the “p-values” of the Csound Score.

-This particular track would need to send data to a Csound score

-Then get the audio from Csound into the track

Maybe, using Cabbage, it could be reduced to simply create the track, and use the cabbage Vst as an instrument.

But, creating a track with new variables seems necessary, because there are some instruments in Csound playing with 5, 7, 10, or more variables “p”.

Exemple of the Csound score:

i (inst num)-1 (startdate)-0 (duration)-5 p4 p5 p6

Of course, start date and duration could be defined with the Renoise timing system (with line and note delay). But in Csound, p4, p5, p6 are assignable to anything ; i mean, p4 could be the pitch defined between 0 127, but also the distortion rate between 0 and 1.

Do you think it would be possible, using the scripting tools of renoise, to create such an adaptative track, with any number of variables (of any type and range) per note column ?

Thanking you in advance

Stakov

It’s a bit hit and miss when exporting as a vst

Some instrument work , other don’t …gui always shows up

Haven’t been able to succesfully export a cabbage effect as a vst .

p.s.exported dll’s all reside in a seperate folder

Am I the only one here having issues ?