{"version":3,"file":"audio-processor.mjs","sources":["../src/custom-functions.mjs","../src/glitch.mjs","../src/postfix.mjs","../src/audio-processor.mjs"],"sourcesContent":["const bitC = (x, y, z) => x & y ? z : 0;\n\nconst br = (x, size = 8) => {\n\tif(size > 32) {\n\t\tthrow new Error('br() size cannot be greater than 32');\n\t}\n\tlet result = 0;\n\tfor(let index = 0; index < size; ++index) {\n\t\tresult += bitC(x, 2 ** index, 2 ** (size - index - 1));\n\t}\n\treturn result;\n};\n\nconst runtime = { t: 0, sr: 8000, sec: 0 };\nconst clampByte = value => Math.max(0, Math.min(255, value));\nconst phase = value => value * Math.PI / 128;\nconst charval = (value, index = 0) => String(value).charCodeAt(index);\nconst cot = value => 1 / Math.tan(value);\nconst PHI = (1 + Math.sqrt(5)) / 2;\n\n// Dense-compatible helpers. List deliberately returns a normal JavaScript\n// array so it can be indexed with the usual bytebeat expressions, e.g.\n// List(10, 20)[t >> 6 & 1].\nconst List = (...values) => values;\nconst unfold = value => clampByte(value);\n\n// Keep logical helpers numeric: bytebeat formulas can use their result as a\n// gate without relying on JavaScript's operand-returning && and || behavior.\nconst logical = value => value ? 1 : 0;\nconst and = (x, y) => logical(x && y);\nconst or = (x, y) => logical(x || y);\nconst nand = (x, y) => logical(!(x && y));\nconst nor = (x, y) => logical(!(x || y));\nconst not = value => logical(!value);\nconst xor = (x, y) => logical(Boolean(x) !== Boolean(y));\nconst xnor = (x, y) => logical(Boolean(x) === Boolean(y));\n\n// Principal inverse of sine. Clamping keeps the helper defined for bytebeat\n// values that have picked up a little floating-point overshoot.\nconst unsin = value => Math.asin(Math.max(-1, Math.min(1, value)));\nconst tv = value => {\n\tthrow value;\n};\n\n// Dense's acidic note multipliers.\nconst A = value => value * 1;\nconst C = value => value * (32 / 27);\nconst D = value => value * (4 / 3);\n// E keeps the historical acidic-note helper call syntax while coercing to\n// Euler's number when used as a bare constant (for example, E * 2).\nconst E = value => value * (3 / 2);\nObject.defineProperty(E, Symbol.toPrimitive, { value: () => Math.E });\nconst G = value => value * (16 / 9);\n\nconst tri = x => Math.abs(x % 512 - 256);\nconst squr = x => x < 128 ? 0 : 255;\nconst sie = x => (Math.sin(phase(x)) + 1) * 127.5;\nconst smis = x => Math.sin(x / 256 * Math.PI) * 255;\n\n// Keep the inverse hyperbolic functions finite at sine's extrema, then map\n// the result back to the bytebeat range.\nconst arth = value => {\n\tconst sine = Math.max(-1 + 1e-6, Math.min(1 - 1e-6, Math.sin(phase(value))));\n\treturn clampByte((Math.atanh(sine) / Math.atanh(1 - 1e-6) + 1) * 127.5);\n};\n\nconst arthtri = value => arth(tri(value));\n\n// Both tangent variants use a centered byte range. tanMD deliberately keeps\n// its input phase within +/- PI/4 so Math.tan stays finite and predictable.\nconst tanBR = value => {\n\tconst centered = (value - 127.5) / 127.5;\n\treturn (Math.atan(centered * 8) / Math.atan(8) + 1) * 127.5;\n};\nconst tanMD = value => (Math.tan((value - 127.5) * Math.PI / 512) + 1) * 127.5;\nconst tanBS = value => tanBR(sie(value));\n\nconst s3n1 = value => {\n\tvalue = Math.floor(value);\n\treturn value % 2 === 0 ? value / 2 : value * 3 + 1;\n};\nconst tmdsn = value => tanMD(s3n1(value));\nconst tbrsn = value => tanBR(s3n1(value));\n\nlet fsdValues = [1, 1];\nconst gcd = (a, b) => {\n\ta = Math.abs(a);\n\tb = Math.abs(b);\n\twhile(b) {\n\t\t[a, b] = [b, a % b];\n\t}\n\treturn a;\n};\nconst FSD = value => {\n\tconst position = Math.max(0, Math.floor(value));\n\twhile(fsdValues.length <= position) {\n\t\tconst n = fsdValues.length;\n\t\tconst divisor = gcd(fsdValues[n - 1], n);\n\t\tfsdValues.push(divisor === 1 ? fsdValues[n - 1] + n + 1 : fsdValues[n - 1] / divisor);\n\t}\n\treturn fsdValues[position];\n};\n\nconst TUNNEL = value => (43 * (value | runtime.t >> 11) & 255);\nconst patternTwelveValues = [0, 32, 64, 96, 128, 160, 192, 224, 160, 128, 64, 32];\nconst patternTwelve = value => patternTwelveValues[((Math.floor(value) % 12) + 12) % 12];\n\nexport const setRuntimeContext = (t, sr) => {\n\truntime.t = t;\n\truntime.sr = sr;\n\truntime.sec = t / sr;\n};\n\nexport const customFunctions = {\n\tList,\n\tcharval,\n\tunfold,\n\tand,\n\tor,\n\tnand,\n\tnor,\n\tnot,\n\txor,\n\txnor,\n\tunsin,\n\tcot,\n\ttv,\n\tA,\n\tC,\n\tD,\n\tE,\n\tG,\n\tbitC,\n\tbr,\n\tsinf: x => Math.sin(x / (128 / Math.PI)),\n\tcosf: x => Math.cos(x / (128 / Math.PI)),\n\ttanf: x => Math.tan(x / (128 / Math.PI)),\n\tregG: (t, regex) => regex.test(t.toString(2)),\n\tcrpt: (x, y = 8, z) => br(br(x, y) + z, y) ^ br(z, y),\n\tdecrpt: (x, y = 8, z) => br(br(x ^ br(z, y), y) - z, y),\n\tSAWT: x => x % 256,\n\tSQU: x => x % 256 < 128 ? 255 : 0,\n\tTRI: tri,\n\ttri,\n\tsqur,\n\tsie,\n\tsmis,\n\tarth,\n\tarthtri,\n\ttanBR,\n\ttanMD,\n\ttanBS,\n\ts3n1,\n\ttmdsn,\n\ttbrsn,\n\tFSD,\n\tTUNNEL,\n\tpatternTwelve,\n\tdvd: (x, y) => (x & 255) / y,\n\thxdcml: x => (x & 15) * 16\n};\n\nexport const customConstants = { PHI };\n","const glitchToPostfixConversion = {\n\t'a': 't',\n\t'b': 'put',\n\t'c': 'drop',\n\t'd': '*',\n\t'e': '/',\n\t'f': '+',\n\t'g': '-',\n\t'h': '%',\n\t'j': '<<',\n\t'k': '>>',\n\t'l': '&',\n\t'm': '|',\n\t'n': '^',\n\t'o': '~',\n\t'p': 'dup',\n\t'q': 'pick',\n\t'r': 'swap',\n\t's': '<',\n\t't': '>',\n\t'u': '=',\n\t'/': '//',\n\t'!': '\\n',\n\t'.': ' '\n};\n\nconst isCapitalHex = char => char >= '0' && char <= '9' || char >= 'A' && char <= 'F';\n\nexport function glitchToPostfix(code) {\n\tlet input = String(code)\n\t\t.replace('glitch://', '')\n\t\t.replace(/\\/\\/.*$/gm, ' ')\n\t\t.replace(/\\/\\*[\\s\\S]*?\\*\\//g, ' ')\n\t\t.replace('glitch:', '')\n\t\t.replace(/^[^!]*!/, '');\n\tconst postfix = [];\n\tfor(let i = 0; i < input.length; ++i) {\n\t\tlet immediate = '';\n\t\twhile(i < input.length && isCapitalHex(input[i])) {\n\t\t\timmediate += input[i++];\n\t\t}\n\t\tif(immediate) {\n\t\t\tpostfix.push('0x' + immediate);\n\t\t\t--i;\n\t\t} else {\n\t\t\tpostfix.push(glitchToPostfixConversion[input[i]] || input[i]);\n\t\t}\n\t}\n\treturn postfix.join(' ');\n}\n","const binaryOperators = new Map([\n\t['>', '>'],\n\t['<', '<'],\n\t['=', '=='],\n\t['!=', '!='],\n\t['>=', '>='],\n\t['<=', '<='],\n\t['===', '==='],\n\t['!==', '!=='],\n\t['+', '+'],\n\t['-', '-'],\n\t['*', '*'],\n\t['/', '/'],\n\t['%', '%'],\n\t['**', '**'],\n\t['>>', '>>'],\n\t['>>>', '>>>'],\n\t['<<', '<<'],\n\t['&', '&'],\n\t['|', '|'],\n\t['^', '^'],\n\t['&&', '&&'],\n\t['||', '||']\n]);\n\nconst unaryOperators = new Set([\n\t'abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cbrt', 'ceil', 'cos', 'cosh',\n\t'exp', 'expm1', 'floor', 'fround', 'log', 'log10', 'log1p', 'log2', 'round', 'sign', 'sin',\n\t'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'int', 'sinf', 'cosf', 'tanf', 'SAWT', 'SQU', 'TRI',\n\t'hxdcml', 'tri', 'squr', 'sie', 'smis', 'arth', 'arthtri', 'tanBR', 'tanMD', 'tanBS', 's3n1',\n\t'tmdsn', 'tbrsn', 'FSD', 'TUNNEL', 'patternTwelve', 'unfold', 'not', 'unsin', 'tv',\n\t'cot', 'A', 'C', 'D', 'E', 'G'\n]);\n\nconst customArity = new Map([\n\t['bitC', 3], ['br', 2], ['regG', 2], ['crpt', 3], ['decrpt', 3], ['dvd', 2],\n\t['tri', 1], ['squr', 1], ['sie', 1], ['smis', 1], ['arth', 1], ['arthtri', 1],\n\t['tanbr', 1], ['tanmd', 1], ['tanbs', 1], ['s3n1', 1], ['tmdsn', 1], ['tbrsn', 1],\n\t['fsd', 1], ['tunnel', 1], ['patterntwelve', 1], ['List', 2],\n\t['and', 2], ['or', 2], ['nand', 2], ['nor', 2], ['xor', 2], ['xnor', 2], ['charval', 2]\n]);\n\nconst numberToken = /^(?:0x[\\da-f]+|[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)$/i;\nconst identifierToken = /^[A-Za-z_$][\\w$]*$/;\n\nexport function createPostfixStack(size = 256) {\n\tlet pointer = 0;\n\tconst values = new Array(size).fill(0);\n\treturn {\n\t\tpop() {\n\t\t\tpointer = pointer === 0 ? size - 1 : pointer - 1;\n\t\t\treturn values[pointer];\n\t\t},\n\t\tpush(value) {\n\t\t\tvalues[pointer++] = value;\n\t\t\tpointer %= size;\n\t\t},\n\t\tpick(index) {\n\t\t\tlet position = pointer - Math.floor(index) - 1;\n\t\t\twhile(position < 0) {\n\t\t\t\tposition += size;\n\t\t\t}\n\t\t\treturn values[position % size];\n\t\t},\n\t\tput(index, value) {\n\t\t\tlet position = pointer - Math.floor(index);\n\t\t\twhile(position < 0) {\n\t\t\t\tposition += size;\n\t\t\t}\n\t\t\tvalues[position % size] = value;\n\t\t},\n\t\treset() {\n\t\t\tpointer = 0;\n\t\t\tvalues.fill(0);\n\t\t}\n\t};\n}\n\nexport function postfixToFunction(code) {\n\tconst steps = [];\n\tconst tokens = String(code)\n\t\t.replace(/\\/\\/.*$/gm, ' ')\n\t\t.replace(/\\/\\*[\\s\\S]*?\\*\\//g, ' ')\n\t\t.trim().split(/\\s+/).filter(Boolean);\n\tconst push = value => steps.push(`postfixStack.push(${ value });`);\n\tfor(const token of tokens) {\n\t\tconst normalizedToken = token.toLowerCase();\n\t\tconst isUnary = unaryOperators.has(token) || unaryOperators.has(normalizedToken) ||\n\t\t\tunaryOperators.has(token.toUpperCase());\n\t\tconst isCustom = customArity.has(token) || customArity.has(normalizedToken);\n\t\tif(numberToken.test(token) || token === 't' || identifierToken.test(token) &&\n\t\t\t!binaryOperators.has(token) && !isUnary && !isCustom &&\n\t\t\t!['drop', 'dup', 'swap', 'pick', 'put', 'random', '~'].includes(normalizedToken)) {\n\t\t\tpush(token);\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === '>' || normalizedToken === '<' || normalizedToken === '=') {\n\t\t\tsteps.push('var postfixRight = postfixStack.pop();');\n\t\t\tsteps.push('var postfixLeft = postfixStack.pop();');\n\t\t\tconst comparison = normalizedToken === '>' ? 'postfixRight < postfixLeft' :\n\t\t\t\tnormalizedToken === '<' ? 'postfixRight > postfixLeft' :\n\t\t\t\t'postfixLeft == postfixRight';\n\t\t\tsteps.push(`postfixStack.push((${ comparison }) ? 0xFFFFFFFF : 0);`);\n\t\t\tcontinue;\n\t\t}\n\t\tif(binaryOperators.has(token)) {\n\t\t\tsteps.push('var postfixRight = postfixStack.pop();');\n\t\t\tsteps.push('var postfixLeft = postfixStack.pop();');\n\t\t\tsteps.push(`postfixStack.push((postfixLeft ${ binaryOperators.get(token) } postfixRight) | 0);`);\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === '~') {\n\t\t\tsteps.push('postfixStack.push(~postfixStack.pop());');\n\t\t\tcontinue;\n\t\t}\n\t\tif(isUnary || isCustom) {\n\t\t\tconst arity = customArity.get(token) || customArity.get(normalizedToken) || 1;\n\t\t\tconst args = [];\n\t\t\twhile(args.length < arity) {\n\t\t\t\targs.unshift('postfixStack.pop()');\n\t\t\t}\n\t\t\tpush(`${ token }(${ args.join(',') })`);\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'random') {\n\t\t\tpush('random()');\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'dup') {\n\t\t\tpush('postfixStack.pick(0)');\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'drop') {\n\t\t\tsteps.push('postfixStack.pop();');\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'pick') {\n\t\t\tsteps.push('var postfixIndex = postfixStack.pop();');\n\t\t\tpush('postfixStack.pick(postfixIndex)');\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'put') {\n\t\t\tsteps.push('var postfixIndex = postfixStack.pop();');\n\t\t\tsteps.push('var postfixValue = postfixStack.pick(0);');\n\t\t\tsteps.push('postfixStack.put(postfixIndex, postfixValue);');\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'swap') {\n\t\t\tsteps.push('var postfixRight = postfixStack.pop();');\n\t\t\tsteps.push('var postfixLeft = postfixStack.pop();');\n\t\t\tpush('postfixRight');\n\t\t\tpush('postfixLeft');\n\t\t\tcontinue;\n\t\t}\n\t\tpush(token);\n\t}\n\tsteps.push('return postfixStack.pop();');\n\treturn steps.join('\\n');\n}\n\nfunction pop(stack, token) {\n\tif(stack.length === 0) {\n\t\tthrow new SyntaxError(`postfix: missing operand for ${ token }`);\n\t}\n\treturn stack.pop();\n}\n\nexport function postfixToInfix(code) {\n\tconst stack = [];\n\tconst tokens = String(code)\n\t\t.replace(/\\/\\/.*$/gm, ' ')\n\t\t.replace(/\\/\\*[\\s\\S]*?\\*\\//g, ' ')\n\t\t.trim().split(/\\s+/).filter(Boolean);\n\tfor(const token of tokens) {\n\t\tconst normalizedToken = token.toLowerCase();\n\t\tconst isUnary = unaryOperators.has(token) || unaryOperators.has(normalizedToken) ||\n\t\t\tunaryOperators.has(token.toUpperCase());\n\t\tconst isCustom = customArity.has(token) || customArity.has(normalizedToken);\n\t\tif(numberToken.test(token) || token === 't' || identifierToken.test(token) &&\n\t\t\t!binaryOperators.has(token) && !isUnary && !isCustom &&\n\t\t\t!['drop', 'dup', 'swap', 'pick', 'put', 'random', '~'].includes(normalizedToken)) {\n\t\t\tstack.push(token);\n\t\t\tcontinue;\n\t\t}\n\t\tif(binaryOperators.has(token)) {\n\t\t\tconst right = pop(stack, token);\n\t\t\tconst left = pop(stack, token);\n\t\t\tstack.push(`(${ left }${ binaryOperators.get(token) }${ right })`);\n\t\t\tcontinue;\n\t\t}\n\t\tif(token === '~') {\n\t\t\tstack.push(`(~${ pop(stack, token) })`);\n\t\t\tcontinue;\n\t\t}\n\t\tif(isUnary || isCustom) {\n\t\t\tconst arity = customArity.get(token) || customArity.get(normalizedToken) || 1;\n\t\t\tconst args = [];\n\t\t\twhile(args.length < arity) {\n\t\t\t\targs.unshift(pop(stack, token));\n\t\t\t}\n\t\t\tstack.push(`${ token }(${ args.join(',') })`);\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'random') {\n\t\t\tstack.push('random()');\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'dup') {\n\t\t\tstack.push(stack[stack.length - 1]);\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'drop') {\n\t\t\tpop(stack, token);\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'pick') {\n\t\t\tconst index = pop(stack, token);\n\t\t\tif(!numberToken.test(index)) {\n\t\t\t\tthrow new SyntaxError(`postfix: dynamic pick is not supported for ${ index }`);\n\t\t\t}\n\t\t\tconst offset = Math.floor(Number(index));\n\t\t\tstack.push(offset >= 0 && offset < stack.length ? stack[stack.length - 1 - offset] : '0');\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'put') {\n\t\t\tconst index = pop(stack, token);\n\t\t\tif(!numberToken.test(index)) {\n\t\t\t\tthrow new SyntaxError(`postfix: dynamic put is not supported for ${ index }`);\n\t\t\t}\n\t\t\tconst offset = Math.floor(Number(index));\n\t\t\tif(offset >= 0 && offset < stack.length) {\n\t\t\t\tstack[stack.length - 1 - offset] = stack[stack.length - 1];\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif(normalizedToken === 'swap') {\n\t\t\tconst right = pop(stack, token);\n\t\t\tconst left = pop(stack, token);\n\t\t\tstack.push(right, left);\n\t\t\tcontinue;\n\t\t}\n\t\tstack.push(token);\n\t}\n\tif(stack.length !== 1) {\n\t\tthrow new SyntaxError(`postfix: expected one result, got ${ stack.length }`);\n\t}\n\treturn stack[0];\n}\n","import { customConstants, customFunctions, setRuntimeContext } from './custom-functions.mjs';\nimport { glitchToPostfix } from './glitch.mjs';\nimport { createPostfixStack, postfixToFunction } from './postfix.mjs';\n\nconst clamp = (value, min = -1, max = 1) => Math.max(Math.min(value, max), min);\nconst byteFromFloat = value => Math.round((clamp(value) + 1) * 127.5);\nconst byteAt = (value, index) => value >>> ((((index % 3) + 3) % 3) * 8) & 255;\nconst byteToFloat = value => (value & 255) / 127.5 - 1;\nconst byteWave = (value, transform) => transform(value & 255) & 255;\nconst floatWave = (value, transform) => byteToFloat(byteWave(byteFromFloat(value), transform));\nconst triangleByte = value => Math.abs((value & 255) % 512 - 256);\nconst squareByte = value => (value & 255) < 128 ? 0 : 255;\nconst sineByte = value => (Math.sin((value & 255) * Math.PI / 128) + 1) * 127.5;\nconst semisineByte = value => Math.sin((value & 255) * Math.PI / 256) * 255;\nconst selectedBytes = (value, sample, count = 3) => value >>> ((((sample % count) + count) % count) * 8) & 255;\nconst softTan = value => clamp(Math.tanh(Math.tan(clamp(value) * Math.PI / 4)));\nconst deterministicNoise = sample => {\n\tconst n = Math.sin((sample + 1) * 12.9898) * 43758.5453;\n\treturn n - Math.floor(n);\n};\nconst sampleWave = index => {\n\tconst phase = (index & 127) / 128;\n\tconst triangle = 1 - 4 * Math.abs(phase - .5);\n\treturn clamp(Math.sin(phase * Math.PI * 2) * .7 + triangle * .3);\n};\nconst sampleRichWave = index => {\n\tconst phase = (index & 127) / 128;\n\tconst sine = Math.sin(phase * Math.PI * 2);\n\tconst triangle = 1 - 4 * Math.abs(phase - .5);\n\tconst saw = phase * 2 - 1;\n\treturn clamp(sine * .5 + triangle * .3 + saw * .2);\n};\nconst patternTwelveValues = [0, 32, 64, 96, 128, 160, 192, 224, 160, 128, 64, 32];\nconst patternTwelve = index => patternTwelveValues[((Math.floor(index) % 12) + 12) % 12];\nconst functionModes = new Set([\n\t'functribeat', 'funcsqurbeat', 'funcsiebeat', 'funcsmisbeat', 'func2beat', 'func3beat',\n\t'func4beat', 'funcsite'\n]);\n\nclass audioProcessor extends AudioWorkletProcessor {\n\tconstructor(...args) {\n\t\tsuper(...args);\n\t\tthis.audioSample = 0;\n\t\tthis.byteSample = 0;\n\t\tthis.drawMode = 'Points';\n\t\tthis.errorDisplayed = true;\n\t\tthis.func = null;\n\t\tthis.getValues = null;\n\t\tthis.isFuncbeat = false;\n\t\tthis.isGlitch = false;\n\t\tthis.isPostfix = false;\n\t\tthis.postfixStack = createPostfixStack();\n\t\tthis.expressionWindow = {};\n\t\tthis.isPlaying = false;\n\t\tthis.lastByteValue = [null, null, null];\n\t\tthis.lastFuncValue = [null, null, null];\n\t\tthis.lastTime = -1;\n\t\tthis.modeSample = 0;\n\t\tthis.outValue = [0, 0, 0];\n\t\tthis.playbackSpeed = 1;\n\t\tthis.sampleRate = 8000;\n\t\tthis.sampleRatio = 1;\n\t\tthis.srDivisor = 1;\n\t\tthis.customRangeBits = 10;\n\t\tthis.quantizedLevels = 16;\n\t\tthis.audioFiles = new Map();\n\t\tObject.seal(this);\n\t\taudioProcessor.deleteGlobals();\n\t\taudioProcessor.freezeGlobals();\n\t\tthis.port.addEventListener('message', e => this.receiveData(e.data));\n\t\tthis.port.start();\n\t}\n\tstatic deleteGlobals() {\n\t\t// Delete single letter variables to prevent persistent variable errors (covers a good enough range)\n\t\tfor(let i = 0; i < 26; ++i) {\n\t\t\tdelete globalThis[String.fromCharCode(65 + i)];\n\t\t\tdelete globalThis[String.fromCharCode(97 + i)];\n\t\t}\n\t\t// Delete global variables\n\t\tfor(const name in globalThis) {\n\t\t\tif(Object.prototype.hasOwnProperty.call(globalThis, name)) {\n\t\t\t\tdelete globalThis[name];\n\t\t\t}\n\t\t}\n\t}\n\tstatic freezeGlobals() {\n\t\tObject.getOwnPropertyNames(globalThis).forEach(name => {\n\t\t\tconst prop = globalThis[name];\n\t\t\tconst type = typeof prop;\n\t\t\tif((type === 'object' || type === 'function') && name !== 'globalThis') {\n\t\t\t\tObject.freeze(prop);\n\t\t\t}\n\t\t\tif(type === 'function' && Object.prototype.hasOwnProperty.call(prop, 'prototype')) {\n\t\t\t\tObject.freeze(prop.prototype);\n\t\t\t}\n\t\t\tObject.defineProperty(globalThis, name, { writable: false, configurable: false });\n\t\t});\n\t}\n\tstatic getErrorMessage(err, time) {\n\t\tconst when = time === null ? 'compilation' : 't=' + time;\n\t\tif(!(err instanceof Error)) {\n\t\t\treturn `${ when } thrown: ${ typeof err === 'string' ? err : JSON.stringify(err) }`;\n\t\t}\n\t\tconst { message, lineNumber, columnNumber } = err;\n\t\treturn `${ when } error: ${ typeof message === 'string' ? message : JSON.stringify(message) }${\n\t\t\ttypeof lineNumber === 'number' && typeof columnNumber === 'number' ?\n\t\t\t\t` (at line ${ lineNumber - 3 }, character ${ +columnNumber })` : '' }`;\n\t}\n\tprocess(inputs, [chData]) {\n\t\tconst chDataLen = chData[0].length;\n\t\tif(!chDataLen || !this.isPlaying) {\n\t\t\treturn true;\n\t\t}\n\t\tlet time = this.sampleRatio * this.audioSample;\n\t\tlet { byteSample } = this;\n\t\tconst drawBuffer = [];\n\t\tconst isDiagram = ['Combined', 'Diagram', 'col', '2diagram', '2col',\n\t\t\t'heatmap', 'colheatmap', 'Checkerboard', 'Fractal Sticks'].includes(this.drawMode);\n\t\tfor(let i = 0; i < chDataLen; ++i) {\n\t\t\ttime += this.sampleRatio;\n\t\t\tconst currentTime = Math.floor(time / this.srDivisor) * this.srDivisor;\n\t\t\tif(this.lastTime !== currentTime) {\n\t\t\t\tlet funcValue;\n\t\t\t\tconst currentSample = Math.floor(byteSample / this.srDivisor) * this.srDivisor;\n\t\t\t\tthis.modeSample = currentSample;\n\t\t\t\ttry {\n\t\t\t\t\tsetRuntimeContext(currentSample, this.sampleRate);\n\t\t\t\t\tif(this.isFuncbeat) {\n\t\t\t\t\t\tfuncValue = this.func(currentSample / this.sampleRate, this.sampleRate);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfuncValue = this.func(currentSample, this.sampleRate, currentSample / this.sampleRate);\n\t\t\t\t\t}\n\t\t\t\t} catch(err) {\n\t\t\t\t\tif(this.errorDisplayed) {\n\t\t\t\t\t\tthis.errorDisplayed = false;\n\t\t\t\t\t\tthis.sendData({\n\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\tmessage: audioProcessor.getErrorMessage(err, currentSample),\n\t\t\t\t\t\t\t\tisRuntime: true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tfuncValue = NaN;\n\t\t\t\t}\n\t\t\t\t// Dense uses [left, mono, right] for three-channel output. Keep\n\t\t\t\t// the existing two-item [left, right] convention compatible by\n\t\t\t\t// placing its channels on the outside and leaving the center quiet.\n\t\t\t\tif(Array.isArray(funcValue)) {\n\t\t\t\t\tfuncValue = funcValue.length >= 3 ?\n\t\t\t\t\t\t[funcValue[0], funcValue[1], funcValue[2]] :\n\t\t\t\t\t\t[funcValue[0], 0, funcValue[1]];\n\t\t\t\t} else {\n\t\t\t\t\tfuncValue = [funcValue, funcValue, funcValue];\n\t\t\t\t}\n\t\t\t\tlet hasValue = false;\n\t\t\t\tlet ch = 3;\n\t\t\t\twhile(ch--) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfuncValue[ch] = +funcValue[ch];\n\t\t\t\t\t} catch(err) {\n\t\t\t\t\t\tfuncValue[ch] = NaN;\n\t\t\t\t\t}\n\t\t\t\t\tif(isDiagram) {\n\t\t\t\t\t\tif(!isNaN(funcValue[ch])) {\n\t\t\t\t\t\t\tthis.outValue[ch] = this.getValues(funcValue[ch], ch);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.lastByteValue[ch] = NaN;\n\t\t\t\t\t\t}\n\t\t\t\t\t\thasValue = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif(funcValue[ch] === this.lastFuncValue[ch]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if(!isNaN(funcValue[ch])) {\n\t\t\t\t\t\tthis.outValue[ch] = this.getValues(funcValue[ch], ch);\n\t\t\t\t\t\thasValue = true;\n\t\t\t\t\t} else if(!isNaN(this.lastFuncValue[ch])) {\n\t\t\t\t\t\tthis.lastByteValue[ch] = NaN;\n\t\t\t\t\t\thasValue = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(hasValue) {\n\t\t\t\t\tdrawBuffer.push({\n\t\t\t\t\t\tt: currentSample,\n\t\t\t\t\t\tvalue: [...this.lastByteValue]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbyteSample += currentTime - this.lastTime;\n\t\t\t\tthis.lastFuncValue = funcValue;\n\t\t\t\tthis.lastTime = currentTime;\n\t\t\t}\n\t\t\t// The worklet's internal value keeps the Dense-compatible\n\t\t\t// [left, mono, right] layout for the scope, but the audio output is\n\t\t\t// a normal stereo pair. Writing the internal center value into the\n\t\t\t// browser's right channel makes [left, right] formulas sound wrong.\n\t\t\tif(chData.length >= 2) {\n\t\t\t\tchData[0][i] = this.outValue[0] ?? 0;\n\t\t\t\tchData[1][i] = this.outValue[2] ?? 0;\n\t\t\t} else if(chData.length === 1) {\n\t\t\t\tchData[0][i] = this.outValue[0] ?? 0;\n\t\t\t}\n\t\t}\n\t\tif(Math.abs(byteSample) > Number.MAX_SAFE_INTEGER) {\n\t\t\tthis.resetTime();\n\t\t\treturn true;\n\t\t}\n\t\tthis.audioSample += chDataLen;\n\t\tlet isSend = false;\n\t\tconst data = {};\n\t\tif(byteSample !== this.byteSample) {\n\t\t\tisSend = true;\n\t\t\tdata.byteSample = this.byteSample = byteSample;\n\t\t}\n\t\tif(drawBuffer.length) {\n\t\t\tisSend = true;\n\t\t\tdata.drawBuffer = drawBuffer;\n\t\t}\n\t\tif(isSend) {\n\t\t\tthis.sendData(data);\n\t\t}\n\t\treturn true;\n\t}\n\treceiveData(data) {\n\t\tif(data.byteSample !== undefined) {\n\t\t\tthis.byteSample = +data.byteSample || 0;\n\t\t\tthis.resetValues();\n\t\t}\n\t\tif(data.errorDisplayed === true) {\n\t\t\tthis.errorDisplayed = true;\n\t\t}\n\t\tif(data.isPlaying !== undefined) {\n\t\t\tthis.isPlaying = data.isPlaying;\n\t\t}\n\t\tif(data.srDivisor !== undefined) {\n\t\t\tthis.srDivisor = data.srDivisor;\n\t\t}\n\t\tif(data.customRangeBits !== undefined) {\n\t\t\tthis.customRangeBits = Math.min(16, Math.max(1, Math.round(+data.customRangeBits || 10)));\n\t\t}\n\t\tif(data.quantizedLevels !== undefined) {\n\t\t\tthis.quantizedLevels = Math.min(32, Math.max(2, Math.round(+data.quantizedLevels || 16)));\n\t\t}\n\t\tif(data.playbackSpeed !== undefined) {\n\t\t\tconst sampleRatio = this.sampleRatio / this.playbackSpeed;\n\t\t\tthis.playbackSpeed = data.playbackSpeed;\n\t\t\tthis.setSampleRatio(sampleRatio);\n\t\t}\n\t\tif(data.mode !== undefined) {\n\t\t\tthis.isFuncbeat = data.mode === 'Funcbeat' || data.mode === 'Signed Funcbeat' ||\n\t\t\t\tfunctionModes.has(data.mode);\n\t\t\tthis.isGlitch = data.mode === 'Glitch';\n\t\t\tthis.isPostfix = data.mode === 'postfix' || data.mode === 'Glitch';\n\t\t\tconst setFloat = (value, ch) => {\n\t\t\t\tconst outValue = clamp(value);\n\t\t\t\tthis.lastByteValue[ch] = byteFromFloat(outValue);\n\t\t\t\treturn outValue;\n\t\t\t};\n\t\t\tconst setRawFloat = (value, ch) => {\n\t\t\t\tthis.lastByteValue[ch] = byteFromFloat(value);\n\t\t\t\treturn value;\n\t\t\t};\n\t\t\tconst functionMode = (func, scale = 1) => (funcValue, ch) =>\n\t\t\t\tsetFloat(func(funcValue * scale), ch);\n\t\t\tswitch(data.mode) {\n\t\t\tcase 'Bytebeat':\n\t\t\tcase 'postfix':\n\t\t\tcase 'Glitch':\n\t\t\tcase '256Beat':\n\t\t\t\tthis.getValues = (funcValue, ch) => (this.lastByteValue[ch] = funcValue & 255) / 127.5 - 1;\n\t\t\t\tbreak;\n\t\t\tcase 'Signed Bytebeat':\n\t\t\t\tthis.getValues = (funcValue, ch) =>\n\t\t\t\t\t(this.lastByteValue[ch] = (funcValue + 128) & 255) / 127.5 - 1;\n\t\t\t\tbreak;\n\t\t\tcase 'Wordbeat':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst wordValue = funcValue & 65535;\n\t\t\t\t\tthis.lastByteValue[ch] = wordValue / 256 & 255;\n\t\t\t\t\treturn wordValue / 32767.5 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'Signed Wordbeat':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst wordValue = funcValue + 32768 & 65535;\n\t\t\t\t\tthis.lastByteValue[ch] = wordValue / 256 & 255;\n\t\t\t\t\treturn wordValue / 32767.5 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase '2beat (Valve2x)':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(funcValue / 255, ch);\n\t\t\t\tbreak;\n\t\t\tcase 'Signed 2Beat (Valve2x)':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat((funcValue + 1) / 255, ch);\n\t\t\t\tbreak;\n\t\t\tcase 'LogarithmicBeat (log scale)':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(\n\t\t\t\t\tMath.log2(Math.abs(funcValue) + 1) / 8 - 1, ch);\n\t\t\t\tbreak;\n\t\t\tcase '2048 Mode (0-2047)':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tthis.lastByteValue[ch] = funcValue / 8 & 255;\n\t\t\t\t\treturn (funcValue & 2047) / 1023.5 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'Custom Range':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst rangeSize = 2 ** this.customRangeBits;\n\t\t\t\t\tconst rangeMax = rangeSize - 1;\n\t\t\t\t\treturn setFloat((funcValue & rangeMax) / (rangeMax / 2) - 1, ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'Quantized Beat':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst step = 256 / this.quantizedLevels;\n\t\t\t\t\tconst quantizedValue = Math.round((funcValue & 255) / step) * step & 255;\n\t\t\t\t\tthis.lastByteValue[ch] = quantizedValue;\n\t\t\t\t\treturn quantizedValue / 127.5 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'PWM Beat':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst pulseWidth = funcValue & 255;\n\t\t\t\t\tconst carrier = this.modeSample & 255;\n\t\t\t\t\treturn setFloat(carrier < pulseWidth ? 1 : -1, ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'AM Beat (Amplitude Modulation)':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst modulator = (funcValue & 255) / 127.5 - 1;\n\t\t\t\t\tconst carrier = Math.sin(2 * Math.PI * 440 * this.modeSample / this.sampleRate);\n\t\t\t\t\treturn setFloat(carrier * (1 + modulator * .5), ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'PM Beat (Phase Modulation)':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst modulator = (funcValue & 255) / 127.5 - 1;\n\t\t\t\t\tconst phase = 2 * Math.PI * 440 * this.modeSample / this.sampleRate;\n\t\t\t\t\treturn setFloat(Math.sin(phase + modulator * Math.PI), ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'FM Beat (Frequency Modulation)':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst modulator = (funcValue & 255) / 127.5 - 1;\n\t\t\t\t\tconst phase = 2 * Math.PI * 440 * this.modeSample / this.sampleRate;\n\t\t\t\t\treturn setFloat(Math.sin(phase * (1 + modulator * .25)), ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'Shifted Sawtooth Beat':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst sawtooth = (this.modeSample + (funcValue & 255)) & 255;\n\t\t\t\t\tthis.lastByteValue[ch] = sawtooth;\n\t\t\t\t\treturn sawtooth / 127.5 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'FloatLimit (Low-precision float)':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tif(!Number.isFinite(funcValue) || funcValue === 0) return setFloat(funcValue, ch);\n\t\t\t\t\tconst exponent = Math.floor(Math.log2(Math.abs(funcValue)));\n\t\t\t\t\tconst step = 2 ** (exponent - 10);\n\t\t\t\t\treturn setFloat(Math.round(funcValue / step) * step, ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'Floatbeat':\n\t\t\tcase 'Signed Floatbeat':\n\t\t\tcase 'Funcbeat':\n\t\t\tcase 'Signed Funcbeat':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst outValue = Math.max(Math.min(funcValue, 1), -1);\n\t\t\t\t\tthis.lastByteValue[ch] = Math.round((outValue + 1) * 127.5);\n\t\t\t\t\treturn outValue;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'Bitbeat':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tthis.lastByteValue[ch] = funcValue & 1 ? 255 : 0;\n\t\t\t\t\treturn (funcValue & 1) - 0.5;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'Signed Bitbeat':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst outValue = funcValue & 1 ? 1 : -1;\n\t\t\t\t\tthis.lastByteValue[ch] = outValue === 1 ? 255 : 0;\n\t\t\t\t\treturn outValue;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase '2048':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tthis.lastByteValue[ch] = funcValue / 8 & 255;\n\t\t\t\t\treturn (funcValue & 2047) / 1023.5 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'Logmode':\n\t\t\t\tthis.getValues = (funcValue, ch) =>\n\t\t\t\t\t(this.lastByteValue[ch] = Math.log2(funcValue) * 32 & 255) / 127.5 - 1;\n\t\t\t\tbreak;\n\t\t\tcase 'LogHack':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst sign = funcValue < 0 ? -32 : 32;\n\t\t\t\t\tthis.lastByteValue[ch] = Math.log2(Math.abs(funcValue)) * sign & 255;\n\t\t\t\t\treturn this.lastByteValue[ch] / 127.5 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'LogHack2':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tif(funcValue === 0) {\n\t\t\t\t\t\tthis.lastByteValue[ch] = 128;\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tconst negative = funcValue < 0;\n\t\t\t\t\tthis.lastByteValue[ch] =\n\t\t\t\t\t\t(Math.log2(Math.abs(funcValue)) * (negative ? -16 : 16) + (negative ? -127 : 128)) & 255;\n\t\t\t\t\treturn this.lastByteValue[ch] / 127.5 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'Sinmode':\n\t\t\t\tthis.getValues = functionMode(Math.sin);\n\t\t\t\tbreak;\n\t\t\tcase 'Sinfreq':\n\t\t\tcase 'Sinfmode':\n\t\t\t\tthis.getValues = functionMode(Math.sin, Math.PI / 128);\n\t\t\t\tbreak;\n\t\t\tcase 'Logmode10':\n\t\t\t\tthis.getValues = (funcValue, ch) =>\n\t\t\t\t\t(this.lastByteValue[ch] = Math.log2(funcValue) * 10 & 255) / 127.5 - 1;\n\t\t\t\tbreak;\n\t\t\tcase 'RAW':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tthis.lastByteValue[ch] = funcValue;\n\t\t\t\t\treturn funcValue / 127.5 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'Signed RAW':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tthis.lastByteValue[ch] = funcValue + 128;\n\t\t\t\t\treturn (funcValue + 128) / 127.5 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'FloatRAW':\n\t\t\tcase 'No Limit':\n\t\t\t\tthis.getValues = setRawFloat;\n\t\t\t\tbreak;\n\t\t\tcase 'Inverted Bytebeat':\n\t\t\t\tthis.getValues = (funcValue, ch) =>\n\t\t\t\t\t(this.lastByteValue[ch] = (funcValue + 1) * -1 & 255) / 127.5 - 1;\n\t\t\t\tbreak;\n\t\t\tcase 'Tanmode':\n\t\t\t\tthis.getValues = functionMode(Math.tan, Math.PI / 128);\n\t\t\t\tbreak;\n\t\t\tcase '4080':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tthis.lastByteValue[ch] = funcValue / 16 & 255;\n\t\t\t\t\treturn (funcValue & 4080) / 2040 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase '8160':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tthis.lastByteValue[ch] = funcValue / 32 & 255;\n\t\t\t\t\treturn (funcValue & 8160) / 4080 - 1;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'Tanhmode':\n\t\t\t\tthis.getValues = functionMode(Math.tanh, Math.PI / 128);\n\t\t\t\tbreak;\n\t\t\tcase 'Atanmode':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(Math.atan(funcValue * Math.PI / 128) * 2 / Math.PI, ch);\n\t\t\t\tbreak;\n\t\t\tcase 'Cosmode':\n\t\t\t\tthis.getValues = functionMode(Math.cos, Math.PI / 128);\n\t\t\t\tbreak;\n\t\t\tcase 'Absmode':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(Math.abs((funcValue & 255) / 127.5 - 1), ch);\n\t\t\t\tbreak;\n\t\t\tcase 'Cbrtmode':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(Math.cbrt(funcValue / 128), ch);\n\t\t\t\tbreak;\n\t\t\tcase 'Sinhmode':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(\n\t\t\t\t\tMath.sinh(funcValue * Math.PI / 128) / Math.sinh(Math.PI), ch);\n\t\t\t\tbreak;\n\t\t\tcase 'Asinmode':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(\n\t\t\t\t\tMath.asin(clamp(funcValue / 128, -1, 1)) * 2 / Math.PI, ch);\n\t\t\t\tbreak;\n\t\t\tcase 'Acosmode':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(\n\t\t\t\t\tMath.acos(clamp(funcValue / 128, -1, 1)) * 2 / Math.PI - 1, ch);\n\t\t\t\tbreak;\n\t\t\tcase 'Coshmode':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(\n\t\t\t\t\t(Math.cosh(funcValue * Math.PI / 128) - 1) / (Math.cosh(Math.PI) - 1) * 2 - 1, ch);\n\t\t\t\tbreak;\n\t\t\tcase 'Sqrtmode':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(Math.sqrt(funcValue & 255) / 16 - 1, ch);\n\t\t\t\tbreak;\n\t\t\tcase 'Tanfmode':\n\t\t\t\tthis.getValues = functionMode(Math.tan, Math.PI / 128);\n\t\t\t\tbreak;\n\t\t\tcase 'Cosfmode':\n\t\t\t\tthis.getValues = functionMode(Math.cos, Math.PI / 128);\n\t\t\t\tbreak;\n\t\t\tcase 'cscmode':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst sine = Math.sin(funcValue * Math.PI / 128);\n\t\t\t\t\treturn setFloat(1 / sine / 2, ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'bytetribeat':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst value = selectedBytes(funcValue, this.modeSample);\n\t\t\t\t\tthis.lastByteValue[ch] = value;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'bytesqurbeat':\n\t\t\tcase 'bytesiebeat':\n\t\t\tcase 'bytesmisbeat': {\n\t\t\t\tconst transform = data.mode === 'bytesqurbeat' ? squareByte :\n\t\t\t\t\tdata.mode === 'bytesiebeat' ? sineByte : semisineByte;\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst value = byteWave(selectedBytes(funcValue, this.modeSample), transform);\n\t\t\t\t\tthis.lastByteValue[ch] = value;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'floattribeat':\n\t\t\tcase 'floatsqurbeat':\n\t\t\tcase 'floatsiebeat':\n\t\t\tcase 'floatsmisbeat': {\n\t\t\t\tconst transform = data.mode === 'floattribeat' ? triangleByte :\n\t\t\t\t\tdata.mode === 'floatsqurbeat' ? squareByte :\n\t\t\t\t\tdata.mode === 'floatsiebeat' ? sineByte : semisineByte;\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst value = byteWave(selectedBytes(funcValue, this.modeSample), transform);\n\t\t\t\t\tthis.lastByteValue[ch] = value;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'functribeat':\n\t\t\tcase 'funcsqurbeat':\n\t\t\tcase 'funcsiebeat':\n\t\t\tcase 'funcsmisbeat': {\n\t\t\t\tconst transform = data.mode === 'functribeat' ? triangleByte :\n\t\t\t\t\tdata.mode === 'funcsqurbeat' ? squareByte :\n\t\t\t\t\tdata.mode === 'funcsiebeat' ? sineByte : semisineByte;\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst value = byteWave(byteFromFloat(funcValue), transform);\n\t\t\t\t\tthis.lastByteValue[ch] = value;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'FSDmode':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst value = customFunctions.FSD(this.modeSample);\n\t\t\t\t\tthis.lastByteValue[ch] = value & 255;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'TUNNELmode':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst value = customFunctions.TUNNEL(funcValue);\n\t\t\t\t\tthis.lastByteValue[ch] = value;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'pattern-67':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst motif = [67, 134, 201, 67, 100, 167, 234, 67][(this.modeSample >> 4) & 7];\n\t\t\t\t\tconst value = (motif + (funcValue & 255)) >> 1;\n\t\t\t\t\tthis.lastByteValue[ch] = value;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'pattern-69':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst motif = [69, 138, 207, 69, 103, 172, 241, 69][(this.modeSample >> 4) & 7];\n\t\t\t\t\tconst value = (motif + (funcValue & 255)) >> 1;\n\t\t\t\t\tthis.lastByteValue[ch] = value;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'pattern-twelve':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst value = ((funcValue & 255) + patternTwelve(this.modeSample >> 6)) >> 1;\n\t\t\t\t\tthis.lastByteValue[ch] = value;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'one-pattern':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst value = ((funcValue & 255) + 128) >> 1;\n\t\t\t\t\tthis.lastByteValue[ch] = value;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'duo-pattern':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst value = ((funcValue & 255) + ((this.modeSample >> 5) & 1 ? 192 : 64)) >> 1;\n\t\t\t\t\tthis.lastByteValue[ch] = value;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'tri-pattern':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst motifs = [48, 128, 208];\n\t\t\t\t\tconst value = ((funcValue & 255) + motifs[(this.modeSample >> 5) % 3]) >> 1;\n\t\t\t\t\tthis.lastByteValue[ch] = value;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'float6beat':\n\t\t\tcase 'float7beat': {\n\t\t\t\tconst count = data.mode === 'float6beat' ? 6 : 7;\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst x = clamp(funcValue);\n\t\t\t\t\tconst values = [x, Math.sin(x * Math.PI / 2), softTan(x),\n\t\t\t\t\t\tclamp(x * x * Math.sign(x)), clamp(x * .5 + Math.sin(x * Math.PI) * .5),\n\t\t\t\t\t\tclamp(Math.tanh(x * 2)), clamp(Math.sin(x * Math.PI * 3 / 2))];\n\t\t\t\t\treturn setFloat(values[this.modeSample % count], ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'func2beat':\n\t\t\t\tthis.getValues = (funcValue, ch) =>\n\t\t\t\t\tsetFloat(this.modeSample & 1 ? softTan(funcValue) : Math.sin(clamp(funcValue) * Math.PI / 2), ch);\n\t\t\t\tbreak;\n\t\t\tcase 'func3beat':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst slot = this.modeSample % 3;\n\t\t\t\t\treturn setFloat([Math.sin(clamp(funcValue) * Math.PI / 2), softTan(funcValue),\n\t\t\t\t\t\tclamp(Math.tanh(funcValue * 1.5))][slot], ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'func4beat':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst slot = this.modeSample & 3;\n\t\t\t\t\treturn setFloat([Math.sin(clamp(funcValue) * Math.PI / 2), softTan(funcValue),\n\t\t\t\t\t\tclamp(Math.tanh(funcValue * 1.5)), triangleByte(byteFromFloat(funcValue)) / 127.5 - 1][slot], ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'bytesite':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst a = byteAt(funcValue, 0), b = byteAt(funcValue, 1), c = byteAt(funcValue, 2);\n\t\t\t\t\tconst selected = [a, b, c][this.modeSample % 3];\n\t\t\t\t\tconst value = (selected * 2 + ((a + b + c) / 3)) / 3;\n\t\t\t\t\tthis.lastByteValue[ch] = value & 255;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'floatsite':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst a = byteToFloat(byteAt(funcValue, 0));\n\t\t\t\t\tconst b = byteToFloat(byteAt(funcValue, 1));\n\t\t\t\t\tconst c = byteToFloat(byteAt(funcValue, 2));\n\t\t\t\t\tconst value = [a, b, c][this.modeSample % 3] * .65 + Math.sin((a + b + c) * Math.PI) * .35;\n\t\t\t\t\treturn setFloat(value, ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'funcsite':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst x = clamp(funcValue);\n\t\t\t\t\tconst values = [Math.sin(x * Math.PI / 2), softTan(x),\n\t\t\t\t\t\ttriangleByte(byteFromFloat(x)) / 127.5 - 1];\n\t\t\t\t\tconst reduced = ((byteFromFloat(x) & 240) | ((byteFromFloat(x) >> 3) & 15)) / 127.5 - 1;\n\t\t\t\t\tconst value = values[this.modeSample % 3] * .7 + reduced * .2 +\n\t\t\t\t\t\t(this.modeSample & 8 ? x * .1 : 0);\n\t\t\t\t\treturn setFloat(value, ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'bit2beat':\n\t\t\tcase 'bit3beat':\n\t\t\tcase 'bit4beat':\n\t\t\tcase 'bit5beat': {\n\t\t\t\tconst width = Number(data.mode.slice(3, 4));\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst slots = Math.floor(8 / width) || 1;\n\t\t\t\t\tconst value = (funcValue >>> ((this.modeSample % slots) * width)) & ((1 << width) - 1);\n\t\t\t\t\treturn setFloat(value / ((1 << width) - 1) * 2 - 1, ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'samplemode':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(sampleWave(funcValue), ch);\n\t\t\t\tbreak;\n\t\t\tcase 'sample2mode':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(\n\t\t\t\t\tMath.sin((funcValue & 63) / 64 * Math.PI * 2) * .6 +\n\t\t\t\t\t(1 - 4 * Math.abs((funcValue & 63) / 64 - .5)) * .4, ch);\n\t\t\t\tbreak;\n\t\t\tcase 'sample3mode':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(sampleRichWave(funcValue), ch);\n\t\t\t\tbreak;\n\t\t\tcase 'sample4mode':\n\t\t\tcase 'sample5mode': {\n\t\t\t\tconst count = data.mode === 'sample4mode' ? 4 : 5;\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst slot = this.modeSample % count;\n\t\t\t\t\tconst index = funcValue >>> (slot * (data.mode === 'sample4mode' ? 2 : 1));\n\t\t\t\t\treturn setFloat(sampleRichWave(index), ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'random6beat':\n\t\t\tcase 'random7beat': {\n\t\t\t\tconst count = data.mode === 'random6beat' ? 6 : 7;\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst slot = this.modeSample % count;\n\t\t\t\t\tconst warped = (funcValue ^ (slot * 0x2d)) + Math.floor(deterministicNoise(this.modeSample + slot) * 256);\n\t\t\t\t\treturn setFloat(((warped & 255) / 127.5) - 1, ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'malware2wavebeat':\n\t\t\tcase 'malware4wavebeat':\n\t\t\tcase 'malware5wavebeat':\n\t\t\tcase 'malware6wavebeat': {\n\t\t\t\tconst stages = data.mode === 'malware2wavebeat' ? 2 : data.mode === 'malware4wavebeat' ? 4 : 5;\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tlet value = funcValue | 0;\n\t\t\t\t\tfor(let stage = 0; stage < stages; ++stage) {\n\t\t\t\t\t\tvalue = ((value ^ (this.modeSample >> (stage + 2))) +\n\t\t\t\t\t\t\t((value << (stage + 1)) | (value >>> (31 - stage)))) | 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn setFloat(Math.tanh(value / 384), ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'NeurofunkMode':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tlet value = funcValue | 0;\n\t\t\t\t\tvalue = ((value ^ (value >> 3)) + (this.modeSample * 13)) | 0;\n\t\t\t\t\tvalue = ((value & 0x55) << 1 | (value & 0xaa) >> 1) ^ (value >> 5);\n\t\t\t\t\treturn setFloat(Math.tanh((value & 255) / 48 - 2.65), ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'reduxflag':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst value = ((funcValue & 240) | ((funcValue >> 3) & 15)) & 255;\n\t\t\t\t\tconst tremolo = this.modeSample & 32 ? .72 : 1;\n\t\t\t\t\treturn setFloat(Math.tanh(((value / 127.5) - 1) * tremolo), ch);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'complex-saw-melody':\n\t\t\t\tthis.getValues = (funcValue, ch) => {\n\t\t\t\t\tconst value = (funcValue * (3 + ((this.modeSample >> 10) & 7)) +\n\t\t\t\t\t\t(this.modeSample >> 4) * ((this.modeSample >> 12) & 3)) & 255;\n\t\t\t\t\treturn byteToFloat(value);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'DoubleBeat':\n\t\t\t\tthis.getValues = (funcValue, ch) =>\n\t\t\t\t\t(this.lastByteValue[ch] = funcValue * 2 & 255) / 127.5 - 1;\n\t\t\t\tbreak;\n\t\t\tcase '2Beat':\n\t\t\t\tthis.getValues = (funcValue, ch) => setFloat(funcValue / 2, ch);\n\t\t\t\tbreak;\n\t\t\tcase '127Beat':\n\t\t\t\tthis.getValues = (funcValue, ch) =>\n\t\t\t\t\t(this.lastByteValue[ch] = funcValue & 127) / 63.5 - 1;\n\t\t\t\tbreak;\n\t\t\tdefault: this.getValues = (funcValue, ch) => (this.lastByteValue[ch] = NaN);\n\t\t\t}\n\t\t}\n\t\tif(data.drawMode !== undefined) {\n\t\t\tthis.drawMode = data.drawMode;\n\t\t}\n\t\tif(data.audioFiles !== undefined) {\n\t\t\tthis.audioFiles = new Map(data.audioFiles);\n\t\t}\n\t\tif(data.setFunction !== undefined) {\n\t\t\tthis.setFunction(data.setFunction);\n\t\t}\n\t\tif(data.resetTime === true) {\n\t\t\tthis.resetTime();\n\t\t}\n\t\tif(data.sampleRate !== undefined) {\n\t\t\tthis.sampleRate = data.sampleRate;\n\t\t}\n\t\tif(data.sampleRatio !== undefined) {\n\t\t\tthis.setSampleRatio(data.sampleRatio);\n\t\t}\n\t}\n\tsendData(data) {\n\t\tthis.port.postMessage(data);\n\t}\n\tresetTime() {\n\t\tthis.byteSample = 0;\n\t\tthis.resetValues();\n\t\tthis.sendData({ byteSample: 0 });\n\t}\n\tresetValues() {\n\t\tthis.audioSample = 0;\n\t\tthis.postfixStack.reset();\n\t\tthis.lastByteValue = this.lastFuncValue = [null, null, null];\n\t\tthis.lastTime = -1;\n\t\tthis.modeSample = 0;\n\t\tthis.outValue = [0, 0, 0];\n\t}\n\tsetFunction(codeText) {\n\t\t// Create shortened Math functions\n\t\tthis.expressionWindow = {};\n\t\tconst customNames = Object.keys(customFunctions);\n\t\tconst customConstantNames = Object.keys(customConstants);\n\t\tconst customBindings = new Set([...customNames, ...customConstantNames]);\n\t\tconst params = Object.getOwnPropertyNames(Math).filter(name => !customBindings.has(name));\n\t\tconst values = params.map(k => Math[k]);\n\t\tconst audioFunctions = {\n\t\t\taudioIN: (index, channel = 0, file = 0) => {\n\t\t\t\tconst audioFile = this.audioFiles.get(+file);\n\t\t\t\tif(!audioFile || !audioFile.data || !audioFile.channels) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tconst frame = Math.floor(index);\n\t\t\t\tconst audioChannel = ((Math.floor(channel) % audioFile.channels) + audioFile.channels) %\n\t\t\t\t\taudioFile.channels;\n\t\t\t\tconst sampleIndex = frame * audioFile.channels + audioChannel;\n\t\t\t\treturn frame >= 0 && sampleIndex < audioFile.data.length ? audioFile.data[sampleIndex] : 0;\n\t\t\t},\n\t\t\taudioLength: (file = 0) => {\n\t\t\t\tconst audioFile = this.audioFiles.get(+file);\n\t\t\t\treturn audioFile && audioFile.channels ? audioFile.data.length / audioFile.channels : 0;\n\t\t\t}\n\t\t};\n\t\tconst audioNames = Object.keys(audioFunctions);\n\t\tparams.push('int', 'window', ...customNames, ...customConstantNames, ...audioNames,\n\t\t\t'mouseX', 'mouseY', 'width', 'height', 'tiltX', 'tiltY', 'compass');\n\t\tvalues.push(Math.floor, this.expressionWindow, ...customNames.map(name => customFunctions[name]),\n\t\t\t...customConstantNames.map(name => customConstants[name]),\n\t\t\t...audioNames.map(name => audioFunctions[name]), 0, 0, 1, 1, 0, 0, 0);\n\t\taudioProcessor.deleteGlobals();\n\t\t// Code testing\n\t\tlet isCompiled = false;\n\t\tconst oldFunc = this.func;\n\t\ttry {\n\t\t\tif(this.isFuncbeat) {\n\t\t\t\tthis.func = new Function(...params, codeText).bind(globalThis, ...values);\n\t\t\t} else {\n\t\t\t\tif(this.isPostfix) {\n\t\t\t\t\tif(this.isGlitch) {\n\t\t\t\t\t\tcodeText = glitchToPostfix(codeText);\n\t\t\t\t\t}\n\t\t\t\t\tthis.postfixStack = createPostfixStack();\n\t\t\t\t\tthis.func = new Function(...params, 'postfixStack', 't', 'sr', 'sec', postfixToFunction(codeText))\n\t\t\t\t\t\t.bind(globalThis, ...values, this.postfixStack);\n\t\t\t\t} else {\n\t\t\t\t\tthis.func = new Function(...params, 't', 'sr', 'sec', `return 0,\\n${ codeText || 0 };`)\n\t\t\t\t\t\t.bind(globalThis, ...values);\n\t\t\t\t}\n\t\t\t}\n\t\t\tisCompiled = true;\n\t\t\tif(this.isFuncbeat) {\n\t\t\t\tthis.func = this.func();\n\t\t\t\tthis.func(0, this.sampleRate);\n\t\t\t} else {\n\t\t\t\tsetRuntimeContext(0, this.sampleRate);\n\t\t\t\tthis.func(0, this.sampleRate, 0);\n\t\t\t}\n\t\t} catch(err) {\n\t\t\tif(!isCompiled) {\n\t\t\t\tthis.func = oldFunc;\n\t\t\t}\n\t\t\tthis.errorDisplayed = false;\n\t\t\tthis.sendData({\n\t\t\t\terror: { message: audioProcessor.getErrorMessage(err, isCompiled ? 0 : null), isCompiled },\n\t\t\t\tupdateUrl: isCompiled\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tthis.errorDisplayed = false;\n\t\tthis.sendData({ error: { message: '', isCompiled }, updateUrl: true });\n\t}\n\tsetSampleRatio(sampleRatio) {\n\t\tconst timeOffset = Math.floor(this.sampleRatio * this.audioSample) - this.lastTime;\n\t\tthis.sampleRatio = sampleRatio * this.playbackSpeed;\n\t\tthis.lastTime = Math.floor(this.sampleRatio * this.audioSample) - timeOffset;\n\t}\n}\n\nregisterProcessor('audioProcessor', audioProcessor);\n"],"names":["bitC","x","y","z","br","size","Error","result","index","runtime","t","sr","sec","clampByte","value","Math","max","min","phase","PI","PHI","sqrt","logical","E","Object","defineProperty","Symbol","toPrimitive","tri","abs","sie","sin","arth","sine","atanh","tanBR","centered","atan","tanMD","tan","s3n1","floor","fsdValues","gcd","a","b","patternTwelveValues","setRuntimeContext","customFunctions","List","values","charval","String","charCodeAt","unfold","and","or","nand","nor","not","xor","Boolean","xnor","unsin","asin","cot","tv","A","C","D","G","sinf","cosf","cos","tanf","regG","regex","test","toString","crpt","decrpt","SAWT","SQU","TRI","squr","smis","arthtri","tanBS","tmdsn","tbrsn","FSD","position","length","n","divisor","push","TUNNEL","patternTwelve","dvd","hxdcml","customConstants","glitchToPostfixConversion","c","d","e","f","g","h","j","k","l","m","o","p","q","r","s","u","binaryOperators","Map","unaryOperators","Set","customArity","numberToken","identifierToken","createPostfixStack","pointer","Array","fill","pop","pick","put","reset","clamp","byteFromFloat","round","byteAt","byteToFloat","byteWave","transform","triangleByte","squareByte","sineByte","semisineByte","selectedBytes","sample","count","softTan","tanh","sampleRichWave","triangle","functionModes","audioProcessor","AudioWorkletProcessor","constructor","args","super","this","audioSample","byteSample","drawMode","errorDisplayed","func","getValues","isFuncbeat","isGlitch","isPostfix","postfixStack","expressionWindow","isPlaying","lastByteValue","lastFuncValue","lastTime","modeSample","outValue","playbackSpeed","sampleRate","sampleRatio","srDivisor","customRangeBits","quantizedLevels","audioFiles","seal","deleteGlobals","freezeGlobals","port","addEventListener","receiveData","data","start","i","globalThis","fromCharCode","name","prototype","hasOwnProperty","call","getOwnPropertyNames","forEach","prop","type","freeze","writable","configurable","getErrorMessage","err","time","when","JSON","stringify","message","lineNumber","columnNumber","process","inputs","chData","chDataLen","drawBuffer","isDiagram","includes","currentTime","funcValue","currentSample","sendData","error","isRuntime","NaN","isArray","hasValue","ch","isNaN","Number","MAX_SAFE_INTEGER","resetTime","isSend","undefined","resetValues","setSampleRatio","mode","has","setFloat","setRawFloat","functionMode","scale","wordValue","log2","rangeMax","step","quantizedValue","pulseWidth","carrier","modulator","sawtooth","isFinite","sign","negative","cbrt","sinh","acos","cosh","slot","reduced","width","slice","slots","sampleWave","warped","deterministicNoise","stages","stage","tremolo","setFunction","postMessage","codeText","customNames","keys","customConstantNames","customBindings","params","filter","map","audioFunctions","audioIN","channel","file","audioFile","get","channels","frame","audioChannel","sampleIndex","audioLength","audioNames","isCompiled","oldFunc","Function","bind","code","input","replace","postfix","immediate","char","join","glitchToPostfix","steps","tokens","trim","split","token","normalizedToken","toLowerCase","isUnary","toUpperCase","isCustom","arity","unshift","comparison","postfixToFunction","updateUrl","timeOffset","registerProcessor"],"mappings":"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"}