The Living Thing / Notebooks :

Csound

a less irritating audio programming language

CabbageStudio in action

Cabbage Studio for Csound is an alarmingly modern experience for people used to the classic Supercollider UI, which looks like ERROR: Message 'foo' not understood. RECEIVER: nil. (sic)

Csound is an audio coding language. It is Supercollider’s uncle by marriage. Actively developed. Eccentric. Permissive licensing. Smallish. Clean API. Thus, it works beautifully with other languages, which is very unusual.

Learning resources

There are various books:

Interoperation

c

Check out this minimal invocation of the csound api.

#include "csound.h"
int main(int argc, char **argv)
{
  // Create Csound.
  void *csound = csoundCreate(0);
  // One complete compile/perform cycle.
  int result = csoundCompile(csound, argc, argv);
  if(!result) {
    while(csoundPerformKsmps(csound) == 0){}
    csoundCleanup(csound);
  }
  // Destroy Csound.
  csoundDestroy(csound);
  return result;
}

You’ll need this API capability, because its interactive capabilities are, AFAICT, minimalist; a decent external sequencer is necessary for live work.

Csound committer Michael Gogins has put it to me that javascript is natural for this niche, and indeed, he has written a lot of code to this end.

Examples of various Foreign Function Interface invocations (lua, python, go) are in the manual. There is a repository of such examples, in fact.

python

There are a few confusing options and you have to track the release notes to grok the difference.

I recommend you ignore most of them.

Use ctcsound, which is newer, based on ctypes, and runs in python 3. It is clean and easy. Note you may need to compile the latest version of csound to use it. It includes a port of icsound, which makes things easy.

The older interfaces are installed in an idiosyncratic fashion by the csound installer into the system python 2 packages folder.

  • csnd6, s one such older API, based on SWIG. There is a detailed example in the csound journal.

    • icsound seems to be a higher-level wrapper of csnd6, removing much boring boilerplate such as explicit thread management.
  • CsoundAC embeds csound in python, with much extra C++ wrapper code.

    import CsoundAC
    csound.load("c:/projects/csound5/examples/trapped.csd")
    csound.exportForPerformance()
    csound.perform()
    

    it’s not clear to me yet how good this is for live control.

Moreover, python is, in turn, embedded in csound.

Miscellaneous

  • embeds lua as opcodes

  • embeds faust as opcodes in csound.

  • embeds fluidsynth for soundfont playback

  • Includes a VST generator and IDE, cabbage:

    Cabbage is a Csound frontend that provides users with the means to develop audio plugins and standalone software across the three major operating systems. While Cabbage makes use of underlying plugin technologies such as Steinberg’s VST SDK, ASIO, etc, Csound is used to process all incoming and outgoing audio. Cabbage also provides a growing collection of GUI widgets ranging from simple sliders to automatable XY-pads. All GUI widgets in a Cabbage plugin can be controlled via host automation in a plugin host, thereby providing a quick and effective means of automating Csound instrument parameters in both commercial and non-commercial DAWs.

  • includes a C-compiled Chrome browser version via PNaCl.

  • or you can link it to other things using its API; See the examples.

IDEs, front-ends

There are in fact many frontends.

In addition to Cabbage, mentioned above,

Linkdump

Things I am currently reading: