// Drive at 4x oversampling: soft (rational tanh), hard clip, a wavefolder // or asymmetric tube-ish saturation, then a tone low-pass and a DC // blocker. At 1x the harmonics a clipper makes fold back as inharmonic // fizz; at 4x they are filtered away (58 dB down). let amount = param(0.5, 0, 1) let mode = param(0, 0, 3) let tone = param(9000, 500, 18000) let blend = param(1, 0, 1) let level = param(0.8, 0, 2) var os_l = Os4{} var os_r = Os4{} var tl = OnePole{} var tr = OnePole{} var dl = DcBlock{} var dr = DcBlock{} var pre = 1.0 var post = 1.0 fn block() { onepole_set(tl, tone) onepole_set(tr, tone) pre = exp2(amount * 5.0) post = 1.0 / soft_clip(pre) } fn shape(x) { match int(mode) { 0 => soft_clip(x), 1 => hard_clip(x), 2 => fold(x), _ => asym_clip(x, 0.3), } } fn channel(o, x) { for k in 0..4 { os4_push(o, shape(os4_up(o, x * pre, k))) } os4_out(o) * post } fn effect(l, r) { let yl = dc_block(dl, onepole_lp(tl, channel(os_l, l))) let yr = dc_block(dr, onepole_lp(tr, channel(os_r, r))) vec2(mix(l, yl * level, blend), mix(r, yr * level, blend)) }