t || ( rate = 160000, tempo = 120, melody1 = [2, 5, 9, 5], backLead = [2, 5, 0, 1, 2, 5, 9, 1] ), (() => { notes = [261.63, 277.18, 293.66, 311.13, 329.63, 349.23, 369.99, 392, 415.30, 440, 466.16, 493.88] pan = (sig, val) => {return [sig*(1-val), sig*val]} sine = (freq, vol, p) => {return pan(sin(((t)/rate)*PI*2*freq) * vol, p)} saw = (freq, vol, p) => {return pan((t/rate*freq % 1)*2-1 * vol, p)} sqr = (freq, vol, duty, p) => {return pan(((t/rate*freq % 1)>duty)*2-1 * vol, p)} decay = (spd, len) => {return 1-((t%(rate/spd))/rate)*len} sawLFO = (min, max, spd) => {return min+(t/rate/(60/tempo*spd)%1 )*(max-min)} melodyRead = (spd, len) => {return floor(t/rate/(60/(tempo*spd))) % len} addWavs = (sig1, sig2) => {return [sig1[0]+sig2[0], sig1[1]+sig2[1]]} melodyNote = melodyRead(4, 4) variNote = melodyRead(0.25, 2) leadNote = melodyRead(0.25, 8) sqr_vari = variNote && melodyNote == 0 sqr1 = sqr(notes[melody1[melodyNote] - sqr_vari]/2, decay(8,16), sawLFO(0.05, 0.95, 4), sine(0.5, 0.25, 0.5)[0]+0.5) lead1 = saw(notes[backLead[leadNote]]/4, 1.5, 0.5) lead2 = sine(notes[backLead[leadNote]]+sine(5, 0.05, 0.5)[0]+0.4, 1, 0.5) return addWavs(addWavs(sqr1, lead1), lead2) })();