Friday at the 2009 JavaOne conference capped an intense week of technical sessions and socializing. I thought I'd have some fun and find out what Javophiles are doing in the world of the arts -- in particular, making music. Frank D. Greco, familiar to the Java community (he is active in NYJavaSIG) and a long-time musician, led a panel discussion on making music with Java, PAN-5388.
Timing is an important factor in music -- perhaps the most important factor. Prgramming for real-time execution is always a challenge, more so when a virtual machine lies between your code and the hardware that produces sound. And then there's the little issue of garbage collection. It was impressive to learn about the libraries, APIs, and applications that the panel members helped create for composing and performing music both traditional and experimental.
Music From Down Under
Andrew R. Brown of Queensland University of Technology went first, demonstrating Jmusic (http://jmusic.ci.qut.edu.au/) and SoundCipher (http://soundcipher.org/).
Before he got started, Brown gave us an historical tidbit about the 1950's era computer SCIRAC, which made a clicking sound on an attached speaker when it encountered programming errors. Programmers discovered that by changing the pace of the error messages they generated, they could use SCIRAC to produce musical pitches. And so computational electronic music was born. In Australia, no less. Who knew?
jMusic is a music composition library, written in Java. The use of Java was motivated by the fact that much of the programming was to be done by music students, not computer science majors. Java, even in its 1.0 version, was safer and in many ways easier to use than alternatives. Java Sound libraries, which made programming for music much easier, were not introduced until Java 1.3. The jMusic project went public in 1998.
The intent with jMusic was to do things with music that couldn't be done with acoustic instruments. Brown showed one program written with the library, Melodic Extension, that analyzes a musical phrase and generates an extension, using compositional rules to develop a theme from the phrase. It is designed to provide support and inspiration to those learning the art of melody writing.
Brown wrote another library, SoundCipher (http://soundcipher.org/), that provides an easy way to create music in the Processing development environment. Processing is an open-source programming language and environment for people who want to program images, animation, and interactions. He demonstrated SoundCipher with a program that combined generated music with sounds synchronized with objects moving on the screen.
Brown's most impressive demo was a music generator that uses Hindemith-inspired harmonic theory. Synching to video is accomplished by laying out a timeline of contol envelopes that dynamically determine parameters of the compositional and performance elements of the music.
Bouyed Up By Water Music
Next, Nick Didkovsky, of Columbia University, demonstrated JMSL (http://www.algomusic.com/jmsl/). JMSL is a Java API for music composition, interactive performance, and intelligent instrument design. With JMSL, the composer-programmer can create standalone musical applications or deploy applets on the web.
Didkovsky demonstrated the JMSL API with an electronic instrument he called the Liminophone. The Liminophone syncs with coastal data from the buoys around urban waterfronts, generating algorithmic real-time compositions. Each buoy becomes a polyphonic instrument, with a character that changes with very subtle fluctuations every six minutes. He demonstrated the program with real-time data logged by bouys around the New York City harbor.
Java Meets Jazz
Robert M. Keller, of Harvey Mudd College, then described his Java Meets Jazz academic program. The centerpiece was Impro-Visor (http://www.cs.hmc.edu/~keller/jazz/improvisor/), a music notation program designed to help jazz musicians compose and hear solos similar to those that might be improvised. The objective is to improve understanding of solo construction and chord changes in the jazz idiom. Keller and his collaborators make use of the jMusic library in their work.
Learning To Be a Hero on Guitar
Before the panel took questions, Mat Warman demonstrated JFrets (https://jfrets.dev.java.net/), an interactive guitar teaching and tabbing tool that he uses with his guitar students. It replaces paper for looking up fingering positions for the chords and lets students do their fingering exercises more easily.
It was great to hear from Java programmers who are using Java to help give free reign to their imaginations -- and to help free up the imaginations of the rest of us!
Related Posting
Listening to Your App <http://blogs.sun.com/javaone2009/entry/listening_to_your_app>