GlitchFree Vowel synthesis - with Soprano/tenor etc Formant tables

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