## Shimmer Synthesis Actor

The Shimmer Actor produces a sound with harmonic spectrum by randomly walking the frequencies of several sine waves through an overtone series. The effect can be "shimmery". (It's a cool sound I discovered with an Atari ST and a Yamaha FB01 in 1986.)

To use it, load shimmer.so and create an actor of type ShimmerActor.

### ShimmerActor messages

In addition to the messages understood by all generator actors, the ShimmerActor understands the following messages:

SetNumPartials `hActor x`
  Set the default number of partials (i.e., sine waves) for new instances created by this actor to `x`.
SetAllNumPartials `hActor x`
  Set the number of partials of all children to `x`, and set the default number of partials for all future children to `x`.
SetFreq `hActor x`
  Set the default fundamental frequency for all future children to `x` Hz.
SetAllFreq `hActor x time`
  Set the fundamental frequency of all children to `x` Hz, and also set the default fundamental frequency for all future children to `x` Hz. If `time` is specified, children will modulate to the new frequency over the specified duration. Default frequency is always set immediately regardless of `time`.
SetWalkspeed `hActor x`
  Set the default random-walk speed for all future children to `x` seconds (i.e., allow the partials to change frequency every `x` seconds).
SetAllWalkspeed `hActor x time`
  Set the random-walk speed of all children to `x` seconds, and also set the default for all future children to `x`. If `time` is specified, children will modulate to the new value over the specified duration. Default value is always set immediately regardless of `time`.
SetAvgFreq `hActor x`
  Set the default average frequency of the partials to `x` Hz.
SetAllAvgFreq `hActor x time`
  Set the average frequency of all children to `x` seconds, and also set the default for all future children to `x`. If `time` is specified, children will modulate to the new value over the specified duration. Default value is always set immediately regardless of `time`.
SetRange `hActor x`
  Set the default frequency range of the partials to `x`, i.e., keep partials between average_frequency/x and average_frequency*x. x should be greater than 1.
SetAllRange `hActor x time`
  Set the frequency range of all children to `x`, and also set the default for all future children to `x`. If `time` is specified, children will modulate to the new value over the specified duration. Default value is always set immediately regardless of `time`.

### ShimmerActor handler messages

In addition to the messages understood by all handlers, the handler for the shimmer synthesis algorithm understands the following messages.

In all of the following, if the parameter `time` is specified, the value in question will become the new value over the specified duration (instead of instantaneously).

SetFreq `hSound x time`
  Set the fundamental frequency to `x` Hz.
SetLogFreq `hSound x time`
  Set the fundamental frequency to exp(`x`) Hz.
SetAvgFreq `hSound x time`
  Set the average frequency to `x` Hz.
SetLogAvgFreq `hSound x time`
  Set the average frequency to exp(`x`) Hz.
SetFreqRange `hSound x time`
  Set the frequency range to `x`.
SetLogFreqRange `hSound x time`
  Set the frequency range to exp(`x`).
SetWalkSpeed `hSound x time`
  Set the random walk speed to `x` seconds.
SetLogWalkSpeed `hSound x time`
  Set the random walk speed to exp(`x`) seconds.
SetNumPartials `hSound x`
  Set the number of partials to `x`.