[CM] CLM-3

Bill Schottstaedt bil@ccrma.Stanford.EDU
Tue, 20 Jul 2004 03:55:49 -0700


CLM has moved to version 3.  This turned out to be a much bigger
change than I originally intended.  The initial plan was to
incorporate clm.c into the CL run macro, but one thing led to another,
and by the time I was done, much of the program was gone: the no-ffi
(clisp) support, real-time graphics and controls (better handled by
Snd), old Mac MCL/MPW code, the parallel instrument handlers, the help
system, etc.  The basic goal was to unify the various versions of CLM
-- all are now based on clm.c -- while minimizing instrument-level
changes.  A side effect that became a goal was to refocus CLM on its
original purpose (sound synthesis).

Here are the specific changes:

Removed clisp/no-ffi support:
     rc.c, rc.lisp
     no-ffi and clisp switches.

Removed real-time controls support:
     noffishm.c and all "control" functions
     preverb.ins, stochasticRT.ins, revon.ins

Removed old Mac OS/MPW support:
     ToolServer.Lisp, maclib.lisp, make-clm.cl, mac.help
     much of mac.lisp (except for ffi links)

Removed with-psound/defpinstrument support:

Removed obsolete files:
     jl.ins, load-clm.cl, make-clm.cl
     clm-changes.html, translate.cl (CLM-1 stuff)
     moog.ins (moog.lisp appears to be more recent)

Removed obsolete/redundant functions and variables:
     *input* (and all related function args)
     cnv-reverb in cnv.ins

Removed clm-help:
     the help subdirectory and indexing support for it
     clm-help.lisp, menu.lisp
     clm-inspect, clm-help, linux-help
     *clm-help-browser* *clm-linux-helper* *clm-helper-choice*

Removed the *explode* feature, and the notion of a lisp instrument
     (definstrument now assumes C -- use "defun" if you want lisp).
     also removed save-signal.

Removed mus-open-write, mus-reopen-write, mus-open-read, mus-create, mus-close.
     These are available under more perspicuous names in clm1.lisp.
     Also mus-file-open-descriptors, mus-write-zeros, mus-write-float.
     Also mus-file-to-array (use file->array), mus-array-to-file (use file->array)

Removed excessive speed: CLM-3 is a bit slower than CLM-2 --
     according to my timing tests, at least half of the slow down comes
     from using doubles in place of floats -- a few of the benchmarks
     are faster in clm-3.

Removed def-clm-struct support for generator fields (I still need to
     update dlocsig)

Removed instrument-let

open-input and close-input are almost no-ops -- they just save their
     arguments for some future reference (backwards compatibility).
     removed open-output, reopen-output, close-output (you can
     get the same functionality from sndlib's mus-sound-open-ouput).

Added run support for:
     mus-name, mus-file-name, mus-xcoeff, mus-ycoeff, mus-equal
     mus-describe, mus-inspect, polar->rectangular,
     sound-comment, mus-header-type-name, mus-data-format-name

Added "declare" types (run macro): string, mus-any, bignum,
     int*, double*. strings and bignums can be passed through run.
     Due to CL package confusion, these declare types should
     prefix a colon (i.e. use the keyword package).

Added off_t sample number support.

Added generators: ssb-am, phase-vocoder, also run-time function
     args for editing and so on.

Added classes: sample->file, frame->file

changed pv-* to phase-vocoder-* (snd7.scm has old names)

The tarball is named clm-3.tar.gz; I'll leave the old clm-2.tar.gz
at ccrma-ftp indefinitely.  There are still 30 or 40 things-to-do,
but I think the basic program is usable.

I was mulling over these changes while driving into work, and it
occurred to me that clm's precursor (Sambox) lasted about 15 years,
clm-1 lasted 10, clm-2 5 -- what does this sequence portend for clm-3?