makepad/libs/score_player/shaders/flanger.splash

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))
}