This hierarchy contains a set of sample RTcmix interfaces, as well as
an object library of functions (in ./lib) that may be used to simplify
RTcmix socket operations and random operations.  I built these on
a 133 MHz SGI Indy, using IRIX 6.2.  Because this is a relatively slow
machine by today's standards, my hope is that they will run EVEN BETTER
on other machines.  Yeah!

This directory can probably be installed anywhere on your system,
but most of the instruments expect the RTcmix package to exist as
/musr/cmix.  A few of them will also be much happier if this
directory is also installed in /musr/cmix/ as /musr/cmix/interface.
The unpacked (compiled) size of this directory is a little over
7 Mbytes.  To compile, just type "make" in the top-level directory.

Many of the interfaces use features of RTcmix2.0 and will not work
properly with older versions of RTcmix.  In particular, nearly all
of these interfaces use the DSO-loading capabilities (the load()
feature) of RTcmix2.0 instead of the older "standalone instrument"
method.  You can download the latest RTcmix from

	http://www.music.columbia.edu/cmix

Dave Topper is working to get a Linux port happening (soon!) of all
these interfaces.  Send e-mail to topper@virginia.edu for the latest
info...

My intention is for these to serve as programming examples for others
wanting to build RTcmix interfaces.  A good place to start is to look
at the basic/strumscale.c interface -- it is about as "bare bones" as
you can get.  Also check the README file in ./lib for a description
of the RTcmix socket and random function libraries.

I have placed a number of obnoxiously-chatty README files throughout
this package describing the various programs.  Check the README files
in each subdirectory for short descriptions of the interfaces included
here.  The source files for the apps should also be scanned for
application-specific options and information.  This info is generally
located at the top of the source code file.  We are working to
build a much better on-line documentation resource (mainly due
to the efforts of Luke Dubois) -- check the URL for cmix listed
above for the latest & greatest.


Coupla comments:

Check the README in ./basic for some important information about
killing errant RTcmix processes.  Because these interfaces
spawn child processes for the RTcmix instruments, an abnormal
termination can inadvertently leave an instrument process running.

You will also notice that there is usually a call to sleep()
for several seconds after each RTopensocket() call in these interfaces.
This is to allow the RTcmix instruments ample time to start before
attempting to connect to the TCP/IP socket.  These calls to sleep()
will force a slight delay in starting the applications, so be patient!
I am sure there is a better way to do this (check to see if the procid
is active, or something like that), but my brain is old and tired.
As you look through the code, bear in mind that most of the authors
are *musicians* and not professional programmers.  We are steeped
in a tradition of on-the-spot improvisation and ad-hocness... but
it all sorta works.


Many many thanks to Luke Dubois, Dave Topper and Doug Geers for
helping with these sample interfaces.

Feedback, comments, etc. always welcome --

Have fun!


Brad Garton (brad@music.columbia.edu)
November, 1998
