Siren is an open-source software framework for music composition and production; it is a collection of about 350 classes written in the Smalltalk programming language and is compatible with several of the popular Smalltalk implementations such as Squeak, Cuis and VisualWorks, (with varying supported options, Squeak being the main development platform at present). Siren includes cross-platform support for MIDI, audio and OpenSoundControl I/O; the source code and documentation files are all available via the down-load links below. The source code and pre-compiled Smalltalk virtual images are available from the Siren Github site.
Impatient? Watch the videos!
OK, but what does it sound like?
There are several elements to Siren:
The relationships between the Smoke language kernel and the various higher-level musical objects, drivers, and GUI tools are shown in the figure below; next to it is a code browser showing a Siren example method.
|
|
For Squeak and Cuis, see the Siren Github repository; if you're using VisualWorks Smalltalk, connect to the Cincom public repository table store.cincomsmalltalk.com:5432_store_public and load the newest blessed "Siren" package. The post-build actions will try to down-load and file-in a couple of files off this site. The full release archive files below include the Smalltalk source parcels, doc files, demo workspace contents, sound/score test data, DLLCC external interface C files and makefiles (e.g., PortAudio, Loris), this web site, etc.
Siren_9.0.zip The Siren 9.0 release: VisualWorks source parcels, virtual image, docs, demo data, external interfaces (May, 2020).
See also Siren9 github repo at https://github.com/stpope/Siren9 (most up-to-date)
Siren7.5.zip The Siren 7.5 release: ST source parcels, virtual image, docs, demo data, external interfaces (May, 2007)
Go to Cincom to get the free non-commercial-use version of the VisualWorks release for all platforms
Ancient History
- Siren7.2 The Siren version 7.2 tarball (2003)
- Squeak Siren 3.0 (2000)
- Siren 1.0 for Squeak (1999)
- STP V12 Goodies for Squeak (1999)
- STP V9 Goodies for VisualWorks (1995)
- MODE (1992)
- HSTK (1989)
The Siren home page is at FASTLabInc.com.
There are several on-line Smalltalk tutorials, just ask Google, or go to Stephan Ducasse's free Smalltalk book list, or simply grab the free PDF file of The Art and Science of Smalltalk, by Simon Lewis, Prentice-Hall 1995-1999.
To make full use of the Smalltalk code, there are several external packages that use DLLCC (dynamic-linked library and C connect) C/C++ glue code to access the LibSndFile, PortAudio, PortMIDI, FFTW and OSC libraries; the SWIG-based I/O Interfaces to both CSL (C++ signal synthesis/processing library) and Loris (analysis/resynthesis tool using bandwidth-enhanced partials) provide their own Smalltalk models that mirror the C++ class structure of these packages. The main external library interfaces are:
Sound file read/write -- libSndFile
Streaming MIDI I/O -- PortMidi
Streaming sound I/O -- PortAudio
Fast Fourier Transform -- FFTW
To install these, look in the DLLCC folder and run the makefile there for each target library.
The experimental SWIG interfaces (sadly no longer supported) are in the folders SWIG_Loris and SWIG_CSL; to use them, you need,
and/or
Look in the workbook SWIG page for further instructions.

To build Siren, you start with a 9.0 VisualWorks Smalltalk virtual image and load the following packages from the release file set,
Then, in a Store browser, on the Cincom public repository, load the Siren package.
- Store/PostgreSQL
- BOSS
- DLLCC
- OldBrowsers (included in the VW 8.0 release and on the Siren zip file or github repo).
Siren uses several external interfaces (based on the DLLCC framework or SWIG) for access to external data and I/O. The Smalltalk code for these interfaces is in the category MusicIO-External.
You need to have these libraries installed, and compile and link the C-language interface libraries in the subdirectory DLLCC for sound or MIDI I/O to work with Siren. Binaries are available for Mac OSX. There are pre-compiled versions of the required libraries on the CSL web site; look at http://FASTLabInc.com/CSL.
To get Loris, http://sourceforge.net/projects/loris
To get CSL, http://FASTLabInc.com/CSL
I tend to re-implement my tools every 5 years or so, and to rename them at that time. Since I started using Smalltalk in 1983 (or maybe it was 1984, I can't remember), I've called the tools DoubleTalk, HyperScore ToolKit, MODE, and, now, Siren. Each of these generations reflected my interest at the time, so DoubleTalk included facilities for algorithmic composition using Petri Nets and wrote score files for compilation with cmusic, while the HyperScore ToolKit supported MIDI and focused on real-time interactive composition.The MODE is written for ParcPlace/ObjectShare's VisualWorks/Smalltalk system, and is best suited for algorithmic composition and digital sound file mixing and processing. It was completed in 1992, and has been extended very little since then. It is still available from the CREATE FTP site and works with current VisualWorks systems.
Siren (the name is not an acronym) is written for the VisualWorks Smalltalk system, though the core is portable to other dialects.
Various versions and components of Siren's predecessors (The HyperScore ToolKit and the MODE) are documented in the book "The Well-Tempered Object: Musical Applications of Object-Oriented Software Technology" (S. T. Pope, ed. MIT Press, 1991), in papers in the Proceedings of the 1986, 1987, 1989, 1991, 1992, 1994, 1996, and 1997 International Computer Music Conferences (ICMCs), in an article on the "Interim DynaPiano" in Computer Music Journal 16:3, Fall, 1992 (heartily recommended--it's also on the web), in the book Musical Signal Processing (C. Roads, S. T. Pope, G. DePoli, and A. Piccialli, eds. Swets & Zeitlinger, 1997), and in several documents on the Web page http://heaveneverywhere.com/stp/publs.html. There are more MODE- and Smoke-related documents (including several of the above references) in the directory Doc.The Siren virtual image also includes an "outline" text for a brief introduction to, and self-paced demo of, the system. New users are encouraged to read and experiment with the Siren outline (the text contents of which are also included on the web site).
Siren and its predecessors stem from music systems that I've developed in the process of composing and realizing my music. Of the early ancestors, the MShell (1980-83) was the score processing shell used for "4" (1980-82); ARA (1982-4) was an outgrowth of the Lisp system used for "Bat out of Hell" (1983); the DoubleTalk system (1984-7) was based on the Smalltalk-80-based Petri net editing system used for "Requiem Aeternam dona Eis" (1986); the HyperScore ToolKit's various versions (1986-90) were used (among others) for "Day" (1988), and the MODE (1990-96) was developed to realize "Kombination XI" (1990) and "Paragraph 31: All Gates are Open" (1993).Siren-on-Squeak (1996-2002) was a simple re-implementation of the MODE in the Squeak version of Smalltalk; it added the representations and tools I needed for "Four Magic Sentences" (1998-2000). Siren 7.4 added tools from the realizations of "Eternal Dream" (2002) and "Leur Songe de la Paix" (2003). The newest release incorporates new code from "Jerusalem's Secrets" and "Ora penso invece che il mondo..." (2005-6). More recently, see my film soundtrack "Secrets, Dreams, Faith and Wonder."
In each of these cases, some amount of effort was spent--after the completion of the composition--to make the tools more general-purpose. If Siren works well for other composers, it is because of its idiosyncratic approach, rather than its attempted generality.