```

```

### Fork: Fb FM Variaton Arpegio

A simple example of frequency modulation synthesis with feedback.

```// Forked from "Feedback FM" by athibaul
// https://dittytoy.net/ditty/66d8b71e96

input.feedback = 1.3; // min=0, max=4, step=0.001
input.decay = 0.05; // min=0.0001, max=0.1 ,step=0.0001

// Feedback frequency modulation happens when the oscillator modulates itself.
// This can lead to very interesting phenomena!

// If there is no feedback, the signal is a sine wave.
// As long as the feedback value is less than 1, everything is fine.
// When it increases beyond that, weird behaviors start to emerge,
// including chaotic behavior (which we hear as noise).
const feedbackFM = synth.def( class {
constructor(options) {
this.v = 0; // Last value of the synth
this.phase = 0;
}
process(note,env,tick,options) {
this.phase += ditty.dt * midi_to_hz(note);
// The next value depends on the last value
this.v = Math.sin(2*Math.PI*this.phase + input.feedback * this.v) * env.value;
if(options.probe && tick < 0.5) {
debug.probe("feedbackFM", this.v,  1, 5/midi_to_hz(note));
}
return this.v * 0.2;
}
}, {attack:0.0001, decay:() => input.decay, probe:false});

// A simple bass + lead pattern

ditty.bpm = 120;
const nn = [f2,e2,a2,g2];
loop( (i) => {
feedbackFM.play(nn.ring(Math.floor(i/16)));
sleep(0.25);
}, {name:"bass"});

const nn2 = [f4,a4,c4,e5,f4,a4,c4,e5];
loop( (i) => {
if(nn2.ring(i)) {
feedbackFM.play(nn2.ring(i), {decay:() => 3*input.decay, probe:true});
}
sleep(0.5);