The robot voice from the Beastie Boys track of the same name.
youtube.com/watch?v=qoryo0atb6g
Log in to post a comment.
var unpck = (code, offset, scale) => { var d = []; for(var i = 0; i < code.length; ++i) { var db = (code.charCodeAt(i)-0x23)/-scale+offset; var v = 10**(db/20); d.push(v); } return d; }; var tape1 = [ unpck("~~prqkeaadmkgflvu_RKIMS[`ciu~~~~~~~~~~~~oeadiu~~siir~vnggklog_VOKJLQZfiha[YY^hpplkgb__\\\\`l~tmmw~~~~~~|zz~~~~~~~~~~ztnlmz~~~~~~~~~~~~~~~~~{L5)$##&.7AM[gt~~qjf`\\VOGEEJOVbowzthTG=778>DISdnnou~~~~~~~~~~~~zspptyrjeelsty~~~qi_XX\\__cinv~~~~q^XZg{~~~~zontpkilr~~~}~~~~~~}~~q_S",-21.115,5), unpck("vbPKOSSQMHHGJNTRNHEEGMG@>?DKPX`go{ulcbUHDDHLQPQRMGBABGMWJ<3/02771+*)+.10238AKIILMNF<879>DLQQRX[\\\\]_aaaaeghkaRNRY`ZOIB><@ETglhip~~~~~~~~~~mWLGDBDEDBAEJLJKJIHEB?:8743.)((+.1/*%#$(*+('(((('',4>ELKMOQUVM@=>FLONJIKOKJIGDC@:984.-.08>?@?AB>;=KSQJEFHJE;30-,-17=DHLNNR\\issm`ROP",-13.574,5), unpck("rWJINQTSQLLKMNLMNPSau}xrnnqux|~~~~~ofZKGGGEED@?A?AN`jrtrnTFEGMRPHB>8410.-/5<EKPRW\\]YUTVX\\^\\XW[\\aglsvtrquuppiSB=>;:<>ACO]fr{~ujfghhr}~~~~~nTF?90*&$#$*/9>BIPTSSPOORROKIGHOU]][UOJFCBA?<<;>AKTZ_hqstwvyxnQA<==>CDHIKNQSNH=30/035;DJT[gjhb]_\\[QD;;:;@BFLOR\\`ejnsxxxtrqtx~~~~~~~",-16.18,5), unpck("vfejqrqfeegedddbcfjy~~~~~~~~~~~~~~~~~vlgfaYSQQUWY]eny~{wq_J@=650/04:<:=?=*%%(+,++.16:92048<DHEDFJNYaeq~~~~s]VSSWTUVYY^ix||~~~~~~~~~~~~~~~~|ph`UNIGD=87520-()*,*(*+,-.27:ADIQW[a`\\YXUUPPQRTVWVYagknu~~~~zhaYI@6/+,)%##(*+-25;<>DMRZ_dlw{~~~xlaYVPMOSUWZbl{~~~~~~~~~~~~~~~~~~~",-19.572,5), unpck("eN48PeusYYfehgbegpwpzwtx|~~~~~~~~\\[\\X]C723006DNVMIKMPR77@CBGLGISTXZXYb\\]R>2.,+2467<BOI@@DGGGIKOV\\]]acgldcch_RRVPOQR_t}~qhelx~kfn~~~~~~~~~~~~~~somhTB7326:BJRUTU]bb`ccadhjhdgpZJIMIIOXTRTagkljhfhZUXeppq]SPKGDCDGJMG<87:BMTTONLMRTVUX^cgZ3%%#(9TVRVTSTTOORU[_amxwwl\\WUYh~tsbZ",-21.696,5), unpck("d<(((&+60-0138>>DIUba`gtuukikkouh><?>?@FCHLD4+)-4SXMIO:115?QMCAHViihfaab\\ST\\[RNMLJIA=<>4/4DY_VNOgoos}vJHKTVI9.---,'&.?T[PS^sq\\Y_rmjd`dmi_`bfffYPOQOKMQX]YTPJD@>=?DHRUY]bfo~~~kQMGBADHJNW]elptvro@=?\\\\XVC616=CHEEDDLXVX^elhhhknnija]`o}eB@HIE:3'#$)&$(39AGEEN`OGCB?AFIPV^gbbh",-22.4,5), unpck("~qPC?9,)(),*'$$'.=GIJMUehhfhqtvyJ48,##%)-/-.116?JSY_hjb\\YWZXNKSbfgPKOTMMSZ^a^OGGHGGLTZ_\\^djqunn|~~~~~b99?DFJHFIHHLQV\\fihkt~~~~~~~~~~~~~magljknuspqoga`][XPJGHGFFCDDDKT__`bl}~~UOPTUWSQU[acddflqo?:FDD@=>FGBCEGMNEAEPSWZ[ev~~~~}~~vhgprrdbmvkcVQNKHEH[gof]bu~~~yj_adiztrw|~~~",-24.186,5), unpck("~~~}{utspliYPNLOUuslko{~~~~~~~~~;&$+5EdF>BS]ja^fotwvs{~}xy~~zw}~~~eRMMVn|od``_abefimuw{~~~~~~~~~~~~~~N+$%#'1@A??>@Q\\Y\\]]kvvw}~|wy~~~~~~~ZPTMOS\\RR_eTJIIMNLJJMMLQWZX]fgnsxwuxyoQHEDMOGGOYm|zwy~~wA.&#$,5EB=>=:;;:;@FSSX\\daaeeirswxylbTPRVZp~pc]XW_goqz~~~~~~~~~zifmtxxvv|~~~~",-25.633,5)]; var tape2 = [ unpck("dD4-/.77NMVEFC:497JWG>5@BUZ`TH;>:FH@I>@BBFDNQDID>8KRY]OODDENLWS\\JMT]SD<B:=HPVeNG88<?MXdtxoLG:410*+,0-2:>M[irvvvxqrpmmqq~~~~YO6.)))#%3<C@;",-33.795,5), unpck("jZNMbUTQQEE>=+*#&*5@&$++=>=9=;-/5;OF6(%31??:853,-59FSC9:64<<AAA<66;=EFILW_aWYhiqiqp|~~~~~kLD=8@>?<5132CBNNTTbbov~~~~~~~~~~~`I0,%)03,/'02B",-21.084,5), unpck("i\\JDPQS\\\\QNE<>/5?JNRHA==<AA22%*DC>;CB1-,87N11=>>CFF::889?CF?=;:8JH[QTOGGCEOPLQLLCMIWUhfsqsd8*(#*(/.;8F?APNOCIHJHIJLPSX[]adhf\\OGGBHGCAGCTR",-22.68,5), unpck("~qlNCLUZGKD?995EGNCGFULMLOOTVY\\kgoruc\\\\ZVZNQGPNSW[Z\\_hkXWQ_UZ>AFNLQPRUZ_`mkje`[YXqp~}~~~~~~dcOQTSLMbapn|{~xvwvzy{|~~~~~~~~|dMR@;4+&$#)%=3",-24.633,5), unpck("v|2243%/,))-+53NEGF22&'#1-?;<7PNWU[U77=@>4,-,**C@IFSRUJ))(,+40CDMH^YYPSXX]a\\[VW``u~~{~~}kciSUGHBBACBLdf__kk{x~}|xvrr~~~~~k\\D@97980//.SSPO",-21.371,5), unpck("kcGHLJEGDIBJGUQ``UVLLEKINMHDSRc_]ZbY*+57D?1=671HKNN>?MN-.=E@@23+,(5355;:@ANOC?=;:?6;9;<>=6522##,,(.8;66?A\\][jjkkhdd`adedea`UVJJ@FINMS^]]Z",-24.622,5), unpck("mR<-,JDC>NCFQ^]c_nh\\\\XTRED=:YUUTONl\\<?<EEXQNMLVV]fjoojgQFABB??C=<922ECLIKDOPD'&&%-**$%#//119:B>?@@CD@@QRc]d]cebRTRSXXVWKNSUVXMO55>>^`SQXU",-23.752,5), unpck("gc_::1/GGCBDC``dcgcoKICB5542biggd[ijBCH,,))++:9MJIIYS^X>+)44;<1-..3399OKKBF@>55>>..%#('$$%%KDA;.07CFEHEY^jide_fNPRROPQU[]TUOXaaJIEHghklfe",-30.339,5)]; ditty.bpm = 105; input.vocoderCarrierNoise = .1; input.vocoderSize = 0; // min=-1,max=1,step=.1 input.vocoderSpeed = 1; // min=-2,max=2,step=.1 input.vocoderPitch = .3; // min=-24,max=24,step=.1 var autom = (tick) => { var st = tick % 32; var bend = 0; var p; var tape; if(st < 16) { tape = tape1; var t = (st+10) % 8; p = ((tick % 4) + [0, 0, 2, -2][(tick>>1)%4]) * 69; bend = clamp01(t*3) * -6 + clamp01((t-.75)*1.7) * 6; } else { tape = tape2; p = (tick % 2) * 69; bend = -12 - clamp01(st-20) * 5; } return [p, bend, tape]; } var sy = synth.def(class { constructor(opt) { this.ops = []; this.nunison = 2; this.tupd = 0; var amp = 1 / this.nunison; for(var i = 0; i < this.nunison; ++i) { var t = this.nunison > 1 ? i / (this.nunison-1) : .5; var pan = t*2-1; var semitn = t * .1; this.ops.push({ p: Math.random(), detune: 2**(semitn/12), fl: (.5 + pan * .5) * amp, fr: (.5 - pan * .5) * amp }); } } process(note, env, tick, opt) { if(this.tupd <= 0) { this.freq = midi_to_hz(note + input.vocoderPitch + opt.bend) * ditty.dt } this.tupd -= ditty.dt * 100; var vl = 0; var vr = 0; for(var i = 0; i < this.ops.length; ++i) { var op = this.ops[i]; vl += (op.p*2-1) * op.fl; vr += (op.p*2-1) * op.fr; op.p += this.freq * op.detune; while(op.p >= 1) { op.p -= 1; } } vl = lerp(vl, Math.random()-.5, input.vocoderCarrierNoise); vr = lerp(vr, Math.random()-.5, input.vocoderCarrierNoise); return [vl, vr]; } }); var vocoder = filter.def(class { constructor(opt) { this.tapepos = 0; var freqs = [123, 294, 481, 746, 1387, 2255, 3403, 4865]; var muls = [.5, .6, 1, 1, 1, 1, 1, 1]; this.bands = []; this.tape = tape1; for(var i = 0; i < 8; ++i) { this.bands.push({ freq: freqs[i], flt: [new SVF({mode:'bp', num:2, q:4}), new SVF({mode:'bp', num:2, q:4})], mul: muls[i] }); } this.tupd = 0; } process(inp, opt) { if(this.tupd <= 0) { this.tupt += 1; this.tape = opt.tape; this.tapepos = opt.tapepos; } this.tupd -= ditty.dt * 100; var vl = 0; var vr = 0; var p = this.tapepos; for(var i = 0; i < this.bands.length; ++i) { var tape = this.tape[i]; var band = this.bands[i]; var pi = ~~p; var l = lerp(tape[pi]||0, tape[pi+1]||0, p-pi); band.flt[0].fc = (2**input.vocoderSize) * band.freq * ditty.dt; band.flt[1].fc = band.flt[0].fc; var mul = clamp01(l-.015) * band.mul / band.flt[0].q; vl += band.flt[0].process(inp[0]) * mul; vr += band.flt[1].process(inp[1]) * mul; } this.ptape += input.vocoderSpeed * 110 * ditty.dt; return [vl*3, vr*3]; } }); const echo = filter.def(class { constructor(opt) { this.lastOut = [0, 0]; var division = opt.division || 3/4; var pan = clamp01((opt.pan || 0)*.5+.5); var sidetime = (opt.sidetime || 0) / ditty.dt; var time = 60 * division / ditty.bpm; this.fb = clamp(opt.feedback || 0, -1, 1); this.kl = 1-pan; this.kr = pan; this.wet = opt.wet || .5; this.stereo = isFinite(opt.stereo) ? opt.stereo : 1; var n = ~~(time / ditty.dt); this.delay = [new Delayline(n), new Delayline(n)]; this.dside = new Delayline(~~sidetime); } process(inv, opt) { this.dside.clock(inv[0]); var l = this.dside.lastOut * this.kl; var r = inv[1] * this.kr; var nextl = l + this.delay[1].lastOut * this.fb; var nextr = r + this.delay[0].lastOut * this.fb; this.lastOut[0] = inv[0] + this.delay[0].lastOut * this.wet; this.lastOut[1] = inv[1] + this.delay[1].lastOut * this.wet; this.delay[0].clock(nextl); this.delay[1].clock(nextr); if(this.stereo != 1) { var m = (this.lastOut[0] + this.lastOut[1])*.5; var s = (this.lastOut[0] - this.lastOut[1])*.5; s *= this.stereo; this.lastOut[0] = m+s; this.lastOut[1] = m-s; } return this.lastOut; } }, {sidetime: .01, division: 2/3, pan: .5, wet: .3, feedback: .5, stereo: 2}); var position = 0; loop( () => { sy.play(b2, { duration: 1e20, release: .1, amp: 4, bend: (t,o) => { position += ditty.dtick * input.vocoderSpeed; if(position < 0) position += 32; return autom(position)[1] }}); sleep(1e20); }, { name: 'vocoder' }) .connect(vocoder.create({tape: (t,o) => autom(position)[2], tapepos: (t,o) => autom(position)[0]})) .connect(echo.create() ); class Delayline { constructor(n) { this.n = ~~n; this.p = 0; this.lastOut = 0; this.data = new Float32Array(n); } clock(input) { this.lastOut = this.data[this.p]; this.data[this.p] = input; if(++this.p >= this.n) this.p = 0; return this.lastOut; } tap(offset) { var x = this.p - offset - 1; x %= this.n; if(x < 0) x += this.n; return this.data[x]; } } // State Variable Filter based on an article by cytomic Sound Music Software // https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf class SVF { constructor(opt) { this.stages = []; this.mode = opt ? opt.mode || 'lp' : 'lp'; this.fc = 0; this.q = 1; this.num = opt ? opt.num || 1 : 1; // g parameter determines cutoff // k parameter = 1/Q for(var i = 0; i < this.num; ++i) { this.stages.push({lp:0,bp:0,hp:0,ap:0,ic1eq:0,ic2eq:0}); } this.q = opt && isFinite(opt.q) ? opt.q : 1; this.fc = opt && isFinite(opt.fc) ? opt.fc : .25; } _clock(s, input, a1, a2, a3, k) { var v1, v2, v3; v3 = input - s.ic2eq; v1 = a1 * s.ic1eq + a2 * v3; v2 = s.ic2eq + a2 * s.ic1eq + a3 * v3; s.ic1eq = 2 * v1 - s.ic1eq; s.ic2eq = 2 * v2 - s.ic2eq; s.lp = v2; s.bp = v1; s.hp = input - k * v1 - v2; s.ap = s.lp + s.hp - k * s.bp; } process(input) { if(this.fc != this._fc) { this._fc = this.fc; this._q = this.q; var fc = this.fc * .5; if (fc >= 0 && fc < .5) { this.g = Math.tan(Math.PI * fc); this.k = 1 / this.q; this.a1 = 1 / (1 + this.g * (this.g + this.k)); this.a2 = this.g * this.a1; this.a3 = this.g * this.a2; } } if(this.q != this._q) { this._q = this.q; this.k = 1 / this.q; this.a1 = 1 / (1 + this.g * (this.g + this.k)); this.a2 = this.g * this.a1; this.a3 = this.g * this.a2; } for(var i = 0; i < this.num; ++i) { this._clock(this.stages[i], input, this.a1, this.a2, this.a3, this.k); this._clock(this.stages[i], input, this.a1, this.a2, this.a3, this.k); input = this.stages[i][this.mode]; } return input; } }