Java Music Specification Language, an introduction and
overview
Nick Didkovsky, Philip L. Burk
email: didkovn@mail.rockefeller.edu, philburk@softsynth.com
www.algomusic.com
Abstract
Java Music Specification Language (JMSL) is a new Javabased development tool for experiments in algorithmic
composition, live performance, and intelligent instrument
design. JMSL is the evolutionary successor to the
Hierarchical Music Specification Language (Polansky,
Rosenboom, and Burk, 1987). While HMSL was Forthbased, JMSL is written in Java.
JMSL's features include:
* Stylistically neutral core
* Polymorphic hierarchical scheduling
* Device abstraction. JMSL supports Robert
Marsanyi's JavaMIDI, Softsynth's JSyn, MidiShare
(Orlarey and Lequay 1989), and Sun's JavaSound
at a level that hides their implementation.
* An algorithmically extensible common music
notation editor called JScore which features an
algorithmic notation and transformation plugin
API.
* Its Java core. As opposed to a closed system with
a proprietary language, JMSL allows the
programmer to leverage off the vast resources
available to Java developers, including Java's
database connectivity, networking tools, 2D and
3D graphics packages, servlet API, and numerous
third party packages.
* The composer can create stand-alone JMSL
applications or deploy JMSL applets on the web.
* JMSL offers a freely downloadable "Lite" version.
* Runs on Windows, MacIntosh, and Linux platforms
1 Introduction
The goal of the Java Music Specification Language
(JMSL) is to provide an algorithmic music composition and
performance API that is flexible, stylistically neutral, and
portable. To this end, the Java programming language
serves us well. Java is a language that has much to offer
computer music composers including good object oriented
support, extensive auxiliary APIs for networking, graphics
etc., and the ability to run on multiple platforms including
web browsers.
JMSL extends Java with classes for hierarchical
scheduling of composition objects, sequence generators,
distribution functions and other music related tools. JMSL
also features a non-core package called JScore, which is a
programmable music notation editor. JScore supports an
API for adding notes to a score as well as an API to
transform notated musical material.
JMSL's stylistically neutral core, its flexible framework
for hierarchical scheduling and instrument design, and its
ability to notate and transform algorithmically generated
music offers rich new territory for composers to explore.
2 History
The Java Music Specification Language was motivated
by the need for an evolutionary successor to the Hierarchical
Music Specification Language (HMSL). HMSL was
designed and programmed at the Mills College Center for
Contemporary Music by Phil Burk, Larry Polansky, and
David Rosenboom. Some key ideas found in HMSL began
to be ported to the Java programming language by Nick
Didkovsky in 1997.
After the premiere of an interactive piece that served as
a JMSL proof of concept (Didkovsky 1997), JMSL was
both simplified and (r)evolutionized by Phil Burk and
Didkovsky, and taken well beyond a straightforward port of
HMSL.
Didkovsky has taught computer music using JMSL in
his Java Music Systems course at NYU since 1999. JMSL
was officially released in July, 2001, at algomusic.com.
3 The Composable Interface
The notion of hierarchies is a key one in JMSL. A
hierarchy is a network of parent/child relationships. A song
form provides an example, where a parent called mySong
might have four children: versel, chorus, verse2, chorus. In
JMSL, mySong would be a SequentialCollection.
mySong
versel chorus verse2 chorus
0