I’ve always had a fascination with computers. In the early 1980s when most people didn’t have a personal computer, my high-school friend Eric Mellencamp’s father was a computer enthusiast. I’d spend hours at their house, on their vintage Apple II, playing the Flight Simulator II. Later, in 1984, we’d play with their Apple Macintosh— a new life-changing computer. My friend John Beasley, an LA-based studio musician, had a professional music studio and was using the original Macintosh to control his many MIDI keyboards; I learned a lot about the MIDI protocol by playing around in his studio and watching him work.
At the university of North Texas, during my undergraduate degree in composition, I studied computer music with Larry Austin and Phil Winsor and hung-out at UNT’s Center for Experimental Music and Intermedia (CEMI) where many of the graduate students were writing code as a means to explore algorithmic composition. One of the DMA gurus there, Gene DeLisa, was making some very compelling computer music and was also generating mesmerizing computer art with fractal algorithms that he programmed in C. (DeLisa and Winsor went on to write a book, Computer Music in C). At that time, CEMI didn’t have access to using any software synthesis languages (e.g., Csound) because, while they had a copy of the source code, the computer system (a DEC Vax 11/780) was located across campus and didn’t have a digital-to-analog converter (DAC) — even if it had, it would have meant walking across campus (from the VT100 terminal in the music building to the computing center) in order to hear the output! A lot of the doctoral students were writing code in Basic (on the Vax) and using the output to shape different parameters of their acoustic compositions (e.g., rhythm, pitch, etc.). Some of them were writing code with the output formatted for use as a note-list with the Synclavier digital synthesis system. I was one of those that caught this bug. I convinced one of my friends — Kurt Kuniyasu, an ex-professional COBOL programmer — to teach me the basic principals of programming so that I could experiment with using simple algorithmic ideas (e.g., techniques such as weighted probabilities to make pitch or rhythmic textures). I converted my code to run on a “PC,” then imported the output into a Macintosh MIDI editor and made a jazzy atonal piece called Groove (1989).
When I graduated from UNT in 1989, I bought my first PC — a 286 “clone.” At the computer store, I actually had to argue with the sales person about purchasing the 20 megabyte hard drive because in his opinion, “you’d never have a need for that much space!” I decided upon the PC over a Mac since the Mac was much more difficult to program on because there was no easy access to the underlying OS (System 6).
At the Eastman School of Music in 1990-91 I took an intensive year-long course in Pascal with Aleck Brinkman. His newly minted book “Pascal Programming for Music Research” served as our course textbook; it was a telephone book-sized lifetime achievement of well-researched programming knowledge that toured through all the essential programming algorithms (string manipulation from scratch, sorting, searching, etc.) and data structures (arrays, linked lists, hash tables, binary trees, etc.). At this time I became entranced by coding and wrote many programs to help with my music or the analysis of works that I wanted to study; these were mostly set-theoretic programs but I also wrote an early ear-training program to access my computer’s speaker in order to test my ear with various intervals. A main influence in this period was my composition teacher, Robert Morris, who (aside from being an important American composer) is one of the pioneers of the musical branch of set theory, and had done a lot of programming in Fortran starting in the late 1970s. In addition to Brinkman, he shared many insights that were fundamental to my understanding of programming and the pursuit of thinking in an elegant and logical manner.
In 1991-93, while working on my Ph.D, I served as the Unix system administrator at the Eastman School of Music where my job was to maintain a cluster of three Sun-3/60 computers with a base of about 50 users, and to compile and troubleshoot computer music software that was being shared between various universities and slightly different Unix systems. These 32-bit mini computers were housed in the Eastman Computer Music Center (ECMC), then directed by composer Allan Schindler, and served mostly composers working in early versions of the software synthesis language Csound as well as theorists, musicologists, and composers who were programming in Pascal and C. I also took a course in Unix system administration at the University of Rochester.
In 1991 I bought a copy of Kernighan and Ritchie and learned C and, ever since, have been coding on a semi-weekly basis to solve my own music-related research problems (see here for two examples). As an example: for my 2004 guitar piece Unfoldings, I created a program that simulates a human hand on a fretboard in order to find as many “resonant” chords as possible (six-note chords containing unison doublings). This program allows me to sort through the many possibilities to find those that I like. Below is an example of a portion of the output for one particular run; the “ASCII graphics” image is of a guitar neck from the player’s perspective (the performer would be looking down from the 6th string to the 1st):
Many of the programs that I use today were initially written in the early 90s at Eastman. Since C is very portable, I have recompiled these over the years on many different systems (various flavors of Unix and Linux, PCs, Macs, Raspberry Pis, SGI, NeXTs, etc.). Below is the output from a program that I’ve been revising for the past several decades called Array Editor (AED) — it helps me manipulate large partition-grouped layers of pitch-classes which it stores as rows of linked lists:
I have also been active in the field of computer music since the late 1980s. In 2000, I created a free Unix command-line computer music application called nGen, which can be used to generate complex Csound “score files” as well as MIDI files (more information can be found here). I have worked extensively in the software synthesis languages Csound, Max/MSP, and most recently Super Collider. From 2000 to 2011 I taught advanced computer music at Bowling Green State University and continually advise a small number of music students in their endeavors with various directed research problems in computing and/or software synthesis and real-time/live computer music.
In August 2018 I started to expand my language-base, which was mostly C and a little Python, by learning PHP, JavaScript, and CSS. The first “full stack” project that I made is called Matrix Maker, which builds on a C program I wrote in 1992. If you are interested in that, please see my first blog post… (Blog 1). I’ll also be creating more posts about my older programs…
I invite you to know get to know more about me and my music through my website: mikelkuehn.com.