radiance 0.7.1

Video art software designed for live performance
Documentation
#property description Radial fuzz distortion based on audio

fn main(uv: vec2<f32>) -> vec4<f32> {
    let normCoord = (uv - 0.5) * aspectCorrection;

    let a = atan2(normCoord.y, normCoord.x);
    let l = length(normCoord);

    let wave = 0.;
    // As long as all of the multiplicitive factors on "a"
    // are integers, there will be no discontinuities
    let wave2 = wave + 0.24 * sin(a * 5. + iTime * 1.) * iAudioLow;
    let wave3 = wave2 + 0.24 * sin(a * 7. + iTime * -0.3) * iAudioLow;
    let wave4 = wave3 + 0.06 * sin(a * 40. + iTime * 8.) * iAudioMid;
    let wave5 = wave4 + 0.06 * sin(a * 70. + iTime * -3.) * iAudioLow;
    let wave6 = wave5 + 0.03 * sin(a * 120. + iTime * 16.) * iAudioHi;
    let wave7 = wave6 + 0.03 * sin(a * 180. + iTime * -10.) * iAudioHi;
    let wave8 = wave7 * iAudioLevel;
    let wave9 = wave8 * iIntensity;
    let wave10 = wave9 * defaultPulse;

    // Avoid discontinuities in the center
    let wave11 = wave10 * (smoothstep(0., 0.2, l));

    // Avoid going past the edges
    let extra = 0.5 * (aspectCorrection - 1.);
    let edgeFadeOut = (1. - smoothstep(0.4 + extra, 0.5 + extra, abs(normCoord)));
    let wave12 = wave11 * edgeFadeOut.x * edgeFadeOut.y;

    // Move radially by "wave" amount
    let offset = normalize(normCoord) * wave12;

    return textureSample(iInputsTex[0], iSampler,  (normCoord + offset) / aspectCorrection + 0.5);
}