The following is a short overview of Cmix. It is followed by a list of manual pages to be read for more detail. What follows is merely an attempt to describe the general shape of the environment. Cmix is a simple package of routines which make it relatively easy to create binaries which read and/or write digital signal files in 1,2 or 4 channels. The 'soundfiles' can be in either 16-bit integer or 32-bit floating point form. All sample data is specified internally in 32-bit floating point form, and converted appropriately according to the soundfile type. The soundfiles have an IRCAM 1k header which contains the sampling rate of the file, the number of channels, possibly the peak amplitude for each channel, and the location of that peak, the type of word stored (f or i), and an optional comment if desired. Cmix was built around BSD systems and has run on various Vaxen and Suns with little difficulty. It depends on being able to write files with 'holes' and of arbitrary size. We have no experience with sys V at this point, although it was hacked to run crudely on a MacII. To build the Cmix tools there are only three binary files which have to be created. The first is ..cmix/Minc/m.o, which takes care of reading user data (instrument arguments), ../cmix/cmix.o, which contains most of the i/o routines and a library, ../cmix/genlib.a which contains a number of 'unit generators' in the old Music-4, music-5 sense. Then to actually build a Cmix-based application, the user writes a C program with a given name, writes a profile file, which introduces that name to Cmix, and links his program and profile, with cmix.o. (m.o is joined with cmix.o when the latter is built), searching genlib.a for any unit generators needed. A given application can invoke a large number of programs, as long as they were introduced properly. To run that application, the user invokes the executable, and reads data to the instrument from the standard-input or from a file. In general (although not necessarily) the application will simultaneously read and/or write samples, and issue reports to the standard output. The 'instrument' data is specified in a front-end called Minc which enables the user to use C-like syntax (but not quite), loops, variables, arithmetic expressions etc. Up to four soundfiles may be read or written simultaneously. Also provided with this distribution are a number of utilities to tinker with headers, looks at samples, and store files on tape. We have some extensive linear prediction programs but these are not yet ready for general unattended distribution. There is also an extensive Cmix based soundfile mixing and editing program. Cmix differs from classical synthesis environments such as Music4,5,10,11, 360, etc in that it has no scheduler. Each 'instrument' has random access to the whole soundfile and completes its business before giving up the stage to the next instrument or note. It may 'mix' its output to what is already on the disk, or it may write over what is there. The choice is left up to the user and the application. The result of this approach is much more i/o than the Music4,etc. type programs. In Music4-type programs every instrument playing on sample n, must be computed for sample n, before sample n is written to disk. The Cmix approach is more akin to a rehearsal in which each instrument is rehearsed separately and then mixed together. (It should be remembered that the Music4-type programs were written at a time when disk storage was so limited that it was expected that the output was written on tape. As a matter of fact my first jobs back in 1966 were written only on tape--using IBM 7094). I don't think they even had a disk. There was some sort of drum device.) But the loss of efficiency caused by the increase of i/o is compensated for partially by the greatly reduced overhead. The other difference in approach is that much more programming is expected of the user and consequently this program is probably best used in conjunction with MIT's Csound which is much friendlier, but ultimately probably less extensible (at least by those who don't understand its intimate innards.) We have number of Cmix-based applications (lpc, room-simulation, filtering, etc., -- we have also imbedded the UCSD phase-vocoder in CMIX --). When you have the essential program running, and understand how to use it, let us know and we can send you more of these applications. Thanks to the following for their contributions: Romain Kang, Lars Graf, Brad Garton, Andy Milburn, Dave Madole, Charlie Sullivan. Paul Lansky (2/88) Read the following manual pages in the approximate following order: intro ---- brief look at data specification format. usersub ---- introduction to format of user-written subroutines. profile ---- how to introduce user-written programs to cmix. open ---- open soundfile for reading and/or writing. setnote ---- position pointer on output or input file. endnote ---- closing and updating an output soundfile. io ---- user-controlled flavors of disk i/o. Minc ---- a description of the data specification language for Cmix. cmix ---- a description of the global commands available in Minc. makegen ---- draw and store function. fsize ---- sizing a storage array. floc ---- locating a storage array. genlib ---- a description of the library of unit-generators. sfheader---- description of header structure. sfcodes ---- description of header structure. sfhedit ---- edit a soundfile header. sfcreate---- create a soundfile header. mix ---- description of Cmix based mixing and editing program. tapeman ---- storing and retrieving soundfiles from tape. lsf ---- get stats on soundfile. hist ---- draw amplitude and frequency plots of a soundfile. More useful information: getsample -- how to fetch an arbitrary sample from a soundfile. rescale ---- convert file to playable 16-bit integer form. fplot ---- drawing simple plots of functions. setline ---- draw arbitrary curve. sfextend---- extend the length of a file (creating a hole). sfprint ---- print a soundfile header. sfshrink---- shrink (release part of) a soundfile. sndpeak ---- find the peak amplitude of a soundfile. table ---- table lookup function. tempo ---- set tempo.