CREATE Logo

The CREATE Signal Library (CSL) Project

CSL Downloads


Project Description

Executive Summary

CSL patch diagram 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 classes 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.

Return to CREATE Home