On Linux and Windows the patch is simply saved as a .csd file with the
same name as the plugin library. When the plugin loads it loads the
Csound file too. On OSX I can bundle the csd into the app so that it's
completely self-contained. I can do this also on windows and linux but
for now it's just as easy to keep it the way it is. I might look to
change it in the future so all platforms are the same.
> - how does the gui get generated? does it use a specific toolkit? Can one do
> this kind of thing with any toolkit? Your gui parser is very impressive! ( I
> know, look in the code! hoping for an easier answer. ;-)
I use Juce as my main GUI toolkit, but before that I did a similar
thing with wxWidgets, and before that using Borland VCL classes.
Because the Csound API has so many interfaces it's possible to do
these things with lots of different languages. My GUI parser is no
great shakes, but it's easy to expand and maintain. Because the syntax
is so simple I can stay away from having to use dedicated parsing
libraries.
> - is it feasible to have cabbage instruments receive more than midi data?
> (ie would it be possible given more hacking, not do you personally plan on
> making it possible.)
Considering that Csound can do this already then the answer is yes,
and without too much hassle perhaps. One could create several Cabbage
plugins that could speak to each other using OSC messages. On top of
this we could check is plugins inside one host can speak to other
plugins open in other hosts. Hmmm. Interesting idea. It should already
be possible thanks to Csound.
> Does that question even make sense in the VST paradigm? IE is there any
> kind of way of having something that is running as a vst plugin receive OSC
> controls, or receive input from apps *other* than the VST host? (I'm new to
> the whole VST idea as you are probably noticing!) I guess it seems to me
> like the limitation of a vst instrument is that it's only getting control
> data from one track in a host, but maybe there are options in that area?
I don't see why not. OSC sends message over a network so any program
that can receive/send those messages can communicate with the program
sending them.
> My own project is a live step sequencer and looper using jack and QT. It
> was, years ago, a whole live rig done entirely in Csound, which was
> ridiculous, but that's how I started. Now I'm redoing it in C++, with the
> intention that it will be usable as an expert oriented way to do group
> improvisation of electronic music, and be able to emulate control volt
> sequencing of modulars. I'm planning on a flexible output layer allowing
> sequence data to be arbitrary bit depth and resolution, so that it can go
> out to midi based instruments, csound score instruments, PD patches,
> supercollider, etc. Given your work, I'm thinking perhaps it needs to either
> be a vst host, or needs to be able to communicate to a vst host well.
With OSC it should be able to speak with a host through a plugin. And
it needn't be one you build yourself, I'm sure there are OSC plugins
that let you send data to them?
> Any suggestions for how/where to get up to speed on VST coding welcome!
There is a section about VST programming in the Audio Programming
Book. You can also check out the Juce library. It's quite a beast. I
think it's by far the easiest way to get into programming plugins. It
builds right out of the box, so long as you point towards your vst sdk
folder. If you don't wish to go down that route there is also the
actual vst sdk itself, but Juce is totally cross platform and you can
use the same code to generate VSTs, AU, Linux VST, RTAS etc. Check it
out. In the meantime I hope to have an OSX beta release for you
shortly. Maybe you can realise your project using Cabbage? We're
currently working on a new table widget that should make it child's
play to create a fully functional step sequencers.
Rory.
> - when one uses cabbage generated plugins, how does a patch get saved? In aOn Linux and Windows the patch is simply saved as a .csd file with the
> VST environment, is that entirely up to the host? and can hosts save cabbage
> gui settings?
same name as the plugin library. When the plugin loads it loads the
Csound file too. On OSX I can bundle the csd into the app so that it's
completely self-contained. I can do this also on windows and linux but
for now it's just as easy to keep it the way it is. I might look to
change it in the future so all platforms are the same.
> - how does the gui get generated? does it use a specific toolkit? Can one doI use Juce as my main GUI toolkit, but before that I did a similar
> this kind of thing with any toolkit? Your gui parser is very impressive! ( I
> know, look in the code! hoping for an easier answer. ;-)
thing with wxWidgets, and before that using Borland VCL classes.
Because the Csound API has so many interfaces it's possible to do
these things with lots of different languages. My GUI parser is no
great shakes, but it's easy to expand and maintain. Because the syntax
is so simple I can stay away from having to use dedicated parsing
libraries.
> - is it feasible to have cabbage instruments receive more than midi data?Considering that Csound can do this already then the answer is yes,
> (ie would it be possible given more hacking, not do you personally plan on
> making it possible.)
and without too much hassle perhaps. One could create several Cabbage
plugins that could speak to each other using OSC messages. On top of
this we could check is plugins inside one host can speak to other
plugins open in other hosts. Hmmm. Interesting idea. It should already
be possible thanks to Csound.
> My own project is a live step sequencer and looper using jack and QT. ItWith OSC it should be able to speak with a host through a plugin. And
> was, years ago, a whole live rig done entirely in Csound, which was
> ridiculous, but that's how I started. Now I'm redoing it in C++, with the
> intention that it will be usable as an expert oriented way to do group
> improvisation of electronic music, and be able to emulate control volt
> sequencing of modulars. I'm planning on a flexible output layer allowing
> sequence data to be arbitrary bit depth and resolution, so that it can go
> out to midi based instruments, csound score instruments, PD patches,
> supercollider, etc. Given your work, I'm thinking perhaps it needs to either
> be a vst host, or needs to be able to communicate to a vst host well.
it needn't be one you build yourself, I'm sure there are OSC plugins
that let you send data to them?
> Any suggestions for how/where to get up to speed on VST coding welcome!There is a section about VST programming in the Audio Programming
Book. You can also check out the Juce library. It's quite a beast. I
think it's by far the easiest way to get into programming plugins. It
builds right out of the box, so long as you point towards your vst sdk
folder. If you don't wish to go down that route there is also the
actual vst sdk itself, but Juce is totally cross platform and you can
use the same code to generate VSTs, AU, Linux VST, RTAS etc. Check it
out.
In the meantime I hope to have an OSX beta release for you
shortly.
Maybe you can realise your project using Cabbage? We're
currently working on a new table widget that should make it child's
play to create a fully functional step sequencers.
That's all saved in the host through automation pre-sets. All GUI
controls in Cabbage can be controlled directly with the host.
QT is a great toolkit, as is wxWidgets. I can see peoples issues with
Juce but for me the pros out-way the cons. I'll keep you posted on OSX
beta.
Rory.
> Hey Rory, I actually meant the state of the widgets. To me, I think of theThat's all saved in the host through automation pre-sets. All GUI
> csound file as the synth, and the state of the controllable inputs as a
> patch, as in what would be a patch on an analog or modular. Do those get
> saved? Is that something that is normally the responsibility of the VST
> plugin or the host?
controls in Cabbage can be controlled directly with the host.
QT is a great toolkit, as is wxWidgets. I can see peoples issues with
Juce but for me the pros out-way the cons. I'll keep you posted on OSX
beta.