Un'eco nasce da un'idea semplice: ritardare il suono e rimandarne una parte all'ingresso. In Web Audio è un DelayNode con un anello di feedback.
const delay = ctx.createDelay();
delay.delayTime.value = 0.3; // 300 ms di ritardo
const feedback = ctx.createGain();
feedback.gain.value = 0.4; // quanto rimandare indietro
// l'anello: uscita del delay -> feedback -> di nuovo nel delay
source.connect(delay);
delay.connect(feedback);
feedback.connect(delay); // <- il loop che crea gli echi
delay.connect(ctx.destination);
source.connect(ctx.destination); // segnale diretto
Il cuore è l'anello: l'uscita del delay torna al suo ingresso attraverso un gain. Ogni giro il suono si ripete più debole (perché il gain è < 1), creando echi che svaniscono.
Attenzione al valore del feedback: sotto 1 gli echi decadono, ma a 1 o più l'anello si auto-alimenta all'infinito e il volume esplode. Tienilo tra 0.3 e 0.6 per un'eco musicale.
Cambia delayTime a ritmo di beat e l'eco diventa parte del groove: è l'effetto che dà spazio e movimento a un synth altrimenti secco.