Hi, I am currently trying to learn how to do FM (DX7 style) in SC. The DX7 allowed phase modulation feedback not only inside a single operator (as in algorithm 3 and 5), but also over several operators (as in algorithm 4 and 6):
I learned that SinOscFB
has a built-in phase modulation feedback, which gives the acoustic result I am looking for, but only for one oscillator.
I would like to learn how a phase modulation feedback loop over several operators can be achieved. As first step, I tried to rebuilt the phase modulation feedback of SinOscFB
using the standard SinOsc
like this:
(
SynthDef(\PM, {
arg index=3, freq=200;
var sig=0;
sig = SinOsc.ar(freq: freq, phase: index*sig);
Out.ar(0, sig*0.1);
}).play
)
Didn’t work. But why? Why is SinOsc unable to use its own output?
Then I tried this…
(
SynthDef(\PM, {
arg index=3, freq=200;
var sig=0;
sig = SinOsc.ar(freq: freq);
sig = SinOsc.ar(freq: freq, phase: index*sig);
Out.ar(0, sig*0.1);
}).play
)
…which only increased the amount of phase modulation, but did not give the feedback result of using SinOscFB
:
(
SynthDef(\PM, {
arg index=3, freq=200;
var sig=0;
sig = SinOscFB.ar(freq: freq, feedback: index);
Out.ar(0, sig*0.1);
}).play
)
My hope is: If I understand how phase modulation feedback inside SinOscFB
, I can create phase modulation feedback over an arbitrary number of SinOsc
's.
I searched for “Feedback FM”, as well as “Feedback Operator” in this forum, as well as for “Feedback” in SC-IDE’s documentation, but the results were not helpful for me.
Please, how can I make this happen? And how does SinOscFB achieve it? Thanks much in advance!
P.S. I am aware that this can be viewed as a somewhat futile exercise, as there is the FM7
UGen emulating an NI FM7 which can emulate a DX7 and much more complex FM scenarios. But I would really like to learn how the feedback works.