[CM] re: samples->seconds

Bill Schottstaedt bil@ccrma.Stanford.EDU
Fri, 10 Sep 2004 03:34:54 -0700


 > I've taken to setting both *clm-srate* and *srate* before starting any  work --
 > and below we have reference to mus-srate. It has never been  clear to me which one,
 > if any, was "official." Often setting only one  of them I would get unpredictable
 > results, depending on what instrument  I was using, etc. Rather than tracking down
 > the problem, I just started  using the shotgun approach.
 >
 > Particularly when one is designing one's own instruments: which one  "should" one
 > reference to make sample-rate based calculations?

*srate*.  Here's a paragraph I added to clm.html:

<p>In both Scheme and CL, the *clm-* variables (like *clm-srate*) set the default values.
In CL the corresponding un-clm'd versions (*srate*) hold the current values.  So, if
with-sound doesn't include the :srate argument, *srate* is the same as *clm-srate*;
otherwise it reflects the :srate value for the duration of the with-sound call.
The local variables (in CL) that are currently exported are:
*srate*, *safety*, and *debug*.  Unexported, but available in the clm package
are *channels*, *data-format*, *header-type*, *notehook*, *clipped*, *verbose*,
and *statistics*.
</p>

mus-srate is used in Snd (and clm.c). In that context, *clm-srate* holds
the default with-sound setting, and mus-srate holds the current value
(rather than try to deal with dynamic variables in Scheme).  (with-sound's
can be nested, so *srate* is (intended to be) a dynamic variable in
CL, but I'm not sure that was ever a good idea).

In Snd/C/CLM, we have mus-sound-srate (a sound file's srate given the filename),
mus-srate (the current with-sound or CLM output srate), srate (the currently
selected sound's srate), and *clm-srate* (in ws.scm -- the default with-sound
:srate argument value).

You could yoke mus-srate to srate by adding a couple hook functions:

(add-hook! select-sound-hook (lambda (snd) (set! (mus-srate) (srate snd))))
(add-hook! after-open-hook (lambda (snd) (set! (mus-srate) (srate snd))))

You can set the default srate to be 44100 in CL by (setf *clm-srate* 44100).
In Snd it would be (set! *clm-srate* 44100) after loading ws.scm.

Also, in CL there was a sound-srate that was the same as mus-sound-srate;
it's still in CLM-3, but I wish it weren't.  And mus-audio-srate which
refers to the DAC srate.