<div dir="ltr">Formants:<br><div><br></div><div><a href="http://dood.al/pinktrombone/">http://dood.al/pinktrombone/</a><br></div><div><br></div><div><br></div><div>Just use this site.</div><div>Kylee</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Mar 16, 2017 at 8:14 AM, Olivier Gillet <span dir="ltr"><<a href="mailto:ol.gillet@gmail.com" target="_blank">ol.gillet@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">> Incidentally, whether you sync the windowed waveform or not is one of the differences between the several flavours of this type of thing. Some places say you should, other places seem not to bother.<br>
<br>
</span>Braids' "Z***" models are exactly that:<br>
<a href="https://github.com/pichenettes/eurorack/blob/master/braids/digital_oscillator.cc#L328" rel="noreferrer" target="_blank">https://github.com/<wbr>pichenettes/eurorack/blob/<wbr>master/braids/digital_<wbr>oscillator.cc#L328</a><br>
<br>
You can play with the phase at reset, but also change whether the<br>
windowed waveform is scaled between -1 and 1 ; or between 0 and 1<br>
(with the corresponding adjustment for DC offset) - this will simulate<br>
whether the low frequencies of the window are eliminated or not.<br>
<br>
With a bit of work you could continually transition between the<br>
various filter responses. And with a bit of "waveform algebra", you<br>
can also simulate a filtered square or pulse...<br>
<br>
On the Cortex M3/M4 I use, it turns out to be more computationally<br>
expensive than synthesizing a band-limited oscillator filtered by a<br>
digital SVF - but it's still a fun technique. It doesn't produce<br>
exactly the same waveforms, since the envelope of the impulse response<br>
of a resonant filter is an exponential, not a linear function.<br>
<br>
One more thing: you have to do a bit of work to prevent aliasing. When<br>
the master oscillator resets (when its phase wraps around), the phase<br>
of the slave oscillator must be reset to master_phase /<br>
master_frequency * formant_frequency (not to 0). I have to update<br>
Braids with that!<br>
<span class=""><br>
> Since then I've also done a much more specifically vocal version, again on dsPIC, using five sets of windowed sine waves to generate a full vowel spectrum. The nice thing is that you can add together five sine oscillators, then window the sum, and you get five tuneable formants and one basic pitch.<br>
> It sounded vocal, ish, but I wasn't that impressed. It made a series of AEIOU-type sounds when you twiddled it, but seemed like a lot of work for that result. I've had pretty similar sounds out of a couple of resonant filters.<br>
<br>
</span>Individually control the shape / width of each formant's window; allow<br>
overlap to simulate very resonant formants, and you reach the next<br>
stage: FOF!<br>
<br>
But I agree that nowadays, these techniques do not really make sense<br>
since it's less computationally expensive to do things with a bunch of<br>
IIR filters or a lattice filter. A couple of updates ago, Braids'<br>
implementation of FOF got replaced by a band-limited pulse filtered by<br>
3 parallel SVF and nobody seemed to notice :)<br>
<div class="HOEnZb"><div class="h5"><br>
______________________________<wbr>_________________<br>
Synth-diy mailing list<br>
<a href="mailto:Synth-diy@synth-diy.org">Synth-diy@synth-diy.org</a><br>
<a href="http://synth-diy.org/mailman/listinfo/synth-diy" rel="noreferrer" target="_blank">http://synth-diy.org/mailman/<wbr>listinfo/synth-diy</a><br>
</div></div></blockquote></div><br></div>