maybe have a look here: FM formant synthesis (e.g. Chowning, "Phone")
ive implemented single sideband modulation here which cancels out all the negative sidebands for a really well behaving spectrum by multiplying the carrier with a raised cosine window, which is driven by the same phase as the modulator and has the same index:
(
var raisedCos = { |phase, index|
var cosine = cos(phase * 2pi);
exp(index.abs * (cosine - 1));
};
{
var rate = 110;
var modRatio = 2.5;
var index = SinOsc.ar(0.3).linlin(-1, 1, 0, 30);
var modPhase = Phasor.ar(DC.ar(0), rate * modRatio * SampleDur.ir);
var mod = sin(modPhase * 2pi);
var raisedCosWindow = raisedCos.(modPhase, index);
var carrPhase = Phasor.ar(DC.ar(0), rate * SampleDur.ir);
var carr = sin(carrPhase * 2pi + (mod * index));
var sig = carr * raisedCosWindow;
sig = LeakDC.ar(sig);
sig!2 * 0.1;
}.play;
)
s.freqscope;
you could multichannel expand this for additional formants.
EDIT: for further investigation i recommend these videos by miller puckette: https://msp.ucsd.edu/syllabi/267.21f/movies/ (as far as i remember PWM starts in Nov), the book generating sound & organising time - thinking with ~gen which has a chapter about that and this paper: https://mural.maynoothuniversity.ie/4693/1/VL_synthesis%20of%20resonance.pdf