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