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.