ï~~Proceedings of the International Computer Music Conference (ICMC 2009), Montreal, Canada
August 16-21, 2009
SOUNDCIPHER: A MUSIC AND SOUND LIBRARY FOR PROCESSING
Andrew R. Brown
Queensland University of Technology,
Creative Industries Faculty
ABSTRACT
SoundCipher is a software library written in the Java
language that adds important music and sound features to
the Processing environment that is widely used by media
artists and otherwise has an orientation toward
computational graphics. This article introduces the
SoundCipher library and its features, describes its
influences and design intentions, and positions it within the
field of computer music programming tools. SoundCipher
enables the rich history of algorithmic music techniques to
be accessible within one of today's most popular media art
platforms. It also provides an accessible means for learning
to create algorithmic music and sound programs.
1. INTRODUCTION
SoundCipher is a Java software library that facilitates the
integration of music and sound into media art works
created with Processing [1]. It is built on top of the
JavaSound API and provides an easy-to-use interface to
many of the features of JavaSound and presents them in a
style sympathetic to the conventions of Processing.
Processing is a Java programming environment that
provides infrastructure and functionality allowing users,
typically media artists, to focus on the core algorithms of
their work while hiding some technical details, such as
animation threads and class instantiation.
The SoundCipher library augments Processing with
music and sound extensions that provide structures and
functions to support algorithmic composition. There were a
number of design goals for the SoundCipher library
including simplicity, familiarity, extendibility, ease of
learning, and real-time interaction. The remainder of this
section will outline these design decisions in more detail.
Many of the design decisions were taken to facilitate
ease of use for Processing users. As a result, SoundCipher
commands are relatively abstract compared to the
underlying JavaSound interface upon which they are
primarily built. For example, the function playNote ()
encapsulates the process of creating two musical events,
within a track, within a sequence, and within a sequencer.
The size of the library is intentionally small to minimize
potential confusion and distraction. For example, there are
only two classes that can be instantiated, the
SoundCipher and SCScore classes. The 'style' of
SoundCipher syntax generally conforms to the
programming conventions of Processing, which differ
from those often found in Java. An example of this is the
use of public, rather than private, class variables and
unconventional accessor method conventions. Processing
uses direct accessing of variable values and the absence of
'set' as a preface to setter methods.
Given that novice programmers, who may already have
more musical than computing background, may use
SoundCipher, the library uses familiar musical terms and
metaphors where possible. This is intended to provide an
infrastructure to support 'musical' thinking. The library
has a sound-event orientation using conventional terms
that result in functions, such as playNote (),
addChord (), tempo (), and instrument () while
the main container for these events and parameters is a
'score'. Temporal organization is calculated using musical
units of beats and speed is set in beats per minute.
Like most programming libraries SoundCipher allows
users to extend its functionality. In particular, however,
SoundCipher has been designed to integrate external
interaction via MIDI and to support relevant Processing
libraries for audio signal processing and OSC
communications. Specifically, the SoundCipher scheduling
system can be used to synchronize these and any drawing
or animation functions to musical time independent of
Processing's frame rate.
As well as supporting the production of audio-visual
media art works, the SoundCipher library was conceived
as a tool for learning about algorithmic music. The ease of
use of both Processing and SoundCipher make media
programming accessible to novice users. There is also a
commitment to tutorial support that goes beyond
describing how the library works, to include introductions
to algorithmic music concepts and techniques.
While Processing, and the Java language more
generally, are not completely dynamic (programs require
compiling) there is still an emphasis in Processing on realtime processes, such as animation, to create interactive
media art. SoundCipher supports real-time generation,
interaction, and dynamic change at runtime, by supporting
responsive and efficient event processing with the
playXXX() commands for notes, phrases, chords, and
audio files. The SoundCipher scheduler in the SCScore
431