A Brief and Largely Vague History of Cmix

by Luke DuBois

CMIX is a computer music "language" designed to create and manipulate soundfiles, or files containing raw binary data which can be converted into sound on a computer equipped with an appropriate digital-to-analog convertor. It is somewhat similar to CSOUND and CMUSIC (two other popular software synthesis and signal-processing computer music packages). All three of these languages are in one way or another derived from the work done by Max Matthews and others at Bell Laboratories in the late 1950's and 1960's.

The word "language" is used loosely here. CMIX is basically only a library of C functions optimized to do sound processing tasks. These functions can be linked with CMIX disk i/o routines and a command parser to build a CMIX "instrument", or executable program. This command parser (call MINC -- Minc Is Not C) is the part of CMIX which is most like a real computer language. It allows for the imbedding of loop constructs, variables and conditional tests in the scorefile (the file containing control data for a CMIX instrument). MINC interprets the programming commands in the scorefile and passes the resulting numerical parameters to the correct CMIX functions.

CMIX is not intended to be a real-time or interactive computer music language. There is no scheduler or score-sorting routines included in the CMIX package. As computers become more powerful some real-time features will probably be added to CMIX, or it may be integrated with some real-time packages (such as the NeXT MusicKit).

CMIX was written by Paul Lansky, initially as a Unix version of his MIX program, written for an IBM mainframe in the early 1980's. Important additional work was done by Lars Graf, the author of MINC, and help also came from Dave Madole, Brad Garton, Doug Scott, and Eric Lyon.

---Brad Garton, Array

Of course, this is old news. In 1995, faced with the unequivocal demise of NeXTStep as we know it, Brad Garton and Dave Topper began working on a cool and groovy new version of Cmix, originally targetted for the hip new Silicon Graphics "Indy" platform. A port was done, and it soon became apparent that a significant number of cmix "instruments" could run in real-time. The obvious next step, then, was to hook the Cmix synthesis engine straight up to the DAC's, and, thus, RTcmix was born.

This, too, is old news.

Since then, RTcmix has been ported to Silicon Graphics and Linux platforms with fairly good cross-platform compatibility. RTcmix also reads information over TCP sockets, resulting in the final divorce between synthesis engine and interface/parser. New features such as MIDI compatibility and real-time control of instrument commands in runtime are being worked on. Enjoy.

All Cmix (and RTcmix) development is undertaken in the public domain. Everyone who downloads it has the source code with which to hack around, build new instruments, etc. If you come up with something really cool and want it put in the distribution, let us know.

A note on versions:

There are currently a few versions of Cmix kicking around. The Princeton Sound Kitchen distributes their own version of Cmix (which has its own real-time synthesis capacity) for NeXT, Sun, SGI, Mac, and Linux. This version is semantically more compatible with old versions of Cmix that you may encounter kicking around in the /musr directories of NeXT machines around the world. Columbia's real-time version (RTcmix), distributed off of our web page, is a little different, and these documentation pages should help a new user iron out compatibility problems that they may have.

Back to the Cmix Documentation Page.