The CREATE Signal Library (CSL) Project
CSL Downloads
Project Description
Executive Summary
The CREATE
Signal Library (CSL) is a portable general-purpose software framework
for sound synthesis and digital audio signal processing. It is
implemented as a C++ class library to be used as a stand-alone
synthesis server, or embedded as a library into other programs. This
document describes the overall design of CSL and gives a series of
progressive code examples.
Introduction
This document describes the CREATE Signal Library (CSL), a flexible,
portable, and scalable software framework for sound synthesis and
digital signal processing. The following sections describe the basic
system requirements and present the current design and its
implementation, giving extensive code examples along the way.
The initial design of CSL dates back to 1998, but the current
implementation was undertaken by students in the MAT 240D Sound
Synthesis Techniques course at UCSB in the Spring of 2002. A simple C++
implementation of a sound synthesis framework (in less than 1000 lines)
was introduced at the start of the class, and during the quarter the
students added a large number of synthesis classes (refining the basic
framework significantly as they went).
CSL is now an open source project; the current source code and
documentation can be retrieved over the Internet from the CREATE FTP
site at ftp.create.ucsb.edu/pub/CSL.
What CSL is
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 (Pope).
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. A typical
large-scale CSL configuration is illustrated in the figure below.
In this configuration example, each of the round-edged rectangles is a
separate server program (which might all be running on different
machines). The top four servers are CSL programs; the larger box in the
middle is the CREATE Distributed Processing Environment (DPE, [Pope and
Engberg]) manager, and the server at the bottom captures and maps user
input (e.g., from instrumental performers).
The control links (shown as dotted lines) use the Common Object Request
Broker Architecture (CORBA [OMG]) and Open Sound Control (OSC [Wright
and
Freed]) protocols, and the inter-program sample streams (drawn as
arrows)
use the CSL sample block protocol. The Distributed Processing
Environment
manages the distributed CSL application, starts up the individual CSL
servers,
and routes control messages coming from the gestural input devices to
the
appropriate server.
What CSL is not
CSL is not a music-specific programming language such as Music-N or
SuperCollider (McCartney); rather, CSL programs (i.e., CSL-based
servers) are written in C++ and compiled with the CSL library. CSL has
no graphical user interface (as in Max [Puckette] or Kyma [Scaletti]),
but it is expected that GUIs will be built that manipulate “patches”
and “scores” for CSL. CSL is not a music representation language such
as Smoke (Pope), rather it is a low-level synthesis and processing
engine. CSL has no scheduler, it simply responds to in-coming control
messages (received, e.g., via MIDI or OSC) as fast as it can.
This flexibility means, however, that CSL can serve a number of
different purposes, from being used as a plug-in library for other
applications to serving
as the basis of synthesis servers for other front-end languages, such
as
MPEG4/SAOL.
For more information, please contact Stephen Pope.