## A ring modulation actor

Ring modulation multiplies two signals together, sample by sample.
The two inputs of this actor are called the "Input" and the "Modulation Input".
The ModInput defaults to an internally-generated sine wave (whose frequency is called the "Carrier Frequency"). But for more complex spectral effects the ModInput may be a sound coming from another actor.
The amplitude of the modulating signal is scaled by the "Modulation Index".
The output contains only those frequencies which are the sum and difference of frequencies present in the two inputs.
So, for a narrow-band input bandlimited source with sinewave modulation, ring modulation is like frequency shifting: the input spectrum is shifted to appear symmetrically, above and below the carrier frequency, with the input spectrum itself above the carrier, and the mirror-image of the input spectrum below it.

To use the ring modulation actor, load ring.so and create an actor of type RingModActor.

### RingModActor messages

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

SetModFreq `hActor x`
  Set the default modulation frequency for new instances created by this actor to `x`.
SetAllModFreq `hActor x time`
  Set the modulation frequency of all children to `x`, and set the default carrier frequency for all future children. If `time` is specified, children will modulate to the new carrier frequency over the specified duration. Default carrier frequency is always set immediately regardless of `time`.
SetModIndex `hActor x`
  Set the default modulation index for new instances created by this actor to `x`.
SetAllModIndex `hActor x time`
  Set the modulation index of all children to `x`, and set the default modulation index for all future children. If `time` is specified, children will modulate to the new modulation index over the specified duration. Default modulation index is always set immediately regardless of `time`.

### RingModActor handler messages

In addition to the messages understood by all handlers, the handler for the RingModActor algorithm understands the following messages:

SetInput `hSound hHandler`
  Set the input to come from the handler `hHandler`.
SetInput `hSound`
  Set the input to zero (i.e., silence the input).
SetModInput `hSound hHandler`
  Set the modulation input to come from the handler `hHandler`.
SetModInput `hSound`
  Set the modulation input back to the internal sine wave generator.
SetModFreq `hSound x time`
  Set the modulation frequency to `x`. If `time` is specified, modulate to the new carrier frequency over the specified duration.
SetModIndex `hSound x time`
  Set the modulation index to `x`. If `time` is specified, modulate to the new modulation index over the specified duration.