Perry Cook's FMVoices Physical Model
The fmVoices suite (fmvoicesActor, fmvoicesHand, fmvoicesAlg) uses Perry Cook's STK synthesis toolkit.
It is a "singing-voice subclass of Algorithm 6 (TX81Z) subclass of
4-Operator FM Synth", according to Perry. Three carriers and a common
modulator. You can control the vowel color, spectral tilt, LFO speed,
and LFO amount.
It sounds like Kraftwerk robot-voice "Au-to-bahn" and "Stop der Ra-di-o-ak-ti-vi-teit".
To use the fmVoices implementation, load perry.so and create an actor of type FMVoicesActor.
FMVoicesActor messages
In addition to the messages understood by all generator actors, the FMVoicesActor 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)
- SetLoudness hActor x
- Set the loudness for new instances created by this actor to x.
- SetAllLoudness hActor x time
- Set the loudness of all children to x, and set the default loudness for all future children. If time is specified, children will modulate to the new loudness over the specified duration. Default loudness 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.
- SetFormantQ hActor x
- Set the formant Q for new instances created by this actor to x.
- SetAllFormantQ hActor x time
- Set the formant Q of all children to x, and set the default formant Q for all future children. If time is specified, children will modulate to the new formant Q over the specified duration. Default formant Q is always set immediately regardless of time.
- SetVowel hActor x
- Set the vowel for new instances created by this actor to x.
- SetAllVowel hActor x time
- Set the vowel of all children to x, and set the default vowel for all future children. If time is specified, children will modulate to the new vowel over the specified duration. Default vowel 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.
fmvoices handler messages
In addition to the messages understood by all handlers, the handler for the fmvoices algorithm understands the following messages:
- SetReverb hSound x
- Toggle reverb (1 = on, 0 = off).
- SetLoudness hSound x time
- Set the loudness to x (0 to 127).
This is simply an extra amplitude control, pre-reverb,
in series with SetAmp.
If time is specified, modulate to the new loudness over the specified duration.
- SetFreq hSound x time
- Set the frequency to x.
50 to 1000 gives good results.
If time is specified, modulate to the new frequency over the specified duration.
- SetVibGain hSound x time
- Set the amount of vibrato to x (0 to 127).
If time is specified, modulate to the new vibrato gain over the specified duration.
- SetFormantQ hSound x time
- Set the formant Q to x (0 to 127).
100 to 127 is best, otherwise peculiar discontinuities are audible
when you smoothly change the frequency.
If time is specified, modulate to the new formant Q over the specified duration.
- SetVowel hSound x time
- Set the vowel to x (0 to 127).
I have no idea what the mapping from 0..127 to vowel color is.
If time is specified, modulate to the new vowel over the specified duration.
- SetVibFreq hSound x time
- Set the vibrato frequency to x (0 to 127).
Around 30 is nice.
If time is specified, modulate to the new vibrato frequency over the specified duration.