## Perry Cook's 4-Operator FM TubeBell

The tubebell suite (tubebellActor, tubebellHand, tubebellAlg) makes calls into Perry Cook's STK synthesis toolkit.

To use the tubebell implementation, load perry.so and create an actor of type TubeBellActor.

Note: All parameters except frequency and reverb were originally designed for input from MIDI devices. Therefore, those parameters should be set to values between 0 and 127.

### TubeBellActor messages

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

SetReverb `hActor x`
  Turn on reverb for new instances created by this actor to `x`. (1 = ON, 0 = OFF)
SetAllReverb `hActor x`
  Turn on reverb of all children to `x`, and set the default reverb flag for all future children. (1 = ON, 0 = OFF)
SetSustainLevel `hActor x`
  Set the ADSR sustain level for new instances created by this actor to `x`.
SetAllSustainLevel `hActor x time`
  Set the ADSR sustain level of all children to `x`, and set the default ADSR sustain level for all future children. If `time` is specified, children will modulate to the new ADSR sustain level over the specified duration. Default sustain level is always set immediately regardless of `time`.
SetFreq `hActor x`
  Set the frequency (in Hertz) for new instances created by this actor to `x`.
SetAllFreq `hActor x time`
  Set the frequency (in Hertz) of all children to `x`, and set the default frequency (in Hertz) for all future children. If `time` is specified, children will modulate to the new frequency over the specified duration. Default frequency is always set immediately regardless of `time`.
SetVibGain `hActor x`
  Set the vibrato gain for new instances created by this actor to `x`.
SetAllVibGain `hActor x time`
  Set the vibrato gain of all children to `x`, and set the default vibrato gain for all future children. If `time` is specified, children will modulate to the new vibrato gain over the specified duration. Default vibrato gain is always set immediately regardless of `time`.
SetModIndex `hActor x`
  Set the 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`.
SetCrossFade `hActor x`
  Set the dual-FM-carrier crossfade for new instances created by this actor to `x`.
SetAllCrossFade `hActor x time`
  Set the dual-FM-carrier crossfade of all children to `x`, and set the default dual-FM-carrier crossfade for all future children. If `time` is specified, children will modulate to the new dual-FM-carrier crossfade over the specified duration. Default dual-FM-carrier crossfade is always set immediately regardless of `time`.
SetVibFreq `hActor x`
  Set the vibrato frequency for new instances created by this actor to `x`.
SetAllVibFreq `hActor x time`
  Set the vibrato frequency of all children to `x`, and set the default vibrato frequency for all future children. If `time` is specified, children will modulate to the new vibrato frequency over the specified duration. Default vibrato frequency is always set immediately regardless of `time`.

### tubebell handler messages

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

SetReverb `hSound x`
  Toggle reverb (1 = on, 0 = off).
SetSustainLevel `hSound x time`
  Set the frequency to `x`. If `time` is specified, modulate to the new frequency over the specified duration.
SetFreq `hSound x time`
  Set the frequency to `x`. If `time` is specified, modulate to the new frequency over the specified duration.
SetVibGain `hSound x time`
  Set the vibrato gain to `x`. If `time` is specified, modulate to the new vibrato gain 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.
SetCrossFade `hSound x time`
  Set the dual-FM-carrier crossfade to `x`. If `time` is specified, modulate to the new dual-FM-carrier crossfade over the specified duration.
SetVibFreq `hSound x time`
  Set the vibrato frequency to `x`. If `time` is specified, modulate to the new vibrato frequency over the specified duration.