ï~~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
Top of page Top of page