Computer Programs
Building stuff is fun

Computer programming is a central aspect of my creative work. For instance, I might write a computer program to help explore a space of musical possibilities, such as the harmonic options available in a particular tuning. Other times, the purpose of a program might be to perform a translation between media: For example, how can the contours of leaves be translated into musical sounds or forms? Or what if we took an impulse response from an economic model and used it as a reverb? (I haven't actually tried that one yet, but I've been thinking about it...) Using a computer, these pipe dreams can be made real, and—if we're persistent and a little lucky—perhaps even interesting.

I'm also fascinated by the possibilities for interactive art that computers offer. Boundaries that were once sharp—such as between composer and performer, between performer and audience, or between instrument and composition—are becoming potentially fuzzier and fuzzier. For instance, is the homepage to this website a composition or an instrument? When you interact with it, are you audience, or performer? Does it matter? I think these are fertile ambiguities.


When I first began creating my own software for music composition, I envisioned tools with sleek user interfaces that I would reuse again and again. Indeed, I made a fair number of these tools (see the "Packaged Programs" below.) However, I generally found myself only using each tool for only one or two pieces before moving on; it turned out that the tools were restrictive as well as enabling, and that their idiosyncrasies lent themselves to specific kinds of pieces.

For this reason, my focus shifted to creating a set of libraries that would be of much broader use. I chose Python as the programming language for these libraries because it is simple to understand, capable of expressing a lot in a few lines of code, and features packages from a wide variety of disciplines. These libraries have now evolved into SCAMP (Suite for Composing Algorithmic Music in Python)

The purpose of SCAMP is to provide a flexible platform for prototyping, connecting the composer to various resources for playback and notation. SCAMP bridges the gap between the continuous timing of synthesis-based frameworks and the discrete timing of notation-based frameworks. The idea is that the composer can quickly audition and iterate over musical ideas based on the sonic result (which operates in continuous time), and then flexibly quantize and export the music in western notation, as both MusicXML and LilyPond. SCAMP also has a flexible clock system capable of coordinating (and nesting) multiple streams of music following independent tempo curves.

SCAMP is published on PyPI, and is a GPL3.0-Licensed Open-Source Library. You can also take a look at the thesis I wrote, which goes into as much detail as you'd ever want to know.

Packaged Programs

Spectral Musical Contour Explorer (2016) uses Fourier Analysis to explore the frequency content of three types of musical information: direct waveforms, pitch contours, and dynamic contours.

The first of these—uncovering the spectra of direct waveforms—is probably the most typical musical use of Fourier Analysis. What's more unusual is the use of Fourier Analysis on abstract parameters like pitch and dynamics. Such an approach can reveal wonderful hidden periodicities in the structure of a musical passage. Along with the demo video above, you can read a more detailed explanation of this technique and its role in my compositional practice here. If you use OSX 10.7 or greater, you can download the program and run it yourself.

Harmonic Visualizer (2015) p erforms an animated visualization of the pitch class content of a loaded midi or music XML file.

The different elements of the program reveal any tendencies toward:

  1. Particular diminished seventh / octatonic collections
  2. Particular augmented triad / whole tone collections
  3. Particular triadic / tonal regions on the circle of fifths

The creation of this program was prompted by the difficulty of analyzing a particular passage from Messian's Turangalila by traditional means. There seemed to be an octatonic feel to the passage, but it appeared to be composed intuitively and lacked sharp harmonic borders. I thought that a statistical approach might be a good representation of the composer's intuition, and so I went about programming one. If you're so inclined, you can read my initial paper, and if you use OSX 10.7 or greater, you can download the program and run it yourself.

Frequency Band Trainer (2015) is an ear training tool rather than a tool for composition, which is used to practice recognizing the ranges of frequency bands in hertz.

I wrote this for myself as I started to branch into electronic music and realized that I needed a completely different set of aural skills from the one I had developed for instrumental music. If you use OSX 10.7 or greater, you can download the program and run it yourself.

inFormant and Timbreland (2016) are two programs that I wrote as part of my qualifying exams in music composition at UCSB.

Both programs are sonifications of diagrams. In the case of "inFormant", this is a diagram of the relationship between the first two formants in various vowels. "Timbreland" sonifies a graph adapted from a paper by Carol Krumhansl, which depicts timbre as a three dimensional space. If you use OSX 10.7 or greater, you can download and run inFormant and Timbreland for yourself.

Ramify (2012) was the first piece of software that I created as a compositional tool. Written in Java, it is essentially an editing environment in which the user creates a network of musical notes and relationships, and the program outputs possible “ramifications” of that network. Ramify was key to the creation of several of my pieces, such as A Social Network and One Wandering Night. Although it is not available for download—and, to be honest, it's not the most user-friendly program ever created—I did made a video demonstration:

I also put together some written documentation for the program.