Gen , operator feedback

ward de jager's icon

Gen~ is pretty easy to translate puredata patches from

Here fm operator feedback , puredata's equivalent to history is block~ 1 and s~ r~ objets , all has to bedone in the same subpatcher .

Max needs 2pi radians for the cosine , puredata does it inside the cos~ itself



ward de jager's icon

And if we really want to make it sound like old skool phase mod feedback we need some averaging .

It's not necessary but it gives a slight difference ( whcih to me sounds better )
Like this
in1: operator pitch
in2 : envelope output

in3 : operator output coeff ( scaled by env. )

in4 : feedback coeff

Graham Wakefield's icon

A lowpass filter in the loop really does help feedback PM quite a lot. Yes, in the old yamaha "FM" synths this feedback filter was a simple average of the last two samples.

One of the benefits of the filter is that it lets you go to deeper modulation index before the oscillator blows up into chaos.

That said, I've found that it is well worth exploring other kinds of lowpass filters in this feedback loop. Even a simple onepole will let you go to even deeper mod indices. Depending on the filter chosen, the transition regions between stability and chaos can get a lot more interesting. This is one of those areas where being able to explore the single-sample algorithms really makes a difference!

(By the way, in gen~ it is usually better to just use history instead of delay 1 . Also, in gen~ you have "twopi" as a constant, so you can just say * twopi. Butif you want to have a unit-indexed cosine (and also possibly save a little cpu by using table-lookup) you can use cycle @index phase instead of cos).

(BTW2, we explore a few of these different filter options, and quite a lot of other PM/FM algorithms, in the GO book :-))