30 lines
940 B
Text
30 lines
940 B
Text
// Flanger: a 0.5..8 ms delay swept by a sine, fed back (negative feedback
|
|
// gives the hollow tone), interpolated with a cubic read, the right side
|
|
// swept in opposite phase.
|
|
let rate = param(0.2, 0.01, 5)
|
|
let min_ms = param(0.6, 0.1, 5)
|
|
let max_ms = param(5, 0.5, 12)
|
|
let feedback = param(0.6, -0.95, 0.95)
|
|
let blend = param(0.5, 0, 1)
|
|
|
|
var bl = [0.0; 1024]
|
|
var br = [0.0; 1024]
|
|
var w = int(0)
|
|
var lfo = 0.0
|
|
var fbl = 0.0
|
|
var fbr = 0.0
|
|
|
|
fn effect(l, r) {
|
|
lfo = advance(lfo, rate / sample_rate)
|
|
let s = sin(TAU * lfo)
|
|
let span = (max_ms - min_ms) * 0.0005 * sample_rate
|
|
let base = (min_ms * 0.001 * sample_rate) + span
|
|
bl[w] = l + fbl * feedback
|
|
br[w] = r + fbr * feedback
|
|
let yl = tap_cubic(bl, w, base + span * s)
|
|
let yr = tap_cubic(br, w, base - span * s)
|
|
fbl = soft_clip(yl)
|
|
fbr = soft_clip(yr)
|
|
w = w + 1
|
|
vec2(mix(l, (l + yl) * 0.5, blend * 2.0), mix(r, (r + yr) * 0.5, blend * 2.0))
|
|
}
|