The Siren Music and Sound Package in Smalltalk

### What is Siren?

The Siren system is an open-source general-purpose software framework for sound and music composition and production; it is a collection of about 375 classes written in the Smalltalk programming language and intended for use with for the VisualWorks Smalltalk system. Siren includes cross-platform support for MIDI and audio I/O; the source code and documentation files are all available via the down-load links below.

There are several elements to Siren:

- the Smoke music representation language (music magnitudes, events, generators, functions, and sounds);
- voices, schedulers and I/O drivers (real-time and file-based voices, sound and MIDI I/O);
- user interface components for musical applications (UI tools and widgets);
- several built-in applications (editors and browsers for Siren objects);
- interfaces to external C or C++ code for audio/MIDI streaming I/O, and analysis/synthesis packages such as CSL and Loris

The relationships between the Smoke language kernel and the various higher-level musical objects, drivers, and GUI tools, is shown below.

### What do the Siren GUI applications look like?

There are screen shots of the Siren GUIs here, and an older (1998) version here.

### OK, but what does it sound like?

There are excerpts of my pieces on the web (also in MP3 format) here and here at HeavenEverywhere.
You might also want to watch the 15-minute audio/visual sampler movie.

### What's New?

Siren 9.0 is available on the VisualWorks parcel manager or here (see below) or on github.
Many parts of Siren were upgraded, enhanced, or rewritten for the 7.5 release. All of the external interfaces (e.g., for sound I/O, MIDI, FFTW, and other external libraries) have been rewritten to be more portable and robust. The entire EventScheduler has been updated, and there are several new packages, such as the CSL and Loris application packages.
In addition to this, Francois Pachet's pitch class framework was ported from his MusEs system. The support for OpenSoundControl has been updated and improved, so that Siren can serve as an OSC-generating client for servers written in several languages, such as CSL and SuperCollider.
Two new tools - the SirenUtility and the SirenTransport - have been added to assist users with general environment maintenance and with session state, and data persistency has been incorporated into the SirenSession class.
Lastly, the documentation, including the web pages, the on-line Siren workbook, and the complete reference manual, have been greatly enhanced in Siren 7.5.

### What files are there to down-load?

> 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: ST source parcels, virtual image, docs, demo data, external interfaces (May, 2020)
> - Siren7.5.zip The Siren 7.5 release: ST source parcels, virtual image, docs, demo data, external interfaces (May, 2007)
> - Support Library Sources LibSndFile, PortAudio, PortMIDI, FFTW, etc. with compiled binaries for several platforms
> - 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)

### What Documentation is there?

- Updated: Siren_Workbook.html -- The on-line doc and demo outline, also available as a 50-page PDF file or as a single large web page (RTFM).
- New: The Siren Demo Video -- A 55-minute 1024*768-pixel QuickTime movie demonstration in lo-quality (94 MB) and hi-quality (240 MB) versions
- New: ICMC 2007 Paper on Siren 7.5 Updates
- New: ICMC 2007 Paper on Scripting and Tools for Digital Audio
- Squeak Book Chapter -- In-depth introduction to Smoke and Siren as PDF
- Siren Reference Manual -- Exhaustive class reference as HTML or PDF files
- 2003 ICMC Paper -- A brief update on recent (2003) work in Siren.
- Siren.GUI.Tour.html -- A web-based tour of the Siren user interface tools (old and new versions available).
- Siren.OOPSLA98.paper.pdf -- A short paper describing Siren from the 1998 ACM OOPSLA conference.
- Siren.OOPSLA98.slides.pdf -- Presentation slides from the Siren talk at the 1998 OOPSLA conference.

The Siren mailing list is here.

The Siren home page is at FASTLabInc.com.

There are several on-line Smalltalk tutorials, just ask Google, or down-load the Squeak CD-ROM, which has an excellent reference library on it, 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.

Other references to related software can be found in Stephen Pope's publication list.

### External Library Interfaces

> To make full use of the Smalltalk code, there are several external packages that use DLLCC 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.
> To install these, download and install the required packages, then look in the DLLCC folder and run the makefile there for each target library. The links for these are,
> - libsndfile - http://www.zip.com.au/~erikd/libsndfile
> - portmidi - http://www-2.cs.cmu.edu/~music/portmusic
> - portaudio - http://www.portaudio.com
> - fftw - http://www.fftw.org
> The experimental SWIG interfaces are in the folders SWIG_Loris and SWIG_CSL; to use them, you need,
> - Loris - http://sourceforge.net/projects/loris
> and/or
> - CSL - http://create.ucsb.edu/CSL
> Look in the workbook SWIG page for further instructions.

### Building Siren

> To build Siren, you start with a 7.5 VisualWorks Smalltalk virtual image and load the following packages from the release file set,
> - Store/PostgreSQL
> - BOSS
> - DLLCC
> - Advanced Tools
> - HTTP
> - XMLTools
> - ComposedTextEditor
> Then, in a Store browser, on the Cincom public repository, load SmaCC* and SWIG before loading the Siren package.
> 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.
> Sound file read/write -- libSndFile -- see http://www.mega-nerd.com/libsndfile
> Streaming MIDI I/O -- PortMidi -- see http://www.cs.cmu.edu/~music/portmusic
> Streaming sound I/O -- PortAudio -- see http://www.portaudio.com
> Fast Fourier Transform -- FFTW -- see http://fftw.org
> 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 at CREATE; look at http://FASTLabInc.com/CSL.
> To get Loris, http://sourceforge.net/projects/loris
> To get CSL, http://FASTLabInc.com/CSL

### What is the Difference between the MODE and Siren?

> 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.

### Where's More Documentation?

> 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://www.create.ucsb.edu/~stp/publ.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).

### History

> 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).
> 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.

Created: 1997.11.08; LastEditDate: 2007.05.20