![]() |
![]() |

CSL 5.2 is now available as an SVN check-out (use the shell command svn co https://svn.mat.ucsb.edu/svn/CSL). This adds support for newer JUCE releases (i.e., it doesn't require a patched JUCE library as before), but it requires LibSndFile (http://www.mega-nerd.com/libsndfile) for sound file I/O.
This version also uses the IntroJucer app to generate build projects or Makefiles, so users are expected to be able to build and use the JUCE tools. To use this, look in the CSL_JUCE folder in the distribution.
The main addition is support for MP4 and FAAD files via the libMAD and libFAAD libraries (not included in the simplest JUCE build). There are also a whole raft of fixes and tune-ups...
Get the CSL 5.2 Src ZIP file (78 MB)
Get the CSL DataZIP (200 MB)
"The CSL Show" Screencasts
Show 1: A Tour of CSL (22 min, 108 MB)
Show 2: CSL App Slide Show (4:20 min, 17 MB)
Show 3: CSL Internals, Programming (19 min, 92 MB)
System Requirements
We have a new VisualStudio project for CSL 5.0 that uses JUCE 1.50 to build on MS-Windows XP and Vista. It requires that JUCE and the DirectX9 SDKs be installed. Here's a screen shot of the CSL_JUCE 5.0 demo running (with audio) on XP.

To access the CSL subversion (svn) code repository at the Media Arts & Technology (MAT) servers at the University of California, Santa Barbara (UCSB), use any SVN client or shell terminal and enter the command,
svn co https://svn.mat.ucsb.edu/svn/CSL
to down-load the latest CSL source, doc, and Mac/Linux/Windows build projects to your machine.
You can also browse the whole file tree on-line as,
See, e.g.,
https://svn.mat.ucsb.edu/svn/CSL/README
Note that the repository does not include the CSL Data directory or the patched JUCE library.
|
![]() |

Documentation
- ICMC 2006 CSL 4.0 Metamodel Paper
- CSL Presentation Slides (good quick intro and examples)
- ICMC 2003 CSL 3 Paper (the best general reference to CSL)
- CSL "Manual" (obsolete but still useful)
- Doxygen on-line API manual for CSL 5
- Get API doc (ZIP file of the Doxygen HTML pages)
- CSL mailing list admin page
- For more examples of CSL applications, see here
Source/Data/Doc ZIP files
- CSL current 5.0x source ZIP file
- CSL Doc (9 MB PDF & Doxygen files)
- CSL Test Data (99 MB snd files, HRTF data, etc.)
- CSL "old" code (somewhat stale or unsupported apps)
Support Libraries
- CSL 5.0 extensions to JUCE 1.50 (added methods for sound file I/O; un-tar this file in the base JUCE folder)
- CSL support libraries (PortAudio, PortMIDI, LibSndFile, FFTW, etc.) ZIP file with binaries for Intel/Mac (not needed for CSL 5.0)
Related Packages
- Chandrasekhar Ramakrishnan's Occam (OSC-to-MIDI)
- Garry Kling's Macco (MIDI-to-OSC)
- GestureSensor drivers: EBeam, FlockOfBirds, P5 Glove, DataGlove, Matrix, etc. (C++ for MS-Windows)
Project Description CSL is a simple yet powerful library of sound synthesis and signal processing functions. It is packaged as an object-oriented class hierarchy for standard DSP and computer music techniques, and is suitable for integration into existing applications, or use as a stand-alone synthesis/processing server. CSL is similar to the JSyn (Burke), CommonLispMusic (Schottstaedt), STK (Cook), and Cmix (Lansky) frameworks in that it is integrated as a library into a general-purpose programming language, rather than being a separate “sound compiler” as in the Music-N family of languages (CMJ tutorial on sound compilers). CSL is designed from the ground up to be used in distributed systems, with several CSL programs running as servers on a local-area network. These CSL DSP servers receive control commands via the network and send their output sample blocks to other servers over the network.
CSL supports the following synthesis/interaction techniques
|
In contrast to the traditional MusicN stand-alone sound compiler, CSL is packaged as a class library in a general-purpose programming language (C++). The simplest CSL program is a 5-line main() function in a simple C program, and it is intended that CSL can be used in several ways, including for the development of stand-alone interactive (MIDIor OSC-driven) sound synthesis programs, serving as a plugin library for other applications or plug-in hosts, or as a back-end DSP library for programs written in scripting languages. CSL is designed from the ground up to be used in distributed systems, where networks of CSL programs run as servers on a local-area network, streaming control commands (MIDI and OSC) and sample buffers (RTP) between them.
// This is a simple 2-envelope FM program -- paste this into a main() function
float frq = 440.0f; // float values for freq and dur
float dur = 0.25f;
IO theIO; // create an IO object
Sine car, mod(frq); // create 2 oscillators: carrier and modulator
// amplitude env = std ADSR
ADSR a_env(dur, 0.1, 0.1, (dur - 0.6), 1);
// index env = time/value breakpoints
Envelope i_env(dur, 0, 0, 0.1, 2, 0.2, 1, 2.2, 8, dur, 0);
a_env.setScale(0.2); // make ampl envelope quieter
i_env.setScale(frq * 3.0f); // multiply index envelope by mod freq * 3 (index depth)
mod.setScale(i_env); // scale the modulator by its envelope
mod.setOffset(frq); // add in the base freq
car.setFrequency(mod); // set the carrier's frequency
car.setScale(a_env); // scale the carrier's output by the amplitude envelope
logMsg("CSL playing FM..."); // print a message and play
theIO.setRoot(car); // set the IO's root to be the FM carrier
theIO.open(); // open the IO
theIO.start(); // start the driver callbacks and it plays!
a_env.trigger(); // reset the envelopes to time 0
i_env.trigger();
sleepSec(dur + 0.25); // sleep for dur plus a bit
logMsg("CSL done.");
theIO.stop(); // stop the driver and close down
theIO.close();
We assume CSL users are proficient C++ programmers and know the native development environment of their platform.
Down-load and unpack JUCE V 1.50 and compile its base library.
Down-load and unpack CSL 5.0 and read the documentation. CSL assumes it's
installed in the folder ~/Code/CSL; there are some default settings in
CSL/Kernel/CSL_Types.h that have to be changed if you put it somewhere
else. The system assumes JUCE is in ~/Code/juce (../juce from the root of
the CSL hierarchy).
The best way to get started is to look at the Doxygen-generated API
documentation in
Doc/html.zip
You can untar this file to get the full HTML doc and to print out and
study the files
CSL/Kernel/CSL_Types.h (note the system
defaults here)
CSL/Kernel/CSL_Core.h (the kernel
classes are here)
and
CSL/Sources/SimpleSines.{h,cpp} (this
is a tutorial for writing unit generators)
To compile the sources, you may need to create the links in the
CSL/Includes folder; to do this, open a UNIX shell (AKA terminal) and
execute the commands,
### change to the Includes folder
cd CSL/CSL/Includes
### make symbolic links from the
include files to this folder
ln -s ../*/*.h .
ln -s ../Spatializers/*/*.h .
Now, you should be able to use the Mac XCode project in JUCE, the premake script and makefile in Linux, or to build an Eclipse project on Windows. The supplied VisualStudio projects are known to produce errors because of CSL's non-Windows-compatible header and code.
Once you have the development environment set up, build the JUCE demo GUI
(shown in the figures above). This app has 2 menus at the bottom of the
pane to select a test suite and a specific test, and a play/stop button
next to these menus. The source code for the tests is in the folder
CSL/Tests; the list of tests is included below.
The source code for all these tests is in the CSL/Tests directory (and
file group in the IDE); it's a good way to learn CSL to run the JUCE demo
in an XCode/Eclipse debugger and set breakpoints in the test functions
while using the GUI.
For more information, please contact Stephen Pope [stephen (at) FASTLabInc.com] or join the CSL mailing list .