I'm currently using an oscillator that has high levels of harmonics filtered by several bandpass filters in parallel to generate formants, and that works pretty well. I'm interested in other ways of generating formants. I've seen old references to fof~ and vosim~, but these objects are old and apparently unsupported. Does anyone know of current versions of these? Or other ways to generate formants in Pd?
-
Objects for formant synthesis?
-
AFAIK, there is the formant-filter module in automatonism (available on deken)
-
The formant module in automatonism uses parallel bandpass filters, which is what I'm currently doing. I'm looking for alternatives to the bandpass filter approach.
-
I can create some if you give me sources and point me to exactly what you're looking for
-
F12.paf.control.pd says that there is a paf~ external, but I can't find it. This page by Miller Puckette describes paf:
https://msp.ucsd.edu/techniques/latest/book-html/node96.html
Max/MSP has a paf~ object.
I just saw that you opened an issue on paf~
https://github.com/pure-data/pure-data/issues/1685The vosim page is here: https://kaegi.nl/vosim
Shadylib includes a voisim~ object. Shadylib isn't on deken and doesn't have a Windows version. https://github.com/sebshader/shadylib/releases/tag/2.0
Max/MSP has gen~.vosim.maxpatHere is some background on fof, including Faust code: https://ccrma.stanford.edu/~mjolsen/220a/fp.html
Max Sound Box has Chant objects which include fof: https://forum.ircam.fr/projects/detail/max-sound-box
Csound has an fof operator. https://csound.com/docs/manual/fof.html
and an fof2 operator https://csound.com/docs/manual/fof2.html
Here is a tutorial on using fof in csound: https://www.eumus.edu.uy/eme/ensenanza/electivas/csound/materiales/tutorials/fof/fof.htmlIf you only do one of these, I think that paf~ would be the best. Thank you for looking at this!
-
nice, this has been in my to do list for over a decade now

-
grab [vosim~] for windows in https://github.com/porres/pd-else/actions/runs/20151921140
This is based on shadylib, I fixed some bugs, made some changes, will make some more like adding MC support and will study some more about the code, algorithm, other implementations before actually releasing anything. But i uploaded the commit so you can test and grab this one...
I will also work on paf~ and the other stuff

-
@jamcultur shadylib is on deken and there is a windows version https://deken.puredata.info/search.html?libraries=shadylib&objects=&descriptions=
It has not had a 'release' in 5 years despite 94 commits.. maybe should get on that
although I think the only changes in voisim~ were some minor possible performance improvements
-
@seb-harmonik.ar said:
maybe should get on that
surely, I couldn't run it on apple silicon, for instance.
What was the source you used for this object? I'm doing a deep dive on it all now...
One thing I didn't get and changed, and maybe I screwed it up, is that I'm updating the phase step of fundamental and center frequency for every sample, but I saw that you were doing it only in some case conditions that I forgot now...
I am also looking into paf~ and several other related things and this seems pretty similar to paf~
-
@porres I think I implemented it after reading about the algorithm
the fundamental preserves the 'residual' phase when it the cycle completes, and at that point the center frequency phase is reset to 0the frequencies can only be updated when fundamental or center frequency phase rolls over (or they are already 0)
it checks to see if there's enough 'space' in the fundamental phase to fit another center frequency cycle (that's the
phsinc = outfreq/infreq; routphase = shadylib_min(1.f - phsinc, duty); routphase = routphase - outphase - res;part)
but does so while considering the phase it had wrapped around at the beginning of this cycle ('res')This was to avoid the last cycle of the center frequency from popping in and out depending on the starting phase of the fundamental
-
thanks, will look into all that. i literally have had this in my to do list for over a decade, or even longer, like 15 years or so
to cover this in my Live Electronics Tutorial, and this post now made me jump on this. Anyway, I can and should pull the object back since you do have a working windows version and I still have no idea what this is all actually about in details. -
well feel free to copy it if you want.. else has a far more steady release schedule anyways

-
sure, but I still have to mature, learn and be sure of things
and it's always been weird to me cause you have vosim, and fof, and paf, and filterbanks and whatnot... it's just a hard topic to cover
and now I have to figure out the relationship between these all. If anyone could help, please say so 
I'm looking at messages I sent to the Pd list in 2017, where I was asking about how to do the Formant Ugen from SC in Pd, hahahah.... see? It's been on my list forever... and 2017 was the first year of ELSE's development
and my live electronics tutorial dates back to 2008... anyway... in the thread I say that the thing seems related to the fof opcode in Csound. And now I have to look into the source code all over again. -
you can find the paf~ external in one of the pieces that Miller shares with the Pure Data Repertory Project (in /externs/paf~/):
https://msp.ucsd.edu/pdrp/latest/manoury-enecho.tgz -
nice, I had an older code 0.06 that I don;t know where I got it from and I tried to include that one back into Pd's extra, but it wasn't working. This [paf~], on the other hand is

-
@porres It's exciting to see progress on this! Thank you! I don't have time to try vosim~ today, but will definitely try it tomorrow.
-
There's also the John Chowning "Phoné" FM formant approach, where the carrier is at the formant center frequency and the modulator is at the fundamental. It's "formant-ish" I suppose, but sweeping the fundamental while holding the formant frequency steady does produce a vocal-ish sound.
Here I'm crossfading between two formants, to make smooth transitions between integer carrier-mod frequency ratios.

Oops, no:
(~[spectrogram~] is from cyclone -- not essential to the patch's operation.)(~[spectrograph~] is from ELSE -- not essential to the patch's operation.)
hjh
-
@ddw_music said:
spectrogram~ is from cyclone
cyclone does not have a [spectrogram~] object
ELSE has [spectrograpg~] though.
About formant synthesis with FM, I know Miller includes something like that in the audio examples (see F10). Is it related maybe?
-
by the way, just implemented SuperCollider's Formant Ugen as a compiled Pd object...

-
For those looking closely, the output scale of SC is bad, range can be from -2 to 2! I fixed it in my external.
-
@porres said:
cyclone does not have a [spectrogram~] object
ELSE has [spectrograpg~] though.
Thanks -- I didn't look closely enough at the help patch.
About formant synthesis with FM, I know Miller includes something like that in the audio examples (see F10). Is it related maybe?
It probably is, and his implementation is probably more elegant than mine (though it's jammed into a small space on the screen so it's a bit tough for me to read quickly).
It takes some tuning -- the FM index isn't a simple analog to formant bandwidth (it seems to need to be scaled down at higher pitches). But it's computationally cheap and gets a useful result, and it seemed to fit "approaches to formants other than bandpass filtering."
hjh