AV mapping transfer functions are almost always affine (linear) or squared-exponential — linear for continuous motion, exp for onset-ish pop
Every a.fft[i]-to-visual-parameter mapping follows one of two canonical forms: affine linear base + gain · a.fft[i], used for parameters that should always be moving smoothly (rotation speed, warp depth, scroll rate); or exponential/perceptual base + gain · a.fft[i]², used when a parameter should stay near its base when quiet and jump on loud hits (scale pulse, threshold, feedback warp). The squared form compresses the low end — quiet passages barely register — and amplifies peaks, faking the feel of onset detection. The base term is always the floor at silence: it must produce an intentional-looking frame when a.fft = 0.
Examples
Rotation: () => 0.1 + a.fft[2] * 0.6 (linear — always spinning, faster on high-mid). Scale pulse: () => 1 + a.fft[0] * a.fft[0] * 0.6 (exp — quiet stays at 1, kick punches to ~1.6).
Assessment
Choose between linear and exp transfer functions for: (a) brightness driven by bass on a pad-heavy ambient track, (b) zoom pulse driven by bass on a 4/4 kick pattern. Justify each choice.