Here I have listed/linked the source code for software I have
written. I'm certain that a lot is missing, and most of it is
completely undocumented. A fair amount of the code represents
my first attempt at using different languages, concepts, toolkits,
interfaces, etc., so if you are a real live programmer-person
try not to laugh too hard at my bizarro coding. At least I was
able to get the machines to do what I wanted... pretty much.
Bear in mind that much of the code is probably now obsolete.
Software tends to have a short shelf-life.
This page is divided into three sections, although not all the
software I have written falls neatly into a particular category.
The
first
has links to tools and development environments that I wrote or
ported; the
second
contains links to applications and interfaces I developed for
pieces and/or performances; the
third
lists some of the software I developed as part of my teaching
at Columbia University and elsewhere. The links aren't in any real order,
except that they reflect a vague attempt at time-ordering
or what I recalled first in each category. I haven't
tried to put dates on these, because some of the projects span a number of
years, and I couldn't really recall precisely when I did what. I realize
that much of the older code is probably non-functional, and a date
would help identify which of these programs actually run on contemporary
machines. Bear in mind that software listed as working on NeXT
machines dates back to the early 1990s, and software developed
for Macintosh OSX computers is more recent. The Unix software is more
diffuse -- I was using early Unixes in the 1980s, and then worked
with SGI IRIX in the mid-90's before migrating to Linux in the
late 1990s.
A significant portion of the software listed below was done
in collaboration with others, or it was done by building
upon previous work by others. Even though mine is grungy, mostly
undocumented code, I hope that by making it publicly-accessible
it might be useful to anyone trying to do similar kinds of things.
tools
RTcmix
     
Windows
Macintosh
Unix
NeXT
A software synthesis and signal-processing environment --
probably my biggest software project. Lots of really terrific collaborators
on this; see the extensive web page for info.
riff-o-matic
     
Macintosh
Unix
NeXT
This is the LISP source for the style-modeling code I used to produce
my piece
Rough Raga Riffs.
A subset of this code is included in the help patch for the [maxlisp]
object listed above.
The source code for this is buried somewhere, but I list it here because
it was a fairly substantial project for me. The first task I had when
joining the faculty of Columbia University was to write a VMEbus audio
conversion device driver to handle high-quality (16-bit/44.1K) digital
audio conversion. I used a Microsound MTU16 for the audio hardware,
and a Sun 3/280 workstation. Paul Lansky and Robert Gross gave
amazing amounts of assistance and advice. I believe it was one of
the first high-quality conversion systems for Suns. It was hard to do.
Elthar
     
Unix
This was the "signal-processing expert system that learns" that
formed the major part of my PhD dissertation. No code here, but I
think you can get it from University Microfilms if you're totally
insane. The program was actually part of my thesis as the "score"
for my piece -- it was required to have a "score". Go figure.
applications/interfaces
These are applications or interfaces I wrote to accomplish specific
musical tasks. Often they were created for a particular piece
or to demonstrate a particular aspect of musical research I was
involved in doing. Sometimes they were done in the course of learning
a new programming or development environment, and sometimes they were
just for the heck of it.
I haven't listed a lot of the standalone music-generating applications,
because they are listed
here
and I didn't want to be too redundant. Many of them are fairly substantial
coding projects, however. I try not to differentiate too much between
"coding" and "composing".
I am Dying performance interface
     
Windows
Macintosh
Unix
This is the performance interface for my piece
I am Dying
for mandolin and computer-processing. Originally it was done on an
SGI Indy, but later ported to Max/MSP. A copy of the piece without
mandolin is required to run this properly.
ID.sit -- Max/MSP patch
ID.tar -- original SGI code (X/Motif)
Good News performance interface
     
Windows
Macintosh
This is the performance interface for my piece
Good News
for soprano and computer-processing.
Renascence performance interface
     
Macintosh
Unix
In 1995, Jonathan Kramer asked me to create a digital interface to replace
the older analog delay technology for his piece Renascence. I
later updated the piece for performance at his memorial concert.
bush-o-matic
     
Windows
Macintosh
Unix
I did this one just for fun, plus to do a bit of java-hacking
again (I hadn't done any for while). After hearing Yet Another Annoying
spew of meaningless rhetoric from the worst president the US has
ever had, I figured I could write an application to do at least as
well as his speechwriters. This is the result. It was done shortly
after the invasion of Afghanistan, initially inspired by a
speech Bush gave to firefighters in New York. The words are a bit
dated as a result. Unfortunately the Bush administration was not...
granulatarize
     
Windows
Macintosh
Unix
My first (and so far only)
SuperCollider
project. I did this when the language was shifting from v 2.0 to SC3.
It was a bit unstable, and my code is ancient and probably silly.
This was done as a Snazzy Demo of my style-modeling ideas. The web
page shows a map of Europe -- as you 'fly' the airplane (a la old
movies!) around different regions, a flute physical model will play
in a musical style apppropriate to that region. Well, sort of...
hey, it was a demo!
You won't hear sound from the web page, because it was intended to work
by connecting to a separate machine that was the audio "server". Computers
weren't as powerful back then.
Style Model Web Page -- link to the main demo web page
Style.tar -- the java and RTcmix code to
make it work
README(main) --
the general README file for these demos
README(Style) --
the specific README file for the Style model demo
FMfun
     
Unix
This was done at about the same time as the Style Model Demo
above; primarily to show how RTcmix could use network connections to
receive data from a java/web-based application. As you moved the
mouse around the web page, it would alter the FM index and c/m
ratio.
Like the demo above,
you won't hear sound from the web page, because it was intended to work
by connecting to an audio "server".
FMfun Web Page -- link to the web page
FMfun.tar -- the java and RTcmix code to
make it work
README(main) --
the general README file for these demos
README(FMfun) --
the specific README file for the FMfun app
Chaos
     
Unix
This was the third of three demos (Style Modeling Demo, FMfun above)
showing RTcmix in a 'server' role. I've used the chaotic population
equation in a lot of contexts since this one (which I think was one
of the first complete apps I did using it). It's simple, it's fun,
it works well in classes. See my
g6610
or
g6611
classes for other examples using chaotic equations.
As with the other two demos,
you won't hear sound from the web page, because it was intended to work
by connecting to an audio "server".
Chaos Web Page -- link to the web page
Chaos.tar -- the java and RTcmix code to
make it work
README(main) --
the general README file for these demos
README(Chaos) --
the specific README file for this demo
dimension9
     
Unix
This was an application I wrote with Chris Bailey, a composition graduate
student at the time. Chris worked with a substantial sound palette, and
had developed a scheme for organizing his wide range of sounds. This is
an early description of the project:
One of the biggest challenges facing many composers working with recorded
(or "sampled") sounds is finding a good way to organize and conceptualize
the range of sonic variety found in the world. Chris Bailey and Brad
Garton have created an intuitive, 11-dimensional interface that can
navigate the auditory "space" of real-world sounds. Users of the system
can explore new auditory realms created by compositing a broad base
of sound recordings.
We showed this application as part of the CMC's Lincoln Center Summerfest
production,
Masterpieces of Tape Music.
This was a real-time FFT resynthesis application that was controllable
through a MIDI interface. I used this as a demo using the
DIEM Dance Controller;
the controller could 'scan' forwards and backwards through the resynthesis.
One day I strapped it to my cat, loads of hilarity.
I also used code from this project to do the voice processing in
the third (April Daffodils) of my
Three Hopeless Songs.
mFFT.tar.gz -- original SGI code (X/Motif)
+ sample soundfiles and analysis data files
[3.4 Mbytes]
FFFT
     
Unix
A prototype application I did with
Emily Laugesen
as part of her dissertation research. Real-time editing of an
FFT resynthesis, waaaaay back in the mid-90's! There are several
versions in subdirectories of the archive, different stages of
development I think.
These were from a project I did with
Doug Geers
while he was a graduate student at Columbia. The idea was to represent
timbre as a tree-structure. The application assigned an oscillator
to each 'node' in the tree and allowed direct manipulation of the
resulting timbre. There are two applications in the archive, one
called timb and one called treembre. One pre-dated
the other, but I don't honestly recall which was which (or what the
difference was between them -- I think Doug coded most of one and
I did the other. I'll happily take credit for both, though!).
I write a lot of code as part of the classes I teach.
Many of these aren't really finished applications, but they do demonstrate
aspects of computer music and algorithmic composition. Most of these came
from a "picking and choosing" from my
Computer Music I,
Computer Music II,
Basic Electroacoustics I
and
Basic Electroacoustics II
classes. Buried in the sub-links for these classes are probably earlier (and
later!) versions of the code below as well as some explanatory notes about
the software.
In addition to these, the documentation and help-files I wrote for
RTcmix,
the
[rtcmix~]
object, and the
[maxlisp]
object represents another pedagogical aspect of my work.
JPMorganChase Kids Digital Sound and Movement
     
Windows
Macintosh
Unix
Right off the bat, a project that I didn't do as part of my classes.
In fact, I didn't really do a lot of the coding for this. I include
it here because I did do the CD-ROM and web-page setup, and it was also
a significant project for the Computer Music Center. We received a
generous gift from JPMorganChase to develop educational software using
our technical expertise aimed at middle-school-aged kids. The goal
was to excite their curiosity and innate creativity, and to show
alternative ways of using media technologies in an educational context.
There were a number of collaborators on this project, including
Thanasssis Rikakis, Luke DuBois, David Birchfield, Jason Freeman,
Dan Trueman, Paul Kaiser, and Douglas Repetto.
fractal delay
     
Windows
Macintosh
Unix
This is also re-done as a Max/MSP patch using the [mxj].
The earlier page links to more straightforward C code. There is
also a LISP implementation that is part of the
[maxlisp]
object help-file.
flocking algorithm
     
Macintosh
Unix
We employed Craig Reynolds'
flocking algorithm
to do nifty musical things. Somewhere there is an on-line, java version
I did of this -- but I can't find it!
This was an OpenGL/RTcmix demo app developed in class, based upon
the idealized movement of a planar surface with each vertex of a
triangular tile tied to a plucked-string synthesis instrument.
Thanassis was watching water reflecting light one day, so this
was an idealized version of that. Psychedelic, though. And
12-tone to boot.
The archive contains code ported to X11 on OSX, but using an older version
of RTcmix for the audio -- it will have to be updated. There is also
an imbedded archive containing the original SGI code.
than-reflect.tar -- OSX and original SGI code (OpenGL/X11/Motif)
There is a lot more code to be found in the class web page links listed
at the top of the
pedagogy
section -- some of them contain barely-finished apps or fragments of code,
some span several class periods (like the "Blues Guitar" Max/MSP style-model
app), and some aren't really 'apps' per se, like instrument
designs in different computer music languages. Scan around and you may
find more fun fun stuff!