[music-dsp] FM Synthesis

Andy Farnell padawan12 at obiwannabe.co.uk
Mon Sep 12 11:47:09 EDT 2011



If you are heading towards DX7 style FM then notice
that only two of the oscillators (2 and 6) can have
feedback, and that this is self feedback. There are
no arbitrary feedback paths containing more than one
node and no nodes that aren't leaf nodes, so none have
self feedback + modulation from another oscillator.
(See Chowning and Bristow)

Most of the time these stand in for band limited saws
(because 1:1 self modulation produces all harmonic) 
or as noise sources.

To be clear whether the aim is to build a generally 
re-patchable set of oscillators that is incidentally 
an FM synthesiser, or whether the goal is to emulate a
classic behaviour will help you decide.
For the former, add noise in place of self modulating
oscillators. For the latter, there are 32 familiar
arrangements (certainly more are possible, but I guess
they can be shown redundant). These can be stored as a
set of weights and orders in a structure passed in to the
main loop and on each block you compute _all_ the 
oscillator phase increments, lookups and results.
You shouldn't need to reduce your block size to 1, 
or the function call overhead is on every sample!



On Mon, 12 Sep 2011 17:04:27 +0200
Andre Michelle <andre.michelle at gmail.com> wrote:

> I guess, that's it and it makes sense now to me.
> 
> This can make FM synthesis quite cpu expensive however. Everything must be included into a big for-loop.
> 
> Thanks.
> 
> --
> aM
> 
> 
> On Sep 12, 2011, at 4:56 PM, Brad Smith wrote:
> 
> > I always understood FM feedback to require a 1 sample delay. The
> > output of the current sample must affect the output of the next
> > sample. If you put, say, a 64 sample delay, it is like you are running
> > 64 delayed feedback loops in parallel, each of them unrelated, and
> > there won't be any coherence between them (probably it just turns into
> > white noise once the feedback gets going).
> > 
> > I think this precludes being able to buffer individual operator
> > outputs, though; you need to calculate the whole chain on each sample
> > to produce the feedback value needed for the next sample.
> > 
> > -- Brad Smith
> > --
> > dupswapdrop -- the music-dsp mailing list and website:
> > subscription info, FAQ, source code archive, list archive, book reviews, dsp links
> > http://music.columbia.edu/cmc/music-dsp
> > http://music.columbia.edu/mailman/listinfo/music-dsp
> 
> --
> dupswapdrop -- the music-dsp mailing list and website:
> subscription info, FAQ, source code archive, list archive, book reviews, dsp links
> http://music.columbia.edu/cmc/music-dsp
> http://music.columbia.edu/mailman/listinfo/music-dsp


-- 
Andy Farnell <padawan12 at obiwannabe.co.uk>


More information about the music-dsp mailing list