@grame/faustwasm 0.18.1 → 0.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../libfaust-wasm/libfaust-wasm.cjs", "../../src/instantiateFaustModule.ts", "../../src/instantiateFaustModuleFromFile.ts", "../../src/FaustAudioWorkletProcessor.ts", "../../src/FaustFFTAudioWorkletProcessor.ts", "../../node_modules/tslib/tslib.es6.mjs", "../../node_modules/@aws-crypto/sha256-js/src/constants.ts", "../../node_modules/@aws-crypto/sha256-js/src/RawSha256.ts", "../../node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js", "../../node_modules/@aws-crypto/util/src/convertToBuffer.ts", "../../node_modules/@aws-crypto/util/src/isEmptyData.ts", "../../node_modules/@aws-crypto/sha256-js/src/jsSha256.ts", "../../src/FaustCompiler.ts", "../../src/FaustDspInstance.ts", "../../src/FaustWasmInstantiator.ts", "../../src/FaustSensors.ts", "../../src/FaustWebAudioDsp.ts", "../../src/FaustOfflineProcessor.ts", "../../src/FaustSvgDiagrams.ts", "../../src/FaustCmajor.ts", "../../src/LibFaust.ts", "../../src/WavEncoder.ts", "../../src/WavDecoder.ts", "../../src/SoundfileReader.ts", "../../src/FaustAudioWorkletCommunicator.ts", "../../src/FaustAudioWorkletNode.ts", "../../src/FaustScriptProcessorNode.ts", "../../src/FaustDspGenerator.ts"],
4
- "sourcesContent": ["var FaustModule=(()=>{var _scriptName=globalThis.document?.currentScript?.src;return async function(moduleArg={}){var Module=moduleArg;(function(){function humanReadableVersionToPacked(str){str=str.split(\"-\")[0];var vers=str.split(\".\").slice(0,3);while(vers.length<3)vers.push(\"00\");vers=vers.map((n,i,arr)=>n.padStart(2,\"0\"));return vers.join(\"\")}var packedVersionToHumanReadable=n=>[n/1e4|0,(n/100|0)%100,n%100].join(\".\");var TARGET_NOT_SUPPORTED=2147483647;if(typeof process!==\"undefined\"&&!process.versions?.bun&&typeof Deno==\"undefined\"){var currentNodeVersion=process.versions?.node?humanReadableVersionToPacked(process.versions.node):TARGET_NOT_SUPPORTED;if(currentNodeVersion<180300){throw new Error(`This emscripten-generated code requires node v${packedVersionToHumanReadable(180300)} (detected v${packedVersionToHumanReadable(currentNodeVersion)})`)}}var userAgent=typeof navigator!==\"undefined\"&&navigator.userAgent;if(!userAgent){return}var currentSafariVersion=userAgent.includes(\"Safari/\")&&!userAgent.includes(\"Chrome/\")&&userAgent.match(/Version\\/(\\d+\\.?\\d*\\.?\\d*)/)?humanReadableVersionToPacked(userAgent.match(/Version\\/(\\d+\\.?\\d*\\.?\\d*)/)[1]):TARGET_NOT_SUPPORTED;if(currentSafariVersion<15e4){throw new Error(`This emscripten-generated code requires Safari v${packedVersionToHumanReadable(15e4)} (detected v${currentSafariVersion})`)}var currentFirefoxVersion=userAgent.match(/Firefox\\/(\\d+(?:\\.\\d+)?)/)?parseFloat(userAgent.match(/Firefox\\/(\\d+(?:\\.\\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentFirefoxVersion<79){throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${currentFirefoxVersion})`)}var currentChromeVersion=userAgent.match(/Chrome\\/(\\d+(?:\\.\\d+)?)/)?parseFloat(userAgent.match(/Chrome\\/(\\d+(?:\\.\\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentChromeVersion<85){throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${currentChromeVersion})`)}})();var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!=\"renderer\";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(!Module[\"expectedDataFileDownloads\"])Module[\"expectedDataFileDownloads\"]=0;Module[\"expectedDataFileDownloads\"]++;(()=>{var isPthread=typeof ENVIRONMENT_IS_PTHREAD!=\"undefined\"&&ENVIRONMENT_IS_PTHREAD;var isWasmWorker=typeof ENVIRONMENT_IS_WASM_WORKER!=\"undefined\"&&ENVIRONMENT_IS_WASM_WORKER;if(isPthread||isWasmWorker)return;var isNode=globalThis.process&&globalThis.process.versions&&globalThis.process.versions.node&&globalThis.process.type!=\"renderer\";async function loadPackage(metadata){var PACKAGE_PATH=\"\";if(typeof window===\"object\"){PACKAGE_PATH=window[\"encodeURIComponent\"](window.location.pathname.substring(0,window.location.pathname.lastIndexOf(\"/\"))+\"/\")}else if(typeof process===\"undefined\"&&typeof location!==\"undefined\"){PACKAGE_PATH=encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf(\"/\"))+\"/\")}var PACKAGE_NAME=\"libfaust-wasm.data\";var REMOTE_PACKAGE_BASE=\"libfaust-wasm.data\";var REMOTE_PACKAGE_NAME=Module[\"locateFile\"]?Module[\"locateFile\"](REMOTE_PACKAGE_BASE,\"\"):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata[\"remote_package_size\"];async function fetchRemotePackage(packageName,packageSize){if(isNode){var contents=require(\"fs\").readFileSync(packageName);return new Uint8Array(contents).buffer}if(!Module[\"dataFileDownloads\"])Module[\"dataFileDownloads\"]={};try{var response=await fetch(packageName)}catch(e){throw new Error(`Network Error: ${packageName}`,{e})}if(!response.ok){throw new Error(`${response.status}: ${response.url}`)}const chunks=[];const headers=response.headers;const total=Number(headers.get(\"Content-Length\")||packageSize);let loaded=0;Module[\"setStatus\"]&&Module[\"setStatus\"](\"Downloading data...\");const reader=response.body.getReader();while(1){var{done,value}=await reader.read();if(done)break;chunks.push(value);loaded+=value.length;Module[\"dataFileDownloads\"][packageName]={loaded,total};let totalLoaded=0;let totalSize=0;for(const download of Object.values(Module[\"dataFileDownloads\"])){totalLoaded+=download.loaded;totalSize+=download.total}Module[\"setStatus\"]&&Module[\"setStatus\"](`Downloading data... (${totalLoaded}/${totalSize})`)}const packageData=new Uint8Array(chunks.map(c=>c.length).reduce((a,b)=>a+b,0));let offset=0;for(const chunk of chunks){packageData.set(chunk,offset);offset+=chunk.length}return packageData.buffer}var fetchPromise;var fetched=Module[\"getPreloadedPackage\"]&&Module[\"getPreloadedPackage\"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE);if(!fetched){fetchPromise=fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE)}async function runWithFS(Module){function assert(check,msg){if(!check)throw new Error(msg)}Module[\"FS_createPath\"](\"/\",\"usr\",true,true);Module[\"FS_createPath\"](\"/usr\",\"rsrc\",true,true);Module[\"FS_createPath\"](\"/usr\",\"share\",true,true);Module[\"FS_createPath\"](\"/usr/share\",\"faust\",true,true);async function processPackageData(arrayBuffer){assert(arrayBuffer,\"Loading data file failed.\");assert(arrayBuffer.constructor.name===ArrayBuffer.name,\"bad input to processPackageData \"+arrayBuffer.constructor.name);var byteArray=new Uint8Array(arrayBuffer);for(var file of metadata[\"files\"]){var name=file[\"filename\"];var data=byteArray.subarray(file[\"start\"],file[\"end\"]);Module[\"FS_createDataFile\"](name,null,data,true,true,true)}Module[\"removeRunDependency\"](\"datafile_libfaust-wasm.data\")}Module[\"addRunDependency\"](\"datafile_libfaust-wasm.data\");if(!Module[\"preloadResults\"])Module[\"preloadResults\"]={};Module[\"preloadResults\"][PACKAGE_NAME]={fromCache:false};if(!fetched){fetched=await fetchPromise}await processPackageData(fetched)}if(Module[\"FS_createPath\"]){runWithFS(Module)}else{if(!Module[\"preRun\"])Module[\"preRun\"]=[];Module[\"preRun\"].push(runWithFS)}}loadPackage({files:[{filename:\"/usr/rsrc/mixer32.wasm\",start:0,end:502},{filename:\"/usr/rsrc/mixer64.wasm\",start:502,end:1016},{filename:\"/usr/share/faust/aanl.lib\",start:1016,end:36141},{filename:\"/usr/share/faust/all.lib\",start:36141,end:37341},{filename:\"/usr/share/faust/analyzers.lib\",start:37341,end:108022},{filename:\"/usr/share/faust/basics.lib\",start:108022,end:225919},{filename:\"/usr/share/faust/compressors.lib\",start:225919,end:299135},{filename:\"/usr/share/faust/debug.lib\",start:299135,end:345554},{filename:\"/usr/share/faust/delays.lib\",start:345554,end:369237},{filename:\"/usr/share/faust/demos.lib\",start:369237,end:493255},{filename:\"/usr/share/faust/doc.lib\",start:493255,end:494500},{filename:\"/usr/share/faust/dx7.lib\",start:494500,end:514178},{filename:\"/usr/share/faust/effect.lib\",start:514178,end:583208},{filename:\"/usr/share/faust/env.lib\",start:583208,end:595812},{filename:\"/usr/share/faust/envelopes.lib\",start:595812,end:621676},{filename:\"/usr/share/faust/fds.lib\",start:621676,end:645573},{filename:\"/usr/share/faust/filter.lib\",start:645573,end:710959},{filename:\"/usr/share/faust/filters.lib\",start:710959,end:887313},{filename:\"/usr/share/faust/hoa.lib\",start:887313,end:938266},{filename:\"/usr/share/faust/hysteresis.lib\",start:938266,end:952152},{filename:\"/usr/share/faust/instruments.lib\",start:952152,end:961777},{filename:\"/usr/share/faust/interpolators.lib\",start:961777,end:1001572},{filename:\"/usr/share/faust/lfo.lib\",start:1001572,end:1007520},{filename:\"/usr/share/faust/linearalgebra.lib\",start:1007520,end:1017412},{filename:\"/usr/share/faust/math.lib\",start:1017412,end:1038673},{filename:\"/usr/share/faust/maths.lib\",start:1038673,end:1082529},{filename:\"/usr/share/faust/maxmsp.lib\",start:1082529,end:1090734},{filename:\"/usr/share/faust/mi.lib\",start:1090734,end:1110350},{filename:\"/usr/share/faust/misceffects.lib\",start:1110350,end:1165244},{filename:\"/usr/share/faust/motion.lib\",start:1165244,end:1192141},{filename:\"/usr/share/faust/music.lib\",start:1192141,end:1211659},{filename:\"/usr/share/faust/noises.lib\",start:1211659,end:1231180},{filename:\"/usr/share/faust/operator.lib\",start:1231180,end:1244252},{filename:\"/usr/share/faust/oscillator.lib\",start:1244252,end:1264103},{filename:\"/usr/share/faust/oscillators.lib\",start:1264103,end:1340366},{filename:\"/usr/share/faust/phaflangers.lib\",start:1340366,end:1351420},{filename:\"/usr/share/faust/physmodels.lib\",start:1351420,end:1551154},{filename:\"/usr/share/faust/pitchenv.lib\",start:1551154,end:1556670},{filename:\"/usr/share/faust/platform.lib\",start:1556670,end:1560326},{filename:\"/usr/share/faust/quantizers.lib\",start:1560326,end:1572875},{filename:\"/usr/share/faust/reducemaps.lib\",start:1572875,end:1582515},{filename:\"/usr/share/faust/reverbs.lib\",start:1582515,end:1639421},{filename:\"/usr/share/faust/routes.lib\",start:1639421,end:1661563},{filename:\"/usr/share/faust/sf.lib\",start:1661563,end:1662629},{filename:\"/usr/share/faust/signals.lib\",start:1662629,end:1688718},{filename:\"/usr/share/faust/soundfiles.lib\",start:1688718,end:1699399},{filename:\"/usr/share/faust/spats.lib\",start:1699399,end:1720902},{filename:\"/usr/share/faust/stdfaust.lib\",start:1720902,end:1722294},{filename:\"/usr/share/faust/synths.lib\",start:1722294,end:1736159},{filename:\"/usr/share/faust/tonestacks.lib\",start:1736159,end:1759600},{filename:\"/usr/share/faust/tubes.lib\",start:1759600,end:2127898},{filename:\"/usr/share/faust/vaeffects.lib\",start:2127898,end:2208112},{filename:\"/usr/share/faust/version.lib\",start:2208112,end:2209047},{filename:\"/usr/share/faust/wdmodels.lib\",start:2209047,end:2329433},{filename:\"/usr/share/faust/webaudio.lib\",start:2329433,end:2342908}],remote_package_size:2342908})})();if(typeof ENVIRONMENT_IS_WASM_WORKER!=\"undefined\"&&ENVIRONMENT_IS_WASM_WORKER||typeof ENVIRONMENT_IS_PTHREAD!=\"undefined\"&&ENVIRONMENT_IS_PTHREAD||typeof ENVIRONMENT_IS_AUDIO_WORKLET!=\"undefined\"&&ENVIRONMENT_IS_AUDIO_WORKLET)Module[\"preRun\"]=[];var necessaryPreJSTasks=Module[\"preRun\"].slice();if(!Module[\"preRun\"])throw\"Module.preRun should exist because file support used it; did a pre-js delete it?\";necessaryPreJSTasks.forEach(task=>{if(Module[\"preRun\"].indexOf(task)<0)throw\"All preRun tasks that exist before user pre-js code should remain after; did you replace Module or modify Module.preRun?\"});var programArgs=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};if(typeof __filename!=\"undefined\"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory=\"\";function locateFile(path){return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){const isNode=globalThis.process?.versions?.node&&globalThis.process?.type!=\"renderer\";if(!isNode)throw new Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");var fs=require(\"node:fs\");scriptDirectory=__dirname+\"/\";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);assert(Buffer.isBuffer(ret));return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:\"utf8\");assert(binary?Buffer.isBuffer(ret):typeof ret==\"string\");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\\\/g,\"/\")}programArgs=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(\".\",_scriptName).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{assert(!isFileURI(url),\"readAsync does not work with file:// URLs\");var response=await fetch(url,{credentials:\"same-origin\"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+\" : \"+response.url)}}}else{throw new Error(\"environment detection error\")}var out=console.log.bind(console);var err=console.error.bind(console);assert(!ENVIRONMENT_IS_SHELL,\"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)\");var wasmBinary;if(!globalThis.WebAssembly){err(\"no native wasm support detected\")}var ABORT=false;function assert(condition,text){if(!condition){abort(\"Assertion failed\"+(text?\": \"+text:\"\"))}}var isFileURI=filename=>filename.startsWith(\"file://\");class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var runtimeDebug=true;(()=>{var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)abort(\"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)\")})();function consumedModuleProp(prop){var value=Module[prop];var msg=`Attempt to modify \\`Module.${prop}\\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`;if(Array.isArray(value)){value=new Proxy(value,{set(target,key,val){abort(msg);return false},defineProperty(target,key,descriptor){abort(msg);return false},deleteProperty(target,key){abort(msg);return false}})}Object.defineProperty(Module,prop,{configurable:true,get(){return value},set(){abort(msg)}})}function makeInvalidEarlyAccess(name){return()=>assert(false,`call to '${name}' via reference taken before Wasm module initialization`)}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(`\\`Module.${prop}\\` was supplied but \\`${prop}\\` not included in INCOMING_MODULE_JS_API`)}}function isExportedByForceFilesystem(name){return name===\"FS_createPath\"||name===\"FS_createDataFile\"||name===\"FS_createPreloadedFile\"||name===\"FS_preloadFile\"||name===\"FS_unlink\"||name===\"addRunDependency\"||name===\"FS_createLazyFile\"||name===\"FS_createDevice\"||name===\"removeRunDependency\"}function missingLibrarySymbol(sym){unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg=`'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;if(isExportedByForceFilesystem(sym)){msg+=\". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you\"}abort(msg)}})}}const stackCookie1=34821223;const stackCookie2=2310721022;function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[max>>2]=stackCookie1;HEAPU32[max+4>>2]=stackCookie2;HEAPU32[0>>2]=1668509029}function u32ToHexString(num){return\"0x\"+(num>>>0).toString(16).padStart(8,\"0\")}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var val1=HEAPU32[max>>2];var val2=HEAPU32[max+4>>2];if(val1!=stackCookie1||val2!=stackCookie2){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords ${u32ToHexString(stackCookie2)} and ${u32ToHexString(stackCookie1)}, but received ${u32ToHexString(val2)} ${u32ToHexString(val1)}`)}if(HEAPU32[0>>2]!=1668509029){abort(\"Runtime error: The application has corrupted its heap memory area (address zero)!\")}}var runtimeInitialized=false;function getMemoryBuffer(){return wasmMemory.buffer}function updateMemoryViews(){if(HEAP8?.buffer?.resizable)return;var b=getMemoryBuffer();HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}assert(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,\"JS engine does not provide full typed array support\");function preRun(){var preRun=Module[\"preRun\"];if(preRun){if(typeof preRun==\"function\")preRun=[preRun];onPreRuns.push(...preRun)}consumedModuleProp(\"preRun\");callRuntimeCallbacks(onPreRuns)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();if(!Module[\"noFSInit\"]&&!FS.initialized)FS.init();TTY.init();SOCKFS.root=FS.mount(SOCKFS,{},null);wasmExports[\"__wasm_call_ctors\"]();FS.ignorePermissions=false;checkStackCookie()}function postRun(){checkStackCookie()}function abort(what){what=`Aborted(${what})`;err(what);ABORT=true;var e=new WebAssembly.RuntimeError(what);throw e}function createExportWrapper(name,func,nargs){assert(func);return(...args)=>{assert(runtimeInitialized,`native function \\`${name}\\` called before runtime initialization`);assert(args.length<=nargs,`native function \\`${name}\\` called with ${args.length} args but expects ${nargs}`);return func(...args)}}var wasmBinaryFile;function findWasmBinary(){return locateFile(\"libfaust-wasm.wasm\")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);if(isFileURI(binaryFile)){err(`warning: Loading from a file URI (${binaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`)}abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:\"same-origin\"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err(\"falling back to ArrayBuffer instantiation\")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,\"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?\");trueModule=null;return receiveInstance(result[\"instance\"])}var info=getWasmImports();wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name=\"ExitStatus\";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP16;var HEAP32;var HEAP64;var HEAP8;var HEAPF32;var HEAPF64;var HEAPU16;var HEAPU32;var HEAPU64;var HEAPU8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPreRuns=[];function ptrToString(ptr){assert(typeof ptr===\"number\",`ptrToString expects a number, got ${typeof ptr}`);ptr>>>=0;return\"0x\"+ptr.toString(16).padStart(8,\"0\")}var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text=\"warning: \"+text;err(text)}};var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{if((u0&248)!=240)warnOnce(`Invalid UTF-8 leading byte ${ptrToString(u0)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`);u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(typeof ptr==\"number\",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):\"\"};var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):\"unknown filename\",line,func?UTF8ToString(func):\"unknown function\"]);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);uncaughtExceptionCount++;assert(false,\"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.\")};var PATH={isAbs:path=>path.charAt(0)===\"/\",splitPath:filename=>{var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(p=>!!p),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\\/]+|\\/)\\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join(\"/\")),join2:(l,r)=>PATH.normalize(l+\"/\"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require(\"node:crypto\");return view=>(nodeCrypto.randomFillSync(view),0)}return view=>(crypto.getRandomValues(view),0)};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath=\"\",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!=\"string\"){throw new TypeError(\"Arguments to path.resolve must be strings\")}else if(!path){return\"\"}resolvedPath=path+\"/\"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split(\"/\").filter(p=>!!p),!resolvedAbsolute).join(\"/\");return(resolvedAbsolute?\"/\":\"\")+resolvedPath||\".\"},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!==\"\")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!==\"\")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split(\"/\"));var toParts=trim(to.split(\"/\"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push(\"..\")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join(\"/\")}};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{assert(typeof str===\"string\",`stringToUTF8Array expects a string (got ${typeof str})`);if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.codePointAt(i);if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce(`Invalid Unicode code point ${ptrToString(u)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`);heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes(\"EOF\"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString(\"utf-8\")}}else if(globalThis.window?.prompt){result=window.prompt(\"Input: \");if(result!==null){result+=\"\\n\"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.atime=Date.now()}return bytesRead},write(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.mtime=stream.node.ctime=Date.now()}return i}},default_tty_ops:{get_char(tty){return FS_stdin_getChar()},put_char(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort(\"internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported\")};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,\"/\",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=MEMFS.emptyFileContents??=new Uint8Array(0)}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){assert(FS.isFile(node.mode),\"getFileDataAsTypedArray called on non-file\");return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)));node.usedBytes=newSize},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of[\"mode\",\"atime\",\"mtime\",\"ctime\"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[\".\",\"..\",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);buffer.set(contents.subarray(position,position+size),offset);return size},write(stream,buffer,offset,length,position,canOwn){assert(buffer.subarray,\"FS.write expects a TypedArray\");if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.mtime=node.ctime=Date.now();if(canOwn){assert(position===0,\"canOwn must imply no weird position inside the file\");node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);node.usedBytes=Math.max(node.usedBytes,position+length)}return length},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===HEAP8.buffer){allocated=false;ptr=contents.byteOffset}else{allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}if(contents){if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}HEAP8.set(contents,ptr)}}return{ptr,allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS_modeStringToFlags=str=>{if(typeof str!=\"string\")return str;var flagModes={r:0,\"r+\":2,w:512|64|1,\"w+\":512|64|2,a:1024|64|1,\"a+\":1024|64|2};var flags=flagModes[str];if(typeof flags==\"undefined\"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_fileDataToTypedArray=data=>{if(typeof data==\"string\"){data=intArrayFromString(data,true)}if(!data.subarray){data=new Uint8Array(data)}return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var strError=errno=>UTF8ToString(_strerror(errno));var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);assert(arrayBuffer,`Loading data file \"${url}\" failed (no arrayBuffer).`);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>{var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}};var dependenciesPromise=null;var resolveRunDependencies=async()=>dependenciesPromise;var runDependencies=0;var dependenciesPromiseResolve=null;var runDependencyTracking={};var runDependencyWatcher=null;var removeRunDependency=id=>{runDependencies--;assert(id,\"removeRunDependency requires an ID\");assert(runDependencyTracking[id]);delete runDependencyTracking[id];if(!runDependencies){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}dependenciesPromiseResolve()}};var addRunDependency=id=>{if(!runDependencies){dependenciesPromise=new Promise(resolve=>dependenciesPromiseResolve=resolve)}runDependencies++;assert(id,\"addRunDependency requires an ID\");assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&globalThis.setInterval){runDependencyWatcher=setInterval(()=>{if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err(\"still waiting on run dependencies:\")}err(`dependency: ${dep}`)}if(shown){err(\"(end of list)\")}},1e4);runDependencyWatcher.unref?.()}};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!=\"undefined\")Browser.init();for(var plugin of preloadPlugins){if(plugin[\"canHandle\"](fullname)){assert(plugin[\"handle\"].constructor.name===\"AsyncFunction\",\"Filesystem plugin handlers must be async functions (See #24914)\");return plugin[\"handle\"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url==\"string\"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,ErrnoError:class extends Error{name=\"ErrnoError\";constructor(errno){super(runtimeInitialized?strError(errno):\"\");this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}addListener(cb,exclusive=false){var entry={cb,exclusive};var listeners=this.listeners??=new Set;listeners.add(entry);return{listeners,entry}}notifyListeners(flags){if(!this.listeners)return;var excl;for(var entry of this.listeners){if(entry.exclusive)(excl||=[]).push(entry);else entry.cb(flags)}if(excl){var i=(this.exclTurn||0)%excl.length;this.exclTurn=i+1;excl[i].cb(flags)}}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+\"/\"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split(\"/\").filter(p=>!!p);var current=FS.root;var current_path=\"/\";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}if(parts[i]===\".\"){continue}if(parts[i]===\"..\"){current_path=PATH.dirname(current_path);if(FS.isRoot(current)){path=current_path+\"/\"+parts.slice(i+1).join(\"/\");nlinks--;continue linkloop}else{current=current.parent}continue}current_path=PATH.join2(current_path,parts[i]);try{current=FS.lookupNode(current,parts[i])}catch(e){if(e?.errno===44&&islast&&opts.noent_okay){return{path:current_path}}throw e}if(FS.isMountpoint(current)&&(!islast||opts.follow_mount)){current=current.mounted.root}if(FS.isLink(current.mode)&&(!islast||opts.follow)){if(!current.node_ops.readlink){throw new FS.ErrnoError(52)}var link=current.node_ops.readlink(current);if(!PATH.isAbs(link)){link=PATH.dirname(current_path)+\"/\"+link}path=link+\"/\"+parts.slice(i+1).join(\"/\");continue linkloop}}return{path:current_path,node:current}}throw new FS.ErrnoError(32)},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!==\"/\"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){assert(typeof parent==\"object\");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=[\"r\",\"w\",\"rw\"][flag&3];if(flag&512){perms+=\"w\"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes(\"r\")&&!(node.mode&292)){return 2}if(perms.includes(\"w\")&&!(node.mode&146)){return 2}if(perms.includes(\"x\")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,\"x\");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,\"wx\")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,\"wx\");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else if(FS.isDir(node.mode)){return 31}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!==\"r\"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){assert(fd>=-1);stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);try{setattr(arg,attr)}catch(e){if(e instanceof RangeError){throw new FS.ErrnoError(22)}throw e}},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate==\"function\"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},mount(type,opts,mountpoint){if(typeof type==\"string\"){throw type}var root=mountpoint===\"/\";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable)){while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name===\".\"||name===\"..\"){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split(\"/\");var d=\"\";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+=\"/\";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev==\"undefined\"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},link(oldpath,newpath,flags){var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.link){throw new FS.ErrnoError(34)}return parent.node_ops.link(parent,newname,oldpath,flags)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,\"w\");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path==\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path==\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,\"w\");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path==\"string\"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});FS.doSetAttr(null,lookup.node,{atime,mtime,dontFollow})},open(path,flags,mode=438){if(path===\"\"){throw new FS.ErrnoError(44)}flags=FS_modeStringToFlags(flags);if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path==\"object\"){node=path}else{isDirPath=path.endsWith(\"/\");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;stream.node?.notifyListeners(32);try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!=\"undefined\";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){assert(offset>=0);assert(buffer.subarray,\"FS.write expects a TypedArray\");if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=\"undefined\";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){assert(offset>=0);if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags??0;opts.encoding=opts.encoding??\"binary\";if(opts.encoding!==\"utf8\"&&opts.encoding!==\"binary\"){abort(`Invalid encoding type \"${opts.encoding}\"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding===\"utf8\"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags??577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,\"x\");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir(\"/tmp\");FS.mkdir(\"/home\");FS.mkdir(\"/home/web_user\")},createDefaultDevices(){FS.mkdir(\"/dev\");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev(\"/dev/null\",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev(\"/dev/tty\",FS.makedev(5,0));FS.mkdev(\"/dev/tty1\",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice(\"/dev\",\"random\",randomByte);FS.createDevice(\"/dev\",\"urandom\",randomByte);FS.mkdir(\"/dev/shm\");FS.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){FS.mkdir(\"/proc\");var proc_self=FS.mkdir(\"/proc/self\");FS.mkdir(\"/proc/self/fd\");FS.mount({mount(){var node=FS.createNode(proc_self,\"fd\",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},\"/proc/self/fd\")},createStandardStreams(input,output,error){if(input){FS.createDevice(\"/dev\",\"stdin\",input)}else{FS.symlink(\"/dev/tty\",\"/dev/stdin\")}if(output){FS.createDevice(\"/dev\",\"stdout\",null,output)}else{FS.symlink(\"/dev/tty\",\"/dev/stdout\")}if(error){FS.createDevice(\"/dev\",\"stderr\",null,error)}else{FS.symlink(\"/dev/tty1\",\"/dev/stderr\")}var stdin=FS.open(\"/dev/stdin\",0);var stdout=FS.open(\"/dev/stdout\",1);var stderr=FS.open(\"/dev/stderr\",1);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},\"/\");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){assert(!FS.initialized,\"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)\");FS.initialized=true;FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path===\"/\"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent==\"string\"?parent:FS.getPath(parent);var parts=path.split(\"/\").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==\"string\"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent==\"string\"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){data=FS_fileDataToTypedArray(data);FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}},createDevice(parent,name,input,output){var path=PATH.join2(typeof parent==\"string\"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);FS.createDevice.major??=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open(stream){stream.seekable=false},close(stream){if(output?.buffer?.length){output(10)}},read(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.atime=Date.now()}return bytesRead},write(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.mtime=stream.node.ctime=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(globalThis.XMLHttpRequest){abort(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\")}else{try{obj.contents=readBinary(obj.url)}catch(e){throw new FS.ErrnoError(29)}}},createLazyFile(parent,name,url,canRead,canWrite){class LazyUint8Array{lengthKnown=false;chunks=[];get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open(\"HEAD\",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort(\"Couldn't load \"+url+\". Status: \"+xhr.status);var datalength=Number(xhr.getResponseHeader(\"Content-length\"));var header;var hasByteServing=(header=xhr.getResponseHeader(\"Accept-Ranges\"))&&header===\"bytes\";var usesGzip=(header=xhr.getResponseHeader(\"Content-Encoding\"))&&header===\"gzip\";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort(`invalid range (${from}, ${to}) or no bytes requested!`);if(to>datalength-1)abort(`only ${datalength} bytes available! programmer error!`);var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);if(datalength!==chunkSize)xhr.setRequestHeader(\"Range\",\"bytes=\"+from+\"-\"+to);xhr.responseType=\"arraybuffer\";if(xhr.overrideMimeType){xhr.overrideMimeType(\"text/plain; charset=x-user-defined\")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort(\"Couldn't load \"+url+\". Status: \"+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText??\"\",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==\"undefined\"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==\"undefined\")abort(\"doXHR failed!\");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out(\"LazyFiles on gzip forces download of the whole file when length is accessed\")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort(\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};for(const[key,fn]of Object.entries(node.stream_ops)){stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}}function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size}stream_ops.read=(stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var SYSCALLS={currentUmask:18,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+\"/\"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.subarray(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var SOCKFS={callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param);var fd=event===\"error\"?param[0]:param;var flags={message:64|1,open:4,connection:64|1,close:1|16,error:8}[event];if(flags)FS.getStream(fd)?.node.notifyListeners(flags)},mount(mount){return FS.createNode(null,\"/\",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr==\"object\"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\\/\\/([^:]+):(\\d+)/.exec(ws.url);if(!result){throw new Error(\"WebSocket URL must be in the format ws(s)://address:port\")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url=\"ws://\".replace(\"#\",\"//\");var subProtocols=\"binary\";var opts=undefined;if(url===\"ws://\"||url===\"wss://\"){var parts=addr.split(\"/\");url=url+parts[0]+\":\"+port+\"/\"+parts.slice(1).join(\"/\")}if(subProtocols!==\"null\"){subProtocols=subProtocols.replace(/^ +| +$/g,\"\").split(/ *, */);opts=subProtocols}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require(\"ws\")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType=\"arraybuffer\"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!=\"undefined\"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,\"p\".charCodeAt(0),\"o\".charCodeAt(0),\"r\".charCodeAt(0),\"t\".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+\":\"+port]},addPeer(sock,peer){sock.peers[peer.addr+\":\"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+\":\"+peer.port]},handlePeerEvents(sock,peer){var first=true;function handleOpen(){sock.connecting=false;SOCKFS.emit(\"open\",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}}function handleMessage(data){if(typeof data==\"string\"){var encoder=new TextEncoder;data=encoder.encode(data)}else{assert(data.byteLength!==undefined);if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]===\"p\".charCodeAt(0)&&data[5]===\"o\".charCodeAt(0)&&data[6]===\"r\".charCodeAt(0)&&data[7]===\"t\".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit(\"message\",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on(\"open\",handleOpen);peer.socket.on(\"message\",(data,isBinary)=>{if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on(\"close\",()=>SOCKFS.emit(\"close\",sock.stream.fd));peer.socket.on(\"error\",error=>{sock.error=14;SOCKFS.emit(\"error\",[sock.stream.fd,sock.error,\"ECONNREFUSED: Connection refused\"])});return}peer.socket.onopen=handleOpen;peer.socket.onclose=()=>SOCKFS.emit(\"close\",sock.stream.fd);peer.socket.onmessage=event=>handleMessage(event.data);peer.socket.onerror=error=>{sock.error=14;SOCKFS.emit(\"error\",[sock.stream.fd,sock.error,\"ECONNREFUSED: Connection refused\"])}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16|8192}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;case 21537:var on=HEAP32[arg>>2];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!=\"undefined\"||typeof sock.sport!=\"undefined\"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name===\"ErrnoError\"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!=\"undefined\"&&typeof sock.dport!=\"undefined\"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}if(sock.server){throw new FS.ErrnoError(28)}var WebSocketServer=require(\"ws\").Server;var host=sock.saddr;sock.server=new WebSocketServer({host,port:sock.sport});SOCKFS.emit(\"listen\",sock.stream.fd);sock.server.on(\"connection\",ws=>{if(sock.type===1){var newsock=SOCKFS.createSocket(sock.family,sock.type,sock.protocol);var peer=SOCKFS.websocket_sock_ops.createPeer(newsock,ws);newsock.daddr=peer.addr;newsock.dport=peer.port;sock.pending.push(newsock);SOCKFS.emit(\"connection\",newsock.stream.fd);sock.stream.node.notifyListeners(64|1)}else{SOCKFS.websocket_sock_ops.createPeer(sock,ws);SOCKFS.emit(\"connection\",sock.stream.fd)}});sock.server.on(\"close\",()=>{SOCKFS.emit(\"close\",sock.stream.fd);sock.server=null});sock.server.on(\"error\",error=>{sock.error=23;SOCKFS.emit(\"error\",[sock.stream.fd,sock.error,\"EHOSTUNREACH: Host is unreachable\"])})},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length,flags){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var peek=flags&2;var queued=sock.recv_queue[0];if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(peek)return res;sock.recv_queue.shift();if(sock.type===1&&bytesRead<queuedLength){var bytesRemaining=queuedLength-bytesRead;queued.data=new Uint8Array(queuedBuffer,queuedOffset+bytesRead,bytesRemaining);sock.recv_queue.unshift(queued)}return res}}};var getSocketFromFD=fd=>{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetNtop4=addr=>(addr&255)+\".\"+(addr>>8&255)+\".\"+(addr>>16&255)+\".\"+(addr>>24&255);var inetNtop6=ints=>{var str=\"\";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part=\"\";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str=\"::ffff:\";str+=v4part;return str}if(parts[5]===0){str=\"::\";if(v4part===\"0.0.0.0\")v4part=\"\";if(v4part===\"0.0.0.1\")v4part=\"1\";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word<zstart+longest){if(word===zstart){str+=\":\";if(zstart===0)str+=\":\"}continue}}str+=Number(_ntohs(parts[word]&65535)).toString(16);str+=word<7?\":\":\"\"}return str};var readSockaddr=(sa,salen)=>{var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var inetPton4=str=>{var b=str.split(\".\");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\3)::|:\\b|$))|(?!\\2\\3)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str===\"::\"){return[0,0,0,0,0,0,0,0]}if(str.startsWith(\"::\")){str=str.replace(\"::\",\"Z:\")}else{str=str.replace(\"::\",\":Z:\")}if(str.indexOf(\".\")>0){str=str.replace(new RegExp(\"[.]\",\"g\"),\":\");words=str.split(\":\");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(\":\")}offset=0;z=0;for(w=0;w<words.length;w++){if(typeof words[w]==\"string\"){if(words[w]===\"Z\"){for(z=0;z<8-words.length+1;z++){parts[w+z]=0}offset=z-1}else{parts[w+offset]=_htons(parseInt(words[w],16))}}else{parts[w+offset]=words[w]}}return[parts[1]<<16|parts[0],parts[3]<<16|parts[2],parts[5]<<16|parts[4],parts[7]<<16|parts[6]]};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;assert(id<65535,\"exceeded max address mappings of 65535\");addr=\"172.29.\"+(id&255)+\".\"+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_connect(fd,addr,len,u1,u2,u3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,len);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var syscallGetVarargI=()=>{assert(SYSCALLS.varargs!=undefined);var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();var mask=289792;stream.flags=stream.flags&~mask|arg&mask;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>{assert(typeof maxBytesToWrite==\"number\",\"stringToUTF8 requires a third parameter that specifies the length of the output buffer\");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)};function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size<cwdLengthInBytes)return-68;stringToUTF8(cwd,buf,size);return cwdLengthInBytes}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);mode&=~SYSCALLS.currentUmask;FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;if(flags&64){mode&=~SYSCALLS.currentUmask}return FS.open(path,flags,mode).fd}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var pollOne=(fd,events)=>{var stream=FS.getStream(fd);if(!stream)return 32;var flags=stream.stream_ops?.poll?stream.stream_ops.poll(stream):5;return flags&(events|8|16|32)};var doPollSync=(fds,nfds)=>{var count=0;for(var i=0,pollfd=fds;i<nfds;i++,pollfd+=8){var revents=pollOne(HEAP32[pollfd>>2],HEAP16[pollfd+4>>1]);if(revents)count++;HEAP16[pollfd+6>>1]=revents}return count};function ___syscall_poll(fds,nfds,timeout){try{var count=doPollSync(fds,nfds);if(!count&&timeout!=0)warnOnce(\"non-zero poll() timeout not supported: \"+timeout);return count}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_socket(domain,type,protocol,u1,u2,u3){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var __abort_js=()=>abort(\"native code called abort()\");var structRegistrations={};var runDestructors=destructors=>{while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}};function readPointer(pointer){return this.fromWireType(HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var InternalError=class InternalError extends Error{constructor(message){super(message);this.name=\"InternalError\"}};var throwInternalError=message=>{throw new InternalError(message)};var whenDependentTypesAreResolved=(myTypes,dependentTypes,getTypeConverters)=>{myTypes.forEach(type=>typeDependencies[type]=dependentTypes);function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError(\"Mismatched type converter count\")}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i])}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;for(let[i,dt]of dependentTypes.entries()){if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}}if(0===unregisteredTypes.length){onComplete(typeConverters)}};var __embind_finalize_value_object=structType=>{var reg=structRegistrations[structType];delete structRegistrations[structType];var rawConstructor=reg.rawConstructor;var rawDestructor=reg.rawDestructor;var fieldRecords=reg.fields;var fieldTypes=fieldRecords.map(field=>field.getterReturnType).concat(fieldRecords.map(field=>field.setterArgumentType));whenDependentTypesAreResolved([structType],fieldTypes,fieldTypes=>{var fields={};for(var[i,field]of fieldRecords.entries()){const getterReturnType=fieldTypes[i];const getter=field.getter;const getterContext=field.getterContext;const setterArgumentType=fieldTypes[i+fieldRecords.length];const setter=field.setter;const setterContext=field.setterContext;fields[field.fieldName]={read:ptr=>getterReturnType.fromWireType(getter(getterContext,ptr)),write:(ptr,o)=>{var destructors=[];setter(setterContext,ptr,setterArgumentType.toWireType(destructors,o));runDestructors(destructors)},optional:getterReturnType.optional}}return[{name:reg.name,fromWireType:ptr=>{var rv={};for(var i in fields){rv[i]=fields[i].read(ptr)}rawDestructor(ptr);return rv},toWireType:(destructors,o)=>{for(var fieldName in fields){if(!(fieldName in o)&&!fields[fieldName].optional){throw new TypeError(`Missing field: \"${fieldName}\"`)}}var ptr=rawConstructor();for(fieldName in fields){fields[fieldName].write(ptr,o[fieldName])}if(destructors!==null){destructors.push(rawDestructor,ptr)}return ptr},readValueFromPointer:readPointer,destructorFunction:rawDestructor}]})};var AsciiToString=ptr=>{var str=\"\";while(1){var ch=HEAPU8[ptr++];if(!ch)return str;str+=String.fromCharCode(ch)}};var BindingError=class BindingError extends Error{constructor(message){super(message);this.name=\"BindingError\"}};var throwBindingError=message=>{throw new BindingError(message)};function sharedRegisterType(rawType,registeredInstance,options={}){var name=registeredInstance.name;if(!rawType){throwBindingError(`type \"${name}\" must have a positive integer typeid pointer`)}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError(`Cannot register type '${name}' twice`)}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function registerType(rawType,registeredInstance,options={}){return sharedRegisterType(rawType,registeredInstance,options)}var integerReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?pointer=>HEAP8[pointer]:pointer=>HEAPU8[pointer];case 2:return signed?pointer=>HEAP16[pointer>>1]:pointer=>HEAPU16[pointer>>1];case 4:return signed?pointer=>HEAP32[pointer>>2]:pointer=>HEAPU32[pointer>>2];case 8:return signed?pointer=>HEAP64[pointer>>3]:pointer=>HEAPU64[pointer>>3];default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var embindRepr=v=>{if(v===null){return\"null\"}var t=typeof v;if(t===\"object\"||t===\"array\"||t===\"function\"){return v.toString()}else{return\"\"+v}};var assertIntegerRange=(typeName,value,minRange,maxRange)=>{if(value<minRange||value>maxRange){throw new TypeError(`Passing a number \"${embindRepr(value)}\" from JS side to C/C++ side to an argument of type \"${typeName}\", which is outside the valid range [${minRange}, ${maxRange}]!`)}};var __embind_register_bigint=(primitiveType,name,size,minRange,maxRange)=>{name=AsciiToString(name);const isUnsignedType=minRange===0n;let fromWireType=value=>value;if(isUnsignedType){const bitSize=size*8;fromWireType=value=>BigInt.asUintN(bitSize,value);maxRange=fromWireType(maxRange)}registerType(primitiveType,{name,fromWireType,toWireType:(destructors,value)=>{if(typeof value==\"number\"){value=BigInt(value)}else if(typeof value!=\"bigint\"){throw new TypeError(`Cannot convert \"${embindRepr(value)}\" to ${name}`)}assertIntegerRange(name,value,minRange,maxRange);return value},readValueFromPointer:integerReadValueFromPointer(name,size,!isUnsignedType),destructorFunction:null})};var __embind_register_bool=(rawType,name,trueValue,falseValue)=>{name=AsciiToString(name);registerType(rawType,{name,fromWireType:function(wt){return!!wt},toWireType:function(destructors,o){return o?trueValue:falseValue},readValueFromPointer:function(pointer){return this.fromWireType(HEAPU8[pointer])},destructorFunction:null})};var shallowCopyInternalPointer=o=>({count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType});var throwInstanceAlreadyDeleted=obj=>{function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+\" instance already deleted\")};var finalizationRegistry=false;var detachFinalizer=handle=>{};var runDestructor=$$=>{if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}};var releaseClassHandle=$$=>{$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}};var downcastPointer=(ptr,ptrClass,desiredClass)=>{if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)};var registeredPointers={};var registeredInstances={};var getBasestPointer=(class_,ptr)=>{if(ptr===undefined){throwBindingError(\"ptr should not be undefined\")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr};var getInheritedInstance=(class_,ptr)=>{ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]};var makeClassHandle=(prototype,record)=>{if(!record.ptrType||!record.ptr){throwInternalError(\"makeClassHandle requires ptr and ptrType\")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError(\"Both smartPtrType and smartPtr must be specified\")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record,writable:true}}))};function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance[\"clone\"]()}else{var rv=registeredInstance[\"clone\"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}var attachFinalizer=handle=>{if(!globalThis.FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{console.warn(info.leakWarning);releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$};var cls=$$.ptrType.registeredClass;var err=new Error(`Embind found a leaked C++ instance ${cls.name} <${ptrToString($$.ptr)}>.\\n`+\"We'll free it automatically in this case, but this functionality is not reliable across various environments.\\n\"+\"Make sure to invoke .delete() manually once you're done with the instance instead.\\n\"+\"Originally allocated\");if(\"captureStackTrace\"in Error){Error.captureStackTrace(err,RegisteredPointer_fromWireType)}info.leakWarning=err.stack.replace(/^Error: /,\"\");finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)};var deletionQueue=[];var flushPendingDeletes=()=>{while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj[\"delete\"]()}};var delayFunction;var init_ClassHandle=()=>{let proto=ClassHandle.prototype;Object.assign(proto,{isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;other.$$=other.$$;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right},clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}},delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}},isDeleted(){return!this.$$.ptr},deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}});const symbolDispose=Symbol.dispose;if(symbolDispose){proto[symbolDispose]=proto[\"delete\"]}};function ClassHandle(){}var createNamedFunction=(name,func)=>Object.defineProperty(func,\"name\",{value:name});var ensureOverloadTable=(proto,methodName,humanName)=>{if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(...args){if(!proto[methodName].overloadTable.hasOwnProperty(args.length)){throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`)}return proto[methodName].overloadTable[args.length].apply(this,args)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}};var exposePublicSymbol=(name,value,numArguments)=>{if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(`Cannot register public name '${name}' twice`)}ensureOverloadTable(Module,name,name);if(Module[name].overloadTable.hasOwnProperty(numArguments)){throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`)}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var char_0=48;var char_9=57;var makeLegalFunctionName=name=>{assert(typeof name===\"string\");name=name.replace(/[^a-zA-Z0-9_]/g,\"$\");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return`_${name}`}return name};function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}var upcastPointer=(ptr,ptrClass,desiredClass)=>{while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr};function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass \"${embindRepr(handle)}\" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle||!handle.$$){throwBindingError(`Cannot pass \"${embindRepr(handle)}\" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError(\"Passing raw pointer to smart pointer is illegal\")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle[\"clone\"]();ptr=this.rawShare(ptr,Emval.toHandle(()=>clonedHandle[\"delete\"]()));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError(\"Unsupported sharing policy\")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass \"${embindRepr(handle)}\" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}var init_RegisteredPointer=()=>{Object.assign(RegisteredPointer.prototype,{getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr},destructor(ptr){this.rawDestructor?.(ptr)},readValueFromPointer:readPointer,fromWireType:RegisteredPointer_fromWireType})};function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this.toWireType=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this.toWireType=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this.toWireType=genericPointerToWireType}}var replacePublicSymbol=(name,value,numArguments)=>{if(!Module.hasOwnProperty(name)){throwInternalError(\"Replacing nonexistent public symbol\")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,\"table mirror is out of date\");return func};var embind__requireFunction=(signature,rawFunction,isAsync=false)=>{assert(!isAsync,\"async bindings are only supported with JSPI\");signature=AsciiToString(signature);function makeDynCaller(){var rtn=getWasmTableEntry(rawFunction);return rtn}var fp=makeDynCaller();if(typeof fp!=\"function\"){throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`)}return fp};class UnboundTypeError extends Error{}var getTypeName=type=>{var ptr=___getTypeName(type);var rv=AsciiToString(ptr);_free(ptr);return rv};var throwUnboundTypeError=(message,types)=>{var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(`${message}: `+unboundTypes.map(getTypeName).join([\", \"]))};var __embind_register_class=(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor)=>{name=AsciiToString(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);upcast&&=embind__requireFunction(upcastSignature,upcast);downcast&&=embind__requireFunction(downcastSignature,downcast);rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(`Cannot construct ${name} due to unbound types`,[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],base=>{base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(name,function(...args){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError(`Use 'new' to construct ${name}`)}if(undefined===registeredClass.constructor_body){throw new BindingError(`${name} has no accessible constructor`)}var body=registeredClass.constructor_body[args.length];if(undefined===body){throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`)}return body.apply(this,args)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);if(registeredClass.baseClass){registeredClass.baseClass.__derivedClasses??=[];registeredClass.baseClass.__derivedClasses.push(registeredClass)}var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+\"*\",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+\" const*\",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})};var heap32VectorToArray=(count,firstElement)=>{var array=[];for(var i=0;i<count;i++){array.push(HEAPU32[firstElement+i*4>>2])}return array};function usesDestructorStack(argTypes){for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){return true}}return false}function getRequiredArgCount(argTypes){var requiredArgCount=argTypes.length-2;for(var i=argTypes.length-1;i>=2;--i){if(!argTypes[i].optional){break}requiredArgCount--}return requiredArgCount}function checkArgCount(numArgs,minArgs,maxArgs,humanName,throwBindingError){if(numArgs<minArgs||numArgs>maxArgs){var argCountMessage=minArgs==maxArgs?minArgs:`${minArgs} to ${maxArgs}`;throwBindingError(`function ${humanName} called with ${numArgs} arguments, expected ${argCountMessage}`)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc,isAsync){var argCount=argTypes.length;if(argCount<2){throwBindingError(\"argTypes array size mismatch! Must at least get return value and 'this' types!\")}assert(!isAsync,\"async bindings are only supported with JSPI\");var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=usesDestructorStack(argTypes);var returns=!argTypes[0].isVoid;var expectedArgCount=argCount-2;var minArgs=getRequiredArgCount(argTypes);var argsWired=new Array(expectedArgCount);var invokerFuncArgs=[];var destructors=[];var invokerFn=function(...args){checkArgCount(args.length,minArgs,expectedArgCount,humanName,throwBindingError);destructors.length=0;var thisWired;invokerFuncArgs.length=isClassMethodFunc?2:1;invokerFuncArgs[0]=cppTargetFunc;if(isClassMethodFunc){thisWired=argTypes[1].toWireType(destructors,this);invokerFuncArgs[1]=thisWired}for(var i=0;i<expectedArgCount;++i){argsWired[i]=argTypes[i+2].toWireType(destructors,args[i]);invokerFuncArgs.push(argsWired[i])}var rv=cppInvokerFunc(...invokerFuncArgs);function onDone(rv){if(needsDestructorStack){runDestructors(destructors)}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;i++){var param=i===1?thisWired:argsWired[i-2];if(argTypes[i].destructorFunction!==null){argTypes[i].destructorFunction(param)}}}if(returns){return argTypes[0].fromWireType(rv)}}return onDone(rv)};return createNamedFunction(humanName,invokerFn)}var __embind_register_class_constructor=(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor)=>{assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`constructor ${classType.name}`;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount-1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`)}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`,rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})};var getFunctionName=signature=>{signature=signature.trim();const argsIndex=signature.indexOf(\"(\");if(argsIndex===-1)return signature;assert(signature.endsWith(\")\"),\"Parentheses for argument names should match.\");return signature.slice(0,argsIndex)};var __embind_register_class_function=(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync,isNonnullReturn)=>{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=AsciiToString(methodName);methodName=getFunctionName(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker,isAsync);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`${classType.name}.${methodName}`;if(methodName.startsWith(\"@@\")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`,rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})};var emval_freelist=[];var emval_handles=[0,1,,1,null,1,true,1,false,1];var __emval_decref=handle=>{if(handle>9&&0===--emval_handles[handle+1]){assert(emval_handles[handle]!==undefined,`decref for unallocated handle`);var value=emval_handles[handle];emval_handles[handle]=undefined;emval_freelist.push(handle)}};var Emval={toValue:handle=>{if(!handle){throwBindingError(`Cannot use deleted val. handle = ${handle}`)}assert(handle===2||emval_handles[handle]!==undefined&&handle%2===0,`invalid handle: ${handle}`);return emval_handles[handle]},toHandle:value=>{switch(value){case undefined:return 2;case null:return 4;case true:return 6;case false:return 8;default:{const handle=emval_freelist.pop()||emval_handles.length;emval_handles[handle]=value;emval_handles[handle+1]=1;return handle}}}};var EmValType={name:\"emscripten::val\",fromWireType:handle=>{var rv=Emval.toValue(handle);__emval_decref(handle);return rv},toWireType:(destructors,value)=>Emval.toHandle(value),readValueFromPointer:readPointer,destructorFunction:null};var __embind_register_emval=rawType=>registerType(rawType,EmValType);var floatReadValueFromPointer=(name,width)=>{switch(width){case 4:return function(pointer){return this.fromWireType(HEAPF32[pointer>>2])};case 8:return function(pointer){return this.fromWireType(HEAPF64[pointer>>3])};default:throw new TypeError(`invalid float width (${width}): ${name}`)}};var __embind_register_float=(rawType,name,size)=>{name=AsciiToString(name);registerType(rawType,{name,fromWireType:value=>value,toWireType:(destructors,value)=>{if(typeof value!=\"number\"&&typeof value!=\"boolean\"){throw new TypeError(`Cannot convert ${embindRepr(value)} to ${name}`)}return value},readValueFromPointer:floatReadValueFromPointer(name,size),destructorFunction:null})};var __embind_register_integer=(primitiveType,name,size,minRange,maxRange)=>{name=AsciiToString(name);const isUnsignedType=minRange===0;let fromWireType=value=>value;if(isUnsignedType){var bitshift=32-8*size;fromWireType=value=>value<<bitshift>>>bitshift;maxRange=fromWireType(maxRange)}registerType(primitiveType,{name,fromWireType,toWireType:(destructors,value)=>{if(typeof value!=\"number\"&&typeof value!=\"boolean\"){throw new TypeError(`Cannot convert \"${embindRepr(value)}\" to ${name}`)}assertIntegerRange(name,value,minRange,maxRange);return value},readValueFromPointer:integerReadValueFromPointer(name,size,minRange!==0),destructorFunction:null})};var installIndexedIterator=(proto,sizeMethodName,getMethodName)=>{const makeIterator=(size,getValue)=>{let index=0;return{next(){if(index>=size){return{done:true}}const current=index;index++;const value=getValue(current);return{value,done:false}},[Symbol.iterator](){return this}}};if(!proto[Symbol.iterator]){proto[Symbol.iterator]=function(){const size=this[sizeMethodName]();return makeIterator(size,i=>this[getMethodName](i))}}};var __embind_register_iterable=(rawClassType,rawElementType,sizeMethodName,getMethodName)=>{sizeMethodName=AsciiToString(sizeMethodName);getMethodName=AsciiToString(getMethodName);whenDependentTypesAreResolved([],[rawClassType,rawElementType],types=>{const classType=types[0];installIndexedIterator(classType.registeredClass.instancePrototype,sizeMethodName,getMethodName);return[]})};var __embind_register_memory_view=(rawType,dataTypeIndex,name)=>{var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){var size=HEAPU32[handle>>2];var data=HEAPU32[handle+4>>2];return new TA(HEAP8.buffer,data,size)}name=AsciiToString(name);registerType(rawType,{name,fromWireType:decodeMemoryView,readValueFromPointer:decodeMemoryView},{ignoreDuplicateRegistrations:true})};var EmValOptionalType=Object.assign({optional:true},EmValType);var __embind_register_optional=(rawOptionalType,rawType)=>{registerType(rawOptionalType,EmValOptionalType)};var __embind_register_std_string=(rawType,name)=>{name=AsciiToString(name);var stdStringIsUTF8=true;registerType(rawType,{name,fromWireType(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){str=UTF8ToString(payload,length,true)}else{str=\"\";for(var i=0;i<length;++i){str+=String.fromCharCode(HEAPU8[payload+i])}}_free(value);return str},toWireType(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value)}var length;var valueIsOfTypeString=typeof value==\"string\";if(!(valueIsOfTypeString||ArrayBuffer.isView(value)&&value.BYTES_PER_ELEMENT==1)){throwBindingError(\"Cannot pass non-string to std::string\")}if(stdStringIsUTF8&&valueIsOfTypeString){length=lengthBytesUTF8(value)}else{length=value.length}var base=_malloc(4+length+1);var ptr=base+4;HEAPU32[base>>2]=length;if(valueIsOfTypeString){if(stdStringIsUTF8){stringToUTF8(value,ptr,length+1)}else{for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(base);throwBindingError(\"String has UTF-16 code units that do not fit in 8 bits\")}HEAPU8[ptr+i]=charCode}}}else{HEAPU8.set(value,ptr)}if(destructors!==null){destructors.push(_free,base)}return base},readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var UTF16Decoder=globalThis.TextDecoder?new TextDecoder(\"utf-16le\"):undefined;var UTF16ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(ptr%2==0,\"pointer passed to UTF16ToString must be 2-byte aligned\");var idx=ptr>>1;var endIdx=findStringEnd(HEAPU16,idx,maxBytesToRead/2,ignoreNul);if(endIdx-idx>16&&UTF16Decoder)return UTF16Decoder.decode(HEAPU16.subarray(idx,endIdx));var str=\"\";for(var i=idx;i<endIdx;++i){var codeUnit=HEAPU16[i];str+=String.fromCharCode(codeUnit)}return str};var stringToUTF16=(str,outPtr,maxBytesToWrite=2147483647)=>{assert(outPtr%2==0,\"pointer passed to stringToUTF16 must be 2-byte aligned\");assert(typeof maxBytesToWrite==\"number\",\"stringToUTF16 requires a third parameter that specifies the length of the output buffer\");if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite<str.length*2?maxBytesToWrite/2:str.length;for(var i=0;i<numCharsToWrite;++i){var codeUnit=str.charCodeAt(i);HEAP16[outPtr>>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(ptr%4==0,\"pointer passed to UTF32ToString must be 2-byte aligned\");var str=\"\";var startIdx=ptr>>2;for(var i=0;!(i>=maxBytesToRead/4);i++){var utf32=HEAPU32[startIdx+i];if(!utf32&&!ignoreNul)break;str+=String.fromCodePoint(utf32)}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite=2147483647)=>{assert(outPtr%4==0,\"pointer passed to stringToUTF32 must be 4-byte aligned\");assert(typeof maxBytesToWrite==\"number\",\"stringToUTF32 requires a third parameter that specifies the length of the output buffer\");if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i<str.length;++i){var codePoint=str.codePointAt(i);if(codePoint>65535){i++}HEAP32[outPtr>>2]=codePoint;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i<str.length;++i){var codePoint=str.codePointAt(i);if(codePoint>65535){i++}len+=4}return len};var __embind_register_std_wstring=(rawType,charSize,name)=>{name=AsciiToString(name);var decodeString,encodeString,lengthBytesUTF;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16}else{assert(charSize===4,\"only 2-byte and 4-byte strings are currently supported\");decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32}registerType(rawType,{name,fromWireType:value=>{var length=HEAPU32[value>>2];var str=decodeString(value+4,length*charSize,true);_free(value);return str},toWireType:(destructors,value)=>{if(!(typeof value==\"string\")){throwBindingError(`Cannot pass non-string to C++ string type ${name}`)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length/charSize;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var __embind_register_value_object=(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor)=>{structRegistrations[rawType]={name:AsciiToString(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}};var __embind_register_value_object_field=(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext)=>{structRegistrations[structType].fields.push({fieldName:AsciiToString(fieldName),getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext,setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext})};var __embind_register_void=(rawType,name)=>{name=AsciiToString(name);registerType(rawType,{isVoid:true,name,fromWireType:()=>undefined,toWireType:(destructors,o)=>undefined})};var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};var emval_methodCallers=[];var emval_addMethodCaller=caller=>{var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id};var requireRegisteredType=(rawType,humanName)=>{var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`)}return impl};var emval_lookupTypes=(argCount,argTypes)=>{var a=new Array(argCount);for(var i=0;i<argCount;++i){a[i]=requireRegisteredType(HEAPU32[argTypes+i*4>>2],`parameter ${i}`)}return a};var emval_returnValue=(toReturnWire,destructorsRef,handle)=>{var destructors=[];var result=toReturnWire(destructors,handle);if(destructors.length){HEAPU32[destructorsRef>>2]=Emval.toHandle(destructors)}return result};var emval_symbols={};var getStringOrSymbol=address=>{var symbol=emval_symbols[address];if(symbol===undefined){return AsciiToString(address)}return symbol};var __emval_create_invoker=(argCount,argTypesPtr,kind)=>{var GenericWireTypeSize=8;var[retType,...argTypes]=emval_lookupTypes(argCount,argTypesPtr);var toReturnWire=retType.toWireType.bind(retType);var argFromPtr=argTypes.map(type=>type.readValueFromPointer.bind(type));argCount--;var argN=new Array(argCount);var invokerFunction=(handle,methodName,destructorsRef,args)=>{var offset=0;for(var i=0;i<argCount;++i){argN[i]=argFromPtr[i](args+offset);offset+=GenericWireTypeSize}var rv;switch(kind){case 0:rv=Emval.toValue(handle).apply(null,argN);break;case 2:rv=Reflect.construct(Emval.toValue(handle),argN);break;case 3:rv=argN[0];break;case 1:rv=Emval.toValue(handle)[getStringOrSymbol(methodName)](...argN);break}return emval_returnValue(toReturnWire,destructorsRef,rv)};var functionName=`methodCaller<(${argTypes.map(t=>t.name)}) => ${retType.name}>`;return emval_addMethodCaller(createNamedFunction(functionName,invokerFunction))};var __emval_invoke=(caller,handle,methodName,destructorsRef,args)=>emval_methodCallers[caller](handle,methodName,destructorsRef,args);var __emval_run_destructors=handle=>{var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)};var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);if(isNaN(date.getTime())){return 1}HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;return 0}var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?\"-\":\"+\";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,\"0\");var minutes=String(absOffset%60).padStart(2,\"0\");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);assert(winterName);assert(summerName);assert(lengthBytesUTF8(winterName)<=16,`timezone name truncated to fit in TZNAME_MAX (${winterName})`);assert(lengthBytesUTF8(summerName)<=16,`timezone name truncated to fit in TZNAME_MAX (${summerName})`);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,17);stringToUTF8(summerName,dst_name,17)}else{stringToUTF8(winterName,dst_name,17);stringToUTF8(summerName,std_name,17)}};var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{assert(Array.isArray(readEmAsmArgsArray));assert(buf%16==0);readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var chr=String.fromCharCode(ch);var validChars=[\"d\",\"f\",\"i\",\"p\"];validChars.push(\"j\");assert(validChars.includes(chr),`Invalid character ${ch}(\"${chr}\") in readEmAsmArgs! Use only [${validChars}], and do not specify \"v\" for void return argument.`);var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==106?HEAP64[buf>>3]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(code),`No EM_ASM constant found at address ${code}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>{assert(alignment,\"alignment argument is required\");return Math.ceil(size/alignment)*alignment};var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){err(`growMemory: Attempted to grow heap from ${oldHeapSize} bytes to ${size} bytes, but got error: ${e}`)}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`);return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);return false};var ENV={};var getExecutableName=()=>thisProgram;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??\"C\").replace(\"-\",\"_\")+\".UTF-8\";var env={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var rightsBase=0;var rightsInheriting=0;var flags=0;{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4}HEAP8[pbuf]=type;HEAP16[pbuf+2>>1]=flags;HEAP64[pbuf+8>>3]=BigInt(rightsBase);HEAP64[pbuf+16>>3]=BigInt(rightsInheriting);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;try{var curr=FS.read(stream,HEAP8,ptr,len,offset)}catch(e){if(ret>0&&e instanceof FS.ErrnoError&&(e.errno==6||e.errno==6)){break}throw e}if(curr<0)return-1;ret+=curr;if(curr<len)break;if(typeof offset!=\"undefined\"){offset+=curr}}return ret};function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 22;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{if(iovcnt==1){return FS.write(stream,HEAP8,HEAPU32[iov>>2],HEAPU32[iov+4>>2],offset)}var total=0;for(var i=0,p=iov;i<iovcnt;i++,p+=8){total+=HEAPU32[p+4>>2]}var view=new Uint8Array(total);var voff=0;for(var i=0;i<iovcnt;i++,iov+=8){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];view.set(HEAPU8.subarray(ptr,ptr+len),voff);voff+=len}return FS.write(stream,view,0,total,offset)};function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}var FS_createPath=(...args)=>FS.createPath(...args);var FS_unlink=(...args)=>FS.unlink(...args);var FS_createLazyFile=(...args)=>FS.createLazyFile(...args);var FS_createDevice=(...args)=>FS.createDevice(...args);FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();init_ClassHandle();init_RegisteredPointer();assert(emval_handles.length===5*2);{if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];checkIncomingModuleAPI();assert(typeof Module[\"memoryInitializerPrefixURL\"]==\"undefined\",\"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"pthreadMainPrefixURL\"]==\"undefined\",\"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"cdInitializerPrefixURL\"]==\"undefined\",\"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"filePackagePrefixURL\"]==\"undefined\",\"Module.filePackagePrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"read\"]==\"undefined\",\"Module.read option was removed\");assert(typeof Module[\"readAsync\"]==\"undefined\",\"Module.readAsync option was removed (modify readAsync in JS)\");assert(typeof Module[\"readBinary\"]==\"undefined\",\"Module.readBinary option was removed (modify readBinary in JS)\");assert(typeof Module[\"setWindowTitle\"]==\"undefined\",\"Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)\");assert(typeof Module[\"TOTAL_MEMORY\"]==\"undefined\",\"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY\");assert(typeof Module[\"ENVIRONMENT\"]==\"undefined\",\"Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)\");assert(typeof Module[\"STACK_SIZE\"]==\"undefined\",\"STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time\");assert(typeof Module[\"wasmMemory\"]==\"undefined\",\"Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally\");assert(typeof Module[\"INITIAL_MEMORY\"]==\"undefined\",\"Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically\")}Module[\"addRunDependency\"]=addRunDependency;Module[\"removeRunDependency\"]=removeRunDependency;Module[\"UTF8ToString\"]=UTF8ToString;Module[\"stringToUTF8\"]=stringToUTF8;Module[\"FS_preloadFile\"]=FS_preloadFile;Module[\"FS_unlink\"]=FS_unlink;Module[\"FS_createPath\"]=FS_createPath;Module[\"FS_createDevice\"]=FS_createDevice;Module[\"FS\"]=FS;Module[\"FS_createDataFile\"]=FS_createDataFile;Module[\"FS_createLazyFile\"]=FS_createLazyFile;var missingLibrarySymbols=[\"writeI53ToI64\",\"writeI53ToI64Clamped\",\"writeI53ToI64Signaling\",\"writeI53ToU64Clamped\",\"writeI53ToU64Signaling\",\"readI53FromI64\",\"readI53FromU64\",\"convertI32PairToI53\",\"convertI32PairToI53Checked\",\"convertU32PairToI53\",\"stackAlloc\",\"getTempRet0\",\"setTempRet0\",\"zeroMemory\",\"exitJS\",\"withStackSave\",\"writeSockaddr\",\"runMainThreadEmAsm\",\"jstoi_q\",\"autoResumeAudioContext\",\"getDynCaller\",\"dynCall\",\"handleException\",\"keepRuntimeAlive\",\"runtimeKeepalivePush\",\"runtimeKeepalivePop\",\"callUserCallback\",\"maybeExit\",\"asmjsMangle\",\"HandleAllocator\",\"addOnInit\",\"addOnPostCtor\",\"addOnPreMain\",\"addOnExit\",\"addOnPostRun\",\"STACK_SIZE\",\"STACK_ALIGN\",\"POINTER_SIZE\",\"ASSERTIONS\",\"ccall\",\"cwrap\",\"convertJsFunctionToWasm\",\"getEmptyTableSlot\",\"updateTableMap\",\"getFunctionAddress\",\"addFunction\",\"removeFunction\",\"intArrayToString\",\"stringToAscii\",\"stringToNewUTF8\",\"stringToUTF8OnStack\",\"writeArrayToMemory\",\"registerKeyEventCallback\",\"maybeCStringToJsString\",\"findEventTarget\",\"getBoundingClientRect\",\"fillMouseEventData\",\"registerMouseEventCallback\",\"registerWheelEventCallback\",\"registerUiEventCallback\",\"registerFocusEventCallback\",\"fillDeviceOrientationEventData\",\"registerDeviceOrientationEventCallback\",\"fillDeviceMotionEventData\",\"registerDeviceMotionEventCallback\",\"screenOrientation\",\"fillOrientationChangeEventData\",\"registerOrientationChangeEventCallback\",\"fillFullscreenChangeEventData\",\"registerFullscreenChangeEventCallback\",\"callCanvasResizedCallback\",\"JSEvents_requestFullscreen\",\"JSEvents_resizeCanvasForFullscreen\",\"registerRestoreOldStyle\",\"hideEverythingExceptGivenElement\",\"restoreHiddenElements\",\"setLetterbox\",\"currentFullscreenStrategy\",\"softFullscreenResizeWebGLRenderTarget\",\"doRequestFullscreen\",\"fillPointerlockChangeEventData\",\"registerPointerlockChangeEventCallback\",\"registerPointerlockErrorEventCallback\",\"requestPointerLock\",\"fillVisibilityChangeEventData\",\"registerVisibilityChangeEventCallback\",\"registerTouchEventCallback\",\"fillGamepadEventData\",\"registerGamepadEventCallback\",\"registerBeforeUnloadEventCallback\",\"fillBatteryEventData\",\"registerBatteryEventCallback\",\"setCanvasElementSize\",\"getCanvasElementSize\",\"jsStackTrace\",\"getCallstack\",\"convertPCtoSourceLocation\",\"wasiRightsToMuslOFlags\",\"wasiOFlagsToMuslOFlags\",\"safeSetTimeout\",\"setImmediateWrapped\",\"safeRequestAnimationFrame\",\"clearImmediateWrapped\",\"registerPostMainLoop\",\"registerPreMainLoop\",\"getPromise\",\"makePromise\",\"addPromise\",\"idsToPromises\",\"makePromiseCallback\",\"findMatchingCatch\",\"incrementUncaughtExceptionCount\",\"decrementUncaughtExceptionCount\",\"Browser_asyncPrepareDataCounter\",\"arraySum\",\"addDays\",\"FS_mkdirTree\",\"_setNetworkCallback\",\"heapObjectForWebGLType\",\"toTypedArrayIndex\",\"webgl_enable_ANGLE_instanced_arrays\",\"webgl_enable_OES_vertex_array_object\",\"webgl_enable_WEBGL_draw_buffers\",\"webgl_enable_WEBGL_multi_draw\",\"webgl_enable_EXT_polygon_offset_clamp\",\"webgl_enable_EXT_clip_control\",\"webgl_enable_WEBGL_polygon_mode\",\"emscriptenWebGLGet\",\"computeUnpackAlignedImageSize\",\"colorChannelsInGlTextureFormat\",\"emscriptenWebGLGetTexPixelData\",\"emscriptenWebGLGetUniform\",\"webglGetProgramUniformLocation\",\"webglGetUniformLocation\",\"webglPrepareUniformLocationsBeforeFirstUse\",\"webglGetLeftBracePos\",\"emscriptenWebGLGetVertexAttrib\",\"__glGetActiveAttribOrUniform\",\"writeGLArray\",\"registerWebGlEventCallback\",\"runAndAbortIfError\",\"ALLOC_NORMAL\",\"ALLOC_STACK\",\"allocate\",\"writeStringToMemory\",\"writeAsciiToMemory\",\"allocateUTF8\",\"allocateUTF8OnStack\",\"demangle\",\"stackTrace\",\"getNativeTypeSize\",\"getFunctionArgsName\",\"createJsInvokerSignature\",\"getEnumValueType\",\"createJsInvoker\",\"PureVirtualError\",\"registerInheritedInstance\",\"unregisterInheritedInstance\",\"getInheritedInstanceCount\",\"getLiveInheritedInstances\",\"enumReadValueFromPointer\",\"setDelayFunction\",\"validateThis\",\"count_emval_handles\"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=[\"run\",\"out\",\"err\",\"callMain\",\"abort\",\"wasmExports\",\"writeStackCookie\",\"checkStackCookie\",\"INT53_MAX\",\"INT53_MIN\",\"bigintToI53Checked\",\"HEAP8\",\"HEAPU8\",\"HEAP16\",\"HEAPU16\",\"HEAP32\",\"HEAPU32\",\"HEAPF32\",\"HEAPF64\",\"HEAP64\",\"HEAPU64\",\"stackSave\",\"stackRestore\",\"createNamedFunction\",\"ptrToString\",\"getHeapMax\",\"growMemory\",\"ENV\",\"ERRNO_CODES\",\"strError\",\"inetPton4\",\"inetNtop4\",\"inetPton6\",\"inetNtop6\",\"readSockaddr\",\"DNS\",\"Protocols\",\"Sockets\",\"timers\",\"warnOnce\",\"readEmAsmArgsArray\",\"readEmAsmArgs\",\"runEmAsmFunction\",\"getExecutableName\",\"asyncLoad\",\"alignMemory\",\"mmapAlloc\",\"wasmTable\",\"wasmMemory\",\"getUniqueRunDependency\",\"noExitRuntime\",\"addOnPreRun\",\"freeTableIndexes\",\"functionsInTableMap\",\"setValue\",\"getValue\",\"PATH\",\"PATH_FS\",\"UTF8Decoder\",\"UTF8ArrayToString\",\"stringToUTF8Array\",\"lengthBytesUTF8\",\"intArrayFromString\",\"AsciiToString\",\"UTF16Decoder\",\"UTF16ToString\",\"stringToUTF16\",\"lengthBytesUTF16\",\"UTF32ToString\",\"stringToUTF32\",\"lengthBytesUTF32\",\"JSEvents\",\"specialHTMLTargets\",\"findCanvasEventTarget\",\"restoreOldWindowedStyle\",\"UNWIND_CACHE\",\"ExitStatus\",\"getEnvStrings\",\"checkWasiClock\",\"doReadv\",\"doWritev\",\"initRandomFill\",\"randomFill\",\"emSetImmediate\",\"emClearImmediate_deps\",\"emClearImmediate\",\"promiseMap\",\"uncaughtExceptionCount\",\"exceptionCaught\",\"ExceptionInfo\",\"Browser\",\"requestFullscreen\",\"requestFullScreen\",\"setCanvasSize\",\"getUserMedia\",\"createContext\",\"getPreloadedImageData__data\",\"wget\",\"MONTH_DAYS_REGULAR\",\"MONTH_DAYS_LEAP\",\"MONTH_DAYS_REGULAR_CUMULATIVE\",\"MONTH_DAYS_LEAP_CUMULATIVE\",\"isLeapYear\",\"ydayFromDate\",\"SYSCALLS\",\"getSocketFromFD\",\"getSocketAddress\",\"preloadPlugins\",\"FS_createPreloadedFile\",\"FS_modeStringToFlags\",\"FS_getMode\",\"FS_fileDataToTypedArray\",\"FS_stdin_getChar_buffer\",\"FS_stdin_getChar\",\"FS_readFile\",\"FS_root\",\"FS_mounts\",\"FS_devices\",\"FS_streams\",\"FS_nextInode\",\"FS_nameTable\",\"FS_currentPath\",\"FS_initialized\",\"FS_ignorePermissions\",\"FS_filesystems\",\"FS_syncFSRequests\",\"FS_lookupPath\",\"FS_getPath\",\"FS_hashName\",\"FS_hashAddNode\",\"FS_hashRemoveNode\",\"FS_lookupNode\",\"FS_createNode\",\"FS_destroyNode\",\"FS_isRoot\",\"FS_isMountpoint\",\"FS_isFile\",\"FS_isDir\",\"FS_isLink\",\"FS_isChrdev\",\"FS_isBlkdev\",\"FS_isFIFO\",\"FS_isSocket\",\"FS_flagsToPermissionString\",\"FS_nodePermissions\",\"FS_mayLookup\",\"FS_mayCreate\",\"FS_mayDelete\",\"FS_mayOpen\",\"FS_checkOpExists\",\"FS_nextfd\",\"FS_getStreamChecked\",\"FS_getStream\",\"FS_createStream\",\"FS_closeStream\",\"FS_dupStream\",\"FS_doSetAttr\",\"FS_chrdev_stream_ops\",\"FS_major\",\"FS_minor\",\"FS_makedev\",\"FS_registerDevice\",\"FS_getDevice\",\"FS_getMounts\",\"FS_syncfs\",\"FS_mount\",\"FS_unmount\",\"FS_lookup\",\"FS_mknod\",\"FS_statfs\",\"FS_statfsStream\",\"FS_statfsNode\",\"FS_create\",\"FS_mkdir\",\"FS_mkdev\",\"FS_symlink\",\"FS_link\",\"FS_rename\",\"FS_rmdir\",\"FS_readdir\",\"FS_readlink\",\"FS_stat\",\"FS_fstat\",\"FS_lstat\",\"FS_doChmod\",\"FS_chmod\",\"FS_lchmod\",\"FS_fchmod\",\"FS_doChown\",\"FS_chown\",\"FS_lchown\",\"FS_fchown\",\"FS_doTruncate\",\"FS_truncate\",\"FS_ftruncate\",\"FS_utime\",\"FS_open\",\"FS_close\",\"FS_isClosed\",\"FS_llseek\",\"FS_read\",\"FS_write\",\"FS_mmap\",\"FS_msync\",\"FS_ioctl\",\"FS_writeFile\",\"FS_cwd\",\"FS_chdir\",\"FS_createDefaultDirectories\",\"FS_createDefaultDevices\",\"FS_createSpecialDirectories\",\"FS_createStandardStreams\",\"FS_staticInit\",\"FS_init\",\"FS_quit\",\"FS_findObject\",\"FS_analyzePath\",\"FS_createFile\",\"FS_forceLoadFile\",\"MEMFS\",\"TTY\",\"PIPEFS\",\"SOCKFS\",\"tempFixedLengthArray\",\"miniTempWebGLFloatBuffers\",\"miniTempWebGLIntBuffers\",\"GL\",\"AL\",\"GLUT\",\"EGL\",\"GLEW\",\"IDBStore\",\"SDL\",\"SDL_gfx\",\"print\",\"printErr\",\"jstoi_s\",\"InternalError\",\"BindingError\",\"throwInternalError\",\"throwBindingError\",\"registeredTypes\",\"awaitingDependencies\",\"typeDependencies\",\"tupleRegistrations\",\"structRegistrations\",\"sharedRegisterType\",\"whenDependentTypesAreResolved\",\"getTypeName\",\"getFunctionName\",\"heap32VectorToArray\",\"requireRegisteredType\",\"usesDestructorStack\",\"checkArgCount\",\"getRequiredArgCount\",\"UnboundTypeError\",\"EmValType\",\"EmValOptionalType\",\"throwUnboundTypeError\",\"ensureOverloadTable\",\"exposePublicSymbol\",\"replacePublicSymbol\",\"embindRepr\",\"registeredInstances\",\"getBasestPointer\",\"getInheritedInstance\",\"registeredPointers\",\"registerType\",\"integerReadValueFromPointer\",\"floatReadValueFromPointer\",\"assertIntegerRange\",\"readPointer\",\"installIndexedIterator\",\"runDestructors\",\"craftInvokerFunction\",\"embind__requireFunction\",\"genericPointerToWireType\",\"constNoSmartPtrRawPointerToWireType\",\"nonConstNoSmartPtrRawPointerToWireType\",\"init_RegisteredPointer\",\"RegisteredPointer\",\"RegisteredPointer_fromWireType\",\"runDestructor\",\"releaseClassHandle\",\"finalizationRegistry\",\"detachFinalizer_deps\",\"detachFinalizer\",\"attachFinalizer\",\"makeClassHandle\",\"init_ClassHandle\",\"ClassHandle\",\"throwInstanceAlreadyDeleted\",\"deletionQueue\",\"flushPendingDeletes\",\"delayFunction\",\"RegisteredClass\",\"shallowCopyInternalPointer\",\"downcastPointer\",\"upcastPointer\",\"char_0\",\"char_9\",\"makeLegalFunctionName\",\"emval_freelist\",\"emval_handles\",\"emval_symbols\",\"getStringOrSymbol\",\"Emval\",\"emval_returnValue\",\"emval_lookupTypes\",\"emval_methodCallers\",\"emval_addMethodCaller\"];unexportedSymbols.forEach(unexportedRuntimeSymbol);function checkIncomingModuleAPI(){ignoredModuleProp(\"ENVIRONMENT\");ignoredModuleProp(\"arguments\");ignoredModuleProp(\"canvas\");ignoredModuleProp(\"dynamicLibraries\");ignoredModuleProp(\"elementPointerLock\");ignoredModuleProp(\"instantiateWasm\");ignoredModuleProp(\"locateFile\");ignoredModuleProp(\"monitorRunDependencies\");ignoredModuleProp(\"noExitRuntime\");ignoredModuleProp(\"noInitialRun\");ignoredModuleProp(\"onAbort\");ignoredModuleProp(\"onExit\");ignoredModuleProp(\"onRuntimeInitialized\");ignoredModuleProp(\"postRun\");ignoredModuleProp(\"preInit\");ignoredModuleProp(\"print\");ignoredModuleProp(\"printErr\");ignoredModuleProp(\"setStatus\");ignoredModuleProp(\"statusMessage\");ignoredModuleProp(\"stderr\");ignoredModuleProp(\"stdin\");ignoredModuleProp(\"stdout\");ignoredModuleProp(\"thisProgram\");ignoredModuleProp(\"wasm\");ignoredModuleProp(\"websocket\");ignoredModuleProp(\"fetchSettings\");ignoredModuleProp(\"logReadFiles\");ignoredModuleProp(\"loadSplitModule\");ignoredModuleProp(\"onMalloc\");ignoredModuleProp(\"onRealloc\");ignoredModuleProp(\"onFree\");ignoredModuleProp(\"onSbrkGrow\");ignoredModuleProp(\"onCOSCacheHit\");ignoredModuleProp(\"onCOSCacheMiss\");ignoredModuleProp(\"onCOSStore\");ignoredModuleProp(\"GL_MAX_TEXTURE_IMAGE_UNITS\");ignoredModuleProp(\"SDL_canPlayWithWebAudio\");ignoredModuleProp(\"SDL_numSimultaneouslyQueuedBuffers\");ignoredModuleProp(\"freePreloadedMediaOnUse\");ignoredModuleProp(\"preinitializedWebGLContext\");ignoredModuleProp(\"keyboardListeningElement\");ignoredModuleProp(\"doNotCaptureKeyboard\");ignoredModuleProp(\"extraStackTrace\");ignoredModuleProp(\"preloadPlugins\");ignoredModuleProp(\"preMainLoop\");ignoredModuleProp(\"postMainLoop\");ignoredModuleProp(\"forcedAspectRatio\");ignoredModuleProp(\"mainScriptUrlOrBlob\");ignoredModuleProp(\"onFullScreen\");ignoredModuleProp(\"INITIAL_MEMORY\");ignoredModuleProp(\"wasmMemory\")}var ASM_CONSTS={167012:$0=>{var dsp_code=\"\";try{var xmlhttp=new XMLHttpRequest;xmlhttp.open(\"GET\",Module.UTF8ToString($0),false);xmlhttp.send();if(xmlhttp.status==200){dsp_code=xmlhttp.responseText}}catch(e){console.log(e)}return allocate(intArrayFromString(dsp_code),\"i8\",ALLOC_STACK)}};var ___getTypeName=makeInvalidEarlyAccess(\"___getTypeName\");var _malloc=makeInvalidEarlyAccess(\"_malloc\");var _free=makeInvalidEarlyAccess(\"_free\");var _strerror=makeInvalidEarlyAccess(\"_strerror\");var _htons=makeInvalidEarlyAccess(\"_htons\");var _fflush=makeInvalidEarlyAccess(\"_fflush\");var _ntohs=makeInvalidEarlyAccess(\"_ntohs\");var _emscripten_stack_get_end=makeInvalidEarlyAccess(\"_emscripten_stack_get_end\");var _emscripten_stack_get_base=makeInvalidEarlyAccess(\"_emscripten_stack_get_base\");var _emscripten_stack_init=makeInvalidEarlyAccess(\"_emscripten_stack_init\");var _emscripten_stack_get_free=makeInvalidEarlyAccess(\"_emscripten_stack_get_free\");var __emscripten_stack_restore=makeInvalidEarlyAccess(\"__emscripten_stack_restore\");var __emscripten_stack_alloc=makeInvalidEarlyAccess(\"__emscripten_stack_alloc\");var _emscripten_stack_get_current=makeInvalidEarlyAccess(\"_emscripten_stack_get_current\");var memory=makeInvalidEarlyAccess(\"memory\");var __indirect_function_table=makeInvalidEarlyAccess(\"__indirect_function_table\");var wasmMemory=makeInvalidEarlyAccess(\"wasmMemory\");var wasmTable=makeInvalidEarlyAccess(\"wasmTable\");function assignWasmExports(wasmExports){assert(typeof wasmExports[\"__getTypeName\"]!=\"undefined\",\"missing Wasm export: __getTypeName\");assert(typeof wasmExports[\"malloc\"]!=\"undefined\",\"missing Wasm export: malloc\");assert(typeof wasmExports[\"free\"]!=\"undefined\",\"missing Wasm export: free\");assert(typeof wasmExports[\"strerror\"]!=\"undefined\",\"missing Wasm export: strerror\");assert(typeof wasmExports[\"htons\"]!=\"undefined\",\"missing Wasm export: htons\");assert(typeof wasmExports[\"fflush\"]!=\"undefined\",\"missing Wasm export: fflush\");assert(typeof wasmExports[\"ntohs\"]!=\"undefined\",\"missing Wasm export: ntohs\");assert(typeof wasmExports[\"emscripten_stack_get_end\"]!=\"undefined\",\"missing Wasm export: emscripten_stack_get_end\");assert(typeof wasmExports[\"emscripten_stack_get_base\"]!=\"undefined\",\"missing Wasm export: emscripten_stack_get_base\");assert(typeof wasmExports[\"emscripten_stack_init\"]!=\"undefined\",\"missing Wasm export: emscripten_stack_init\");assert(typeof wasmExports[\"emscripten_stack_get_free\"]!=\"undefined\",\"missing Wasm export: emscripten_stack_get_free\");assert(typeof wasmExports[\"_emscripten_stack_restore\"]!=\"undefined\",\"missing Wasm export: _emscripten_stack_restore\");assert(typeof wasmExports[\"_emscripten_stack_alloc\"]!=\"undefined\",\"missing Wasm export: _emscripten_stack_alloc\");assert(typeof wasmExports[\"emscripten_stack_get_current\"]!=\"undefined\",\"missing Wasm export: emscripten_stack_get_current\");assert(typeof wasmExports[\"memory\"]!=\"undefined\",\"missing Wasm export: memory\");assert(typeof wasmExports[\"__indirect_function_table\"]!=\"undefined\",\"missing Wasm export: __indirect_function_table\");___getTypeName=createExportWrapper(\"__getTypeName\",wasmExports[\"__getTypeName\"],1);_malloc=createExportWrapper(\"malloc\",wasmExports[\"malloc\"],1);_free=createExportWrapper(\"free\",wasmExports[\"free\"],1);_strerror=createExportWrapper(\"strerror\",wasmExports[\"strerror\"],1);_htons=createExportWrapper(\"htons\",wasmExports[\"htons\"],1);_fflush=createExportWrapper(\"fflush\",wasmExports[\"fflush\"],1);_ntohs=createExportWrapper(\"ntohs\",wasmExports[\"ntohs\"],1);_emscripten_stack_get_end=wasmExports[\"emscripten_stack_get_end\"];_emscripten_stack_get_base=wasmExports[\"emscripten_stack_get_base\"];_emscripten_stack_init=wasmExports[\"emscripten_stack_init\"];_emscripten_stack_get_free=wasmExports[\"emscripten_stack_get_free\"];__emscripten_stack_restore=wasmExports[\"_emscripten_stack_restore\"];__emscripten_stack_alloc=wasmExports[\"_emscripten_stack_alloc\"];_emscripten_stack_get_current=wasmExports[\"emscripten_stack_get_current\"];memory=wasmMemory=wasmExports[\"memory\"];__indirect_function_table=wasmTable=wasmExports[\"__indirect_function_table\"]}var wasmImports={__assert_fail:___assert_fail,__cxa_throw:___cxa_throw,__syscall_chdir:___syscall_chdir,__syscall_connect:___syscall_connect,__syscall_fcntl64:___syscall_fcntl64,__syscall_getcwd:___syscall_getcwd,__syscall_ioctl:___syscall_ioctl,__syscall_mkdirat:___syscall_mkdirat,__syscall_openat:___syscall_openat,__syscall_poll:___syscall_poll,__syscall_readlinkat:___syscall_readlinkat,__syscall_socket:___syscall_socket,_abort_js:__abort_js,_embind_finalize_value_object:__embind_finalize_value_object,_embind_register_bigint:__embind_register_bigint,_embind_register_bool:__embind_register_bool,_embind_register_class:__embind_register_class,_embind_register_class_constructor:__embind_register_class_constructor,_embind_register_class_function:__embind_register_class_function,_embind_register_emval:__embind_register_emval,_embind_register_float:__embind_register_float,_embind_register_integer:__embind_register_integer,_embind_register_iterable:__embind_register_iterable,_embind_register_memory_view:__embind_register_memory_view,_embind_register_optional:__embind_register_optional,_embind_register_std_string:__embind_register_std_string,_embind_register_std_wstring:__embind_register_std_wstring,_embind_register_value_object:__embind_register_value_object,_embind_register_value_object_field:__embind_register_value_object_field,_embind_register_void:__embind_register_void,_emscripten_lookup_name:__emscripten_lookup_name,_emval_create_invoker:__emval_create_invoker,_emval_invoke:__emval_invoke,_emval_run_destructors:__emval_run_destructors,_localtime_js:__localtime_js,_tzset_js:__tzset_js,clock_time_get:_clock_time_get,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_date_now:_emscripten_date_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write};var calledRun;function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}async function run(){assert(!calledRun);calledRun=true;stackCheckInit();preRun();if(runDependencies){await resolveRunDependencies()}if(ABORT)return;initRuntime();assert(!Module[\"_main\"],'compiled without a main, but one is present. if you added it from JS, use Module[\"onRuntimeInitialized\"]');postRun()}var wasmExports;wasmExports=await createWasm();await run();for(const prop of Object.keys(Module)){if(!(prop in moduleArg)){Object.defineProperty(moduleArg,prop,{configurable:true,get(){abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}})}}\n;return Module}})();if(typeof exports===\"object\"&&typeof module===\"object\"){module.exports=FaustModule;module.exports.default=FaustModule}else if(typeof define===\"function\"&&define[\"amd\"])define([],()=>FaustModule);\n", "import factoryFn from '../libfaust-wasm/libfaust-wasm.cjs';\nimport wasmBinary from '../libfaust-wasm/libfaust-wasm.wasm';\nimport dataBinary from '../libfaust-wasm/libfaust-wasm.data';\n\nexport const FaustModuleFactoryFn = factoryFn;\nexport const FaustModuleFactoryWasm = wasmBinary;\nexport const FaustModuleFactoryData = dataBinary;\n\n/**\n * Instantiate `FaustModule` using bundled binaries. Module constructor and files can be overriden.\n */\nconst instantiateFaustModule = async (\n FaustModuleFactoryIn = factoryFn,\n dataBinaryIn = dataBinary,\n wasmBinaryIn = wasmBinary\n) => {\n const g = globalThis as any;\n if (g.AudioWorkletGlobalScope) {\n g.importScripts = () => {};\n g.self = { location: { href: '' } };\n }\n const faustModule = await FaustModuleFactoryIn({\n // Create a copy to guarantee a standard ArrayBuffer\n wasmBinary: new Uint8Array(wasmBinaryIn).buffer,\n getPreloadedPackage: (\n remotePackageName: string,\n remotePackageSize: number\n ) => {\n if (remotePackageName === 'libfaust-wasm.data') {\n // Create a copy to guarantee a standard ArrayBuffer\n return new Uint8Array(dataBinaryIn).buffer;\n }\n return new ArrayBuffer(0);\n }\n });\n if (g.AudioWorkletGlobalScope) {\n delete g.importScripts;\n delete g.self;\n }\n return faustModule;\n};\n\nexport default instantiateFaustModule;\n", "import type { FaustModuleFactory } from './types';\n\n/**\n * Load libfaust-wasm files, than instantiate libFaust\n * @param jsFile path to `libfaust-wasm.js`\n * @param dataFile path to `libfaust-wasm.data`\n * @param wasmFile path to `libfaust-wasm.wasm`\n */\nconst instantiateFaustModuleFromFile = async (\n jsFile: string,\n dataFile = jsFile.replace(/c?js$/, 'data'),\n wasmFile = jsFile.replace(/c?js$/, 'wasm')\n) => {\n let FaustModule: FaustModuleFactory;\n let dataBinary: ArrayBuffer;\n let wasmBinary: ArrayBuffer;\n // Match both `var FaustModule = (` (older emcc) and `var FaustModule=(` (emcc 5.x)\n const jsCodeHead = /var (\\w+)\\s*=\\s*\\(/;\n if (typeof window === 'object') {\n let jsCode = await (await fetch(jsFile)).text();\n jsCode = `${jsCode}\nexport default ${jsCode.match(jsCodeHead)?.[1]};\n`;\n const jsFileMod = URL.createObjectURL(\n new Blob([jsCode], { type: 'text/javascript' })\n );\n FaustModule = (await import(/* webpackIgnore: true */ jsFileMod))\n .default;\n dataBinary = await (await fetch(dataFile)).arrayBuffer();\n wasmBinary = await (await fetch(wasmFile)).arrayBuffer();\n } else {\n const { promises: fs } = await import('fs');\n const { pathToFileURL } = await import('url');\n let jsCode = await fs.readFile(jsFile, { encoding: 'utf-8' });\n jsCode = `\nimport process from \"process\";\nimport * as path from \"path\";\nimport { createRequire } from \"module\";\nimport { fileURLToPath } from \"url\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst __filename = fileURLToPath(import.meta.url);\nconst require = createRequire(import.meta.url);\n\n${jsCode}\n\nexport default ${jsCode.match(jsCodeHead)?.[1]};\n`;\n const jsFileMod = jsFile.replace(/c?js$/, 'mjs');\n await fs.writeFile(jsFileMod, jsCode);\n FaustModule = (\n await import(\n /* webpackIgnore: true */ pathToFileURL(jsFileMod).href\n )\n ).default;\n await fs.unlink(jsFileMod);\n // Using a type assertion `as ArrayBuffer` to satisfy the strict type checking.\n dataBinary = new Uint8Array(await fs.readFile(dataFile))\n .buffer as ArrayBuffer;\n wasmBinary = new Uint8Array(await fs.readFile(wasmFile))\n .buffer as ArrayBuffer;\n }\n const faustModule = await FaustModule({\n wasmBinary,\n getPreloadedPackage: (\n remotePackageName: string,\n remotePackageSize: number\n ) => {\n if (remotePackageName === 'libfaust-wasm.data') return dataBinary;\n return new ArrayBuffer(0);\n }\n });\n return faustModule;\n};\n\nexport default instantiateFaustModuleFromFile;\n", "import type { FaustAudioWorkletProcessorCommunicator } from './FaustAudioWorkletCommunicator';\nimport type FaustWasmInstantiator from './FaustWasmInstantiator';\nimport type {\n FaustBaseWebAudioDsp,\n FaustTimedEvent,\n FaustWebAudioDspVoice,\n FaustMonoWebAudioDsp,\n FaustPolyWebAudioDsp\n} from './FaustWebAudioDsp';\nimport type {\n AudioParamDescriptor,\n AudioWorkletGlobalScope,\n LooseFaustDspFactory,\n FaustDspMeta,\n FaustUIItem\n} from './types';\nimport type {\n AudioWorkletGlobalScope as WamAudioWorkletGlobalScope,\n WamParamMgrSDKBaseModuleScope\n} from '@webaudiomodules/sdk-parammgr';\n\n/**\n * When a port message should take effect.\n *\n * Both fields are on the audio clock, the one `AudioParam` is scheduled\n * against: `time` in AudioContext seconds, `frame` in samples for a sender\n * that already counts in samples. Neither field means \"on arrival\".\n */\nexport interface FaustMessageTime {\n /** AudioContext seconds, as passed to `AudioParam.setValueAtTime` */\n time?: number;\n /** The same instant in samples since the context started */\n frame?: number;\n}\n\n/**\n * Injected in the string to be compiled on AudioWorkletProcessor side\n */\nexport interface FaustData {\n processorName: string;\n dspName: string;\n dspMeta: FaustDspMeta;\n poly: boolean;\n effectMeta?: FaustDspMeta;\n}\nexport interface FaustAudioWorkletProcessorDependencies<\n Poly extends boolean = false\n> {\n FaustBaseWebAudioDsp: typeof FaustBaseWebAudioDsp;\n FaustMonoWebAudioDsp: Poly extends true\n ? undefined\n : typeof FaustMonoWebAudioDsp;\n FaustPolyWebAudioDsp: Poly extends true\n ? typeof FaustPolyWebAudioDsp\n : undefined;\n FaustWebAudioDspVoice: Poly extends true\n ? typeof FaustWebAudioDspVoice\n : undefined;\n FaustWasmInstantiator: typeof FaustWasmInstantiator;\n FaustAudioWorkletProcessorCommunicator: typeof FaustAudioWorkletProcessorCommunicator;\n}\nexport interface FaustAudioWorkletNodeOptions<\n Poly extends boolean = false\n> extends AudioWorkletNodeOptions {\n processorOptions: Poly extends true\n ? FaustPolyAudioWorkletProcessorOptions\n : FaustMonoAudioWorkletProcessorOptions;\n}\nexport interface FaustMonoAudioWorkletNodeOptions extends AudioWorkletNodeOptions {\n processorOptions: FaustMonoAudioWorkletProcessorOptions;\n}\nexport interface FaustPolyAudioWorkletNodeOptions extends AudioWorkletNodeOptions {\n processorOptions: FaustPolyAudioWorkletProcessorOptions;\n}\nexport interface FaustAudioWorkletProcessorOptions {\n name: string;\n sampleSize: number;\n // for WAMs\n moduleId?: string;\n instanceId?: string;\n}\nexport interface FaustMonoAudioWorkletProcessorOptions extends FaustAudioWorkletProcessorOptions {\n factory: LooseFaustDspFactory;\n}\nexport interface FaustPolyAudioWorkletProcessorOptions extends FaustAudioWorkletProcessorOptions {\n voiceFactory: LooseFaustDspFactory;\n mixerModule: WebAssembly.Module;\n voices: number;\n effectFactory?: LooseFaustDspFactory;\n}\n\n// Dynamic AudioWorkletProcessor code generator\nconst getFaustAudioWorkletProcessor = <Poly extends boolean = false>(\n dependencies: FaustAudioWorkletProcessorDependencies<Poly>,\n faustData: FaustData,\n register = true\n): typeof AudioWorkletProcessor => {\n const { registerProcessor, AudioWorkletProcessor, sampleRate } =\n globalThis as unknown as AudioWorkletGlobalScope;\n\n // `currentFrame` is the audio clock in samples. It advances every\n // `process` call, so it must be read then, not destructured once.\n const audioClock = globalThis as unknown as AudioWorkletGlobalScope;\n\n // The render quantum, fixed by the Web Audio API and matching the buffer\n // size the DSPs below are constructed with.\n const kBlockSize = 128;\n\n /**\n * A timed event, plus a tie-break for events sharing a frame.\n *\n * Frame alone leaves two events on the same sample unordered, and a\n * `keyOff` sorting ahead of its own `keyOn` leaves a voice stuck on. The\n * ranking is the order these three ran in before any of them were timed:\n * automation first, as the state the block starts from, then sensors, then\n * messages in the order the queue hands them over.\n */\n type FaustTimedEventSeq = FaustTimedEvent & { seq: number };\n\n const kFromAutomation = -2;\n const kFromSensors = -1;\n\n /** Stands in for the `apply` of a cancelled event. */\n const kCancelled = () => {};\n\n /**\n * Where a control stops looking like a series of edges and starts looking\n * like a ramp, and how coarsely a ramp is then followed.\n *\n * Every Faust slider is an a-rate AudioParam, so one\n * `linearRampToValueAtTime` gives `process` 128 distinct values for a\n * single control. Honouring each would mean 128 one-frame `compute` calls\n * per block, each re-running the DSP's control section, plus 128\n * `in-param` messages to the main thread.\n *\n * Sample accuracy is for edges -- gates, triggers, switches -- which move\n * once or twice a block. A control that changes more often than\n * `kRampChanges` is followed every `kRampStride` changes instead, plus the\n * value it ends the block on.\n */\n const kRampChanges = 16;\n const kRampStride = 16;\n\n const {\n FaustBaseWebAudioDsp,\n FaustWasmInstantiator,\n FaustAudioWorkletProcessorCommunicator\n } = dependencies;\n\n const { processorName, dspName, dspMeta, effectMeta, poly } = faustData;\n\n // Analyse voice JSON to generate AudioParam parameters\n const analysePolyParameters = (\n item: FaustUIItem\n ): AudioParamDescriptor | null => {\n const polyKeywords = [\n '/gate',\n '/freq',\n '/gain',\n '/key',\n '/vel',\n '/velocity'\n ];\n const isPolyReserved =\n 'address' in item &&\n !!polyKeywords.find((k) => item.address.endsWith(k));\n if (poly && isPolyReserved) return null;\n if (\n item.type === 'vslider' ||\n item.type === 'hslider' ||\n item.type === 'nentry'\n ) {\n return {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: item.min || 0,\n maxValue: item.max || 0\n };\n } else if (item.type === 'button' || item.type === 'checkbox') {\n return {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: 0,\n maxValue: 1\n };\n }\n return null;\n };\n\n /**\n * Base class for Monophonic and Polyphonic AudioWorkletProcessor\n */\n abstract class FaustAudioWorkletProcessor<\n Poly extends boolean = false\n > extends AudioWorkletProcessor {\n // Use ! syntax when the field is not defined in the constructor\n protected fDSPCode!: Poly extends true\n ? FaustPolyWebAudioDsp\n : FaustMonoWebAudioDsp;\n\n protected paramValuesCache: Record<string, number> = {};\n\n /**\n * Port messages waiting for the block they were timestamped for.\n *\n * Sorted by frame, then by arrival. `process` drains everything up to\n * the end of the block it is about to render; the rest waits.\n */\n protected fEventQueue: FaustTimedEventSeq[] = [];\n protected fEventSeq = 0;\n\n /**\n * The events of the block about to be rendered.\n *\n * Refilled rather than reallocated, so a quiet block allocates\n * nothing.\n */\n protected fBlockEvents: FaustTimedEventSeq[] = [];\n\n /**\n * Scratch space for the frames one control's automation changed on.\n * Reused for the same reason as `fBlockEvents`.\n */\n protected fChangedFrames: number[] = [];\n\n protected wamInfo?: { moduleId: string; instanceId: string };\n protected fCommunicator: FaustAudioWorkletProcessorCommunicator;\n\n constructor(options: FaustAudioWorkletNodeOptions<Poly>) {\n super(options);\n\n // Setup port message handling\n this.fCommunicator = new FaustAudioWorkletProcessorCommunicator(\n this.port\n );\n\n const { parameterDescriptors } = this\n .constructor as typeof AudioWorkletProcessor;\n parameterDescriptors.forEach((pd) => {\n this.paramValuesCache[pd.name] = pd.defaultValue || 0;\n });\n\n const { moduleId, instanceId } = options.processorOptions;\n if (!moduleId || !instanceId) return;\n this.wamInfo = { moduleId, instanceId };\n }\n\n static get parameterDescriptors() {\n const params = [] as AudioParamDescriptor[];\n // A path may appear once across the voice and the effect together.\n // `AudioWorkletGlobalScope.registerProcessor` rejects a duplicate\n // descriptor name, and its own message names neither the side the\n // path came from nor the fact that the two DSPs are what collided,\n // so the duplicate is caught here and reported with both.\n //\n // Deduplicating instead would compile but not work:\n // `FaustPolyWebAudioDsp.setParamValue` routes a path to the effect\n // *or* to the voices, never both, so a shared control would drive\n // one side and silently leave the other at its default. A DSP that\n // needs one value on both sides has to declare it twice, under two\n // paths, and the host must write both.\n const origin = new Map<string, string>();\n const collect = (side: string) => (item: FaustUIItem) => {\n const param = analysePolyParameters(item);\n if (!param) return;\n const previous = origin.get(param.name);\n if (previous === side) {\n throw new Error(\n `Faust: control \"${param.name}\" is declared twice in the ${side}. ` +\n `Two widgets resolved to the same path, so one of them would be ` +\n `unreachable. Give them distinct labels or groups.`\n );\n }\n if (previous !== undefined) {\n throw new Error(\n `Faust: control \"${param.name}\" is declared both in the ${previous} and in the ${side}. ` +\n `A polyphonic DSP cannot share a control path between \\`process\\` and \\`effect\\`: ` +\n `setParamValue routes a path to one side only, so the other would keep its default. ` +\n `Declare it under a distinct path on each side and have the host write both.`\n );\n }\n origin.set(param.name, side);\n params.push(param);\n };\n // Analyse voice JSON to generate AudioParam parameters\n FaustBaseWebAudioDsp.parseUI(dspMeta.ui, collect('voice'));\n // Analyse effect JSON to generate AudioParam parameters\n if (effectMeta)\n FaustBaseWebAudioDsp.parseUI(effectMeta.ui, collect('effect'));\n return params;\n }\n\n setupWamEventHandler() {\n if (!this.wamInfo) return;\n const { moduleId, instanceId } = this.wamInfo;\n const { webAudioModules } =\n globalThis as unknown as WamAudioWorkletGlobalScope;\n const ModuleScope = webAudioModules.getModuleScope(\n moduleId\n ) as WamParamMgrSDKBaseModuleScope;\n const paramMgrProcessor =\n ModuleScope?.paramMgrProcessors?.[instanceId];\n if (!paramMgrProcessor) return;\n if (paramMgrProcessor.handleEvent) return;\n paramMgrProcessor.handleEvent = (event) => {\n // A WamEvent's `time` is AudioContext seconds, the same clock\n // a timestamped port message uses, so it goes through the same\n // queue. A host that sends none gets what it always got: the\n // message applied on arrival.\n if (event.type === 'wam-midi')\n this.atTime(event, () => this.midiMessage(event.data.bytes));\n };\n }\n\n /**\n * Read a message's timestamp as a whole frame on the audio clock.\n * Null if it carries none, meaning now.\n *\n * Both routes round, and both reject anything non-finite. A fraction\n * would become a fractional slice count and a channel pointer partway\n * through a sample. A NaN compares false against every frame, so a\n * queued one would stay at the head of the queue and block every event\n * behind it.\n */\n protected messageFrame(msg: FaustMessageTime): number | null {\n const frame = Number.isFinite(msg.frame as number)\n ? (msg.frame as number)\n : Number.isFinite(msg.time as number)\n ? (msg.time as number) * sampleRate\n : null;\n return frame === null ? null : Math.round(frame);\n }\n\n /**\n * Apply `apply` now, or queue it for the frame the sender asked for.\n *\n * Untimed messages are applied on arrival, between two blocks, which\n * is equivalent to frame 0 of the next one. A throw from one of those\n * escapes the port handler and costs that message, as it always did.\n *\n * Timed ones have to catch. They run from inside `process`, and the\n * Web Audio spec's response to a `process` that throws is to fire\n * `processorerror` and stop calling the node -- so one bad message\n * would silence the device permanently.\n */\n protected atTime(msg: FaustMessageTime, apply: () => void) {\n const frame = this.messageFrame(msg);\n if (frame === null) {\n apply();\n return;\n }\n const event = {\n frame,\n seq: this.fEventSeq++,\n apply: () => {\n try {\n apply();\n } catch (error) {\n console.error(\n `Faust: a message timed for frame ${frame} threw and was dropped`,\n error\n );\n }\n }\n };\n // Insert from the back: a sequencer posts in time order, so the\n // common case is a comparison or two.\n let i = this.fEventQueue.length;\n while (i > 0 && this.fEventQueue[i - 1].frame > frame) i--;\n this.fEventQueue.splice(i, 0, event);\n }\n\n /**\n * Cancel everything scheduled and not yet performed.\n *\n * A panic, or the end of the DSP's life, has to reach the notes that\n * have not sounded yet as well as the ones that have -- otherwise they\n * play afterwards, over a device that was told to be quiet.\n *\n * That means the queue and the rest of the block being rendered, whose\n * events have already left the queue. Messages only: automation and\n * sensor writes are the state of the controls through the block, and\n * an all-notes-off should not stop a filter sweep.\n */\n protected flushEvents() {\n this.fEventQueue.length = 0;\n for (const event of this.fBlockEvents) {\n if (event.seq >= 0) event.apply = kCancelled;\n }\n }\n\n /**\n * Whether a controller number silences the instrument.\n *\n * Exactly the two `FaustPolyWebAudioDsp.ctrlChange` treats as\n * all-notes-off. Not 121, which resets controllers without ending a\n * note, and not 122, which is a keyboard's local control.\n */\n protected isPanic(ctrl: number) {\n return ctrl === 120 || ctrl === 123;\n }\n\n /**\n * One control's automation for the block, as events.\n *\n * A control that holds arrives as a single value, worth an event only\n * if it differs from what the DSP has. A control that moves arrives as\n * 128, and each change is an edge due on its own frame.\n *\n * Reading only `[0]`, as this used to, pushes every `setValueAtTime`\n * out to the next block boundary and misses a `1 -> 0 -> 1` inside one\n * block completely -- a gate that never retriggers.\n *\n * Above `kRampChanges` the control is ramping rather than stepping,\n * and is followed at `kRampStride`. See the constants.\n */\n protected collectAutomation(\n path: string,\n automation: Float32Array,\n events: FaustTimedEventSeq[]\n ) {\n const changes = this.fChangedFrames;\n changes.length = 0;\n let last = this.paramValuesCache[path];\n for (let i = 0; i < automation.length; i++) {\n if (automation[i] === last) continue;\n last = automation[i];\n changes.push(i);\n }\n if (changes.length === 0) return;\n const stride = changes.length > kRampChanges ? kRampStride : 1;\n for (let n = 0; n < changes.length; n += stride) {\n const frame = changes[n];\n events.push(this.paramEvent(path, automation[frame], frame));\n }\n // Always write the value the block ends on, or the next block\n // compares against a value the DSP was never given.\n const lastChange = changes.length - 1;\n if (lastChange % stride) {\n const frame = changes[lastChange];\n events.push(this.paramEvent(path, automation[frame], frame));\n }\n }\n\n protected paramEvent(\n path: string,\n value: number,\n frame: number\n ): FaustTimedEventSeq {\n return {\n frame,\n seq: kFromAutomation,\n apply: () => this.setParamValue(path, value)\n };\n }\n\n /**\n * Everything due inside the block starting at `start`.\n *\n * Three sources: the automation each `AudioParam` handed over, any new\n * sensor readings, and the port messages timestamped for a frame\n * inside the block.\n *\n * Sorted by frame, and on a tie by source -- see `FaustTimedEventSeq`.\n */\n protected collectEvents(\n parameters: { [key: string]: Float32Array },\n start: number\n ) {\n const events = this.fBlockEvents;\n events.length = 0;\n for (const path in parameters) {\n this.collectAutomation(path, parameters[path], events);\n }\n // Sensor writes used to run after the parameter read and before\n // `compute`, so a control that is both an AudioParam and mapped to\n // an axis took the sensor's value. An event at frame 0 ranked\n // after the automation preserves that.\n if (this.fCommunicator.getNewAccDataAvailable()) {\n const acc = this.fCommunicator.getAcc();\n if (acc) {\n this.fCommunicator.setNewAccDataAvailable(false);\n const { invert, ...data } = acc;\n events.push({\n frame: 0,\n seq: kFromSensors,\n apply: () => this.propagateAcc(data, invert)\n });\n }\n }\n if (this.fCommunicator.getNewGyrDataAvailable()) {\n const gyr = this.fCommunicator.getGyr();\n if (gyr) {\n this.fCommunicator.setNewGyrDataAvailable(false);\n events.push({\n frame: 0,\n seq: kFromSensors,\n apply: () => this.propagateGyr(gyr)\n });\n }\n }\n const end = start + kBlockSize;\n let ordinal = 0;\n while (this.fEventQueue.length && this.fEventQueue[0].frame < end) {\n const event = this.fEventQueue.shift() as FaustTimedEventSeq;\n // A message whose block has passed is late, not lost: it\n // happens at the top of this one. Several of them collapse\n // onto frame 0 together, so the tie-break is the order they\n // come off the queue, which is time order. Posting order would\n // replay an out-of-order schedule out of order.\n event.frame = Math.max(0, event.frame - start);\n event.seq = ordinal++;\n events.push(event);\n }\n if (events.length > 1) {\n events.sort((a, b) => a.frame - b.frame || a.seq - b.seq);\n }\n return events;\n }\n\n process(\n inputs: Float32Array[][],\n outputs: Float32Array[][],\n parameters: { [key: string]: Float32Array }\n ) {\n // Controls, each on the frame it was scheduled for\n const events = this.collectEvents(\n parameters,\n audioClock.currentFrame\n );\n return this.fDSPCode.compute(inputs[0], outputs[0], events);\n }\n\n protected handleMessageAux(e: MessageEvent) {\n // use arrow function for binding\n const msg = e.data;\n\n switch (msg.type) {\n // Generic MIDI message\n case 'midi': {\n this.atTime(msg, () => {\n // A panic as raw bytes, same as the typed case below\n if (\n msg.data[0] >> 4 === 11 &&\n this.isPanic(msg.data[1])\n )\n this.flushEvents();\n this.midiMessage(msg.data);\n });\n break;\n }\n // Typed MIDI message\n case 'ctrlChange': {\n this.atTime(msg, () => {\n if (this.isPanic(msg.data[1])) this.flushEvents();\n this.ctrlChange(msg.data[0], msg.data[1], msg.data[2]);\n });\n break;\n }\n case 'pitchWheel': {\n this.atTime(msg, () =>\n this.pitchWheel(msg.data[0], msg.data[1])\n );\n break;\n }\n case 'keyOn': {\n this.atTime(msg, () =>\n this.keyOn(msg.data[0], msg.data[1], msg.data[2])\n );\n break;\n }\n case 'keyOff': {\n this.atTime(msg, () =>\n this.keyOff(msg.data[0], msg.data[1], msg.data[2])\n );\n break;\n }\n // Generic data message\n case 'param': {\n this.atTime(msg, () =>\n this.setParamValue(msg.data.path, msg.data.value)\n );\n break;\n }\n // Plot handler set on demand\n case 'setPlotHandler': {\n if (msg.data) {\n this.fDSPCode.setPlotHandler((output, index, events) =>\n this.port.postMessage({\n type: 'plot',\n value: output,\n index,\n events\n })\n );\n } else {\n this.fDSPCode.setPlotHandler(null);\n }\n break;\n }\n case 'setupWamEventHandler': {\n this.setupWamEventHandler();\n break;\n }\n case 'init': {\n this.fDSPCode.init();\n break;\n }\n case 'instanceInit': {\n this.fDSPCode.instanceInit();\n break;\n }\n case 'instanceClear': {\n // Notes queued before the clear would put back the state\n // it just cleared.\n this.flushEvents();\n this.fDSPCode.instanceClear();\n break;\n }\n case 'instanceConstants': {\n this.fDSPCode.instanceConstants();\n break;\n }\n case 'instanceResetUserInterface': {\n this.fDSPCode.instanceResetUserInterface();\n break;\n }\n case 'start': {\n this.fDSPCode.start();\n break;\n }\n case 'stop': {\n // What was scheduled belongs to the stretch being\n // stopped, and should not still be waiting on restart.\n this.flushEvents();\n this.fDSPCode.stop();\n break;\n }\n case 'destroy': {\n this.flushEvents();\n this.port.close();\n this.fDSPCode.destroy();\n break;\n }\n default:\n break;\n }\n }\n\n protected setParamValue(path: string, value: number) {\n this.fDSPCode.setParamValue(path, value);\n this.paramValuesCache[path] = value;\n }\n\n protected midiMessage(data: number[] | Uint8Array) {\n this.fDSPCode.midiMessage(data);\n }\n\n protected ctrlChange(channel: number, ctrl: number, value: number) {\n this.fDSPCode.ctrlChange(channel, ctrl, value);\n }\n\n protected pitchWheel(channel: number, wheel: number) {\n this.fDSPCode.pitchWheel(channel, wheel);\n }\n\n protected keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n\n protected keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n\n protected propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n this.fDSPCode.propagateAcc(accelerationIncludingGravity, invert);\n }\n\n protected propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n this.fDSPCode.propagateGyr(event);\n }\n }\n\n /**\n * Monophonic AudioWorkletProcessor\n */\n class FaustMonoAudioWorkletProcessor extends FaustAudioWorkletProcessor<false> {\n constructor(options: FaustAudioWorkletNodeOptions) {\n super(options);\n const { FaustMonoWebAudioDsp } =\n dependencies as FaustAudioWorkletProcessorDependencies<false>;\n const { factory, sampleSize } = options.processorOptions;\n\n const instance =\n FaustWasmInstantiator.createSyncMonoDSPInstance(factory);\n\n // Create Monophonic DSP\n this.fDSPCode = new FaustMonoWebAudioDsp(\n instance,\n sampleRate,\n sampleSize,\n 128,\n factory.soundfiles\n );\n\n // Setup port message handling\n this.port.addEventListener('message', this.handleMessageAux);\n this.port.start();\n\n // Setup output handler\n this.fDSPCode.setOutputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'out-param' })\n );\n this.fDSPCode.setInputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'in-param' })\n );\n\n this.fDSPCode.start();\n }\n\n protected handleMessageAux = (e: MessageEvent) => {\n // use arrow function for binding\n super.handleMessageAux(e);\n };\n }\n\n /**\n * Polyphonic AudioWorkletProcessor\n */\n class FaustPolyAudioWorkletProcessor extends FaustAudioWorkletProcessor<true> {\n constructor(options: FaustPolyAudioWorkletNodeOptions) {\n super(options);\n const { FaustPolyWebAudioDsp } =\n dependencies as FaustAudioWorkletProcessorDependencies<true>;\n\n const {\n voiceFactory,\n mixerModule,\n voices,\n effectFactory,\n sampleSize\n } = options.processorOptions;\n\n const instance = FaustWasmInstantiator.createSyncPolyDSPInstance(\n voiceFactory,\n mixerModule,\n voices,\n effectFactory\n );\n\n const soundfiles = {\n ...effectFactory?.soundfiles,\n ...voiceFactory.soundfiles\n };\n // Create Polyphonic DSP\n this.fDSPCode = new FaustPolyWebAudioDsp(\n instance,\n sampleRate,\n sampleSize,\n 128,\n soundfiles\n );\n\n // Setup port message handling\n this.port.addEventListener('message', this.handleMessageAux);\n this.port.start();\n\n // Setup output handler\n this.fDSPCode.setOutputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'out-param' })\n );\n this.fDSPCode.setInputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'in-param' })\n );\n\n this.fDSPCode.start();\n }\n\n protected midiMessage(data: number[] | Uint8Array) {\n const cmd = data[0] >> 4;\n const channel = data[0] & 0xf;\n const data1 = data[1];\n const data2 = data[2];\n if (cmd === 8 || (cmd === 9 && data2 === 0))\n this.keyOff(channel, data1, data2);\n else if (cmd === 9) this.keyOn(channel, data1, data2);\n else super.midiMessage(data);\n }\n\n // The base switch already routes 'keyOn' and 'keyOff' through\n // `this.keyOn` / `this.keyOff`, overridden below. This exists only to\n // bind `this` for the port listener.\n protected handleMessageAux = (e: MessageEvent) => {\n super.handleMessageAux(e);\n };\n\n // Public API\n keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n\n keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n\n allNotesOff(hard: boolean) {\n this.fDSPCode.allNotesOff(hard);\n }\n }\n\n const Processor = poly\n ? FaustPolyAudioWorkletProcessor\n : FaustMonoAudioWorkletProcessor;\n if (register) {\n const name = processorName || dspName || (poly ? 'mydsp_poly' : 'mydsp');\n // Registering the same processor twice in one AudioWorkletGlobalScope\n // is benign \u2014 a host may add the module more than once for a given\n // context \u2014 so that case stays tolerated, tracked on the scope itself\n // rather than by matching a browser-specific error message.\n //\n // Anything else must propagate. `registerProcessor` is what gives the\n // processor its name: swallowing a failure leaves `addModule` resolving\n // successfully and the caller believing registration worked, so the\n // problem only resurfaces later as\n // \"the node name '<name>' is not defined in AudioWorkletGlobalScope\"\n // from the AudioWorkletNode constructor \u2014 a symptom several steps\n // removed from the cause, pointing at the name rather than at whatever\n // actually made registration fail.\n const scope = globalThis as unknown as {\n __faustRegisteredProcessors?: Set<string>;\n };\n if (!scope.__faustRegisteredProcessors) {\n scope.__faustRegisteredProcessors = new Set<string>();\n }\n if (!scope.__faustRegisteredProcessors.has(name)) {\n registerProcessor(name, Processor);\n scope.__faustRegisteredProcessors.add(name);\n }\n }\n\n return poly\n ? FaustPolyAudioWorkletProcessor\n : FaustMonoAudioWorkletProcessor;\n};\n\nexport default getFaustAudioWorkletProcessor;\n", "import type { FaustAudioWorkletProcessorCommunicator } from './FaustAudioWorkletCommunicator';\nimport type { FaustMonoDspInstance } from './FaustDspInstance';\nimport type FaustWasmInstantiator from './FaustWasmInstantiator';\nimport type {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n PlotHandler\n} from './FaustWebAudioDsp';\nimport type {\n AudioParamDescriptor,\n AudioWorkletGlobalScope,\n LooseFaustDspFactory,\n FaustDspMeta,\n FaustUIItem,\n InterfaceFFT,\n TWindowFunction,\n Writeable,\n TypedArray,\n FFTUtils\n} from './types';\nimport type {\n AudioWorkletGlobalScope as WamAudioWorkletGlobalScope,\n WamParamMgrSDKBaseModuleScope\n} from '@webaudiomodules/sdk-parammgr';\n\nexport interface FaustFFTOptionsData {\n fftSize: number;\n fftOverlap: number;\n noIFFT: boolean;\n /** Index number of the default window function, leave undefined or -1 for rectangular (no windowing) */\n defaultWindowFunction: number;\n}\n\n/**\n * Injected in the string to be compiled on AudioWorkletProcessor side\n */\nexport interface FaustFFTData {\n processorName: string;\n dspName: string;\n dspMeta: FaustDspMeta;\n fftOptions?: Partial<FaustFFTOptionsData>;\n}\nexport interface FaustFFTAudioWorkletProcessorDependencies {\n FaustBaseWebAudioDsp: typeof FaustBaseWebAudioDsp;\n FaustMonoWebAudioDsp: typeof FaustMonoWebAudioDsp;\n FaustWasmInstantiator: typeof FaustWasmInstantiator;\n FaustAudioWorkletProcessorCommunicator: typeof FaustAudioWorkletProcessorCommunicator;\n FFTUtils: typeof FFTUtils;\n}\nexport interface FaustFFTAudioWorkletNodeOptions\n extends AudioWorkletNodeOptions {\n processorOptions: FaustFFTAudioWorkletProcessorOptions;\n}\nexport interface FaustFFTAudioWorkletProcessorOptions {\n name: string;\n sampleSize: number;\n factory: LooseFaustDspFactory;\n // for WAMs\n moduleId?: string;\n instanceId?: string;\n}\n\n// Dynamic AudioWorkletProcessor code generator\nconst getFaustFFTAudioWorkletProcessor = (\n dependencies: FaustFFTAudioWorkletProcessorDependencies,\n faustData: FaustFFTData,\n register = true\n): typeof AudioWorkletProcessor => {\n const { registerProcessor, AudioWorkletProcessor, sampleRate } =\n globalThis as unknown as AudioWorkletGlobalScope;\n\n // `currentFrame` advances every `process` call, so it must be read then,\n // not destructured once.\n const audioClock = globalThis as unknown as AudioWorkletGlobalScope;\n\n /** The render quantum, fixed by the Web Audio API. */\n const kBlockSize = 128;\n\n const {\n FaustBaseWebAudioDsp,\n FaustWasmInstantiator,\n FaustMonoWebAudioDsp,\n FaustAudioWorkletProcessorCommunicator,\n FFTUtils\n } = dependencies;\n\n const { processorName, dspName, dspMeta, fftOptions } = faustData;\n\n const { windowFunctions, getFFT, fftToSignal, signalToFFT, signalToNoFFT } =\n FFTUtils;\n\n /**\n * Ceil a number to multiple of another\n */\n const ceil = (x: number, to: number): number =>\n Math.abs(to) < 1\n ? Math.ceil(x * (1 / to)) / (1 / to)\n : Math.ceil(x / to) * to;\n\n /**\n * Mod support wrapping with negative numbers\n */\n const mod = (x: number, y: number): number => ((x % y) + y) % y;\n\n const apply = (\n array: Writeable<ArrayLike<number>>,\n windowFunction: TWindowFunction\n ) => {\n for (let i = 0; i < array.length; i++) {\n array[i] *= windowFunction(i, array.length);\n }\n };\n\n const fftParamKeywords = [\n '/fftSize',\n '/fftHopSize',\n '/fftOverlap',\n '/windowFunction',\n '/noIFFT'\n ];\n\n /**\n * Copy buffer to another, support negative offset index\n */\n const setTypedArray = <T extends TypedArray = TypedArray>(\n to: T,\n from: T,\n offsetTo = 0,\n offsetFrom = 0\n ) => {\n const toLength = to.length;\n const fromLength = from.length;\n const spillLength = Math.min(toLength, fromLength);\n let spilled = 0;\n let $to = mod(offsetTo, toLength) || 0;\n let $from = mod(offsetFrom, fromLength) || 0;\n while (spilled < spillLength) {\n const $spillLength = Math.min(\n spillLength - spilled,\n toLength - $to,\n fromLength - $from\n );\n const $fromEnd = $from + $spillLength;\n if ($from === 0 && $fromEnd === fromLength) to.set(from, $to);\n else to.set(from.subarray($from, $fromEnd), $to);\n $to = ($to + $spillLength) % toLength;\n $from = $fromEnd % fromLength;\n spilled += $spillLength;\n }\n return $to;\n };\n\n // Analyse JSON to generate AudioParam parameters\n const analyseParameters = (\n item: FaustUIItem\n ): AudioParamDescriptor | null => {\n const isFFTReserved =\n 'address' in item &&\n !!fftParamKeywords.find((k) => item.address.endsWith(k));\n if (isFFTReserved) return null;\n if (\n item.type === 'vslider' ||\n item.type === 'hslider' ||\n item.type === 'nentry'\n ) {\n return {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: item.min || 0,\n maxValue: item.max || 0\n };\n } else if (item.type === 'button' || item.type === 'checkbox') {\n return {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: 0,\n maxValue: 1\n };\n }\n return null;\n };\n /**\n * Class for Faust FFT AudioWorkletProcessor\n */\n class FaustFFTAudioWorkletProcessor extends AudioWorkletProcessor {\n protected fDSPCode: FaustMonoWebAudioDsp;\n\n protected paramValuesCache: Record<string, number> = {};\n\n /**\n * Port messages waiting for the block they were timestamped for.\n *\n * The node puts a `time` on every control it sends. This processor\n * used to ignore it, which mattered most for MIDI messages: nothing\n * mirrors those onto an `AudioParam`, so the timestamp did nothing and\n * the message landed whenever it was posted.\n *\n * They now wait here and are applied at the top of the block that\n * contains the instant. Two limits:\n *\n * Block, not sample. This processor buffers input into an FFT window\n * and hands the DSP whole frames of spectrum, so a control write\n * partway through what it computes has no meaning.\n *\n * A `param` still resolves one block later than that. The\n * `[0]`-against-cache sync below reads the AudioParam at the start of\n * the block and writes the pre-`time` value back over it; the intended\n * value arrives with the next block. Nothing is computed in between,\n * so there is no artefact.\n */\n protected fEventQueue: {\n frame: number;\n apply: () => void;\n }[] = [];\n\n protected wamInfo?: { moduleId: string; instanceId: string };\n protected communicator: FaustAudioWorkletProcessorCommunicator;\n\n private dspInstance!: FaustMonoDspInstance;\n private sampleSize!: number;\n\n private destroyed = false;\n /** Pointer of next start sample to write of the FFT input window */\n private $inputWrite = 0;\n /** Pointer of next start sample to read of the FFT input window */\n private $inputRead = 0;\n /** Pointer of next start sample to write of the FFT output window */\n private $outputWrite = 0;\n /** Pointer of next start sample to read of the FFT output window */\n private $outputRead = 0;\n /** Not perform in IFFT when reconstruct the audio signal */\n private noIFFT = false;\n /** audio data from input, array of channels */\n private readonly fftInput: Float32Array[] = [];\n /** audio data for output, array of channels */\n private readonly fftOutput: Float32Array[] = [];\n /** Generated from the current window function */\n private window: Float32Array;\n /** Generated from the current window's rolling sum square */\n private windowSumSquare: Float32Array;\n\n /** FFT constructor */\n private FFT: typeof InterfaceFFT;\n /** Real FFT interface */\n private rfft: InterfaceFFT;\n /** Faust param name of fftHopSize */\n private fftHopSizeParam: string | undefined;\n /** FFT Overlaps, 1 means no overlap */\n private fftOverlap = 0;\n private fftHopSize = 0;\n private fftSize = 0;\n private fftBufferSize = 0;\n private fftProcessorZeros: Float32Array;\n private noIFFTBuffer: Float32Array;\n\n private fPlotHandler: PlotHandler | null = null;\n private fCachedEvents: { type: string; data: any }[] = [];\n private fBufferNum = 0;\n private soundfiles: LooseFaustDspFactory['soundfiles'] = {};\n get fftProcessorBufferSize() {\n return this.fftSize / 2 + 1;\n }\n private windowFunction: TWindowFunction | null = null;\n\n constructor(options: FaustFFTAudioWorkletNodeOptions) {\n super(options);\n\n // Setup port message handling\n this.port.addEventListener('message', this.handleMessageAux);\n this.port.start();\n this.communicator = new FaustAudioWorkletProcessorCommunicator(\n this.port\n );\n\n const { parameterDescriptors } = this\n .constructor as typeof AudioWorkletProcessor;\n parameterDescriptors.forEach((pd) => {\n this.paramValuesCache[pd.name] = pd.defaultValue || 0;\n });\n\n const { factory, sampleSize } = options.processorOptions;\n\n this.dspInstance =\n FaustWasmInstantiator.createSyncMonoDSPInstance(factory);\n this.sampleSize = sampleSize;\n this.soundfiles = factory.soundfiles;\n\n // Init the FFT constructor and the Faust FFT Processor\n this.initFFT();\n\n const { moduleId, instanceId } = options.processorOptions;\n if (!moduleId || !instanceId) return;\n this.wamInfo = { moduleId, instanceId };\n }\n\n async initFFT(): Promise<true> {\n // Use injected function to instantiate the FFT constructor\n this.FFT = await getFFT();\n // Init Faust FFT Processor\n await this.createFFTProcessor();\n return true;\n }\n\n static get parameterDescriptors() {\n const params = [] as AudioParamDescriptor[];\n // Analyse voice JSON to generate AudioParam parameters\n const callback = (item: FaustUIItem) => {\n const param = analyseParameters(item);\n if (param) params.push(param);\n };\n FaustBaseWebAudioDsp.parseUI(dspMeta.ui, callback);\n // Add to Faust parameters, FFT specified parameters\n return [\n ...params,\n {\n defaultValue: fftOptions?.fftSize || 1024,\n maxValue: 2 ** 32,\n minValue: 2,\n name: 'fftSize'\n },\n {\n defaultValue: fftOptions?.fftOverlap || 2,\n maxValue: 32,\n minValue: 1,\n name: 'fftOverlap'\n },\n {\n defaultValue:\n typeof fftOptions?.defaultWindowFunction === 'number'\n ? fftOptions.defaultWindowFunction + 1\n : 0,\n maxValue: windowFunctions?.length || 0,\n minValue: 0,\n name: 'windowFunction'\n },\n {\n defaultValue: +!!fftOptions?.noIFFT || 0,\n maxValue: 1,\n minValue: 0,\n name: 'noIFFT'\n }\n ];\n }\n\n setupWamEventHandler() {\n if (!this.wamInfo) return;\n const { moduleId, instanceId } = this.wamInfo;\n const { webAudioModules } =\n globalThis as unknown as WamAudioWorkletGlobalScope;\n const ModuleScope = webAudioModules.getModuleScope(\n moduleId\n ) as WamParamMgrSDKBaseModuleScope;\n const paramMgrProcessor =\n ModuleScope?.paramMgrProcessors?.[instanceId];\n if (!paramMgrProcessor) return;\n if (paramMgrProcessor.handleEvent) return;\n paramMgrProcessor.handleEvent = (event) => {\n // A WamEvent's `time` is AudioContext seconds, so it goes\n // through the same queue as a timestamped port message --\n // block granularity here, as for everything else this\n // processor is handed. See `fEventQueue`.\n if (event.type === 'wam-midi')\n this.atTime(event, () => this.midiMessage(event.data.bytes));\n };\n }\n\n processFFT() {\n // Get the number of samples that need to proceed, from the input r/w pointers\n let samplesForFFT =\n mod(this.$inputWrite - this.$inputRead, this.fftBufferSize) ||\n this.fftBufferSize;\n // Start process, until no more enough samples\n while (samplesForFFT >= this.fftSize) {\n let fftProcessorOutputs: Float32Array[] = [];\n // Faust processing, use a callback to avoid extra data copy\n this.fDSPCode.compute(\n (inputs) => {\n // for each audio input channel, three Faust FFT input buffers can be generated (real, imag, FFT bin index)\n for (\n let i = 0;\n i <\n Math.min(\n this.fftInput.length,\n Math.ceil(inputs.length / 3)\n );\n i++\n ) {\n // FFT forward, use a callback to avoid extra data copy\n const ffted = this.rfft.forward((fftBuffer) => {\n setTypedArray(\n fftBuffer,\n this.fftInput[i],\n 0,\n this.$inputRead\n );\n // Windowing the input\n for (let j = 0; j < fftBuffer.length; j++) {\n fftBuffer[j] *= this.window[j];\n }\n // data for FFT (fftBuffer) is prepared\n });\n // write FFTed spectral data to three Faust FFT input buffers (real, imag, FFT bin index)\n fftToSignal(\n ffted,\n inputs[i * 3],\n inputs[i * 3 + 1],\n inputs[i * 3 + 2]\n );\n // Faust inputs are prepared\n }\n // If the Faust DSP has more inputs, fill them (zeros or real/imag, fill FFT bin indexes)\n for (\n let i = this.fftInput.length * 3;\n i < inputs.length;\n i++\n ) {\n if (i % 3 === 2)\n inputs[i].forEach((v, j) => (inputs[i][j] = j));\n else inputs[i].fill(0);\n }\n },\n (outputs) => {\n // Get the Faust DSP outputs\n fftProcessorOutputs = outputs as Float32Array[];\n }\n );\n\n // Advance FFT input read pointers\n this.$inputRead += this.fftHopSize;\n this.$inputRead %= this.fftBufferSize;\n\n samplesForFFT -= this.fftHopSize;\n\n // Do inverse FFT on the processed data by Faust DSP, and write the reconstructed signal to the output buffer\n for (let i = 0; i < this.fftOutput.length; i++) {\n let iffted: Float32Array;\n // If noIFFT option in enabled, then no need to do inverse IFFT, use the injected function to convert\n if (this.noIFFT) {\n iffted = this.noIFFTBuffer;\n signalToNoFFT(\n fftProcessorOutputs[i * 2] ||\n this.fftProcessorZeros,\n fftProcessorOutputs[i * 2 + 1] ||\n this.fftProcessorZeros,\n iffted\n );\n } else {\n // FFT inverse, use a callback to avoid extra data copy\n iffted = this.rfft.inverse((ifftBuffer) => {\n // Convert the Faust DSP output (real/imag plans) to an array for inverse FFT\n signalToFFT(\n fftProcessorOutputs[i * 2] ||\n this.fftProcessorZeros,\n fftProcessorOutputs[i * 2 + 1] ||\n this.fftProcessorZeros,\n ifftBuffer\n );\n // ifftBuffer is prepared\n });\n }\n // Windowing the output\n for (let j = 0; j < iffted.length; j++) {\n iffted[j] *= this.window[j];\n }\n // Overlap-add, preparing the windowSumSquare array for reverse the windowing effect when output the audio\n let $: number;\n // First part, add the part that is overlaped with the previous window\n for (let j = 0; j < iffted.length - this.fftHopSize; j++) {\n $ = mod(this.$outputWrite + j, this.fftBufferSize);\n this.fftOutput[i][$] += iffted[j];\n if (i === 0)\n this.windowSumSquare[$] += this.noIFFT\n ? this.window[j]\n : this.window[j] ** 2;\n }\n // Second part, write directly to the output buffer\n for (\n let j = iffted.length - this.fftHopSize;\n j < iffted.length;\n j++\n ) {\n $ = mod(this.$outputWrite + j, this.fftBufferSize);\n this.fftOutput[i][$] = iffted[j];\n if (i === 0)\n this.windowSumSquare[$] = this.noIFFT\n ? this.window[j]\n : this.window[j] ** 2;\n }\n }\n // Advance FFT output write pointers\n this.$outputWrite += this.fftHopSize;\n this.$outputWrite %= this.fftBufferSize;\n }\n }\n\n process(\n inputs: Float32Array[][],\n outputs: Float32Array[][],\n parameters: { [key: string]: Float32Array }\n ) {\n if (this.destroyed) return false;\n if (!this.FFT) return true;\n const input = inputs[0];\n const output = outputs[0];\n const inputChannels = input?.length || 0;\n const outputChannels = output?.length || 0;\n // if (input.length === 0) return true;\n\n const bufferSize = input?.length\n ? Math.max(...input.map((c) => c.length)) || 128\n : 128;\n\n // Reset FFT and related buffers if necessary (checks in the resetFFT method)\n this.noIFFT = !!parameters.noIFFT[0];\n this.resetFFT(\n ~~parameters.fftSize[0],\n ~~parameters.fftOverlap[0],\n ~~parameters.windowFunction[0],\n inputChannels,\n outputChannels,\n bufferSize\n );\n\n if (!this.fDSPCode) return true;\n\n // Anything timed for this block, before its own values are read.\n // See `fEventQueue` for what this does and does not buy.\n this.applyDueEvents(audioClock.currentFrame);\n\n for (const path in parameters) {\n if (fftParamKeywords.find((k) => `/${path}`.endsWith(k)))\n continue;\n const [paramValue] = parameters[path];\n if (paramValue !== this.paramValuesCache[path]) {\n // Set value and update the cache\n this.setParamValue(path, paramValue);\n }\n }\n if (this.communicator.getNewAccDataAvailable()) {\n const acc = this.communicator.getAcc();\n if (acc) {\n this.communicator.setNewAccDataAvailable(false);\n const { invert, ...data } = acc;\n this.propagateAcc(data, invert);\n }\n }\n if (this.communicator.getNewGyrDataAvailable()) {\n const gyr = this.communicator.getGyr();\n if (gyr) {\n this.communicator.setNewGyrDataAvailable(false);\n this.propagateGyr(gyr);\n }\n }\n\n // Write audio input into fftInput buffer, advance pointers\n if (input?.length) {\n let $inputWrite = 0;\n for (let i = 0; i < input.length; i++) {\n const inputWindow = this.fftInput[i];\n const channel = input[i].length\n ? input[i]\n : new Float32Array(bufferSize);\n $inputWrite = setTypedArray(\n inputWindow,\n channel,\n this.$inputWrite\n );\n }\n this.$inputWrite = $inputWrite;\n } else {\n this.$inputWrite += bufferSize;\n this.$inputWrite %= this.fftBufferSize;\n }\n\n // Do FFT if necessary\n this.processFFT();\n\n // Read from fftOutput buffer for audio output, applying windowSumSquare to reverse the doubled windowing effect\n for (let i = 0; i < output.length; i++) {\n setTypedArray(\n output[i],\n this.fftOutput[i],\n 0,\n this.$outputRead\n );\n // let a = 0;\n let div = 0;\n for (let j = 0; j < bufferSize; j++) {\n div =\n this.windowSumSquare[\n mod(this.$outputRead + j, this.fftBufferSize)\n ];\n output[i][j] /= div < 1e-8 ? 1 : div;\n }\n }\n // Advance pointers\n this.$outputRead += bufferSize;\n this.$outputRead %= this.fftBufferSize;\n\n // plot\n if (this.fPlotHandler) {\n this.port.postMessage({\n type: 'plot',\n value: output,\n index: this.fBufferNum++,\n events: this.fCachedEvents\n });\n this.fCachedEvents = [];\n }\n return true;\n }\n\n /**\n * Read a message's timestamp as a whole frame on the audio clock.\n * Null if it carries none, meaning now.\n *\n * Rounded, and non-finite values rejected: a NaN compares false\n * against every frame and would block the queue behind it.\n */\n protected messageFrame(msg: {\n time?: number;\n frame?: number;\n }): number | null {\n const frame = Number.isFinite(msg.frame as number)\n ? (msg.frame as number)\n : Number.isFinite(msg.time as number)\n ? (msg.time as number) * sampleRate\n : null;\n return frame === null ? null : Math.round(frame);\n }\n\n /**\n * Apply `apply` now, or at the top of the block containing the frame\n * the sender asked for.\n *\n * Queued ones catch: a throw would otherwise escape `process`, and the\n * spec's response is to stop calling the node permanently.\n */\n protected atTime(\n msg: { time?: number; frame?: number },\n apply: () => void\n ) {\n const frame = this.messageFrame(msg);\n if (frame === null) {\n apply();\n return;\n }\n const guarded = () => {\n try {\n apply();\n } catch (error) {\n console.error(\n `Faust: a message timed for frame ${frame} threw and was dropped`,\n error\n );\n }\n };\n let i = this.fEventQueue.length;\n while (i > 0 && this.fEventQueue[i - 1].frame > frame) i--;\n this.fEventQueue.splice(i, 0, { frame, apply: guarded });\n }\n\n /** Apply everything due by the end of the block starting at `start`. */\n protected applyDueEvents(start: number) {\n const end = start + kBlockSize;\n while (this.fEventQueue.length && this.fEventQueue[0].frame < end) {\n // A message whose block has passed is late, not lost.\n this.fEventQueue.shift()!.apply();\n }\n }\n\n protected handleMessageAux = (e: MessageEvent) => {\n // use arrow function for binding\n const msg = e.data;\n\n switch (msg.type) {\n // Generic MIDI message\n case 'midi':\n this.atTime(msg, () => this.midiMessage(msg.data));\n break;\n // Typed MIDI message\n case 'ctrlChange':\n this.atTime(msg, () =>\n this.ctrlChange(msg.data[0], msg.data[1], msg.data[2])\n );\n break;\n case 'pitchWheel':\n this.atTime(msg, () =>\n this.pitchWheel(msg.data[0], msg.data[1])\n );\n break;\n // Generic data message\n case 'param':\n this.atTime(msg, () =>\n this.setParamValue(msg.data.path, msg.data.value)\n );\n break;\n // Plot handler set on demand\n case 'setPlotHandler': {\n if (msg.data) {\n this.fPlotHandler = (output, index, events) => {\n if (events) this.fCachedEvents.push(...events);\n };\n } else {\n this.fPlotHandler = null;\n }\n this.fDSPCode?.setPlotHandler(this.fPlotHandler);\n break;\n }\n case 'setupWamEventHandler': {\n this.setupWamEventHandler();\n break;\n }\n case 'start': {\n this.fDSPCode?.start();\n break;\n }\n case 'stop': {\n this.fEventQueue.length = 0;\n this.fDSPCode?.stop();\n break;\n }\n case 'destroy': {\n this.fEventQueue.length = 0;\n this.port.close();\n this.destroy();\n break;\n }\n default:\n break;\n }\n };\n\n protected setParamValue(path: string, value: number) {\n this.fDSPCode?.setParamValue(path, value);\n this.paramValuesCache[path] = value;\n }\n\n protected midiMessage(data: number[] | Uint8Array) {\n this.fDSPCode?.midiMessage(data);\n }\n\n protected ctrlChange(channel: number, ctrl: number, value: number) {\n this.fDSPCode?.ctrlChange(channel, ctrl, value);\n }\n\n protected pitchWheel(channel: number, wheel: number) {\n this.fDSPCode?.pitchWheel(channel, wheel);\n }\n\n protected propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n this.fDSPCode.propagateAcc(accelerationIncludingGravity, invert);\n }\n\n protected propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n this.fDSPCode.propagateGyr(event);\n }\n\n resetFFT(\n sizeIn: number,\n overlapIn: number,\n windowFunctionIn: number,\n inputChannels: number,\n outputChannels: number,\n bufferSize: number\n ) {\n const fftSize = ~~ceil(Math.max(2, sizeIn || 1024), 2);\n const fftOverlap = ~~Math.min(fftSize, Math.max(1, overlapIn));\n const fftHopSize = ~~Math.max(1, fftSize / fftOverlap);\n const latency = fftSize - Math.min(fftHopSize, bufferSize);\n let windowFunction: TWindowFunction | null = null;\n\n // set the window function from the injected list\n if (windowFunctionIn !== 0) {\n windowFunction =\n typeof windowFunctions === 'object'\n ? windowFunctions[~~windowFunctionIn - 1] || null\n : null;\n }\n const fftSizeChanged = fftSize !== this.fftSize;\n\n const fftOverlapChanged = fftOverlap !== this.fftOverlap;\n // Reset FFT vars if the size is changed\n if (fftSizeChanged || fftOverlapChanged) {\n this.fftSize = fftSize;\n this.fftOverlap = fftOverlap;\n this.fftHopSize = fftHopSize;\n this.$inputWrite = 0;\n this.$inputRead = 0;\n this.$outputWrite = 0;\n this.$outputRead = -latency;\n this.fftBufferSize = Math.max(\n fftSize * 2 - this.fftHopSize,\n bufferSize * 2\n );\n if (!fftSizeChanged && this.fftHopSizeParam)\n this.fDSPCode?.setParamValue(\n this.fftHopSizeParam,\n this.fftHopSize\n );\n }\n\n // Reset the FFT interface and the Faust Processor\n if (fftSizeChanged) {\n this.rfft?.dispose();\n this.rfft = new this.FFT(fftSize);\n this.noIFFTBuffer = new Float32Array(this.fftSize);\n this.createFFTProcessor();\n }\n\n // Calculate a window from the window function, prepare the windowSumSquare buffer\n if (\n fftSizeChanged ||\n fftOverlapChanged ||\n windowFunction !== this.windowFunction\n ) {\n this.windowFunction = windowFunction;\n this.window = new Float32Array(fftSize);\n this.window.fill(1);\n if (windowFunction) apply(this.window, windowFunction);\n this.windowSumSquare = new Float32Array(this.fftBufferSize);\n }\n\n // Reset FFT I/O buffers if necessary\n if (this.fftInput.length > inputChannels) {\n this.fftInput.splice(inputChannels);\n }\n if (this.fftOutput.length > outputChannels) {\n this.fftOutput.splice(outputChannels);\n }\n if (fftSizeChanged || fftOverlapChanged) {\n for (let i = 0; i < inputChannels; i++) {\n this.fftInput[i] = new Float32Array(this.fftBufferSize);\n }\n for (let i = 0; i < outputChannels; i++) {\n this.fftOutput[i] = new Float32Array(this.fftBufferSize);\n }\n } else {\n if (this.fftInput.length < inputChannels) {\n for (let i = this.fftInput.length; i < inputChannels; i++) {\n this.fftInput[i] = new Float32Array(this.fftBufferSize);\n }\n }\n if (this.fftOutput.length < outputChannels) {\n for (\n let i = this.fftOutput.length;\n i < outputChannels;\n i++\n ) {\n this.fftOutput[i] = new Float32Array(\n this.fftBufferSize\n );\n }\n }\n }\n }\n async createFFTProcessor() {\n this.fDSPCode?.stop();\n this.fDSPCode?.destroy();\n\n // Create Monophonic DSP\n this.fDSPCode = new FaustMonoWebAudioDsp(\n this.dspInstance,\n sampleRate,\n this.sampleSize,\n this.fftProcessorBufferSize,\n this.soundfiles\n );\n\n // Setup output handler\n this.fDSPCode.setOutputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'out-param' })\n );\n this.fDSPCode.setInputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'in-param' })\n );\n this.fDSPCode.setPlotHandler(this.fPlotHandler);\n const params = this.fDSPCode.getParams();\n this.fDSPCode.start();\n // Write the cached parameters\n for (const path in this.paramValuesCache) {\n if (fftParamKeywords.find((k) => `/${path}`.endsWith(k)))\n continue;\n this.fDSPCode.setParamValue(path, this.paramValuesCache[path]);\n }\n // Write the FFT reverved parameters\n const fftSizeParam = params.find((s) => s.endsWith('/fftSize'));\n if (fftSizeParam)\n this.fDSPCode.setParamValue(fftSizeParam, this.fftSize);\n this.fftHopSizeParam = params.find((s) =>\n s.endsWith('/fftHopSize')\n );\n if (this.fftHopSizeParam)\n this.fDSPCode.setParamValue(\n this.fftHopSizeParam,\n this.fftHopSize\n );\n // Prepare a array of zeros for furthur usage\n this.fftProcessorZeros = new Float32Array(\n this.fftProcessorBufferSize\n );\n }\n destroy() {\n this.fDSPCode?.stop();\n this.fDSPCode?.destroy();\n this.rfft?.dispose();\n this.destroyed = true;\n }\n }\n\n const Processor = FaustFFTAudioWorkletProcessor;\n if (register) {\n const name = processorName || dspName || 'myfftdsp';\n // Registering the same processor twice in one AudioWorkletGlobalScope\n // is benign \u2014 a host may add the module more than once for a given\n // context \u2014 so that case stays tolerated, tracked on the scope itself\n // rather than by matching a browser-specific error message.\n //\n // Anything else must propagate. `registerProcessor` is what gives the\n // processor its name: swallowing a failure leaves `addModule` resolving\n // successfully and the caller believing registration worked, so the\n // problem only resurfaces later as\n // \"the node name '<name>' is not defined in AudioWorkletGlobalScope\"\n // from the AudioWorkletNode constructor \u2014 a symptom several steps\n // removed from the cause, pointing at the name rather than at whatever\n // actually made registration fail.\n const scope = globalThis as unknown as {\n __faustRegisteredProcessors?: Set<string>;\n };\n if (!scope.__faustRegisteredProcessors) {\n scope.__faustRegisteredProcessors = new Set<string>();\n }\n if (!scope.__faustRegisteredProcessors.has(name)) {\n registerProcessor(name, Processor);\n scope.__faustRegisteredProcessors.add(name);\n }\n }\n\n return FaustFFTAudioWorkletProcessor;\n};\n\nexport default getFaustFFTAudioWorkletProcessor;\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n", "/**\n * @internal\n */\nexport const BLOCK_SIZE: number = 64;\n\n/**\n * @internal\n */\nexport const DIGEST_LENGTH: number = 32;\n\n/**\n * @internal\n */\nexport const KEY = new Uint32Array([\n 0x428a2f98,\n 0x71374491,\n 0xb5c0fbcf,\n 0xe9b5dba5,\n 0x3956c25b,\n 0x59f111f1,\n 0x923f82a4,\n 0xab1c5ed5,\n 0xd807aa98,\n 0x12835b01,\n 0x243185be,\n 0x550c7dc3,\n 0x72be5d74,\n 0x80deb1fe,\n 0x9bdc06a7,\n 0xc19bf174,\n 0xe49b69c1,\n 0xefbe4786,\n 0x0fc19dc6,\n 0x240ca1cc,\n 0x2de92c6f,\n 0x4a7484aa,\n 0x5cb0a9dc,\n 0x76f988da,\n 0x983e5152,\n 0xa831c66d,\n 0xb00327c8,\n 0xbf597fc7,\n 0xc6e00bf3,\n 0xd5a79147,\n 0x06ca6351,\n 0x14292967,\n 0x27b70a85,\n 0x2e1b2138,\n 0x4d2c6dfc,\n 0x53380d13,\n 0x650a7354,\n 0x766a0abb,\n 0x81c2c92e,\n 0x92722c85,\n 0xa2bfe8a1,\n 0xa81a664b,\n 0xc24b8b70,\n 0xc76c51a3,\n 0xd192e819,\n 0xd6990624,\n 0xf40e3585,\n 0x106aa070,\n 0x19a4c116,\n 0x1e376c08,\n 0x2748774c,\n 0x34b0bcb5,\n 0x391c0cb3,\n 0x4ed8aa4a,\n 0x5b9cca4f,\n 0x682e6ff3,\n 0x748f82ee,\n 0x78a5636f,\n 0x84c87814,\n 0x8cc70208,\n 0x90befffa,\n 0xa4506ceb,\n 0xbef9a3f7,\n 0xc67178f2\n]);\n\n/**\n * @internal\n */\nexport const INIT = [\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19\n];\n\n/**\n * @internal\n */\nexport const MAX_HASHABLE_LENGTH = 2 ** 53 - 1;\n", "import {\n BLOCK_SIZE,\n DIGEST_LENGTH,\n INIT,\n KEY,\n MAX_HASHABLE_LENGTH\n} from \"./constants\";\n\n/**\n * @internal\n */\nexport class RawSha256 {\n private state: Int32Array = Int32Array.from(INIT);\n private temp: Int32Array = new Int32Array(64);\n private buffer: Uint8Array = new Uint8Array(64);\n private bufferLength: number = 0;\n private bytesHashed: number = 0;\n\n /**\n * @internal\n */\n finished: boolean = false;\n\n update(data: Uint8Array): void {\n if (this.finished) {\n throw new Error(\"Attempted to update an already finished hash.\");\n }\n\n let position = 0;\n let { byteLength } = data;\n this.bytesHashed += byteLength;\n\n if (this.bytesHashed * 8 > MAX_HASHABLE_LENGTH) {\n throw new Error(\"Cannot hash more than 2^53 - 1 bits\");\n }\n\n while (byteLength > 0) {\n this.buffer[this.bufferLength++] = data[position++];\n byteLength--;\n\n if (this.bufferLength === BLOCK_SIZE) {\n this.hashBuffer();\n this.bufferLength = 0;\n }\n }\n }\n\n digest(): Uint8Array {\n if (!this.finished) {\n const bitsHashed = this.bytesHashed * 8;\n const bufferView = new DataView(\n this.buffer.buffer,\n this.buffer.byteOffset,\n this.buffer.byteLength\n );\n\n const undecoratedLength = this.bufferLength;\n bufferView.setUint8(this.bufferLength++, 0x80);\n\n // Ensure the final block has enough room for the hashed length\n if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n for (let i = this.bufferLength; i < BLOCK_SIZE; i++) {\n bufferView.setUint8(i, 0);\n }\n this.hashBuffer();\n this.bufferLength = 0;\n }\n\n for (let i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n bufferView.setUint8(i, 0);\n }\n bufferView.setUint32(\n BLOCK_SIZE - 8,\n Math.floor(bitsHashed / 0x100000000),\n true\n );\n bufferView.setUint32(BLOCK_SIZE - 4, bitsHashed);\n\n this.hashBuffer();\n\n this.finished = true;\n }\n\n // The value in state is little-endian rather than big-endian, so flip\n // each word into a new Uint8Array\n const out = new Uint8Array(DIGEST_LENGTH);\n for (let i = 0; i < 8; i++) {\n out[i * 4] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n\n return out;\n }\n\n private hashBuffer(): void {\n const { buffer, state } = this;\n\n let state0 = state[0],\n state1 = state[1],\n state2 = state[2],\n state3 = state[3],\n state4 = state[4],\n state5 = state[5],\n state6 = state[6],\n state7 = state[7];\n\n for (let i = 0; i < BLOCK_SIZE; i++) {\n if (i < 16) {\n this.temp[i] =\n ((buffer[i * 4] & 0xff) << 24) |\n ((buffer[i * 4 + 1] & 0xff) << 16) |\n ((buffer[i * 4 + 2] & 0xff) << 8) |\n (buffer[i * 4 + 3] & 0xff);\n } else {\n let u = this.temp[i - 2];\n const t1 =\n ((u >>> 17) | (u << 15)) ^ ((u >>> 19) | (u << 13)) ^ (u >>> 10);\n\n u = this.temp[i - 15];\n const t2 =\n ((u >>> 7) | (u << 25)) ^ ((u >>> 18) | (u << 14)) ^ (u >>> 3);\n\n this.temp[i] =\n ((t1 + this.temp[i - 7]) | 0) + ((t2 + this.temp[i - 16]) | 0);\n }\n\n const t1 =\n ((((((state4 >>> 6) | (state4 << 26)) ^\n ((state4 >>> 11) | (state4 << 21)) ^\n ((state4 >>> 25) | (state4 << 7))) +\n ((state4 & state5) ^ (~state4 & state6))) |\n 0) +\n ((state7 + ((KEY[i] + this.temp[i]) | 0)) | 0)) |\n 0;\n\n const t2 =\n ((((state0 >>> 2) | (state0 << 30)) ^\n ((state0 >>> 13) | (state0 << 19)) ^\n ((state0 >>> 22) | (state0 << 10))) +\n ((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) |\n 0;\n\n state7 = state6;\n state6 = state5;\n state5 = state4;\n state4 = (state3 + t1) | 0;\n state3 = state2;\n state2 = state1;\n state1 = state0;\n state0 = (t1 + t2) | 0;\n }\n\n state[0] += state0;\n state[1] += state1;\n state[2] += state2;\n state[3] += state3;\n state[4] += state4;\n state[5] += state5;\n state[6] += state6;\n state[7] += state7;\n }\n}\n", "export const fromUtf8 = (input) => new TextEncoder().encode(input);\n", "// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SourceData } from \"@aws-sdk/types\";\nimport { fromUtf8 as fromUtf8Browser } from \"@smithy/util-utf8\";\n\n// Quick polyfill\nconst fromUtf8 =\n typeof Buffer !== \"undefined\" && Buffer.from\n ? (input: string) => Buffer.from(input, \"utf8\")\n : fromUtf8Browser;\n\nexport function convertToBuffer(data: SourceData): Uint8Array {\n // Already a Uint8, do nothing\n if (data instanceof Uint8Array) return data;\n\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(\n data.buffer,\n data.byteOffset,\n data.byteLength / Uint8Array.BYTES_PER_ELEMENT\n );\n }\n\n return new Uint8Array(data);\n}\n", "// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SourceData } from \"@aws-sdk/types\";\n\nexport function isEmptyData(data: SourceData): boolean {\n if (typeof data === \"string\") {\n return data.length === 0;\n }\n\n return data.byteLength === 0;\n}\n", "import { BLOCK_SIZE } from \"./constants\";\nimport { RawSha256 } from \"./RawSha256\";\nimport { Checksum, SourceData } from \"@aws-sdk/types\";\nimport { isEmptyData, convertToBuffer } from \"@aws-crypto/util\";\n\nexport class Sha256 implements Checksum {\n private readonly secret?: SourceData;\n private hash: RawSha256;\n private outer?: RawSha256;\n private error: any;\n\n constructor(secret?: SourceData) {\n this.secret = secret;\n this.hash = new RawSha256();\n this.reset();\n }\n\n update(toHash: SourceData): void {\n if (isEmptyData(toHash) || this.error) {\n return;\n }\n\n try {\n this.hash.update(convertToBuffer(toHash));\n } catch (e) {\n this.error = e;\n }\n }\n\n /* This synchronous method keeps compatibility\n * with the v2 aws-sdk.\n */\n digestSync(): Uint8Array {\n if (this.error) {\n throw this.error;\n }\n\n if (this.outer) {\n if (!this.outer.finished) {\n this.outer.update(this.hash.digest());\n }\n\n return this.outer.digest();\n }\n\n return this.hash.digest();\n }\n\n /* The underlying digest method here is synchronous.\n * To keep the same interface with the other hash functions\n * the default is to expose this as an async method.\n * However, it can sometimes be useful to have a sync method.\n */\n async digest(): Promise<Uint8Array> {\n return this.digestSync();\n }\n\n reset(): void {\n this.hash = new RawSha256();\n if (this.secret) {\n this.outer = new RawSha256();\n const inner = bufferFromSecret(this.secret);\n const outer = new Uint8Array(BLOCK_SIZE);\n outer.set(inner);\n\n for (let i = 0; i < BLOCK_SIZE; i++) {\n inner[i] ^= 0x36;\n outer[i] ^= 0x5c;\n }\n\n this.hash.update(inner);\n this.outer.update(outer);\n\n // overwrite the copied key in memory\n for (let i = 0; i < inner.byteLength; i++) {\n inner[i] = 0;\n }\n }\n }\n}\n\nfunction bufferFromSecret(secret: SourceData): Uint8Array {\n let input = convertToBuffer(secret);\n\n if (input.byteLength > BLOCK_SIZE) {\n const bufferHash = new RawSha256();\n bufferHash.update(input);\n input = bufferHash.digest();\n }\n\n const buffer = new Uint8Array(BLOCK_SIZE);\n buffer.set(input);\n return buffer;\n}\n", "import { Sha256 } from '@aws-crypto/sha256-js';\nimport type { ILibFaust } from './LibFaust';\nimport type { FaustDspFactory, IntVector } from './types';\n\nexport const ab2str = (buf: Uint8Array) =>\n String.fromCharCode.apply(null, Array.from(buf));\n\nexport const str2ab = (str: string) => {\n const buf = new ArrayBuffer(str.length);\n const bufView = new Uint8Array(buf);\n for (let i = 0, strLen = str.length; i < strLen; i++) {\n bufView[i] = str.charCodeAt(i);\n }\n return bufView;\n};\nconst sha256 = async (str: string) => {\n const sha256 = new Sha256();\n sha256.update(str);\n const hashArray = Array.from(await sha256.digest());\n const hashHex = hashArray\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n return hashHex;\n};\n\nexport interface IFaustCompiler {\n /**\n * Gives the Faust compiler version.\n * @return a version string\n */\n version(): string;\n\n /**\n * Gives the last compilation error.\n * @return an error string\n */\n getErrorMessage(): string;\n\n /**\n * Create a wasm factory from Faust code i.e. wasm compiled code, to be used to create monophonic instances.\n * This function is running asynchronously.\n *\n * @param name - an arbitrary name for the Faust factory\n * @param code - Faust dsp code\n * @param args - the compiler options\n * @returns returns the wasm factory\n */\n createMonoDSPFactory(\n name: string,\n code: string,\n args: string\n ): Promise<FaustDspFactory | null>;\n\n /**\n * Create a wasm factory from Faust code i.e. wasm compiled code, to be used to create polyphonic instances.\n * This function is running asynchronously.\n *\n * @param name - an arbitrary name for the Faust factory\n * @param code - Faust dsp code\n * @param args - the compiler options\n * @returns returns the wasm factory\n */\n createPolyDSPFactory(\n name: string,\n code: string,\n args: string\n ): Promise<FaustDspFactory | null>;\n\n /**\n * Delete a dsp factory.\n *\n * @param factory - the factory to be deleted\n */\n deleteDSPFactory(factory: FaustDspFactory): void;\n\n /**\n * Expand Faust code i.e. linearize included libraries.\n *\n * @param code - Faust dsp code\n * @param args - the compiler options\n * @returns returns the expanded dsp code\n */\n expandDSP(code: string, args: string): string | null;\n\n /**\n * Generates auxiliary files from Faust code. The output depends on the compiler options.\n *\n * @param name - an arbitrary name for the Faust module\n * @param code - Faust dsp code\n * @param args - the compiler options\n * @returns whether the generation actually succeded\n */\n generateAuxFiles(name: string, code: string, args: string): boolean;\n\n /**\n * Delete all factories.\n */\n deleteAllDSPFactories(): void;\n\n fs(): typeof FS;\n\n getAsyncInternalMixerModule(\n isDouble?: boolean\n ): Promise<{ mixerBuffer: Uint8Array; mixerModule: WebAssembly.Module }>;\n getSyncInternalMixerModule(isDouble?: boolean): {\n mixerBuffer: Uint8Array;\n mixerModule: WebAssembly.Module;\n };\n}\n\nclass FaustCompiler implements IFaustCompiler {\n private fLibFaust: ILibFaust;\n private fErrorMessage: string;\n private static gFactories: Map<string, FaustDspFactory> = new Map<\n string,\n FaustDspFactory\n >();\n private mixer32Buffer!: Uint8Array;\n private mixer64Buffer!: Uint8Array;\n private mixer32Module!: WebAssembly.Module;\n private mixer64Module!: WebAssembly.Module;\n\n /**\n * Get a stringified DSP factories table\n */\n static serializeDSPFactories() {\n const table: Record<\n string,\n { code: string; json: any; poly: boolean }\n > = {};\n this.gFactories.forEach((factory, shaKey) => {\n const { code, json, poly } = factory;\n table[shaKey] = {\n code: btoa(ab2str(code)),\n json: JSON.parse(json),\n poly\n };\n });\n return table;\n }\n /**\n * Get a stringified DSP factories table as string\n */\n static stringifyDSPFactories() {\n return JSON.stringify(this.serializeDSPFactories());\n }\n /**\n * Import a DSP factories table\n */\n static deserializeDSPFactories(\n table: Record<string, { code: string; json: any; poly: boolean }>\n ) {\n const awaited: Promise<Map<string, FaustDspFactory>>[] = [];\n for (const shaKey in table) {\n const factory = table[shaKey];\n const { code, json, poly } = factory;\n const ab = str2ab(atob(code));\n awaited.push(\n WebAssembly.compile(ab).then((module) =>\n this.gFactories.set(shaKey, {\n shaKey,\n cfactory: 0,\n code: ab,\n module,\n json: JSON.stringify(json),\n poly,\n soundfiles: {}\n })\n )\n );\n }\n return Promise.all(awaited);\n }\n /**\n * Import a stringified DSP factories table\n */\n static importDSPFactories(tableStr: string) {\n const table: Record<\n string,\n { code: string; json: any; poly: boolean }\n > = JSON.parse(tableStr);\n return this.deserializeDSPFactories(table);\n }\n constructor(libFaust: ILibFaust) {\n this.fLibFaust = libFaust;\n this.fErrorMessage = '';\n }\n private intVec2intArray(vec: IntVector) {\n const size = vec.size();\n const ui8Code = new Uint8Array(size);\n for (let i = 0; i < size; i++) {\n ui8Code[i] = vec.get(i);\n }\n return ui8Code;\n }\n private async createDSPFactory(\n name: string,\n code: string,\n args: string,\n poly: boolean\n ) {\n // Cleanup the cache\n if (FaustCompiler.gFactories.size > 10) {\n FaustCompiler.gFactories.clear();\n }\n\n // If code is already compiled, return the cached factory\n const shaKey = await sha256(\n name + code + args + (poly ? 'poly' : 'mono')\n );\n if (FaustCompiler.gFactories.has(shaKey)) {\n return FaustCompiler.gFactories.get(shaKey) || null;\n } else {\n try {\n // Can possibly raise a C++ exception catched by the second catch()\n const faustDspWasm = this.fLibFaust.createDSPFactory(\n name,\n code,\n args,\n !poly\n );\n const ui8Code = this.intVec2intArray(faustDspWasm.data);\n faustDspWasm.data.delete();\n const module = await WebAssembly.compile(ui8Code);\n const factory: FaustDspFactory = {\n shaKey,\n cfactory: faustDspWasm.cfactory,\n code: ui8Code,\n module,\n json: faustDspWasm.json,\n poly,\n soundfiles: {}\n };\n // Factory C++ side can be deallocated immediately\n this.deleteDSPFactory(factory);\n // Keep the compiled factory in the cache\n FaustCompiler.gFactories.set(shaKey, factory);\n return factory;\n } catch (e) {\n this.fErrorMessage = this.fLibFaust.getErrorAfterException();\n // console.error(`=> exception raised while running createDSPFactory: ${this.fErrorMessage}`, e);\n this.fLibFaust.cleanupAfterException();\n throw this.fErrorMessage ? new Error(this.fErrorMessage) : e;\n }\n }\n }\n version() {\n return this.fLibFaust.version();\n }\n getErrorMessage() {\n return this.fErrorMessage;\n }\n async createMonoDSPFactory(name: string, code: string, args: string) {\n return this.createDSPFactory(name, code, args, false);\n }\n async createPolyDSPFactory(name: string, code: string, args: string) {\n return this.createDSPFactory(name, code, args, true);\n }\n deleteDSPFactory(factory: FaustDspFactory) {\n this.fLibFaust.deleteDSPFactory(factory.cfactory);\n factory.cfactory = 0;\n }\n expandDSP(code: string, args: string) {\n try {\n return this.fLibFaust.expandDSP('FaustDSP', code, args);\n } catch (e) {\n this.fErrorMessage = this.fLibFaust.getErrorAfterException();\n // console.error(`=> exception raised while running expandDSP: ${this.fErrorMessage}`);\n this.fLibFaust.cleanupAfterException();\n throw this.fErrorMessage ? new Error(this.fErrorMessage) : e;\n }\n }\n generateAuxFiles(name: string, code: string, args: string) {\n try {\n return this.fLibFaust.generateAuxFiles(name, code, args);\n } catch (e) {\n this.fErrorMessage = this.fLibFaust.getErrorAfterException();\n // console.error(`=> exception raised while running generateAuxFiles: ${this.fErrorMessage}`);\n this.fLibFaust.cleanupAfterException();\n throw this.fErrorMessage ? new Error(this.fErrorMessage) : e;\n }\n }\n deleteAllDSPFactories(): void {\n this.fLibFaust.deleteAllDSPFactories();\n }\n fs() {\n return this.fLibFaust.fs();\n }\n async getAsyncInternalMixerModule(isDouble = false) {\n const bufferKey = isDouble ? 'mixer64Buffer' : 'mixer32Buffer';\n const moduleKey = isDouble ? 'mixer64Module' : 'mixer32Module';\n if (this[moduleKey])\n return {\n mixerBuffer: this[bufferKey],\n mixerModule: this[moduleKey]\n };\n const path = isDouble\n ? '/usr/rsrc/mixer64.wasm'\n : '/usr/rsrc/mixer32.wasm';\n const mixerBuffer = this.fs().readFile(path, { encoding: 'binary' });\n this[bufferKey] = mixerBuffer;\n // Compile mixer\n const mixerModule = await WebAssembly.compile(\n new Uint8Array(mixerBuffer)\n );\n this[moduleKey] = mixerModule;\n return { mixerBuffer, mixerModule };\n }\n getSyncInternalMixerModule(isDouble = false) {\n const bufferKey = isDouble ? 'mixer64Buffer' : 'mixer32Buffer';\n const moduleKey = isDouble ? 'mixer64Module' : 'mixer32Module';\n if (this[moduleKey])\n return {\n mixerBuffer: this[bufferKey],\n mixerModule: this[moduleKey]\n };\n const path = isDouble\n ? '/usr/rsrc/mixer64.wasm'\n : '/usr/rsrc/mixer32.wasm';\n const mixerBuffer = this.fs().readFile(path, { encoding: 'binary' });\n this[bufferKey] = mixerBuffer;\n // Compile mixer\n const mixerModule = new WebAssembly.Module(new Uint8Array(mixerBuffer));\n this[moduleKey] = mixerModule;\n return { mixerBuffer, mixerModule };\n }\n}\n\nexport default FaustCompiler;\n", "/**\n * The Faust wasm instance interface.\n */\nexport interface IFaustDspInstance {\n /**\n * The dsp computation, to be called with successive input/output audio buffers.\n *\n * @param $dsp - the DSP pointer\n * @param count - the audio buffer size in frames\n * @param $inputs - the input audio buffer as in index in wasm memory\n * @param $output - the output audio buffer as in index in wasm memory\n */\n compute(\n $dsp: number,\n count: number,\n $inputs: number,\n $output: number\n ): void;\n\n /**\n * Give the number of inputs of a Faust wasm instance.\n *\n * @param $dsp - the DSP pointer\n */\n getNumInputs($dsp: number): number;\n\n /**\n * Give the number of outputs of a Faust wasm instance.\n *\n * @param $dsp - the DSP pointer\n */\n getNumOutputs($dsp: number): number;\n\n /**\n * Give a parameter current value.\n *\n * @param $dsp - the DSP pointer\n * @param index - the parameter index\n * @return the parameter value\n */\n getParamValue($dsp: number, index: number): number;\n\n /**\n * Give the Faust wasm instance sample rate.\n *\n * @param $dsp - the DSP pointer\n * @return the sample rate\n */\n getSampleRate($dsp: number): number;\n\n /**\n * Global init, calls the following methods:\n * - static class 'classInit': static tables initialization\n * - 'instanceInit': constants and instance state initialization\n *\n * @param $dsp - the DSP pointer\n * @param sampleRate - the sampling rate in Hertz\n */\n init($dsp: number, sampleRate: number): void;\n\n /** Init instance state (delay lines...).\n *\n * @param $dsp - the DSP pointer\n */\n instanceClear($dsp: number): void;\n\n /** Init instance constant state.\n *\n * @param $dsp - the DSP pointer\n * @param sampleRate - the sampling rate in Hertz\n */\n instanceConstants($dsp: number, sampleRate: number): void;\n\n /** Init instance state.\n *\n * @param $dsp - the DSP pointer\n * @param sampleRate - the sampling rate in Hertz\n */\n instanceInit($dsp: number, sampleRate: number): void;\n\n /** Init default control parameters values.\n *\n * @param $dsp - the DSP pointer\n */\n instanceResetUserInterface($dsp: number): void;\n\n /**\n * Set a parameter current value.\n *\n * @param $dsp - the DSP pointer\n * @param index - the parameter index\n * @param value - the parameter value\n */\n setParamValue($dsp: number, index: number, value: number): void;\n}\n\n/**\n * Mixer used in polyphonic mode.\n */\nexport interface IFaustMixerInstance {\n clearOutput(bufferSize: number, chans: number, $outputs: number): void;\n mixCheckVoice(\n bufferSize: number,\n chans: number,\n $inputs: number,\n $outputs: number\n ): number;\n fadeOut(bufferSize: number, chans: number, $outputs: number): void;\n}\n\n/**\n * Monophonic instance.\n */\nexport interface FaustMonoDspInstance {\n memory: WebAssembly.Memory;\n api: IFaustDspInstance;\n json: string;\n}\n\n/**\n * Polyphonic instance.\n */\nexport interface FaustPolyDspInstance {\n memory: WebAssembly.Memory;\n voices: number;\n voiceAPI: IFaustDspInstance;\n effectAPI?: IFaustDspInstance;\n mixerAPI: IFaustMixerInstance;\n voiceJSON: string;\n effectJSON?: string;\n}\n\nexport class FaustDspInstance implements IFaustDspInstance {\n private readonly fExports: IFaustDspInstance;\n\n constructor(exports: IFaustDspInstance) {\n this.fExports = exports;\n }\n\n compute($dsp: number, count: number, $input: number, $output: number) {\n this.fExports.compute($dsp, count, $input, $output);\n }\n getNumInputs($dsp: number) {\n return this.fExports.getNumInputs($dsp);\n }\n getNumOutputs($dsp: number) {\n return this.fExports.getNumOutputs($dsp);\n }\n getParamValue($dsp: number, index: number) {\n return this.fExports.getParamValue($dsp, index);\n }\n getSampleRate($dsp: number) {\n return this.fExports.getSampleRate($dsp);\n }\n init($dsp: number, sampleRate: number) {\n this.fExports.init($dsp, sampleRate);\n }\n instanceClear($dsp: number) {\n this.fExports.instanceClear($dsp);\n }\n instanceConstants($dsp: number, sampleRate: number) {\n this.fExports.instanceConstants($dsp, sampleRate);\n }\n instanceInit($dsp: number, sampleRate: number) {\n this.fExports.instanceInit($dsp, sampleRate);\n }\n instanceResetUserInterface($dsp: number) {\n this.fExports.instanceResetUserInterface($dsp);\n }\n setParamValue($dsp: number, index: number, value: number) {\n this.fExports.setParamValue($dsp, index, value);\n }\n}\n", "import {\n FaustDspInstance,\n FaustMonoDspInstance,\n FaustPolyDspInstance,\n IFaustDspInstance,\n IFaustMixerInstance\n} from './FaustDspInstance';\nimport type {\n FaustDspFactory,\n FaustDspMeta,\n LooseFaustDspFactory\n} from './types';\n\nclass FaustWasmInstantiator {\n private static createWasmImport(memory?: WebAssembly.Memory) {\n return {\n env: {\n memory: memory || new WebAssembly.Memory({ initial: 100 }),\n memoryBase: 0,\n tableBase: 0,\n // Integer version\n _abs: Math.abs,\n // Float version\n _acosf: Math.acos,\n _asinf: Math.asin,\n _atanf: Math.atan,\n _atan2f: Math.atan2,\n _ceilf: Math.ceil,\n _cosf: Math.cos,\n _expf: Math.exp,\n _floorf: Math.floor,\n _fmodf: (x: number, y: number) => x % y,\n _logf: Math.log,\n _log10f: Math.log10,\n _max_f: Math.max,\n _min_f: Math.min,\n _remainderf: (x: number, y: number) =>\n x - Math.round(x / y) * y,\n _powf: Math.pow,\n _roundf: Math.round,\n _sinf: Math.sin,\n _sqrtf: Math.sqrt,\n _tanf: Math.tan,\n _acoshf: Math.acosh,\n _asinhf: Math.asinh,\n _atanhf: Math.atanh,\n _coshf: Math.cosh,\n _sinhf: Math.sinh,\n _tanhf: Math.tanh,\n _isnanf: Number.isNaN,\n _isinff: (x: number) => !isFinite(x),\n _copysignf: (x: number, y: number) =>\n Math.sign(x) === Math.sign(y) ? x : -x,\n\n // Double version\n _acos: Math.acos,\n _asin: Math.asin,\n _atan: Math.atan,\n _atan2: Math.atan2,\n _ceil: Math.ceil,\n _cos: Math.cos,\n _exp: Math.exp,\n _floor: Math.floor,\n _fmod: (x: number, y: number) => x % y,\n _log: Math.log,\n _log10: Math.log10,\n _max_: Math.max,\n _min_: Math.min,\n _remainder: (x: number, y: number) => x - Math.round(x / y) * y,\n _pow: Math.pow,\n _round: Math.round,\n _sin: Math.sin,\n _sqrt: Math.sqrt,\n _tan: Math.tan,\n _acosh: Math.acosh,\n _asinh: Math.asinh,\n _atanh: Math.atanh,\n _cosh: Math.cosh,\n _sinh: Math.sinh,\n _tanh: Math.tanh,\n _isnan: Number.isNaN,\n _isinf: (x: number) => !isFinite(x),\n _copysign: (x: number, y: number) =>\n Math.sign(x) === Math.sign(y) ? x : -x,\n\n table: new WebAssembly.Table({ initial: 0, element: 'anyfunc' })\n }\n };\n }\n private static createWasmMemoryPoly(\n voicesIn: number,\n sampleSize: number,\n dspMeta: FaustDspMeta,\n effectMeta: FaustDspMeta,\n bufferSize: number\n ) {\n // Hack : at least 4 voices (to avoid weird wasm memory bug?)\n const voices = Math.max(4, voicesIn);\n // Memory allocator\n const ptrSize = sampleSize; // Done on wast/wasm backend side\n const pow2limit = (x: number) => {\n let n = 65536; // Minimum = 64 kB\n while (n < x) {\n n *= 2;\n }\n return n;\n };\n const effectSize = effectMeta ? effectMeta.size : 0;\n let memorySize =\n pow2limit(\n effectSize +\n dspMeta.size * voices +\n (dspMeta.inputs + dspMeta.outputs * 2) * // + 2 for effect\n (ptrSize + bufferSize * sampleSize)\n ) / 65536;\n memorySize = Math.max(2, memorySize); // At least 2\n return new WebAssembly.Memory({ initial: memorySize });\n }\n\n private static createWasmMemoryMono(\n sampleSize: number,\n dspMeta: FaustDspMeta,\n bufferSize: number\n ) {\n // Memory allocator\n const ptrSize = sampleSize; // Done on wast/wasm backend side\n const memorySize =\n (dspMeta.size +\n (dspMeta.inputs + dspMeta.outputs) *\n (ptrSize + bufferSize * sampleSize)) /\n 65536;\n return new WebAssembly.Memory({ initial: memorySize * 2 }); // Safer to have a bit more memory\n }\n\n private static createMonoDSPInstanceAux(\n instance: WebAssembly.Instance,\n json: string,\n mem: WebAssembly.Memory | null = null\n ) {\n const functions = instance.exports as IFaustDspInstance &\n WebAssembly.Exports;\n const api = new FaustDspInstance(functions);\n const memory: any = mem ? mem : instance.exports.memory;\n return { memory, api, json } as FaustMonoDspInstance;\n }\n\n private static createMemoryMono(monoFactory: LooseFaustDspFactory) {\n // Parse JSON to get 'size' and 'inputs/outputs' infos\n const monoMeta: FaustDspMeta = JSON.parse(monoFactory.json);\n const sampleSize = monoMeta.compile_options.match('-double') ? 8 : 4;\n return this.createWasmMemoryMono(sampleSize, monoMeta, 8192);\n }\n private static createMemoryPoly(\n voices: number,\n voiceFactory: LooseFaustDspFactory,\n effectFactory?: LooseFaustDspFactory\n ) {\n // Parse JSON to get 'size' and 'inputs/outputs' infos\n const voiceMeta: FaustDspMeta = JSON.parse(voiceFactory.json);\n const effectMeta: FaustDspMeta =\n effectFactory && effectFactory.json\n ? JSON.parse(effectFactory.json)\n : null;\n const sampleSize = voiceMeta.compile_options.match('-double') ? 8 : 4;\n // Memory will be shared by voice, mixer and (possibly) effect instances\n return this.createWasmMemoryPoly(\n voices,\n sampleSize,\n voiceMeta,\n effectMeta,\n 8192\n );\n }\n\n private static createMixerAux(\n mixerModule: WebAssembly.Module,\n memory: WebAssembly.Memory\n ) {\n // Create mixer instance\n const mixerImport = {\n imports: { print: console.log },\n memory: { memory }\n };\n const mixerInstance = new WebAssembly.Instance(\n mixerModule,\n mixerImport\n );\n const mixerFunctions = mixerInstance.exports as IFaustMixerInstance &\n WebAssembly.Exports;\n return mixerFunctions;\n }\n\n // Public API\n static async loadDSPFactory(wasmPath: string, jsonPath: string) {\n const wasmFile = await fetch(wasmPath);\n if (!wasmFile.ok) {\n throw new Error(\n `=> exception raised while running loadDSPFactory, file not found: ${wasmPath}`\n );\n }\n try {\n const wasmBuffer = await wasmFile.arrayBuffer();\n const module = await WebAssembly.compile(wasmBuffer);\n const jsonFile = await fetch(jsonPath);\n const json = await jsonFile.text();\n const meta: FaustDspMeta = JSON.parse(json);\n const cOptions = meta.compile_options;\n const poly = cOptions.indexOf('wasm-e') !== -1;\n return {\n cfactory: 0,\n code: new Uint8Array(wasmBuffer),\n module,\n json,\n poly\n } as FaustDspFactory;\n } catch (e) {\n // console.error(`=> exception raised while running loadDSPFactory: ${e}`);\n throw e;\n }\n }\n\n static async loadDSPMixer(mixerPath: string, fs?: typeof FS) {\n try {\n let mixerBuffer: BufferSource | null = null;\n if (fs) {\n mixerBuffer = new Uint8Array(\n fs.readFile(mixerPath, { encoding: 'binary' })\n );\n } else {\n const mixerFile = await fetch(mixerPath);\n mixerBuffer = await mixerFile.arrayBuffer();\n }\n // Compile mixer\n return WebAssembly.compile(mixerBuffer);\n } catch (e) {\n // console.error(`=> exception raised while running loadMixer: ${e}`);\n throw e;\n }\n }\n\n static async createAsyncMonoDSPInstance(factory: LooseFaustDspFactory) {\n // Regular expression to match the 'type: soundfile' pattern\n const pattern = /\"type\":\\s*\"soundfile\"/;\n // Check if the pattern exists in the JSON string\n const isDetected = pattern.test(factory.json);\n\n if (isDetected) {\n const memory = this.createMemoryMono(factory);\n const instance = await WebAssembly.instantiate(\n factory.module,\n this.createWasmImport(memory)\n );\n return this.createMonoDSPInstanceAux(\n instance,\n factory.json,\n memory\n );\n } else {\n // Otherwise, we can create the instance using the wasm internal memory allocated by the wasm module\n const instance = await WebAssembly.instantiate(\n factory.module,\n this.createWasmImport()\n );\n return this.createMonoDSPInstanceAux(instance, factory.json);\n }\n }\n\n static createSyncMonoDSPInstance(factory: LooseFaustDspFactory) {\n // Regular expression to match the 'type: soundfile' pattern\n const pattern = /\"type\":\\s*\"soundfile\"/;\n // Check if the pattern exists in the JSON string\n const isDetected = pattern.test(factory.json);\n\n // If the JSON contains a soundfile UI element, we need to create a memory object\n if (isDetected) {\n const memory = this.createMemoryMono(factory);\n const instance = new WebAssembly.Instance(\n factory.module,\n this.createWasmImport(memory)\n );\n return this.createMonoDSPInstanceAux(\n instance,\n factory.json,\n memory\n );\n } else {\n // Otherwise, we can create the instance using the wasm internal memory allocated by the wasm module\n const instance = new WebAssembly.Instance(\n factory.module,\n this.createWasmImport()\n );\n return this.createMonoDSPInstanceAux(instance, factory.json);\n }\n }\n\n static async createAsyncPolyDSPInstance(\n voiceFactory: LooseFaustDspFactory,\n mixerModule: WebAssembly.Module,\n voices: number,\n effectFactory?: LooseFaustDspFactory\n ): Promise<FaustPolyDspInstance> {\n const memory = this.createMemoryPoly(\n voices,\n voiceFactory,\n effectFactory\n );\n // Create voice\n const voiceInstance = await WebAssembly.instantiate(\n voiceFactory.module,\n this.createWasmImport(memory)\n );\n const voiceFunctions = voiceInstance.exports as IFaustDspInstance &\n WebAssembly.Exports;\n const voiceAPI = new FaustDspInstance(voiceFunctions);\n // Create mixer\n const mixerAPI = this.createMixerAux(mixerModule, memory);\n\n // Possibly create effect instance\n if (effectFactory) {\n const effectInstance = await WebAssembly.instantiate(\n effectFactory.module,\n this.createWasmImport(memory)\n );\n const effectFunctions =\n effectInstance.exports as IFaustDspInstance &\n WebAssembly.Exports;\n const effectAPI = new FaustDspInstance(effectFunctions);\n return {\n memory,\n voices,\n voiceAPI,\n effectAPI,\n mixerAPI,\n voiceJSON: voiceFactory.json,\n effectJSON: effectFactory.json\n } as FaustPolyDspInstance;\n } else {\n return {\n memory,\n voices,\n voiceAPI,\n mixerAPI,\n voiceJSON: voiceFactory.json\n } as FaustPolyDspInstance;\n }\n }\n\n static createSyncPolyDSPInstance(\n voiceFactory: LooseFaustDspFactory,\n mixerModule: WebAssembly.Module,\n voices: number,\n effectFactory?: LooseFaustDspFactory\n ): FaustPolyDspInstance {\n const memory = this.createMemoryPoly(\n voices,\n voiceFactory,\n effectFactory\n );\n // Create voice\n const voiceInstance = new WebAssembly.Instance(\n voiceFactory.module,\n this.createWasmImport(memory)\n );\n const voiceFunctions = voiceInstance.exports as IFaustDspInstance &\n WebAssembly.Exports;\n const voiceAPI = new FaustDspInstance(voiceFunctions);\n // Create mixer\n const mixerAPI = this.createMixerAux(mixerModule, memory);\n\n // Possibly create effect instance\n if (effectFactory) {\n const effectInstance = new WebAssembly.Instance(\n effectFactory.module,\n this.createWasmImport(memory)\n );\n const effectFunctions =\n effectInstance.exports as IFaustDspInstance &\n WebAssembly.Exports;\n const effectAPI = new FaustDspInstance(effectFunctions);\n return {\n memory,\n voices,\n voiceAPI,\n effectAPI,\n mixerAPI,\n voiceJSON: voiceFactory.json,\n effectJSON: effectFactory.json\n } as FaustPolyDspInstance;\n } else {\n return {\n memory,\n voices,\n voiceAPI,\n mixerAPI,\n voiceJSON: voiceFactory.json\n } as FaustPolyDspInstance;\n }\n }\n}\n\nexport default FaustWasmInstantiator;\n", "\uFEFFexport interface AccParams {\n isEnabled: boolean;\n acc: string;\n address: string;\n min: number;\n max: number;\n init: number;\n label: string;\n}\n\n/** Enum describing the axis of the accelerometer or gyroscope */\nexport enum Axis {\n x,\n y,\n z\n}\n\n/** Enum describing the curve of the accelerometer */\nexport enum Curve {\n Up,\n Down,\n UpDown,\n DownUp\n}\n\ninterface Range {\n fLo: number;\n fHi: number;\n clip(x: number): number;\n}\n\ninterface InterpolateObject {\n amin: number;\n amax: number;\n}\ninterface Interpolator {\n fRange: Range;\n fCoef: number;\n fOffset: number;\n returnMappedValue(v: number): number;\n getLowHigh(amin: number, amax: number): InterpolateObject;\n}\n\ninterface InterpolateObject3pt {\n amin: number;\n amid: number;\n amax: number;\n}\ninterface Interpolator3pt {\n fSegment1: Interpolator;\n fSegment2: Interpolator;\n fMid: number;\n returnMappedValue(v: number): number;\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt;\n}\n\n/**\n * ValueConverter interface\n */\ninterface ValueConverter {\n uiToFaust(x: number): number;\n faustToUi(x: number): number;\n}\n\n/**\n * UpdatableValueConverter interface\n */\nexport interface UpdatableValueConverter extends ValueConverter {\n fActive: boolean;\n\n setMappingValues(\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): void;\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt;\n\n setActive(onOff: boolean): void;\n getActive(): boolean;\n}\n\nexport default class FaustSensors {\n /**\n * Function to convert a number to an axis type\n *\n * @param value number\n * @returns axis type\n */\n static convertToAxis(value: number): Axis {\n switch (value) {\n case 0:\n return Axis.x;\n case 1:\n return Axis.y;\n case 2:\n return Axis.z;\n default:\n console.error('Error: Axis not found value: ' + value);\n return Axis.x;\n }\n }\n /**\n * Function to convert a number to a curve type\n *\n * @param value number\n * @returns curve type\n */\n static convertToCurve(value: number): Curve {\n switch (value) {\n case 0:\n return Curve.Up;\n case 1:\n return Curve.Down;\n case 2:\n return Curve.UpDown;\n case 3:\n return Curve.DownUp;\n default:\n console.error('Error: Curve not found value: ' + value);\n return Curve.Up;\n }\n }\n\n // Converter objects use to map acc and Faust value\n static _Range: new (x: number, y: number) => Range;\n static get Range() {\n if (!this._Range) {\n this._Range = class {\n fLo: number;\n fHi: number;\n\n constructor(x: number, y: number) {\n this.fLo = Math.min(x, y);\n this.fHi = Math.max(x, y);\n }\n\n clip(x: number): number {\n if (x < this.fLo) return this.fLo;\n if (x > this.fHi) return this.fHi;\n return x;\n }\n };\n }\n return this._Range;\n }\n\n static _Interpolator: new (\n lo: number,\n hi: number,\n v1: number,\n v2: number\n ) => Interpolator;\n /**\n * Interpolator class\n */\n static get Interpolator() {\n if (!this._Interpolator) {\n this._Interpolator = class {\n fRange: Range;\n fCoef: number;\n fOffset: number;\n\n constructor(lo: number, hi: number, v1: number, v2: number) {\n this.fRange = new FaustSensors.Range(lo, hi);\n if (hi !== lo) {\n // regular case\n this.fCoef = (v2 - v1) / (hi - lo);\n this.fOffset = v1 - lo * this.fCoef;\n } else {\n // degenerate case, avoids division by zero\n this.fCoef = 0;\n this.fOffset = (v1 + v2) / 2;\n }\n }\n returnMappedValue(v: number): number {\n const x = this.fRange.clip(v);\n return this.fOffset + x * this.fCoef;\n }\n getLowHigh(amin: number, amax: number): InterpolateObject {\n return { amin: this.fRange.fLo, amax: this.fRange.fHi };\n }\n };\n }\n return this._Interpolator;\n }\n\n static _Interpolator3pt: new (\n lo: number,\n mid: number,\n hi: number,\n v1: number,\n vMid: number,\n v2: number\n ) => Interpolator3pt;\n /**\n * Interpolator3pt class, combine two interpolators\n */\n static get Interpolator3pt() {\n if (!this._Interpolator3pt) {\n this._Interpolator3pt = class {\n fSegment1: Interpolator;\n fSegment2: Interpolator;\n fMid: number;\n\n constructor(\n lo: number,\n mid: number,\n hi: number,\n v1: number,\n vMid: number,\n v2: number\n ) {\n this.fSegment1 = new FaustSensors.Interpolator(\n lo,\n mid,\n v1,\n vMid\n );\n this.fSegment2 = new FaustSensors.Interpolator(\n mid,\n hi,\n vMid,\n v2\n );\n this.fMid = mid;\n }\n returnMappedValue(x: number): number {\n return x < this.fMid\n ? this.fSegment1.returnMappedValue(x)\n : this.fSegment2.returnMappedValue(x);\n }\n\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt {\n const lowHighSegment1 = this.fSegment1.getLowHigh(\n amin,\n amid\n );\n const lowHighSegment2 = this.fSegment2.getLowHigh(\n amid,\n amax\n );\n return {\n amin: lowHighSegment1.amin,\n amid: lowHighSegment2.amin,\n amax: lowHighSegment2.amax\n };\n }\n };\n }\n return this._Interpolator3pt;\n }\n static _UpConverter: new (\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) => UpdatableValueConverter;\n /**\n * UpConverter class, convert accelerometer value to Faust value\n */\n static get UpConverter() {\n if (!this._UpConverter) {\n this._UpConverter = class implements UpdatableValueConverter {\n fA2F: Interpolator3pt;\n fF2A: Interpolator3pt;\n fActive: boolean = true;\n\n constructor(\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n fmin,\n fmid,\n fmax\n );\n this.fF2A = new FaustSensors.Interpolator3pt(\n fmin,\n fmid,\n fmax,\n amin,\n amid,\n amax\n );\n }\n\n uiToFaust(x: number) {\n return this.fA2F.returnMappedValue(x);\n }\n faustToUi(x: number) {\n return this.fF2A.returnMappedValue(x);\n }\n\n setMappingValues(\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): void {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n this.fF2A = new FaustSensors.Interpolator3pt(\n min,\n init,\n max,\n amin,\n amid,\n amax\n );\n }\n\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt {\n return this.fA2F.getMappingValues(amin, amid, amax);\n }\n\n setActive(onOff: boolean): void {\n this.fActive = onOff;\n }\n getActive(): boolean {\n return this.fActive;\n }\n };\n }\n return this._UpConverter;\n }\n static _DownConverter: new (\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) => UpdatableValueConverter;\n /**\n * DownConverter class, convert accelerometer value to Faust value\n */\n static get DownConverter() {\n if (!this._DownConverter) {\n this._DownConverter = class implements UpdatableValueConverter {\n fA2F: Interpolator3pt;\n fF2A: Interpolator3pt;\n fActive: boolean = true;\n\n constructor(\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n fmax,\n fmid,\n fmin\n );\n this.fF2A = new FaustSensors.Interpolator3pt(\n fmin,\n fmid,\n fmax,\n amax,\n amid,\n amin\n );\n }\n\n uiToFaust(x: number) {\n return this.fA2F.returnMappedValue(x);\n }\n faustToUi(x: number) {\n return this.fF2A.returnMappedValue(x);\n }\n\n setMappingValues(\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): void {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n max,\n init,\n min\n );\n this.fF2A = new FaustSensors.Interpolator3pt(\n min,\n init,\n max,\n amax,\n amid,\n amin\n );\n }\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt {\n return this.fA2F.getMappingValues(amin, amid, amax);\n }\n\n setActive(onOff: boolean): void {\n this.fActive = onOff;\n }\n getActive(): boolean {\n return this.fActive;\n }\n };\n }\n return this._DownConverter;\n }\n static _UpDownConverter: new (\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) => UpdatableValueConverter;\n /**\n * UpDownConverter class, convert accelerometer value to Faust value\n */\n static get UpDownConverter() {\n if (!this._UpDownConverter) {\n this._UpDownConverter = class implements UpdatableValueConverter {\n fA2F: Interpolator3pt;\n fF2A: Interpolator;\n fActive: boolean = true;\n\n constructor(\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n fmin,\n fmax,\n fmin\n );\n this.fF2A = new FaustSensors.Interpolator(\n fmin,\n fmax,\n amin,\n amax\n );\n }\n\n uiToFaust(x: number) {\n return this.fA2F.returnMappedValue(x);\n }\n faustToUi(x: number) {\n return this.fF2A.returnMappedValue(x);\n }\n\n setMappingValues(\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): void {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n min,\n max,\n min\n );\n this.fF2A = new FaustSensors.Interpolator(\n min,\n max,\n amin,\n amax\n );\n }\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt {\n return this.fA2F.getMappingValues(amin, amid, amax);\n }\n\n setActive(onOff: boolean): void {\n this.fActive = onOff;\n }\n getActive(): boolean {\n return this.fActive;\n }\n };\n }\n return this._UpDownConverter;\n }\n /**\n * DownUpConverter class, convert accelerometer value to Faust value\n */\n static _DownUpConverter: new (\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) => UpdatableValueConverter;\n static get DownUpConverter() {\n if (!this._DownUpConverter) {\n this._DownUpConverter = class implements UpdatableValueConverter {\n fA2F: Interpolator3pt;\n fF2A: Interpolator;\n fActive: boolean = true;\n\n constructor(\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n fmax,\n fmin,\n fmax\n );\n this.fF2A = new FaustSensors.Interpolator(\n fmin,\n fmax,\n amin,\n amax\n );\n }\n\n uiToFaust(x: number) {\n return this.fA2F.returnMappedValue(x);\n }\n faustToUi(x: number) {\n return this.fF2A.returnMappedValue(x);\n }\n\n setMappingValues(\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): void {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n max,\n min,\n max\n );\n this.fF2A = new FaustSensors.Interpolator(\n min,\n max,\n amin,\n amax\n );\n }\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt {\n return this.fA2F.getMappingValues(amin, amid, amax);\n }\n\n setActive(onOff: boolean): void {\n this.fActive = onOff;\n }\n getActive(): boolean {\n return this.fActive;\n }\n };\n }\n return this._DownUpConverter;\n }\n /**\n * Public function to build the accelerometer handler\n *\n * @returns `UpdatableValueConverter` built for the given curve\n */\n static buildHandler(\n curve: Curve,\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): UpdatableValueConverter {\n switch (curve) {\n case Curve.Up:\n return new FaustSensors.UpConverter(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n case Curve.Down:\n return new FaustSensors.DownConverter(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n case Curve.UpDown:\n return new FaustSensors.UpDownConverter(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n case Curve.DownUp:\n return new FaustSensors.DownUpConverter(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n default:\n return new FaustSensors.UpConverter(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n }\n }\n}\n", "import type {\n FaustMonoDspInstance,\n FaustPolyDspInstance,\n IFaustDspInstance\n} from './FaustDspInstance';\nimport type {\n AudioData,\n FaustDspMeta,\n FaustUIDescriptor,\n FaustUIGroup,\n FaustUIInputItem,\n FaustUIItem,\n LooseFaustDspFactory\n} from './types';\nimport FaustSensors, {\n Axis,\n Curve,\n UpdatableValueConverter\n} from './FaustSensors';\n\n// Public API\nexport type OutputParamHandler = (path: string, value: number) => void;\nexport type InputParamHandler = (path: string, value: number) => void;\nexport type ComputeHandler = (buffer_size: number) => void;\nexport type PlotHandler = (\n plotted: Float32Array[] | Float64Array[],\n index: number,\n events?: { type: string; data: any }[]\n) => void;\nexport type MetadataHandler = (key: string, value: string) => void;\n\n/**\n * A control write due at a known frame inside the next block.\n *\n * Given a list of these, `compute` renders the block in slices: up to the\n * frame of the next event, apply it, carry on. The same approach as\n * `architecture/faust/dsp/timed-dsp.h`, which is how a native host gets\n * sample-accurate MIDI.\n *\n * `apply` is a closure rather than a `{ path, value }` pair so one list can\n * carry parameter writes, `keyOn`s and MIDI messages together. The caller\n * knows how to perform each; the DSP only needs to know when.\n *\n * The list must be sorted by frame. Frames outside the block are clamped.\n */\nexport interface FaustTimedEvent {\n /** Frame offset from the start of the block, 0 <= frame < bufferSize */\n frame: number;\n /** Performed just before the slice starting at `frame` is rendered */\n apply: () => void;\n}\n\n// Implementation API\nexport type UIHandler = (item: FaustUIItem) => void;\n\n// Accelerometer or gyroscope handler\nexport type SensorEventHandler = (val: number) => void;\n\n// Define a type for the accelerometer or gyroscope handlers\nexport type SensorEventHandlers = {\n x: SensorEventHandler[];\n y: SensorEventHandler[];\n z: SensorEventHandler[];\n};\n\n/** Definition of the AudioBufferItem type */\nexport interface AudioBufferItem {\n pathName: string;\n audioBuffer: AudioBuffer;\n}\n\n/** Definition of the SoundfileItem type */\nexport interface SoundfileItem {\n /** Name of the soundfile */\n name: string;\n /** URL of the soundfile */\n url: string;\n /** Index in the DSP struct */\n index: number;\n /** Base pointer in wasm memory */\n basePtr: number;\n}\n\n/**\n * WasmAllocator is a basic memory management class designed to allocate\n * blocks of memory within a WebAssembly.Memory object. It provides a simple\n * alloc method to allocate a contiguous block of memory of a specified size.\n *\n * The allocator operates by keeping a linear progression through the memory,\n * always allocating the next block at the end of the last. This approach does not\n * handle freeing of memory or reuse of memory spaces.\n */\nexport class WasmAllocator {\n // The WebAssembly.Memory object this allocator will manage.\n private readonly memory: WebAssembly.Memory;\n // The number of bytes currently allocated. This serves as the \"pointer\" to the\n // next free byte in the memory.\n private allocatedBytes: number;\n\n constructor(memory: WebAssembly.Memory, offset: number) {\n this.memory = memory;\n // Initialize the allocator with offset allocated bytes.\n this.allocatedBytes = offset;\n }\n\n /**\n * Allocates a block of memory of the specified size, returning the pointer to the\n * beginning of the block. The block is allocated at the current offset and the\n * offset is incremented by the size of the block.\n *\n * @param sizeInBytes The size of the block to allocate in bytes.\n * @returns The offset (pointer) to the beginning of the allocated block.\n */\n alloc(sizeInBytes: number): number {\n // Store the current offset as the start of the new block.\n const currentOffset = this.allocatedBytes;\n // Calculate the new offset after allocating the requested block.\n const newOffset = currentOffset + sizeInBytes;\n // Get the total size of the WebAssembly memory in bytes.\n const totalMemoryBytes = this.memory.buffer.byteLength;\n\n // If the new offset exceeds the total size of the memory, grow the memory.\n if (newOffset > totalMemoryBytes) {\n // Calculate the number of WebAssembly pages needed to fit the new allocation.\n // WebAssembly memory pages are 64KiB each.\n const neededPages = Math.ceil(\n (newOffset - totalMemoryBytes) / 65536\n );\n // Grow the memory by the required number of pages.\n console.log(`GROW: ${neededPages} pages`);\n this.memory.grow(neededPages);\n }\n\n // Update the allocated bytes to the new offset.\n this.allocatedBytes = newOffset;\n // Return the offset at which the allocated block starts.\n return currentOffset;\n }\n\n /**\n * Returns the underlying buffer object.\n *\n * @returns The buffer object.\n */\n getBuffer(): ArrayBuffer {\n return this.memory.buffer;\n }\n\n /**\n * Returns the Int32 view of the underlying buffer object.\n *\n * @returns The view of the memory buffer as Int32Array.\n */\n getInt32Array(): Int32Array {\n return new Int32Array(this.memory.buffer);\n }\n\n /**\n * Returns the Int64 view of the underlying buffer object.\n *\n * @returns The view of the memory buffer as BigInt64Array.\n */\n getInt64Array(): BigInt64Array {\n return new BigInt64Array(this.memory.buffer);\n }\n\n /**\n * Returns the Float32 view of the underlying buffer object.\n *\n * @returns The view of the memory buffer as Float32Array.\n */\n getFloat32Array(): Float32Array {\n return new Float32Array(this.memory.buffer);\n }\n\n /**\n * Returns the Float64 view of the underlying buffer object..\n *\n * @returns The view of the memory buffer as Float64Array.\n */\n getFloat64Array(): Float64Array {\n return new Float64Array(this.memory.buffer);\n }\n}\n\n/**\n * Soundfile class to handle soundfile data in wasm memory.\n */\nexport class Soundfile {\n /** Maximum number of soundfile parts. */\n static get MAX_SOUNDFILE_PARTS() {\n return 256;\n }\n\n /** Maximum number of channels. */\n static get MAX_CHAN() {\n return 64;\n }\n\n /** Maximum buffer size in frames. */\n static get BUFFER_SIZE() {\n return 1024;\n }\n\n /** Default sample rate. */\n static get SAMPLE_RATE() {\n return 44100;\n }\n\n /** Pointer to the soundfile structure in wasm memory */\n private readonly fPtr: number;\n private readonly fBuffers: number;\n private readonly fLength: number;\n private readonly fSR: number;\n private readonly fOffset: number;\n private readonly fSampleSize: number;\n private readonly fPtrSize: number;\n private readonly fIntSize: number;\n private readonly fAllocator: WasmAllocator;\n\n constructor(\n allocator: WasmAllocator,\n sampleSize: number,\n curChan: number,\n length: number,\n maxChan: number,\n totalParts: number\n ) {\n this.fSampleSize = sampleSize;\n\n // To be coherent with the code generated by the wast/wasm backends:\n // - that uses 4 bytes for int when float is used\n // - that uses 8 bytes for int when double is used (to simplify the code generation)\n this.fIntSize = this.fSampleSize;\n\n this.fPtrSize = 4; // Not related to float/double choice, so always 4\n\n this.fAllocator = allocator;\n\n console.log(\n `Soundfile constructor: curChan: ${curChan}, length: ${length}, maxChan: ${maxChan}, totalParts: ${totalParts}`\n );\n\n // Allocate wasm memory for the soundfile structure\n this.fPtr = allocator.alloc(4 * this.fPtrSize); // 4 fPtrSize: fBuffers, fLength, fSR, fOffset\n\n // Use the 4 or 8 bytes size for int. The access are then adapted in copyToOut and emptyFile methods\n this.fLength = allocator.alloc(\n Soundfile.MAX_SOUNDFILE_PARTS * this.fIntSize\n );\n this.fSR = allocator.alloc(\n Soundfile.MAX_SOUNDFILE_PARTS * this.fIntSize\n );\n this.fOffset = allocator.alloc(\n Soundfile.MAX_SOUNDFILE_PARTS * this.fIntSize\n );\n\n this.fBuffers = this.allocBuffers(curChan, length, maxChan);\n\n //this.displayMemory(\"Allocated soundfile structure 1\");\n\n // Set the soundfile structure in wasm memory\n const HEAP32 = this.fAllocator.getInt32Array();\n HEAP32[this.fPtr >> 2] = this.fBuffers;\n HEAP32[(this.fPtr + this.fPtrSize) >> 2] = this.fLength;\n HEAP32[(this.fPtr + 2 * this.fPtrSize) >> 2] = this.fSR;\n HEAP32[(this.fPtr + 3 * this.fPtrSize) >> 2] = this.fOffset;\n\n for (let chan = 0; chan < curChan; chan++) {\n const buffer: number = HEAP32[(this.fBuffers >> 2) + chan];\n console.log(`allocBuffers AFTER: ${chan} - ${buffer}`);\n }\n\n //this.displayMemory(\"Allocated soundfile structure 2\");\n }\n\n private allocBuffers(\n curChan: number,\n length: number,\n maxChan: number\n ): number {\n const buffers = this.fAllocator.alloc(maxChan * this.fPtrSize);\n\n console.log(`allocBuffers buffers: ${buffers}`);\n\n for (let chan = 0; chan < curChan; chan++) {\n const buffer: number = this.fAllocator.alloc(\n length * this.fSampleSize\n );\n // HEAP32 is the Int32Array view of the memory buffer which can change after grow in `alloc` method\n // so we need to recompute the buffer address\n const HEAP32 = this.fAllocator.getInt32Array();\n HEAP32[(buffers >> 2) + chan] = buffer;\n }\n //this.displayMemory(\"Allocated soundfile buffers\");\n return buffers;\n }\n\n shareBuffers(curChan: number, maxChan: number) {\n // Share the same buffers for all other channels so that we have maxChan channels available\n const HEAP32 = this.fAllocator.getInt32Array();\n for (let chan = curChan; chan < maxChan; chan++) {\n HEAP32[(this.fBuffers >> 2) + chan] =\n HEAP32[(this.fBuffers >> 2) + (chan % curChan)];\n }\n }\n\n copyToOut(\n part: number,\n maxChannels: number,\n offset: number,\n audioData: AudioData\n ) {\n // Set the soundfile fields in wasm memory\n if (this.fIntSize === 4) {\n const HEAP32 = this.fAllocator.getInt32Array();\n HEAP32[(this.fLength >> Math.log2(this.fIntSize)) + part] =\n audioData.audioBuffer[0].length;\n HEAP32[(this.fSR >> Math.log2(this.fIntSize)) + part] =\n audioData.sampleRate;\n HEAP32[(this.fOffset >> Math.log2(this.fIntSize)) + part] = offset;\n } else {\n const HEAP64 = this.fAllocator.getInt64Array();\n HEAP64[(this.fLength >> Math.log2(this.fIntSize)) + part] = BigInt(\n audioData.audioBuffer[0].length\n );\n HEAP64[(this.fSR >> Math.log2(this.fIntSize)) + part] = BigInt(\n audioData.sampleRate\n );\n HEAP64[(this.fOffset >> Math.log2(this.fIntSize)) + part] =\n BigInt(offset);\n }\n\n console.log(\n `copyToOut: part: ${part}, maxChannels: ${maxChannels}, offset: ${offset}, buffer: ${audioData}`\n );\n\n //this.displayMemory(\"IN copyToOut, BEFORE copyToOutReal\", true);\n // Copy the soundfile data to the buffer\n if (this.fSampleSize === 8) {\n this.copyToOutReal64(maxChannels, offset, audioData);\n } else {\n this.copyToOutReal32(maxChannels, offset, audioData);\n }\n //this.displayMemory(\"IN copyToOut, AFTER copyToOutReal\");\n }\n\n copyToOutReal32(maxChannels: number, offset: number, audioData: AudioData) {\n const HEAP32 = this.fAllocator.getInt32Array();\n const HEAPF = this.fAllocator.getFloat32Array();\n for (let chan = 0; chan < audioData.audioBuffer.length; chan++) {\n const input: Float32Array = audioData.audioBuffer[chan];\n const output: number = HEAP32[(this.fBuffers >> 2) + chan];\n const begin: number =\n (output + offset * this.fSampleSize) >>\n Math.log2(this.fSampleSize);\n const end: number =\n (output + (offset + input.length) * this.fSampleSize) >>\n Math.log2(this.fSampleSize);\n console.log(\n `copyToOutReal32 begin: ${begin}, end: ${end}, delta: ${end - begin}`\n );\n const outputReal: Float32Array = HEAPF.subarray(\n (output + offset * this.fSampleSize) >>\n Math.log2(this.fSampleSize),\n (output + (offset + input.length) * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n for (let sample = 0; sample < input.length; sample++) {\n outputReal[sample] = input[sample];\n }\n }\n }\n\n copyToOutReal64(maxChannels: number, offset: number, audioData: AudioData) {\n const HEAP32 = this.fAllocator.getInt32Array();\n const HEAPF = this.fAllocator.getFloat64Array();\n for (let chan = 0; chan < audioData.audioBuffer.length; chan++) {\n const input: Float32Array = audioData.audioBuffer[chan];\n const output: number = HEAP32[(this.fBuffers >> 2) + chan];\n const begin: number =\n (output + offset * this.fSampleSize) >>\n Math.log2(this.fSampleSize);\n const end: number =\n (output + (offset + input.length) * this.fSampleSize) >>\n Math.log2(this.fSampleSize);\n console.log(\n `copyToOutReal64 begin: ${begin}, end: ${end}, delta: ${end - begin}`\n );\n const outputReal: Float64Array = HEAPF.subarray(\n (output + offset * this.fSampleSize) >>\n Math.log2(this.fSampleSize),\n (output + (offset + input.length) * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n for (let sample = 0; sample < input.length; sample++) {\n outputReal[sample] = input[sample];\n }\n }\n }\n\n emptyFile(part: number, offset: number): number {\n // Set the soundfile fields in wasm memory\n if (this.fIntSize === 4) {\n const HEAP32 = this.fAllocator.getInt32Array();\n HEAP32[(this.fLength >> Math.log2(this.fIntSize)) + part] =\n Soundfile.BUFFER_SIZE;\n HEAP32[(this.fSR >> Math.log2(this.fIntSize)) + part] =\n Soundfile.SAMPLE_RATE;\n HEAP32[(this.fOffset >> Math.log2(this.fIntSize)) + part] = offset;\n } else {\n const HEAP64 = this.fAllocator.getInt64Array();\n HEAP64[(this.fLength >> Math.log2(this.fIntSize)) + part] = BigInt(\n Soundfile.BUFFER_SIZE\n );\n HEAP64[(this.fSR >> Math.log2(this.fIntSize)) + part] = BigInt(\n Soundfile.SAMPLE_RATE\n );\n HEAP64[(this.fOffset >> Math.log2(this.fIntSize)) + part] =\n BigInt(offset);\n }\n\n // Update and return the new offset\n return offset + Soundfile.BUFFER_SIZE;\n }\n\n displayMemory(where: string = '', mem: boolean = false) {\n console.log('Soundfile memory: ' + where);\n console.log(`fPtr: ${this.fPtr}`);\n console.log(`fBuffers: ${this.fBuffers}`);\n console.log(`fLength: ${this.fLength}`);\n console.log(`fSR: ${this.fSR}`);\n console.log(`fOffset: ${this.fOffset}`);\n const HEAP32 = this.fAllocator.getInt32Array();\n if (mem) console.log(`HEAP32: ${HEAP32}`);\n console.log(`HEAP32[this.fPtr >> 2]: ${HEAP32[this.fPtr >> 2]}`);\n console.log(\n `HEAP32[(this.fPtr + ptrSize) >> 2]: ${HEAP32[(this.fPtr + this.fPtrSize) >> 2]}`\n );\n console.log(\n `HEAP32[(this.fPtr + 2 * ptrSize) >> 2]: ${HEAP32[(this.fPtr + 2 * this.fPtrSize) >> 2]}`\n );\n console.log(\n `HEAP32[(this.fPtr + 3 * ptrSize) >> 2]: ${HEAP32[(this.fPtr + 3 * this.fPtrSize) >> 2]}`\n );\n }\n\n // Return the pointer to the soundfile structure in wasm memory\n getPtr(): number {\n return this.fPtr;\n }\n\n getHEAP32(): Int32Array {\n return this.fAllocator.getInt32Array();\n }\n getHEAPFloat32(): Float32Array {\n return this.fAllocator.getFloat32Array();\n }\n\n getHEAPFloat64(): Float64Array {\n return this.fAllocator.getFloat64Array();\n }\n}\n\n/**\n * DSP implementation that mimic the C++ 'dsp' class:\n * - adding MIDI control: metadata are decoded and incoming MIDI messages will control the associated controllers\n * - an output handler can be set to treat produced output controllers (like 'bargraph')\n * - an input handler can be set to follow control parameter changes (like sliders)\n * - regular controllers are handled using setParamValue/getParamValue and getParams methods\n */\nexport interface IFaustBaseWebAudioDsp {\n /**\n * Set the parameter output handler, to be called in the 'compute' method with output parameters (like bargraph).\n *\n * @param handler - the output handler\n */\n setOutputParamHandler(handler: OutputParamHandler | null): void;\n\n /**\n * Get the parameter output handler.\n *\n * @return the current output handler\n */\n getOutputParamHandler(): OutputParamHandler | null;\n\n /**\n * Call the output parameter handler with a path and value.\n *\n * @param path - the path to the wanted parameter (retrieved using 'getParams' method)\n * @param value - the float value for the wanted control\n */\n callOutputParamHandler(path: string, value: number): void;\n\n /**\n * Set the parameter input handler, to be called when input parameters change (like sliders).\n *\n * @param handler - the input handler\n */\n setInputParamHandler(handler: InputParamHandler | null): void;\n\n /**\n * Get the parameter input handler.\n *\n * @return the current input handler\n */\n getInputParamHandler(): InputParamHandler | null;\n\n /**\n * Call the input parameter handler with a path and value.\n *\n * @param path - the path to the wanted parameter (retrieved using 'getParams' method)\n * @param value - the float value for the wanted control\n */\n callInputParamHandler(path: string, value: number): void;\n\n /**\n * Set the compute handler, to be called in the 'compute' method with buffer size.\n *\n * @param handler - the compute handler\n */\n setComputeHandler(handler: ComputeHandler | null): void;\n\n /**\n * Get the compute handler.\n *\n * @return the current output handler\n */\n getComputeHandler(): ComputeHandler | null;\n\n /**\n * Set the plot handler, to be called in the 'compute' method with various info (see PlotHandler type).\n *\n * @param handler - the plot handler\n */\n setPlotHandler(handler: PlotHandler | null): void;\n\n /**\n * Get the plot handler.\n *\n * @return the current plot handler\n */\n getPlotHandler(): PlotHandler | null;\n\n /**\n * Return instance number of audio inputs.\n *\n * @return the instance number of audio inputs\n */\n getNumInputs(): number;\n\n /**\n * Return instance number of audio outputs.\n *\n * @return the instance number of audio outputs\n */\n getNumOutputs(): number;\n\n /**\n * DSP instance computation, to be called with successive input/output audio buffers, using their size.\n *\n * @param inputs - the input audio buffers\n * @param outputs - the output audio buffers\n * @param events - control writes due inside this block, sorted by frame.\n * The block is rendered in slices around them, so each one takes effect on\n * the frame it was timestamped for instead of at the start of the block.\n */\n compute(\n inputs: Float32Array[],\n outputs: Float32Array[],\n events?: FaustTimedEvent[]\n ): boolean;\n\n /**\n * Give a handler to be called on 'declare key value' kind of metadata.\n *\n * @param handler - the handler to be used\n */\n metadata(handler: MetadataHandler): void;\n\n /**\n * Handle untyped MIDI messages.\n *\n * @param data - and arry of MIDI bytes\n */\n midiMessage(data: number[] | Uint8Array): void;\n\n /**\n * Handle MIDI ctrlChange messages.\n *\n * @param channel - the MIDI channel (0..15, not used for now)\n * @param ctrl - the MIDI controller number (0..127)\n * @param value - the MIDI controller value (0..127)\n */\n ctrlChange(chan: number, ctrl: number, value: number): void;\n\n /**\n * Handle MIDI pitchWheel messages.\n *\n * @param channel - the MIDI channel (0..15, not used for now)\n * @param value - the MIDI controller value (0..16383)\n */\n pitchWheel(chan: number, value: number): void;\n\n /**\n * Handle MIDI keyOn messages.\n * @param channel\n * @param pitch\n * @param velocity\n */\n keyOn(channel: number, pitch: number, velocity: number): void;\n\n /**\n * Handle MIDI keyOn messages.\n * @param channel\n * @param pitch\n * @param velocity\n */\n keyOff(channel: number, pitch: number, velocity: number): void;\n\n /**\n * Set parameter value.\n *\n * @param path - the path to the wanted parameter (retrieved using 'getParams' method)\n * @param val - the float value for the wanted control\n */\n setParamValue(path: string, value: number): void;\n\n /**\n * Get parameter value.\n *\n * @param path - the path to the wanted parameter (retrieved using 'getParams' method)\n *\n * @return the float value\n */\n getParamValue(path: string): number;\n\n /**\n * Get the table of all input parameters paths.\n *\n * @return the table of all input parameters paths\n */\n getParams(): string[];\n\n /**\n * Get DSP JSON description with its UI and metadata as object.\n *\n * @return the DSP JSON description as object\n */\n getMeta(): FaustDspMeta;\n\n /**\n * Get DSP UI description.\n *\n * @return the DSP UI description\n */\n getUI(): FaustUIDescriptor;\n\n /**\n * Get DSP UI items description.\n *\n * @return the DSP UI items description\n */\n getDescriptors(): FaustUIInputItem[];\n\n /**\n * Get DSP JSON description with its UI and metadata.\n *\n * @return the DSP JSON description\n */\n getJSON(): string;\n\n /**\n * Start accelerometer and gyroscope handlers.\n */\n startSensors(): void;\n\n /**\n * Stop accelerometer and gyroscope handlers.\n */\n stopSensors(): void;\n\n /** Indicating if the DSP handles the accelerometer */\n readonly hasAccInput: boolean;\n\n /**\n * Accelerometer handling.\n * accelerationIncludingGravity: DeviceMotionEvent[\"accelerationIncludingGravity\"]\n * invert: boolean\n */\n propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean\n ): void;\n\n /** Indicating if the DSP handles the gyroscope */\n readonly hasGyrInput: boolean;\n\n /**\n * Gyroscope handling.\n * event: Pick<DeviceOrientationEvent, \"alpha\" | \"beta\" | \"gamma\">\n */\n propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ): void;\n\n /**\n * Reinitialize the DSP using its configured sample rate.\n */\n init(): void;\n\n /**\n * Reinitialize the DSP instance state using its configured sample rate.\n */\n instanceInit(): void;\n\n /**\n * Clear the DSP instance state.\n */\n instanceClear(): void;\n\n /**\n * Reinitialize the DSP instance constants using its configured sample rate.\n */\n instanceConstants(): void;\n\n /**\n * Reset DSP user interface parameters to their default values.\n */\n instanceResetUserInterface(): void;\n\n /**\n * Start the DSP audio processing.\n */\n start(): void;\n\n /**\n * Stop the DSP audio processing.\n */\n stop(): void;\n\n /**\n * Destroy the DSP.\n */\n destroy(): void;\n}\n\nexport type IFaustMonoWebAudioDsp = IFaustBaseWebAudioDsp;\n\n/**\n * A node's controls, each taking an optional time.\n *\n * `time` is in AudioContext seconds, the same clock as\n * `AudioParam.setValueAtTime`, so notes and parameter automation can be\n * scheduled against each other.\n *\n * It is declared on the node rather than on `IFaustBaseWebAudioDsp` because\n * only a node can honour it: it reaches its DSP over a message port and can\n * hold the write until the right block. A DSP is called from inside the block\n * and has nowhere to put a future event.\n *\n * An AudioWorklet node applies the control on the exact sample. A\n * ScriptProcessor node (`sp: true`) accepts `time` and ignores it.\n */\nexport interface IFaustMonoWebAudioNode\n extends IFaustMonoWebAudioDsp, AudioNode {\n midiMessage(data: number[] | Uint8Array, time?: number): void;\n ctrlChange(chan: number, ctrl: number, value: number, time?: number): void;\n pitchWheel(chan: number, value: number, time?: number): void;\n setParamValue(path: string, value: number, time?: number): void;\n}\n\nexport interface IFaustPolyWebAudioDsp extends IFaustBaseWebAudioDsp {\n /**\n * Handle MIDI keyOn messages.\n *\n * @param channel - the MIDI channel (0..15, not used for now)\n * @param pitch - the MIDI pitch value (0..127)\n * @param velocity - the MIDI velocity value (0..127)\n */\n keyOn(channel: number, pitch: number, velocity: number): void;\n\n /**\n * Handle MIDI keyOff messages.\n *\n * @param channel - the MIDI channel (0..15, not used for now)\n * @param pitch - the MIDI pitch value (0..127)\n * @param velocity - the MIDI velocity value (0..127)\n */\n keyOff(channel: number, pitch: number, velocity: number): void;\n\n /**\n * Stop all playing notes.\n *\n * @param hard - whether to immediately stop notes or put them in release mode\n */\n allNotesOff(hard: boolean): void;\n}\n/** As `IFaustMonoWebAudioNode`, with the notes timestamped too. */\nexport interface IFaustPolyWebAudioNode\n extends IFaustPolyWebAudioDsp, AudioNode {\n midiMessage(data: number[] | Uint8Array, time?: number): void;\n ctrlChange(chan: number, ctrl: number, value: number, time?: number): void;\n pitchWheel(chan: number, value: number, time?: number): void;\n setParamValue(path: string, value: number, time?: number): void;\n keyOn(\n channel: number,\n pitch: number,\n velocity: number,\n time?: number\n ): void;\n keyOff(\n channel: number,\n pitch: number,\n velocity: number,\n time?: number\n ): void;\n}\n\nexport class FaustBaseWebAudioDsp implements IFaustBaseWebAudioDsp {\n protected fOutputHandler: OutputParamHandler | null = null;\n protected fInputHandler: InputParamHandler | null = null;\n protected fComputeHandler: ComputeHandler | null = null;\n\n // To handle MIDI events plot\n protected fPlotHandler: PlotHandler | null = null;\n protected fCachedEvents: { type: string; data: any }[] = [];\n protected fBufferNum = 0;\n\n protected fInChannels: Float32Array[] | Float64Array[] = [];\n protected fOutChannels: Float32Array[] | Float64Array[] = [];\n\n protected fOutputsTimer = 5;\n\n // UI items path\n protected fInputsItems: string[] = [];\n protected fOutputsItems: string[] = [];\n protected fDescriptor: FaustUIInputItem[] = [];\n\n // Soundfile handling\n protected fSoundfiles: SoundfileItem[] = [];\n protected fSoundfileBuffers: LooseFaustDspFactory['soundfiles'] = {};\n /** Keep the end of memory offset before soundfiles */\n protected fEndMemory: number;\n\n // Accelerometer handling\n protected fAcc: SensorEventHandlers; // array of accelerometer handlers on x,y,y axes, to be called with DeviceMotionEvent\n protected fGyr: SensorEventHandlers; // array of gyroscope handlers on alpha,beta,gama axes, to be called with DeviceMotionEvent\n\n // Buffers in wasm memory\n protected fAudioInputs!: number;\n protected fAudioOutputs!: number;\n\n /**\n * Block-start address of every wasm audio channel, plus the heap view\n * holding the pointer tables.\n *\n * Rendering a slice means giving wasm a channel pointer to the slice's\n * first frame, so `setBufferOffset` rewrites the tables and needs these\n * unmoved addresses to offset from. Only the tables move; the\n * `fInChannels` / `fOutChannels` views from `initMemory` still span the\n * whole block and stay valid.\n */\n protected fInBase: number[] = [];\n protected fOutBase: number[] = [];\n protected fHEAP32!: Int32Array;\n\n protected fBufferSize: number;\n protected fPtrSize: number;\n protected fSampleSize: number;\n\n // MIDI handling\n protected fPitchwheelLabel: {\n path: string;\n chan: number;\n min: number;\n max: number;\n }[] = [];\n protected fCtrlLabel: {\n path: string;\n chan: number;\n min: number;\n max: number;\n }[][] = new Array(128).fill(null).map(() => []);\n // array of MIDI key handlers; array index is the MIDI note number\n protected fMidiKeyLabel: {\n path: string;\n chan: number;\n min: number;\n max: number;\n }[][] = new Array(128).fill(null).map(() => []);\n protected fMidiKeyOnLabel: {\n path: string;\n chan: number;\n min: number;\n max: number;\n }[][] = new Array(128).fill(null).map(() => []);\n protected fMidiKeyOffLabel: {\n path: string;\n chan: number;\n min: number;\n max: number;\n }[][] = new Array(128).fill(null).map(() => []);\n\n protected fPathTable: { [address: string]: number } = {};\n protected fUICallback: UIHandler = (item: FaustUIItem) => {\n if (item.type === 'hbargraph' || item.type === 'vbargraph') {\n const registerPath = (alias: string) => {\n if (this.fPathTable[alias] === undefined) {\n this.fPathTable[alias] = item.index;\n }\n };\n // Keep bargraph adresses\n this.fOutputsItems.push(item.address);\n registerPath(item.address);\n registerPath(item.shortname);\n registerPath(item.label);\n } else if (\n item.type === 'vslider' ||\n item.type === 'hslider' ||\n item.type === 'button' ||\n item.type === 'checkbox' ||\n item.type === 'nentry'\n ) {\n const registerPath = (alias: string) => {\n if (this.fPathTable[alias] === undefined) {\n this.fPathTable[alias] = item.index;\n }\n };\n // Keep inputs adresses\n this.fInputsItems.push(item.address);\n registerPath(item.address);\n registerPath(item.shortname);\n registerPath(item.label);\n this.fDescriptor.push(item);\n if (!item.meta) return;\n item.meta.forEach((meta) => {\n const { midi, acc, gyr } = meta;\n // Parse 'midi' metadata\n if (midi) {\n const strMidi = midi.trim();\n if (strMidi === 'pitchwheel') {\n const matched = strMidi.match(/^pitchwheel\\s(\\d+)/);\n // \"pitchwheel chan\"\n if (matched) {\n this.fPitchwheelLabel.push({\n path: item.address,\n chan: parseInt(matched[1]),\n min: item.min as number,\n max: item.max as number\n });\n // \"pitchwheel\"\n } else {\n this.fPitchwheelLabel.push({\n path: item.address,\n chan: 0,\n min: item.min as number,\n max: item.max as number\n });\n }\n } else {\n // \"ctrl num chan\"\n const matched2 = strMidi.match(/^ctrl\\s(\\d+)\\s(\\d+)/);\n // \"ctrl num\"\n const matched1 = strMidi.match(/^ctrl\\s(\\d+)/);\n // match `key <note>[ <channel>]`\n const matchedKey = strMidi.match(\n /^key\\s+(\\d+)(?:\\s+(\\d+))?$/\n );\n //match `keyon <note>[ <channel>]`\n const matchedKeyOn = strMidi.match(\n /^keyon\\s+(\\d+)(?:\\s+(\\d+))?$/\n );\n //match `keyoff <note>[ <channel>]`\n const matchedKeyOff = strMidi.match(\n /^keyoff\\s+(\\d+)(?:\\s+(\\d+))?$/\n );\n if (matched2) {\n this.fCtrlLabel[parseInt(matched2[1])].push({\n path: item.address,\n chan: parseInt(matched2[2]),\n min: item.min as number,\n max: item.max as number\n });\n } else if (matched1) {\n this.fCtrlLabel[parseInt(matched1[1])].push({\n path: item.address,\n chan: 0,\n min: item.min as number,\n max: item.max as number\n });\n } else if (matchedKey) {\n const note = parseInt(matchedKey[1]);\n const channel = matchedKey[2]\n ? parseInt(matchedKey[2])\n : 0;\n this.fMidiKeyLabel[note].push({\n path: item.address,\n chan: channel,\n min: (item.min as number) ?? 0,\n max: (item.max as number) ?? 1\n });\n } else if (matchedKeyOn) {\n const note = parseInt(matchedKeyOn[1]);\n const channel = matchedKeyOn[2]\n ? parseInt(matchedKeyOn[2])\n : 0;\n this.fMidiKeyOnLabel[note].push({\n path: item.address,\n chan: channel,\n min: (item.min as number) ?? 0,\n max: (item.max as number) ?? 1\n });\n } else if (matchedKeyOff) {\n const note = parseInt(matchedKeyOff[1]);\n const channel = matchedKeyOff[2]\n ? parseInt(matchedKeyOff[2])\n : 0;\n this.fMidiKeyOffLabel[note].push({\n path: item.address,\n chan: channel,\n min: (item.min as number) ?? 0,\n max: (item.max as number) ?? 1\n });\n }\n }\n }\n\n // Parse 'acc' metadata\n if (acc) {\n const numAcc: number[] = acc.trim().split(' ').map(Number);\n this.setupAccHandler(\n item.address,\n FaustSensors.convertToAxis(numAcc[0]),\n FaustSensors.convertToCurve(numAcc[1]),\n numAcc[2],\n numAcc[3],\n numAcc[4],\n item.min as number,\n item.init as number,\n item.max as number\n );\n }\n // Parse 'gyr' metadata\n if (gyr) {\n const numAcc: number[] = gyr.trim().split(' ').map(Number);\n this.setupGyrHandler(\n item.address,\n FaustSensors.convertToAxis(numAcc[0]),\n FaustSensors.convertToCurve(numAcc[1]),\n numAcc[2],\n numAcc[3],\n numAcc[4],\n item.min as number,\n item.init as number,\n item.max as number\n );\n }\n });\n } else if (item.type === 'soundfile') {\n this.fSoundfiles.push({\n name: item.label,\n url: item.url,\n index: item.index,\n basePtr: -1\n });\n }\n };\n\n // Audio callback\n protected fProcessing = false;\n protected fDestroyed = false;\n protected fFirstCall = true;\n\n protected fJSONDsp!: FaustDspMeta;\n\n constructor(\n sampleSize: number,\n bufferSize: number,\n soundfiles: LooseFaustDspFactory['soundfiles']\n ) {\n this.fBufferSize = bufferSize;\n this.fPtrSize = sampleSize; // Done on wast/wasm backend side\n this.fSampleSize = sampleSize;\n this.fSoundfileBuffers = soundfiles;\n this.fAcc = { x: [], y: [], z: [] };\n this.fGyr = { x: [], y: [], z: [] };\n }\n\n /**\n * Render a whole block through `render`, stopping at each event.\n *\n * Render up to the next event's frame, apply it, continue. Living in the\n * base class means mono and poly only have to supply what rendering a\n * slice means.\n *\n * With no events the block is one slice, which is what every caller that\n * passes no events gets.\n */\n protected renderBlock(\n events: FaustTimedEvent[] | undefined,\n render: (offset: number, count: number) => void\n ) {\n if (!events || events.length === 0) {\n render(0, this.fBufferSize);\n return;\n }\n let frame = 0;\n for (let i = 0; i < events.length; i++) {\n const event = events[i];\n // Clamped, not trusted: a frame past the end of the block would\n // give wasm a count that runs off the end of the channel.\n const at = Math.min(Math.max(event.frame, 0), this.fBufferSize);\n // Two events on one frame leave an empty slice between them,\n // which is not worth a wasm call.\n if (at > frame) {\n render(frame, at - frame);\n frame = at;\n }\n event.apply();\n }\n if (frame < this.fBufferSize) {\n render(frame, this.fBufferSize - frame);\n }\n }\n\n /**\n * Apply every event without rendering.\n *\n * For the blocks `compute` returns early from: stopped, or an input or\n * output not connected yet. The events have already left the processor's\n * queue, so dropping them here loses them permanently -- a `keyOn` that\n * never sounds, or a parameter the DSP and the host disagree about from\n * then on.\n *\n * A destroyed DSP is the exception, and does drop them.\n */\n protected applyEvents(events?: FaustTimedEvent[]) {\n if (!events) return;\n for (let i = 0; i < events.length; i++) events[i].apply();\n }\n\n /**\n * Point the wasm channel tables at frame `offset` of the block.\n *\n * Each slice sets this before rendering, so nothing outside `compute`\n * depends on where the previous slice left the tables.\n */\n protected setBufferOffset(offset: number) {\n const bytes = offset * this.fSampleSize;\n for (let chan = 0; chan < this.fInBase.length; chan++) {\n this.fHEAP32[(this.fAudioInputs >> 2) + chan] =\n this.fInBase[chan] + bytes;\n }\n for (let chan = 0; chan < this.fOutBase.length; chan++) {\n this.fHEAP32[(this.fAudioOutputs >> 2) + chan] =\n this.fOutBase[chan] + bytes;\n }\n }\n\n // Tools\n static remap(\n v: number,\n mn0: number,\n mx0: number,\n mn1: number,\n mx1: number\n ) {\n return ((v - mn0) / (mx0 - mn0)) * (mx1 - mn1) + mn1;\n }\n\n // JSON parsing functions\n static parseUI(\n ui: FaustUIDescriptor,\n callback: (item: FaustUIItem) => any\n ) {\n ui.forEach((group) => this.parseGroup(group, callback));\n }\n\n static parseGroup(\n group: FaustUIGroup,\n callback: (item: FaustUIItem) => any\n ) {\n if (group.items) {\n this.parseItems(group.items, callback);\n }\n }\n static parseItems(\n items: FaustUIItem[],\n callback: (item: FaustUIItem) => any\n ) {\n items.forEach((item) => this.parseItem(item, callback));\n }\n\n static parseItem(item: FaustUIItem, callback: (item: FaustUIItem) => any) {\n if (\n item.type === 'vgroup' ||\n item.type === 'hgroup' ||\n item.type === 'tgroup'\n ) {\n this.parseItems(item.items, callback);\n } else {\n callback(item);\n }\n }\n\n /** Split the soundfile names and return an array of names */\n static splitSoundfileNames(input: string): string[] {\n // Trim off the curly braces at the start and end, if present\n const trimmed = input.replace(/^\\{|\\}$/g, '');\n // Split the string into an array of strings and remove first and last characters\n return trimmed\n .split(';')\n .map((str) =>\n str.length <= 2 ? '' : str.substring(1, str.length - 1)\n )\n .map((str) => str.trim())\n .filter((str) => str.length > 0);\n }\n\n get hasAccInput() {\n return this.fAcc.x.length + this.fAcc.y.length + this.fAcc.z.length > 0;\n }\n propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n // Get accelerometervalues\n const { x, y, z } = accelerationIncludingGravity;\n\n if (invert) {\n // Call the accelerometer handlers\n if (x !== null) this.fAcc.x.forEach((handler) => handler(-x));\n if (y !== null) this.fAcc.y.forEach((handler) => handler(-y));\n if (z !== null) this.fAcc.z.forEach((handler) => handler(-z));\n } else {\n // Call the accelerometer handlers\n if (x !== null) this.fAcc.x.forEach((handler) => handler(x));\n if (y !== null) this.fAcc.y.forEach((handler) => handler(y));\n if (z !== null) this.fAcc.z.forEach((handler) => handler(z));\n }\n }\n\n get hasGyrInput() {\n return this.fGyr.x.length + this.fGyr.y.length + this.fGyr.z.length > 0;\n }\n propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n // Get gyroscope values\n const { alpha, beta, gamma } = event;\n\n // Call the gyroscope handlers\n if (alpha !== null) this.fGyr.x.forEach((handler) => handler(alpha));\n if (beta !== null) this.fGyr.y.forEach((handler) => handler(beta));\n if (gamma !== null) this.fGyr.z.forEach((handler) => handler(gamma));\n }\n\n /** Build the accelerometer handler */\n private setupAccHandler(\n path: string,\n axis: Axis,\n curve: Curve,\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ) {\n const handler: UpdatableValueConverter = FaustSensors.buildHandler(\n curve,\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n switch (axis) {\n case Axis.x:\n this.fAcc.x.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n case Axis.y:\n this.fAcc.y.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n case Axis.z:\n this.fAcc.z.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n }\n }\n\n /** Build the gyroscope handler */\n private setupGyrHandler(\n path: string,\n axis: Axis,\n curve: Curve,\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ) {\n const handler: UpdatableValueConverter = FaustSensors.buildHandler(\n curve,\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n switch (axis) {\n case Axis.x:\n this.fGyr.x.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n case Axis.y:\n this.fGyr.y.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n case Axis.z:\n this.fGyr.z.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n }\n }\n\n static extractUrlsFromMeta(dspMeta: FaustDspMeta): string[] {\n // Find the entry with the \"soundfiles\" key\n const soundfilesEntry = dspMeta.meta.find(\n (entry) => entry.soundfiles !== undefined\n );\n // If the entry is found, split the string by semicolon to get the URLs\n if (soundfilesEntry) {\n return soundfilesEntry.soundfiles\n .split(';')\n .filter((url) => url !== '');\n } else {\n return [];\n }\n }\n\n /**\n * Load a soundfile possibly containing several parts in the DSP struct.\n * Soundfile pointers are located at 'index' offset, to be read in the JSON file.\n * The DSP struct is located at baseDSP in the wasm memory,\n * either a monophonic DSP, or a voice in a polyphonic context.\n *\n * @param allocator : the wasm memory allocator\n * @param baseDSP : the base DSP in the wasm memory\n * @param name : the name of the soundfile\n * @param url : the url of the soundfile\n */\n private loadSoundfile(\n allocator: WasmAllocator,\n baseDSP: number,\n name: string,\n url: string\n ) {\n console.log(`Soundfile ${name} paths: ${url}`);\n const soundfileIds = FaustBaseWebAudioDsp.splitSoundfileNames(url);\n const item = this.fSoundfiles.find((item) => item.url === url);\n if (!item) throw new Error(`Soundfile with ${url} cannot be found !}`);\n // Use the cached Soundfile\n if (item.basePtr !== -1) {\n // Update HEAP32 after soundfile creation\n const HEAP32 = allocator.getInt32Array();\n // Fill the soundfile structure in wasm memory, soundfiles are at the beginning of the DSP memory\n console.log(\n `Soundfile CACHE ${url}} : ${name} loaded at ${item.basePtr} in wasm memory with index ${item.index}`\n );\n // Soundfile is located at 'index' in the DSP struct, to be added with baseDSP in the wasm memory\n HEAP32[(baseDSP + item.index) >> 2] = item.basePtr;\n } else {\n // Create the soundfiles\n const soundfile = this.createSoundfile(\n allocator,\n soundfileIds,\n this.fSoundfileBuffers\n );\n if (soundfile) {\n // Update HEAP32 after soundfile creation\n const HEAP32 = soundfile.getHEAP32();\n // Get the soundfile pointer in wasm memory\n item.basePtr = soundfile.getPtr();\n console.log(\n `Soundfile ${name} loaded at ${item.basePtr} in wasm memory with index ${item.index}`\n );\n // Soundfile is located at 'index' in the DSP struct, to be added with baseDSP in the wasm memory\n HEAP32[(baseDSP + item.index) >> 2] = item.basePtr;\n } else {\n console.log(\n `Soundfile ${name} for ${url} cannot be created !}`\n );\n }\n }\n }\n\n createSoundfile(\n allocator: WasmAllocator,\n soundfileIdList: string[],\n soundfiles: LooseFaustDspFactory['soundfiles'],\n maxChan = Soundfile.MAX_CHAN\n ) {\n let curChan = 1; // At least one channel\n let totalLength = 0;\n\n // Compute total length and channels max of all files\n for (const soundfileId of soundfileIdList) {\n let chan = 0;\n let len = 0;\n const audioData = soundfiles?.[soundfileId];\n if (audioData) {\n chan = audioData.audioBuffer.length;\n len = audioData.audioBuffer[0].length;\n } else {\n len = Soundfile.BUFFER_SIZE;\n chan = 1;\n }\n curChan = Math.max(curChan, chan);\n totalLength += len;\n }\n\n // Complete with empty parts\n totalLength +=\n (Soundfile.MAX_SOUNDFILE_PARTS - soundfileIdList.length) *\n Soundfile.BUFFER_SIZE;\n\n // Create the soundfile\n const soundfile = new Soundfile(\n allocator,\n this.fSampleSize,\n curChan,\n totalLength,\n maxChan,\n soundfileIdList.length\n );\n\n //soundfile.displayMemory(\"After soundfile creation\");\n // Init offset\n let offset = 0;\n\n // Read all files\n for (let part = 0; part < soundfileIdList.length; part++) {\n const soundfileId = soundfileIdList[part];\n const audioData = soundfiles?.[soundfileId];\n if (audioData) {\n //soundfile.displayMemory(\"BEFORE copyToOut\");\n soundfile.copyToOut(part, maxChan, offset, audioData);\n //soundfile.displayMemory(\"AFTER copyToOut\");\n offset += audioData.audioBuffer[0].length;\n } else {\n // Empty sound\n offset = soundfile.emptyFile(part, offset);\n }\n }\n\n //soundfile.displayMemory(\"After reading soundfiles\");\n\n // Complete with empty parts\n for (\n let part = soundfileIdList.length;\n part < Soundfile.MAX_SOUNDFILE_PARTS;\n part++\n ) {\n offset = soundfile.emptyFile(part, offset);\n }\n\n //soundfile.displayMemory(\"After emptyFile\");\n\n // Share the same buffers for all other channels so that we have maxChan channels available\n soundfile.shareBuffers(curChan, maxChan);\n\n //soundfile.displayMemory(\"After shareBuffers\");\n\n return soundfile;\n }\n /**\n * Init soundfiles memory.\n *\n * @param allocator : the wasm memory allocator\n * @param baseDSP : the DSP struct (either a monophonic DSP of polyphonic voice) base DSP in the wasm memory\n */\n protected initSoundfileMemory(allocator: WasmAllocator, baseDSP: number) {\n // Create and fill the soundfile structure\n for (const { name, url } of this.fSoundfiles) {\n this.loadSoundfile(allocator, baseDSP, name, url);\n }\n }\n\n protected updateOutputs() {\n if (\n this.fOutputsItems.length > 0 &&\n this.fOutputHandler &&\n this.fOutputsTimer-- === 0\n ) {\n this.fOutputsTimer = 5;\n this.fOutputsItems.forEach((item) =>\n this.fOutputHandler?.(item, this.getParamValue(item))\n );\n }\n }\n\n // Public API\n metadata(handler: MetadataHandler) {\n if (this.fJSONDsp.meta) {\n this.fJSONDsp.meta.forEach((meta) =>\n handler(Object.keys(meta)[0], meta[Object.keys(meta)[0]])\n );\n }\n }\n\n compute(input: Float32Array[], output: Float32Array[]) {\n return false;\n }\n\n setOutputParamHandler(handler: OutputParamHandler | null) {\n this.fOutputHandler = handler;\n }\n getOutputParamHandler() {\n return this.fOutputHandler;\n }\n callOutputParamHandler(path: string, value: number) {\n if (this.fOutputHandler) {\n this.fOutputHandler(path, value);\n }\n }\n\n setInputParamHandler(handler: InputParamHandler | null) {\n this.fInputHandler = handler;\n }\n getInputParamHandler() {\n return this.fInputHandler;\n }\n callInputParamHandler(path: string, value: number) {\n if (this.fInputHandler) {\n this.fInputHandler(path, value);\n }\n }\n\n setComputeHandler(handler: ComputeHandler | null) {\n this.fComputeHandler = handler;\n }\n getComputeHandler() {\n return this.fComputeHandler;\n }\n\n setPlotHandler(handler: PlotHandler | null) {\n this.fPlotHandler = handler;\n }\n getPlotHandler() {\n return this.fPlotHandler;\n }\n\n getNumInputs() {\n return -1;\n }\n getNumOutputs() {\n return -1;\n }\n\n midiMessage(data: number[] | Uint8Array) {\n if (this.fPlotHandler) this.fCachedEvents.push({ data, type: 'midi' });\n const cmd = data[0] >> 4;\n const channel = data[0] & 0xf;\n const data1 = data[1];\n const data2 = data[2];\n if (cmd === 11) return this.ctrlChange(channel, data1, data2);\n if (cmd === 14) return this.pitchWheel(channel, data2 * 128.0 + data1);\n if (cmd === 9) {\n if (data2 > 0) return this.keyOn(channel, data1, data2);\n else return this.keyOff(channel, data1, data2);\n }\n if (cmd === 8) {\n return this.keyOff(channel, data1, data2);\n }\n }\n\n ctrlChange(channel: number, ctrl: number, value: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'ctrlChange',\n data: [channel, ctrl, value]\n });\n if (this.fCtrlLabel[ctrl].length) {\n this.fCtrlLabel[ctrl].forEach((ctrl) => {\n const { path, chan } = ctrl;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(\n path,\n FaustBaseWebAudioDsp.remap(\n value,\n 0,\n 127,\n ctrl.min,\n ctrl.max\n )\n );\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n }\n }\n\n keyOn(channel: number, pitch: number, velocity: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'keyOn',\n data: [channel, pitch, velocity]\n });\n this.fMidiKeyOnLabel[pitch].forEach((key) => {\n const { path, chan } = key;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(\n path,\n FaustBaseWebAudioDsp.remap(\n velocity,\n 0,\n 127,\n key.min,\n key.max\n )\n );\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n this.fMidiKeyLabel[pitch].forEach((key) => {\n const { path, chan } = key;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(\n path,\n FaustBaseWebAudioDsp.remap(\n velocity,\n 0,\n 127,\n key.min,\n key.max\n )\n );\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n }\n\n keyOff(channel: number, pitch: number, velocity: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'keyOff',\n data: [channel, pitch, velocity]\n });\n this.fMidiKeyOffLabel[pitch].forEach((key) => {\n const { path, chan } = key;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(\n path,\n FaustBaseWebAudioDsp.remap(\n velocity,\n 0,\n 127,\n key.min,\n key.max\n )\n );\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n this.fMidiKeyLabel[pitch].forEach((key) => {\n const { path, chan } = key;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(path, 0);\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n }\n\n pitchWheel(channel: number, wheel: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'pitchWheel',\n data: [channel, wheel]\n });\n this.fPitchwheelLabel.forEach((pw) => {\n const { path, chan } = pw;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(\n path,\n FaustBaseWebAudioDsp.remap(wheel, 0, 16383, pw.min, pw.max)\n );\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n }\n\n setParamValue(path: string, value: number) {}\n getParamValue(path: string) {\n return 0;\n }\n\n getParams() {\n return this.fInputsItems;\n }\n getMeta() {\n return this.fJSONDsp;\n }\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n getUI() {\n return this.fJSONDsp.ui;\n }\n getDescriptors() {\n return this.fDescriptor;\n }\n\n hasSoundfiles() {\n return this.fSoundfiles.length > 0;\n }\n\n startSensors(): void {\n this.startSensors();\n }\n\n stopSensors(): void {\n this.stopSensors();\n }\n\n init() {}\n\n instanceInit() {}\n\n instanceClear() {}\n\n instanceConstants() {}\n\n instanceResetUserInterface() {}\n\n start() {\n this.fProcessing = true;\n }\n\n stop() {\n this.fProcessing = false;\n }\n\n destroy() {\n this.fDestroyed = true;\n this.fOutputHandler = null;\n this.fInputHandler = null;\n this.fComputeHandler = null;\n this.fPlotHandler = null;\n }\n}\n\nexport class FaustMonoWebAudioDsp\n extends FaustBaseWebAudioDsp\n implements IFaustMonoWebAudioDsp\n{\n private fInstance: FaustMonoDspInstance;\n private fDSP!: number;\n private fSampleRate: number;\n\n /**\n * Render one slice, for `renderBlock`.\n *\n * A field rather than an inline closure so it is allocated once instead of\n * on every `compute` call.\n */\n private fRenderSlice = (offset: number, count: number) => {\n this.setBufferOffset(offset);\n this.fInstance.api.compute(\n this.fDSP,\n count,\n this.fAudioInputs,\n this.fAudioOutputs\n );\n };\n\n constructor(\n instance: FaustMonoDspInstance,\n sampleRate: number,\n sampleSize: number,\n bufferSize: number,\n soundfiles: LooseFaustDspFactory['soundfiles']\n ) {\n super(sampleSize, bufferSize, soundfiles);\n this.fInstance = instance;\n this.fSampleRate = sampleRate;\n\n console.log(`sampleSize: ${sampleSize} bufferSize: ${bufferSize}`);\n\n // Create JSON object\n this.fJSONDsp = JSON.parse(this.fInstance.json);\n\n // Setup GUI\n FaustBaseWebAudioDsp.parseUI(this.fJSONDsp.ui, this.fUICallback);\n\n // Setup wasm memory\n this.fEndMemory = this.initMemory();\n\n // Init DSP\n this.fInstance.api.init(this.fDSP, sampleRate);\n\n // Init soundfiles memory is needed\n if (this.fSoundfiles.length > 0) {\n // Create memory allocator for soundfiles in wasm memory, starting at the end of DSP memory\n const allocator = new WasmAllocator(\n this.fInstance.memory,\n this.fEndMemory\n );\n\n // Init soundfiles memory\n this.initSoundfileMemory(allocator, this.fDSP);\n }\n }\n\n init() {\n this.fInstance.api.init(this.fDSP, this.fSampleRate);\n }\n\n instanceInit() {\n this.fInstance.api.instanceInit(this.fDSP, this.fSampleRate);\n }\n\n instanceClear() {\n this.fInstance.api.instanceClear(this.fDSP);\n }\n\n instanceConstants() {\n this.fInstance.api.instanceConstants(this.fDSP, this.fSampleRate);\n }\n\n instanceResetUserInterface() {\n this.fInstance.api.instanceResetUserInterface(this.fDSP);\n }\n\n private initMemory(): number {\n // Start of DSP memory: Mono DSP is placed first with index 0\n this.fDSP = 0;\n\n // Audio buffer start at the end of DSP\n const $audio = this.fJSONDsp.size;\n\n // Setup audio pointers offset\n this.fAudioInputs = $audio;\n this.fAudioOutputs =\n this.fAudioInputs + this.getNumInputs() * this.fPtrSize;\n\n // Prepare wasm memory layout\n const $audioInputs =\n this.fAudioOutputs + this.getNumOutputs() * this.fPtrSize;\n const $audioOutputs =\n $audioInputs +\n this.getNumInputs() * this.fBufferSize * this.fSampleSize;\n // Compute memory end in bytes\n const endMemory =\n $audioOutputs +\n this.getNumOutputs() * this.fBufferSize * this.fSampleSize;\n\n // Setup Int32 and Real views of the memory\n const HEAP = this.fInstance.memory.buffer;\n const HEAP32 = new Int32Array(HEAP);\n const HEAPF =\n this.fSampleSize === 4\n ? new Float32Array(HEAP)\n : new Float64Array(HEAP);\n\n if (this.getNumInputs() > 0) {\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n HEAP32[(this.fAudioInputs >> 2) + chan] =\n $audioInputs + this.fBufferSize * this.fSampleSize * chan;\n }\n // Prepare Ins buffer tables\n const dspInChans = HEAP32.subarray(\n this.fAudioInputs >> 2,\n (this.fAudioInputs + this.getNumInputs() * this.fPtrSize) >> 2\n );\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n this.fInChannels[chan] = HEAPF.subarray(\n dspInChans[chan] >> Math.log2(this.fSampleSize),\n (dspInChans[chan] + this.fBufferSize * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n }\n }\n if (this.getNumOutputs() > 0) {\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n HEAP32[(this.fAudioOutputs >> 2) + chan] =\n $audioOutputs + this.fBufferSize * this.fSampleSize * chan;\n }\n // Prepare Out buffer tables\n const dspOutChans = HEAP32.subarray(\n this.fAudioOutputs >> 2,\n (this.fAudioOutputs + this.getNumOutputs() * this.fPtrSize) >> 2\n );\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n this.fOutChannels[chan] = HEAPF.subarray(\n dspOutChans[chan] >> Math.log2(this.fSampleSize),\n (dspOutChans[chan] + this.fBufferSize * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n }\n }\n\n // Record where each channel starts: `setBufferOffset` overwrites the\n // tables between slices, so they stop being a record of that.\n this.fHEAP32 = HEAP32;\n this.fInBase = [];\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n this.fInBase[chan] = HEAP32[(this.fAudioInputs >> 2) + chan];\n }\n this.fOutBase = [];\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n this.fOutBase[chan] = HEAP32[(this.fAudioOutputs >> 2) + chan];\n }\n\n return endMemory;\n }\n\n toString() {\n return `============== Mono Memory layout ==============\n this.fBufferSize: ${this.fBufferSize}\n this.fJSONDsp.size: ${this.fJSONDsp.size}\n this.fAudioInputs: ${this.fAudioInputs}\n this.fAudioOutputs: ${this.fAudioOutputs}\n this.fDSP: ${this.fDSP}`;\n }\n\n // Public API\n compute(\n input:\n | Float32Array[]\n | ((input: Float32Array[] | Float64Array[]) => any),\n output:\n | Float32Array[]\n | ((output: Float32Array[] | Float64Array[]) => any),\n events?: FaustTimedEvent[]\n ) {\n // Check DSP state\n if (this.fDestroyed) return false;\n\n // Check Processing state: the node returns 'true' to stay in the graph, even if not processing\n if (!this.fProcessing) {\n this.applyEvents(events);\n return true;\n }\n\n // Init memory again on first call (since WebAssembly.memory.grow() may have been called)\n if (this.fFirstCall) {\n this.initMemory();\n this.fFirstCall = false;\n }\n\n if (typeof input === 'function') {\n // Call input callback to avoid array copy\n input(this.fInChannels);\n } else {\n // Check inputs\n if (\n this.getNumInputs() > 0 &&\n (!input || !input[0] || input[0].length === 0)\n ) {\n // console.log(\"Process input error\");\n this.applyEvents(events);\n return true;\n }\n\n // Check outputs\n if (\n this.getNumOutputs() > 0 &&\n typeof output !== 'function' &&\n (!output || !output[0] || output[0].length === 0)\n ) {\n // console.log(\"Process output error\");\n this.applyEvents(events);\n return true;\n }\n\n // Copy inputs\n if (input !== undefined) {\n for (\n let chan = 0;\n chan < Math.min(this.getNumInputs(), input.length);\n chan++\n ) {\n const dspInput = this.fInChannels[chan];\n dspInput.set(input[chan]);\n }\n }\n }\n // Possibly call an externally given callback (for instance to synchronize playing a MIDIFile...)\n if (this.fComputeHandler) this.fComputeHandler(this.fBufferSize);\n\n // Compute -- in slices around the events, if there are any\n this.renderBlock(events, this.fRenderSlice);\n\n // Update bargraph\n this.updateOutputs();\n\n let forPlot = this.fOutChannels;\n if (typeof output === 'function') {\n // Call output callback to avoid array copy\n output(this.fOutChannels);\n } else {\n // Copy outputs\n for (\n let chan = 0;\n chan < Math.min(this.getNumOutputs(), output.length);\n chan++\n ) {\n const dspOutput = this.fOutChannels[chan];\n output[chan].set(dspOutput);\n // console.log(\"chan: \" + chan + \" output: \" + dspOutput[0]);\n }\n forPlot = output;\n }\n\n // PlotHandler handling\n if (this.fPlotHandler) {\n this.fPlotHandler(\n forPlot,\n this.fBufferNum++,\n this.fCachedEvents.length ? this.fCachedEvents : undefined\n );\n this.fCachedEvents = [];\n }\n\n return true;\n }\n\n metadata(handler: MetadataHandler) {\n super.metadata(handler);\n }\n\n getNumInputs() {\n return this.fInstance.api.getNumInputs(this.fDSP);\n }\n getNumOutputs() {\n return this.fInstance.api.getNumOutputs(this.fDSP);\n }\n\n setParamValue(path: string, value: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({ type: 'param', data: { path, value } });\n this.fInstance.api.setParamValue(\n this.fDSP,\n this.fPathTable[path],\n value\n );\n this.callInputParamHandler(path, this.getParamValue(path));\n }\n getParamValue(path: string) {\n return this.fInstance.api.getParamValue(\n this.fDSP,\n this.fPathTable[path]\n );\n }\n\n getMeta() {\n return this.fJSONDsp;\n }\n getJSON() {\n return this.fInstance.json;\n }\n getDescriptors() {\n return this.fDescriptor;\n }\n getUI() {\n return this.fJSONDsp.ui;\n }\n}\n\nexport class FaustWebAudioDspVoice {\n // Voice state\n static get kActiveVoice() {\n return 0;\n }\n static get kFreeVoice() {\n return -1;\n }\n static get kReleaseVoice() {\n return -2;\n }\n static get kLegatoVoice() {\n return -3;\n }\n static get kNoVoice() {\n return -4;\n }\n static get VOICE_STOP_LEVEL() {\n return 0.00003162;\n } // -90 db\n\n private fFreqLabel: number[] = [];\n private fGateLabel: number[] = [];\n private fGainLabel: number[] = [];\n private fKeyLabel: number[] = [];\n private fVelLabel: number[] = [];\n private fDSP: number; // Voice DSP location in wasm memory\n private fAPI: IFaustDspInstance; // Voice DSP code\n private fSampleRate: number;\n // Accessed by PolyDSPImp class\n fCurNote = FaustWebAudioDspVoice.kFreeVoice;\n fNextNote = -1;\n fNextVel = -1;\n fDate = 0;\n fLevel = 0;\n\n constructor(\n $dsp: number,\n api: IFaustDspInstance,\n inputItems: string[],\n pathTable: { [address: string]: number },\n sampleRate: number\n ) {\n this.fDSP = $dsp;\n this.fAPI = api;\n this.fSampleRate = sampleRate;\n this.init(sampleRate);\n this.extractPaths(inputItems, pathTable);\n }\n\n static midiToFreq(note: number) {\n return 440.0 * 2 ** ((note - 69) / 12);\n }\n\n static normalizeVelocity(velocity: number) {\n return velocity / 127.0;\n }\n\n init(sampleRate: number) {\n this.fAPI.init(this.fDSP, sampleRate);\n }\n\n instanceInit() {\n this.fAPI.instanceInit(this.fDSP, this.fSampleRate);\n }\n\n instanceClear() {\n this.fAPI.instanceClear(this.fDSP);\n }\n\n instanceConstants() {\n this.fAPI.instanceConstants(this.fDSP, this.fSampleRate);\n }\n\n instanceResetUserInterface() {\n this.fAPI.instanceResetUserInterface(this.fDSP);\n }\n\n private extractPaths(\n inputItems: string[],\n pathTable: { [address: string]: number }\n ) {\n inputItems.forEach((item) => {\n if (item.endsWith('/gate')) {\n this.fGateLabel.push(pathTable[item]);\n } else if (item.endsWith('/freq')) {\n this.fFreqLabel.push(pathTable[item]);\n } else if (item.endsWith('/key')) {\n this.fKeyLabel.push(pathTable[item]);\n } else if (item.endsWith('/gain')) {\n this.fGainLabel.push(pathTable[item]);\n } else if (item.endsWith('/vel') && item.endsWith('/velocity')) {\n this.fVelLabel.push(pathTable[item]);\n }\n });\n }\n\n // Public API\n keyOn(pitch: number, velocity: number, legato: boolean = false) {\n if (legato) {\n this.fNextNote = pitch;\n this.fNextVel = velocity;\n } else {\n this.fFreqLabel.forEach((index) =>\n this.fAPI.setParamValue(\n this.fDSP,\n index,\n FaustWebAudioDspVoice.midiToFreq(pitch)\n )\n );\n this.fGateLabel.forEach((index) =>\n this.fAPI.setParamValue(this.fDSP, index, 1)\n );\n this.fGainLabel.forEach((index) =>\n this.fAPI.setParamValue(\n this.fDSP,\n index,\n FaustWebAudioDspVoice.normalizeVelocity(velocity)\n )\n );\n this.fKeyLabel.forEach((index) =>\n this.fAPI.setParamValue(this.fDSP, index, pitch)\n );\n this.fVelLabel.forEach((index) =>\n this.fAPI.setParamValue(this.fDSP, index, velocity)\n );\n // Keep pitch\n this.fCurNote = pitch;\n }\n }\n\n keyOff(hard: boolean = false) {\n this.fGateLabel.forEach((index) =>\n this.fAPI.setParamValue(this.fDSP, index, 0)\n );\n if (hard) {\n this.fCurNote = FaustWebAudioDspVoice.kFreeVoice;\n } else {\n this.fCurNote = FaustWebAudioDspVoice.kReleaseVoice;\n }\n }\n\n computeLegato(\n bufferSize: number,\n $inputs: number,\n $outputZero: number,\n $outputsHalf: number\n ) {\n // `>> 1` rather than `/ 2` because `bufferSize` need not be even, and\n // wasm counts whole frames. The second half takes the remainder.\n const size = bufferSize >> 1;\n\n // Reset envelops\n this.fGateLabel.forEach((index) =>\n this.fAPI.setParamValue(this.fDSP, index, 0)\n );\n\n // Compute current voice on half buffer\n this.fAPI.compute(this.fDSP, size, $inputs, $outputZero);\n\n // Start next keyOn\n this.keyOn(this.fNextNote, this.fNextVel);\n\n // Compute on second half buffer\n this.fAPI.compute(this.fDSP, bufferSize - size, $inputs, $outputsHalf);\n }\n\n compute(bufferSize: number, $inputs: number, $outputs: number) {\n this.fAPI.compute(this.fDSP, bufferSize, $inputs, $outputs);\n }\n\n setParamValue(index: number, value: number) {\n this.fAPI.setParamValue(this.fDSP, index, value);\n }\n getParamValue(index: number) {\n return this.fAPI.getParamValue(this.fDSP, index);\n }\n}\n\nexport class FaustPolyWebAudioDsp\n extends FaustBaseWebAudioDsp\n implements IFaustPolyWebAudioDsp\n{\n private fInstance: FaustPolyDspInstance;\n private fEffect!: number;\n private fJSONEffect: FaustDspMeta | null;\n private fAudioMixing!: number;\n private fAudioMixingHalf!: number;\n private fMixingBase: number[] = [];\n private fVoiceTable: FaustWebAudioDspVoice[];\n private fSampleRate: number;\n\n /** Voices whose crossfade this block already rendered in full. */\n private fStolen: FaustWebAudioDspVoice[] = [];\n\n /**\n * Render one slice: every live voice into the sum, then the effect.\n *\n * The mixer, the voices and the effect all take a frame count, so a slice\n * is the same work over fewer frames. A field rather than an inline\n * closure so it is allocated once instead of on every `compute` call.\n *\n * Two things `compute` does around this. The sum is cleared once for the\n * block, not per slice, because `renderStolenVoices` has already written\n * across the whole of it. And those stolen voices are skipped here.\n *\n * A voice that becomes `kLegatoVoice` partway through the block is not one\n * of them: it plays out the note it is losing and crossfades at the top of\n * the next block, as it did when a `keyOn` could only arrive between\n * blocks.\n */\n private fRenderSlice = (offset: number, count: number) => {\n this.setBufferOffset(offset);\n this.setMixingOffset(offset, count);\n this.fVoiceTable.forEach((voice) => {\n if (voice.fCurNote === FaustWebAudioDspVoice.kFreeVoice) return;\n if (this.fStolen.length && this.fStolen.indexOf(voice) !== -1)\n return;\n // Compute current note\n voice.compute(count, this.fAudioInputs, this.fAudioMixing);\n // Mix it in result\n const level = this.fInstance.mixerAPI.mixCheckVoice(\n count,\n this.getNumOutputs(),\n this.fAudioMixing,\n this.fAudioOutputs\n );\n // Keep the loudest level from any slice. A few frames landing on\n // a zero crossing read near silence from a voice that is still\n // sounding, so `compute` decides whether a release has finished\n // once the whole block is done.\n if (level > voice.fLevel) voice.fLevel = level;\n });\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.compute(\n this.fEffect,\n count,\n this.fAudioOutputs,\n this.fAudioOutputs\n );\n };\n\n /**\n * Render the stolen voices, each across the whole block.\n *\n * A steal is a crossfade: the voice plays the note it is losing over the\n * first half of the buffer, that half fades out, and the new note plays\n * the second half. The fade has to be half a block -- 64 frames -- rather\n * than half a slice, which late in the block would be a frame or two, or\n * nothing at all. So this runs before the slicing, and `fRenderSlice`\n * skips these voices.\n */\n private renderStolenVoices() {\n const stolen = this.fStolen;\n stolen.length = 0;\n this.fVoiceTable.forEach((voice) => {\n if (voice.fCurNote !== FaustWebAudioDspVoice.kLegatoVoice) return;\n stolen.push(voice);\n // Play from current note and next note\n voice.computeLegato(\n this.fBufferSize,\n this.fAudioInputs,\n this.fAudioMixing,\n this.fAudioMixingHalf\n );\n // FadeOut on first half buffer\n this.fInstance.mixerAPI.fadeOut(\n this.fBufferSize >> 1,\n this.getNumOutputs(),\n this.fAudioMixing\n );\n // Mix it in result\n voice.fLevel = this.fInstance.mixerAPI.mixCheckVoice(\n this.fBufferSize,\n this.getNumOutputs(),\n this.fAudioMixing,\n this.fAudioOutputs\n );\n });\n }\n\n /**\n * Move the mixing tables along with the input and output ones.\n *\n * `fAudioMixing` is where a voice renders before being summed into the\n * output, so it follows the slice. `fAudioMixingHalf` is the crossfade\n * split point, `count >> 1` frames in, matching `computeLegato`. Only\n * `renderStolenVoices` uses it, and always with the whole block.\n */\n private setMixingOffset(offset: number, count: number) {\n const bytes = offset * this.fSampleSize;\n const half = (offset + (count >> 1)) * this.fSampleSize;\n for (let chan = 0; chan < this.fMixingBase.length; chan++) {\n this.fHEAP32[(this.fAudioMixing >> 2) + chan] =\n this.fMixingBase[chan] + bytes;\n this.fHEAP32[(this.fAudioMixingHalf >> 2) + chan] =\n this.fMixingBase[chan] + half;\n }\n }\n\n constructor(\n instance: FaustPolyDspInstance,\n sampleRate: number,\n sampleSize: number,\n bufferSize: number,\n soundfiles: LooseFaustDspFactory['soundfiles']\n ) {\n super(sampleSize, bufferSize, soundfiles);\n this.fInstance = instance;\n this.fSampleRate = sampleRate;\n\n console.log(`sampleSize: ${sampleSize} bufferSize: ${bufferSize}`);\n\n // Create JSON for voice\n this.fJSONDsp = JSON.parse(this.fInstance.voiceJSON);\n\n // Create JSON for effect\n this.fJSONEffect =\n this.fInstance.effectAPI && this.fInstance.effectJSON\n ? JSON.parse(this.fInstance.effectJSON)\n : null;\n\n // Setup GUI\n FaustBaseWebAudioDsp.parseUI(this.fJSONDsp.ui, this.fUICallback);\n if (this.fJSONEffect)\n FaustBaseWebAudioDsp.parseUI(this.fJSONEffect.ui, this.fUICallback);\n\n // Setup wasm memory\n this.fEndMemory = this.initMemory();\n\n // Init DSP voices\n this.fVoiceTable = [];\n for (let voice = 0; voice < this.fInstance.voices; voice++) {\n this.fVoiceTable.push(\n new FaustWebAudioDspVoice(\n this.fJSONDsp.size * voice,\n this.fInstance.voiceAPI,\n this.fInputsItems,\n this.fPathTable,\n sampleRate\n )\n );\n }\n\n // Init effect\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.init(this.fEffect, sampleRate);\n\n // Init soundfiles memory is needed\n if (this.fSoundfiles.length > 0) {\n // Create memory allocator for soundfiles in wasm memory, starting at the end of DSP memory\n const allocator = new WasmAllocator(\n this.fInstance.memory,\n this.fEndMemory\n );\n // Init soundfiles memory for all voices\n for (let voice = 0; voice < this.fInstance.voices; voice++) {\n this.initSoundfileMemory(allocator, this.fJSONDsp.size * voice);\n }\n }\n }\n\n init() {\n this.fVoiceTable.forEach((voice) => voice.init(this.fSampleRate));\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.init(this.fEffect, this.fSampleRate);\n }\n\n instanceInit() {\n this.fVoiceTable.forEach((voice) => voice.instanceInit());\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.instanceInit(\n this.fEffect,\n this.fSampleRate\n );\n }\n\n instanceClear() {\n this.fVoiceTable.forEach((voice) => voice.instanceClear());\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.instanceClear(this.fEffect);\n }\n\n instanceConstants() {\n this.fVoiceTable.forEach((voice) => voice.instanceConstants());\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.instanceConstants(\n this.fEffect,\n this.fSampleRate\n );\n }\n\n instanceResetUserInterface() {\n this.fVoiceTable.forEach((voice) => voice.instanceResetUserInterface());\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.instanceResetUserInterface(this.fEffect);\n }\n\n private initMemory() {\n // Effet start at the end of all DSP voices\n this.fEffect = this.fJSONDsp.size * this.fInstance.voices;\n\n // Audio buffer start at the end of effect\n const $audio =\n this.fEffect + (this.fJSONEffect ? this.fJSONEffect.size : 0);\n\n // Setup audio pointers offset\n this.fAudioInputs = $audio;\n this.fAudioOutputs =\n this.fAudioInputs + this.getNumInputs() * this.fPtrSize;\n this.fAudioMixing =\n this.fAudioOutputs + this.getNumOutputs() * this.fPtrSize;\n this.fAudioMixingHalf =\n this.fAudioMixing + this.getNumOutputs() * this.fPtrSize;\n\n // Prepare wasm memory layout\n const $audioInputs =\n this.fAudioMixingHalf + this.getNumOutputs() * this.fPtrSize;\n const $audioOutputs =\n $audioInputs +\n this.getNumInputs() * this.fBufferSize * this.fSampleSize;\n const $audioMixing =\n $audioOutputs +\n this.getNumOutputs() * this.fBufferSize * this.fSampleSize;\n\n // Compute memory end in bytes\n const endMemory =\n $audioMixing +\n this.getNumOutputs() * this.fBufferSize * this.fSampleSize;\n\n // Setup Int32 and Real views of the memory\n const HEAP = this.fInstance.memory.buffer;\n const HEAP32 = new Int32Array(HEAP);\n const HEAPF =\n this.fSampleSize === 4\n ? new Float32Array(HEAP)\n : new Float64Array(HEAP);\n\n if (this.getNumInputs() > 0) {\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n HEAP32[(this.fAudioInputs >> 2) + chan] =\n $audioInputs + this.fBufferSize * this.fSampleSize * chan;\n }\n // Prepare Ins buffer tables\n const dspInChans = HEAP32.subarray(\n this.fAudioInputs >> 2,\n (this.fAudioInputs + this.getNumInputs() * this.fPtrSize) >> 2\n );\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n this.fInChannels[chan] = HEAPF.subarray(\n dspInChans[chan] >> Math.log2(this.fSampleSize),\n (dspInChans[chan] + this.fBufferSize * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n }\n }\n if (this.getNumOutputs() > 0) {\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n HEAP32[(this.fAudioOutputs >> 2) + chan] =\n $audioOutputs + this.fBufferSize * this.fSampleSize * chan;\n HEAP32[(this.fAudioMixing >> 2) + chan] =\n $audioMixing + this.fBufferSize * this.fSampleSize * chan;\n HEAP32[(this.fAudioMixingHalf >> 2) + chan] =\n $audioMixing +\n this.fBufferSize * this.fSampleSize * chan +\n (this.fBufferSize / 2) * this.fSampleSize;\n }\n // Prepare Out buffer tables\n const dspOutChans = HEAP32.subarray(\n this.fAudioOutputs >> 2,\n (this.fAudioOutputs + this.getNumOutputs() * this.fPtrSize) >> 2\n );\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n this.fOutChannels[chan] = HEAPF.subarray(\n dspOutChans[chan] >> Math.log2(this.fSampleSize),\n (dspOutChans[chan] + this.fBufferSize * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n }\n }\n\n // Record where each channel starts: `setBufferOffset` overwrites the\n // tables between slices, so they stop being a record of that.\n this.fHEAP32 = HEAP32;\n this.fInBase = [];\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n this.fInBase[chan] = HEAP32[(this.fAudioInputs >> 2) + chan];\n }\n this.fOutBase = [];\n this.fMixingBase = [];\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n this.fOutBase[chan] = HEAP32[(this.fAudioOutputs >> 2) + chan];\n this.fMixingBase[chan] = HEAP32[(this.fAudioMixing >> 2) + chan];\n }\n\n return endMemory;\n }\n\n toString() {\n return `============== Poly Memory layout ==============\n this.fBufferSize: ${this.fBufferSize}\n this.fJSONDsp.size: ${this.fJSONDsp.size}\n this.fAudioInputs: ${this.fAudioInputs}\n this.fAudioOutputs: ${this.fAudioOutputs}\n this.fAudioMixing: ${this.fAudioMixing}\n this.fAudioMixingHalf: ${this.fAudioMixingHalf}`;\n }\n\n /**\n * When each voice was last allocated, as one global monotonic date.\n *\n * Incrementing the voice's own `fDate` instead, as this used to, made the\n * date a per-slot reuse counter: notes played and released before a chord\n * kept reusing slot 0 and inflating only its date, and when the chord\n * then overflowed the pool, the allocator considered a younger note\n * \"oldest\" and stole the wrong voice.\n */\n private fDate = 0;\n\n private allocVoice(voice: number, type: number) {\n this.fVoiceTable[voice].fDate = this.fDate++;\n this.fVoiceTable[voice].fCurNote = type;\n return voice;\n }\n\n private getPlayingVoice(pitch: number) {\n let voicePlaying = FaustWebAudioDspVoice.kNoVoice;\n let oldestDatePlaying = Number.MAX_VALUE;\n\n for (let i = 0; i < this.fInstance.voices; i++) {\n const curNote = this.fVoiceTable[i].fCurNote;\n const nextNote = this.fVoiceTable[i].fNextNote;\n\n if (\n curNote === pitch ||\n (curNote === FaustWebAudioDspVoice.kLegatoVoice &&\n nextNote === pitch)\n ) {\n // Keeps oldest playing voice\n if (this.fVoiceTable[i].fDate < oldestDatePlaying) {\n oldestDatePlaying = this.fVoiceTable[i].fDate;\n voicePlaying = i;\n }\n }\n }\n return voicePlaying;\n }\n\n private getFreeVoice() {\n for (let voice = 0; voice < this.fInstance.voices; voice++) {\n if (\n this.fVoiceTable[voice].fCurNote ===\n FaustWebAudioDspVoice.kFreeVoice\n ) {\n return this.allocVoice(\n voice,\n FaustWebAudioDspVoice.kActiveVoice\n );\n }\n }\n\n let voiceRelease = FaustWebAudioDspVoice.kNoVoice;\n let voicePlaying = FaustWebAudioDspVoice.kNoVoice;\n let oldestDateRelease = Number.MAX_VALUE;\n let oldestDatePlaying = Number.MAX_VALUE;\n\n for (let voice = 0; voice < this.fInstance.voices; voice++) {\n // Scan all voices\n // Try to steal a voice in DspVoice.kReleaseVoice mode...\n if (\n this.fVoiceTable[voice].fCurNote ===\n FaustWebAudioDspVoice.kReleaseVoice\n ) {\n // Keeps oldest release voice\n if (this.fVoiceTable[voice].fDate < oldestDateRelease) {\n oldestDateRelease = this.fVoiceTable[voice].fDate;\n voiceRelease = voice;\n }\n } else if (this.fVoiceTable[voice].fDate < oldestDatePlaying) {\n oldestDatePlaying = this.fVoiceTable[voice].fDate;\n voicePlaying = voice;\n }\n }\n // Then decide which one to steal\n if (oldestDateRelease !== Number.MAX_VALUE) {\n console.log(\n `Steal release voice : voice_date = ${this.fVoiceTable[voiceRelease].fDate} voice = ${voiceRelease}`\n );\n return this.allocVoice(\n voiceRelease,\n FaustWebAudioDspVoice.kLegatoVoice\n );\n }\n if (oldestDatePlaying !== Number.MAX_VALUE) {\n console.log(\n `Steal playing voice : voice_date = ${this.fVoiceTable[voicePlaying].fDate} voice = ${voicePlaying}`\n );\n return this.allocVoice(\n voicePlaying,\n FaustWebAudioDspVoice.kLegatoVoice\n );\n }\n return FaustWebAudioDspVoice.kNoVoice;\n }\n\n // Public API\n compute(\n input: Float32Array[],\n output: Float32Array[],\n events?: FaustTimedEvent[]\n ) {\n // Check DSP state\n if (this.fDestroyed) return false;\n\n // Init memory again on first call (since WebAssembly.memory.grow() may have been called)\n if (this.fFirstCall) {\n this.initMemory();\n this.fFirstCall = false;\n }\n\n // Check Processing state: the node returns 'true' to stay in the graph, even if not processing\n if (!this.fProcessing) {\n this.applyEvents(events);\n return true;\n }\n\n // Check inputs\n if (\n this.getNumInputs() > 0 &&\n (!input || !input[0] || input[0].length === 0)\n ) {\n // console.log(\"Process input error\");\n this.applyEvents(events);\n return true;\n }\n\n // Check outputs\n if (\n this.getNumOutputs() > 0 &&\n (!output || !output[0] || output[0].length === 0)\n ) {\n // console.log(\"Process output error\");\n this.applyEvents(events);\n return true;\n }\n\n // Copy inputs\n if (input !== undefined) {\n for (\n let chan = 0;\n chan < Math.min(this.getNumInputs(), input.length);\n ++chan\n ) {\n const dspInput = this.fInChannels[chan];\n dspInput.set(input[chan]);\n }\n }\n\n // Possibly call an externally given callback (for instance to synchronize playing a MIDIFile...)\n if (this.fComputeHandler) this.fComputeHandler(this.fBufferSize);\n\n // Clear the sum once for the block, not per slice: the stolen voices\n // below write across the whole of it, and a slice clearing its own\n // range afterwards would erase part of that.\n this.setBufferOffset(0);\n this.setMixingOffset(0, this.fBufferSize);\n this.fInstance.mixerAPI.clearOutput(\n this.fBufferSize,\n this.getNumOutputs(),\n this.fAudioOutputs\n );\n this.fVoiceTable.forEach((voice) => (voice.fLevel = 0));\n this.renderStolenVoices();\n\n // Compute -- in slices around the events, if there are any\n this.renderBlock(events, this.fRenderSlice);\n\n // A releasing voice that stayed below the threshold for every slice\n // has died away, and its slot is free again.\n this.fVoiceTable.forEach((voice) => {\n if (\n voice.fCurNote === FaustWebAudioDspVoice.kReleaseVoice &&\n voice.fLevel < FaustWebAudioDspVoice.VOICE_STOP_LEVEL\n ) {\n voice.fCurNote = FaustWebAudioDspVoice.kFreeVoice;\n }\n });\n\n // Update bargraph\n this.updateOutputs();\n\n if (output !== undefined) {\n // Copy outputs\n for (\n let chan = 0;\n chan < Math.min(this.getNumOutputs(), output.length);\n chan++\n ) {\n const dspOutput = this.fOutChannels[chan];\n output[chan].set(dspOutput);\n }\n\n // PlotHandler handling\n if (this.fPlotHandler) {\n this.fPlotHandler(\n output,\n this.fBufferNum++,\n this.fCachedEvents.length ? this.fCachedEvents : undefined\n );\n this.fCachedEvents = [];\n }\n }\n\n return true;\n }\n\n getNumInputs() {\n return this.fInstance.voiceAPI.getNumInputs(0);\n }\n getNumOutputs() {\n return this.fInstance.voiceAPI.getNumOutputs(0);\n }\n\n private static findPath(o: any, p: string) {\n if (typeof o !== 'object') {\n return false;\n } else if (o.address) {\n return o.address === p;\n } else {\n for (const k in o) {\n if (FaustPolyWebAudioDsp.findPath(o[k], p)) return true;\n }\n return false;\n }\n }\n\n setParamValue(path: string, value: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({ type: 'param', data: { path, value } });\n if (\n this.fJSONEffect &&\n FaustPolyWebAudioDsp.findPath(this.fJSONEffect.ui, path) &&\n this.fInstance.effectAPI\n ) {\n this.fInstance.effectAPI.setParamValue(\n this.fEffect,\n this.fPathTable[path],\n value\n );\n } else {\n this.fVoiceTable.forEach((voice) =>\n voice.setParamValue(this.fPathTable[path], value)\n );\n }\n this.callInputParamHandler(path, this.getParamValue(path));\n }\n getParamValue(path: string) {\n if (\n this.fJSONEffect &&\n FaustPolyWebAudioDsp.findPath(this.fJSONEffect.ui, path) &&\n this.fInstance.effectAPI\n ) {\n return this.fInstance.effectAPI.getParamValue(\n this.fEffect,\n this.fPathTable[path]\n );\n } else {\n return this.fVoiceTable[0].getParamValue(this.fPathTable[path]);\n }\n }\n\n getMeta() {\n const o = this.fJSONDsp;\n const e = this.fJSONEffect;\n const r = { ...o };\n if (e) {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Sequencer',\n items: [\n { type: 'vgroup', label: 'Instrument', items: o.ui },\n { type: 'vgroup', label: 'Effect', items: e.ui }\n ]\n }\n ];\n } else {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Polyphonic',\n items: [{ type: 'vgroup', label: 'Voices', items: o.ui }]\n }\n ];\n }\n return r as FaustDspMeta;\n }\n\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n\n getUI() {\n return this.getMeta().ui;\n }\n\n getDescriptors() {\n return this.fDescriptor;\n }\n\n midiMessage(data: number[] | Uint8Array) {\n const cmd = data[0] >> 4;\n const channel = data[0] & 0xf;\n const data1 = data[1];\n const data2 = data[2];\n if (cmd === 8 || (cmd === 9 && data2 === 0))\n return this.keyOff(channel, data1, data2);\n else if (cmd === 9) return this.keyOn(channel, data1, data2);\n else super.midiMessage(data);\n }\n\n ctrlChange(channel: number, ctrl: number, value: number) {\n if (ctrl === 123 || ctrl === 120) {\n this.allNotesOff(true);\n } else {\n super.ctrlChange(channel, ctrl, value);\n }\n }\n\n keyOn(channel: number, pitch: number, velocity: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'keyOn',\n data: [channel, pitch, velocity]\n });\n const voice = this.getFreeVoice();\n this.fVoiceTable[voice].keyOn(\n pitch,\n velocity,\n this.fVoiceTable[voice].fCurNote ==\n FaustWebAudioDspVoice.kLegatoVoice\n );\n }\n\n keyOff(channel: number, pitch: number, velocity: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'keyOff',\n data: [channel, pitch, velocity]\n });\n const voice = this.getPlayingVoice(pitch);\n if (voice !== FaustWebAudioDspVoice.kNoVoice) {\n this.fVoiceTable[voice].keyOff();\n } else {\n console.log('Playing pitch = %d not found\\n', pitch);\n }\n }\n\n allNotesOff(hard: boolean = true) {\n this.fCachedEvents.push({ type: 'ctrlChange', data: [0, 123, 0] });\n this.fVoiceTable.forEach((voice) => voice.keyOff(hard));\n }\n}\n", "import {\n ComputeHandler,\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n FaustPolyWebAudioDsp,\n IFaustBaseWebAudioDsp,\n IFaustMonoWebAudioDsp,\n IFaustPolyWebAudioDsp,\n InputParamHandler,\n MetadataHandler,\n OutputParamHandler,\n PlotHandler\n} from './FaustWebAudioDsp';\nimport { AudioParamDescriptor, FaustUIItem } from './types';\n\n/**\n * For offline rendering.\n */\nexport interface IFaustOfflineProcessor extends IFaustBaseWebAudioDsp {\n render(\n inputs?: Float32Array[],\n length?: number,\n onUpdate?: (sample: number) => any\n ): Float32Array[];\n}\n\nexport interface IFaustMonoOfflineProcessor\n extends IFaustOfflineProcessor, IFaustMonoWebAudioDsp {}\nexport interface IFaustPolyOfflineProcessor\n extends IFaustOfflineProcessor, IFaustPolyWebAudioDsp {}\n\nexport class FaustOfflineProcessor<Poly extends boolean = false> {\n protected fDSPCode!: Poly extends true\n ? FaustPolyWebAudioDsp\n : FaustMonoWebAudioDsp;\n\n protected fBufferSize: number;\n protected fInputs: Float32Array[];\n protected fOutputs: Float32Array[];\n\n constructor(\n instance: Poly extends true\n ? FaustPolyWebAudioDsp\n : FaustMonoWebAudioDsp,\n bufferSize: number\n ) {\n this.fDSPCode = instance;\n this.fBufferSize = bufferSize;\n this.fInputs = new Array(this.fDSPCode.getNumInputs())\n .fill(null)\n .map(() => new Float32Array(bufferSize));\n this.fOutputs = new Array(this.fDSPCode.getNumOutputs())\n .fill(null)\n .map(() => new Float32Array(bufferSize));\n }\n\n // Public API\n\n getParameterDescriptors() {\n const params = [] as AudioParamDescriptor[];\n // Analyse voice JSON to generate AudioParam parameters\n const callback = (item: FaustUIItem) => {\n let param: AudioParamDescriptor | null = null;\n const polyKeywords = [\n '/gate',\n '/freq',\n '/gain',\n '/key',\n '/vel',\n '/velocity'\n ];\n const isPolyReserved =\n 'address' in item &&\n !!polyKeywords.find((k) => item.address.endsWith(k));\n if (\n this.fDSPCode instanceof FaustMonoWebAudioDsp ||\n !isPolyReserved\n ) {\n if (\n item.type === 'vslider' ||\n item.type === 'hslider' ||\n item.type === 'nentry'\n ) {\n param = {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: item.min || 0,\n maxValue: item.max || 0\n };\n } else if (item.type === 'button' || item.type === 'checkbox') {\n param = {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: 0,\n maxValue: 1\n };\n }\n }\n if (param) params.push(param);\n };\n FaustBaseWebAudioDsp.parseUI(this.fDSPCode.getUI(), callback);\n return params;\n }\n compute(input: Float32Array[], output: Float32Array[]) {\n return this.fDSPCode.compute(input, output);\n }\n\n setOutputParamHandler(handler: OutputParamHandler) {\n this.fDSPCode.setOutputParamHandler(handler);\n }\n getOutputParamHandler() {\n return this.fDSPCode.getOutputParamHandler();\n }\n callOutputParamHandler(path: string, value: number) {\n this.fDSPCode.callOutputParamHandler(path, value);\n }\n\n setInputParamHandler(handler: InputParamHandler) {\n this.fDSPCode.setInputParamHandler(handler);\n }\n getInputParamHandler() {\n return this.fDSPCode.getInputParamHandler();\n }\n callInputParamHandler(path: string, value: number) {\n this.fDSPCode.callInputParamHandler(path, value);\n }\n\n setComputeHandler(handler: ComputeHandler) {\n this.fDSPCode.setComputeHandler(handler);\n }\n getComputeHandler() {\n return this.fDSPCode.getComputeHandler();\n }\n\n setPlotHandler(handler: PlotHandler) {\n this.fDSPCode.setPlotHandler(handler);\n }\n getPlotHandler() {\n return this.fDSPCode.getPlotHandler();\n }\n\n getNumInputs() {\n return this.fDSPCode.getNumInputs();\n }\n getNumOutputs() {\n return this.fDSPCode.getNumOutputs();\n }\n\n metadata(handler: MetadataHandler) {}\n\n midiMessage(data: number[] | Uint8Array) {\n this.fDSPCode.midiMessage(data);\n }\n\n ctrlChange(chan: number, ctrl: number, value: number) {\n this.fDSPCode.ctrlChange(chan, ctrl, value);\n }\n pitchWheel(chan: number, value: number) {\n this.fDSPCode.pitchWheel(chan, value);\n }\n keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n\n setParamValue(path: string, value: number) {\n this.fDSPCode.setParamValue(path, value);\n }\n getParamValue(path: string) {\n return this.fDSPCode.getParamValue(path);\n }\n getParams() {\n return this.fDSPCode.getParams();\n }\n\n getMeta() {\n return this.fDSPCode.getMeta();\n }\n getJSON() {\n return this.fDSPCode.getJSON();\n }\n getDescriptors() {\n return this.fDSPCode.getDescriptors();\n }\n getUI() {\n return this.fDSPCode.getUI();\n }\n\n init() {\n this.fDSPCode.init();\n }\n\n instanceInit() {\n this.fDSPCode.instanceInit();\n }\n\n instanceClear() {\n this.fDSPCode.instanceClear();\n }\n\n instanceConstants() {\n this.fDSPCode.instanceConstants();\n }\n\n instanceResetUserInterface() {\n this.fDSPCode.instanceResetUserInterface();\n }\n\n start() {\n this.fDSPCode.start();\n }\n stop() {\n this.fDSPCode.stop();\n }\n\n destroy() {\n this.fDSPCode.destroy();\n }\n\n get hasAccInput() {\n return this.fDSPCode.hasAccInput;\n }\n\n propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n this.fDSPCode.propagateAcc(accelerationIncludingGravity, invert);\n }\n\n get hasGyrInput() {\n return this.fDSPCode.hasGyrInput;\n }\n\n propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n this.fDSPCode.propagateGyr(event);\n }\n\n startSensors(): void {}\n\n stopSensors(): void {}\n\n /**\n * Render frames in an array.\n *\n * @param inputs - input signal\n * @param length - the number of frames to render (default: bufferSize)\n * @param onUpdate - a callback after each buffer calculated, with an argument \"current sample\"\n * @return an array of Float32Array with the rendered frames\n */\n render(\n inputs: Float32Array[] = [],\n length = this.fBufferSize,\n onUpdate?: (sample: number) => any\n ): Float32Array[] {\n let l = 0;\n const outputs = new Array(this.fDSPCode.getNumOutputs())\n .fill(null)\n .map(() => new Float32Array(length));\n // The node has to be started before rendering\n this.fDSPCode.start();\n while (l < length) {\n const sliceLength = Math.min(length - l, this.fBufferSize);\n for (let i = 0; i < this.fDSPCode.getNumInputs(); i++) {\n let input: Float32Array;\n if (inputs[i]) {\n if (inputs[i].length <= l) {\n input = new Float32Array(sliceLength);\n } else if (inputs[i].length > l + sliceLength) {\n input = inputs[i].subarray(l, l + sliceLength);\n } else {\n input = inputs[i].subarray(l, inputs[i].length);\n }\n } else {\n input = new Float32Array(sliceLength);\n }\n this.fInputs[i] = input;\n }\n this.fDSPCode.compute(this.fInputs, this.fOutputs);\n for (let i = 0; i < this.fDSPCode.getNumOutputs(); i++) {\n const output = this.fOutputs[i];\n if (sliceLength < this.fBufferSize) {\n outputs[i].set(output.subarray(0, sliceLength), l);\n } else {\n outputs[i].set(output, l);\n }\n }\n l += sliceLength;\n onUpdate?.(l);\n }\n // The node can be stopped after rendering\n this.fDSPCode.stop();\n return outputs;\n }\n}\n\nexport class FaustMonoOfflineProcessor\n extends FaustOfflineProcessor<false>\n implements IFaustMonoWebAudioDsp {}\n\nexport class FaustPolyOfflineProcessor\n extends FaustOfflineProcessor<true>\n implements IFaustPolyWebAudioDsp\n{\n keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n allNotesOff(hard: boolean) {\n this.fDSPCode.allNotesOff(hard);\n }\n}\n\nexport default FaustOfflineProcessor;\n", "import type FaustCompiler from './FaustCompiler';\n\ninterface IFaustSvgDiagrams {\n /**\n * Generates auxiliary files from Faust code. The output depends on the compiler options.\n *\n * @param name - the DSP's name\n * @param code - Faust code\n * @param args - compilation args\n * @returns the svg diagrams as a filename - svg string map\n */\n from(name: string, code: string, args: string): Record<string, string>;\n}\n\nclass FaustSvgDiagrams implements IFaustSvgDiagrams {\n private compiler: FaustCompiler;\n\n constructor(compiler: FaustCompiler) {\n this.compiler = compiler;\n }\n\n from(name: string, code: string, args: string) {\n const fs = this.compiler.fs();\n try {\n const files: string[] = fs.readdir(`/${name}-svg/`);\n files\n .filter((file) => file !== '.' && file !== '..')\n .forEach((file) => fs.unlink(`/${name}-svg/${file}`));\n } catch {}\n const success = this.compiler.generateAuxFiles(\n name,\n code,\n `-lang wasm -o binary -svg ${args}`\n );\n if (!success) throw new Error(this.compiler.getErrorMessage());\n const svgs: Record<string, string> = {};\n const files: string[] = fs.readdir(`/${name}-svg/`);\n files\n .filter((file) => file !== '.' && file !== '..')\n .forEach(\n (file) =>\n (svgs[file] = fs.readFile(`/${name}-svg/${file}`, {\n encoding: 'utf8'\n }) as string)\n );\n return svgs;\n }\n}\n\nexport default FaustSvgDiagrams;\n", "import type FaustCompiler from './FaustCompiler';\n\ninterface IFaustCmajor {\n /**\n * Generates auxiliary files from Faust code. The output depends on the compiler options.\n *\n * @param name - the DSP's name\n * @param code - Faust code\n * @param args - compilation args\n * @returns the Cmajor compiled string\n */\n compile(name: string, code: string, args: string): string;\n}\n\nclass FaustCmajor implements IFaustCmajor {\n private fCompiler: FaustCompiler;\n\n constructor(compiler: FaustCompiler) {\n this.fCompiler = compiler;\n }\n\n compile(name: string, code: string, args: string) {\n const fs = this.fCompiler.fs();\n const success = this.fCompiler.generateAuxFiles(\n name,\n code,\n `-lang cmajor-hybrid -cn ${name} -o ${name}.cmajor`\n );\n return success\n ? (fs.readFile(`${name}.cmajor`, { encoding: 'utf8' }) as string)\n : '';\n }\n}\n\nexport default FaustCmajor;\n", "import type { FaustModule, LibFaustWasm, FaustInfoType } from './types';\n\nexport interface ILibFaust extends LibFaustWasm {\n module(): FaustModule;\n fs(): typeof FS;\n}\n\nclass LibFaust implements ILibFaust {\n private fModule: FaustModule;\n private fCompiler: LibFaustWasm;\n private fFileSystem: typeof FS;\n\n constructor(module: FaustModule) {\n this.fModule = module;\n this.fCompiler = new module.libFaustWasm();\n this.fFileSystem = this.fModule.FS;\n }\n module() {\n return this.fModule;\n }\n fs() {\n return this.fFileSystem;\n }\n version() {\n return this.fCompiler.version();\n }\n createDSPFactory(\n name: string,\n code: string,\n args: string,\n useInternalMemory: boolean\n ) {\n return this.fCompiler.createDSPFactory(\n name,\n code,\n args,\n useInternalMemory\n );\n }\n deleteDSPFactory(cFactory: number) {\n return this.fCompiler.deleteDSPFactory(cFactory);\n }\n expandDSP(name: string, code: string, args: string) {\n return this.fCompiler.expandDSP(name, code, args);\n }\n generateAuxFiles(name: string, code: string, args: string) {\n return this.fCompiler.generateAuxFiles(name, code, args);\n }\n deleteAllDSPFactories() {\n return this.fCompiler.deleteAllDSPFactories();\n }\n getErrorAfterException() {\n return this.fCompiler.getErrorAfterException();\n }\n cleanupAfterException() {\n return this.fCompiler.cleanupAfterException();\n }\n getInfos(what: FaustInfoType) {\n return this.fCompiler.getInfos(what);\n }\n toString() {\n return `LibFaust module: ${this.fModule}, compiler: ${this.fCompiler}`;\n }\n}\n\nexport default LibFaust;\n", "export interface WavEncoderOptions {\n bitDepth: number;\n float?: boolean;\n symmetric?: boolean;\n shared?: boolean;\n sampleRate: number;\n}\ninterface Format {\n formatId: number;\n float: boolean;\n symmetric: boolean;\n numberOfChannels: number;\n sampleRate: number;\n length: number;\n bitDepth: number;\n byteDepth: number;\n}\n\n/**\n * Code from https://github.com/mohayonao/wav-encoder\n */\nclass WavEncoder {\n static encode(audioBuffer: Float32Array[], options: WavEncoderOptions) {\n const numberOfChannels = audioBuffer.length;\n const length = audioBuffer[0].length;\n const { shared, float } = options;\n const bitDepth = float ? 32 : options.bitDepth | 0 || 16;\n const byteDepth = bitDepth >> 3;\n const byteLength = length * numberOfChannels * byteDepth;\n const AB = shared\n ? globalThis.SharedArrayBuffer || globalThis.ArrayBuffer\n : globalThis.ArrayBuffer;\n const ab = new AB((44 + byteLength) * Uint8Array.BYTES_PER_ELEMENT);\n const dataView = new DataView(ab);\n const writer = new Writer(dataView);\n const format: Format = {\n formatId: float ? 0x0003 : 0x0001,\n float: !!float,\n numberOfChannels,\n sampleRate: options.sampleRate,\n symmetric: !!options.symmetric,\n length,\n bitDepth,\n byteDepth\n };\n this.writeHeader(writer, format);\n this.writeData(writer, audioBuffer, format);\n return ab;\n }\n private static writeHeader(writer: Writer, format: Format) {\n const {\n formatId,\n sampleRate,\n bitDepth,\n numberOfChannels,\n length,\n byteDepth\n } = format;\n writer.string('RIFF');\n writer.uint32(writer.dataView.byteLength - 8);\n writer.string('WAVE');\n writer.string('fmt ');\n writer.uint32(16);\n writer.uint16(formatId);\n writer.uint16(numberOfChannels);\n writer.uint32(sampleRate);\n writer.uint32(sampleRate * numberOfChannels * byteDepth);\n writer.uint16(numberOfChannels * byteDepth);\n writer.uint16(bitDepth);\n writer.string('data');\n writer.uint32(length * numberOfChannels * byteDepth);\n return writer.pos;\n }\n private static writeData(\n writer: Writer,\n audioBuffer: Float32Array[],\n format: Format\n ) {\n const { bitDepth, float, length, numberOfChannels, symmetric } = format;\n if (bitDepth === 32 && float) {\n const { dataView, pos } = writer;\n const ab = dataView.buffer;\n const f32View = new Float32Array(ab, pos);\n if (numberOfChannels === 1) {\n f32View.set(audioBuffer[0]);\n return;\n }\n for (let ch = 0; ch < numberOfChannels; ch++) {\n const channel = audioBuffer[ch];\n for (let i = 0; i < length; i++) {\n f32View[i * numberOfChannels + ch] = channel[i];\n }\n }\n return;\n }\n const encoderOption = float ? 'f' : symmetric ? 's' : '';\n const methodName = 'pcm' + bitDepth + encoderOption;\n\n if (!(writer as any)[methodName]) {\n throw new TypeError('Not supported bit depth: ' + bitDepth);\n }\n\n const write: (value: number) => void = (writer as any)[methodName].bind(\n writer\n );\n\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < numberOfChannels; j++) {\n write(audioBuffer[j][i]);\n }\n }\n }\n}\n\nclass Writer {\n pos = 0;\n dataView: DataView;\n constructor(dataView: DataView) {\n this.dataView = dataView;\n }\n int16(value: number) {\n this.dataView.setInt16(this.pos, value, true);\n this.pos += 2;\n }\n uint16(value: number) {\n this.dataView.setUint16(this.pos, value, true);\n this.pos += 2;\n }\n uint32(value: number) {\n this.dataView.setUint32(this.pos, value, true);\n this.pos += 4;\n }\n string(value: string) {\n for (let i = 0, imax = value.length; i < imax; i++) {\n this.dataView.setUint8(this.pos++, value.charCodeAt(i));\n }\n }\n pcm8(valueIn: number) {\n let value = valueIn;\n value = Math.max(-1, Math.min(value, +1));\n value = (value * 0.5 + 0.5) * 255;\n value = Math.round(value) | 0;\n this.dataView.setUint8(this.pos, value /* , true*/);\n this.pos += 1;\n }\n pcm8s(valueIn: number) {\n let value = valueIn;\n value = Math.round(value * 128) + 128;\n value = Math.max(0, Math.min(value, 255));\n this.dataView.setUint8(this.pos, value /* , true*/);\n this.pos += 1;\n }\n pcm16(valueIn: number) {\n let value = valueIn;\n value = Math.max(-1, Math.min(value, +1));\n value = value < 0 ? value * 32768 : value * 32767;\n value = Math.round(value) | 0;\n this.dataView.setInt16(this.pos, value, true);\n this.pos += 2;\n }\n pcm16s(valueIn: number) {\n let value = valueIn;\n value = Math.round(value * 32768);\n value = Math.max(-32768, Math.min(value, 32767));\n this.dataView.setInt16(this.pos, value, true);\n this.pos += 2;\n }\n pcm24(valueIn: number) {\n let value = valueIn;\n value = Math.max(-1, Math.min(value, +1));\n value = value < 0 ? 0x1000000 + value * 8388608 : value * 8388607;\n value = Math.round(value) | 0;\n\n const x0 = (value >> 0) & 0xff;\n const x1 = (value >> 8) & 0xff;\n const x2 = (value >> 16) & 0xff;\n\n this.dataView.setUint8(this.pos + 0, x0);\n this.dataView.setUint8(this.pos + 1, x1);\n this.dataView.setUint8(this.pos + 2, x2);\n this.pos += 3;\n }\n pcm24s(valueIn: number) {\n let value = valueIn;\n value = Math.round(value * 8388608);\n value = Math.max(-8388608, Math.min(value, 8388607));\n\n const x0 = (value >> 0) & 0xff;\n const x1 = (value >> 8) & 0xff;\n const x2 = (value >> 16) & 0xff;\n\n this.dataView.setUint8(this.pos + 0, x0);\n this.dataView.setUint8(this.pos + 1, x1);\n this.dataView.setUint8(this.pos + 2, x2);\n this.pos += 3;\n }\n pcm32(valueIn: number) {\n let value = valueIn;\n value = Math.max(-1, Math.min(value, +1));\n value = value < 0 ? value * 2147483648 : value * 2147483647;\n value = Math.round(value) | 0;\n this.dataView.setInt32(this.pos, value, true);\n this.pos += 4;\n }\n pcm32s(valueIn: number) {\n let value = valueIn;\n value = Math.round(value * 2147483648);\n value = Math.max(-2147483648, Math.min(value, +2147483647));\n this.dataView.setInt32(this.pos, value, true);\n this.pos += 4;\n }\n pcm32f(value: number) {\n this.dataView.setFloat32(this.pos, value, true);\n this.pos += 4;\n }\n}\n\nexport default WavEncoder;\n", "export interface WavDecoderOptions {\n symmetric?: boolean;\n shared?: boolean;\n}\ninterface Format {\n formatId: number;\n float: boolean;\n numberOfChannels: number;\n sampleRate: number;\n byteRate: number;\n blockSize: number;\n bitDepth: number;\n}\n\n/**\n * Code from https://github.com/mohayonao/wav-decoder\n */\nclass WavDecoder {\n static decode(buffer: ArrayBuffer, options?: WavDecoderOptions) {\n const dataView = new DataView(buffer);\n const reader = new Reader(dataView);\n if (reader.string(4) !== 'RIFF') {\n throw new TypeError('Invalid WAV file');\n }\n reader.uint32(); // skip file length\n if (reader.string(4) !== 'WAVE') {\n throw new TypeError('Invalid WAV file');\n }\n let format: Format | null = null;\n let audioData: {\n numberOfChannels: number;\n length: number;\n sampleRate: number;\n channelData: Float32Array[];\n } | null = null;\n do {\n const chunkType = reader.string(4);\n const chunkSize = reader.uint32();\n if (chunkType === 'fmt ') {\n format = this.decodeFormat(reader, chunkSize);\n } else if (chunkType === 'data') {\n audioData = this.decodeData(\n reader,\n chunkSize,\n format as Format,\n options || {}\n );\n } else {\n reader.skip(chunkSize);\n }\n } while (audioData === null);\n return audioData;\n }\n private static decodeFormat(reader: Reader, chunkSize: number) {\n const formats = {\n 0x0001: 'lpcm',\n 0x0003: 'lpcm'\n };\n const formatId = reader.uint16();\n if (!Object.prototype.hasOwnProperty.call(formats, formatId)) {\n throw new TypeError(\n 'Unsupported format in WAV file: 0x' + formatId.toString(16)\n );\n }\n const format: Format = {\n formatId: formatId,\n float: formatId === 0x0003,\n numberOfChannels: reader.uint16(),\n sampleRate: reader.uint32(),\n byteRate: reader.uint32(),\n blockSize: reader.uint16(),\n bitDepth: reader.uint16()\n };\n reader.skip(chunkSize - 16);\n return format;\n }\n private static decodeData(\n reader: Reader,\n chunkSizeIn: number,\n format: Format,\n options: WavDecoderOptions\n ) {\n const chunkSize = Math.min(chunkSizeIn, reader.remain());\n const length = Math.floor(chunkSize / format.blockSize);\n const numberOfChannels = format.numberOfChannels;\n const sampleRate = format.sampleRate;\n const channelData: Float32Array[] = new Array(numberOfChannels);\n for (let ch = 0; ch < numberOfChannels; ch++) {\n const AB = options.shared\n ? globalThis.SharedArrayBuffer || globalThis.ArrayBuffer\n : globalThis.ArrayBuffer;\n const ab = new AB(length * Float32Array.BYTES_PER_ELEMENT);\n channelData[ch] = new Float32Array(ab);\n }\n this.readPCM(reader, channelData, length, format, options);\n return {\n numberOfChannels,\n length,\n sampleRate,\n channelData\n };\n }\n private static readPCM(\n reader: Reader,\n channelData: Float32Array[],\n length: number,\n format: Format,\n options: WavDecoderOptions\n ) {\n const bitDepth = format.bitDepth;\n const decoderOption = format.float ? 'f' : options.symmetric ? 's' : '';\n const methodName = ('pcm' +\n bitDepth +\n decoderOption) as `pcm${8 | 16 | 32}${'f' | 's' | ''}`;\n if (!(reader as any)[methodName]) {\n throw new TypeError('Not supported bit depth: ' + format.bitDepth);\n }\n const read: () => number = (reader as any)[methodName].bind(reader);\n const numberOfChannels = format.numberOfChannels;\n for (let i = 0; i < length; i++) {\n for (let ch = 0; ch < numberOfChannels; ch++) {\n channelData[ch][i] = read();\n }\n }\n }\n}\n\nclass Reader {\n pos = 0;\n dataView: DataView;\n constructor(dataView: DataView) {\n this.dataView = dataView;\n }\n remain() {\n return this.dataView.byteLength - this.pos;\n }\n skip(n: number) {\n this.pos += n;\n }\n uint8() {\n const data = this.dataView.getUint8(this.pos);\n this.pos += 1;\n return data;\n }\n int16() {\n const data = this.dataView.getInt16(this.pos, true);\n this.pos += 2;\n return data;\n }\n uint16() {\n const data = this.dataView.getUint16(this.pos, true);\n this.pos += 2;\n return data;\n }\n uint32() {\n const data = this.dataView.getUint32(this.pos, true);\n this.pos += 4;\n return data;\n }\n string(n: number) {\n let data = '';\n for (let i = 0; i < n; i++) {\n data += String.fromCharCode(this.uint8());\n }\n return data;\n }\n pcm8() {\n const data = this.dataView.getUint8(this.pos) - 128;\n this.pos += 1;\n return data < 0 ? data / 128 : data / 127;\n }\n pcm8s() {\n const data = this.dataView.getUint8(this.pos) - 127.5;\n this.pos += 1;\n return data / 127.5;\n }\n pcm16() {\n const data = this.dataView.getInt16(this.pos, true);\n this.pos += 2;\n return data < 0 ? data / 32768 : data / 32767;\n }\n pcm16s() {\n const data = this.dataView.getInt16(this.pos, true);\n this.pos += 2;\n return data / 32768;\n }\n pcm24() {\n const x0 = this.dataView.getUint8(this.pos + 0);\n const x1 = this.dataView.getUint8(this.pos + 1);\n const x2 = this.dataView.getUint8(this.pos + 2);\n const xx = x0 + (x1 << 8) + (x2 << 16);\n\n const data = xx > 0x800000 ? xx - 0x1000000 : xx;\n this.pos += 3;\n return data < 0 ? data / 8388608 : data / 8388607;\n }\n pcm24s() {\n const x0 = this.dataView.getUint8(this.pos + 0);\n const x1 = this.dataView.getUint8(this.pos + 1);\n const x2 = this.dataView.getUint8(this.pos + 2);\n const xx = x0 + (x1 << 8) + (x2 << 16);\n\n const data = xx > 0x800000 ? xx - 0x1000000 : xx;\n this.pos += 3;\n return data / 8388608;\n }\n pcm32() {\n const data = this.dataView.getInt32(this.pos, true);\n this.pos += 4;\n return data < 0 ? data / 2147483648 : data / 2147483647;\n }\n pcm32s() {\n const data = this.dataView.getInt32(this.pos, true);\n this.pos += 4;\n return data / 2147483648;\n }\n pcm32f() {\n const data = this.dataView.getFloat32(this.pos, true);\n this.pos += 4;\n return data;\n }\n pcm64f() {\n const data = this.dataView.getFloat64(this.pos, true);\n this.pos += 8;\n return data;\n }\n}\n\nexport default WavDecoder;\n", "import { FaustBaseWebAudioDsp } from './FaustWebAudioDsp';\nimport WavDecoder from './WavDecoder';\nimport type {\n AudioData,\n FaustDspMeta,\n FaustUIItem,\n LooseFaustDspFactory\n} from './types';\n\n/** Read metadata and fetch soundfiles */\nclass SoundfileReader {\n /**\n * Set fallback base URLs used to resolve soundfile paths.\n *\n * In Node or other non-browser runtimes, `location` may be undefined;\n * in that case this returns an empty list to avoid resolution errors.\n */\n static get fallbackPaths() {\n const loc =\n typeof location !== 'undefined' ? (location as Location) : null;\n const href = loc?.href;\n const origin = loc?.origin;\n const parent = href ? this.getParentUrl(href) : null;\n return [href, parent, origin].filter(\n (value): value is string =>\n typeof value === 'string' && value.length > 0\n );\n }\n\n /**\n * Extract the parent URL from an URL.\n * @param url : the URL\n * @returns : the parent URL\n */\n private static getParentUrl(url: string) {\n return url.substring(0, url.lastIndexOf('/') + 1);\n }\n\n /**\n * Convert an audio buffer to audio data.\n *\n * @param audioBuffer : the audio buffer to convert\n * @returns : the audio data\n */\n private static toAudioData(audioBuffer: AudioBuffer): AudioData {\n const { sampleRate, numberOfChannels } = audioBuffer;\n return {\n sampleRate,\n audioBuffer: new Array(numberOfChannels)\n .fill(null)\n .map((v, i) => audioBuffer.getChannelData(i))\n } as AudioData;\n }\n\n private static isWaveFile(buffer: ArrayBuffer) {\n if (buffer.byteLength < 12) return false;\n const reader = new DataView(buffer);\n const riff =\n reader.getUint8(0) === 0x52 &&\n reader.getUint8(1) === 0x49 &&\n reader.getUint8(2) === 0x46 &&\n reader.getUint8(3) === 0x46;\n const wave =\n reader.getUint8(8) === 0x57 &&\n reader.getUint8(9) === 0x41 &&\n reader.getUint8(10) === 0x56 &&\n reader.getUint8(11) === 0x45;\n return riff && wave;\n }\n\n private static decodeWaveFile(buffer: ArrayBuffer): AudioData {\n const decoded = WavDecoder.decode(buffer);\n return {\n sampleRate: decoded.sampleRate,\n audioBuffer: decoded.channelData\n };\n }\n\n /**\n * Extract the URLs from the metadata.\n *\n * @param dspMeta : the metadata\n * @returns : the URLs\n */\n static findSoundfilesFromMeta(\n dspMeta: FaustDspMeta\n ): LooseFaustDspFactory['soundfiles'] {\n const soundfiles: LooseFaustDspFactory['soundfiles'] = {};\n const callback = (item: FaustUIItem) => {\n if (item.type === 'soundfile') {\n const urls = FaustBaseWebAudioDsp.splitSoundfileNames(item.url);\n // soundfiles.map[item.label] = urls;\n urls.filter((url) => url.trim().length > 0).forEach(\n (url) => (soundfiles[url] = null)\n );\n }\n };\n FaustBaseWebAudioDsp.parseUI(dspMeta.ui, callback);\n return soundfiles;\n }\n /**\n * Fetch the soundfile.\n *\n * @param url : the url of the soundfile\n * @param audioCtx : the audio context\n * @returns : the audio data\n */\n private static async fetchSoundfile(\n url: string,\n audioCtx: BaseAudioContext\n ): Promise<AudioData> {\n console.log(`Loading sound file from ${url}`);\n const response = await fetch(url);\n if (!response.ok)\n throw new Error(\n `Failed to load sound file from ${url}: ${response.statusText}`\n );\n // Decode the audio data\n const arrayBuffer = await response.arrayBuffer();\n if (this.isWaveFile(arrayBuffer)) {\n try {\n return this.decodeWaveFile(arrayBuffer);\n } catch (error) {\n console.error(error);\n }\n }\n const audioBuffer = await audioCtx.decodeAudioData(arrayBuffer);\n return this.toAudioData(audioBuffer);\n }\n\n /**\n * Load the soundfile.\n *\n * @param filename : the filename\n * @param metaUrls : the metadata URLs\n * @param soundfiles : the soundfiles\n * @param audioCtx : the audio context\n */\n private static async loadSoundfile(\n filename: string,\n metaUrls: string[],\n soundfiles: LooseFaustDspFactory['soundfiles'],\n audioCtx: BaseAudioContext\n ): Promise<void> {\n if (soundfiles?.[filename]) return;\n const urlsToCheck = [\n filename,\n ...[...metaUrls, ...this.fallbackPaths].map(\n (path) =>\n new URL(filename, path.endsWith('/') ? path : `${path}/`)\n .href\n )\n ];\n // Try each candidate once to avoid double downloads (no preflight GET).\n let lastError: unknown = null;\n for (const url of urlsToCheck) {\n try {\n soundfiles![filename] = await this.fetchSoundfile(\n url,\n audioCtx\n );\n return;\n } catch (error) {\n lastError = error;\n }\n }\n throw new Error(\n `Failed to load sound file ${filename}, all check failed. Last error: ${String(lastError)}`\n );\n }\n\n /**\n * Load the soundfiles, public API.\n *\n * @param dspMeta : the metadata\n * @param soundfilesIn : the soundfiles\n * @param audioCtx : the audio context\n * @returns : the soundfiles\n */\n static async loadSoundfiles(\n dspMeta: FaustDspMeta,\n soundfilesIn: LooseFaustDspFactory['soundfiles'],\n audioCtx: BaseAudioContext\n ): Promise<LooseFaustDspFactory['soundfiles']> {\n const metaUrls = FaustBaseWebAudioDsp.extractUrlsFromMeta(dspMeta);\n const soundfiles = this.findSoundfilesFromMeta(dspMeta);\n for (const id in soundfiles) {\n if (soundfilesIn?.[id]) {\n soundfiles[id] = soundfilesIn[id];\n continue;\n }\n try {\n await this.loadSoundfile(id, metaUrls, soundfiles, audioCtx);\n } catch (error) {\n console.error(error);\n }\n }\n return soundfiles;\n }\n}\n\nexport default SoundfileReader;\n", "/**\n * Layout:\n *\n *\n * invert-isAndroid (uint8)\n * new-acc-data-available (uint8)\n * new-gyr-data-available (uint8)\n * empty (uint8)\n *\n * acc.x, acc.y, acc.z (f32)\n *\n * gyr.alpha, gyr.beta, gyr.gamma (f32)\n */\nexport class FaustAudioWorkletCommunicator {\n protected readonly port: MessagePort;\n protected readonly supportSharedArrayBuffer: boolean;\n protected readonly byteLength: number;\n protected uin8Invert: Uint8ClampedArray;\n protected uin8NewAccData: Uint8ClampedArray;\n protected uin8NewGyrData: Uint8ClampedArray;\n protected f32Acc: Float32Array;\n protected f32Gyr: Float32Array;\n constructor(port: MessagePort) {\n this.port = port;\n this.supportSharedArrayBuffer = !!globalThis.SharedArrayBuffer;\n this.byteLength =\n 4 * Uint8Array.BYTES_PER_ELEMENT +\n 3 * Float32Array.BYTES_PER_ELEMENT +\n 3 * Float32Array.BYTES_PER_ELEMENT;\n }\n initializeBuffer(ab: SharedArrayBuffer | ArrayBuffer) {\n let ptr = 0;\n this.uin8Invert = new Uint8ClampedArray(ab, ptr, 1);\n ptr += Uint8ClampedArray.BYTES_PER_ELEMENT;\n this.uin8NewAccData = new Uint8ClampedArray(ab, ptr, 1);\n ptr += Uint8ClampedArray.BYTES_PER_ELEMENT;\n this.uin8NewGyrData = new Uint8ClampedArray(ab, ptr, 1);\n ptr += Uint8ClampedArray.BYTES_PER_ELEMENT;\n ptr += Uint8ClampedArray.BYTES_PER_ELEMENT; // empty\n this.f32Acc = new Float32Array(ab, ptr, 3);\n ptr += 3 * Float32Array.BYTES_PER_ELEMENT;\n this.f32Gyr = new Float32Array(ab, ptr, 3);\n ptr += 3 * Float32Array.BYTES_PER_ELEMENT;\n }\n setNewAccDataAvailable(value: boolean) {\n if (!this.uin8NewAccData) return;\n this.uin8NewAccData[0] = +value;\n }\n getNewAccDataAvailable() {\n return !!this.uin8NewAccData?.[0];\n }\n setNewGyrDataAvailable(value: boolean) {\n if (!this.uin8NewGyrData) return;\n this.uin8NewGyrData[0] = +value;\n }\n getNewGyrDataAvailable() {\n return !!this.uin8NewGyrData?.[0];\n }\n setAcc({ x, y, z }: { x: number; y: number; z: number }, invert = false) {\n if (!this.supportSharedArrayBuffer) {\n const e = { type: 'acc', data: { x, y, z }, invert };\n this.port.postMessage(e);\n }\n if (!this.uin8NewAccData) return;\n this.uin8Invert[0] = +invert;\n this.f32Acc[0] = x;\n this.f32Acc[1] = y;\n this.f32Acc[2] = z;\n this.uin8NewAccData[0] = 1;\n }\n getAcc() {\n if (!this.uin8NewAccData) return;\n const invert = !!this.uin8Invert[0];\n const [x, y, z] = this.f32Acc;\n return { x, y, z, invert };\n }\n setGyr({\n alpha,\n beta,\n gamma\n }: {\n alpha: number;\n beta: number;\n gamma: number;\n }) {\n if (!this.supportSharedArrayBuffer) {\n const e = { type: 'gyr', data: { alpha, beta, gamma } };\n this.port.postMessage(e);\n }\n if (!this.uin8NewGyrData) return;\n this.f32Gyr[0] = alpha;\n this.f32Gyr[1] = beta;\n this.f32Gyr[2] = gamma;\n this.uin8NewGyrData[0] = 1;\n }\n getGyr() {\n if (!this.uin8NewGyrData) return;\n const [alpha, beta, gamma] = this.f32Gyr;\n return { alpha, beta, gamma };\n }\n}\n\nexport class FaustAudioWorkletNodeCommunicator extends FaustAudioWorkletCommunicator {\n constructor(port: MessagePort) {\n super(port);\n if (this.supportSharedArrayBuffer) {\n const sab = new SharedArrayBuffer(this.byteLength);\n this.initializeBuffer(sab);\n this.port.postMessage({ type: 'initSab', sab });\n } else {\n const ab = new ArrayBuffer(this.byteLength);\n this.initializeBuffer(ab);\n }\n }\n}\n\nexport class FaustAudioWorkletProcessorCommunicator extends FaustAudioWorkletCommunicator {\n constructor(port: MessagePort) {\n super(port);\n\n if (this.supportSharedArrayBuffer) {\n this.port.addEventListener('message', (event) => {\n const { data } = event;\n if (data.type === 'initSab') {\n this.initializeBuffer(data.sab);\n }\n });\n } else {\n const ab = new ArrayBuffer(this.byteLength);\n this.initializeBuffer(ab);\n this.port.addEventListener('message', (event) => {\n const msg = event.data;\n\n switch (msg.type) {\n // Sensors messages\n case 'acc': {\n this.setAcc(msg.data, msg.invert);\n break;\n }\n case 'gyr': {\n this.setGyr(msg.data);\n break;\n }\n default:\n break;\n }\n });\n }\n }\n}\n", "import {\n InputParamHandler,\n OutputParamHandler,\n ComputeHandler,\n PlotHandler,\n UIHandler,\n MetadataHandler,\n FaustBaseWebAudioDsp,\n IFaustMonoWebAudioDsp,\n IFaustPolyWebAudioDsp\n} from './FaustWebAudioDsp';\nimport type { FaustAudioWorkletNodeOptions } from './FaustAudioWorkletProcessor';\nimport type {\n LooseFaustDspFactory,\n FaustDspMeta,\n FaustUIInputItem,\n FaustUIItem\n} from './types';\nimport { FaustAudioWorkletNodeCommunicator } from './FaustAudioWorkletCommunicator';\n\n/**\n * Base class for Monophonic and Polyphonic AudioWorkletNode\n */\nexport class FaustAudioWorkletNode<\n Poly extends boolean = false\n> extends (globalThis.AudioWorkletNode || null) {\n protected fJSONDsp: FaustDspMeta;\n protected fJSON: string;\n protected fInputsItems: string[];\n protected fOutputHandler: OutputParamHandler | null;\n protected fInputHandler: InputParamHandler | null;\n protected fComputeHandler: ComputeHandler | null;\n protected fPlotHandler: PlotHandler | null;\n protected fUICallback: UIHandler;\n protected fDescriptor: FaustUIInputItem[];\n protected fCommunicator: FaustAudioWorkletNodeCommunicator;\n protected fParamAliases: Record<string, string>;\n #hasAccInput = false;\n #hasGyrInput = false;\n\n constructor(\n context: BaseAudioContext,\n name: string,\n factory: LooseFaustDspFactory,\n options: Partial<FaustAudioWorkletNodeOptions<Poly>> = {}\n ) {\n // Create JSON object\n const JSONObj: FaustDspMeta = JSON.parse(factory.json);\n\n // Create proxy FaustAudioWorkletProcessor\n super(context, name, {\n numberOfInputs: JSONObj.inputs > 0 ? 1 : 0,\n numberOfOutputs: JSONObj.outputs > 0 ? 1 : 0,\n channelCount: Math.max(1, JSONObj.inputs),\n outputChannelCount: [JSONObj.outputs],\n channelCountMode: 'explicit',\n channelInterpretation: 'speakers',\n processorOptions: options.processorOptions,\n ...options\n });\n\n this.fJSONDsp = JSONObj;\n this.fJSON = factory.json;\n this.fOutputHandler = null;\n this.fInputHandler = null;\n this.fComputeHandler = null;\n this.fPlotHandler = null;\n this.fDescriptor = [];\n this.fParamAliases = {};\n\n // Parse UI\n this.fInputsItems = [];\n this.fUICallback = (item: FaustUIItem) => {\n if (\n item.type === 'vslider' ||\n item.type === 'hslider' ||\n item.type === 'button' ||\n item.type === 'checkbox' ||\n item.type === 'nentry'\n ) {\n // Keep inputs adresses\n this.fInputsItems.push(item.address);\n this.fDescriptor.push(item);\n const registerAlias = (alias: string) => {\n if (!this.fParamAliases[alias]) {\n this.fParamAliases[alias] = item.address;\n }\n };\n registerAlias(item.shortname);\n registerAlias(item.label);\n if (!item.meta) return;\n item.meta.forEach((meta) => {\n const { midi, acc, gyr } = meta;\n if (acc) this.#hasAccInput = true;\n if (gyr) this.#hasGyrInput = true;\n });\n }\n };\n\n FaustBaseWebAudioDsp.parseUI(this.fJSONDsp.ui, this.fUICallback);\n\n this.fCommunicator = new FaustAudioWorkletNodeCommunicator(this.port);\n\n // Patch it with additional functions\n this.port.addEventListener('message', this.handleMessageAux);\n this.port.start();\n }\n\n protected handleMessageAux = (e: MessageEvent) => {\n if (e.data.type === 'out-param' && this.fOutputHandler) {\n this.fOutputHandler(e.data.path, e.data.value);\n } else if (e.data.type === 'in-param' && this.fInputHandler) {\n this.fInputHandler(e.data.path, e.data.value);\n } else if (e.data.type === 'plot' && this.fPlotHandler) {\n this.fPlotHandler(e.data.value, e.data.index, e.data.events);\n }\n };\n\n // Accelerometer and gyroscope handlers\n private handleDeviceMotion = ({\n accelerationIncludingGravity\n }: DeviceMotionEvent) => {\n const isAndroid: boolean = /Android/i.test(navigator.userAgent);\n if (!accelerationIncludingGravity) return;\n const { x, y, z } = accelerationIncludingGravity;\n this.propagateAcc({ x, y, z }, isAndroid);\n };\n\n private handleDeviceOrientation = ({\n alpha,\n beta,\n gamma\n }: DeviceOrientationEvent) => {\n this.propagateGyr({ alpha, beta, gamma });\n };\n\n // Public API\n\n /** Setup accelerometer and gyroscope handlers */\n async startSensors() {\n if (this.hasAccInput) {\n if (window.DeviceMotionEvent) {\n // iOS 13+ requires a user gesture to enable DeviceMotionEvent, to be done in the main thread\n window.addEventListener(\n 'devicemotion',\n this.handleDeviceMotion,\n true\n );\n } else {\n // Browser doesn't support DeviceMotionEvent\n console.log('Cannot set the accelerometer handler.');\n }\n }\n if (this.hasGyrInput) {\n if (window.DeviceMotionEvent) {\n // iOS 13+ requires a user gesture to enable DeviceMotionEvent, to be done in the main thread\n window.addEventListener(\n 'deviceorientation',\n this.handleDeviceOrientation,\n true\n );\n } else {\n // Browser doesn't support DeviceMotionEvent\n console.log('Cannot set the gyroscope handler.');\n }\n }\n }\n\n stopSensors() {\n if (this.hasAccInput) {\n window.removeEventListener(\n 'devicemotion',\n this.handleDeviceMotion,\n true\n );\n }\n if (this.hasGyrInput) {\n window.removeEventListener(\n 'deviceorientation',\n this.handleDeviceOrientation,\n true\n );\n }\n }\n\n setOutputParamHandler(handler: OutputParamHandler | null) {\n this.fOutputHandler = handler;\n }\n getOutputParamHandler() {\n return this.fOutputHandler;\n }\n callOutputParamHandler(path: string, value: number) {\n if (this.fOutputHandler) {\n this.fOutputHandler(path, value);\n }\n }\n\n setInputParamHandler(handler: InputParamHandler | null) {\n this.fInputHandler = handler;\n }\n getInputParamHandler() {\n return this.fInputHandler;\n }\n callInputParamHandler(path: string, value: number) {\n if (this.fInputHandler) {\n this.fInputHandler(path, value);\n }\n }\n\n setComputeHandler(handler: ComputeHandler | null) {\n this.fComputeHandler = handler;\n }\n getComputeHandler(): ComputeHandler | null {\n return this.fComputeHandler;\n }\n\n setPlotHandler(handler: PlotHandler | null) {\n this.fPlotHandler = handler;\n // Set PlotHandler on processor side\n if (this.fPlotHandler) {\n this.port.postMessage({ type: 'setPlotHandler', data: true });\n } else {\n this.port.postMessage({ type: 'setPlotHandler', data: false });\n }\n }\n getPlotHandler(): PlotHandler | null {\n return this.fPlotHandler;\n }\n\n setupWamEventHandler() {\n this.port.postMessage({ type: 'setupWamEventHandler' });\n }\n\n getNumInputs() {\n return this.fJSONDsp.inputs;\n }\n getNumOutputs() {\n return this.fJSONDsp.outputs;\n }\n\n // Implemented in subclasses\n compute(inputs: Float32Array[], outputs: Float32Array[]) {\n return false;\n }\n\n metadata(handler: MetadataHandler) {\n if (this.fJSONDsp.meta) {\n this.fJSONDsp.meta.forEach((meta) =>\n handler(Object.keys(meta)[0], meta[Object.keys(meta)[0]])\n );\n }\n }\n\n /**\n * `time` is in AudioContext seconds, the clock `AudioParam` methods take.\n *\n * With a time, the processor holds the message until the block containing\n * that instant and applies it on the exact sample. Without one, it is\n * applied on arrival.\n *\n * A time already in the past is late, not rejected: the message happens at\n * the top of the next block. `setParamValue` is the exception -- it also\n * writes an `AudioParam`, and `setValueAtTime` throws on a negative time.\n */\n midiMessage(data: number[] | Uint8Array, time?: number): void {\n const cmd = data[0] >> 4;\n const channel = data[0] & 0xf;\n const data1 = data[1];\n const data2 = data[2];\n if (cmd === 11) this.ctrlChange(channel, data1, data2, time);\n else if (cmd === 14)\n this.pitchWheel(channel, data2 * 128.0 + data1, time);\n if (cmd === 8 || (cmd === 9 && data2 === 0))\n this.keyOff(channel, data1, data2, time);\n else if (cmd === 9) this.keyOn(channel, data1, data2, time);\n else this.port.postMessage({ type: 'midi', data: data, time });\n }\n\n ctrlChange(channel: number, ctrl: number, value: number, time?: number) {\n const e = { type: 'ctrlChange', data: [channel, ctrl, value], time };\n this.port.postMessage(e);\n }\n pitchWheel(channel: number, wheel: number, time?: number) {\n const e = { type: 'pitchWheel', data: [channel, wheel], time };\n this.port.postMessage(e);\n }\n keyOn(channel: number, pitch: number, velocity: number, time?: number) {\n const e = { type: 'keyOn', data: [channel, pitch, velocity], time };\n this.port.postMessage(e);\n }\n keyOff(channel: number, pitch: number, velocity: number, time?: number) {\n const e = { type: 'keyOff', data: [channel, pitch, velocity], time };\n this.port.postMessage(e);\n }\n\n get hasAccInput() {\n return this.#hasAccInput;\n }\n\n propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n if (!accelerationIncludingGravity) return;\n const { x, y, z } = accelerationIncludingGravity;\n this.fCommunicator.setAcc({ x: x!, y: y!, z: z! }, invert);\n }\n\n get hasGyrInput() {\n return this.#hasGyrInput;\n }\n\n propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n if (!event) return;\n const { alpha, beta, gamma } = event;\n this.fCommunicator.setGyr({\n alpha: alpha!,\n beta: beta!,\n gamma: gamma!\n });\n }\n\n /**\n * `time` is in AudioContext seconds; see `midiMessage`.\n *\n * Unlike a note, a negative `time` throws instead of arriving late, and\n * nothing is sent. `AudioParam.setValueAtTime` is what rejects it, which\n * is why that call comes first.\n */\n setParamValue(path: string, value: number, time?: number) {\n const resolved = this.fParamAliases[path] || path;\n // The AudioParam first, because it is the half that can refuse:\n // `setValueAtTime` throws on a negative or NaN time. Posting first\n // would leave the DSP holding a value the AudioParam rejected, with\n // the caller seeing only the exception.\n //\n // Both are written so they stay in step: `getParamValue` and any later\n // automation start from this value. The processor reads that\n // automation per sample, so message and AudioParam agree on the value\n // and the frame, and whichever the DSP sees second is a no-op.\n const param = this.parameters.get(resolved);\n if (param)\n param.setValueAtTime(value, time ?? this.context.currentTime);\n this.port.postMessage({\n type: 'param',\n data: { path: resolved, value },\n time\n });\n }\n getParamValue(path: string) {\n // Get value of AudioParam\n const resolved = this.fParamAliases[path] || path;\n const param = this.parameters.get(resolved);\n return param ? param.value : 0;\n }\n\n getParams() {\n return this.fInputsItems;\n }\n getMeta() {\n return this.fJSONDsp;\n }\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n getUI() {\n return this.fJSONDsp.ui;\n }\n getDescriptors() {\n return this.fDescriptor;\n }\n\n init() {\n this.port.postMessage({ type: 'init' });\n }\n\n instanceInit() {\n this.port.postMessage({ type: 'instanceInit' });\n }\n\n instanceClear() {\n this.port.postMessage({ type: 'instanceClear' });\n }\n\n instanceConstants() {\n this.port.postMessage({ type: 'instanceConstants' });\n }\n\n instanceResetUserInterface() {\n this.port.postMessage({ type: 'instanceResetUserInterface' });\n }\n\n start() {\n this.port.postMessage({ type: 'start' });\n }\n\n stop() {\n this.port.postMessage({ type: 'stop' });\n }\n\n destroy() {\n this.port.postMessage({ type: 'destroy' });\n this.port.close();\n }\n}\n\n/**\n * Monophonic AudioWorkletNode\n */\nexport class FaustMonoAudioWorkletNode\n extends FaustAudioWorkletNode<false>\n implements IFaustMonoWebAudioDsp\n{\n onprocessorerror = (e: Event) => {\n // console.error(\"Error from \" + this.fJSONDsp.name + \" FaustMonoAudioWorkletNode\");\n throw e;\n };\n\n constructor(\n context: BaseAudioContext,\n options: Partial<FaustAudioWorkletNodeOptions<false>> &\n Pick<FaustAudioWorkletNodeOptions<false>, 'processorOptions'>\n ) {\n super(\n context,\n options.processorOptions.name,\n options.processorOptions.factory,\n options\n );\n }\n}\n\n/**\n * Polyphonic AudioWorkletNode\n */\nexport class FaustPolyAudioWorkletNode\n extends FaustAudioWorkletNode<true>\n implements IFaustPolyWebAudioDsp\n{\n private fJSONEffect: FaustDspMeta | null;\n\n onprocessorerror = (e: Event) => {\n // console.error(\"Error from \" + this.fJSONDsp.name + \" FaustPolyAudioWorkletNode\");\n throw e;\n };\n\n constructor(\n context: BaseAudioContext,\n options: Partial<FaustAudioWorkletNodeOptions<true>> &\n Pick<FaustAudioWorkletNodeOptions<true>, 'processorOptions'>\n ) {\n super(\n context,\n options.processorOptions.name,\n options.processorOptions.voiceFactory,\n options\n );\n\n this.fJSONEffect = options.processorOptions.effectFactory\n ? JSON.parse(options.processorOptions.effectFactory.json)\n : null;\n\n if (this.fJSONEffect) {\n FaustBaseWebAudioDsp.parseUI(this.fJSONEffect.ui, this.fUICallback);\n }\n }\n\n // Public API\n // `keyOn` and `keyOff` are inherited: the base posts the same message,\n // which the processor routes to the polyphonic DSP.\n\n allNotesOff(hard: boolean) {\n const e = { type: 'ctrlChange', data: [0, 123, 0] };\n this.port.postMessage(e);\n }\n\n getMeta() {\n const o = this.fJSONDsp;\n const e = this.fJSONEffect;\n const r = { ...o };\n if (e) {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Sequencer',\n items: [\n { type: 'vgroup', label: 'Instrument', items: o.ui },\n { type: 'vgroup', label: 'Effect', items: e.ui }\n ]\n }\n ];\n } else {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Polyphonic',\n items: [{ type: 'vgroup', label: 'Voices', items: o.ui }]\n }\n ];\n }\n return r as FaustDspMeta;\n }\n\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n\n getUI() {\n return this.getMeta().ui;\n }\n}\n", "import type {\n ComputeHandler,\n FaustMonoWebAudioDsp,\n FaustPolyWebAudioDsp,\n IFaustMonoWebAudioDsp,\n IFaustPolyWebAudioDsp,\n InputParamHandler,\n MetadataHandler,\n OutputParamHandler,\n PlotHandler\n} from './FaustWebAudioDsp';\n\n/**\n * Base class for Monophonic and Polyphonic ScriptProcessorNode\n */\nexport class FaustScriptProcessorNode<\n Poly extends boolean = false\n> extends (globalThis.ScriptProcessorNode || null) {\n protected fDSPCode!: Poly extends true\n ? FaustPolyWebAudioDsp\n : FaustMonoWebAudioDsp;\n\n // Needed for ScriptProcessorNode\n protected fInputs!: Float32Array[];\n protected fOutputs!: Float32Array[];\n protected handleDeviceMotion = undefined as any;\n protected handleDeviceOrientation = undefined as any;\n\n setupNode(\n instance: Poly extends true\n ? FaustPolyWebAudioDsp\n : FaustMonoWebAudioDsp\n ) {\n this.fDSPCode = instance;\n\n this.fInputs = new Array(this.fDSPCode.getNumInputs());\n this.fOutputs = new Array(this.fDSPCode.getNumOutputs());\n\n // Accelerometer and gyroscope handlers\n this.handleDeviceMotion = ({\n accelerationIncludingGravity\n }: DeviceMotionEvent) => {\n const isAndroid: boolean = /Android/i.test(navigator.userAgent);\n if (!accelerationIncludingGravity) return;\n const { x, y, z } = accelerationIncludingGravity;\n this.propagateAcc({ x, y, z }, isAndroid);\n };\n\n this.handleDeviceOrientation = ({\n alpha,\n beta,\n gamma\n }: DeviceOrientationEvent) => {\n this.propagateGyr({ alpha, beta, gamma });\n };\n\n this.onaudioprocess = (e) => {\n // Read inputs\n for (let chan = 0; chan < this.fDSPCode.getNumInputs(); chan++) {\n this.fInputs[chan] = e.inputBuffer.getChannelData(chan);\n }\n\n // Read outputs\n for (let chan = 0; chan < this.fDSPCode.getNumOutputs(); chan++) {\n this.fOutputs[chan] = e.outputBuffer.getChannelData(chan);\n }\n\n return this.fDSPCode.compute(this.fInputs, this.fOutputs);\n };\n\n this.start();\n }\n\n init() {\n this.fDSPCode.init();\n }\n\n instanceInit() {\n this.fDSPCode.instanceInit();\n }\n\n instanceClear() {\n this.fDSPCode.instanceClear();\n }\n\n instanceConstants() {\n this.fDSPCode.instanceConstants();\n }\n\n instanceResetUserInterface() {\n this.fDSPCode.instanceResetUserInterface();\n }\n\n // Public API\n\n /** Start accelerometer and gyroscope handlers */\n async startSensors() {\n if (this.hasAccInput) {\n if (window.DeviceMotionEvent) {\n // iOS 13+ requires a user gesture to enable DeviceMotionEvent, to be done in the main thread\n window.addEventListener(\n 'devicemotion',\n this.handleDeviceMotion,\n true\n );\n } else {\n // Browser doesn't support DeviceMotionEvent\n console.log('Cannot set the accelerometer handler.');\n }\n }\n if (this.hasGyrInput) {\n if (window.DeviceMotionEvent) {\n // iOS 13+ requires a user gesture to enable DeviceMotionEvent, to be done in the main thread\n window.addEventListener(\n 'deviceorientation',\n this.handleDeviceOrientation,\n true\n );\n } else {\n // Browser doesn't support DeviceMotionEvent\n console.log('Cannot set the gyroscope handler.');\n }\n }\n }\n\n /** Stop accelerometer and gyroscope handlers */\n stopSensors() {\n if (this.hasAccInput) {\n window.removeEventListener(\n 'devicemotion',\n this.handleDeviceMotion,\n true\n );\n }\n if (this.hasGyrInput) {\n window.removeEventListener(\n 'deviceorientation',\n this.handleDeviceOrientation,\n true\n );\n }\n }\n\n compute(input: Float32Array[], output: Float32Array[]) {\n return this.fDSPCode.compute(input, output);\n }\n\n setOutputParamHandler(handler: OutputParamHandler) {\n this.fDSPCode.setOutputParamHandler(handler);\n }\n getOutputParamHandler() {\n return this.fDSPCode.getOutputParamHandler();\n }\n callOutputParamHandler(path: string, value: number) {\n this.fDSPCode.callOutputParamHandler(path, value);\n }\n\n setInputParamHandler(handler: InputParamHandler) {\n this.fDSPCode.setInputParamHandler(handler);\n }\n getInputParamHandler() {\n return this.fDSPCode.getInputParamHandler();\n }\n callInputParamHandler(path: string, value: number) {\n this.fDSPCode.callInputParamHandler(path, value);\n }\n\n setComputeHandler(handler: ComputeHandler) {\n this.fDSPCode.setComputeHandler(handler);\n }\n getComputeHandler() {\n return this.fDSPCode.getComputeHandler();\n }\n\n setPlotHandler(handler: PlotHandler) {\n this.fDSPCode.setPlotHandler(handler);\n }\n getPlotHandler() {\n return this.fDSPCode.getPlotHandler();\n }\n\n getNumInputs() {\n return this.fDSPCode.getNumInputs();\n }\n getNumOutputs() {\n return this.fDSPCode.getNumOutputs();\n }\n\n metadata(handler: MetadataHandler) {}\n\n midiMessage(data: number[] | Uint8Array) {\n this.fDSPCode.midiMessage(data);\n }\n\n ctrlChange(chan: number, ctrl: number, value: number) {\n this.fDSPCode.ctrlChange(chan, ctrl, value);\n }\n pitchWheel(chan: number, value: number) {\n this.fDSPCode.pitchWheel(chan, value);\n }\n keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n\n setParamValue(path: string, value: number) {\n this.fDSPCode.setParamValue(path, value);\n }\n getParamValue(path: string) {\n return this.fDSPCode.getParamValue(path);\n }\n getParams() {\n return this.fDSPCode.getParams();\n }\n\n getMeta() {\n return this.fDSPCode.getMeta();\n }\n getJSON() {\n return this.fDSPCode.getJSON();\n }\n getDescriptors() {\n return this.fDSPCode.getDescriptors();\n }\n getUI() {\n return this.fDSPCode.getUI();\n }\n\n start() {\n this.fDSPCode.start();\n }\n stop() {\n this.fDSPCode.stop();\n }\n\n destroy() {\n this.fDSPCode.destroy();\n }\n\n get hasAccInput() {\n return this.fDSPCode.hasAccInput;\n }\n\n propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n this.fDSPCode.propagateAcc(accelerationIncludingGravity, invert);\n }\n\n get hasGyrInput() {\n return this.fDSPCode.hasGyrInput;\n }\n\n propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n this.fDSPCode.propagateGyr(event);\n }\n}\n\nexport class FaustMonoScriptProcessorNode\n extends FaustScriptProcessorNode<false>\n implements IFaustMonoWebAudioDsp {}\n\nexport class FaustPolyScriptProcessorNode\n extends FaustScriptProcessorNode<true>\n implements IFaustPolyWebAudioDsp\n{\n keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n allNotesOff(hard: boolean) {\n this.fDSPCode.allNotesOff(hard);\n }\n}\n", "import {\n FaustMonoAudioWorkletNode,\n FaustPolyAudioWorkletNode\n} from './FaustAudioWorkletNode';\nimport getFaustAudioWorkletProcessor, {\n FaustData\n} from './FaustAudioWorkletProcessor';\nimport getFaustFFTAudioWorkletProcessor, {\n FaustFFTData,\n FaustFFTOptionsData\n} from './FaustFFTAudioWorkletProcessor';\nimport { FaustDspInstance } from './FaustDspInstance';\nimport FaustWasmInstantiator from './FaustWasmInstantiator';\nimport {\n FaustMonoOfflineProcessor,\n FaustPolyOfflineProcessor,\n IFaustMonoOfflineProcessor,\n IFaustPolyOfflineProcessor\n} from './FaustOfflineProcessor';\nimport {\n FaustMonoScriptProcessorNode,\n FaustPolyScriptProcessorNode\n} from './FaustScriptProcessorNode';\nimport {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n FaustPolyWebAudioDsp,\n FaustWebAudioDspVoice,\n IFaustMonoWebAudioNode,\n IFaustPolyWebAudioNode,\n Soundfile,\n WasmAllocator\n} from './FaustWebAudioDsp';\nimport SoundfileReader from './SoundfileReader';\nimport FaustSensors from './FaustSensors';\nimport FaustCompiler, { IFaustCompiler } from './FaustCompiler';\nimport type {\n FaustDspFactory,\n FaustUIDescriptor,\n FaustDspMeta,\n FFTUtils,\n LooseFaustDspFactory,\n AudioData\n} from './types';\nimport {\n FaustAudioWorkletCommunicator,\n FaustAudioWorkletProcessorCommunicator\n} from './FaustAudioWorkletCommunicator';\nimport instantiateFaustModuleFromFile from './instantiateFaustModuleFromFile';\nimport LibFaust from './LibFaust';\n\nexport interface GeneratorSupportingSoundfiles {\n /**\n * Attach a map of id - audio data, call after `compile()` before `createNode()`\n *\n * @param soundfileMap a map of id - `AudioData` as an object where `AudioData` contains channel data as `audioBuffer: Float32Array[]` and `sampleRate: number`\n */\n addSoundfiles(soundfileMap: Record<string, AudioData>): void;\n\n /**\n * Get a list of soundfiles needed, call after `compile()`\n */\n getSoundfileList(): string[];\n}\n\nexport interface IFaustDspGenerator {\n /**\n * Create a monophonic or polyphonic WebAudio node (either ScriptProcessorNode or AudioWorkletNode).\n * Analyze the code to decide whether to create a monophonic or polyphonic node.\n *\n * @param context - the WebAudio context\n * @param name - DSP name, can be used for processorName\n * @param code - the DSP code\n * @param sp - whether to compile a ScriptProcessorNode or an AudioWorkletNode\n * @param bufferSize - the buffer size in frames to be used in ScriptProcessorNode only, since AudioWorkletNode always uses 128 frames\n * @returns the compiled monophonic or polyphonic WebAudio node or 'null' if failure\n */\n createFaustNode(\n context: BaseAudioContext,\n name: string,\n code: string,\n sp?: boolean,\n bufferSize?: number,\n ): Promise<IFaustMonoWebAudioNode | IFaustPolyWebAudioNode | null>;\n}\n\nexport interface IFaustMonoDspGenerator extends GeneratorSupportingSoundfiles {\n /**\n * Compile a monophonic DSP factory from given code.\n *\n * @param compiler - the Faust compiler\n * @param name - the DSP name\n * @param code - the DSP code\n * @param args - the compilation parameters\n * @returns the compiled factory or 'null' if failure\n */\n compile(\n compiler: IFaustCompiler,\n name: string,\n code: string,\n args: string\n ): Promise<{\n factory: FaustDspFactory | null;\n name?: string;\n meta?: FaustDspMeta;\n } | null>;\n\n /**\n * Create a monophonic WebAudio node (either ScriptProcessorNode or AudioWorkletNode).\n *\n * @param context - the WebAudio context\n * @param name - DSP name, can be used for processorName\n * @param factory - default is the compiled factory\n * @param sp - whether to compile a ScriptProcessorNode or an AudioWorkletNode\n * @param bufferSize - the buffer size in frames to be used in ScriptProcessorNode only, since AudioWorkletNode always uses 128 frames\n * @param processorName - AudioWorklet Processor name\n * @param processorOptions - Additional AudioWorklet Processor options\n * @returns the compiled WebAudio node or 'null' if failure\n */\n createNode(\n context: BaseAudioContext,\n name?: string,\n factory?: LooseFaustDspFactory,\n sp?: boolean,\n bufferSize?: number,\n processorName?: string,\n processorOptions?: Record<string, any>\n ): Promise<IFaustMonoWebAudioNode | null>;\n\n /**\n * Create a monophonic WebAudio node (either ScriptProcessorNode or AudioWorkletNode).\n *\n * @param context - the WebAudio context\n * @param fftUtils - should be an anonymous class with static methods, without any import from outside\n * @param name - DSP name, can be used for processorName\n * @param factory - default is the compiled factory\n * @param fftOptions - initial FFT options\n * @param processorName - AudioWorklet Processor name\n * @param processorOptions - Additional AudioWorklet Processor options\n * @returns the compiled WebAudio node or 'null' if failure\n */\n createFFTNode(\n context: BaseAudioContext,\n fftUtils: typeof FFTUtils,\n name?: string,\n factory?: LooseFaustDspFactory,\n fftOptions?: Partial<FaustFFTOptionsData>,\n processorName?: string,\n processorOptions?: Record<string, any>\n ): Promise<FaustMonoAudioWorkletNode | null>;\n\n /**\n * Create a monophonic Offline processor.\n *\n * @param sampleRate - the sample rate in Hz\n * @param bufferSize - the buffer size in frames\n * @param factory - default is the compiled factory\n * @param context - if this exists, will be used to fetch soundfiles online\n * @returns the compiled processor or 'null' if failure\n */\n createOfflineProcessor(\n sampleRate: number,\n bufferSize: number,\n factory?: LooseFaustDspFactory,\n context?: BaseAudioContext\n ): Promise<IFaustMonoOfflineProcessor | null>;\n\n /**\n * Get DSP JSON description with its UI and metadata as object.\n *\n * @return the DSP JSON description as object\n */\n getMeta(): FaustDspMeta;\n\n /**\n * Get DSP JSON description with its UI and metadata.\n *\n * @return the DSP JSON description\n */\n getJSON(): string;\n\n /**\n * Get DSP UI description.\n *\n * @return the DSP UI description\n */\n getUI(): FaustUIDescriptor;\n}\n\nexport interface IFaustPolyDspGenerator extends GeneratorSupportingSoundfiles {\n /**\n * Compile a monophonic DSP factory from given code.\n *\n * @param compiler - the Faust compiler\n * @param name - the DSP name\n * @param dspCode - the DSP code ('dspCode' can possibly contain an integrated effect)\n * @param args - the compilation parameters\n * @param effectCode - optional effect DSP code\n * @returns the compiled factory or 'null' if failure\n */\n compile(\n compiler: IFaustCompiler,\n name: string,\n dspCode: string,\n args: string,\n effectCode?: string\n ): Promise<{\n voiceFactory: FaustDspFactory | null;\n effectFactory?: FaustDspFactory | null;\n } | null>;\n\n /**\n * Create a polyphonic WebAudio node (either ScriptProcessorNode or AudioWorkletNode).\n *\n * @param context the WebAudio context\n * @param voices - the number of voices\n * @param name - AudioWorklet Processor name\n * @param voiceFactory - the Faust factory for voices, either obtained with a compiler (createDSPFactory) or loaded from files (loadDSPFactory)\n * @param mixerModule - the wasm Mixer module (loaded from 'mixer32.wasm' or 'mixer64.wasm' files located in the 'faustwasm' package)\n * @param effectFactory - the Faust factory for the effect, either obtained with a compiler (createDSPFactory) or loaded from files (loadDSPFactory)\n * @param sp - whether to compile a ScriptProcessorNode or an AudioWorkletNode\n * @param bufferSize - the buffer size in frames to be used in ScriptProcessorNode only, since AudioWorkletNode always uses 128 frames\n * @param processorOptions - Additional AudioWorklet Processor options\n * @returns the compiled WebAudio node or 'null' if failure\n */\n createNode(\n context: BaseAudioContext,\n voices: number,\n name?: string,\n voiceFactory?: LooseFaustDspFactory,\n mixerModule?: WebAssembly.Module,\n effectFactory?: LooseFaustDspFactory | null,\n sp?: boolean,\n bufferSize?: number,\n processorName?: string,\n processorOptions?: Record<string, any>\n ): Promise<IFaustPolyWebAudioNode | null>;\n\n /**\n * Create a monophonic Offline processor.\n *\n * @param sampleRate - the sample rate in Hz\n * @param bufferSize - the buffer size in frames\n * @param voiceFactory - the Faust factory for voices, either obtained with a compiler (createDSPFactory) or loaded from files (loadDSPFactory)\n * @param mixerModule - the wasm Mixer module (loaded from 'mixer32.wasm' or 'mixer64.wasm' files)\n * @param effectFactory - the Faust factory for the effect, either obtained with a compiler (createDSPFactory) or loaded from files (loadDSPFactory)\n * @param context - if this exists, will be used to fetch soundfiles online\n * @returns the compiled processor or 'null' if failure\n */\n createOfflineProcessor(\n sampleRate: number,\n bufferSize: number,\n voices: number,\n voiceFactory?: LooseFaustDspFactory,\n mixerModule?: WebAssembly.Module,\n effectFactory?: LooseFaustDspFactory | null,\n context?: BaseAudioContext\n ): Promise<IFaustPolyOfflineProcessor | null>;\n\n /**\n * Get DSP JSON description with its UI and metadata as object.\n *\n * @return the DSP JSON description as object\n */\n getMeta(): FaustDspMeta;\n\n /**\n * Get DSP JSON description with its UI and metadata.\n *\n * @return the DSP JSON description\n */\n getJSON(): string;\n\n /**\n * Get DSP UI description.\n *\n * @return the DSP UI description\n */\n getUI(): FaustUIDescriptor;\n}\n\nexport class FaustMonoDspGenerator implements IFaustMonoDspGenerator {\n // Set of all created WorkletProcessors, each of them has to be unique\n private static gWorkletProcessors: Map<BaseAudioContext, Set<string>> =\n new Map();\n\n name: string;\n factory!: FaustDspFactory | null;\n\n constructor() {\n this.factory = null;\n }\n async compile(\n compiler: IFaustCompiler,\n name: string,\n code: string,\n args: string\n ) {\n this.factory = await compiler.createMonoDSPFactory(name, code, args);\n if (this.factory) {\n this.name = name;\n return this;\n } else {\n return null;\n }\n }\n\n addSoundfiles(soundfileMap: Record<string, AudioData>) {\n if (!this.factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n for (const id in soundfileMap) {\n this.factory.soundfiles[id] = soundfileMap[id];\n }\n }\n getSoundfileList() {\n if (!this.factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n const meta = JSON.parse(this.factory.json);\n const map = SoundfileReader.findSoundfilesFromMeta(meta);\n if (!map) return [];\n return Object.keys(map);\n }\n\n async createNode<SP extends boolean = false>(\n context: BaseAudioContext,\n name = this.name,\n factory = this.factory as LooseFaustDspFactory,\n sp = false as SP,\n bufferSize = 1024,\n processorName = factory?.shaKey || name,\n processorOptions: Record<string, any> = {}\n ): Promise<\n SP extends true\n ? FaustMonoScriptProcessorNode | null\n : FaustMonoAudioWorkletNode | null\n > {\n if (!factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const meta = JSON.parse(factory.json);\n const sampleSize = meta.compile_options.match('-double') ? 8 : 4;\n factory.soundfiles = await SoundfileReader.loadSoundfiles(\n meta,\n factory.soundfiles || {},\n context\n );\n if (sp) {\n const instance =\n await FaustWasmInstantiator.createAsyncMonoDSPInstance(factory);\n const monoDsp = new FaustMonoWebAudioDsp(\n instance,\n context.sampleRate,\n sampleSize,\n bufferSize,\n factory.soundfiles\n );\n\n const sp = context.createScriptProcessor(\n bufferSize,\n monoDsp.getNumInputs(),\n monoDsp.getNumOutputs()\n ) as FaustMonoScriptProcessorNode;\n Object.setPrototypeOf(sp, FaustMonoScriptProcessorNode.prototype);\n sp.setupNode(monoDsp);\n return sp as SP extends true\n ? FaustMonoScriptProcessorNode\n : FaustMonoAudioWorkletNode;\n } else {\n // Dynamically create AudioWorkletProcessor if code not yet created\n if (!FaustMonoDspGenerator.gWorkletProcessors.has(context))\n FaustMonoDspGenerator.gWorkletProcessors.set(\n context,\n new Set()\n );\n if (\n !FaustMonoDspGenerator.gWorkletProcessors\n .get(context)\n ?.has(processorName)\n ) {\n try {\n const processorCode = `\n// DSP name and JSON string for DSP are generated\nconst faustData = ${JSON.stringify({\n processorName,\n dspName: name,\n dspMeta: meta,\n poly: false\n } as FaustData)};\n// Implementation needed classes of functions\nvar ${FaustDspInstance.name} = ${FaustDspInstance.toString()}\nvar FaustDspInstance = ${FaustDspInstance.name};\nvar ${FaustBaseWebAudioDsp.name} = ${FaustBaseWebAudioDsp.toString()}\nvar FaustBaseWebAudioDsp = ${FaustBaseWebAudioDsp.name};\nvar ${FaustMonoWebAudioDsp.name} = ${FaustMonoWebAudioDsp.toString()}\nvar FaustMonoWebAudioDsp = ${FaustMonoWebAudioDsp.name};\nvar ${FaustWasmInstantiator.name} = ${FaustWasmInstantiator.toString()}\nvar FaustWasmInstantiator = ${FaustWasmInstantiator.name};\nvar ${Soundfile.name} = ${Soundfile.toString()}\nvar Soundfile = ${Soundfile.name};\nvar ${WasmAllocator.name} = ${WasmAllocator.toString()}\nvar WasmAllocator = ${WasmAllocator.name};\nvar ${FaustSensors.name} = ${FaustSensors.toString()}\nvar FaustSensors = ${FaustSensors.name};\nvar ${FaustAudioWorkletCommunicator.name} = ${FaustAudioWorkletCommunicator.toString()}\nvar FaustAudioWorkletCommunicator = ${FaustAudioWorkletCommunicator.name};\nvar ${FaustAudioWorkletProcessorCommunicator.name} = ${FaustAudioWorkletProcessorCommunicator.toString()}\nvar FaustAudioWorkletProcessorCommunicator = ${FaustAudioWorkletProcessorCommunicator.name};\n// Put them in dependencies\nconst dependencies = {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n FaustWasmInstantiator,\n FaustAudioWorkletProcessorCommunicator\n};\n// Generate the actual AudioWorkletProcessor code\n(${getFaustAudioWorkletProcessor.toString()})(dependencies, faustData);\n`;\n const url = URL.createObjectURL(\n new Blob([processorCode], { type: 'text/javascript' })\n );\n await context.audioWorklet.addModule(url);\n // Keep the DSP name\n FaustMonoDspGenerator.gWorkletProcessors\n .get(context)\n ?.add(processorName);\n } catch (e) {\n // console.error(`=> exception raised while running createMonoNode: ${e}`);\n // console.error(`=> check that your page is served using https.${e}`);\n throw e;\n }\n }\n // Create the AWN\n const node = new FaustMonoAudioWorkletNode(context, {\n processorOptions: {\n name: processorName,\n factory,\n sampleSize,\n ...processorOptions\n }\n });\n\n return node as SP extends true\n ? FaustMonoScriptProcessorNode\n : FaustMonoAudioWorkletNode;\n }\n }\n\n async createFFTNode(\n context: BaseAudioContext,\n fftUtils: typeof FFTUtils,\n name = this.name,\n factory = this.factory as LooseFaustDspFactory,\n fftOptions: Partial<FaustFFTOptionsData> = {},\n processorName = factory?.shaKey ? `${factory.shaKey}_fft` : name,\n processorOptions: Record<string, any> = {}\n ): Promise<FaustMonoAudioWorkletNode | null> {\n if (!factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const meta: FaustDspMeta = JSON.parse(factory.json);\n const sampleSize = meta.compile_options.match('-double') ? 8 : 4;\n factory.soundfiles = await SoundfileReader.loadSoundfiles(\n meta,\n factory.soundfiles || {},\n context\n );\n // Dynamically create AudioWorkletProcessor if code not yet created\n if (!FaustMonoDspGenerator.gWorkletProcessors.has(context))\n FaustMonoDspGenerator.gWorkletProcessors.set(context, new Set());\n if (\n !FaustMonoDspGenerator.gWorkletProcessors\n .get(context)\n ?.has(processorName)\n ) {\n try {\n const processorCode = `\n// DSP name and JSON string for DSP are generated\nconst faustData = ${JSON.stringify({\n processorName,\n dspName: name,\n dspMeta: meta,\n fftOptions\n } as FaustFFTData)};\n// Implementation needed classes of functions\nvar ${FaustDspInstance.name} = ${FaustDspInstance.toString()}\nvar FaustDspInstance = ${FaustDspInstance.name};\nvar ${FaustBaseWebAudioDsp.name} = ${FaustBaseWebAudioDsp.toString()}\nvar FaustBaseWebAudioDsp = ${FaustBaseWebAudioDsp.name};\nvar ${FaustMonoWebAudioDsp.name} = ${FaustMonoWebAudioDsp.toString()}\nvar FaustMonoWebAudioDsp = ${FaustMonoWebAudioDsp.name};\nvar ${FaustWasmInstantiator.name} = ${FaustWasmInstantiator.toString()}\nvar FaustWasmInstantiator = ${FaustWasmInstantiator.name};\nvar ${Soundfile.name} = ${Soundfile.toString()}\nvar Soundfile = ${Soundfile.name};\nvar ${WasmAllocator.name} = ${WasmAllocator.toString()}\nvar WasmAllocator = ${WasmAllocator.name};\nvar ${FaustSensors.name} = ${FaustSensors.toString()}\nvar FaustSensors = ${FaustSensors.name};\nvar ${FaustAudioWorkletCommunicator.name} = ${FaustAudioWorkletCommunicator.toString()}\nvar FaustAudioWorkletCommunicator = ${FaustAudioWorkletCommunicator.name};\nvar ${FaustAudioWorkletProcessorCommunicator.name} = ${FaustAudioWorkletProcessorCommunicator.toString()}\nvar FaustAudioWorkletProcessorCommunicator = ${FaustAudioWorkletProcessorCommunicator.name};\nvar FFTUtils = ${fftUtils.toString()}\n// Put them in dependencies\nconst dependencies = {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n FaustWasmInstantiator,\n FaustAudioWorkletProcessorCommunicator,\n FFTUtils\n};\n// Generate the actual AudioWorkletProcessor code\n(${getFaustFFTAudioWorkletProcessor.toString()})(dependencies, faustData);\n`;\n const url = URL.createObjectURL(\n new Blob([processorCode], { type: 'text/javascript' })\n );\n await context.audioWorklet.addModule(url);\n // Keep the DSP name\n FaustMonoDspGenerator.gWorkletProcessors\n .get(context)\n ?.add(processorName);\n } catch (e) {\n // console.error(`=> exception raised while running createMonoNode: ${e}`);\n // console.error(`=> check that your page is served using https.${e}`);\n throw e;\n }\n }\n // Create the AWN\n const node = new FaustMonoAudioWorkletNode(context, {\n channelCount: Math.max(1, Math.ceil(meta.inputs / 3)),\n outputChannelCount: [Math.ceil(meta.outputs / 2)],\n processorOptions: {\n name: processorName,\n factory,\n sampleSize,\n ...processorOptions\n }\n });\n if (fftOptions.fftSize) {\n const param = node.parameters.get('fftSize');\n if (param) param.value = fftOptions.fftSize;\n }\n if (fftOptions.fftOverlap) {\n const param = node.parameters.get('fftOverlap');\n if (param) param.value = fftOptions.fftOverlap;\n }\n if (typeof fftOptions.defaultWindowFunction === 'number') {\n const param = node.parameters.get('windowFunction');\n if (param) param.value = fftOptions.defaultWindowFunction + 1;\n }\n if (typeof fftOptions.noIFFT === 'boolean') {\n const param = node.parameters.get('noIFFT');\n if (param) param.value = +fftOptions.noIFFT;\n }\n return node;\n }\n\n async createAudioWorkletProcessor(\n name = this.name,\n factory = this.factory as LooseFaustDspFactory,\n processorName = factory?.shaKey || name\n ) {\n if (!factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const meta = JSON.parse(factory.json);\n const dependencies = {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n FaustWasmInstantiator,\n FaustAudioWorkletProcessorCommunicator,\n FaustPolyWebAudioDsp: undefined,\n FaustWebAudioDspVoice: undefined\n };\n // const sampleSize = meta.compile_options.match(\"-double\") ? 8 : 4;\n // Dynamically create AudioWorkletProcessor if code not yet created\n try {\n // DSP name and JSON string for DSP are generated\n const faustData = {\n processorName,\n dspName: name,\n dspMeta: meta,\n poly: false\n } as FaustData;\n // Generate the actual AudioWorkletProcessor code\n const Processor = getFaustAudioWorkletProcessor(\n dependencies,\n faustData\n );\n return Processor;\n } catch (e) {\n // console.error(`=> exception raised while running createMonoNode: ${e}`);\n // console.error(`=> check that your page is served using https.${e}`);\n throw e;\n }\n }\n\n async createOfflineProcessor(\n sampleRate: number,\n bufferSize: number,\n factory = this.factory as LooseFaustDspFactory,\n context?: BaseAudioContext\n ) {\n if (!factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const meta = JSON.parse(factory.json);\n const instance =\n await FaustWasmInstantiator.createAsyncMonoDSPInstance(factory);\n const sampleSize = meta.compile_options.match('-double') ? 8 : 4;\n if (context)\n factory.soundfiles = await SoundfileReader.loadSoundfiles(\n meta,\n factory.soundfiles || {},\n context\n );\n const monoDsp = new FaustMonoWebAudioDsp(\n instance,\n sampleRate,\n sampleSize,\n bufferSize,\n factory.soundfiles\n );\n return new FaustMonoOfflineProcessor(monoDsp, bufferSize);\n }\n\n getMeta() {\n return JSON.parse(this.factory!.json);\n }\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n getUI() {\n return this.getMeta().ui;\n }\n}\n\nexport class FaustPolyDspGenerator implements IFaustPolyDspGenerator {\n // Set of all created WorkletProcessors, each of them has to be unique\n private static gWorkletProcessors: Map<BaseAudioContext, Set<string>> =\n new Map();\n\n name: string;\n voiceFactory!: FaustDspFactory | null;\n effectFactory!: FaustDspFactory | null;\n mixerBuffer!: Uint8Array;\n mixerModule!: WebAssembly.Module;\n\n constructor() {\n this.voiceFactory = null;\n this.effectFactory = null;\n }\n async compile(\n compiler: IFaustCompiler,\n name: string,\n dspCodeAux: string,\n args: string,\n // The ${dspCode} has to be added with wrapping new lines to make it properly formatted and ready to compile\n effectCodeAux = `dsp_code = environment{\n ${dspCodeAux}\n };\n process = dsp_code.effect;`\n ) {\n // Try to compile effect, possibly failing\n try {\n this.effectFactory = await compiler.createPolyDSPFactory(\n name,\n effectCodeAux,\n args\n );\n // Since the effect is processing the same buffers for inputs and outputs (in place processing),\n // the voice and effect are adapted, possibly clearing buffers\n if (this.effectFactory) {\n const effectJSON = JSON.parse(this.effectFactory.json);\n const dspCode = `\\\n// Voice output is forced to 2, when DSP is stereo or effect has 2 ins or 2 outs,\n// so that the effect can process the 2 channels of the voice\nadaptOut(1,1,1) = _;\nadaptOut(1,1,2) = _ <: _,0; // The left channel only is kept\nadaptOut(1,2,1) = _ <: _,_;\nadaptOut(1,2,2) = _ <: _,_;\nadaptOut(2,1,1) = _,_;\nadaptOut(2,1,2) = _,_;\nadaptOut(2,2,1) = _,_;\nadaptOut(2,2,2) = _,_;\nadaptor(F) = adaptOut(outputs(F),${effectJSON.inputs},${effectJSON.outputs});\ndsp_code = environment{\n ${dspCodeAux}\n};\nprocess = dsp_code.process : adaptor(dsp_code.process);\n`;\n const effectCode = `\\\n// Inputs\nadaptIn(1,1,1) = _;\nadaptIn(1,1,2) = _,_ :> _; \nadaptIn(1,2,1) = _,_;\nadaptIn(1,2,2) = _,_;\nadaptIn(2,1,1) = _,_ :> _;\nadaptIn(2,1,2) = _,_ :> _;\nadaptIn(2,2,1) = _,_;\nadaptIn(2,2,2) = _,_;\n// Outputs\nadaptOut(1,1) = _ <: _,0; // The left channel only is kept\nadaptOut(1,2) = _,_;\nadaptOut(2,1) = _ <: _,0; // The left channel only is kept\nadaptOut(2,2) = _,_;\nadaptorIns(F) = adaptIn(outputs(F),${effectJSON.inputs},${effectJSON.outputs});\nadaptorOuts = adaptOut(${effectJSON.inputs},${effectJSON.outputs});\ndsp_code = environment{\n ${dspCodeAux}\n};\nprocess = adaptorIns(dsp_code.process) : dsp_code.effect : adaptorOuts;\n`;\n this.voiceFactory = await compiler.createPolyDSPFactory(\n name,\n dspCode,\n args\n );\n try {\n // Effect is processing same buffers for inputs and outputs, so has to use -inpl option\n this.effectFactory = await compiler.createPolyDSPFactory(\n name,\n effectCode,\n args + ' -inpl'\n );\n } catch (e) {\n console.warn(e);\n }\n }\n } catch (e) {\n // Hack to detect 'undefined effect' symbol error, when no effect is defined in the polyphonic code.\n // The error message is not printed to avoid confusing the user.\n const errorMessage =\n e instanceof Error ? e.message : String(e ?? 'unknown error');\n if (!errorMessage.includes('undefined symbol : effect')) {\n console.warn(e);\n }\n this.voiceFactory = await compiler.createPolyDSPFactory(\n name,\n dspCodeAux,\n args\n );\n }\n\n if (this.voiceFactory) {\n this.name = name;\n const voiceMeta = JSON.parse(this.voiceFactory.json);\n const isDouble = voiceMeta.compile_options.match('-double');\n const { mixerBuffer, mixerModule } =\n await compiler.getAsyncInternalMixerModule(!!isDouble);\n this.mixerBuffer = mixerBuffer;\n this.mixerModule = mixerModule;\n return this;\n } else {\n return null;\n }\n }\n\n addSoundfiles(soundfileMap: Record<string, AudioData>) {\n if (!this.voiceFactory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n for (const id in soundfileMap) {\n this.voiceFactory.soundfiles[id] = soundfileMap[id];\n }\n }\n getSoundfileList() {\n if (!this.voiceFactory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n const meta = JSON.parse(this.voiceFactory.json);\n const map = SoundfileReader.findSoundfilesFromMeta(meta);\n if (!map) return [];\n if (!this.effectFactory) return Object.keys(map);\n const effectMeta = JSON.parse(this.effectFactory.json);\n const effectMap = SoundfileReader.findSoundfilesFromMeta(effectMeta);\n return Object.keys({ ...effectMap, ...map });\n }\n\n async createNode<SP extends boolean = false>(\n context: BaseAudioContext,\n voices: number,\n name = this.name,\n voiceFactory = this.voiceFactory as LooseFaustDspFactory,\n mixerModule = this.mixerModule,\n effectFactory = this.effectFactory as LooseFaustDspFactory | null,\n sp = false as SP,\n bufferSize = 1024,\n processorName = (voiceFactory?.shaKey || '') +\n (effectFactory?.shaKey || '') || `${name}_poly`,\n processorOptions = {}\n ): Promise<\n SP extends true\n ? FaustPolyScriptProcessorNode | null\n : FaustPolyAudioWorkletNode | null\n > {\n if (!voiceFactory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const voiceMeta = JSON.parse(voiceFactory.json);\n const effectMeta = effectFactory\n ? JSON.parse(effectFactory.json)\n : undefined;\n const sampleSize = voiceMeta.compile_options.match('-double') ? 8 : 4;\n voiceFactory.soundfiles = await SoundfileReader.loadSoundfiles(\n voiceMeta,\n voiceFactory.soundfiles || {},\n context\n );\n if (effectFactory)\n effectFactory.soundfiles = await SoundfileReader.loadSoundfiles(\n effectMeta,\n effectFactory.soundfiles || {},\n context\n );\n if (sp) {\n const instance =\n await FaustWasmInstantiator.createAsyncPolyDSPInstance(\n voiceFactory,\n mixerModule,\n voices,\n effectFactory || undefined\n );\n const soundfiles = {\n ...effectFactory?.soundfiles,\n ...voiceFactory.soundfiles\n };\n const polyDsp = new FaustPolyWebAudioDsp(\n instance,\n context.sampleRate,\n sampleSize,\n bufferSize,\n soundfiles\n );\n\n const sp = context.createScriptProcessor(\n bufferSize,\n polyDsp.getNumInputs(),\n polyDsp.getNumOutputs()\n ) as FaustPolyScriptProcessorNode;\n Object.setPrototypeOf(sp, FaustPolyScriptProcessorNode.prototype);\n sp.setupNode(polyDsp);\n return sp as SP extends true\n ? FaustPolyScriptProcessorNode\n : FaustPolyAudioWorkletNode;\n } else {\n // Dynamically create AudioWorkletProcessor if code not yet created\n if (!FaustPolyDspGenerator.gWorkletProcessors.has(context))\n FaustPolyDspGenerator.gWorkletProcessors.set(\n context,\n new Set()\n );\n if (\n !FaustPolyDspGenerator.gWorkletProcessors\n .get(context)\n ?.has(processorName)\n ) {\n try {\n const processorCode = `\n// DSP name and JSON string for DSP are generated\nconst faustData = ${JSON.stringify({\n processorName,\n dspName: name,\n dspMeta: voiceMeta,\n poly: true,\n effectMeta\n } as FaustData)};\n// Implementation needed classes of functions\nvar ${FaustDspInstance.name} = ${FaustDspInstance.toString()}\nvar FaustDspInstance = ${FaustDspInstance.name};\nvar ${FaustBaseWebAudioDsp.name} = ${FaustBaseWebAudioDsp.toString()}\nvar FaustBaseWebAudioDsp = ${FaustBaseWebAudioDsp.name};\nvar ${FaustPolyWebAudioDsp.name} = ${FaustPolyWebAudioDsp.toString()}\nvar FaustPolyWebAudioDsp = ${FaustPolyWebAudioDsp.name};\nvar ${FaustWebAudioDspVoice.name} = ${FaustWebAudioDspVoice.toString()}\nvar FaustWebAudioDspVoice = ${FaustWebAudioDspVoice.name};\nvar ${FaustWasmInstantiator.name} = ${FaustWasmInstantiator.toString()}\nvar FaustWasmInstantiator = ${FaustWasmInstantiator.name};\nvar ${Soundfile.name} = ${Soundfile.toString()}\nvar Soundfile = ${Soundfile.name};\nvar ${WasmAllocator.name} = ${WasmAllocator.toString()}\nvar WasmAllocator = ${WasmAllocator.name};\nvar ${FaustSensors.name} = ${FaustSensors.toString()}\nvar FaustSensors = ${FaustSensors.name};\nvar ${FaustAudioWorkletCommunicator.name} = ${FaustAudioWorkletCommunicator.toString()}\nvar FaustAudioWorkletCommunicator = ${FaustAudioWorkletCommunicator.name};\nvar ${FaustAudioWorkletProcessorCommunicator.name} = ${FaustAudioWorkletProcessorCommunicator.toString()}\nvar FaustAudioWorkletProcessorCommunicator = ${FaustAudioWorkletProcessorCommunicator.name};\n// Put them in dependencies\nconst dependencies = {\n FaustBaseWebAudioDsp,\n FaustPolyWebAudioDsp,\n FaustWasmInstantiator,\n FaustAudioWorkletProcessorCommunicator\n};\n// Generate the actual AudioWorkletProcessor code\n(${getFaustAudioWorkletProcessor.toString()})(dependencies, faustData);\n`;\n const url = URL.createObjectURL(\n new Blob([processorCode], { type: 'text/javascript' })\n );\n await context.audioWorklet.addModule(url);\n // Keep the DSP name\n FaustPolyDspGenerator.gWorkletProcessors\n .get(context)\n ?.add(processorName);\n } catch (e) {\n // console.error(`=> exception raised while running createPolyNode: ${e}`);\n // console.error(`=> check that your page is served using https.${e}`);\n throw e;\n }\n }\n // Create the AWN\n // `addModule` above resolves even when the module's top-level code\n // throws \u2014 the browser reports that as an unhandled error inside\n // the AudioWorkletGlobalScope rather than as a load failure. So a\n // processor that failed to register only shows up here, as\n // \"the node name '<name>' is not defined\", which reads as a naming\n // or loading problem and says nothing about the real cause. Point\n // the caller at the worklet console, where the actual error is.\n let node: FaustPolyAudioWorkletNode;\n try {\n node = new FaustPolyAudioWorkletNode(context, {\n processorOptions: {\n name: processorName,\n voiceFactory,\n mixerModule,\n voices,\n sampleSize,\n effectFactory: effectFactory || undefined,\n ...processorOptions\n }\n });\n } catch (error) {\n throw new Error(\n `Faust: the AudioWorkletProcessor \"${processorName}\" did not register. ` +\n `The module loaded, so the failure happened inside registerProcessor \u2014 ` +\n `its error is reported in the AudioWorklet scope and appears in the ` +\n `browser console above this one. A duplicate control path shared ` +\n `between \\`process\\` and \\`effect\\` is the usual cause. ` +\n `Original error: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n return node as SP extends true\n ? FaustPolyScriptProcessorNode\n : FaustPolyAudioWorkletNode;\n }\n }\n\n async createAudioWorkletProcessor(\n name = this.name,\n voiceFactory = this.voiceFactory as LooseFaustDspFactory,\n effectFactory = this.effectFactory as LooseFaustDspFactory | null,\n processorName = (voiceFactory?.shaKey || '') +\n (effectFactory?.shaKey || '') || `${name}_poly`\n ) {\n if (!voiceFactory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const voiceMeta = JSON.parse(voiceFactory.json);\n const effectMeta = effectFactory\n ? JSON.parse(effectFactory.json)\n : undefined;\n const sampleSize = voiceMeta.compile_options.match('-double') ? 8 : 4;\n // Dynamically create AudioWorkletProcessor if code not yet created\n try {\n const dependencies = {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp: undefined,\n FaustWasmInstantiator,\n FaustPolyWebAudioDsp,\n FaustWebAudioDspVoice,\n FaustAudioWorkletProcessorCommunicator\n };\n // DSP name and JSON string for DSP are generated\n const faustData = {\n processorName,\n dspName: name,\n dspMeta: voiceMeta,\n poly: true,\n effectMeta\n } as FaustData;\n // Generate the actual AudioWorkletProcessor code\n const Processor = getFaustAudioWorkletProcessor<true>(\n dependencies,\n faustData\n );\n return Processor;\n } catch (e) {\n // console.error(`=> exception raised while running createPolyNode: ${e}`);\n // console.error(`=> check that your page is served using https.${e}`);\n throw e;\n }\n }\n\n async createOfflineProcessor(\n sampleRate: number,\n bufferSize: number,\n voices: number,\n voiceFactory = this.voiceFactory as LooseFaustDspFactory,\n mixerModule = this.mixerModule,\n effectFactory = this.effectFactory as LooseFaustDspFactory | null,\n context?: BaseAudioContext\n ) {\n if (!voiceFactory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const voiceMeta = JSON.parse(voiceFactory.json);\n const effectMeta = effectFactory\n ? JSON.parse(effectFactory.json)\n : undefined;\n const instance = await FaustWasmInstantiator.createAsyncPolyDSPInstance(\n voiceFactory,\n mixerModule,\n voices,\n effectFactory || undefined\n );\n const sampleSize = voiceMeta.compile_options.match('-double') ? 8 : 4;\n if (context) {\n voiceFactory.soundfiles = await SoundfileReader.loadSoundfiles(\n voiceMeta,\n voiceFactory.soundfiles || {},\n context\n );\n if (effectFactory)\n effectFactory.soundfiles = await SoundfileReader.loadSoundfiles(\n effectMeta,\n effectFactory.soundfiles || {},\n context\n );\n }\n const soundfiles = {\n ...effectFactory?.soundfiles,\n ...voiceFactory.soundfiles\n };\n const polyDsp = new FaustPolyWebAudioDsp(\n instance,\n sampleRate,\n sampleSize,\n bufferSize,\n soundfiles\n );\n return new FaustPolyOfflineProcessor(polyDsp, bufferSize);\n }\n\n getMeta() {\n const o = this.voiceFactory ? JSON.parse(this.voiceFactory.json) : null;\n const e = this.effectFactory\n ? JSON.parse(this.effectFactory.json)\n : null;\n const r = { ...o };\n if (e) {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Sequencer',\n items: [\n { type: 'vgroup', label: 'Instrument', items: o.ui },\n { type: 'vgroup', label: 'Effect', items: e.ui }\n ]\n }\n ];\n } else {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Polyphonic',\n items: [{ type: 'vgroup', label: 'Voices', items: o.ui }]\n }\n ];\n }\n return r as FaustDspMeta;\n }\n\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n\n getUI() {\n return this.getMeta().ui;\n }\n}\n\ninterface JSONData {\n meta: Array<{ options?: string }>;\n}\n\nexport class FaustDspGenerator implements IFaustDspGenerator {\n \n private static compilerPromise: Promise<FaustCompiler> | null = null;\n \n // Analyze the metadata of a Faust JSON file and extract the [midi:on] and [nvoices:n] options\n private extractMidiAndNvoices(\n jsonData: JSONData\n ): { midi: boolean; nvoices: number } {\n const optionsMetadata = jsonData.meta.find((meta) => meta.options);\n if (optionsMetadata && optionsMetadata.options) {\n const options = optionsMetadata.options;\n\n const midiRegex = /\\[midi:(on|off)\\]/;\n const nvoicesRegex = /\\[nvoices:(\\d+)\\]/;\n\n const midiMatch = options.match(midiRegex);\n const nvoicesMatch = options.match(nvoicesRegex);\n\n const midi = midiMatch ? midiMatch[1] === 'on' : false;\n const nvoices = nvoicesMatch ? parseInt(nvoicesMatch[1], 10) : -1;\n\n return { midi, nvoices };\n } else {\n return { midi: false, nvoices: -1 };\n }\n }\n \n /**\n * Compile DSP code, inspect metadata for [nvoices:] (and optionally [midi:on]), and build either a mono\n * or poly WebAudio node (ScriptProcessor or AudioWorklet depending on `sp`). Compilation uses a shared,\n * lazily-created libfaust instance to avoid repeatedly instantiating the WASM compiler.\n */\n async createFaustNode(\n context: BaseAudioContext,\n name: string,\n code: string,\n sp?: boolean,\n bufferSize?: number,\n ): Promise<IFaustMonoWebAudioNode | IFaustPolyWebAudioNode | null> {\n const getCompiler = async () => {\n if (!FaustDspGenerator.compilerPromise) {\n // Resolve libfaust-wasm assets relative to current script/page location (works in browser and bundlers).\n // Falling back to document/baseURI keeps things working when import.meta.url is unavailable (es2019 target).\n const baseURL =\n (typeof document !== 'undefined'\n ? ('src' in (document.currentScript || {})\n ? (document.currentScript as HTMLScriptElement)\n .src\n : document.baseURI)\n : undefined) ||\n (typeof window !== 'undefined'\n ? window.location.href\n : undefined);\n if (!baseURL)\n throw new Error('Cannot resolve libfaust-wasm location.');\n const jsURL = new URL(\n '../libfaust-wasm/libfaust-wasm.js',\n baseURL\n ).href;\n const dataURL = jsURL.replace(/c?js$/, 'data');\n const wasmURL = jsURL.replace(/c?js$/, 'wasm');\n FaustDspGenerator.compilerPromise =\n instantiateFaustModuleFromFile(\n jsURL,\n dataURL,\n wasmURL\n ).then((module) => new FaustCompiler(new LibFaust(module)));\n }\n return FaustDspGenerator.compilerPromise;\n };\n\n const args = '-ftz 2';\n\n try {\n const compiler = await getCompiler();\n // First compile as mono to inspect metadata for nvoices/midi tags; if nvoices > 0 we recompile as poly.\n const monoGenerator = new FaustMonoDspGenerator();\n const compiledMono = await monoGenerator.compile(\n compiler,\n name,\n code,\n args\n );\n if (!compiledMono) return null;\n\n // Extract nvoices from metadata\n const { nvoices } = this.extractMidiAndNvoices(\n monoGenerator.getMeta() as unknown as JSONData\n );\n\n // If nvoices > 0, recompile as polyphonic\n if (nvoices > 0) {\n const polyGenerator = new FaustPolyDspGenerator();\n const compiledPoly = await polyGenerator.compile(\n compiler,\n name,\n code,\n args\n );\n if (!compiledPoly) return null;\n\n // Poly creation: combine voice/effect factories, create node with requested SP/AWN and buffer size.\n return await polyGenerator.createNode(\n context,\n nvoices,\n name,\n undefined,\n undefined,\n undefined,\n sp,\n bufferSize\n );\n }\n\n // Mono creation path when no polyphony hint is present.\n return await monoGenerator.createNode(\n context,\n name,\n undefined,\n sp,\n bufferSize\n );\n } catch (e) {\n console.error(e);\n return null;\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["var FaustModule=(()=>{var _scriptName=globalThis.document?.currentScript?.src;return async function(moduleArg={}){var Module=moduleArg;(function(){function humanReadableVersionToPacked(str){str=str.split(\"-\")[0];var vers=str.split(\".\").slice(0,3);while(vers.length<3)vers.push(\"00\");vers=vers.map((n,i,arr)=>n.padStart(2,\"0\"));return vers.join(\"\")}var packedVersionToHumanReadable=n=>[n/1e4|0,(n/100|0)%100,n%100].join(\".\");var TARGET_NOT_SUPPORTED=2147483647;if(typeof process!==\"undefined\"&&!process.versions?.bun&&typeof Deno==\"undefined\"){var currentNodeVersion=process.versions?.node?humanReadableVersionToPacked(process.versions.node):TARGET_NOT_SUPPORTED;if(currentNodeVersion<180300){throw new Error(`This emscripten-generated code requires node v${packedVersionToHumanReadable(180300)} (detected v${packedVersionToHumanReadable(currentNodeVersion)})`)}}var userAgent=typeof navigator!==\"undefined\"&&navigator.userAgent;if(!userAgent){return}var currentSafariVersion=userAgent.includes(\"Safari/\")&&!userAgent.includes(\"Chrome/\")&&userAgent.match(/Version\\/(\\d+\\.?\\d*\\.?\\d*)/)?humanReadableVersionToPacked(userAgent.match(/Version\\/(\\d+\\.?\\d*\\.?\\d*)/)[1]):TARGET_NOT_SUPPORTED;if(currentSafariVersion<15e4){throw new Error(`This emscripten-generated code requires Safari v${packedVersionToHumanReadable(15e4)} (detected v${currentSafariVersion})`)}var currentFirefoxVersion=userAgent.match(/Firefox\\/(\\d+(?:\\.\\d+)?)/)?parseFloat(userAgent.match(/Firefox\\/(\\d+(?:\\.\\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentFirefoxVersion<79){throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${currentFirefoxVersion})`)}var currentChromeVersion=userAgent.match(/Chrome\\/(\\d+(?:\\.\\d+)?)/)?parseFloat(userAgent.match(/Chrome\\/(\\d+(?:\\.\\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentChromeVersion<85){throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${currentChromeVersion})`)}})();var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!=\"renderer\";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(!Module[\"expectedDataFileDownloads\"])Module[\"expectedDataFileDownloads\"]=0;Module[\"expectedDataFileDownloads\"]++;(()=>{var isPthread=typeof ENVIRONMENT_IS_PTHREAD!=\"undefined\"&&ENVIRONMENT_IS_PTHREAD;var isWasmWorker=typeof ENVIRONMENT_IS_WASM_WORKER!=\"undefined\"&&ENVIRONMENT_IS_WASM_WORKER;if(isPthread||isWasmWorker)return;var isNode=globalThis.process&&globalThis.process.versions&&globalThis.process.versions.node&&globalThis.process.type!=\"renderer\";async function loadPackage(metadata){var PACKAGE_PATH=\"\";if(typeof window===\"object\"){PACKAGE_PATH=window[\"encodeURIComponent\"](window.location.pathname.substring(0,window.location.pathname.lastIndexOf(\"/\"))+\"/\")}else if(typeof process===\"undefined\"&&typeof location!==\"undefined\"){PACKAGE_PATH=encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf(\"/\"))+\"/\")}var PACKAGE_NAME=\"libfaust-wasm.data\";var REMOTE_PACKAGE_BASE=\"libfaust-wasm.data\";var REMOTE_PACKAGE_NAME=Module[\"locateFile\"]?Module[\"locateFile\"](REMOTE_PACKAGE_BASE,\"\"):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata[\"remote_package_size\"];async function fetchRemotePackage(packageName,packageSize){if(isNode){var contents=require(\"fs\").readFileSync(packageName);return new Uint8Array(contents).buffer}if(!Module[\"dataFileDownloads\"])Module[\"dataFileDownloads\"]={};try{var response=await fetch(packageName)}catch(e){throw new Error(`Network Error: ${packageName}`,{e})}if(!response.ok){throw new Error(`${response.status}: ${response.url}`)}const chunks=[];const headers=response.headers;const total=Number(headers.get(\"Content-Length\")||packageSize);let loaded=0;Module[\"setStatus\"]&&Module[\"setStatus\"](\"Downloading data...\");const reader=response.body.getReader();while(1){var{done,value}=await reader.read();if(done)break;chunks.push(value);loaded+=value.length;Module[\"dataFileDownloads\"][packageName]={loaded,total};let totalLoaded=0;let totalSize=0;for(const download of Object.values(Module[\"dataFileDownloads\"])){totalLoaded+=download.loaded;totalSize+=download.total}Module[\"setStatus\"]&&Module[\"setStatus\"](`Downloading data... (${totalLoaded}/${totalSize})`)}const packageData=new Uint8Array(chunks.map(c=>c.length).reduce((a,b)=>a+b,0));let offset=0;for(const chunk of chunks){packageData.set(chunk,offset);offset+=chunk.length}return packageData.buffer}var fetchPromise;var fetched=Module[\"getPreloadedPackage\"]&&Module[\"getPreloadedPackage\"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE);if(!fetched){fetchPromise=fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE)}async function runWithFS(Module){function assert(check,msg){if(!check)throw new Error(msg)}Module[\"FS_createPath\"](\"/\",\"usr\",true,true);Module[\"FS_createPath\"](\"/usr\",\"rsrc\",true,true);Module[\"FS_createPath\"](\"/usr\",\"share\",true,true);Module[\"FS_createPath\"](\"/usr/share\",\"faust\",true,true);async function processPackageData(arrayBuffer){assert(arrayBuffer,\"Loading data file failed.\");assert(arrayBuffer.constructor.name===ArrayBuffer.name,\"bad input to processPackageData \"+arrayBuffer.constructor.name);var byteArray=new Uint8Array(arrayBuffer);for(var file of metadata[\"files\"]){var name=file[\"filename\"];var data=byteArray.subarray(file[\"start\"],file[\"end\"]);Module[\"FS_createDataFile\"](name,null,data,true,true,true)}Module[\"removeRunDependency\"](\"datafile_libfaust-wasm.data\")}Module[\"addRunDependency\"](\"datafile_libfaust-wasm.data\");if(!Module[\"preloadResults\"])Module[\"preloadResults\"]={};Module[\"preloadResults\"][PACKAGE_NAME]={fromCache:false};if(!fetched){fetched=await fetchPromise}await processPackageData(fetched)}if(Module[\"FS_createPath\"]){runWithFS(Module)}else{if(!Module[\"preRun\"])Module[\"preRun\"]=[];Module[\"preRun\"].push(runWithFS)}}loadPackage({files:[{filename:\"/usr/rsrc/mixer32.wasm\",start:0,end:502},{filename:\"/usr/rsrc/mixer64.wasm\",start:502,end:1016},{filename:\"/usr/share/faust/aanl.lib\",start:1016,end:36141},{filename:\"/usr/share/faust/all.lib\",start:36141,end:37341},{filename:\"/usr/share/faust/analyzers.lib\",start:37341,end:108022},{filename:\"/usr/share/faust/basics.lib\",start:108022,end:225919},{filename:\"/usr/share/faust/compressors.lib\",start:225919,end:299135},{filename:\"/usr/share/faust/debug.lib\",start:299135,end:345554},{filename:\"/usr/share/faust/delays.lib\",start:345554,end:369237},{filename:\"/usr/share/faust/demos.lib\",start:369237,end:493255},{filename:\"/usr/share/faust/doc.lib\",start:493255,end:494500},{filename:\"/usr/share/faust/dx7.lib\",start:494500,end:514178},{filename:\"/usr/share/faust/effect.lib\",start:514178,end:583208},{filename:\"/usr/share/faust/env.lib\",start:583208,end:595812},{filename:\"/usr/share/faust/envelopes.lib\",start:595812,end:621676},{filename:\"/usr/share/faust/fds.lib\",start:621676,end:645573},{filename:\"/usr/share/faust/filter.lib\",start:645573,end:710959},{filename:\"/usr/share/faust/filters.lib\",start:710959,end:887313},{filename:\"/usr/share/faust/hoa.lib\",start:887313,end:938266},{filename:\"/usr/share/faust/hysteresis.lib\",start:938266,end:952152},{filename:\"/usr/share/faust/instruments.lib\",start:952152,end:961777},{filename:\"/usr/share/faust/interpolators.lib\",start:961777,end:1001572},{filename:\"/usr/share/faust/lfo.lib\",start:1001572,end:1007520},{filename:\"/usr/share/faust/linearalgebra.lib\",start:1007520,end:1017412},{filename:\"/usr/share/faust/math.lib\",start:1017412,end:1038673},{filename:\"/usr/share/faust/maths.lib\",start:1038673,end:1082529},{filename:\"/usr/share/faust/maxmsp.lib\",start:1082529,end:1090734},{filename:\"/usr/share/faust/mi.lib\",start:1090734,end:1110350},{filename:\"/usr/share/faust/misceffects.lib\",start:1110350,end:1165244},{filename:\"/usr/share/faust/motion.lib\",start:1165244,end:1192141},{filename:\"/usr/share/faust/music.lib\",start:1192141,end:1211659},{filename:\"/usr/share/faust/noises.lib\",start:1211659,end:1231180},{filename:\"/usr/share/faust/operator.lib\",start:1231180,end:1244252},{filename:\"/usr/share/faust/oscillator.lib\",start:1244252,end:1264103},{filename:\"/usr/share/faust/oscillators.lib\",start:1264103,end:1340366},{filename:\"/usr/share/faust/phaflangers.lib\",start:1340366,end:1351420},{filename:\"/usr/share/faust/physmodels.lib\",start:1351420,end:1551154},{filename:\"/usr/share/faust/pitchenv.lib\",start:1551154,end:1556670},{filename:\"/usr/share/faust/platform.lib\",start:1556670,end:1560326},{filename:\"/usr/share/faust/quantizers.lib\",start:1560326,end:1572875},{filename:\"/usr/share/faust/reducemaps.lib\",start:1572875,end:1582515},{filename:\"/usr/share/faust/reverbs.lib\",start:1582515,end:1639421},{filename:\"/usr/share/faust/routes.lib\",start:1639421,end:1661563},{filename:\"/usr/share/faust/sf.lib\",start:1661563,end:1662629},{filename:\"/usr/share/faust/signals.lib\",start:1662629,end:1688718},{filename:\"/usr/share/faust/soundfiles.lib\",start:1688718,end:1699399},{filename:\"/usr/share/faust/spats.lib\",start:1699399,end:1720902},{filename:\"/usr/share/faust/stdfaust.lib\",start:1720902,end:1722294},{filename:\"/usr/share/faust/synths.lib\",start:1722294,end:1736159},{filename:\"/usr/share/faust/tonestacks.lib\",start:1736159,end:1759600},{filename:\"/usr/share/faust/tubes.lib\",start:1759600,end:2127898},{filename:\"/usr/share/faust/vaeffects.lib\",start:2127898,end:2208112},{filename:\"/usr/share/faust/version.lib\",start:2208112,end:2209047},{filename:\"/usr/share/faust/wdmodels.lib\",start:2209047,end:2329433},{filename:\"/usr/share/faust/webaudio.lib\",start:2329433,end:2342908}],remote_package_size:2342908})})();if(typeof ENVIRONMENT_IS_WASM_WORKER!=\"undefined\"&&ENVIRONMENT_IS_WASM_WORKER||typeof ENVIRONMENT_IS_PTHREAD!=\"undefined\"&&ENVIRONMENT_IS_PTHREAD||typeof ENVIRONMENT_IS_AUDIO_WORKLET!=\"undefined\"&&ENVIRONMENT_IS_AUDIO_WORKLET)Module[\"preRun\"]=[];var necessaryPreJSTasks=Module[\"preRun\"].slice();if(!Module[\"preRun\"])throw\"Module.preRun should exist because file support used it; did a pre-js delete it?\";necessaryPreJSTasks.forEach(task=>{if(Module[\"preRun\"].indexOf(task)<0)throw\"All preRun tasks that exist before user pre-js code should remain after; did you replace Module or modify Module.preRun?\"});var programArgs=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};if(typeof __filename!=\"undefined\"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory=\"\";function locateFile(path){return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){const isNode=globalThis.process?.versions?.node&&globalThis.process?.type!=\"renderer\";if(!isNode)throw new Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");var fs=require(\"node:fs\");scriptDirectory=__dirname+\"/\";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);assert(Buffer.isBuffer(ret));return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:\"utf8\");assert(binary?Buffer.isBuffer(ret):typeof ret==\"string\");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\\\/g,\"/\")}programArgs=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(\".\",_scriptName).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{assert(!isFileURI(url),\"readAsync does not work with file:// URLs\");var response=await fetch(url,{credentials:\"same-origin\"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+\" : \"+response.url)}}}else{throw new Error(\"environment detection error\")}var out=console.log.bind(console);var err=console.error.bind(console);assert(!ENVIRONMENT_IS_SHELL,\"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)\");var wasmBinary;if(!globalThis.WebAssembly){err(\"no native wasm support detected\")}var ABORT=false;function assert(condition,text){if(!condition){abort(\"Assertion failed\"+(text?\": \"+text:\"\"))}}var isFileURI=filename=>filename.startsWith(\"file://\");class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var runtimeDebug=true;(()=>{var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)abort(\"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)\")})();function consumedModuleProp(prop){var value=Module[prop];var msg=`Attempt to modify \\`Module.${prop}\\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`;if(Array.isArray(value)){value=new Proxy(value,{set(target,key,val){abort(msg);return false},defineProperty(target,key,descriptor){abort(msg);return false},deleteProperty(target,key){abort(msg);return false}})}Object.defineProperty(Module,prop,{configurable:true,get(){return value},set(){abort(msg)}})}function makeInvalidEarlyAccess(name){return()=>assert(false,`call to '${name}' via reference taken before Wasm module initialization`)}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(`\\`Module.${prop}\\` was supplied but \\`${prop}\\` not included in INCOMING_MODULE_JS_API`)}}function isExportedByForceFilesystem(name){return name===\"FS_createPath\"||name===\"FS_createDataFile\"||name===\"FS_createPreloadedFile\"||name===\"FS_preloadFile\"||name===\"FS_unlink\"||name===\"addRunDependency\"||name===\"FS_createLazyFile\"||name===\"FS_createDevice\"||name===\"removeRunDependency\"}function missingLibrarySymbol(sym){unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg=`'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;if(isExportedByForceFilesystem(sym)){msg+=\". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you\"}abort(msg)}})}}const stackCookie1=34821223;const stackCookie2=2310721022;function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[max>>2]=stackCookie1;HEAPU32[max+4>>2]=stackCookie2;HEAPU32[0>>2]=1668509029}function u32ToHexString(num){return\"0x\"+(num>>>0).toString(16).padStart(8,\"0\")}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var val1=HEAPU32[max>>2];var val2=HEAPU32[max+4>>2];if(val1!=stackCookie1||val2!=stackCookie2){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords ${u32ToHexString(stackCookie2)} and ${u32ToHexString(stackCookie1)}, but received ${u32ToHexString(val2)} ${u32ToHexString(val1)}`)}if(HEAPU32[0>>2]!=1668509029){abort(\"Runtime error: The application has corrupted its heap memory area (address zero)!\")}}var runtimeInitialized=false;function getMemoryBuffer(){return wasmMemory.buffer}function updateMemoryViews(){if(HEAP8?.buffer?.resizable)return;var b=getMemoryBuffer();HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}assert(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,\"JS engine does not provide full typed array support\");function preRun(){var preRun=Module[\"preRun\"];if(preRun){if(typeof preRun==\"function\")preRun=[preRun];onPreRuns.push(...preRun)}consumedModuleProp(\"preRun\");callRuntimeCallbacks(onPreRuns)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();if(!Module[\"noFSInit\"]&&!FS.initialized)FS.init();TTY.init();SOCKFS.root=FS.mount(SOCKFS,{},null);wasmExports[\"__wasm_call_ctors\"]();FS.ignorePermissions=false;checkStackCookie()}function postRun(){checkStackCookie()}function abort(what){what=`Aborted(${what})`;err(what);ABORT=true;var e=new WebAssembly.RuntimeError(what);throw e}function createExportWrapper(name,func,nargs){assert(func);return(...args)=>{assert(runtimeInitialized,`native function \\`${name}\\` called before runtime initialization`);assert(args.length<=nargs,`native function \\`${name}\\` called with ${args.length} args but expects ${nargs}`);return func(...args)}}var wasmBinaryFile;function findWasmBinary(){return locateFile(\"libfaust-wasm.wasm\")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);if(isFileURI(binaryFile)){err(`warning: Loading from a file URI (${binaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`)}abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:\"same-origin\"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err(\"falling back to ArrayBuffer instantiation\")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,\"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?\");trueModule=null;return receiveInstance(result[\"instance\"])}var info=getWasmImports();wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name=\"ExitStatus\";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP16;var HEAP32;var HEAP64;var HEAP8;var HEAPF32;var HEAPF64;var HEAPU16;var HEAPU32;var HEAPU64;var HEAPU8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPreRuns=[];function ptrToString(ptr){assert(typeof ptr===\"number\",`ptrToString expects a number, got ${typeof ptr}`);ptr>>>=0;return\"0x\"+ptr.toString(16).padStart(8,\"0\")}var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text=\"warning: \"+text;err(text)}};var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{if((u0&248)!=240)warnOnce(`Invalid UTF-8 leading byte ${ptrToString(u0)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`);u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(typeof ptr==\"number\",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):\"\"};var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):\"unknown filename\",line,func?UTF8ToString(func):\"unknown function\"]);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);uncaughtExceptionCount++;assert(false,\"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.\")};var PATH={isAbs:path=>path.charAt(0)===\"/\",splitPath:filename=>{var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(p=>!!p),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\\/]+|\\/)\\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join(\"/\")),join2:(l,r)=>PATH.normalize(l+\"/\"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require(\"node:crypto\");return view=>(nodeCrypto.randomFillSync(view),0)}return view=>(crypto.getRandomValues(view),0)};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath=\"\",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!=\"string\"){throw new TypeError(\"Arguments to path.resolve must be strings\")}else if(!path){return\"\"}resolvedPath=path+\"/\"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split(\"/\").filter(p=>!!p),!resolvedAbsolute).join(\"/\");return(resolvedAbsolute?\"/\":\"\")+resolvedPath||\".\"},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!==\"\")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!==\"\")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split(\"/\"));var toParts=trim(to.split(\"/\"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push(\"..\")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join(\"/\")}};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{assert(typeof str===\"string\",`stringToUTF8Array expects a string (got ${typeof str})`);if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.codePointAt(i);if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce(`Invalid Unicode code point ${ptrToString(u)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`);heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes(\"EOF\"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString(\"utf-8\")}}else if(globalThis.window?.prompt){result=window.prompt(\"Input: \");if(result!==null){result+=\"\\n\"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.atime=Date.now()}return bytesRead},write(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.mtime=stream.node.ctime=Date.now()}return i}},default_tty_ops:{get_char(tty){return FS_stdin_getChar()},put_char(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort(\"internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported\")};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,\"/\",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=MEMFS.emptyFileContents??=new Uint8Array(0)}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){assert(FS.isFile(node.mode),\"getFileDataAsTypedArray called on non-file\");return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)));node.usedBytes=newSize},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of[\"mode\",\"atime\",\"mtime\",\"ctime\"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[\".\",\"..\",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);buffer.set(contents.subarray(position,position+size),offset);return size},write(stream,buffer,offset,length,position,canOwn){assert(buffer.subarray,\"FS.write expects a TypedArray\");if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.mtime=node.ctime=Date.now();if(canOwn){assert(position===0,\"canOwn must imply no weird position inside the file\");node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);node.usedBytes=Math.max(node.usedBytes,position+length)}return length},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===HEAP8.buffer){allocated=false;ptr=contents.byteOffset}else{allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}if(contents){if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}HEAP8.set(contents,ptr)}}return{ptr,allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS_modeStringToFlags=str=>{if(typeof str!=\"string\")return str;var flagModes={r:0,\"r+\":2,w:512|64|1,\"w+\":512|64|2,a:1024|64|1,\"a+\":1024|64|2};var flags=flagModes[str];if(typeof flags==\"undefined\"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_fileDataToTypedArray=data=>{if(typeof data==\"string\"){data=intArrayFromString(data,true)}if(!data.subarray){data=new Uint8Array(data)}return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var strError=errno=>UTF8ToString(_strerror(errno));var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);assert(arrayBuffer,`Loading data file \"${url}\" failed (no arrayBuffer).`);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>{var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}};var dependenciesPromise=null;var resolveRunDependencies=async()=>dependenciesPromise;var runDependencies=0;var dependenciesPromiseResolve=null;var runDependencyTracking={};var runDependencyWatcher=null;var removeRunDependency=id=>{runDependencies--;assert(id,\"removeRunDependency requires an ID\");assert(runDependencyTracking[id]);delete runDependencyTracking[id];if(!runDependencies){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}dependenciesPromiseResolve()}};var addRunDependency=id=>{if(!runDependencies){dependenciesPromise=new Promise(resolve=>dependenciesPromiseResolve=resolve)}runDependencies++;assert(id,\"addRunDependency requires an ID\");assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&globalThis.setInterval){runDependencyWatcher=setInterval(()=>{if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err(\"still waiting on run dependencies:\")}err(`dependency: ${dep}`)}if(shown){err(\"(end of list)\")}},1e4);runDependencyWatcher.unref?.()}};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!=\"undefined\")Browser.init();for(var plugin of preloadPlugins){if(plugin[\"canHandle\"](fullname)){assert(plugin[\"handle\"].constructor.name===\"AsyncFunction\",\"Filesystem plugin handlers must be async functions (See #24914)\");return plugin[\"handle\"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url==\"string\"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,ErrnoError:class extends Error{name=\"ErrnoError\";constructor(errno){super(runtimeInitialized?strError(errno):\"\");this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}addListener(cb,exclusive=false){var entry={cb,exclusive};var listeners=this.listeners??=new Set;listeners.add(entry);return{listeners,entry}}notifyListeners(flags){if(!this.listeners)return;var excl;for(var entry of this.listeners){if(entry.exclusive)(excl||=[]).push(entry);else entry.cb(flags)}if(excl){var i=(this.exclTurn||0)%excl.length;this.exclTurn=i+1;excl[i].cb(flags)}}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+\"/\"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split(\"/\").filter(p=>!!p);var current=FS.root;var current_path=\"/\";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}if(parts[i]===\".\"){continue}if(parts[i]===\"..\"){current_path=PATH.dirname(current_path);if(FS.isRoot(current)){path=current_path+\"/\"+parts.slice(i+1).join(\"/\");nlinks--;continue linkloop}else{current=current.parent}continue}current_path=PATH.join2(current_path,parts[i]);try{current=FS.lookupNode(current,parts[i])}catch(e){if(e?.errno===44&&islast&&opts.noent_okay){return{path:current_path}}throw e}if(FS.isMountpoint(current)&&(!islast||opts.follow_mount)){current=current.mounted.root}if(FS.isLink(current.mode)&&(!islast||opts.follow)){if(!current.node_ops.readlink){throw new FS.ErrnoError(52)}var link=current.node_ops.readlink(current);if(!PATH.isAbs(link)){link=PATH.dirname(current_path)+\"/\"+link}path=link+\"/\"+parts.slice(i+1).join(\"/\");continue linkloop}}return{path:current_path,node:current}}throw new FS.ErrnoError(32)},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!==\"/\"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){assert(typeof parent==\"object\");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=[\"r\",\"w\",\"rw\"][flag&3];if(flag&512){perms+=\"w\"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes(\"r\")&&!(node.mode&292)){return 2}if(perms.includes(\"w\")&&!(node.mode&146)){return 2}if(perms.includes(\"x\")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,\"x\");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,\"wx\")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,\"wx\");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else if(FS.isDir(node.mode)){return 31}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!==\"r\"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){assert(fd>=-1);stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);try{setattr(arg,attr)}catch(e){if(e instanceof RangeError){throw new FS.ErrnoError(22)}throw e}},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate==\"function\"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},mount(type,opts,mountpoint){if(typeof type==\"string\"){throw type}var root=mountpoint===\"/\";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable)){while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name===\".\"||name===\"..\"){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split(\"/\");var d=\"\";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+=\"/\";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev==\"undefined\"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},link(oldpath,newpath,flags){var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.link){throw new FS.ErrnoError(34)}return parent.node_ops.link(parent,newname,oldpath,flags)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,\"w\");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path==\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path==\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,\"w\");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path==\"string\"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});FS.doSetAttr(null,lookup.node,{atime,mtime,dontFollow})},open(path,flags,mode=438){if(path===\"\"){throw new FS.ErrnoError(44)}flags=FS_modeStringToFlags(flags);if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path==\"object\"){node=path}else{isDirPath=path.endsWith(\"/\");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;stream.node?.notifyListeners(32);try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!=\"undefined\";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){assert(offset>=0);assert(buffer.subarray,\"FS.write expects a TypedArray\");if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=\"undefined\";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){assert(offset>=0);if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags??0;opts.encoding=opts.encoding??\"binary\";if(opts.encoding!==\"utf8\"&&opts.encoding!==\"binary\"){abort(`Invalid encoding type \"${opts.encoding}\"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding===\"utf8\"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags??577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,\"x\");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir(\"/tmp\");FS.mkdir(\"/home\");FS.mkdir(\"/home/web_user\")},createDefaultDevices(){FS.mkdir(\"/dev\");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev(\"/dev/null\",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev(\"/dev/tty\",FS.makedev(5,0));FS.mkdev(\"/dev/tty1\",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice(\"/dev\",\"random\",randomByte);FS.createDevice(\"/dev\",\"urandom\",randomByte);FS.mkdir(\"/dev/shm\");FS.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){FS.mkdir(\"/proc\");var proc_self=FS.mkdir(\"/proc/self\");FS.mkdir(\"/proc/self/fd\");FS.mount({mount(){var node=FS.createNode(proc_self,\"fd\",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},\"/proc/self/fd\")},createStandardStreams(input,output,error){if(input){FS.createDevice(\"/dev\",\"stdin\",input)}else{FS.symlink(\"/dev/tty\",\"/dev/stdin\")}if(output){FS.createDevice(\"/dev\",\"stdout\",null,output)}else{FS.symlink(\"/dev/tty\",\"/dev/stdout\")}if(error){FS.createDevice(\"/dev\",\"stderr\",null,error)}else{FS.symlink(\"/dev/tty1\",\"/dev/stderr\")}var stdin=FS.open(\"/dev/stdin\",0);var stdout=FS.open(\"/dev/stdout\",1);var stderr=FS.open(\"/dev/stderr\",1);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},\"/\");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){assert(!FS.initialized,\"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)\");FS.initialized=true;FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path===\"/\"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent==\"string\"?parent:FS.getPath(parent);var parts=path.split(\"/\").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==\"string\"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent==\"string\"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){data=FS_fileDataToTypedArray(data);FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}},createDevice(parent,name,input,output){var path=PATH.join2(typeof parent==\"string\"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);FS.createDevice.major??=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open(stream){stream.seekable=false},close(stream){if(output?.buffer?.length){output(10)}},read(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.atime=Date.now()}return bytesRead},write(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.mtime=stream.node.ctime=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(globalThis.XMLHttpRequest){abort(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\")}else{try{obj.contents=readBinary(obj.url)}catch(e){throw new FS.ErrnoError(29)}}},createLazyFile(parent,name,url,canRead,canWrite){class LazyUint8Array{lengthKnown=false;chunks=[];get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open(\"HEAD\",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort(\"Couldn't load \"+url+\". Status: \"+xhr.status);var datalength=Number(xhr.getResponseHeader(\"Content-length\"));var header;var hasByteServing=(header=xhr.getResponseHeader(\"Accept-Ranges\"))&&header===\"bytes\";var usesGzip=(header=xhr.getResponseHeader(\"Content-Encoding\"))&&header===\"gzip\";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort(`invalid range (${from}, ${to}) or no bytes requested!`);if(to>datalength-1)abort(`only ${datalength} bytes available! programmer error!`);var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);if(datalength!==chunkSize)xhr.setRequestHeader(\"Range\",\"bytes=\"+from+\"-\"+to);xhr.responseType=\"arraybuffer\";if(xhr.overrideMimeType){xhr.overrideMimeType(\"text/plain; charset=x-user-defined\")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort(\"Couldn't load \"+url+\". Status: \"+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText??\"\",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==\"undefined\"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==\"undefined\")abort(\"doXHR failed!\");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out(\"LazyFiles on gzip forces download of the whole file when length is accessed\")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort(\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};for(const[key,fn]of Object.entries(node.stream_ops)){stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}}function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size}stream_ops.read=(stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var SYSCALLS={currentUmask:18,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+\"/\"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.subarray(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var SOCKFS={callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param);var fd=event===\"error\"?param[0]:param;var flags={message:64|1,open:4,connection:64|1,close:1|16,error:8}[event];if(flags)FS.getStream(fd)?.node.notifyListeners(flags)},mount(mount){return FS.createNode(null,\"/\",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr==\"object\"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\\/\\/([^:]+):(\\d+)/.exec(ws.url);if(!result){throw new Error(\"WebSocket URL must be in the format ws(s)://address:port\")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url=\"ws://\".replace(\"#\",\"//\");var subProtocols=\"binary\";var opts=undefined;if(url===\"ws://\"||url===\"wss://\"){var parts=addr.split(\"/\");url=url+parts[0]+\":\"+port+\"/\"+parts.slice(1).join(\"/\")}if(subProtocols!==\"null\"){subProtocols=subProtocols.replace(/^ +| +$/g,\"\").split(/ *, */);opts=subProtocols}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require(\"ws\")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType=\"arraybuffer\"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!=\"undefined\"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,\"p\".charCodeAt(0),\"o\".charCodeAt(0),\"r\".charCodeAt(0),\"t\".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+\":\"+port]},addPeer(sock,peer){sock.peers[peer.addr+\":\"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+\":\"+peer.port]},handlePeerEvents(sock,peer){var first=true;function handleOpen(){sock.connecting=false;SOCKFS.emit(\"open\",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}}function handleMessage(data){if(typeof data==\"string\"){var encoder=new TextEncoder;data=encoder.encode(data)}else{assert(data.byteLength!==undefined);if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]===\"p\".charCodeAt(0)&&data[5]===\"o\".charCodeAt(0)&&data[6]===\"r\".charCodeAt(0)&&data[7]===\"t\".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit(\"message\",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on(\"open\",handleOpen);peer.socket.on(\"message\",(data,isBinary)=>{if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on(\"close\",()=>SOCKFS.emit(\"close\",sock.stream.fd));peer.socket.on(\"error\",error=>{sock.error=14;SOCKFS.emit(\"error\",[sock.stream.fd,sock.error,\"ECONNREFUSED: Connection refused\"])});return}peer.socket.onopen=handleOpen;peer.socket.onclose=()=>SOCKFS.emit(\"close\",sock.stream.fd);peer.socket.onmessage=event=>handleMessage(event.data);peer.socket.onerror=error=>{sock.error=14;SOCKFS.emit(\"error\",[sock.stream.fd,sock.error,\"ECONNREFUSED: Connection refused\"])}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16|8192}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;case 21537:var on=HEAP32[arg>>2];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!=\"undefined\"||typeof sock.sport!=\"undefined\"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name===\"ErrnoError\"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!=\"undefined\"&&typeof sock.dport!=\"undefined\"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}if(sock.server){throw new FS.ErrnoError(28)}var WebSocketServer=require(\"ws\").Server;var host=sock.saddr;sock.server=new WebSocketServer({host,port:sock.sport});SOCKFS.emit(\"listen\",sock.stream.fd);sock.server.on(\"connection\",ws=>{if(sock.type===1){var newsock=SOCKFS.createSocket(sock.family,sock.type,sock.protocol);var peer=SOCKFS.websocket_sock_ops.createPeer(newsock,ws);newsock.daddr=peer.addr;newsock.dport=peer.port;sock.pending.push(newsock);SOCKFS.emit(\"connection\",newsock.stream.fd);sock.stream.node.notifyListeners(64|1)}else{SOCKFS.websocket_sock_ops.createPeer(sock,ws);SOCKFS.emit(\"connection\",sock.stream.fd)}});sock.server.on(\"close\",()=>{SOCKFS.emit(\"close\",sock.stream.fd);sock.server=null});sock.server.on(\"error\",error=>{sock.error=23;SOCKFS.emit(\"error\",[sock.stream.fd,sock.error,\"EHOSTUNREACH: Host is unreachable\"])})},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length,flags){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var peek=flags&2;var queued=sock.recv_queue[0];if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(peek)return res;sock.recv_queue.shift();if(sock.type===1&&bytesRead<queuedLength){var bytesRemaining=queuedLength-bytesRead;queued.data=new Uint8Array(queuedBuffer,queuedOffset+bytesRead,bytesRemaining);sock.recv_queue.unshift(queued)}return res}}};var getSocketFromFD=fd=>{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetNtop4=addr=>(addr&255)+\".\"+(addr>>8&255)+\".\"+(addr>>16&255)+\".\"+(addr>>24&255);var inetNtop6=ints=>{var str=\"\";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part=\"\";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str=\"::ffff:\";str+=v4part;return str}if(parts[5]===0){str=\"::\";if(v4part===\"0.0.0.0\")v4part=\"\";if(v4part===\"0.0.0.1\")v4part=\"1\";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word<zstart+longest){if(word===zstart){str+=\":\";if(zstart===0)str+=\":\"}continue}}str+=Number(_ntohs(parts[word]&65535)).toString(16);str+=word<7?\":\":\"\"}return str};var readSockaddr=(sa,salen)=>{var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var inetPton4=str=>{var b=str.split(\".\");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\3)::|:\\b|$))|(?!\\2\\3)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str===\"::\"){return[0,0,0,0,0,0,0,0]}if(str.startsWith(\"::\")){str=str.replace(\"::\",\"Z:\")}else{str=str.replace(\"::\",\":Z:\")}if(str.indexOf(\".\")>0){str=str.replace(new RegExp(\"[.]\",\"g\"),\":\");words=str.split(\":\");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(\":\")}offset=0;z=0;for(w=0;w<words.length;w++){if(typeof words[w]==\"string\"){if(words[w]===\"Z\"){for(z=0;z<8-words.length+1;z++){parts[w+z]=0}offset=z-1}else{parts[w+offset]=_htons(parseInt(words[w],16))}}else{parts[w+offset]=words[w]}}return[parts[1]<<16|parts[0],parts[3]<<16|parts[2],parts[5]<<16|parts[4],parts[7]<<16|parts[6]]};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;assert(id<65535,\"exceeded max address mappings of 65535\");addr=\"172.29.\"+(id&255)+\".\"+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_connect(fd,addr,len,u1,u2,u3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,len);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var syscallGetVarargI=()=>{assert(SYSCALLS.varargs!=undefined);var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();var mask=289792;stream.flags=stream.flags&~mask|arg&mask;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>{assert(typeof maxBytesToWrite==\"number\",\"stringToUTF8 requires a third parameter that specifies the length of the output buffer\");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)};function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size<cwdLengthInBytes)return-68;stringToUTF8(cwd,buf,size);return cwdLengthInBytes}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);mode&=~SYSCALLS.currentUmask;FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;if(flags&64){mode&=~SYSCALLS.currentUmask}return FS.open(path,flags,mode).fd}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var pollOne=(fd,events)=>{var stream=FS.getStream(fd);if(!stream)return 32;var flags=stream.stream_ops?.poll?stream.stream_ops.poll(stream):5;return flags&(events|8|16|32)};var doPollSync=(fds,nfds)=>{var count=0;for(var i=0,pollfd=fds;i<nfds;i++,pollfd+=8){var revents=pollOne(HEAP32[pollfd>>2],HEAP16[pollfd+4>>1]);if(revents)count++;HEAP16[pollfd+6>>1]=revents}return count};function ___syscall_poll(fds,nfds,timeout){try{var count=doPollSync(fds,nfds);if(!count&&timeout!=0)warnOnce(\"non-zero poll() timeout not supported: \"+timeout);return count}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_socket(domain,type,protocol,u1,u2,u3){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var __abort_js=()=>abort(\"native code called abort()\");var structRegistrations={};var runDestructors=destructors=>{while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}};function readPointer(pointer){return this.fromWireType(HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var InternalError=class InternalError extends Error{constructor(message){super(message);this.name=\"InternalError\"}};var throwInternalError=message=>{throw new InternalError(message)};var whenDependentTypesAreResolved=(myTypes,dependentTypes,getTypeConverters)=>{myTypes.forEach(type=>typeDependencies[type]=dependentTypes);function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError(\"Mismatched type converter count\")}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i])}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;for(let[i,dt]of dependentTypes.entries()){if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}}if(0===unregisteredTypes.length){onComplete(typeConverters)}};var __embind_finalize_value_object=structType=>{var reg=structRegistrations[structType];delete structRegistrations[structType];var rawConstructor=reg.rawConstructor;var rawDestructor=reg.rawDestructor;var fieldRecords=reg.fields;var fieldTypes=fieldRecords.map(field=>field.getterReturnType).concat(fieldRecords.map(field=>field.setterArgumentType));whenDependentTypesAreResolved([structType],fieldTypes,fieldTypes=>{var fields={};for(var[i,field]of fieldRecords.entries()){const getterReturnType=fieldTypes[i];const getter=field.getter;const getterContext=field.getterContext;const setterArgumentType=fieldTypes[i+fieldRecords.length];const setter=field.setter;const setterContext=field.setterContext;fields[field.fieldName]={read:ptr=>getterReturnType.fromWireType(getter(getterContext,ptr)),write:(ptr,o)=>{var destructors=[];setter(setterContext,ptr,setterArgumentType.toWireType(destructors,o));runDestructors(destructors)},optional:getterReturnType.optional}}return[{name:reg.name,fromWireType:ptr=>{var rv={};for(var i in fields){rv[i]=fields[i].read(ptr)}rawDestructor(ptr);return rv},toWireType:(destructors,o)=>{for(var fieldName in fields){if(!(fieldName in o)&&!fields[fieldName].optional){throw new TypeError(`Missing field: \"${fieldName}\"`)}}var ptr=rawConstructor();for(fieldName in fields){fields[fieldName].write(ptr,o[fieldName])}if(destructors!==null){destructors.push(rawDestructor,ptr)}return ptr},readValueFromPointer:readPointer,destructorFunction:rawDestructor}]})};var AsciiToString=ptr=>{var str=\"\";while(1){var ch=HEAPU8[ptr++];if(!ch)return str;str+=String.fromCharCode(ch)}};var BindingError=class BindingError extends Error{constructor(message){super(message);this.name=\"BindingError\"}};var throwBindingError=message=>{throw new BindingError(message)};function sharedRegisterType(rawType,registeredInstance,options={}){var name=registeredInstance.name;if(!rawType){throwBindingError(`type \"${name}\" must have a positive integer typeid pointer`)}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError(`Cannot register type '${name}' twice`)}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function registerType(rawType,registeredInstance,options={}){return sharedRegisterType(rawType,registeredInstance,options)}var integerReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?pointer=>HEAP8[pointer]:pointer=>HEAPU8[pointer];case 2:return signed?pointer=>HEAP16[pointer>>1]:pointer=>HEAPU16[pointer>>1];case 4:return signed?pointer=>HEAP32[pointer>>2]:pointer=>HEAPU32[pointer>>2];case 8:return signed?pointer=>HEAP64[pointer>>3]:pointer=>HEAPU64[pointer>>3];default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var embindRepr=v=>{if(v===null){return\"null\"}var t=typeof v;if(t===\"object\"||t===\"array\"||t===\"function\"){return v.toString()}else{return\"\"+v}};var assertIntegerRange=(typeName,value,minRange,maxRange)=>{if(value<minRange||value>maxRange){throw new TypeError(`Passing a number \"${embindRepr(value)}\" from JS side to C/C++ side to an argument of type \"${typeName}\", which is outside the valid range [${minRange}, ${maxRange}]!`)}};var __embind_register_bigint=(primitiveType,name,size,minRange,maxRange)=>{name=AsciiToString(name);const isUnsignedType=minRange===0n;let fromWireType=value=>value;if(isUnsignedType){const bitSize=size*8;fromWireType=value=>BigInt.asUintN(bitSize,value);maxRange=fromWireType(maxRange)}registerType(primitiveType,{name,fromWireType,toWireType:(destructors,value)=>{if(typeof value==\"number\"){value=BigInt(value)}else if(typeof value!=\"bigint\"){throw new TypeError(`Cannot convert \"${embindRepr(value)}\" to ${name}`)}assertIntegerRange(name,value,minRange,maxRange);return value},readValueFromPointer:integerReadValueFromPointer(name,size,!isUnsignedType),destructorFunction:null})};var __embind_register_bool=(rawType,name,trueValue,falseValue)=>{name=AsciiToString(name);registerType(rawType,{name,fromWireType:function(wt){return!!wt},toWireType:function(destructors,o){return o?trueValue:falseValue},readValueFromPointer:function(pointer){return this.fromWireType(HEAPU8[pointer])},destructorFunction:null})};var shallowCopyInternalPointer=o=>({count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType});var throwInstanceAlreadyDeleted=obj=>{function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+\" instance already deleted\")};var finalizationRegistry=false;var detachFinalizer=handle=>{};var runDestructor=$$=>{if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}};var releaseClassHandle=$$=>{$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}};var downcastPointer=(ptr,ptrClass,desiredClass)=>{if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)};var registeredPointers={};var registeredInstances={};var getBasestPointer=(class_,ptr)=>{if(ptr===undefined){throwBindingError(\"ptr should not be undefined\")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr};var getInheritedInstance=(class_,ptr)=>{ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]};var makeClassHandle=(prototype,record)=>{if(!record.ptrType||!record.ptr){throwInternalError(\"makeClassHandle requires ptr and ptrType\")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError(\"Both smartPtrType and smartPtr must be specified\")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record,writable:true}}))};function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance[\"clone\"]()}else{var rv=registeredInstance[\"clone\"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}var attachFinalizer=handle=>{if(!globalThis.FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{console.warn(info.leakWarning);releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$};var cls=$$.ptrType.registeredClass;var err=new Error(`Embind found a leaked C++ instance ${cls.name} <${ptrToString($$.ptr)}>.\\n`+\"We'll free it automatically in this case, but this functionality is not reliable across various environments.\\n\"+\"Make sure to invoke .delete() manually once you're done with the instance instead.\\n\"+\"Originally allocated\");if(\"captureStackTrace\"in Error){Error.captureStackTrace(err,RegisteredPointer_fromWireType)}info.leakWarning=err.stack.replace(/^Error: /,\"\");finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)};var deletionQueue=[];var flushPendingDeletes=()=>{while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj[\"delete\"]()}};var delayFunction;var init_ClassHandle=()=>{let proto=ClassHandle.prototype;Object.assign(proto,{isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;other.$$=other.$$;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right},clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}},delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}},isDeleted(){return!this.$$.ptr},deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}});const symbolDispose=Symbol.dispose;if(symbolDispose){proto[symbolDispose]=proto[\"delete\"]}};function ClassHandle(){}var createNamedFunction=(name,func)=>Object.defineProperty(func,\"name\",{value:name});var ensureOverloadTable=(proto,methodName,humanName)=>{if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(...args){if(!proto[methodName].overloadTable.hasOwnProperty(args.length)){throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`)}return proto[methodName].overloadTable[args.length].apply(this,args)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}};var exposePublicSymbol=(name,value,numArguments)=>{if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(`Cannot register public name '${name}' twice`)}ensureOverloadTable(Module,name,name);if(Module[name].overloadTable.hasOwnProperty(numArguments)){throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`)}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var char_0=48;var char_9=57;var makeLegalFunctionName=name=>{assert(typeof name===\"string\");name=name.replace(/[^a-zA-Z0-9_]/g,\"$\");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return`_${name}`}return name};function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}var upcastPointer=(ptr,ptrClass,desiredClass)=>{while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr};function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass \"${embindRepr(handle)}\" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle||!handle.$$){throwBindingError(`Cannot pass \"${embindRepr(handle)}\" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError(\"Passing raw pointer to smart pointer is illegal\")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle[\"clone\"]();ptr=this.rawShare(ptr,Emval.toHandle(()=>clonedHandle[\"delete\"]()));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError(\"Unsupported sharing policy\")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass \"${embindRepr(handle)}\" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}var init_RegisteredPointer=()=>{Object.assign(RegisteredPointer.prototype,{getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr},destructor(ptr){this.rawDestructor?.(ptr)},readValueFromPointer:readPointer,fromWireType:RegisteredPointer_fromWireType})};function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this.toWireType=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this.toWireType=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this.toWireType=genericPointerToWireType}}var replacePublicSymbol=(name,value,numArguments)=>{if(!Module.hasOwnProperty(name)){throwInternalError(\"Replacing nonexistent public symbol\")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,\"table mirror is out of date\");return func};var embind__requireFunction=(signature,rawFunction,isAsync=false)=>{assert(!isAsync,\"async bindings are only supported with JSPI\");signature=AsciiToString(signature);function makeDynCaller(){var rtn=getWasmTableEntry(rawFunction);return rtn}var fp=makeDynCaller();if(typeof fp!=\"function\"){throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`)}return fp};class UnboundTypeError extends Error{}var getTypeName=type=>{var ptr=___getTypeName(type);var rv=AsciiToString(ptr);_free(ptr);return rv};var throwUnboundTypeError=(message,types)=>{var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(`${message}: `+unboundTypes.map(getTypeName).join([\", \"]))};var __embind_register_class=(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor)=>{name=AsciiToString(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);upcast&&=embind__requireFunction(upcastSignature,upcast);downcast&&=embind__requireFunction(downcastSignature,downcast);rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(`Cannot construct ${name} due to unbound types`,[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],base=>{base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(name,function(...args){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError(`Use 'new' to construct ${name}`)}if(undefined===registeredClass.constructor_body){throw new BindingError(`${name} has no accessible constructor`)}var body=registeredClass.constructor_body[args.length];if(undefined===body){throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`)}return body.apply(this,args)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);if(registeredClass.baseClass){registeredClass.baseClass.__derivedClasses??=[];registeredClass.baseClass.__derivedClasses.push(registeredClass)}var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+\"*\",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+\" const*\",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})};var heap32VectorToArray=(count,firstElement)=>{var array=[];for(var i=0;i<count;i++){array.push(HEAPU32[firstElement+i*4>>2])}return array};function usesDestructorStack(argTypes){for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){return true}}return false}function getRequiredArgCount(argTypes){var requiredArgCount=argTypes.length-2;for(var i=argTypes.length-1;i>=2;--i){if(!argTypes[i].optional){break}requiredArgCount--}return requiredArgCount}function checkArgCount(numArgs,minArgs,maxArgs,humanName,throwBindingError){if(numArgs<minArgs||numArgs>maxArgs){var argCountMessage=minArgs==maxArgs?minArgs:`${minArgs} to ${maxArgs}`;throwBindingError(`function ${humanName} called with ${numArgs} arguments, expected ${argCountMessage}`)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc,isAsync){var argCount=argTypes.length;if(argCount<2){throwBindingError(\"argTypes array size mismatch! Must at least get return value and 'this' types!\")}assert(!isAsync,\"async bindings are only supported with JSPI\");var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=usesDestructorStack(argTypes);var returns=!argTypes[0].isVoid;var expectedArgCount=argCount-2;var minArgs=getRequiredArgCount(argTypes);var argsWired=new Array(expectedArgCount);var invokerFuncArgs=[];var destructors=[];var invokerFn=function(...args){checkArgCount(args.length,minArgs,expectedArgCount,humanName,throwBindingError);destructors.length=0;var thisWired;invokerFuncArgs.length=isClassMethodFunc?2:1;invokerFuncArgs[0]=cppTargetFunc;if(isClassMethodFunc){thisWired=argTypes[1].toWireType(destructors,this);invokerFuncArgs[1]=thisWired}for(var i=0;i<expectedArgCount;++i){argsWired[i]=argTypes[i+2].toWireType(destructors,args[i]);invokerFuncArgs.push(argsWired[i])}var rv=cppInvokerFunc(...invokerFuncArgs);function onDone(rv){if(needsDestructorStack){runDestructors(destructors)}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;i++){var param=i===1?thisWired:argsWired[i-2];if(argTypes[i].destructorFunction!==null){argTypes[i].destructorFunction(param)}}}if(returns){return argTypes[0].fromWireType(rv)}}return onDone(rv)};return createNamedFunction(humanName,invokerFn)}var __embind_register_class_constructor=(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor)=>{assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`constructor ${classType.name}`;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount-1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`)}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`,rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})};var getFunctionName=signature=>{signature=signature.trim();const argsIndex=signature.indexOf(\"(\");if(argsIndex===-1)return signature;assert(signature.endsWith(\")\"),\"Parentheses for argument names should match.\");return signature.slice(0,argsIndex)};var __embind_register_class_function=(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync,isNonnullReturn)=>{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=AsciiToString(methodName);methodName=getFunctionName(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker,isAsync);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`${classType.name}.${methodName}`;if(methodName.startsWith(\"@@\")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`,rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})};var emval_freelist=[];var emval_handles=[0,1,,1,null,1,true,1,false,1];var __emval_decref=handle=>{if(handle>9&&0===--emval_handles[handle+1]){assert(emval_handles[handle]!==undefined,`decref for unallocated handle`);var value=emval_handles[handle];emval_handles[handle]=undefined;emval_freelist.push(handle)}};var Emval={toValue:handle=>{if(!handle){throwBindingError(`Cannot use deleted val. handle = ${handle}`)}assert(handle===2||emval_handles[handle]!==undefined&&handle%2===0,`invalid handle: ${handle}`);return emval_handles[handle]},toHandle:value=>{switch(value){case undefined:return 2;case null:return 4;case true:return 6;case false:return 8;default:{const handle=emval_freelist.pop()||emval_handles.length;emval_handles[handle]=value;emval_handles[handle+1]=1;return handle}}}};var EmValType={name:\"emscripten::val\",fromWireType:handle=>{var rv=Emval.toValue(handle);__emval_decref(handle);return rv},toWireType:(destructors,value)=>Emval.toHandle(value),readValueFromPointer:readPointer,destructorFunction:null};var __embind_register_emval=rawType=>registerType(rawType,EmValType);var floatReadValueFromPointer=(name,width)=>{switch(width){case 4:return function(pointer){return this.fromWireType(HEAPF32[pointer>>2])};case 8:return function(pointer){return this.fromWireType(HEAPF64[pointer>>3])};default:throw new TypeError(`invalid float width (${width}): ${name}`)}};var __embind_register_float=(rawType,name,size)=>{name=AsciiToString(name);registerType(rawType,{name,fromWireType:value=>value,toWireType:(destructors,value)=>{if(typeof value!=\"number\"&&typeof value!=\"boolean\"){throw new TypeError(`Cannot convert ${embindRepr(value)} to ${name}`)}return value},readValueFromPointer:floatReadValueFromPointer(name,size),destructorFunction:null})};var __embind_register_integer=(primitiveType,name,size,minRange,maxRange)=>{name=AsciiToString(name);const isUnsignedType=minRange===0;let fromWireType=value=>value;if(isUnsignedType){var bitshift=32-8*size;fromWireType=value=>value<<bitshift>>>bitshift;maxRange=fromWireType(maxRange)}registerType(primitiveType,{name,fromWireType,toWireType:(destructors,value)=>{if(typeof value!=\"number\"&&typeof value!=\"boolean\"){throw new TypeError(`Cannot convert \"${embindRepr(value)}\" to ${name}`)}assertIntegerRange(name,value,minRange,maxRange);return value},readValueFromPointer:integerReadValueFromPointer(name,size,minRange!==0),destructorFunction:null})};var installIndexedIterator=(proto,sizeMethodName,getMethodName)=>{const makeIterator=(size,getValue)=>{let index=0;return{next(){if(index>=size){return{done:true}}const current=index;index++;const value=getValue(current);return{value,done:false}},[Symbol.iterator](){return this}}};if(!proto[Symbol.iterator]){proto[Symbol.iterator]=function(){const size=this[sizeMethodName]();return makeIterator(size,i=>this[getMethodName](i))}}};var __embind_register_iterable=(rawClassType,rawElementType,sizeMethodName,getMethodName)=>{sizeMethodName=AsciiToString(sizeMethodName);getMethodName=AsciiToString(getMethodName);whenDependentTypesAreResolved([],[rawClassType,rawElementType],types=>{const classType=types[0];installIndexedIterator(classType.registeredClass.instancePrototype,sizeMethodName,getMethodName);return[]})};var __embind_register_memory_view=(rawType,dataTypeIndex,name)=>{var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){var size=HEAPU32[handle>>2];var data=HEAPU32[handle+4>>2];return new TA(HEAP8.buffer,data,size)}name=AsciiToString(name);registerType(rawType,{name,fromWireType:decodeMemoryView,readValueFromPointer:decodeMemoryView},{ignoreDuplicateRegistrations:true})};var EmValOptionalType=Object.assign({optional:true},EmValType);var __embind_register_optional=(rawOptionalType,rawType)=>{registerType(rawOptionalType,EmValOptionalType)};var __embind_register_std_string=(rawType,name)=>{name=AsciiToString(name);var stdStringIsUTF8=true;registerType(rawType,{name,fromWireType(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){str=UTF8ToString(payload,length,true)}else{str=\"\";for(var i=0;i<length;++i){str+=String.fromCharCode(HEAPU8[payload+i])}}_free(value);return str},toWireType(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value)}var length;var valueIsOfTypeString=typeof value==\"string\";if(!(valueIsOfTypeString||ArrayBuffer.isView(value)&&value.BYTES_PER_ELEMENT==1)){throwBindingError(\"Cannot pass non-string to std::string\")}if(stdStringIsUTF8&&valueIsOfTypeString){length=lengthBytesUTF8(value)}else{length=value.length}var base=_malloc(4+length+1);var ptr=base+4;HEAPU32[base>>2]=length;if(valueIsOfTypeString){if(stdStringIsUTF8){stringToUTF8(value,ptr,length+1)}else{for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(base);throwBindingError(\"String has UTF-16 code units that do not fit in 8 bits\")}HEAPU8[ptr+i]=charCode}}}else{HEAPU8.set(value,ptr)}if(destructors!==null){destructors.push(_free,base)}return base},readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var UTF16Decoder=globalThis.TextDecoder?new TextDecoder(\"utf-16le\"):undefined;var UTF16ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(ptr%2==0,\"pointer passed to UTF16ToString must be 2-byte aligned\");var idx=ptr>>1;var endIdx=findStringEnd(HEAPU16,idx,maxBytesToRead/2,ignoreNul);if(endIdx-idx>16&&UTF16Decoder)return UTF16Decoder.decode(HEAPU16.subarray(idx,endIdx));var str=\"\";for(var i=idx;i<endIdx;++i){var codeUnit=HEAPU16[i];str+=String.fromCharCode(codeUnit)}return str};var stringToUTF16=(str,outPtr,maxBytesToWrite=2147483647)=>{assert(outPtr%2==0,\"pointer passed to stringToUTF16 must be 2-byte aligned\");assert(typeof maxBytesToWrite==\"number\",\"stringToUTF16 requires a third parameter that specifies the length of the output buffer\");if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite<str.length*2?maxBytesToWrite/2:str.length;for(var i=0;i<numCharsToWrite;++i){var codeUnit=str.charCodeAt(i);HEAP16[outPtr>>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(ptr%4==0,\"pointer passed to UTF32ToString must be 2-byte aligned\");var str=\"\";var startIdx=ptr>>2;for(var i=0;!(i>=maxBytesToRead/4);i++){var utf32=HEAPU32[startIdx+i];if(!utf32&&!ignoreNul)break;str+=String.fromCodePoint(utf32)}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite=2147483647)=>{assert(outPtr%4==0,\"pointer passed to stringToUTF32 must be 4-byte aligned\");assert(typeof maxBytesToWrite==\"number\",\"stringToUTF32 requires a third parameter that specifies the length of the output buffer\");if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i<str.length;++i){var codePoint=str.codePointAt(i);if(codePoint>65535){i++}HEAP32[outPtr>>2]=codePoint;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i<str.length;++i){var codePoint=str.codePointAt(i);if(codePoint>65535){i++}len+=4}return len};var __embind_register_std_wstring=(rawType,charSize,name)=>{name=AsciiToString(name);var decodeString,encodeString,lengthBytesUTF;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16}else{assert(charSize===4,\"only 2-byte and 4-byte strings are currently supported\");decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32}registerType(rawType,{name,fromWireType:value=>{var length=HEAPU32[value>>2];var str=decodeString(value+4,length*charSize,true);_free(value);return str},toWireType:(destructors,value)=>{if(!(typeof value==\"string\")){throwBindingError(`Cannot pass non-string to C++ string type ${name}`)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length/charSize;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var __embind_register_value_object=(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor)=>{structRegistrations[rawType]={name:AsciiToString(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}};var __embind_register_value_object_field=(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext)=>{structRegistrations[structType].fields.push({fieldName:AsciiToString(fieldName),getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext,setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext})};var __embind_register_void=(rawType,name)=>{name=AsciiToString(name);registerType(rawType,{isVoid:true,name,fromWireType:()=>undefined,toWireType:(destructors,o)=>undefined})};var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};var emval_methodCallers=[];var emval_addMethodCaller=caller=>{var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id};var requireRegisteredType=(rawType,humanName)=>{var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`)}return impl};var emval_lookupTypes=(argCount,argTypes)=>{var a=new Array(argCount);for(var i=0;i<argCount;++i){a[i]=requireRegisteredType(HEAPU32[argTypes+i*4>>2],`parameter ${i}`)}return a};var emval_returnValue=(toReturnWire,destructorsRef,handle)=>{var destructors=[];var result=toReturnWire(destructors,handle);if(destructors.length){HEAPU32[destructorsRef>>2]=Emval.toHandle(destructors)}return result};var emval_symbols={};var getStringOrSymbol=address=>{var symbol=emval_symbols[address];if(symbol===undefined){return AsciiToString(address)}return symbol};var __emval_create_invoker=(argCount,argTypesPtr,kind)=>{var GenericWireTypeSize=8;var[retType,...argTypes]=emval_lookupTypes(argCount,argTypesPtr);var toReturnWire=retType.toWireType.bind(retType);var argFromPtr=argTypes.map(type=>type.readValueFromPointer.bind(type));argCount--;var argN=new Array(argCount);var invokerFunction=(handle,methodName,destructorsRef,args)=>{var offset=0;for(var i=0;i<argCount;++i){argN[i]=argFromPtr[i](args+offset);offset+=GenericWireTypeSize}var rv;switch(kind){case 0:rv=Emval.toValue(handle).apply(null,argN);break;case 2:rv=Reflect.construct(Emval.toValue(handle),argN);break;case 3:rv=argN[0];break;case 1:rv=Emval.toValue(handle)[getStringOrSymbol(methodName)](...argN);break}return emval_returnValue(toReturnWire,destructorsRef,rv)};var functionName=`methodCaller<(${argTypes.map(t=>t.name)}) => ${retType.name}>`;return emval_addMethodCaller(createNamedFunction(functionName,invokerFunction))};var __emval_invoke=(caller,handle,methodName,destructorsRef,args)=>emval_methodCallers[caller](handle,methodName,destructorsRef,args);var __emval_run_destructors=handle=>{var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)};var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);if(isNaN(date.getTime())){return 1}HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;return 0}var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?\"-\":\"+\";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,\"0\");var minutes=String(absOffset%60).padStart(2,\"0\");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);assert(winterName);assert(summerName);assert(lengthBytesUTF8(winterName)<=16,`timezone name truncated to fit in TZNAME_MAX (${winterName})`);assert(lengthBytesUTF8(summerName)<=16,`timezone name truncated to fit in TZNAME_MAX (${summerName})`);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,17);stringToUTF8(summerName,dst_name,17)}else{stringToUTF8(winterName,dst_name,17);stringToUTF8(summerName,std_name,17)}};var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{assert(Array.isArray(readEmAsmArgsArray));assert(buf%16==0);readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var chr=String.fromCharCode(ch);var validChars=[\"d\",\"f\",\"i\",\"p\"];validChars.push(\"j\");assert(validChars.includes(chr),`Invalid character ${ch}(\"${chr}\") in readEmAsmArgs! Use only [${validChars}], and do not specify \"v\" for void return argument.`);var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==106?HEAP64[buf>>3]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(code),`No EM_ASM constant found at address ${code}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>{assert(alignment,\"alignment argument is required\");return Math.ceil(size/alignment)*alignment};var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){err(`growMemory: Attempted to grow heap from ${oldHeapSize} bytes to ${size} bytes, but got error: ${e}`)}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`);return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);return false};var ENV={};var getExecutableName=()=>thisProgram;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??\"C\").replace(\"-\",\"_\")+\".UTF-8\";var env={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var rightsBase=0;var rightsInheriting=0;var flags=0;{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4}HEAP8[pbuf]=type;HEAP16[pbuf+2>>1]=flags;HEAP64[pbuf+8>>3]=BigInt(rightsBase);HEAP64[pbuf+16>>3]=BigInt(rightsInheriting);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;try{var curr=FS.read(stream,HEAP8,ptr,len,offset)}catch(e){if(ret>0&&e instanceof FS.ErrnoError&&(e.errno==6||e.errno==6)){break}throw e}if(curr<0)return-1;ret+=curr;if(curr<len)break;if(typeof offset!=\"undefined\"){offset+=curr}}return ret};function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 22;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{if(iovcnt==1){return FS.write(stream,HEAP8,HEAPU32[iov>>2],HEAPU32[iov+4>>2],offset)}var total=0;for(var i=0,p=iov;i<iovcnt;i++,p+=8){total+=HEAPU32[p+4>>2]}var view=new Uint8Array(total);var voff=0;for(var i=0;i<iovcnt;i++,iov+=8){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];view.set(HEAPU8.subarray(ptr,ptr+len),voff);voff+=len}return FS.write(stream,view,0,total,offset)};function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}var FS_createPath=(...args)=>FS.createPath(...args);var FS_unlink=(...args)=>FS.unlink(...args);var FS_createLazyFile=(...args)=>FS.createLazyFile(...args);var FS_createDevice=(...args)=>FS.createDevice(...args);FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();init_ClassHandle();init_RegisteredPointer();assert(emval_handles.length===5*2);{if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];checkIncomingModuleAPI();assert(typeof Module[\"memoryInitializerPrefixURL\"]==\"undefined\",\"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"pthreadMainPrefixURL\"]==\"undefined\",\"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"cdInitializerPrefixURL\"]==\"undefined\",\"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"filePackagePrefixURL\"]==\"undefined\",\"Module.filePackagePrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"read\"]==\"undefined\",\"Module.read option was removed\");assert(typeof Module[\"readAsync\"]==\"undefined\",\"Module.readAsync option was removed (modify readAsync in JS)\");assert(typeof Module[\"readBinary\"]==\"undefined\",\"Module.readBinary option was removed (modify readBinary in JS)\");assert(typeof Module[\"setWindowTitle\"]==\"undefined\",\"Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)\");assert(typeof Module[\"TOTAL_MEMORY\"]==\"undefined\",\"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY\");assert(typeof Module[\"ENVIRONMENT\"]==\"undefined\",\"Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)\");assert(typeof Module[\"STACK_SIZE\"]==\"undefined\",\"STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time\");assert(typeof Module[\"wasmMemory\"]==\"undefined\",\"Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally\");assert(typeof Module[\"INITIAL_MEMORY\"]==\"undefined\",\"Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically\")}Module[\"addRunDependency\"]=addRunDependency;Module[\"removeRunDependency\"]=removeRunDependency;Module[\"UTF8ToString\"]=UTF8ToString;Module[\"stringToUTF8\"]=stringToUTF8;Module[\"FS_preloadFile\"]=FS_preloadFile;Module[\"FS_unlink\"]=FS_unlink;Module[\"FS_createPath\"]=FS_createPath;Module[\"FS_createDevice\"]=FS_createDevice;Module[\"FS\"]=FS;Module[\"FS_createDataFile\"]=FS_createDataFile;Module[\"FS_createLazyFile\"]=FS_createLazyFile;var missingLibrarySymbols=[\"writeI53ToI64\",\"writeI53ToI64Clamped\",\"writeI53ToI64Signaling\",\"writeI53ToU64Clamped\",\"writeI53ToU64Signaling\",\"readI53FromI64\",\"readI53FromU64\",\"convertI32PairToI53\",\"convertI32PairToI53Checked\",\"convertU32PairToI53\",\"stackAlloc\",\"getTempRet0\",\"setTempRet0\",\"zeroMemory\",\"exitJS\",\"withStackSave\",\"writeSockaddr\",\"runMainThreadEmAsm\",\"jstoi_q\",\"autoResumeAudioContext\",\"getDynCaller\",\"dynCall\",\"handleException\",\"keepRuntimeAlive\",\"runtimeKeepalivePush\",\"runtimeKeepalivePop\",\"callUserCallback\",\"maybeExit\",\"asmjsMangle\",\"HandleAllocator\",\"addOnInit\",\"addOnPostCtor\",\"addOnPreMain\",\"addOnExit\",\"addOnPostRun\",\"STACK_SIZE\",\"STACK_ALIGN\",\"POINTER_SIZE\",\"ASSERTIONS\",\"ccall\",\"cwrap\",\"convertJsFunctionToWasm\",\"getEmptyTableSlot\",\"updateTableMap\",\"getFunctionAddress\",\"addFunction\",\"removeFunction\",\"intArrayToString\",\"stringToAscii\",\"stringToNewUTF8\",\"stringToUTF8OnStack\",\"writeArrayToMemory\",\"registerKeyEventCallback\",\"maybeCStringToJsString\",\"findEventTarget\",\"getBoundingClientRect\",\"fillMouseEventData\",\"registerMouseEventCallback\",\"registerWheelEventCallback\",\"registerUiEventCallback\",\"registerFocusEventCallback\",\"fillDeviceOrientationEventData\",\"registerDeviceOrientationEventCallback\",\"fillDeviceMotionEventData\",\"registerDeviceMotionEventCallback\",\"screenOrientation\",\"fillOrientationChangeEventData\",\"registerOrientationChangeEventCallback\",\"fillFullscreenChangeEventData\",\"registerFullscreenChangeEventCallback\",\"callCanvasResizedCallback\",\"JSEvents_requestFullscreen\",\"JSEvents_resizeCanvasForFullscreen\",\"registerRestoreOldStyle\",\"hideEverythingExceptGivenElement\",\"restoreHiddenElements\",\"setLetterbox\",\"currentFullscreenStrategy\",\"softFullscreenResizeWebGLRenderTarget\",\"doRequestFullscreen\",\"fillPointerlockChangeEventData\",\"registerPointerlockChangeEventCallback\",\"registerPointerlockErrorEventCallback\",\"requestPointerLock\",\"fillVisibilityChangeEventData\",\"registerVisibilityChangeEventCallback\",\"registerTouchEventCallback\",\"fillGamepadEventData\",\"registerGamepadEventCallback\",\"registerBeforeUnloadEventCallback\",\"fillBatteryEventData\",\"registerBatteryEventCallback\",\"setCanvasElementSize\",\"getCanvasElementSize\",\"jsStackTrace\",\"getCallstack\",\"convertPCtoSourceLocation\",\"wasiRightsToMuslOFlags\",\"wasiOFlagsToMuslOFlags\",\"safeSetTimeout\",\"setImmediateWrapped\",\"safeRequestAnimationFrame\",\"clearImmediateWrapped\",\"registerPostMainLoop\",\"registerPreMainLoop\",\"getPromise\",\"makePromise\",\"addPromise\",\"idsToPromises\",\"makePromiseCallback\",\"findMatchingCatch\",\"incrementUncaughtExceptionCount\",\"decrementUncaughtExceptionCount\",\"Browser_asyncPrepareDataCounter\",\"arraySum\",\"addDays\",\"FS_mkdirTree\",\"_setNetworkCallback\",\"heapObjectForWebGLType\",\"toTypedArrayIndex\",\"webgl_enable_ANGLE_instanced_arrays\",\"webgl_enable_OES_vertex_array_object\",\"webgl_enable_WEBGL_draw_buffers\",\"webgl_enable_WEBGL_multi_draw\",\"webgl_enable_EXT_polygon_offset_clamp\",\"webgl_enable_EXT_clip_control\",\"webgl_enable_WEBGL_polygon_mode\",\"emscriptenWebGLGet\",\"computeUnpackAlignedImageSize\",\"colorChannelsInGlTextureFormat\",\"emscriptenWebGLGetTexPixelData\",\"emscriptenWebGLGetUniform\",\"webglGetProgramUniformLocation\",\"webglGetUniformLocation\",\"webglPrepareUniformLocationsBeforeFirstUse\",\"webglGetLeftBracePos\",\"emscriptenWebGLGetVertexAttrib\",\"__glGetActiveAttribOrUniform\",\"writeGLArray\",\"registerWebGlEventCallback\",\"runAndAbortIfError\",\"ALLOC_NORMAL\",\"ALLOC_STACK\",\"allocate\",\"writeStringToMemory\",\"writeAsciiToMemory\",\"allocateUTF8\",\"allocateUTF8OnStack\",\"demangle\",\"stackTrace\",\"getNativeTypeSize\",\"getFunctionArgsName\",\"createJsInvokerSignature\",\"getEnumValueType\",\"createJsInvoker\",\"PureVirtualError\",\"registerInheritedInstance\",\"unregisterInheritedInstance\",\"getInheritedInstanceCount\",\"getLiveInheritedInstances\",\"enumReadValueFromPointer\",\"setDelayFunction\",\"validateThis\",\"count_emval_handles\"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=[\"run\",\"out\",\"err\",\"callMain\",\"abort\",\"wasmExports\",\"writeStackCookie\",\"checkStackCookie\",\"INT53_MAX\",\"INT53_MIN\",\"bigintToI53Checked\",\"HEAP8\",\"HEAPU8\",\"HEAP16\",\"HEAPU16\",\"HEAP32\",\"HEAPU32\",\"HEAPF32\",\"HEAPF64\",\"HEAP64\",\"HEAPU64\",\"stackSave\",\"stackRestore\",\"createNamedFunction\",\"ptrToString\",\"getHeapMax\",\"growMemory\",\"ENV\",\"ERRNO_CODES\",\"strError\",\"inetPton4\",\"inetNtop4\",\"inetPton6\",\"inetNtop6\",\"readSockaddr\",\"DNS\",\"Protocols\",\"Sockets\",\"timers\",\"warnOnce\",\"readEmAsmArgsArray\",\"readEmAsmArgs\",\"runEmAsmFunction\",\"getExecutableName\",\"asyncLoad\",\"alignMemory\",\"mmapAlloc\",\"wasmTable\",\"wasmMemory\",\"getUniqueRunDependency\",\"noExitRuntime\",\"addOnPreRun\",\"freeTableIndexes\",\"functionsInTableMap\",\"setValue\",\"getValue\",\"PATH\",\"PATH_FS\",\"UTF8Decoder\",\"UTF8ArrayToString\",\"stringToUTF8Array\",\"lengthBytesUTF8\",\"intArrayFromString\",\"AsciiToString\",\"UTF16Decoder\",\"UTF16ToString\",\"stringToUTF16\",\"lengthBytesUTF16\",\"UTF32ToString\",\"stringToUTF32\",\"lengthBytesUTF32\",\"JSEvents\",\"specialHTMLTargets\",\"findCanvasEventTarget\",\"restoreOldWindowedStyle\",\"UNWIND_CACHE\",\"ExitStatus\",\"getEnvStrings\",\"checkWasiClock\",\"doReadv\",\"doWritev\",\"initRandomFill\",\"randomFill\",\"emSetImmediate\",\"emClearImmediate_deps\",\"emClearImmediate\",\"promiseMap\",\"uncaughtExceptionCount\",\"exceptionCaught\",\"ExceptionInfo\",\"Browser\",\"requestFullscreen\",\"requestFullScreen\",\"setCanvasSize\",\"getUserMedia\",\"createContext\",\"getPreloadedImageData__data\",\"wget\",\"MONTH_DAYS_REGULAR\",\"MONTH_DAYS_LEAP\",\"MONTH_DAYS_REGULAR_CUMULATIVE\",\"MONTH_DAYS_LEAP_CUMULATIVE\",\"isLeapYear\",\"ydayFromDate\",\"SYSCALLS\",\"getSocketFromFD\",\"getSocketAddress\",\"preloadPlugins\",\"FS_createPreloadedFile\",\"FS_modeStringToFlags\",\"FS_getMode\",\"FS_fileDataToTypedArray\",\"FS_stdin_getChar_buffer\",\"FS_stdin_getChar\",\"FS_readFile\",\"FS_root\",\"FS_mounts\",\"FS_devices\",\"FS_streams\",\"FS_nextInode\",\"FS_nameTable\",\"FS_currentPath\",\"FS_initialized\",\"FS_ignorePermissions\",\"FS_filesystems\",\"FS_syncFSRequests\",\"FS_lookupPath\",\"FS_getPath\",\"FS_hashName\",\"FS_hashAddNode\",\"FS_hashRemoveNode\",\"FS_lookupNode\",\"FS_createNode\",\"FS_destroyNode\",\"FS_isRoot\",\"FS_isMountpoint\",\"FS_isFile\",\"FS_isDir\",\"FS_isLink\",\"FS_isChrdev\",\"FS_isBlkdev\",\"FS_isFIFO\",\"FS_isSocket\",\"FS_flagsToPermissionString\",\"FS_nodePermissions\",\"FS_mayLookup\",\"FS_mayCreate\",\"FS_mayDelete\",\"FS_mayOpen\",\"FS_checkOpExists\",\"FS_nextfd\",\"FS_getStreamChecked\",\"FS_getStream\",\"FS_createStream\",\"FS_closeStream\",\"FS_dupStream\",\"FS_doSetAttr\",\"FS_chrdev_stream_ops\",\"FS_major\",\"FS_minor\",\"FS_makedev\",\"FS_registerDevice\",\"FS_getDevice\",\"FS_getMounts\",\"FS_syncfs\",\"FS_mount\",\"FS_unmount\",\"FS_lookup\",\"FS_mknod\",\"FS_statfs\",\"FS_statfsStream\",\"FS_statfsNode\",\"FS_create\",\"FS_mkdir\",\"FS_mkdev\",\"FS_symlink\",\"FS_link\",\"FS_rename\",\"FS_rmdir\",\"FS_readdir\",\"FS_readlink\",\"FS_stat\",\"FS_fstat\",\"FS_lstat\",\"FS_doChmod\",\"FS_chmod\",\"FS_lchmod\",\"FS_fchmod\",\"FS_doChown\",\"FS_chown\",\"FS_lchown\",\"FS_fchown\",\"FS_doTruncate\",\"FS_truncate\",\"FS_ftruncate\",\"FS_utime\",\"FS_open\",\"FS_close\",\"FS_isClosed\",\"FS_llseek\",\"FS_read\",\"FS_write\",\"FS_mmap\",\"FS_msync\",\"FS_ioctl\",\"FS_writeFile\",\"FS_cwd\",\"FS_chdir\",\"FS_createDefaultDirectories\",\"FS_createDefaultDevices\",\"FS_createSpecialDirectories\",\"FS_createStandardStreams\",\"FS_staticInit\",\"FS_init\",\"FS_quit\",\"FS_findObject\",\"FS_analyzePath\",\"FS_createFile\",\"FS_forceLoadFile\",\"MEMFS\",\"TTY\",\"PIPEFS\",\"SOCKFS\",\"tempFixedLengthArray\",\"miniTempWebGLFloatBuffers\",\"miniTempWebGLIntBuffers\",\"GL\",\"AL\",\"GLUT\",\"EGL\",\"GLEW\",\"IDBStore\",\"SDL\",\"SDL_gfx\",\"print\",\"printErr\",\"jstoi_s\",\"InternalError\",\"BindingError\",\"throwInternalError\",\"throwBindingError\",\"registeredTypes\",\"awaitingDependencies\",\"typeDependencies\",\"tupleRegistrations\",\"structRegistrations\",\"sharedRegisterType\",\"whenDependentTypesAreResolved\",\"getTypeName\",\"getFunctionName\",\"heap32VectorToArray\",\"requireRegisteredType\",\"usesDestructorStack\",\"checkArgCount\",\"getRequiredArgCount\",\"UnboundTypeError\",\"EmValType\",\"EmValOptionalType\",\"throwUnboundTypeError\",\"ensureOverloadTable\",\"exposePublicSymbol\",\"replacePublicSymbol\",\"embindRepr\",\"registeredInstances\",\"getBasestPointer\",\"getInheritedInstance\",\"registeredPointers\",\"registerType\",\"integerReadValueFromPointer\",\"floatReadValueFromPointer\",\"assertIntegerRange\",\"readPointer\",\"installIndexedIterator\",\"runDestructors\",\"craftInvokerFunction\",\"embind__requireFunction\",\"genericPointerToWireType\",\"constNoSmartPtrRawPointerToWireType\",\"nonConstNoSmartPtrRawPointerToWireType\",\"init_RegisteredPointer\",\"RegisteredPointer\",\"RegisteredPointer_fromWireType\",\"runDestructor\",\"releaseClassHandle\",\"finalizationRegistry\",\"detachFinalizer_deps\",\"detachFinalizer\",\"attachFinalizer\",\"makeClassHandle\",\"init_ClassHandle\",\"ClassHandle\",\"throwInstanceAlreadyDeleted\",\"deletionQueue\",\"flushPendingDeletes\",\"delayFunction\",\"RegisteredClass\",\"shallowCopyInternalPointer\",\"downcastPointer\",\"upcastPointer\",\"char_0\",\"char_9\",\"makeLegalFunctionName\",\"emval_freelist\",\"emval_handles\",\"emval_symbols\",\"getStringOrSymbol\",\"Emval\",\"emval_returnValue\",\"emval_lookupTypes\",\"emval_methodCallers\",\"emval_addMethodCaller\"];unexportedSymbols.forEach(unexportedRuntimeSymbol);function checkIncomingModuleAPI(){ignoredModuleProp(\"ENVIRONMENT\");ignoredModuleProp(\"arguments\");ignoredModuleProp(\"canvas\");ignoredModuleProp(\"dynamicLibraries\");ignoredModuleProp(\"elementPointerLock\");ignoredModuleProp(\"instantiateWasm\");ignoredModuleProp(\"locateFile\");ignoredModuleProp(\"monitorRunDependencies\");ignoredModuleProp(\"noExitRuntime\");ignoredModuleProp(\"noInitialRun\");ignoredModuleProp(\"onAbort\");ignoredModuleProp(\"onExit\");ignoredModuleProp(\"onRuntimeInitialized\");ignoredModuleProp(\"postRun\");ignoredModuleProp(\"preInit\");ignoredModuleProp(\"print\");ignoredModuleProp(\"printErr\");ignoredModuleProp(\"setStatus\");ignoredModuleProp(\"statusMessage\");ignoredModuleProp(\"stderr\");ignoredModuleProp(\"stdin\");ignoredModuleProp(\"stdout\");ignoredModuleProp(\"thisProgram\");ignoredModuleProp(\"wasm\");ignoredModuleProp(\"websocket\");ignoredModuleProp(\"fetchSettings\");ignoredModuleProp(\"logReadFiles\");ignoredModuleProp(\"loadSplitModule\");ignoredModuleProp(\"onMalloc\");ignoredModuleProp(\"onRealloc\");ignoredModuleProp(\"onFree\");ignoredModuleProp(\"onSbrkGrow\");ignoredModuleProp(\"onCOSCacheHit\");ignoredModuleProp(\"onCOSCacheMiss\");ignoredModuleProp(\"onCOSStore\");ignoredModuleProp(\"GL_MAX_TEXTURE_IMAGE_UNITS\");ignoredModuleProp(\"SDL_canPlayWithWebAudio\");ignoredModuleProp(\"SDL_numSimultaneouslyQueuedBuffers\");ignoredModuleProp(\"freePreloadedMediaOnUse\");ignoredModuleProp(\"preinitializedWebGLContext\");ignoredModuleProp(\"keyboardListeningElement\");ignoredModuleProp(\"doNotCaptureKeyboard\");ignoredModuleProp(\"extraStackTrace\");ignoredModuleProp(\"preloadPlugins\");ignoredModuleProp(\"preMainLoop\");ignoredModuleProp(\"postMainLoop\");ignoredModuleProp(\"forcedAspectRatio\");ignoredModuleProp(\"mainScriptUrlOrBlob\");ignoredModuleProp(\"onFullScreen\");ignoredModuleProp(\"INITIAL_MEMORY\");ignoredModuleProp(\"wasmMemory\")}var ASM_CONSTS={167012:$0=>{var dsp_code=\"\";try{var xmlhttp=new XMLHttpRequest;xmlhttp.open(\"GET\",Module.UTF8ToString($0),false);xmlhttp.send();if(xmlhttp.status==200){dsp_code=xmlhttp.responseText}}catch(e){console.log(e)}return allocate(intArrayFromString(dsp_code),\"i8\",ALLOC_STACK)}};var ___getTypeName=makeInvalidEarlyAccess(\"___getTypeName\");var _malloc=makeInvalidEarlyAccess(\"_malloc\");var _free=makeInvalidEarlyAccess(\"_free\");var _strerror=makeInvalidEarlyAccess(\"_strerror\");var _htons=makeInvalidEarlyAccess(\"_htons\");var _fflush=makeInvalidEarlyAccess(\"_fflush\");var _ntohs=makeInvalidEarlyAccess(\"_ntohs\");var _emscripten_stack_get_end=makeInvalidEarlyAccess(\"_emscripten_stack_get_end\");var _emscripten_stack_get_base=makeInvalidEarlyAccess(\"_emscripten_stack_get_base\");var _emscripten_stack_init=makeInvalidEarlyAccess(\"_emscripten_stack_init\");var _emscripten_stack_get_free=makeInvalidEarlyAccess(\"_emscripten_stack_get_free\");var __emscripten_stack_restore=makeInvalidEarlyAccess(\"__emscripten_stack_restore\");var __emscripten_stack_alloc=makeInvalidEarlyAccess(\"__emscripten_stack_alloc\");var _emscripten_stack_get_current=makeInvalidEarlyAccess(\"_emscripten_stack_get_current\");var memory=makeInvalidEarlyAccess(\"memory\");var __indirect_function_table=makeInvalidEarlyAccess(\"__indirect_function_table\");var wasmMemory=makeInvalidEarlyAccess(\"wasmMemory\");var wasmTable=makeInvalidEarlyAccess(\"wasmTable\");function assignWasmExports(wasmExports){assert(typeof wasmExports[\"__getTypeName\"]!=\"undefined\",\"missing Wasm export: __getTypeName\");assert(typeof wasmExports[\"malloc\"]!=\"undefined\",\"missing Wasm export: malloc\");assert(typeof wasmExports[\"free\"]!=\"undefined\",\"missing Wasm export: free\");assert(typeof wasmExports[\"strerror\"]!=\"undefined\",\"missing Wasm export: strerror\");assert(typeof wasmExports[\"htons\"]!=\"undefined\",\"missing Wasm export: htons\");assert(typeof wasmExports[\"fflush\"]!=\"undefined\",\"missing Wasm export: fflush\");assert(typeof wasmExports[\"ntohs\"]!=\"undefined\",\"missing Wasm export: ntohs\");assert(typeof wasmExports[\"emscripten_stack_get_end\"]!=\"undefined\",\"missing Wasm export: emscripten_stack_get_end\");assert(typeof wasmExports[\"emscripten_stack_get_base\"]!=\"undefined\",\"missing Wasm export: emscripten_stack_get_base\");assert(typeof wasmExports[\"emscripten_stack_init\"]!=\"undefined\",\"missing Wasm export: emscripten_stack_init\");assert(typeof wasmExports[\"emscripten_stack_get_free\"]!=\"undefined\",\"missing Wasm export: emscripten_stack_get_free\");assert(typeof wasmExports[\"_emscripten_stack_restore\"]!=\"undefined\",\"missing Wasm export: _emscripten_stack_restore\");assert(typeof wasmExports[\"_emscripten_stack_alloc\"]!=\"undefined\",\"missing Wasm export: _emscripten_stack_alloc\");assert(typeof wasmExports[\"emscripten_stack_get_current\"]!=\"undefined\",\"missing Wasm export: emscripten_stack_get_current\");assert(typeof wasmExports[\"memory\"]!=\"undefined\",\"missing Wasm export: memory\");assert(typeof wasmExports[\"__indirect_function_table\"]!=\"undefined\",\"missing Wasm export: __indirect_function_table\");___getTypeName=createExportWrapper(\"__getTypeName\",wasmExports[\"__getTypeName\"],1);_malloc=createExportWrapper(\"malloc\",wasmExports[\"malloc\"],1);_free=createExportWrapper(\"free\",wasmExports[\"free\"],1);_strerror=createExportWrapper(\"strerror\",wasmExports[\"strerror\"],1);_htons=createExportWrapper(\"htons\",wasmExports[\"htons\"],1);_fflush=createExportWrapper(\"fflush\",wasmExports[\"fflush\"],1);_ntohs=createExportWrapper(\"ntohs\",wasmExports[\"ntohs\"],1);_emscripten_stack_get_end=wasmExports[\"emscripten_stack_get_end\"];_emscripten_stack_get_base=wasmExports[\"emscripten_stack_get_base\"];_emscripten_stack_init=wasmExports[\"emscripten_stack_init\"];_emscripten_stack_get_free=wasmExports[\"emscripten_stack_get_free\"];__emscripten_stack_restore=wasmExports[\"_emscripten_stack_restore\"];__emscripten_stack_alloc=wasmExports[\"_emscripten_stack_alloc\"];_emscripten_stack_get_current=wasmExports[\"emscripten_stack_get_current\"];memory=wasmMemory=wasmExports[\"memory\"];__indirect_function_table=wasmTable=wasmExports[\"__indirect_function_table\"]}var wasmImports={__assert_fail:___assert_fail,__cxa_throw:___cxa_throw,__syscall_chdir:___syscall_chdir,__syscall_connect:___syscall_connect,__syscall_fcntl64:___syscall_fcntl64,__syscall_getcwd:___syscall_getcwd,__syscall_ioctl:___syscall_ioctl,__syscall_mkdirat:___syscall_mkdirat,__syscall_openat:___syscall_openat,__syscall_poll:___syscall_poll,__syscall_readlinkat:___syscall_readlinkat,__syscall_socket:___syscall_socket,_abort_js:__abort_js,_embind_finalize_value_object:__embind_finalize_value_object,_embind_register_bigint:__embind_register_bigint,_embind_register_bool:__embind_register_bool,_embind_register_class:__embind_register_class,_embind_register_class_constructor:__embind_register_class_constructor,_embind_register_class_function:__embind_register_class_function,_embind_register_emval:__embind_register_emval,_embind_register_float:__embind_register_float,_embind_register_integer:__embind_register_integer,_embind_register_iterable:__embind_register_iterable,_embind_register_memory_view:__embind_register_memory_view,_embind_register_optional:__embind_register_optional,_embind_register_std_string:__embind_register_std_string,_embind_register_std_wstring:__embind_register_std_wstring,_embind_register_value_object:__embind_register_value_object,_embind_register_value_object_field:__embind_register_value_object_field,_embind_register_void:__embind_register_void,_emscripten_lookup_name:__emscripten_lookup_name,_emval_create_invoker:__emval_create_invoker,_emval_invoke:__emval_invoke,_emval_run_destructors:__emval_run_destructors,_localtime_js:__localtime_js,_tzset_js:__tzset_js,clock_time_get:_clock_time_get,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_date_now:_emscripten_date_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write};var calledRun;function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}async function run(){assert(!calledRun);calledRun=true;stackCheckInit();preRun();if(runDependencies){await resolveRunDependencies()}if(ABORT)return;initRuntime();assert(!Module[\"_main\"],'compiled without a main, but one is present. if you added it from JS, use Module[\"onRuntimeInitialized\"]');postRun()}var wasmExports;wasmExports=await createWasm();await run();for(const prop of Object.keys(Module)){if(!(prop in moduleArg)){Object.defineProperty(moduleArg,prop,{configurable:true,get(){abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}})}}\n;return Module}})();if(typeof exports===\"object\"&&typeof module===\"object\"){module.exports=FaustModule;module.exports.default=FaustModule}else if(typeof define===\"function\"&&define[\"amd\"])define([],()=>FaustModule);\n", "import factoryFn from '../libfaust-wasm/libfaust-wasm.cjs';\nimport wasmBinary from '../libfaust-wasm/libfaust-wasm.wasm';\nimport dataBinary from '../libfaust-wasm/libfaust-wasm.data';\n\nexport const FaustModuleFactoryFn = factoryFn;\nexport const FaustModuleFactoryWasm = wasmBinary;\nexport const FaustModuleFactoryData = dataBinary;\n\n/**\n * Instantiate `FaustModule` using bundled binaries. Module constructor and files can be overriden.\n */\nconst instantiateFaustModule = async (\n FaustModuleFactoryIn = factoryFn,\n dataBinaryIn = dataBinary,\n wasmBinaryIn = wasmBinary\n) => {\n const g = globalThis as any;\n if (g.AudioWorkletGlobalScope) {\n g.importScripts = () => {};\n g.self = { location: { href: '' } };\n }\n const faustModule = await FaustModuleFactoryIn({\n // Create a copy to guarantee a standard ArrayBuffer\n wasmBinary: new Uint8Array(wasmBinaryIn).buffer,\n getPreloadedPackage: (\n remotePackageName: string,\n remotePackageSize: number\n ) => {\n if (remotePackageName === 'libfaust-wasm.data') {\n // Create a copy to guarantee a standard ArrayBuffer\n return new Uint8Array(dataBinaryIn).buffer;\n }\n return new ArrayBuffer(0);\n }\n });\n if (g.AudioWorkletGlobalScope) {\n delete g.importScripts;\n delete g.self;\n }\n return faustModule;\n};\n\nexport default instantiateFaustModule;\n", "import type { FaustModuleFactory } from './types';\n\n/**\n * Load libfaust-wasm files, than instantiate libFaust\n * @param jsFile path to `libfaust-wasm.js`\n * @param dataFile path to `libfaust-wasm.data`\n * @param wasmFile path to `libfaust-wasm.wasm`\n */\nconst instantiateFaustModuleFromFile = async (\n jsFile: string,\n dataFile = jsFile.replace(/c?js$/, 'data'),\n wasmFile = jsFile.replace(/c?js$/, 'wasm')\n) => {\n let FaustModule: FaustModuleFactory;\n let dataBinary: ArrayBuffer;\n let wasmBinary: ArrayBuffer;\n // Match both `var FaustModule = (` (older emcc) and `var FaustModule=(` (emcc 5.x)\n const jsCodeHead = /var (\\w+)\\s*=\\s*\\(/;\n if (typeof window === 'object') {\n let jsCode = await (await fetch(jsFile)).text();\n jsCode = `${jsCode}\nexport default ${jsCode.match(jsCodeHead)?.[1]};\n`;\n const jsFileMod = URL.createObjectURL(\n new Blob([jsCode], { type: 'text/javascript' })\n );\n FaustModule = (await import(/* webpackIgnore: true */ jsFileMod))\n .default;\n dataBinary = await (await fetch(dataFile)).arrayBuffer();\n wasmBinary = await (await fetch(wasmFile)).arrayBuffer();\n } else {\n const { promises: fs } = await import('fs');\n const { pathToFileURL } = await import('url');\n let jsCode = await fs.readFile(jsFile, { encoding: 'utf-8' });\n jsCode = `\nimport process from \"process\";\nimport * as path from \"path\";\nimport { createRequire } from \"module\";\nimport { fileURLToPath } from \"url\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst __filename = fileURLToPath(import.meta.url);\nconst require = createRequire(import.meta.url);\n\n${jsCode}\n\nexport default ${jsCode.match(jsCodeHead)?.[1]};\n`;\n const jsFileMod = jsFile.replace(/c?js$/, 'mjs');\n await fs.writeFile(jsFileMod, jsCode);\n FaustModule = (\n await import(\n /* webpackIgnore: true */ pathToFileURL(jsFileMod).href\n )\n ).default;\n await fs.unlink(jsFileMod);\n // Using a type assertion `as ArrayBuffer` to satisfy the strict type checking.\n dataBinary = new Uint8Array(await fs.readFile(dataFile))\n .buffer as ArrayBuffer;\n wasmBinary = new Uint8Array(await fs.readFile(wasmFile))\n .buffer as ArrayBuffer;\n }\n const faustModule = await FaustModule({\n wasmBinary,\n getPreloadedPackage: (\n remotePackageName: string,\n remotePackageSize: number\n ) => {\n if (remotePackageName === 'libfaust-wasm.data') return dataBinary;\n return new ArrayBuffer(0);\n }\n });\n return faustModule;\n};\n\nexport default instantiateFaustModuleFromFile;\n", "import type { FaustAudioWorkletProcessorCommunicator } from './FaustAudioWorkletCommunicator';\nimport type FaustWasmInstantiator from './FaustWasmInstantiator';\nimport type {\n FaustBaseWebAudioDsp,\n FaustTimedEvent,\n FaustWebAudioDspVoice,\n FaustMonoWebAudioDsp,\n FaustPolyWebAudioDsp\n} from './FaustWebAudioDsp';\nimport type {\n AudioParamDescriptor,\n AudioWorkletGlobalScope,\n LooseFaustDspFactory,\n FaustDspMeta,\n FaustUIItem\n} from './types';\nimport type {\n AudioWorkletGlobalScope as WamAudioWorkletGlobalScope,\n WamParamMgrSDKBaseModuleScope\n} from '@webaudiomodules/sdk-parammgr';\n\n/**\n * When a port message should take effect.\n *\n * Both fields are on the audio clock, the one `AudioParam` is scheduled\n * against: `time` in AudioContext seconds, `frame` in samples for a sender\n * that already counts in samples. Neither field means \"on arrival\".\n */\nexport interface FaustMessageTime {\n /** AudioContext seconds, as passed to `AudioParam.setValueAtTime` */\n time?: number;\n /** The same instant in samples since the context started */\n frame?: number;\n}\n\n/**\n * Injected in the string to be compiled on AudioWorkletProcessor side\n */\nexport interface FaustData {\n processorName: string;\n dspName: string;\n dspMeta: FaustDspMeta;\n poly: boolean;\n effectMeta?: FaustDspMeta;\n}\nexport interface FaustAudioWorkletProcessorDependencies<\n Poly extends boolean = false\n> {\n FaustBaseWebAudioDsp: typeof FaustBaseWebAudioDsp;\n FaustMonoWebAudioDsp: Poly extends true\n ? undefined\n : typeof FaustMonoWebAudioDsp;\n FaustPolyWebAudioDsp: Poly extends true\n ? typeof FaustPolyWebAudioDsp\n : undefined;\n FaustWebAudioDspVoice: Poly extends true\n ? typeof FaustWebAudioDspVoice\n : undefined;\n FaustWasmInstantiator: typeof FaustWasmInstantiator;\n FaustAudioWorkletProcessorCommunicator: typeof FaustAudioWorkletProcessorCommunicator;\n}\nexport interface FaustAudioWorkletNodeOptions<\n Poly extends boolean = false\n> extends AudioWorkletNodeOptions {\n processorOptions: Poly extends true\n ? FaustPolyAudioWorkletProcessorOptions\n : FaustMonoAudioWorkletProcessorOptions;\n}\nexport interface FaustMonoAudioWorkletNodeOptions extends AudioWorkletNodeOptions {\n processorOptions: FaustMonoAudioWorkletProcessorOptions;\n}\nexport interface FaustPolyAudioWorkletNodeOptions extends AudioWorkletNodeOptions {\n processorOptions: FaustPolyAudioWorkletProcessorOptions;\n}\nexport interface FaustAudioWorkletProcessorOptions {\n name: string;\n sampleSize: number;\n // for WAMs\n moduleId?: string;\n instanceId?: string;\n}\nexport interface FaustMonoAudioWorkletProcessorOptions extends FaustAudioWorkletProcessorOptions {\n factory: LooseFaustDspFactory;\n}\nexport interface FaustPolyAudioWorkletProcessorOptions extends FaustAudioWorkletProcessorOptions {\n voiceFactory: LooseFaustDspFactory;\n mixerModule: WebAssembly.Module;\n voices: number;\n effectFactory?: LooseFaustDspFactory;\n}\n\n// Dynamic AudioWorkletProcessor code generator\nconst getFaustAudioWorkletProcessor = <Poly extends boolean = false>(\n dependencies: FaustAudioWorkletProcessorDependencies<Poly>,\n faustData: FaustData,\n register = true\n): typeof AudioWorkletProcessor => {\n const { registerProcessor, AudioWorkletProcessor, sampleRate } =\n globalThis as unknown as AudioWorkletGlobalScope;\n\n // `currentFrame` is the audio clock in samples. It advances every\n // `process` call, so it must be read then, not destructured once.\n const audioClock = globalThis as unknown as AudioWorkletGlobalScope;\n\n // The render quantum, fixed by the Web Audio API and matching the buffer\n // size the DSPs below are constructed with.\n const kBlockSize = 128;\n\n /**\n * A timed event, plus a tie-break for events sharing a frame.\n *\n * Frame alone leaves two events on the same sample unordered, and a\n * `keyOff` sorting ahead of its own `keyOn` leaves a voice stuck on. The\n * ranking is the order these three ran in before any of them were timed:\n * automation first, as the state the block starts from, then sensors, then\n * messages in the order the queue hands them over.\n */\n type FaustTimedEventSeq = FaustTimedEvent & { seq: number };\n\n const kFromAutomation = -2;\n const kFromSensors = -1;\n\n /** Stands in for the `apply` of a cancelled event. */\n const kCancelled = () => {};\n\n /**\n * Where a control stops looking like a series of edges and starts looking\n * like a ramp, and how coarsely a ramp is then followed.\n *\n * Every Faust slider is an a-rate AudioParam, so one\n * `linearRampToValueAtTime` gives `process` 128 distinct values for a\n * single control. Honouring each would mean 128 one-frame `compute` calls\n * per block, each re-running the DSP's control section, plus 128\n * `in-param` messages to the main thread.\n *\n * Sample accuracy is for edges -- gates, triggers, switches -- which move\n * once or twice a block. A control that changes more often than\n * `kRampChanges` is followed every `kRampStride` changes instead, plus the\n * value it ends the block on.\n */\n const kRampChanges = 16;\n const kRampStride = 16;\n\n const {\n FaustBaseWebAudioDsp,\n FaustWasmInstantiator,\n FaustAudioWorkletProcessorCommunicator\n } = dependencies;\n\n const { processorName, dspName, dspMeta, effectMeta, poly } = faustData;\n\n // Analyse voice JSON to generate AudioParam parameters\n const analysePolyParameters = (\n item: FaustUIItem\n ): AudioParamDescriptor | null => {\n const polyKeywords = [\n '/gate',\n '/freq',\n '/gain',\n '/key',\n '/vel',\n '/velocity'\n ];\n const isPolyReserved =\n 'address' in item &&\n !!polyKeywords.find((k) => item.address.endsWith(k));\n if (poly && isPolyReserved) return null;\n if (\n item.type === 'vslider' ||\n item.type === 'hslider' ||\n item.type === 'nentry'\n ) {\n return {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: item.min || 0,\n maxValue: item.max || 0\n };\n } else if (item.type === 'button' || item.type === 'checkbox') {\n return {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: 0,\n maxValue: 1\n };\n }\n return null;\n };\n\n /**\n * Base class for Monophonic and Polyphonic AudioWorkletProcessor\n */\n abstract class FaustAudioWorkletProcessor<\n Poly extends boolean = false\n > extends AudioWorkletProcessor {\n // Use ! syntax when the field is not defined in the constructor\n protected fDSPCode!: Poly extends true\n ? FaustPolyWebAudioDsp\n : FaustMonoWebAudioDsp;\n\n protected paramValuesCache: Record<string, number> = {};\n\n /**\n * Port messages waiting for the block they were timestamped for.\n *\n * Sorted by frame, then by arrival. `process` drains everything up to\n * the end of the block it is about to render; the rest waits.\n */\n protected fEventQueue: FaustTimedEventSeq[] = [];\n protected fEventSeq = 0;\n\n /**\n * The events of the block about to be rendered.\n *\n * Refilled rather than reallocated, so a quiet block allocates\n * nothing.\n */\n protected fBlockEvents: FaustTimedEventSeq[] = [];\n\n /**\n * Scratch space for the frames one control's automation changed on.\n * Reused for the same reason as `fBlockEvents`.\n */\n protected fChangedFrames: number[] = [];\n\n protected wamInfo?: { moduleId: string; instanceId: string };\n protected fCommunicator: FaustAudioWorkletProcessorCommunicator;\n\n constructor(options: FaustAudioWorkletNodeOptions<Poly>) {\n super(options);\n\n // Setup port message handling\n this.fCommunicator = new FaustAudioWorkletProcessorCommunicator(\n this.port\n );\n\n const { parameterDescriptors } = this\n .constructor as typeof AudioWorkletProcessor;\n parameterDescriptors.forEach((pd) => {\n this.paramValuesCache[pd.name] = pd.defaultValue || 0;\n });\n\n const { moduleId, instanceId } = options.processorOptions;\n if (!moduleId || !instanceId) return;\n this.wamInfo = { moduleId, instanceId };\n }\n\n static get parameterDescriptors() {\n const params = [] as AudioParamDescriptor[];\n // A path may appear once across the voice and the effect together.\n // `AudioWorkletGlobalScope.registerProcessor` rejects a duplicate\n // descriptor name, and its own message names neither the side the\n // path came from nor the fact that the two DSPs are what collided,\n // so the duplicate is caught here and reported with both.\n //\n // Deduplicating instead would compile but not work:\n // `FaustPolyWebAudioDsp.setParamValue` routes a path to the effect\n // *or* to the voices, never both, so a shared control would drive\n // one side and silently leave the other at its default. A DSP that\n // needs one value on both sides has to declare it twice, under two\n // paths, and the host must write both.\n const origin = new Map<string, string>();\n const collect = (side: string) => (item: FaustUIItem) => {\n const param = analysePolyParameters(item);\n if (!param) return;\n const previous = origin.get(param.name);\n if (previous === side) {\n throw new Error(\n `Faust: control \"${param.name}\" is declared twice in the ${side}. ` +\n `Two widgets resolved to the same path, so one of them would be ` +\n `unreachable. Give them distinct labels or groups.`\n );\n }\n if (previous !== undefined) {\n throw new Error(\n `Faust: control \"${param.name}\" is declared both in the ${previous} and in the ${side}. ` +\n `A polyphonic DSP cannot share a control path between \\`process\\` and \\`effect\\`: ` +\n `setParamValue routes a path to one side only, so the other would keep its default. ` +\n `Declare it under a distinct path on each side and have the host write both.`\n );\n }\n origin.set(param.name, side);\n params.push(param);\n };\n // Analyse voice JSON to generate AudioParam parameters\n FaustBaseWebAudioDsp.parseUI(dspMeta.ui, collect('voice'));\n // Analyse effect JSON to generate AudioParam parameters\n if (effectMeta)\n FaustBaseWebAudioDsp.parseUI(effectMeta.ui, collect('effect'));\n return params;\n }\n\n setupWamEventHandler() {\n if (!this.wamInfo) return;\n const { moduleId, instanceId } = this.wamInfo;\n const { webAudioModules } =\n globalThis as unknown as WamAudioWorkletGlobalScope;\n const ModuleScope = webAudioModules.getModuleScope(\n moduleId\n ) as WamParamMgrSDKBaseModuleScope;\n const paramMgrProcessor =\n ModuleScope?.paramMgrProcessors?.[instanceId];\n if (!paramMgrProcessor) return;\n if (paramMgrProcessor.handleEvent) return;\n paramMgrProcessor.handleEvent = (event) => {\n // A WamEvent's `time` is AudioContext seconds, the same clock\n // a timestamped port message uses, so it goes through the same\n // queue. A host that sends none gets what it always got: the\n // message applied on arrival.\n if (event.type === 'wam-midi')\n this.atTime(event, () => this.midiMessage(event.data.bytes));\n };\n }\n\n /**\n * Read a message's timestamp as a whole frame on the audio clock.\n * Null if it carries none, meaning now.\n *\n * Both routes round, and both reject anything non-finite. A fraction\n * would become a fractional slice count and a channel pointer partway\n * through a sample. A NaN compares false against every frame, so a\n * queued one would stay at the head of the queue and block every event\n * behind it.\n */\n protected messageFrame(msg: FaustMessageTime): number | null {\n const frame = Number.isFinite(msg.frame as number)\n ? (msg.frame as number)\n : Number.isFinite(msg.time as number)\n ? (msg.time as number) * sampleRate\n : null;\n return frame === null ? null : Math.round(frame);\n }\n\n /**\n * Apply `apply` now, or queue it for the frame the sender asked for.\n *\n * Untimed messages are applied on arrival, between two blocks, which\n * is equivalent to frame 0 of the next one. A throw from one of those\n * escapes the port handler and costs that message, as it always did.\n *\n * Timed ones have to catch. They run from inside `process`, and the\n * Web Audio spec's response to a `process` that throws is to fire\n * `processorerror` and stop calling the node -- so one bad message\n * would silence the device permanently.\n */\n protected atTime(msg: FaustMessageTime, apply: () => void) {\n const frame = this.messageFrame(msg);\n if (frame === null) {\n apply();\n return;\n }\n const event = {\n frame,\n seq: this.fEventSeq++,\n apply: () => {\n try {\n apply();\n } catch (error) {\n console.error(\n `Faust: a message timed for frame ${frame} threw and was dropped`,\n error\n );\n }\n }\n };\n // Insert from the back: a sequencer posts in time order, so the\n // common case is a comparison or two.\n let i = this.fEventQueue.length;\n while (i > 0 && this.fEventQueue[i - 1].frame > frame) i--;\n this.fEventQueue.splice(i, 0, event);\n }\n\n /**\n * Cancel everything scheduled and not yet performed.\n *\n * A panic, or the end of the DSP's life, has to reach the notes that\n * have not sounded yet as well as the ones that have -- otherwise they\n * play afterwards, over a device that was told to be quiet.\n *\n * That means the queue and the rest of the block being rendered, whose\n * events have already left the queue. Messages only: automation and\n * sensor writes are the state of the controls through the block, and\n * an all-notes-off should not stop a filter sweep.\n */\n protected flushEvents() {\n this.fEventQueue.length = 0;\n for (const event of this.fBlockEvents) {\n if (event.seq >= 0) event.apply = kCancelled;\n }\n }\n\n /**\n * Whether a controller number silences the instrument.\n *\n * Exactly the two `FaustPolyWebAudioDsp.ctrlChange` treats as\n * all-notes-off. Not 121, which resets controllers without ending a\n * note, and not 122, which is a keyboard's local control.\n */\n protected isPanic(ctrl: number) {\n return ctrl === 120 || ctrl === 123;\n }\n\n /**\n * One control's automation for the block, as events.\n *\n * A control that holds arrives as a single value, worth an event only\n * if it differs from what the DSP has. A control that moves arrives as\n * 128, and each change is an edge due on its own frame.\n *\n * Reading only `[0]`, as this used to, pushes every `setValueAtTime`\n * out to the next block boundary and misses a `1 -> 0 -> 1` inside one\n * block completely -- a gate that never retriggers.\n *\n * Above `kRampChanges` the control is ramping rather than stepping,\n * and is followed at `kRampStride`. See the constants.\n */\n protected collectAutomation(\n path: string,\n automation: Float32Array,\n events: FaustTimedEventSeq[]\n ) {\n const changes = this.fChangedFrames;\n changes.length = 0;\n let last = this.paramValuesCache[path];\n for (let i = 0; i < automation.length; i++) {\n if (automation[i] === last) continue;\n last = automation[i];\n changes.push(i);\n }\n if (changes.length === 0) return;\n const stride = changes.length > kRampChanges ? kRampStride : 1;\n for (let n = 0; n < changes.length; n += stride) {\n const frame = changes[n];\n events.push(this.paramEvent(path, automation[frame], frame));\n }\n // Always write the value the block ends on, or the next block\n // compares against a value the DSP was never given.\n const lastChange = changes.length - 1;\n if (lastChange % stride) {\n const frame = changes[lastChange];\n events.push(this.paramEvent(path, automation[frame], frame));\n }\n }\n\n protected paramEvent(\n path: string,\n value: number,\n frame: number\n ): FaustTimedEventSeq {\n return {\n frame,\n seq: kFromAutomation,\n apply: () => this.setParamValue(path, value)\n };\n }\n\n /**\n * Everything due inside the block starting at `start`.\n *\n * Three sources: the automation each `AudioParam` handed over, any new\n * sensor readings, and the port messages timestamped for a frame\n * inside the block.\n *\n * Sorted by frame, and on a tie by source -- see `FaustTimedEventSeq`.\n */\n protected collectEvents(\n parameters: { [key: string]: Float32Array },\n start: number\n ) {\n const events = this.fBlockEvents;\n events.length = 0;\n for (const path in parameters) {\n this.collectAutomation(path, parameters[path], events);\n }\n // Sensor writes used to run after the parameter read and before\n // `compute`, so a control that is both an AudioParam and mapped to\n // an axis took the sensor's value. An event at frame 0 ranked\n // after the automation preserves that.\n if (this.fCommunicator.getNewAccDataAvailable()) {\n const acc = this.fCommunicator.getAcc();\n if (acc) {\n this.fCommunicator.setNewAccDataAvailable(false);\n const { invert, ...data } = acc;\n events.push({\n frame: 0,\n seq: kFromSensors,\n apply: () => this.propagateAcc(data, invert)\n });\n }\n }\n if (this.fCommunicator.getNewGyrDataAvailable()) {\n const gyr = this.fCommunicator.getGyr();\n if (gyr) {\n this.fCommunicator.setNewGyrDataAvailable(false);\n events.push({\n frame: 0,\n seq: kFromSensors,\n apply: () => this.propagateGyr(gyr)\n });\n }\n }\n const end = start + kBlockSize;\n let ordinal = 0;\n while (this.fEventQueue.length && this.fEventQueue[0].frame < end) {\n const event = this.fEventQueue.shift() as FaustTimedEventSeq;\n // A message whose block has passed is late, not lost: it\n // happens at the top of this one. Several of them collapse\n // onto frame 0 together, so the tie-break is the order they\n // come off the queue, which is time order. Posting order would\n // replay an out-of-order schedule out of order.\n event.frame = Math.max(0, event.frame - start);\n event.seq = ordinal++;\n events.push(event);\n }\n if (events.length > 1) {\n events.sort((a, b) => a.frame - b.frame || a.seq - b.seq);\n }\n return events;\n }\n\n process(\n inputs: Float32Array[][],\n outputs: Float32Array[][],\n parameters: { [key: string]: Float32Array }\n ) {\n // Controls, each on the frame it was scheduled for\n const events = this.collectEvents(\n parameters,\n audioClock.currentFrame\n );\n return this.fDSPCode.compute(inputs[0], outputs[0], events);\n }\n\n protected handleMessageAux(e: MessageEvent) {\n // use arrow function for binding\n const msg = e.data;\n\n switch (msg.type) {\n // Generic MIDI message\n case 'midi': {\n this.atTime(msg, () => {\n // A panic as raw bytes, same as the typed case below\n if (\n msg.data[0] >> 4 === 11 &&\n this.isPanic(msg.data[1])\n )\n this.flushEvents();\n this.midiMessage(msg.data);\n });\n break;\n }\n // Typed MIDI message\n case 'ctrlChange': {\n this.atTime(msg, () => {\n if (this.isPanic(msg.data[1])) this.flushEvents();\n this.ctrlChange(msg.data[0], msg.data[1], msg.data[2]);\n });\n break;\n }\n case 'pitchWheel': {\n this.atTime(msg, () =>\n this.pitchWheel(msg.data[0], msg.data[1])\n );\n break;\n }\n case 'keyOn': {\n this.atTime(msg, () =>\n this.keyOn(msg.data[0], msg.data[1], msg.data[2])\n );\n break;\n }\n case 'keyOff': {\n this.atTime(msg, () =>\n this.keyOff(msg.data[0], msg.data[1], msg.data[2])\n );\n break;\n }\n // Generic data message\n case 'param': {\n this.atTime(msg, () =>\n this.setParamValue(msg.data.path, msg.data.value)\n );\n break;\n }\n // Plot handler set on demand\n case 'setPlotHandler': {\n if (msg.data) {\n this.fDSPCode.setPlotHandler((output, index, events) =>\n this.port.postMessage({\n type: 'plot',\n value: output,\n index,\n events\n })\n );\n } else {\n this.fDSPCode.setPlotHandler(null);\n }\n break;\n }\n case 'setupWamEventHandler': {\n this.setupWamEventHandler();\n break;\n }\n case 'init': {\n this.fDSPCode.init();\n break;\n }\n case 'instanceInit': {\n this.fDSPCode.instanceInit();\n break;\n }\n case 'instanceClear': {\n // Notes queued before the clear would put back the state\n // it just cleared.\n this.flushEvents();\n this.fDSPCode.instanceClear();\n break;\n }\n case 'instanceConstants': {\n this.fDSPCode.instanceConstants();\n break;\n }\n case 'instanceResetUserInterface': {\n this.fDSPCode.instanceResetUserInterface();\n break;\n }\n case 'start': {\n this.fDSPCode.start();\n break;\n }\n case 'stop': {\n // What was scheduled belongs to the stretch being\n // stopped, and should not still be waiting on restart.\n this.flushEvents();\n this.fDSPCode.stop();\n break;\n }\n case 'destroy': {\n this.flushEvents();\n this.port.close();\n this.fDSPCode.destroy();\n break;\n }\n default:\n break;\n }\n }\n\n protected setParamValue(path: string, value: number) {\n this.fDSPCode.setParamValue(path, value);\n this.paramValuesCache[path] = value;\n }\n\n protected midiMessage(data: number[] | Uint8Array) {\n this.fDSPCode.midiMessage(data);\n }\n\n protected ctrlChange(channel: number, ctrl: number, value: number) {\n this.fDSPCode.ctrlChange(channel, ctrl, value);\n }\n\n protected pitchWheel(channel: number, wheel: number) {\n this.fDSPCode.pitchWheel(channel, wheel);\n }\n\n protected keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n\n protected keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n\n protected propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n this.fDSPCode.propagateAcc(accelerationIncludingGravity, invert);\n }\n\n protected propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n this.fDSPCode.propagateGyr(event);\n }\n }\n\n /**\n * Monophonic AudioWorkletProcessor\n */\n class FaustMonoAudioWorkletProcessor extends FaustAudioWorkletProcessor<false> {\n constructor(options: FaustAudioWorkletNodeOptions) {\n super(options);\n const { FaustMonoWebAudioDsp } =\n dependencies as FaustAudioWorkletProcessorDependencies<false>;\n const { factory, sampleSize } = options.processorOptions;\n\n const instance =\n FaustWasmInstantiator.createSyncMonoDSPInstance(factory);\n\n // Create Monophonic DSP\n this.fDSPCode = new FaustMonoWebAudioDsp(\n instance,\n sampleRate,\n sampleSize,\n 128,\n factory.soundfiles\n );\n\n // Setup port message handling\n this.port.addEventListener('message', this.handleMessageAux);\n this.port.start();\n\n // Setup output handler\n this.fDSPCode.setOutputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'out-param' })\n );\n this.fDSPCode.setInputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'in-param' })\n );\n\n this.fDSPCode.start();\n }\n\n protected handleMessageAux = (e: MessageEvent) => {\n // use arrow function for binding\n super.handleMessageAux(e);\n };\n }\n\n /**\n * Polyphonic AudioWorkletProcessor\n */\n class FaustPolyAudioWorkletProcessor extends FaustAudioWorkletProcessor<true> {\n constructor(options: FaustPolyAudioWorkletNodeOptions) {\n super(options);\n const { FaustPolyWebAudioDsp } =\n dependencies as FaustAudioWorkletProcessorDependencies<true>;\n\n const {\n voiceFactory,\n mixerModule,\n voices,\n effectFactory,\n sampleSize\n } = options.processorOptions;\n\n const instance = FaustWasmInstantiator.createSyncPolyDSPInstance(\n voiceFactory,\n mixerModule,\n voices,\n effectFactory\n );\n\n const soundfiles = {\n ...effectFactory?.soundfiles,\n ...voiceFactory.soundfiles\n };\n // Create Polyphonic DSP\n this.fDSPCode = new FaustPolyWebAudioDsp(\n instance,\n sampleRate,\n sampleSize,\n 128,\n soundfiles\n );\n\n // Setup port message handling\n this.port.addEventListener('message', this.handleMessageAux);\n this.port.start();\n\n // Setup output handler\n this.fDSPCode.setOutputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'out-param' })\n );\n this.fDSPCode.setInputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'in-param' })\n );\n\n this.fDSPCode.start();\n }\n\n protected midiMessage(data: number[] | Uint8Array) {\n const cmd = data[0] >> 4;\n const channel = data[0] & 0xf;\n const data1 = data[1];\n const data2 = data[2];\n if (cmd === 8 || (cmd === 9 && data2 === 0))\n this.keyOff(channel, data1, data2);\n else if (cmd === 9) this.keyOn(channel, data1, data2);\n else super.midiMessage(data);\n }\n\n // The base switch already routes 'keyOn' and 'keyOff' through\n // `this.keyOn` / `this.keyOff`, overridden below. This exists only to\n // bind `this` for the port listener.\n protected handleMessageAux = (e: MessageEvent) => {\n super.handleMessageAux(e);\n };\n\n // Public API\n keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n\n keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n\n allNotesOff(hard: boolean) {\n this.fDSPCode.allNotesOff(hard);\n }\n }\n\n const Processor = poly\n ? FaustPolyAudioWorkletProcessor\n : FaustMonoAudioWorkletProcessor;\n if (register) {\n const name = processorName || dspName || (poly ? 'mydsp_poly' : 'mydsp');\n // Registering the same processor twice in one AudioWorkletGlobalScope\n // is benign \u2014 a host may add the module more than once for a given\n // context \u2014 so that case stays tolerated, tracked on the scope itself\n // rather than by matching a browser-specific error message.\n //\n // Anything else must propagate. `registerProcessor` is what gives the\n // processor its name: swallowing a failure leaves `addModule` resolving\n // successfully and the caller believing registration worked, so the\n // problem only resurfaces later as\n // \"the node name '<name>' is not defined in AudioWorkletGlobalScope\"\n // from the AudioWorkletNode constructor \u2014 a symptom several steps\n // removed from the cause, pointing at the name rather than at whatever\n // actually made registration fail.\n const scope = globalThis as unknown as {\n __faustRegisteredProcessors?: Set<string>;\n };\n if (!scope.__faustRegisteredProcessors) {\n scope.__faustRegisteredProcessors = new Set<string>();\n }\n if (!scope.__faustRegisteredProcessors.has(name)) {\n registerProcessor(name, Processor);\n scope.__faustRegisteredProcessors.add(name);\n }\n }\n\n return poly\n ? FaustPolyAudioWorkletProcessor\n : FaustMonoAudioWorkletProcessor;\n};\n\nexport default getFaustAudioWorkletProcessor;\n", "import type { FaustAudioWorkletProcessorCommunicator } from './FaustAudioWorkletCommunicator';\nimport type { FaustMonoDspInstance } from './FaustDspInstance';\nimport type FaustWasmInstantiator from './FaustWasmInstantiator';\nimport type {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n PlotHandler\n} from './FaustWebAudioDsp';\nimport type {\n AudioParamDescriptor,\n AudioWorkletGlobalScope,\n LooseFaustDspFactory,\n FaustDspMeta,\n FaustUIItem,\n InterfaceFFT,\n TWindowFunction,\n Writeable,\n TypedArray,\n FFTUtils\n} from './types';\nimport type {\n AudioWorkletGlobalScope as WamAudioWorkletGlobalScope,\n WamParamMgrSDKBaseModuleScope\n} from '@webaudiomodules/sdk-parammgr';\n\nexport interface FaustFFTOptionsData {\n fftSize: number;\n fftOverlap: number;\n noIFFT: boolean;\n /** Index number of the default window function, leave undefined or -1 for rectangular (no windowing) */\n defaultWindowFunction: number;\n}\n\n/**\n * Injected in the string to be compiled on AudioWorkletProcessor side\n */\nexport interface FaustFFTData {\n processorName: string;\n dspName: string;\n dspMeta: FaustDspMeta;\n fftOptions?: Partial<FaustFFTOptionsData>;\n}\nexport interface FaustFFTAudioWorkletProcessorDependencies {\n FaustBaseWebAudioDsp: typeof FaustBaseWebAudioDsp;\n FaustMonoWebAudioDsp: typeof FaustMonoWebAudioDsp;\n FaustWasmInstantiator: typeof FaustWasmInstantiator;\n FaustAudioWorkletProcessorCommunicator: typeof FaustAudioWorkletProcessorCommunicator;\n FFTUtils: typeof FFTUtils;\n}\nexport interface FaustFFTAudioWorkletNodeOptions\n extends AudioWorkletNodeOptions {\n processorOptions: FaustFFTAudioWorkletProcessorOptions;\n}\nexport interface FaustFFTAudioWorkletProcessorOptions {\n name: string;\n sampleSize: number;\n factory: LooseFaustDspFactory;\n // for WAMs\n moduleId?: string;\n instanceId?: string;\n}\n\n// Dynamic AudioWorkletProcessor code generator\nconst getFaustFFTAudioWorkletProcessor = (\n dependencies: FaustFFTAudioWorkletProcessorDependencies,\n faustData: FaustFFTData,\n register = true\n): typeof AudioWorkletProcessor => {\n const { registerProcessor, AudioWorkletProcessor, sampleRate } =\n globalThis as unknown as AudioWorkletGlobalScope;\n\n // `currentFrame` advances every `process` call, so it must be read then,\n // not destructured once.\n const audioClock = globalThis as unknown as AudioWorkletGlobalScope;\n\n /** The render quantum, fixed by the Web Audio API. */\n const kBlockSize = 128;\n\n const {\n FaustBaseWebAudioDsp,\n FaustWasmInstantiator,\n FaustMonoWebAudioDsp,\n FaustAudioWorkletProcessorCommunicator,\n FFTUtils\n } = dependencies;\n\n const { processorName, dspName, dspMeta, fftOptions } = faustData;\n\n const { windowFunctions, getFFT, fftToSignal, signalToFFT, signalToNoFFT } =\n FFTUtils;\n\n /**\n * Ceil a number to multiple of another\n */\n const ceil = (x: number, to: number): number =>\n Math.abs(to) < 1\n ? Math.ceil(x * (1 / to)) / (1 / to)\n : Math.ceil(x / to) * to;\n\n /**\n * Mod support wrapping with negative numbers\n */\n const mod = (x: number, y: number): number => ((x % y) + y) % y;\n\n const apply = (\n array: Writeable<ArrayLike<number>>,\n windowFunction: TWindowFunction\n ) => {\n for (let i = 0; i < array.length; i++) {\n array[i] *= windowFunction(i, array.length);\n }\n };\n\n const fftParamKeywords = [\n '/fftSize',\n '/fftHopSize',\n '/fftOverlap',\n '/windowFunction',\n '/noIFFT'\n ];\n\n /**\n * Copy buffer to another, support negative offset index\n */\n const setTypedArray = <T extends TypedArray = TypedArray>(\n to: T,\n from: T,\n offsetTo = 0,\n offsetFrom = 0\n ) => {\n const toLength = to.length;\n const fromLength = from.length;\n const spillLength = Math.min(toLength, fromLength);\n let spilled = 0;\n let $to = mod(offsetTo, toLength) || 0;\n let $from = mod(offsetFrom, fromLength) || 0;\n while (spilled < spillLength) {\n const $spillLength = Math.min(\n spillLength - spilled,\n toLength - $to,\n fromLength - $from\n );\n const $fromEnd = $from + $spillLength;\n if ($from === 0 && $fromEnd === fromLength) to.set(from, $to);\n else to.set(from.subarray($from, $fromEnd), $to);\n $to = ($to + $spillLength) % toLength;\n $from = $fromEnd % fromLength;\n spilled += $spillLength;\n }\n return $to;\n };\n\n // Analyse JSON to generate AudioParam parameters\n const analyseParameters = (\n item: FaustUIItem\n ): AudioParamDescriptor | null => {\n const isFFTReserved =\n 'address' in item &&\n !!fftParamKeywords.find((k) => item.address.endsWith(k));\n if (isFFTReserved) return null;\n if (\n item.type === 'vslider' ||\n item.type === 'hslider' ||\n item.type === 'nentry'\n ) {\n return {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: item.min || 0,\n maxValue: item.max || 0\n };\n } else if (item.type === 'button' || item.type === 'checkbox') {\n return {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: 0,\n maxValue: 1\n };\n }\n return null;\n };\n /**\n * Class for Faust FFT AudioWorkletProcessor\n */\n class FaustFFTAudioWorkletProcessor extends AudioWorkletProcessor {\n protected fDSPCode: FaustMonoWebAudioDsp;\n\n protected paramValuesCache: Record<string, number> = {};\n\n /**\n * Port messages waiting for the block they were timestamped for.\n *\n * The node puts a `time` on every control it sends. This processor\n * used to ignore it, which mattered most for MIDI messages: nothing\n * mirrors those onto an `AudioParam`, so the timestamp did nothing and\n * the message landed whenever it was posted.\n *\n * They now wait here and are applied at the top of the block that\n * contains the instant. Two limits:\n *\n * Block, not sample. This processor buffers input into an FFT window\n * and hands the DSP whole frames of spectrum, so a control write\n * partway through what it computes has no meaning.\n *\n * A `param` still resolves one block later than that. The\n * `[0]`-against-cache sync below reads the AudioParam at the start of\n * the block and writes the pre-`time` value back over it; the intended\n * value arrives with the next block. Nothing is computed in between,\n * so there is no artefact.\n */\n protected fEventQueue: {\n frame: number;\n apply: () => void;\n }[] = [];\n\n protected wamInfo?: { moduleId: string; instanceId: string };\n protected communicator: FaustAudioWorkletProcessorCommunicator;\n\n private dspInstance!: FaustMonoDspInstance;\n private sampleSize!: number;\n\n private destroyed = false;\n /** Pointer of next start sample to write of the FFT input window */\n private $inputWrite = 0;\n /** Pointer of next start sample to read of the FFT input window */\n private $inputRead = 0;\n /** Pointer of next start sample to write of the FFT output window */\n private $outputWrite = 0;\n /** Pointer of next start sample to read of the FFT output window */\n private $outputRead = 0;\n /** Not perform in IFFT when reconstruct the audio signal */\n private noIFFT = false;\n /** audio data from input, array of channels */\n private readonly fftInput: Float32Array[] = [];\n /** audio data for output, array of channels */\n private readonly fftOutput: Float32Array[] = [];\n /** Generated from the current window function */\n private window: Float32Array;\n /** Generated from the current window's rolling sum square */\n private windowSumSquare: Float32Array;\n\n /** FFT constructor */\n private FFT: typeof InterfaceFFT;\n /** Real FFT interface */\n private rfft: InterfaceFFT;\n /** Faust param name of fftHopSize */\n private fftHopSizeParam: string | undefined;\n /** FFT Overlaps, 1 means no overlap */\n private fftOverlap = 0;\n private fftHopSize = 0;\n private fftSize = 0;\n private fftBufferSize = 0;\n private fftProcessorZeros: Float32Array;\n private noIFFTBuffer: Float32Array;\n\n private fPlotHandler: PlotHandler | null = null;\n private fCachedEvents: { type: string; data: any }[] = [];\n private fBufferNum = 0;\n private soundfiles: LooseFaustDspFactory['soundfiles'] = {};\n get fftProcessorBufferSize() {\n return this.fftSize / 2 + 1;\n }\n private windowFunction: TWindowFunction | null = null;\n\n constructor(options: FaustFFTAudioWorkletNodeOptions) {\n super(options);\n\n // Setup port message handling\n this.port.addEventListener('message', this.handleMessageAux);\n this.port.start();\n this.communicator = new FaustAudioWorkletProcessorCommunicator(\n this.port\n );\n\n const { parameterDescriptors } = this\n .constructor as typeof AudioWorkletProcessor;\n parameterDescriptors.forEach((pd) => {\n this.paramValuesCache[pd.name] = pd.defaultValue || 0;\n });\n\n const { factory, sampleSize } = options.processorOptions;\n\n this.dspInstance =\n FaustWasmInstantiator.createSyncMonoDSPInstance(factory);\n this.sampleSize = sampleSize;\n this.soundfiles = factory.soundfiles;\n\n // Init the FFT constructor and the Faust FFT Processor\n this.initFFT();\n\n const { moduleId, instanceId } = options.processorOptions;\n if (!moduleId || !instanceId) return;\n this.wamInfo = { moduleId, instanceId };\n }\n\n async initFFT(): Promise<true> {\n // Use injected function to instantiate the FFT constructor\n this.FFT = await getFFT();\n // Init Faust FFT Processor\n await this.createFFTProcessor();\n return true;\n }\n\n static get parameterDescriptors() {\n const params = [] as AudioParamDescriptor[];\n // Analyse voice JSON to generate AudioParam parameters\n const callback = (item: FaustUIItem) => {\n const param = analyseParameters(item);\n if (param) params.push(param);\n };\n FaustBaseWebAudioDsp.parseUI(dspMeta.ui, callback);\n // Add to Faust parameters, FFT specified parameters\n return [\n ...params,\n {\n defaultValue: fftOptions?.fftSize || 1024,\n maxValue: 2 ** 32,\n minValue: 2,\n name: 'fftSize'\n },\n {\n defaultValue: fftOptions?.fftOverlap || 2,\n maxValue: 32,\n minValue: 1,\n name: 'fftOverlap'\n },\n {\n defaultValue:\n typeof fftOptions?.defaultWindowFunction === 'number'\n ? fftOptions.defaultWindowFunction + 1\n : 0,\n maxValue: windowFunctions?.length || 0,\n minValue: 0,\n name: 'windowFunction'\n },\n {\n defaultValue: +!!fftOptions?.noIFFT || 0,\n maxValue: 1,\n minValue: 0,\n name: 'noIFFT'\n }\n ];\n }\n\n setupWamEventHandler() {\n if (!this.wamInfo) return;\n const { moduleId, instanceId } = this.wamInfo;\n const { webAudioModules } =\n globalThis as unknown as WamAudioWorkletGlobalScope;\n const ModuleScope = webAudioModules.getModuleScope(\n moduleId\n ) as WamParamMgrSDKBaseModuleScope;\n const paramMgrProcessor =\n ModuleScope?.paramMgrProcessors?.[instanceId];\n if (!paramMgrProcessor) return;\n if (paramMgrProcessor.handleEvent) return;\n paramMgrProcessor.handleEvent = (event) => {\n // A WamEvent's `time` is AudioContext seconds, so it goes\n // through the same queue as a timestamped port message --\n // block granularity here, as for everything else this\n // processor is handed. See `fEventQueue`.\n if (event.type === 'wam-midi')\n this.atTime(event, () => this.midiMessage(event.data.bytes));\n };\n }\n\n processFFT() {\n // Get the number of samples that need to proceed, from the input r/w pointers\n let samplesForFFT =\n mod(this.$inputWrite - this.$inputRead, this.fftBufferSize) ||\n this.fftBufferSize;\n // Start process, until no more enough samples\n while (samplesForFFT >= this.fftSize) {\n let fftProcessorOutputs: Float32Array[] = [];\n // Faust processing, use a callback to avoid extra data copy\n this.fDSPCode.compute(\n (inputs) => {\n // for each audio input channel, three Faust FFT input buffers can be generated (real, imag, FFT bin index)\n for (\n let i = 0;\n i <\n Math.min(\n this.fftInput.length,\n Math.ceil(inputs.length / 3)\n );\n i++\n ) {\n // FFT forward, use a callback to avoid extra data copy\n const ffted = this.rfft.forward((fftBuffer) => {\n setTypedArray(\n fftBuffer,\n this.fftInput[i],\n 0,\n this.$inputRead\n );\n // Windowing the input\n for (let j = 0; j < fftBuffer.length; j++) {\n fftBuffer[j] *= this.window[j];\n }\n // data for FFT (fftBuffer) is prepared\n });\n // write FFTed spectral data to three Faust FFT input buffers (real, imag, FFT bin index)\n fftToSignal(\n ffted,\n inputs[i * 3],\n inputs[i * 3 + 1],\n inputs[i * 3 + 2]\n );\n // Faust inputs are prepared\n }\n // If the Faust DSP has more inputs, fill them (zeros or real/imag, fill FFT bin indexes)\n for (\n let i = this.fftInput.length * 3;\n i < inputs.length;\n i++\n ) {\n if (i % 3 === 2)\n inputs[i].forEach((v, j) => (inputs[i][j] = j));\n else inputs[i].fill(0);\n }\n },\n (outputs) => {\n // Get the Faust DSP outputs\n fftProcessorOutputs = outputs as Float32Array[];\n }\n );\n\n // Advance FFT input read pointers\n this.$inputRead += this.fftHopSize;\n this.$inputRead %= this.fftBufferSize;\n\n samplesForFFT -= this.fftHopSize;\n\n // Do inverse FFT on the processed data by Faust DSP, and write the reconstructed signal to the output buffer\n for (let i = 0; i < this.fftOutput.length; i++) {\n let iffted: Float32Array;\n // If noIFFT option in enabled, then no need to do inverse IFFT, use the injected function to convert\n if (this.noIFFT) {\n iffted = this.noIFFTBuffer;\n signalToNoFFT(\n fftProcessorOutputs[i * 2] ||\n this.fftProcessorZeros,\n fftProcessorOutputs[i * 2 + 1] ||\n this.fftProcessorZeros,\n iffted\n );\n } else {\n // FFT inverse, use a callback to avoid extra data copy\n iffted = this.rfft.inverse((ifftBuffer) => {\n // Convert the Faust DSP output (real/imag plans) to an array for inverse FFT\n signalToFFT(\n fftProcessorOutputs[i * 2] ||\n this.fftProcessorZeros,\n fftProcessorOutputs[i * 2 + 1] ||\n this.fftProcessorZeros,\n ifftBuffer\n );\n // ifftBuffer is prepared\n });\n }\n // Windowing the output\n for (let j = 0; j < iffted.length; j++) {\n iffted[j] *= this.window[j];\n }\n // Overlap-add, preparing the windowSumSquare array for reverse the windowing effect when output the audio\n let $: number;\n // First part, add the part that is overlaped with the previous window\n for (let j = 0; j < iffted.length - this.fftHopSize; j++) {\n $ = mod(this.$outputWrite + j, this.fftBufferSize);\n this.fftOutput[i][$] += iffted[j];\n if (i === 0)\n this.windowSumSquare[$] += this.noIFFT\n ? this.window[j]\n : this.window[j] ** 2;\n }\n // Second part, write directly to the output buffer\n for (\n let j = iffted.length - this.fftHopSize;\n j < iffted.length;\n j++\n ) {\n $ = mod(this.$outputWrite + j, this.fftBufferSize);\n this.fftOutput[i][$] = iffted[j];\n if (i === 0)\n this.windowSumSquare[$] = this.noIFFT\n ? this.window[j]\n : this.window[j] ** 2;\n }\n }\n // Advance FFT output write pointers\n this.$outputWrite += this.fftHopSize;\n this.$outputWrite %= this.fftBufferSize;\n }\n }\n\n process(\n inputs: Float32Array[][],\n outputs: Float32Array[][],\n parameters: { [key: string]: Float32Array }\n ) {\n if (this.destroyed) return false;\n if (!this.FFT) return true;\n const input = inputs[0];\n const output = outputs[0];\n const inputChannels = input?.length || 0;\n const outputChannels = output?.length || 0;\n // if (input.length === 0) return true;\n\n const bufferSize = input?.length\n ? Math.max(...input.map((c) => c.length)) || 128\n : 128;\n\n // Reset FFT and related buffers if necessary (checks in the resetFFT method)\n this.noIFFT = !!parameters.noIFFT[0];\n this.resetFFT(\n ~~parameters.fftSize[0],\n ~~parameters.fftOverlap[0],\n ~~parameters.windowFunction[0],\n inputChannels,\n outputChannels,\n bufferSize\n );\n\n if (!this.fDSPCode) return true;\n\n // Anything timed for this block, before its own values are read.\n // See `fEventQueue` for what this does and does not buy.\n this.applyDueEvents(audioClock.currentFrame);\n\n for (const path in parameters) {\n if (fftParamKeywords.find((k) => `/${path}`.endsWith(k)))\n continue;\n const [paramValue] = parameters[path];\n if (paramValue !== this.paramValuesCache[path]) {\n // Set value and update the cache\n this.setParamValue(path, paramValue);\n }\n }\n if (this.communicator.getNewAccDataAvailable()) {\n const acc = this.communicator.getAcc();\n if (acc) {\n this.communicator.setNewAccDataAvailable(false);\n const { invert, ...data } = acc;\n this.propagateAcc(data, invert);\n }\n }\n if (this.communicator.getNewGyrDataAvailable()) {\n const gyr = this.communicator.getGyr();\n if (gyr) {\n this.communicator.setNewGyrDataAvailable(false);\n this.propagateGyr(gyr);\n }\n }\n\n // Write audio input into fftInput buffer, advance pointers\n if (input?.length) {\n let $inputWrite = 0;\n for (let i = 0; i < input.length; i++) {\n const inputWindow = this.fftInput[i];\n const channel = input[i].length\n ? input[i]\n : new Float32Array(bufferSize);\n $inputWrite = setTypedArray(\n inputWindow,\n channel,\n this.$inputWrite\n );\n }\n this.$inputWrite = $inputWrite;\n } else {\n this.$inputWrite += bufferSize;\n this.$inputWrite %= this.fftBufferSize;\n }\n\n // Do FFT if necessary\n this.processFFT();\n\n // Read from fftOutput buffer for audio output, applying windowSumSquare to reverse the doubled windowing effect\n for (let i = 0; i < output.length; i++) {\n setTypedArray(\n output[i],\n this.fftOutput[i],\n 0,\n this.$outputRead\n );\n // let a = 0;\n let div = 0;\n for (let j = 0; j < bufferSize; j++) {\n div =\n this.windowSumSquare[\n mod(this.$outputRead + j, this.fftBufferSize)\n ];\n output[i][j] /= div < 1e-8 ? 1 : div;\n }\n }\n // Advance pointers\n this.$outputRead += bufferSize;\n this.$outputRead %= this.fftBufferSize;\n\n // plot\n if (this.fPlotHandler) {\n this.port.postMessage({\n type: 'plot',\n value: output,\n index: this.fBufferNum++,\n events: this.fCachedEvents\n });\n this.fCachedEvents = [];\n }\n return true;\n }\n\n /**\n * Read a message's timestamp as a whole frame on the audio clock.\n * Null if it carries none, meaning now.\n *\n * Rounded, and non-finite values rejected: a NaN compares false\n * against every frame and would block the queue behind it.\n */\n protected messageFrame(msg: {\n time?: number;\n frame?: number;\n }): number | null {\n const frame = Number.isFinite(msg.frame as number)\n ? (msg.frame as number)\n : Number.isFinite(msg.time as number)\n ? (msg.time as number) * sampleRate\n : null;\n return frame === null ? null : Math.round(frame);\n }\n\n /**\n * Apply `apply` now, or at the top of the block containing the frame\n * the sender asked for.\n *\n * Queued ones catch: a throw would otherwise escape `process`, and the\n * spec's response is to stop calling the node permanently.\n */\n protected atTime(\n msg: { time?: number; frame?: number },\n apply: () => void\n ) {\n const frame = this.messageFrame(msg);\n if (frame === null) {\n apply();\n return;\n }\n const guarded = () => {\n try {\n apply();\n } catch (error) {\n console.error(\n `Faust: a message timed for frame ${frame} threw and was dropped`,\n error\n );\n }\n };\n let i = this.fEventQueue.length;\n while (i > 0 && this.fEventQueue[i - 1].frame > frame) i--;\n this.fEventQueue.splice(i, 0, { frame, apply: guarded });\n }\n\n /** Apply everything due by the end of the block starting at `start`. */\n protected applyDueEvents(start: number) {\n const end = start + kBlockSize;\n while (this.fEventQueue.length && this.fEventQueue[0].frame < end) {\n // A message whose block has passed is late, not lost.\n this.fEventQueue.shift()!.apply();\n }\n }\n\n protected handleMessageAux = (e: MessageEvent) => {\n // use arrow function for binding\n const msg = e.data;\n\n switch (msg.type) {\n // Generic MIDI message\n case 'midi':\n this.atTime(msg, () => this.midiMessage(msg.data));\n break;\n // Typed MIDI message\n case 'ctrlChange':\n this.atTime(msg, () =>\n this.ctrlChange(msg.data[0], msg.data[1], msg.data[2])\n );\n break;\n case 'pitchWheel':\n this.atTime(msg, () =>\n this.pitchWheel(msg.data[0], msg.data[1])\n );\n break;\n // Generic data message\n case 'param':\n this.atTime(msg, () =>\n this.setParamValue(msg.data.path, msg.data.value)\n );\n break;\n // Plot handler set on demand\n case 'setPlotHandler': {\n if (msg.data) {\n this.fPlotHandler = (output, index, events) => {\n if (events) this.fCachedEvents.push(...events);\n };\n } else {\n this.fPlotHandler = null;\n }\n this.fDSPCode?.setPlotHandler(this.fPlotHandler);\n break;\n }\n case 'setupWamEventHandler': {\n this.setupWamEventHandler();\n break;\n }\n case 'start': {\n this.fDSPCode?.start();\n break;\n }\n case 'stop': {\n this.fEventQueue.length = 0;\n this.fDSPCode?.stop();\n break;\n }\n case 'destroy': {\n this.fEventQueue.length = 0;\n this.port.close();\n this.destroy();\n break;\n }\n default:\n break;\n }\n };\n\n protected setParamValue(path: string, value: number) {\n this.fDSPCode?.setParamValue(path, value);\n this.paramValuesCache[path] = value;\n }\n\n protected midiMessage(data: number[] | Uint8Array) {\n this.fDSPCode?.midiMessage(data);\n }\n\n protected ctrlChange(channel: number, ctrl: number, value: number) {\n this.fDSPCode?.ctrlChange(channel, ctrl, value);\n }\n\n protected pitchWheel(channel: number, wheel: number) {\n this.fDSPCode?.pitchWheel(channel, wheel);\n }\n\n protected propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n this.fDSPCode.propagateAcc(accelerationIncludingGravity, invert);\n }\n\n protected propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n this.fDSPCode.propagateGyr(event);\n }\n\n resetFFT(\n sizeIn: number,\n overlapIn: number,\n windowFunctionIn: number,\n inputChannels: number,\n outputChannels: number,\n bufferSize: number\n ) {\n const fftSize = ~~ceil(Math.max(2, sizeIn || 1024), 2);\n const fftOverlap = ~~Math.min(fftSize, Math.max(1, overlapIn));\n const fftHopSize = ~~Math.max(1, fftSize / fftOverlap);\n const latency = fftSize - Math.min(fftHopSize, bufferSize);\n let windowFunction: TWindowFunction | null = null;\n\n // set the window function from the injected list\n if (windowFunctionIn !== 0) {\n windowFunction =\n typeof windowFunctions === 'object'\n ? windowFunctions[~~windowFunctionIn - 1] || null\n : null;\n }\n const fftSizeChanged = fftSize !== this.fftSize;\n\n const fftOverlapChanged = fftOverlap !== this.fftOverlap;\n // Reset FFT vars if the size is changed\n if (fftSizeChanged || fftOverlapChanged) {\n this.fftSize = fftSize;\n this.fftOverlap = fftOverlap;\n this.fftHopSize = fftHopSize;\n this.$inputWrite = 0;\n this.$inputRead = 0;\n this.$outputWrite = 0;\n this.$outputRead = -latency;\n this.fftBufferSize = Math.max(\n fftSize * 2 - this.fftHopSize,\n bufferSize * 2\n );\n if (!fftSizeChanged && this.fftHopSizeParam)\n this.fDSPCode?.setParamValue(\n this.fftHopSizeParam,\n this.fftHopSize\n );\n }\n\n // Reset the FFT interface and the Faust Processor\n if (fftSizeChanged) {\n this.rfft?.dispose();\n this.rfft = new this.FFT(fftSize);\n this.noIFFTBuffer = new Float32Array(this.fftSize);\n this.createFFTProcessor();\n }\n\n // Calculate a window from the window function, prepare the windowSumSquare buffer\n if (\n fftSizeChanged ||\n fftOverlapChanged ||\n windowFunction !== this.windowFunction\n ) {\n this.windowFunction = windowFunction;\n this.window = new Float32Array(fftSize);\n this.window.fill(1);\n if (windowFunction) apply(this.window, windowFunction);\n this.windowSumSquare = new Float32Array(this.fftBufferSize);\n }\n\n // Reset FFT I/O buffers if necessary\n if (this.fftInput.length > inputChannels) {\n this.fftInput.splice(inputChannels);\n }\n if (this.fftOutput.length > outputChannels) {\n this.fftOutput.splice(outputChannels);\n }\n if (fftSizeChanged || fftOverlapChanged) {\n for (let i = 0; i < inputChannels; i++) {\n this.fftInput[i] = new Float32Array(this.fftBufferSize);\n }\n for (let i = 0; i < outputChannels; i++) {\n this.fftOutput[i] = new Float32Array(this.fftBufferSize);\n }\n } else {\n if (this.fftInput.length < inputChannels) {\n for (let i = this.fftInput.length; i < inputChannels; i++) {\n this.fftInput[i] = new Float32Array(this.fftBufferSize);\n }\n }\n if (this.fftOutput.length < outputChannels) {\n for (\n let i = this.fftOutput.length;\n i < outputChannels;\n i++\n ) {\n this.fftOutput[i] = new Float32Array(\n this.fftBufferSize\n );\n }\n }\n }\n }\n async createFFTProcessor() {\n this.fDSPCode?.stop();\n this.fDSPCode?.destroy();\n\n // Create Monophonic DSP\n this.fDSPCode = new FaustMonoWebAudioDsp(\n this.dspInstance,\n sampleRate,\n this.sampleSize,\n this.fftProcessorBufferSize,\n this.soundfiles\n );\n\n // Setup output handler\n this.fDSPCode.setOutputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'out-param' })\n );\n this.fDSPCode.setInputParamHandler((path, value) =>\n this.port.postMessage({ path, value, type: 'in-param' })\n );\n this.fDSPCode.setPlotHandler(this.fPlotHandler);\n const params = this.fDSPCode.getParams();\n this.fDSPCode.start();\n // Write the cached parameters\n for (const path in this.paramValuesCache) {\n if (fftParamKeywords.find((k) => `/${path}`.endsWith(k)))\n continue;\n this.fDSPCode.setParamValue(path, this.paramValuesCache[path]);\n }\n // Write the FFT reverved parameters\n const fftSizeParam = params.find((s) => s.endsWith('/fftSize'));\n if (fftSizeParam)\n this.fDSPCode.setParamValue(fftSizeParam, this.fftSize);\n this.fftHopSizeParam = params.find((s) =>\n s.endsWith('/fftHopSize')\n );\n if (this.fftHopSizeParam)\n this.fDSPCode.setParamValue(\n this.fftHopSizeParam,\n this.fftHopSize\n );\n // Prepare a array of zeros for furthur usage\n this.fftProcessorZeros = new Float32Array(\n this.fftProcessorBufferSize\n );\n }\n destroy() {\n this.fDSPCode?.stop();\n this.fDSPCode?.destroy();\n this.rfft?.dispose();\n this.destroyed = true;\n }\n }\n\n const Processor = FaustFFTAudioWorkletProcessor;\n if (register) {\n const name = processorName || dspName || 'myfftdsp';\n // Registering the same processor twice in one AudioWorkletGlobalScope\n // is benign \u2014 a host may add the module more than once for a given\n // context \u2014 so that case stays tolerated, tracked on the scope itself\n // rather than by matching a browser-specific error message.\n //\n // Anything else must propagate. `registerProcessor` is what gives the\n // processor its name: swallowing a failure leaves `addModule` resolving\n // successfully and the caller believing registration worked, so the\n // problem only resurfaces later as\n // \"the node name '<name>' is not defined in AudioWorkletGlobalScope\"\n // from the AudioWorkletNode constructor \u2014 a symptom several steps\n // removed from the cause, pointing at the name rather than at whatever\n // actually made registration fail.\n const scope = globalThis as unknown as {\n __faustRegisteredProcessors?: Set<string>;\n };\n if (!scope.__faustRegisteredProcessors) {\n scope.__faustRegisteredProcessors = new Set<string>();\n }\n if (!scope.__faustRegisteredProcessors.has(name)) {\n registerProcessor(name, Processor);\n scope.__faustRegisteredProcessors.add(name);\n }\n }\n\n return FaustFFTAudioWorkletProcessor;\n};\n\nexport default getFaustFFTAudioWorkletProcessor;\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n", "/**\n * @internal\n */\nexport const BLOCK_SIZE: number = 64;\n\n/**\n * @internal\n */\nexport const DIGEST_LENGTH: number = 32;\n\n/**\n * @internal\n */\nexport const KEY = new Uint32Array([\n 0x428a2f98,\n 0x71374491,\n 0xb5c0fbcf,\n 0xe9b5dba5,\n 0x3956c25b,\n 0x59f111f1,\n 0x923f82a4,\n 0xab1c5ed5,\n 0xd807aa98,\n 0x12835b01,\n 0x243185be,\n 0x550c7dc3,\n 0x72be5d74,\n 0x80deb1fe,\n 0x9bdc06a7,\n 0xc19bf174,\n 0xe49b69c1,\n 0xefbe4786,\n 0x0fc19dc6,\n 0x240ca1cc,\n 0x2de92c6f,\n 0x4a7484aa,\n 0x5cb0a9dc,\n 0x76f988da,\n 0x983e5152,\n 0xa831c66d,\n 0xb00327c8,\n 0xbf597fc7,\n 0xc6e00bf3,\n 0xd5a79147,\n 0x06ca6351,\n 0x14292967,\n 0x27b70a85,\n 0x2e1b2138,\n 0x4d2c6dfc,\n 0x53380d13,\n 0x650a7354,\n 0x766a0abb,\n 0x81c2c92e,\n 0x92722c85,\n 0xa2bfe8a1,\n 0xa81a664b,\n 0xc24b8b70,\n 0xc76c51a3,\n 0xd192e819,\n 0xd6990624,\n 0xf40e3585,\n 0x106aa070,\n 0x19a4c116,\n 0x1e376c08,\n 0x2748774c,\n 0x34b0bcb5,\n 0x391c0cb3,\n 0x4ed8aa4a,\n 0x5b9cca4f,\n 0x682e6ff3,\n 0x748f82ee,\n 0x78a5636f,\n 0x84c87814,\n 0x8cc70208,\n 0x90befffa,\n 0xa4506ceb,\n 0xbef9a3f7,\n 0xc67178f2\n]);\n\n/**\n * @internal\n */\nexport const INIT = [\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19\n];\n\n/**\n * @internal\n */\nexport const MAX_HASHABLE_LENGTH = 2 ** 53 - 1;\n", "import {\n BLOCK_SIZE,\n DIGEST_LENGTH,\n INIT,\n KEY,\n MAX_HASHABLE_LENGTH\n} from \"./constants\";\n\n/**\n * @internal\n */\nexport class RawSha256 {\n private state: Int32Array = Int32Array.from(INIT);\n private temp: Int32Array = new Int32Array(64);\n private buffer: Uint8Array = new Uint8Array(64);\n private bufferLength: number = 0;\n private bytesHashed: number = 0;\n\n /**\n * @internal\n */\n finished: boolean = false;\n\n update(data: Uint8Array): void {\n if (this.finished) {\n throw new Error(\"Attempted to update an already finished hash.\");\n }\n\n let position = 0;\n let { byteLength } = data;\n this.bytesHashed += byteLength;\n\n if (this.bytesHashed * 8 > MAX_HASHABLE_LENGTH) {\n throw new Error(\"Cannot hash more than 2^53 - 1 bits\");\n }\n\n while (byteLength > 0) {\n this.buffer[this.bufferLength++] = data[position++];\n byteLength--;\n\n if (this.bufferLength === BLOCK_SIZE) {\n this.hashBuffer();\n this.bufferLength = 0;\n }\n }\n }\n\n digest(): Uint8Array {\n if (!this.finished) {\n const bitsHashed = this.bytesHashed * 8;\n const bufferView = new DataView(\n this.buffer.buffer,\n this.buffer.byteOffset,\n this.buffer.byteLength\n );\n\n const undecoratedLength = this.bufferLength;\n bufferView.setUint8(this.bufferLength++, 0x80);\n\n // Ensure the final block has enough room for the hashed length\n if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n for (let i = this.bufferLength; i < BLOCK_SIZE; i++) {\n bufferView.setUint8(i, 0);\n }\n this.hashBuffer();\n this.bufferLength = 0;\n }\n\n for (let i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n bufferView.setUint8(i, 0);\n }\n bufferView.setUint32(\n BLOCK_SIZE - 8,\n Math.floor(bitsHashed / 0x100000000),\n true\n );\n bufferView.setUint32(BLOCK_SIZE - 4, bitsHashed);\n\n this.hashBuffer();\n\n this.finished = true;\n }\n\n // The value in state is little-endian rather than big-endian, so flip\n // each word into a new Uint8Array\n const out = new Uint8Array(DIGEST_LENGTH);\n for (let i = 0; i < 8; i++) {\n out[i * 4] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n\n return out;\n }\n\n private hashBuffer(): void {\n const { buffer, state } = this;\n\n let state0 = state[0],\n state1 = state[1],\n state2 = state[2],\n state3 = state[3],\n state4 = state[4],\n state5 = state[5],\n state6 = state[6],\n state7 = state[7];\n\n for (let i = 0; i < BLOCK_SIZE; i++) {\n if (i < 16) {\n this.temp[i] =\n ((buffer[i * 4] & 0xff) << 24) |\n ((buffer[i * 4 + 1] & 0xff) << 16) |\n ((buffer[i * 4 + 2] & 0xff) << 8) |\n (buffer[i * 4 + 3] & 0xff);\n } else {\n let u = this.temp[i - 2];\n const t1 =\n ((u >>> 17) | (u << 15)) ^ ((u >>> 19) | (u << 13)) ^ (u >>> 10);\n\n u = this.temp[i - 15];\n const t2 =\n ((u >>> 7) | (u << 25)) ^ ((u >>> 18) | (u << 14)) ^ (u >>> 3);\n\n this.temp[i] =\n ((t1 + this.temp[i - 7]) | 0) + ((t2 + this.temp[i - 16]) | 0);\n }\n\n const t1 =\n ((((((state4 >>> 6) | (state4 << 26)) ^\n ((state4 >>> 11) | (state4 << 21)) ^\n ((state4 >>> 25) | (state4 << 7))) +\n ((state4 & state5) ^ (~state4 & state6))) |\n 0) +\n ((state7 + ((KEY[i] + this.temp[i]) | 0)) | 0)) |\n 0;\n\n const t2 =\n ((((state0 >>> 2) | (state0 << 30)) ^\n ((state0 >>> 13) | (state0 << 19)) ^\n ((state0 >>> 22) | (state0 << 10))) +\n ((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) |\n 0;\n\n state7 = state6;\n state6 = state5;\n state5 = state4;\n state4 = (state3 + t1) | 0;\n state3 = state2;\n state2 = state1;\n state1 = state0;\n state0 = (t1 + t2) | 0;\n }\n\n state[0] += state0;\n state[1] += state1;\n state[2] += state2;\n state[3] += state3;\n state[4] += state4;\n state[5] += state5;\n state[6] += state6;\n state[7] += state7;\n }\n}\n", "export const fromUtf8 = (input) => new TextEncoder().encode(input);\n", "// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SourceData } from \"@aws-sdk/types\";\nimport { fromUtf8 as fromUtf8Browser } from \"@smithy/util-utf8\";\n\n// Quick polyfill\nconst fromUtf8 =\n typeof Buffer !== \"undefined\" && Buffer.from\n ? (input: string) => Buffer.from(input, \"utf8\")\n : fromUtf8Browser;\n\nexport function convertToBuffer(data: SourceData): Uint8Array {\n // Already a Uint8, do nothing\n if (data instanceof Uint8Array) return data;\n\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(\n data.buffer,\n data.byteOffset,\n data.byteLength / Uint8Array.BYTES_PER_ELEMENT\n );\n }\n\n return new Uint8Array(data);\n}\n", "// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SourceData } from \"@aws-sdk/types\";\n\nexport function isEmptyData(data: SourceData): boolean {\n if (typeof data === \"string\") {\n return data.length === 0;\n }\n\n return data.byteLength === 0;\n}\n", "import { BLOCK_SIZE } from \"./constants\";\nimport { RawSha256 } from \"./RawSha256\";\nimport { Checksum, SourceData } from \"@aws-sdk/types\";\nimport { isEmptyData, convertToBuffer } from \"@aws-crypto/util\";\n\nexport class Sha256 implements Checksum {\n private readonly secret?: SourceData;\n private hash: RawSha256;\n private outer?: RawSha256;\n private error: any;\n\n constructor(secret?: SourceData) {\n this.secret = secret;\n this.hash = new RawSha256();\n this.reset();\n }\n\n update(toHash: SourceData): void {\n if (isEmptyData(toHash) || this.error) {\n return;\n }\n\n try {\n this.hash.update(convertToBuffer(toHash));\n } catch (e) {\n this.error = e;\n }\n }\n\n /* This synchronous method keeps compatibility\n * with the v2 aws-sdk.\n */\n digestSync(): Uint8Array {\n if (this.error) {\n throw this.error;\n }\n\n if (this.outer) {\n if (!this.outer.finished) {\n this.outer.update(this.hash.digest());\n }\n\n return this.outer.digest();\n }\n\n return this.hash.digest();\n }\n\n /* The underlying digest method here is synchronous.\n * To keep the same interface with the other hash functions\n * the default is to expose this as an async method.\n * However, it can sometimes be useful to have a sync method.\n */\n async digest(): Promise<Uint8Array> {\n return this.digestSync();\n }\n\n reset(): void {\n this.hash = new RawSha256();\n if (this.secret) {\n this.outer = new RawSha256();\n const inner = bufferFromSecret(this.secret);\n const outer = new Uint8Array(BLOCK_SIZE);\n outer.set(inner);\n\n for (let i = 0; i < BLOCK_SIZE; i++) {\n inner[i] ^= 0x36;\n outer[i] ^= 0x5c;\n }\n\n this.hash.update(inner);\n this.outer.update(outer);\n\n // overwrite the copied key in memory\n for (let i = 0; i < inner.byteLength; i++) {\n inner[i] = 0;\n }\n }\n }\n}\n\nfunction bufferFromSecret(secret: SourceData): Uint8Array {\n let input = convertToBuffer(secret);\n\n if (input.byteLength > BLOCK_SIZE) {\n const bufferHash = new RawSha256();\n bufferHash.update(input);\n input = bufferHash.digest();\n }\n\n const buffer = new Uint8Array(BLOCK_SIZE);\n buffer.set(input);\n return buffer;\n}\n", "import { Sha256 } from '@aws-crypto/sha256-js';\nimport type { ILibFaust } from './LibFaust';\nimport type { FaustDspFactory, IntVector } from './types';\n\nexport const ab2str = (buf: Uint8Array) =>\n String.fromCharCode.apply(null, Array.from(buf));\n\nexport const str2ab = (str: string) => {\n const buf = new ArrayBuffer(str.length);\n const bufView = new Uint8Array(buf);\n for (let i = 0, strLen = str.length; i < strLen; i++) {\n bufView[i] = str.charCodeAt(i);\n }\n return bufView;\n};\nconst sha256 = async (str: string) => {\n const sha256 = new Sha256();\n sha256.update(str);\n const hashArray = Array.from(await sha256.digest());\n const hashHex = hashArray\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n return hashHex;\n};\n\nexport interface IFaustCompiler {\n /**\n * Gives the Faust compiler version.\n * @return a version string\n */\n version(): string;\n\n /**\n * Gives the last compilation error.\n * @return an error string\n */\n getErrorMessage(): string;\n\n /**\n * Create a wasm factory from Faust code i.e. wasm compiled code, to be used to create monophonic instances.\n * This function is running asynchronously.\n *\n * @param name - an arbitrary name for the Faust factory\n * @param code - Faust dsp code\n * @param args - the compiler options\n * @returns returns the wasm factory\n */\n createMonoDSPFactory(\n name: string,\n code: string,\n args: string\n ): Promise<FaustDspFactory | null>;\n\n /**\n * Create a wasm factory from Faust code i.e. wasm compiled code, to be used to create polyphonic instances.\n * This function is running asynchronously.\n *\n * @param name - an arbitrary name for the Faust factory\n * @param code - Faust dsp code\n * @param args - the compiler options\n * @returns returns the wasm factory\n */\n createPolyDSPFactory(\n name: string,\n code: string,\n args: string\n ): Promise<FaustDspFactory | null>;\n\n /**\n * Delete a dsp factory.\n *\n * @param factory - the factory to be deleted\n */\n deleteDSPFactory(factory: FaustDspFactory): void;\n\n /**\n * Expand Faust code i.e. linearize included libraries.\n *\n * @param code - Faust dsp code\n * @param args - the compiler options\n * @returns returns the expanded dsp code\n */\n expandDSP(code: string, args: string): string | null;\n\n /**\n * Generates auxiliary files from Faust code. The output depends on the compiler options.\n *\n * @param name - an arbitrary name for the Faust module\n * @param code - Faust dsp code\n * @param args - the compiler options\n * @returns whether the generation actually succeded\n */\n generateAuxFiles(name: string, code: string, args: string): boolean;\n\n /**\n * Delete all factories.\n */\n deleteAllDSPFactories(): void;\n\n fs(): typeof FS;\n\n getAsyncInternalMixerModule(\n isDouble?: boolean\n ): Promise<{ mixerBuffer: Uint8Array; mixerModule: WebAssembly.Module }>;\n getSyncInternalMixerModule(isDouble?: boolean): {\n mixerBuffer: Uint8Array;\n mixerModule: WebAssembly.Module;\n };\n}\n\nclass FaustCompiler implements IFaustCompiler {\n private fLibFaust: ILibFaust;\n private fErrorMessage: string;\n private static gFactories: Map<string, FaustDspFactory> = new Map<\n string,\n FaustDspFactory\n >();\n private mixer32Buffer!: Uint8Array;\n private mixer64Buffer!: Uint8Array;\n private mixer32Module!: WebAssembly.Module;\n private mixer64Module!: WebAssembly.Module;\n\n /**\n * Get a stringified DSP factories table\n */\n static serializeDSPFactories() {\n const table: Record<\n string,\n { code: string; json: any; poly: boolean }\n > = {};\n this.gFactories.forEach((factory, shaKey) => {\n const { code, json, poly } = factory;\n table[shaKey] = {\n code: btoa(ab2str(code)),\n json: JSON.parse(json),\n poly\n };\n });\n return table;\n }\n /**\n * Get a stringified DSP factories table as string\n */\n static stringifyDSPFactories() {\n return JSON.stringify(this.serializeDSPFactories());\n }\n /**\n * Import a DSP factories table\n */\n static deserializeDSPFactories(\n table: Record<string, { code: string; json: any; poly: boolean }>\n ) {\n const awaited: Promise<Map<string, FaustDspFactory>>[] = [];\n for (const shaKey in table) {\n const factory = table[shaKey];\n const { code, json, poly } = factory;\n const ab = str2ab(atob(code));\n awaited.push(\n WebAssembly.compile(ab).then((module) =>\n this.gFactories.set(shaKey, {\n shaKey,\n cfactory: 0,\n code: ab,\n module,\n json: JSON.stringify(json),\n poly,\n soundfiles: {}\n })\n )\n );\n }\n return Promise.all(awaited);\n }\n /**\n * Import a stringified DSP factories table\n */\n static importDSPFactories(tableStr: string) {\n const table: Record<\n string,\n { code: string; json: any; poly: boolean }\n > = JSON.parse(tableStr);\n return this.deserializeDSPFactories(table);\n }\n constructor(libFaust: ILibFaust) {\n this.fLibFaust = libFaust;\n this.fErrorMessage = '';\n }\n private intVec2intArray(vec: IntVector) {\n const size = vec.size();\n const ui8Code = new Uint8Array(size);\n for (let i = 0; i < size; i++) {\n ui8Code[i] = vec.get(i);\n }\n return ui8Code;\n }\n private async createDSPFactory(\n name: string,\n code: string,\n args: string,\n poly: boolean\n ) {\n // Cleanup the cache\n if (FaustCompiler.gFactories.size > 10) {\n FaustCompiler.gFactories.clear();\n }\n\n // If code is already compiled, return the cached factory\n const shaKey = await sha256(\n name + code + args + (poly ? 'poly' : 'mono')\n );\n if (FaustCompiler.gFactories.has(shaKey)) {\n return FaustCompiler.gFactories.get(shaKey) || null;\n } else {\n try {\n // Can possibly raise a C++ exception catched by the second catch()\n const faustDspWasm = this.fLibFaust.createDSPFactory(\n name,\n code,\n args,\n !poly\n );\n const ui8Code = this.intVec2intArray(faustDspWasm.data);\n faustDspWasm.data.delete();\n const module = await WebAssembly.compile(ui8Code);\n const factory: FaustDspFactory = {\n shaKey,\n cfactory: faustDspWasm.cfactory,\n code: ui8Code,\n module,\n json: faustDspWasm.json,\n poly,\n soundfiles: {}\n };\n // Factory C++ side can be deallocated immediately\n this.deleteDSPFactory(factory);\n // Keep the compiled factory in the cache\n FaustCompiler.gFactories.set(shaKey, factory);\n return factory;\n } catch (e) {\n this.fErrorMessage = this.fLibFaust.getErrorAfterException();\n // console.error(`=> exception raised while running createDSPFactory: ${this.fErrorMessage}`, e);\n this.fLibFaust.cleanupAfterException();\n throw this.fErrorMessage ? new Error(this.fErrorMessage) : e;\n }\n }\n }\n version() {\n return this.fLibFaust.version();\n }\n getErrorMessage() {\n return this.fErrorMessage;\n }\n async createMonoDSPFactory(name: string, code: string, args: string) {\n return this.createDSPFactory(name, code, args, false);\n }\n async createPolyDSPFactory(name: string, code: string, args: string) {\n return this.createDSPFactory(name, code, args, true);\n }\n deleteDSPFactory(factory: FaustDspFactory) {\n this.fLibFaust.deleteDSPFactory(factory.cfactory);\n factory.cfactory = 0;\n }\n expandDSP(code: string, args: string) {\n try {\n return this.fLibFaust.expandDSP('FaustDSP', code, args);\n } catch (e) {\n this.fErrorMessage = this.fLibFaust.getErrorAfterException();\n // console.error(`=> exception raised while running expandDSP: ${this.fErrorMessage}`);\n this.fLibFaust.cleanupAfterException();\n throw this.fErrorMessage ? new Error(this.fErrorMessage) : e;\n }\n }\n generateAuxFiles(name: string, code: string, args: string) {\n try {\n return this.fLibFaust.generateAuxFiles(name, code, args);\n } catch (e) {\n this.fErrorMessage = this.fLibFaust.getErrorAfterException();\n // console.error(`=> exception raised while running generateAuxFiles: ${this.fErrorMessage}`);\n this.fLibFaust.cleanupAfterException();\n throw this.fErrorMessage ? new Error(this.fErrorMessage) : e;\n }\n }\n deleteAllDSPFactories(): void {\n this.fLibFaust.deleteAllDSPFactories();\n }\n fs() {\n return this.fLibFaust.fs();\n }\n async getAsyncInternalMixerModule(isDouble = false) {\n const bufferKey = isDouble ? 'mixer64Buffer' : 'mixer32Buffer';\n const moduleKey = isDouble ? 'mixer64Module' : 'mixer32Module';\n if (this[moduleKey])\n return {\n mixerBuffer: this[bufferKey],\n mixerModule: this[moduleKey]\n };\n const path = isDouble\n ? '/usr/rsrc/mixer64.wasm'\n : '/usr/rsrc/mixer32.wasm';\n const mixerBuffer = this.fs().readFile(path, { encoding: 'binary' });\n this[bufferKey] = mixerBuffer;\n // Compile mixer\n const mixerModule = await WebAssembly.compile(\n new Uint8Array(mixerBuffer)\n );\n this[moduleKey] = mixerModule;\n return { mixerBuffer, mixerModule };\n }\n getSyncInternalMixerModule(isDouble = false) {\n const bufferKey = isDouble ? 'mixer64Buffer' : 'mixer32Buffer';\n const moduleKey = isDouble ? 'mixer64Module' : 'mixer32Module';\n if (this[moduleKey])\n return {\n mixerBuffer: this[bufferKey],\n mixerModule: this[moduleKey]\n };\n const path = isDouble\n ? '/usr/rsrc/mixer64.wasm'\n : '/usr/rsrc/mixer32.wasm';\n const mixerBuffer = this.fs().readFile(path, { encoding: 'binary' });\n this[bufferKey] = mixerBuffer;\n // Compile mixer\n const mixerModule = new WebAssembly.Module(new Uint8Array(mixerBuffer));\n this[moduleKey] = mixerModule;\n return { mixerBuffer, mixerModule };\n }\n}\n\nexport default FaustCompiler;\n", "/**\n * The Faust wasm instance interface.\n */\nexport interface IFaustDspInstance {\n /**\n * The dsp computation, to be called with successive input/output audio buffers.\n *\n * @param $dsp - the DSP pointer\n * @param count - the audio buffer size in frames\n * @param $inputs - the input audio buffer as in index in wasm memory\n * @param $output - the output audio buffer as in index in wasm memory\n */\n compute(\n $dsp: number,\n count: number,\n $inputs: number,\n $output: number\n ): void;\n\n /**\n * Give the number of inputs of a Faust wasm instance.\n *\n * @param $dsp - the DSP pointer\n */\n getNumInputs($dsp: number): number;\n\n /**\n * Give the number of outputs of a Faust wasm instance.\n *\n * @param $dsp - the DSP pointer\n */\n getNumOutputs($dsp: number): number;\n\n /**\n * Give a parameter current value.\n *\n * @param $dsp - the DSP pointer\n * @param index - the parameter index\n * @return the parameter value\n */\n getParamValue($dsp: number, index: number): number;\n\n /**\n * Give the Faust wasm instance sample rate.\n *\n * @param $dsp - the DSP pointer\n * @return the sample rate\n */\n getSampleRate($dsp: number): number;\n\n /**\n * Global init, calls the following methods:\n * - static class 'classInit': static tables initialization\n * - 'instanceInit': constants and instance state initialization\n *\n * @param $dsp - the DSP pointer\n * @param sampleRate - the sampling rate in Hertz\n */\n init($dsp: number, sampleRate: number): void;\n\n /** Init instance state (delay lines...).\n *\n * @param $dsp - the DSP pointer\n */\n instanceClear($dsp: number): void;\n\n /** Init instance constant state.\n *\n * @param $dsp - the DSP pointer\n * @param sampleRate - the sampling rate in Hertz\n */\n instanceConstants($dsp: number, sampleRate: number): void;\n\n /** Init instance state.\n *\n * @param $dsp - the DSP pointer\n * @param sampleRate - the sampling rate in Hertz\n */\n instanceInit($dsp: number, sampleRate: number): void;\n\n /** Init default control parameters values.\n *\n * @param $dsp - the DSP pointer\n */\n instanceResetUserInterface($dsp: number): void;\n\n /**\n * Set a parameter current value.\n *\n * @param $dsp - the DSP pointer\n * @param index - the parameter index\n * @param value - the parameter value\n */\n setParamValue($dsp: number, index: number, value: number): void;\n}\n\n/**\n * Mixer used in polyphonic mode.\n */\nexport interface IFaustMixerInstance {\n clearOutput(bufferSize: number, chans: number, $outputs: number): void;\n mixCheckVoice(\n bufferSize: number,\n chans: number,\n $inputs: number,\n $outputs: number\n ): number;\n fadeOut(bufferSize: number, chans: number, $outputs: number): void;\n}\n\n/**\n * Monophonic instance.\n */\nexport interface FaustMonoDspInstance {\n memory: WebAssembly.Memory;\n api: IFaustDspInstance;\n json: string;\n}\n\n/**\n * Polyphonic instance.\n */\nexport interface FaustPolyDspInstance {\n memory: WebAssembly.Memory;\n voices: number;\n voiceAPI: IFaustDspInstance;\n effectAPI?: IFaustDspInstance;\n mixerAPI: IFaustMixerInstance;\n voiceJSON: string;\n effectJSON?: string;\n}\n\nexport class FaustDspInstance implements IFaustDspInstance {\n private readonly fExports: IFaustDspInstance;\n\n constructor(exports: IFaustDspInstance) {\n this.fExports = exports;\n }\n\n compute($dsp: number, count: number, $input: number, $output: number) {\n this.fExports.compute($dsp, count, $input, $output);\n }\n getNumInputs($dsp: number) {\n return this.fExports.getNumInputs($dsp);\n }\n getNumOutputs($dsp: number) {\n return this.fExports.getNumOutputs($dsp);\n }\n getParamValue($dsp: number, index: number) {\n return this.fExports.getParamValue($dsp, index);\n }\n getSampleRate($dsp: number) {\n return this.fExports.getSampleRate($dsp);\n }\n init($dsp: number, sampleRate: number) {\n this.fExports.init($dsp, sampleRate);\n }\n instanceClear($dsp: number) {\n this.fExports.instanceClear($dsp);\n }\n instanceConstants($dsp: number, sampleRate: number) {\n this.fExports.instanceConstants($dsp, sampleRate);\n }\n instanceInit($dsp: number, sampleRate: number) {\n this.fExports.instanceInit($dsp, sampleRate);\n }\n instanceResetUserInterface($dsp: number) {\n this.fExports.instanceResetUserInterface($dsp);\n }\n setParamValue($dsp: number, index: number, value: number) {\n this.fExports.setParamValue($dsp, index, value);\n }\n}\n", "import {\n FaustDspInstance,\n FaustMonoDspInstance,\n FaustPolyDspInstance,\n IFaustDspInstance,\n IFaustMixerInstance\n} from './FaustDspInstance';\nimport type {\n FaustDspFactory,\n FaustDspMeta,\n LooseFaustDspFactory\n} from './types';\n\nclass FaustWasmInstantiator {\n private static createWasmImport(memory?: WebAssembly.Memory) {\n return {\n env: {\n memory: memory || new WebAssembly.Memory({ initial: 100 }),\n memoryBase: 0,\n tableBase: 0,\n // Integer version\n _abs: Math.abs,\n // Float version\n _acosf: Math.acos,\n _asinf: Math.asin,\n _atanf: Math.atan,\n _atan2f: Math.atan2,\n _ceilf: Math.ceil,\n _cosf: Math.cos,\n _expf: Math.exp,\n _floorf: Math.floor,\n _fmodf: (x: number, y: number) => x % y,\n _logf: Math.log,\n _log10f: Math.log10,\n _max_f: Math.max,\n _min_f: Math.min,\n _remainderf: (x: number, y: number) =>\n x - Math.round(x / y) * y,\n _powf: Math.pow,\n _roundf: Math.round,\n _sinf: Math.sin,\n _sqrtf: Math.sqrt,\n _tanf: Math.tan,\n _acoshf: Math.acosh,\n _asinhf: Math.asinh,\n _atanhf: Math.atanh,\n _coshf: Math.cosh,\n _sinhf: Math.sinh,\n _tanhf: Math.tanh,\n _isnanf: Number.isNaN,\n _isinff: (x: number) => !isFinite(x),\n _copysignf: (x: number, y: number) =>\n Math.sign(x) === Math.sign(y) ? x : -x,\n\n // Double version\n _acos: Math.acos,\n _asin: Math.asin,\n _atan: Math.atan,\n _atan2: Math.atan2,\n _ceil: Math.ceil,\n _cos: Math.cos,\n _exp: Math.exp,\n _floor: Math.floor,\n _fmod: (x: number, y: number) => x % y,\n _log: Math.log,\n _log10: Math.log10,\n _max_: Math.max,\n _min_: Math.min,\n _remainder: (x: number, y: number) => x - Math.round(x / y) * y,\n _pow: Math.pow,\n _round: Math.round,\n _sin: Math.sin,\n _sqrt: Math.sqrt,\n _tan: Math.tan,\n _acosh: Math.acosh,\n _asinh: Math.asinh,\n _atanh: Math.atanh,\n _cosh: Math.cosh,\n _sinh: Math.sinh,\n _tanh: Math.tanh,\n _isnan: Number.isNaN,\n _isinf: (x: number) => !isFinite(x),\n _copysign: (x: number, y: number) =>\n Math.sign(x) === Math.sign(y) ? x : -x,\n\n table: new WebAssembly.Table({ initial: 0, element: 'anyfunc' })\n }\n };\n }\n private static createWasmMemoryPoly(\n voicesIn: number,\n sampleSize: number,\n dspMeta: FaustDspMeta,\n effectMeta: FaustDspMeta,\n bufferSize: number\n ) {\n // Hack : at least 4 voices (to avoid weird wasm memory bug?)\n const voices = Math.max(4, voicesIn);\n // Memory allocator\n const ptrSize = sampleSize; // Done on wast/wasm backend side\n const pow2limit = (x: number) => {\n let n = 65536; // Minimum = 64 kB\n while (n < x) {\n n *= 2;\n }\n return n;\n };\n const effectSize = effectMeta ? effectMeta.size : 0;\n let memorySize =\n pow2limit(\n effectSize +\n dspMeta.size * voices +\n (dspMeta.inputs + dspMeta.outputs * 2) * // + 2 for effect\n (ptrSize + bufferSize * sampleSize)\n ) / 65536;\n memorySize = Math.max(2, memorySize); // At least 2\n return new WebAssembly.Memory({ initial: memorySize });\n }\n\n private static createWasmMemoryMono(\n sampleSize: number,\n dspMeta: FaustDspMeta,\n bufferSize: number\n ) {\n // Memory allocator\n const ptrSize = sampleSize; // Done on wast/wasm backend side\n const memorySize =\n (dspMeta.size +\n (dspMeta.inputs + dspMeta.outputs) *\n (ptrSize + bufferSize * sampleSize)) /\n 65536;\n return new WebAssembly.Memory({ initial: memorySize * 2 }); // Safer to have a bit more memory\n }\n\n private static createMonoDSPInstanceAux(\n instance: WebAssembly.Instance,\n json: string,\n mem: WebAssembly.Memory | null = null\n ) {\n const functions = instance.exports as IFaustDspInstance &\n WebAssembly.Exports;\n const api = new FaustDspInstance(functions);\n const memory: any = mem ? mem : instance.exports.memory;\n return { memory, api, json } as FaustMonoDspInstance;\n }\n\n private static createMemoryMono(monoFactory: LooseFaustDspFactory) {\n // Parse JSON to get 'size' and 'inputs/outputs' infos\n const monoMeta: FaustDspMeta = JSON.parse(monoFactory.json);\n const sampleSize = monoMeta.compile_options.match('-double') ? 8 : 4;\n return this.createWasmMemoryMono(sampleSize, monoMeta, 8192);\n }\n private static createMemoryPoly(\n voices: number,\n voiceFactory: LooseFaustDspFactory,\n effectFactory?: LooseFaustDspFactory\n ) {\n // Parse JSON to get 'size' and 'inputs/outputs' infos\n const voiceMeta: FaustDspMeta = JSON.parse(voiceFactory.json);\n const effectMeta: FaustDspMeta =\n effectFactory && effectFactory.json\n ? JSON.parse(effectFactory.json)\n : null;\n const sampleSize = voiceMeta.compile_options.match('-double') ? 8 : 4;\n // Memory will be shared by voice, mixer and (possibly) effect instances\n return this.createWasmMemoryPoly(\n voices,\n sampleSize,\n voiceMeta,\n effectMeta,\n 8192\n );\n }\n\n private static createMixerAux(\n mixerModule: WebAssembly.Module,\n memory: WebAssembly.Memory\n ) {\n // Create mixer instance\n const mixerImport = {\n imports: { print: console.log },\n memory: { memory }\n };\n const mixerInstance = new WebAssembly.Instance(\n mixerModule,\n mixerImport\n );\n const mixerFunctions = mixerInstance.exports as IFaustMixerInstance &\n WebAssembly.Exports;\n return mixerFunctions;\n }\n\n // Public API\n static async loadDSPFactory(wasmPath: string, jsonPath: string) {\n const wasmFile = await fetch(wasmPath);\n if (!wasmFile.ok) {\n throw new Error(\n `=> exception raised while running loadDSPFactory, file not found: ${wasmPath}`\n );\n }\n try {\n const wasmBuffer = await wasmFile.arrayBuffer();\n const module = await WebAssembly.compile(wasmBuffer);\n const jsonFile = await fetch(jsonPath);\n const json = await jsonFile.text();\n const meta: FaustDspMeta = JSON.parse(json);\n const cOptions = meta.compile_options;\n const poly = cOptions.indexOf('wasm-e') !== -1;\n return {\n cfactory: 0,\n code: new Uint8Array(wasmBuffer),\n module,\n json,\n poly\n } as FaustDspFactory;\n } catch (e) {\n // console.error(`=> exception raised while running loadDSPFactory: ${e}`);\n throw e;\n }\n }\n\n static async loadDSPMixer(mixerPath: string, fs?: typeof FS) {\n try {\n let mixerBuffer: BufferSource | null = null;\n if (fs) {\n mixerBuffer = new Uint8Array(\n fs.readFile(mixerPath, { encoding: 'binary' })\n );\n } else {\n const mixerFile = await fetch(mixerPath);\n mixerBuffer = await mixerFile.arrayBuffer();\n }\n // Compile mixer\n return WebAssembly.compile(mixerBuffer);\n } catch (e) {\n // console.error(`=> exception raised while running loadMixer: ${e}`);\n throw e;\n }\n }\n\n static async createAsyncMonoDSPInstance(factory: LooseFaustDspFactory) {\n // Regular expression to match the 'type: soundfile' pattern\n const pattern = /\"type\":\\s*\"soundfile\"/;\n // Check if the pattern exists in the JSON string\n const isDetected = pattern.test(factory.json);\n\n if (isDetected) {\n const memory = this.createMemoryMono(factory);\n const instance = await WebAssembly.instantiate(\n factory.module,\n this.createWasmImport(memory)\n );\n return this.createMonoDSPInstanceAux(\n instance,\n factory.json,\n memory\n );\n } else {\n // Otherwise, we can create the instance using the wasm internal memory allocated by the wasm module\n const instance = await WebAssembly.instantiate(\n factory.module,\n this.createWasmImport()\n );\n return this.createMonoDSPInstanceAux(instance, factory.json);\n }\n }\n\n static createSyncMonoDSPInstance(factory: LooseFaustDspFactory) {\n // Regular expression to match the 'type: soundfile' pattern\n const pattern = /\"type\":\\s*\"soundfile\"/;\n // Check if the pattern exists in the JSON string\n const isDetected = pattern.test(factory.json);\n\n // If the JSON contains a soundfile UI element, we need to create a memory object\n if (isDetected) {\n const memory = this.createMemoryMono(factory);\n const instance = new WebAssembly.Instance(\n factory.module,\n this.createWasmImport(memory)\n );\n return this.createMonoDSPInstanceAux(\n instance,\n factory.json,\n memory\n );\n } else {\n // Otherwise, we can create the instance using the wasm internal memory allocated by the wasm module\n const instance = new WebAssembly.Instance(\n factory.module,\n this.createWasmImport()\n );\n return this.createMonoDSPInstanceAux(instance, factory.json);\n }\n }\n\n static async createAsyncPolyDSPInstance(\n voiceFactory: LooseFaustDspFactory,\n mixerModule: WebAssembly.Module,\n voices: number,\n effectFactory?: LooseFaustDspFactory\n ): Promise<FaustPolyDspInstance> {\n const memory = this.createMemoryPoly(\n voices,\n voiceFactory,\n effectFactory\n );\n // Create voice\n const voiceInstance = await WebAssembly.instantiate(\n voiceFactory.module,\n this.createWasmImport(memory)\n );\n const voiceFunctions = voiceInstance.exports as IFaustDspInstance &\n WebAssembly.Exports;\n const voiceAPI = new FaustDspInstance(voiceFunctions);\n // Create mixer\n const mixerAPI = this.createMixerAux(mixerModule, memory);\n\n // Possibly create effect instance\n if (effectFactory) {\n const effectInstance = await WebAssembly.instantiate(\n effectFactory.module,\n this.createWasmImport(memory)\n );\n const effectFunctions =\n effectInstance.exports as IFaustDspInstance &\n WebAssembly.Exports;\n const effectAPI = new FaustDspInstance(effectFunctions);\n return {\n memory,\n voices,\n voiceAPI,\n effectAPI,\n mixerAPI,\n voiceJSON: voiceFactory.json,\n effectJSON: effectFactory.json\n } as FaustPolyDspInstance;\n } else {\n return {\n memory,\n voices,\n voiceAPI,\n mixerAPI,\n voiceJSON: voiceFactory.json\n } as FaustPolyDspInstance;\n }\n }\n\n static createSyncPolyDSPInstance(\n voiceFactory: LooseFaustDspFactory,\n mixerModule: WebAssembly.Module,\n voices: number,\n effectFactory?: LooseFaustDspFactory\n ): FaustPolyDspInstance {\n const memory = this.createMemoryPoly(\n voices,\n voiceFactory,\n effectFactory\n );\n // Create voice\n const voiceInstance = new WebAssembly.Instance(\n voiceFactory.module,\n this.createWasmImport(memory)\n );\n const voiceFunctions = voiceInstance.exports as IFaustDspInstance &\n WebAssembly.Exports;\n const voiceAPI = new FaustDspInstance(voiceFunctions);\n // Create mixer\n const mixerAPI = this.createMixerAux(mixerModule, memory);\n\n // Possibly create effect instance\n if (effectFactory) {\n const effectInstance = new WebAssembly.Instance(\n effectFactory.module,\n this.createWasmImport(memory)\n );\n const effectFunctions =\n effectInstance.exports as IFaustDspInstance &\n WebAssembly.Exports;\n const effectAPI = new FaustDspInstance(effectFunctions);\n return {\n memory,\n voices,\n voiceAPI,\n effectAPI,\n mixerAPI,\n voiceJSON: voiceFactory.json,\n effectJSON: effectFactory.json\n } as FaustPolyDspInstance;\n } else {\n return {\n memory,\n voices,\n voiceAPI,\n mixerAPI,\n voiceJSON: voiceFactory.json\n } as FaustPolyDspInstance;\n }\n }\n}\n\nexport default FaustWasmInstantiator;\n", "\uFEFFexport interface AccParams {\n isEnabled: boolean;\n acc: string;\n address: string;\n min: number;\n max: number;\n init: number;\n label: string;\n}\n\n/** Enum describing the axis of the accelerometer or gyroscope */\nexport enum Axis {\n x,\n y,\n z\n}\n\n/** Enum describing the curve of the accelerometer */\nexport enum Curve {\n Up,\n Down,\n UpDown,\n DownUp\n}\n\ninterface Range {\n fLo: number;\n fHi: number;\n clip(x: number): number;\n}\n\ninterface InterpolateObject {\n amin: number;\n amax: number;\n}\ninterface Interpolator {\n fRange: Range;\n fCoef: number;\n fOffset: number;\n returnMappedValue(v: number): number;\n getLowHigh(amin: number, amax: number): InterpolateObject;\n}\n\ninterface InterpolateObject3pt {\n amin: number;\n amid: number;\n amax: number;\n}\ninterface Interpolator3pt {\n fSegment1: Interpolator;\n fSegment2: Interpolator;\n fMid: number;\n returnMappedValue(v: number): number;\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt;\n}\n\n/**\n * ValueConverter interface\n */\ninterface ValueConverter {\n uiToFaust(x: number): number;\n faustToUi(x: number): number;\n}\n\n/**\n * UpdatableValueConverter interface\n */\nexport interface UpdatableValueConverter extends ValueConverter {\n fActive: boolean;\n\n setMappingValues(\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): void;\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt;\n\n setActive(onOff: boolean): void;\n getActive(): boolean;\n}\n\nexport default class FaustSensors {\n /**\n * Function to convert a number to an axis type\n *\n * @param value number\n * @returns axis type\n */\n static convertToAxis(value: number): Axis {\n switch (value) {\n case 0:\n return Axis.x;\n case 1:\n return Axis.y;\n case 2:\n return Axis.z;\n default:\n console.error('Error: Axis not found value: ' + value);\n return Axis.x;\n }\n }\n /**\n * Function to convert a number to a curve type\n *\n * @param value number\n * @returns curve type\n */\n static convertToCurve(value: number): Curve {\n switch (value) {\n case 0:\n return Curve.Up;\n case 1:\n return Curve.Down;\n case 2:\n return Curve.UpDown;\n case 3:\n return Curve.DownUp;\n default:\n console.error('Error: Curve not found value: ' + value);\n return Curve.Up;\n }\n }\n\n // Converter objects use to map acc and Faust value\n static _Range: new (x: number, y: number) => Range;\n static get Range() {\n if (!this._Range) {\n this._Range = class {\n fLo: number;\n fHi: number;\n\n constructor(x: number, y: number) {\n this.fLo = Math.min(x, y);\n this.fHi = Math.max(x, y);\n }\n\n clip(x: number): number {\n if (x < this.fLo) return this.fLo;\n if (x > this.fHi) return this.fHi;\n return x;\n }\n };\n }\n return this._Range;\n }\n\n static _Interpolator: new (\n lo: number,\n hi: number,\n v1: number,\n v2: number\n ) => Interpolator;\n /**\n * Interpolator class\n */\n static get Interpolator() {\n if (!this._Interpolator) {\n this._Interpolator = class {\n fRange: Range;\n fCoef: number;\n fOffset: number;\n\n constructor(lo: number, hi: number, v1: number, v2: number) {\n this.fRange = new FaustSensors.Range(lo, hi);\n if (hi !== lo) {\n // regular case\n this.fCoef = (v2 - v1) / (hi - lo);\n this.fOffset = v1 - lo * this.fCoef;\n } else {\n // degenerate case, avoids division by zero\n this.fCoef = 0;\n this.fOffset = (v1 + v2) / 2;\n }\n }\n returnMappedValue(v: number): number {\n const x = this.fRange.clip(v);\n return this.fOffset + x * this.fCoef;\n }\n getLowHigh(amin: number, amax: number): InterpolateObject {\n return { amin: this.fRange.fLo, amax: this.fRange.fHi };\n }\n };\n }\n return this._Interpolator;\n }\n\n static _Interpolator3pt: new (\n lo: number,\n mid: number,\n hi: number,\n v1: number,\n vMid: number,\n v2: number\n ) => Interpolator3pt;\n /**\n * Interpolator3pt class, combine two interpolators\n */\n static get Interpolator3pt() {\n if (!this._Interpolator3pt) {\n this._Interpolator3pt = class {\n fSegment1: Interpolator;\n fSegment2: Interpolator;\n fMid: number;\n\n constructor(\n lo: number,\n mid: number,\n hi: number,\n v1: number,\n vMid: number,\n v2: number\n ) {\n this.fSegment1 = new FaustSensors.Interpolator(\n lo,\n mid,\n v1,\n vMid\n );\n this.fSegment2 = new FaustSensors.Interpolator(\n mid,\n hi,\n vMid,\n v2\n );\n this.fMid = mid;\n }\n returnMappedValue(x: number): number {\n return x < this.fMid\n ? this.fSegment1.returnMappedValue(x)\n : this.fSegment2.returnMappedValue(x);\n }\n\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt {\n const lowHighSegment1 = this.fSegment1.getLowHigh(\n amin,\n amid\n );\n const lowHighSegment2 = this.fSegment2.getLowHigh(\n amid,\n amax\n );\n return {\n amin: lowHighSegment1.amin,\n amid: lowHighSegment2.amin,\n amax: lowHighSegment2.amax\n };\n }\n };\n }\n return this._Interpolator3pt;\n }\n static _UpConverter: new (\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) => UpdatableValueConverter;\n /**\n * UpConverter class, convert accelerometer value to Faust value\n */\n static get UpConverter() {\n if (!this._UpConverter) {\n this._UpConverter = class implements UpdatableValueConverter {\n fA2F: Interpolator3pt;\n fF2A: Interpolator3pt;\n fActive: boolean = true;\n\n constructor(\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n fmin,\n fmid,\n fmax\n );\n this.fF2A = new FaustSensors.Interpolator3pt(\n fmin,\n fmid,\n fmax,\n amin,\n amid,\n amax\n );\n }\n\n uiToFaust(x: number) {\n return this.fA2F.returnMappedValue(x);\n }\n faustToUi(x: number) {\n return this.fF2A.returnMappedValue(x);\n }\n\n setMappingValues(\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): void {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n this.fF2A = new FaustSensors.Interpolator3pt(\n min,\n init,\n max,\n amin,\n amid,\n amax\n );\n }\n\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt {\n return this.fA2F.getMappingValues(amin, amid, amax);\n }\n\n setActive(onOff: boolean): void {\n this.fActive = onOff;\n }\n getActive(): boolean {\n return this.fActive;\n }\n };\n }\n return this._UpConverter;\n }\n static _DownConverter: new (\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) => UpdatableValueConverter;\n /**\n * DownConverter class, convert accelerometer value to Faust value\n */\n static get DownConverter() {\n if (!this._DownConverter) {\n this._DownConverter = class implements UpdatableValueConverter {\n fA2F: Interpolator3pt;\n fF2A: Interpolator3pt;\n fActive: boolean = true;\n\n constructor(\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n fmax,\n fmid,\n fmin\n );\n this.fF2A = new FaustSensors.Interpolator3pt(\n fmin,\n fmid,\n fmax,\n amax,\n amid,\n amin\n );\n }\n\n uiToFaust(x: number) {\n return this.fA2F.returnMappedValue(x);\n }\n faustToUi(x: number) {\n return this.fF2A.returnMappedValue(x);\n }\n\n setMappingValues(\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): void {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n max,\n init,\n min\n );\n this.fF2A = new FaustSensors.Interpolator3pt(\n min,\n init,\n max,\n amax,\n amid,\n amin\n );\n }\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt {\n return this.fA2F.getMappingValues(amin, amid, amax);\n }\n\n setActive(onOff: boolean): void {\n this.fActive = onOff;\n }\n getActive(): boolean {\n return this.fActive;\n }\n };\n }\n return this._DownConverter;\n }\n static _UpDownConverter: new (\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) => UpdatableValueConverter;\n /**\n * UpDownConverter class, convert accelerometer value to Faust value\n */\n static get UpDownConverter() {\n if (!this._UpDownConverter) {\n this._UpDownConverter = class implements UpdatableValueConverter {\n fA2F: Interpolator3pt;\n fF2A: Interpolator;\n fActive: boolean = true;\n\n constructor(\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n fmin,\n fmax,\n fmin\n );\n this.fF2A = new FaustSensors.Interpolator(\n fmin,\n fmax,\n amin,\n amax\n );\n }\n\n uiToFaust(x: number) {\n return this.fA2F.returnMappedValue(x);\n }\n faustToUi(x: number) {\n return this.fF2A.returnMappedValue(x);\n }\n\n setMappingValues(\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): void {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n min,\n max,\n min\n );\n this.fF2A = new FaustSensors.Interpolator(\n min,\n max,\n amin,\n amax\n );\n }\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt {\n return this.fA2F.getMappingValues(amin, amid, amax);\n }\n\n setActive(onOff: boolean): void {\n this.fActive = onOff;\n }\n getActive(): boolean {\n return this.fActive;\n }\n };\n }\n return this._UpDownConverter;\n }\n /**\n * DownUpConverter class, convert accelerometer value to Faust value\n */\n static _DownUpConverter: new (\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) => UpdatableValueConverter;\n static get DownUpConverter() {\n if (!this._DownUpConverter) {\n this._DownUpConverter = class implements UpdatableValueConverter {\n fA2F: Interpolator3pt;\n fF2A: Interpolator;\n fActive: boolean = true;\n\n constructor(\n amin: number,\n amid: number,\n amax: number,\n fmin: number,\n fmid: number,\n fmax: number\n ) {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n fmax,\n fmin,\n fmax\n );\n this.fF2A = new FaustSensors.Interpolator(\n fmin,\n fmax,\n amin,\n amax\n );\n }\n\n uiToFaust(x: number) {\n return this.fA2F.returnMappedValue(x);\n }\n faustToUi(x: number) {\n return this.fF2A.returnMappedValue(x);\n }\n\n setMappingValues(\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): void {\n this.fA2F = new FaustSensors.Interpolator3pt(\n amin,\n amid,\n amax,\n max,\n min,\n max\n );\n this.fF2A = new FaustSensors.Interpolator(\n min,\n max,\n amin,\n amax\n );\n }\n getMappingValues(\n amin: number,\n amid: number,\n amax: number\n ): InterpolateObject3pt {\n return this.fA2F.getMappingValues(amin, amid, amax);\n }\n\n setActive(onOff: boolean): void {\n this.fActive = onOff;\n }\n getActive(): boolean {\n return this.fActive;\n }\n };\n }\n return this._DownUpConverter;\n }\n /**\n * Public function to build the accelerometer handler\n *\n * @returns `UpdatableValueConverter` built for the given curve\n */\n static buildHandler(\n curve: Curve,\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ): UpdatableValueConverter {\n switch (curve) {\n case Curve.Up:\n return new FaustSensors.UpConverter(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n case Curve.Down:\n return new FaustSensors.DownConverter(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n case Curve.UpDown:\n return new FaustSensors.UpDownConverter(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n case Curve.DownUp:\n return new FaustSensors.DownUpConverter(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n default:\n return new FaustSensors.UpConverter(\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n }\n }\n}\n", "import type {\n FaustMonoDspInstance,\n FaustPolyDspInstance,\n IFaustDspInstance\n} from './FaustDspInstance';\nimport type {\n AudioData,\n FaustDspMeta,\n FaustUIDescriptor,\n FaustUIGroup,\n FaustUIInputItem,\n FaustUIItem,\n LooseFaustDspFactory\n} from './types';\nimport FaustSensors, {\n Axis,\n Curve,\n UpdatableValueConverter\n} from './FaustSensors';\n\n// Public API\nexport type OutputParamHandler = (path: string, value: number) => void;\nexport type InputParamHandler = (path: string, value: number) => void;\nexport type ComputeHandler = (buffer_size: number) => void;\nexport type PlotHandler = (\n plotted: Float32Array[] | Float64Array[],\n index: number,\n events?: { type: string; data: any }[]\n) => void;\nexport type MetadataHandler = (key: string, value: string) => void;\n\n/**\n * A control write due at a known frame inside the next block.\n *\n * Given a list of these, `compute` renders the block in slices: up to the\n * frame of the next event, apply it, carry on. The same approach as\n * `architecture/faust/dsp/timed-dsp.h`, which is how a native host gets\n * sample-accurate MIDI.\n *\n * `apply` is a closure rather than a `{ path, value }` pair so one list can\n * carry parameter writes, `keyOn`s and MIDI messages together. The caller\n * knows how to perform each; the DSP only needs to know when.\n *\n * The list must be sorted by frame. Frames outside the block are clamped.\n */\nexport interface FaustTimedEvent {\n /** Frame offset from the start of the block, 0 <= frame < bufferSize */\n frame: number;\n /** Performed just before the slice starting at `frame` is rendered */\n apply: () => void;\n}\n\n// Implementation API\nexport type UIHandler = (item: FaustUIItem) => void;\n\n// Accelerometer or gyroscope handler\nexport type SensorEventHandler = (val: number) => void;\n\n// Define a type for the accelerometer or gyroscope handlers\nexport type SensorEventHandlers = {\n x: SensorEventHandler[];\n y: SensorEventHandler[];\n z: SensorEventHandler[];\n};\n\n/** Definition of the AudioBufferItem type */\nexport interface AudioBufferItem {\n pathName: string;\n audioBuffer: AudioBuffer;\n}\n\n/** Definition of the SoundfileItem type */\nexport interface SoundfileItem {\n /** Name of the soundfile */\n name: string;\n /** URL of the soundfile */\n url: string;\n /** Index in the DSP struct */\n index: number;\n /** Base pointer in wasm memory */\n basePtr: number;\n}\n\n/**\n * WasmAllocator is a basic memory management class designed to allocate\n * blocks of memory within a WebAssembly.Memory object. It provides a simple\n * alloc method to allocate a contiguous block of memory of a specified size.\n *\n * The allocator operates by keeping a linear progression through the memory,\n * always allocating the next block at the end of the last. This approach does not\n * handle freeing of memory or reuse of memory spaces.\n */\nexport class WasmAllocator {\n // The WebAssembly.Memory object this allocator will manage.\n private readonly memory: WebAssembly.Memory;\n // The number of bytes currently allocated. This serves as the \"pointer\" to the\n // next free byte in the memory.\n private allocatedBytes: number;\n\n constructor(memory: WebAssembly.Memory, offset: number) {\n this.memory = memory;\n // Initialize the allocator with offset allocated bytes.\n this.allocatedBytes = offset;\n }\n\n /**\n * Allocates a block of memory of the specified size, returning the pointer to the\n * beginning of the block. The block is allocated at the current offset and the\n * offset is incremented by the size of the block.\n *\n * @param sizeInBytes The size of the block to allocate in bytes.\n * @returns The offset (pointer) to the beginning of the allocated block.\n */\n alloc(sizeInBytes: number): number {\n // Store the current offset as the start of the new block.\n const currentOffset = this.allocatedBytes;\n // Calculate the new offset after allocating the requested block.\n const newOffset = currentOffset + sizeInBytes;\n // Get the total size of the WebAssembly memory in bytes.\n const totalMemoryBytes = this.memory.buffer.byteLength;\n\n // If the new offset exceeds the total size of the memory, grow the memory.\n if (newOffset > totalMemoryBytes) {\n // Calculate the number of WebAssembly pages needed to fit the new allocation.\n // WebAssembly memory pages are 64KiB each.\n const neededPages = Math.ceil(\n (newOffset - totalMemoryBytes) / 65536\n );\n // Grow the memory by the required number of pages.\n console.log(`GROW: ${neededPages} pages`);\n this.memory.grow(neededPages);\n }\n\n // Update the allocated bytes to the new offset.\n this.allocatedBytes = newOffset;\n // Return the offset at which the allocated block starts.\n return currentOffset;\n }\n\n /**\n * Returns the underlying buffer object.\n *\n * @returns The buffer object.\n */\n getBuffer(): ArrayBuffer {\n return this.memory.buffer;\n }\n\n /**\n * Returns the Int32 view of the underlying buffer object.\n *\n * @returns The view of the memory buffer as Int32Array.\n */\n getInt32Array(): Int32Array {\n return new Int32Array(this.memory.buffer);\n }\n\n /**\n * Returns the Int64 view of the underlying buffer object.\n *\n * @returns The view of the memory buffer as BigInt64Array.\n */\n getInt64Array(): BigInt64Array {\n return new BigInt64Array(this.memory.buffer);\n }\n\n /**\n * Returns the Float32 view of the underlying buffer object.\n *\n * @returns The view of the memory buffer as Float32Array.\n */\n getFloat32Array(): Float32Array {\n return new Float32Array(this.memory.buffer);\n }\n\n /**\n * Returns the Float64 view of the underlying buffer object..\n *\n * @returns The view of the memory buffer as Float64Array.\n */\n getFloat64Array(): Float64Array {\n return new Float64Array(this.memory.buffer);\n }\n}\n\n/**\n * Soundfile class to handle soundfile data in wasm memory.\n */\nexport class Soundfile {\n /** Maximum number of soundfile parts. */\n static get MAX_SOUNDFILE_PARTS() {\n return 256;\n }\n\n /** Maximum number of channels. */\n static get MAX_CHAN() {\n return 64;\n }\n\n /** Maximum buffer size in frames. */\n static get BUFFER_SIZE() {\n return 1024;\n }\n\n /** Default sample rate. */\n static get SAMPLE_RATE() {\n return 44100;\n }\n\n /** Pointer to the soundfile structure in wasm memory */\n private readonly fPtr: number;\n private readonly fBuffers: number;\n private readonly fLength: number;\n private readonly fSR: number;\n private readonly fOffset: number;\n private readonly fSampleSize: number;\n private readonly fPtrSize: number;\n private readonly fIntSize: number;\n private readonly fAllocator: WasmAllocator;\n\n constructor(\n allocator: WasmAllocator,\n sampleSize: number,\n curChan: number,\n length: number,\n maxChan: number,\n totalParts: number\n ) {\n this.fSampleSize = sampleSize;\n\n // To be coherent with the code generated by the wast/wasm backends:\n // - that uses 4 bytes for int when float is used\n // - that uses 8 bytes for int when double is used (to simplify the code generation)\n this.fIntSize = this.fSampleSize;\n\n this.fPtrSize = 4; // Not related to float/double choice, so always 4\n\n this.fAllocator = allocator;\n\n console.log(\n `Soundfile constructor: curChan: ${curChan}, length: ${length}, maxChan: ${maxChan}, totalParts: ${totalParts}`\n );\n\n // Allocate wasm memory for the soundfile structure\n this.fPtr = allocator.alloc(4 * this.fPtrSize); // 4 fPtrSize: fBuffers, fLength, fSR, fOffset\n\n // Use the 4 or 8 bytes size for int. The access are then adapted in copyToOut and emptyFile methods\n this.fLength = allocator.alloc(\n Soundfile.MAX_SOUNDFILE_PARTS * this.fIntSize\n );\n this.fSR = allocator.alloc(\n Soundfile.MAX_SOUNDFILE_PARTS * this.fIntSize\n );\n this.fOffset = allocator.alloc(\n Soundfile.MAX_SOUNDFILE_PARTS * this.fIntSize\n );\n\n this.fBuffers = this.allocBuffers(curChan, length, maxChan);\n\n //this.displayMemory(\"Allocated soundfile structure 1\");\n\n // Set the soundfile structure in wasm memory\n const HEAP32 = this.fAllocator.getInt32Array();\n HEAP32[this.fPtr >> 2] = this.fBuffers;\n HEAP32[(this.fPtr + this.fPtrSize) >> 2] = this.fLength;\n HEAP32[(this.fPtr + 2 * this.fPtrSize) >> 2] = this.fSR;\n HEAP32[(this.fPtr + 3 * this.fPtrSize) >> 2] = this.fOffset;\n\n for (let chan = 0; chan < curChan; chan++) {\n const buffer: number = HEAP32[(this.fBuffers >> 2) + chan];\n console.log(`allocBuffers AFTER: ${chan} - ${buffer}`);\n }\n\n //this.displayMemory(\"Allocated soundfile structure 2\");\n }\n\n private allocBuffers(\n curChan: number,\n length: number,\n maxChan: number\n ): number {\n const buffers = this.fAllocator.alloc(maxChan * this.fPtrSize);\n\n console.log(`allocBuffers buffers: ${buffers}`);\n\n for (let chan = 0; chan < curChan; chan++) {\n const buffer: number = this.fAllocator.alloc(\n length * this.fSampleSize\n );\n // HEAP32 is the Int32Array view of the memory buffer which can change after grow in `alloc` method\n // so we need to recompute the buffer address\n const HEAP32 = this.fAllocator.getInt32Array();\n HEAP32[(buffers >> 2) + chan] = buffer;\n }\n //this.displayMemory(\"Allocated soundfile buffers\");\n return buffers;\n }\n\n shareBuffers(curChan: number, maxChan: number) {\n // Share the same buffers for all other channels so that we have maxChan channels available\n const HEAP32 = this.fAllocator.getInt32Array();\n for (let chan = curChan; chan < maxChan; chan++) {\n HEAP32[(this.fBuffers >> 2) + chan] =\n HEAP32[(this.fBuffers >> 2) + (chan % curChan)];\n }\n }\n\n copyToOut(\n part: number,\n maxChannels: number,\n offset: number,\n audioData: AudioData\n ) {\n // Set the soundfile fields in wasm memory\n if (this.fIntSize === 4) {\n const HEAP32 = this.fAllocator.getInt32Array();\n HEAP32[(this.fLength >> Math.log2(this.fIntSize)) + part] =\n audioData.audioBuffer[0].length;\n HEAP32[(this.fSR >> Math.log2(this.fIntSize)) + part] =\n audioData.sampleRate;\n HEAP32[(this.fOffset >> Math.log2(this.fIntSize)) + part] = offset;\n } else {\n const HEAP64 = this.fAllocator.getInt64Array();\n HEAP64[(this.fLength >> Math.log2(this.fIntSize)) + part] = BigInt(\n audioData.audioBuffer[0].length\n );\n HEAP64[(this.fSR >> Math.log2(this.fIntSize)) + part] = BigInt(\n audioData.sampleRate\n );\n HEAP64[(this.fOffset >> Math.log2(this.fIntSize)) + part] =\n BigInt(offset);\n }\n\n console.log(\n `copyToOut: part: ${part}, maxChannels: ${maxChannels}, offset: ${offset}, buffer: ${audioData}`\n );\n\n //this.displayMemory(\"IN copyToOut, BEFORE copyToOutReal\", true);\n // Copy the soundfile data to the buffer\n if (this.fSampleSize === 8) {\n this.copyToOutReal64(maxChannels, offset, audioData);\n } else {\n this.copyToOutReal32(maxChannels, offset, audioData);\n }\n //this.displayMemory(\"IN copyToOut, AFTER copyToOutReal\");\n }\n\n copyToOutReal32(maxChannels: number, offset: number, audioData: AudioData) {\n const HEAP32 = this.fAllocator.getInt32Array();\n const HEAPF = this.fAllocator.getFloat32Array();\n for (let chan = 0; chan < audioData.audioBuffer.length; chan++) {\n const input: Float32Array = audioData.audioBuffer[chan];\n const output: number = HEAP32[(this.fBuffers >> 2) + chan];\n const begin: number =\n (output + offset * this.fSampleSize) >>\n Math.log2(this.fSampleSize);\n const end: number =\n (output + (offset + input.length) * this.fSampleSize) >>\n Math.log2(this.fSampleSize);\n console.log(\n `copyToOutReal32 begin: ${begin}, end: ${end}, delta: ${end - begin}`\n );\n const outputReal: Float32Array = HEAPF.subarray(\n (output + offset * this.fSampleSize) >>\n Math.log2(this.fSampleSize),\n (output + (offset + input.length) * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n for (let sample = 0; sample < input.length; sample++) {\n outputReal[sample] = input[sample];\n }\n }\n }\n\n copyToOutReal64(maxChannels: number, offset: number, audioData: AudioData) {\n const HEAP32 = this.fAllocator.getInt32Array();\n const HEAPF = this.fAllocator.getFloat64Array();\n for (let chan = 0; chan < audioData.audioBuffer.length; chan++) {\n const input: Float32Array = audioData.audioBuffer[chan];\n const output: number = HEAP32[(this.fBuffers >> 2) + chan];\n const begin: number =\n (output + offset * this.fSampleSize) >>\n Math.log2(this.fSampleSize);\n const end: number =\n (output + (offset + input.length) * this.fSampleSize) >>\n Math.log2(this.fSampleSize);\n console.log(\n `copyToOutReal64 begin: ${begin}, end: ${end}, delta: ${end - begin}`\n );\n const outputReal: Float64Array = HEAPF.subarray(\n (output + offset * this.fSampleSize) >>\n Math.log2(this.fSampleSize),\n (output + (offset + input.length) * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n for (let sample = 0; sample < input.length; sample++) {\n outputReal[sample] = input[sample];\n }\n }\n }\n\n emptyFile(part: number, offset: number): number {\n // Set the soundfile fields in wasm memory\n if (this.fIntSize === 4) {\n const HEAP32 = this.fAllocator.getInt32Array();\n HEAP32[(this.fLength >> Math.log2(this.fIntSize)) + part] =\n Soundfile.BUFFER_SIZE;\n HEAP32[(this.fSR >> Math.log2(this.fIntSize)) + part] =\n Soundfile.SAMPLE_RATE;\n HEAP32[(this.fOffset >> Math.log2(this.fIntSize)) + part] = offset;\n } else {\n const HEAP64 = this.fAllocator.getInt64Array();\n HEAP64[(this.fLength >> Math.log2(this.fIntSize)) + part] = BigInt(\n Soundfile.BUFFER_SIZE\n );\n HEAP64[(this.fSR >> Math.log2(this.fIntSize)) + part] = BigInt(\n Soundfile.SAMPLE_RATE\n );\n HEAP64[(this.fOffset >> Math.log2(this.fIntSize)) + part] =\n BigInt(offset);\n }\n\n // Update and return the new offset\n return offset + Soundfile.BUFFER_SIZE;\n }\n\n displayMemory(where: string = '', mem: boolean = false) {\n console.log('Soundfile memory: ' + where);\n console.log(`fPtr: ${this.fPtr}`);\n console.log(`fBuffers: ${this.fBuffers}`);\n console.log(`fLength: ${this.fLength}`);\n console.log(`fSR: ${this.fSR}`);\n console.log(`fOffset: ${this.fOffset}`);\n const HEAP32 = this.fAllocator.getInt32Array();\n if (mem) console.log(`HEAP32: ${HEAP32}`);\n console.log(`HEAP32[this.fPtr >> 2]: ${HEAP32[this.fPtr >> 2]}`);\n console.log(\n `HEAP32[(this.fPtr + ptrSize) >> 2]: ${HEAP32[(this.fPtr + this.fPtrSize) >> 2]}`\n );\n console.log(\n `HEAP32[(this.fPtr + 2 * ptrSize) >> 2]: ${HEAP32[(this.fPtr + 2 * this.fPtrSize) >> 2]}`\n );\n console.log(\n `HEAP32[(this.fPtr + 3 * ptrSize) >> 2]: ${HEAP32[(this.fPtr + 3 * this.fPtrSize) >> 2]}`\n );\n }\n\n // Return the pointer to the soundfile structure in wasm memory\n getPtr(): number {\n return this.fPtr;\n }\n\n getHEAP32(): Int32Array {\n return this.fAllocator.getInt32Array();\n }\n getHEAPFloat32(): Float32Array {\n return this.fAllocator.getFloat32Array();\n }\n\n getHEAPFloat64(): Float64Array {\n return this.fAllocator.getFloat64Array();\n }\n}\n\n/**\n * DSP implementation that mimic the C++ 'dsp' class:\n * - adding MIDI control: metadata are decoded and incoming MIDI messages will control the associated controllers\n * - an output handler can be set to treat produced output controllers (like 'bargraph')\n * - an input handler can be set to follow control parameter changes (like sliders)\n * - regular controllers are handled using setParamValue/getParamValue and getParams methods\n */\nexport interface IFaustBaseWebAudioDsp {\n /**\n * Set the parameter output handler, to be called in the 'compute' method with output parameters (like bargraph).\n *\n * @param handler - the output handler\n */\n setOutputParamHandler(handler: OutputParamHandler | null): void;\n\n /**\n * Get the parameter output handler.\n *\n * @return the current output handler\n */\n getOutputParamHandler(): OutputParamHandler | null;\n\n /**\n * Call the output parameter handler with a path and value.\n *\n * @param path - the path to the wanted parameter (retrieved using 'getParams' method)\n * @param value - the float value for the wanted control\n */\n callOutputParamHandler(path: string, value: number): void;\n\n /**\n * Set the parameter input handler, to be called when input parameters change (like sliders).\n *\n * @param handler - the input handler\n */\n setInputParamHandler(handler: InputParamHandler | null): void;\n\n /**\n * Get the parameter input handler.\n *\n * @return the current input handler\n */\n getInputParamHandler(): InputParamHandler | null;\n\n /**\n * Call the input parameter handler with a path and value.\n *\n * @param path - the path to the wanted parameter (retrieved using 'getParams' method)\n * @param value - the float value for the wanted control\n */\n callInputParamHandler(path: string, value: number): void;\n\n /**\n * Set the compute handler, to be called in the 'compute' method with buffer size.\n *\n * @param handler - the compute handler\n */\n setComputeHandler(handler: ComputeHandler | null): void;\n\n /**\n * Get the compute handler.\n *\n * @return the current output handler\n */\n getComputeHandler(): ComputeHandler | null;\n\n /**\n * Set the plot handler, to be called in the 'compute' method with various info (see PlotHandler type).\n *\n * @param handler - the plot handler\n */\n setPlotHandler(handler: PlotHandler | null): void;\n\n /**\n * Get the plot handler.\n *\n * @return the current plot handler\n */\n getPlotHandler(): PlotHandler | null;\n\n /**\n * Return instance number of audio inputs.\n *\n * @return the instance number of audio inputs\n */\n getNumInputs(): number;\n\n /**\n * Return instance number of audio outputs.\n *\n * @return the instance number of audio outputs\n */\n getNumOutputs(): number;\n\n /**\n * DSP instance computation, to be called with successive input/output audio buffers, using their size.\n *\n * @param inputs - the input audio buffers\n * @param outputs - the output audio buffers\n * @param events - control writes due inside this block, sorted by frame.\n * The block is rendered in slices around them, so each one takes effect on\n * the frame it was timestamped for instead of at the start of the block.\n */\n compute(\n inputs: Float32Array[],\n outputs: Float32Array[],\n events?: FaustTimedEvent[]\n ): boolean;\n\n /**\n * Give a handler to be called on 'declare key value' kind of metadata.\n *\n * @param handler - the handler to be used\n */\n metadata(handler: MetadataHandler): void;\n\n /**\n * Handle untyped MIDI messages.\n *\n * @param data - and arry of MIDI bytes\n */\n midiMessage(data: number[] | Uint8Array): void;\n\n /**\n * Handle MIDI ctrlChange messages.\n *\n * @param channel - the MIDI channel (0..15, not used for now)\n * @param ctrl - the MIDI controller number (0..127)\n * @param value - the MIDI controller value (0..127)\n */\n ctrlChange(chan: number, ctrl: number, value: number): void;\n\n /**\n * Handle MIDI pitchWheel messages.\n *\n * @param channel - the MIDI channel (0..15, not used for now)\n * @param value - the MIDI controller value (0..16383)\n */\n pitchWheel(chan: number, value: number): void;\n\n /**\n * Handle MIDI keyOn messages.\n * @param channel\n * @param pitch\n * @param velocity\n */\n keyOn(channel: number, pitch: number, velocity: number): void;\n\n /**\n * Handle MIDI keyOn messages.\n * @param channel\n * @param pitch\n * @param velocity\n */\n keyOff(channel: number, pitch: number, velocity: number): void;\n\n /**\n * Set parameter value.\n *\n * @param path - the path to the wanted parameter (retrieved using 'getParams' method)\n * @param val - the float value for the wanted control\n */\n setParamValue(path: string, value: number): void;\n\n /**\n * Get parameter value.\n *\n * @param path - the path to the wanted parameter (retrieved using 'getParams' method)\n *\n * @return the float value\n */\n getParamValue(path: string): number;\n\n /**\n * Get the table of all input parameters paths.\n *\n * @return the table of all input parameters paths\n */\n getParams(): string[];\n\n /**\n * Get DSP JSON description with its UI and metadata as object.\n *\n * @return the DSP JSON description as object\n */\n getMeta(): FaustDspMeta;\n\n /**\n * Get DSP UI description.\n *\n * @return the DSP UI description\n */\n getUI(): FaustUIDescriptor;\n\n /**\n * Get DSP UI items description.\n *\n * @return the DSP UI items description\n */\n getDescriptors(): FaustUIInputItem[];\n\n /**\n * Get DSP JSON description with its UI and metadata.\n *\n * @return the DSP JSON description\n */\n getJSON(): string;\n\n /**\n * Start accelerometer and gyroscope handlers.\n */\n startSensors(): void;\n\n /**\n * Stop accelerometer and gyroscope handlers.\n */\n stopSensors(): void;\n\n /** Indicating if the DSP handles the accelerometer */\n readonly hasAccInput: boolean;\n\n /**\n * Accelerometer handling.\n * accelerationIncludingGravity: DeviceMotionEvent[\"accelerationIncludingGravity\"]\n * invert: boolean\n */\n propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean\n ): void;\n\n /** Indicating if the DSP handles the gyroscope */\n readonly hasGyrInput: boolean;\n\n /**\n * Gyroscope handling.\n * event: Pick<DeviceOrientationEvent, \"alpha\" | \"beta\" | \"gamma\">\n */\n propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ): void;\n\n /**\n * Reinitialize the DSP using its configured sample rate.\n */\n init(): void;\n\n /**\n * Reinitialize the DSP instance state using its configured sample rate.\n */\n instanceInit(): void;\n\n /**\n * Clear the DSP instance state.\n */\n instanceClear(): void;\n\n /**\n * Reinitialize the DSP instance constants using its configured sample rate.\n */\n instanceConstants(): void;\n\n /**\n * Reset DSP user interface parameters to their default values.\n */\n instanceResetUserInterface(): void;\n\n /**\n * Start the DSP audio processing.\n */\n start(): void;\n\n /**\n * Stop the DSP audio processing.\n */\n stop(): void;\n\n /**\n * Destroy the DSP.\n */\n destroy(): void;\n}\n\nexport type IFaustMonoWebAudioDsp = IFaustBaseWebAudioDsp;\n\n/**\n * A node's controls, each taking an optional time.\n *\n * `time` is in AudioContext seconds, the same clock as\n * `AudioParam.setValueAtTime`, so notes and parameter automation can be\n * scheduled against each other.\n *\n * It is declared on the node rather than on `IFaustBaseWebAudioDsp` because\n * only a node can honour it: it reaches its DSP over a message port and can\n * hold the write until the right block. A DSP is called from inside the block\n * and has nowhere to put a future event.\n *\n * An AudioWorklet node applies the control on the exact sample. A\n * ScriptProcessor node (`sp: true`) accepts `time` and ignores it.\n */\nexport interface IFaustMonoWebAudioNode\n extends IFaustMonoWebAudioDsp, AudioNode {\n midiMessage(data: number[] | Uint8Array, time?: number): void;\n ctrlChange(chan: number, ctrl: number, value: number, time?: number): void;\n pitchWheel(chan: number, value: number, time?: number): void;\n setParamValue(path: string, value: number, time?: number): void;\n}\n\nexport interface IFaustPolyWebAudioDsp extends IFaustBaseWebAudioDsp {\n /**\n * Handle MIDI keyOn messages.\n *\n * @param channel - the MIDI channel (0..15, not used for now)\n * @param pitch - the MIDI pitch value (0..127)\n * @param velocity - the MIDI velocity value (0..127)\n */\n keyOn(channel: number, pitch: number, velocity: number): void;\n\n /**\n * Handle MIDI keyOff messages.\n *\n * @param channel - the MIDI channel (0..15, not used for now)\n * @param pitch - the MIDI pitch value (0..127)\n * @param velocity - the MIDI velocity value (0..127)\n */\n keyOff(channel: number, pitch: number, velocity: number): void;\n\n /**\n * Stop all playing notes.\n *\n * @param hard - whether to immediately stop notes or put them in release mode\n */\n allNotesOff(hard: boolean): void;\n}\n/** As `IFaustMonoWebAudioNode`, with the notes timestamped too. */\nexport interface IFaustPolyWebAudioNode\n extends IFaustPolyWebAudioDsp, AudioNode {\n midiMessage(data: number[] | Uint8Array, time?: number): void;\n ctrlChange(chan: number, ctrl: number, value: number, time?: number): void;\n pitchWheel(chan: number, value: number, time?: number): void;\n setParamValue(path: string, value: number, time?: number): void;\n keyOn(\n channel: number,\n pitch: number,\n velocity: number,\n time?: number\n ): void;\n keyOff(\n channel: number,\n pitch: number,\n velocity: number,\n time?: number\n ): void;\n}\n\nexport class FaustBaseWebAudioDsp implements IFaustBaseWebAudioDsp {\n protected fOutputHandler: OutputParamHandler | null = null;\n protected fInputHandler: InputParamHandler | null = null;\n protected fComputeHandler: ComputeHandler | null = null;\n\n // To handle MIDI events plot\n protected fPlotHandler: PlotHandler | null = null;\n protected fCachedEvents: { type: string; data: any }[] = [];\n protected fBufferNum = 0;\n\n protected fInChannels: Float32Array[] | Float64Array[] = [];\n protected fOutChannels: Float32Array[] | Float64Array[] = [];\n\n protected fOutputsTimer = 5;\n\n // UI items path\n protected fInputsItems: string[] = [];\n protected fOutputsItems: string[] = [];\n protected fDescriptor: FaustUIInputItem[] = [];\n\n // Soundfile handling\n protected fSoundfiles: SoundfileItem[] = [];\n protected fSoundfileBuffers: LooseFaustDspFactory['soundfiles'] = {};\n /** Keep the end of memory offset before soundfiles */\n protected fEndMemory: number;\n\n // Accelerometer handling\n protected fAcc: SensorEventHandlers; // array of accelerometer handlers on x,y,y axes, to be called with DeviceMotionEvent\n protected fGyr: SensorEventHandlers; // array of gyroscope handlers on alpha,beta,gama axes, to be called with DeviceMotionEvent\n\n // Buffers in wasm memory\n protected fAudioInputs!: number;\n protected fAudioOutputs!: number;\n\n /**\n * Block-start address of every wasm audio channel, plus the heap view\n * holding the pointer tables.\n *\n * Rendering a slice means giving wasm a channel pointer to the slice's\n * first frame, so `setBufferOffset` rewrites the tables and needs these\n * unmoved addresses to offset from. Only the tables move; the\n * `fInChannels` / `fOutChannels` views from `initMemory` still span the\n * whole block and stay valid.\n */\n protected fInBase: number[] = [];\n protected fOutBase: number[] = [];\n protected fHEAP32!: Int32Array;\n\n protected fBufferSize: number;\n protected fPtrSize: number;\n protected fSampleSize: number;\n\n // MIDI handling\n protected fPitchwheelLabel: {\n path: string;\n chan: number;\n min: number;\n max: number;\n }[] = [];\n protected fCtrlLabel: {\n path: string;\n chan: number;\n min: number;\n max: number;\n }[][] = new Array(128).fill(null).map(() => []);\n // array of MIDI key handlers; array index is the MIDI note number\n protected fMidiKeyLabel: {\n path: string;\n chan: number;\n min: number;\n max: number;\n }[][] = new Array(128).fill(null).map(() => []);\n protected fMidiKeyOnLabel: {\n path: string;\n chan: number;\n min: number;\n max: number;\n }[][] = new Array(128).fill(null).map(() => []);\n protected fMidiKeyOffLabel: {\n path: string;\n chan: number;\n min: number;\n max: number;\n }[][] = new Array(128).fill(null).map(() => []);\n\n protected fPathTable: { [address: string]: number } = {};\n protected fUICallback: UIHandler = (item: FaustUIItem) => {\n if (item.type === 'hbargraph' || item.type === 'vbargraph') {\n const registerPath = (alias: string) => {\n if (this.fPathTable[alias] === undefined) {\n this.fPathTable[alias] = item.index;\n }\n };\n // Keep bargraph adresses\n this.fOutputsItems.push(item.address);\n registerPath(item.address);\n registerPath(item.shortname);\n registerPath(item.label);\n } else if (\n item.type === 'vslider' ||\n item.type === 'hslider' ||\n item.type === 'button' ||\n item.type === 'checkbox' ||\n item.type === 'nentry'\n ) {\n const registerPath = (alias: string) => {\n if (this.fPathTable[alias] === undefined) {\n this.fPathTable[alias] = item.index;\n }\n };\n // Keep inputs adresses\n this.fInputsItems.push(item.address);\n registerPath(item.address);\n registerPath(item.shortname);\n registerPath(item.label);\n this.fDescriptor.push(item);\n if (!item.meta) return;\n item.meta.forEach((meta) => {\n const { midi, acc, gyr } = meta;\n // Parse 'midi' metadata\n if (midi) {\n const strMidi = midi.trim();\n if (strMidi === 'pitchwheel') {\n const matched = strMidi.match(/^pitchwheel\\s(\\d+)/);\n // \"pitchwheel chan\"\n if (matched) {\n this.fPitchwheelLabel.push({\n path: item.address,\n chan: parseInt(matched[1]),\n min: item.min as number,\n max: item.max as number\n });\n // \"pitchwheel\"\n } else {\n this.fPitchwheelLabel.push({\n path: item.address,\n chan: 0,\n min: item.min as number,\n max: item.max as number\n });\n }\n } else {\n // \"ctrl num chan\"\n const matched2 = strMidi.match(/^ctrl\\s(\\d+)\\s(\\d+)/);\n // \"ctrl num\"\n const matched1 = strMidi.match(/^ctrl\\s(\\d+)/);\n // match `key <note>[ <channel>]`\n const matchedKey = strMidi.match(\n /^key\\s+(\\d+)(?:\\s+(\\d+))?$/\n );\n //match `keyon <note>[ <channel>]`\n const matchedKeyOn = strMidi.match(\n /^keyon\\s+(\\d+)(?:\\s+(\\d+))?$/\n );\n //match `keyoff <note>[ <channel>]`\n const matchedKeyOff = strMidi.match(\n /^keyoff\\s+(\\d+)(?:\\s+(\\d+))?$/\n );\n if (matched2) {\n this.fCtrlLabel[parseInt(matched2[1])].push({\n path: item.address,\n chan: parseInt(matched2[2]),\n min: item.min as number,\n max: item.max as number\n });\n } else if (matched1) {\n this.fCtrlLabel[parseInt(matched1[1])].push({\n path: item.address,\n chan: 0,\n min: item.min as number,\n max: item.max as number\n });\n } else if (matchedKey) {\n const note = parseInt(matchedKey[1]);\n const channel = matchedKey[2]\n ? parseInt(matchedKey[2])\n : 0;\n this.fMidiKeyLabel[note].push({\n path: item.address,\n chan: channel,\n min: (item.min as number) ?? 0,\n max: (item.max as number) ?? 1\n });\n } else if (matchedKeyOn) {\n const note = parseInt(matchedKeyOn[1]);\n const channel = matchedKeyOn[2]\n ? parseInt(matchedKeyOn[2])\n : 0;\n this.fMidiKeyOnLabel[note].push({\n path: item.address,\n chan: channel,\n min: (item.min as number) ?? 0,\n max: (item.max as number) ?? 1\n });\n } else if (matchedKeyOff) {\n const note = parseInt(matchedKeyOff[1]);\n const channel = matchedKeyOff[2]\n ? parseInt(matchedKeyOff[2])\n : 0;\n this.fMidiKeyOffLabel[note].push({\n path: item.address,\n chan: channel,\n min: (item.min as number) ?? 0,\n max: (item.max as number) ?? 1\n });\n }\n }\n }\n\n // Parse 'acc' metadata\n if (acc) {\n const numAcc: number[] = acc.trim().split(' ').map(Number);\n this.setupAccHandler(\n item.address,\n FaustSensors.convertToAxis(numAcc[0]),\n FaustSensors.convertToCurve(numAcc[1]),\n numAcc[2],\n numAcc[3],\n numAcc[4],\n item.min as number,\n item.init as number,\n item.max as number\n );\n }\n // Parse 'gyr' metadata\n if (gyr) {\n const numAcc: number[] = gyr.trim().split(' ').map(Number);\n this.setupGyrHandler(\n item.address,\n FaustSensors.convertToAxis(numAcc[0]),\n FaustSensors.convertToCurve(numAcc[1]),\n numAcc[2],\n numAcc[3],\n numAcc[4],\n item.min as number,\n item.init as number,\n item.max as number\n );\n }\n });\n } else if (item.type === 'soundfile') {\n this.fSoundfiles.push({\n name: item.label,\n url: item.url,\n index: item.index,\n basePtr: -1\n });\n }\n };\n\n // Audio callback\n protected fProcessing = false;\n protected fDestroyed = false;\n protected fFirstCall = true;\n\n protected fJSONDsp!: FaustDspMeta;\n\n constructor(\n sampleSize: number,\n bufferSize: number,\n soundfiles: LooseFaustDspFactory['soundfiles']\n ) {\n this.fBufferSize = bufferSize;\n this.fPtrSize = sampleSize; // Done on wast/wasm backend side\n this.fSampleSize = sampleSize;\n this.fSoundfileBuffers = soundfiles;\n this.fAcc = { x: [], y: [], z: [] };\n this.fGyr = { x: [], y: [], z: [] };\n }\n\n /**\n * Render a whole block through `render`, stopping at each event.\n *\n * Render up to the next event's frame, apply it, continue. Living in the\n * base class means mono and poly only have to supply what rendering a\n * slice means.\n *\n * With no events the block is one slice, which is what every caller that\n * passes no events gets.\n */\n protected renderBlock(\n events: FaustTimedEvent[] | undefined,\n render: (offset: number, count: number) => void\n ) {\n if (!events || events.length === 0) {\n render(0, this.fBufferSize);\n return;\n }\n let frame = 0;\n for (let i = 0; i < events.length; i++) {\n const event = events[i];\n // Clamped, not trusted: a frame past the end of the block would\n // give wasm a count that runs off the end of the channel.\n const at = Math.min(Math.max(event.frame, 0), this.fBufferSize);\n // Two events on one frame leave an empty slice between them,\n // which is not worth a wasm call.\n if (at > frame) {\n render(frame, at - frame);\n frame = at;\n }\n event.apply();\n }\n if (frame < this.fBufferSize) {\n render(frame, this.fBufferSize - frame);\n }\n }\n\n /**\n * Apply every event without rendering.\n *\n * For the blocks `compute` returns early from: stopped, or an input or\n * output not connected yet. The events have already left the processor's\n * queue, so dropping them here loses them permanently -- a `keyOn` that\n * never sounds, or a parameter the DSP and the host disagree about from\n * then on.\n *\n * A destroyed DSP is the exception, and does drop them.\n */\n protected applyEvents(events?: FaustTimedEvent[]) {\n if (!events) return;\n for (let i = 0; i < events.length; i++) events[i].apply();\n }\n\n /**\n * Point the wasm channel tables at frame `offset` of the block.\n *\n * Each slice sets this before rendering, so nothing outside `compute`\n * depends on where the previous slice left the tables.\n */\n protected setBufferOffset(offset: number) {\n const bytes = offset * this.fSampleSize;\n for (let chan = 0; chan < this.fInBase.length; chan++) {\n this.fHEAP32[(this.fAudioInputs >> 2) + chan] =\n this.fInBase[chan] + bytes;\n }\n for (let chan = 0; chan < this.fOutBase.length; chan++) {\n this.fHEAP32[(this.fAudioOutputs >> 2) + chan] =\n this.fOutBase[chan] + bytes;\n }\n }\n\n // Tools\n static remap(\n v: number,\n mn0: number,\n mx0: number,\n mn1: number,\n mx1: number\n ) {\n return ((v - mn0) / (mx0 - mn0)) * (mx1 - mn1) + mn1;\n }\n\n // JSON parsing functions\n static parseUI(\n ui: FaustUIDescriptor,\n callback: (item: FaustUIItem) => any\n ) {\n ui.forEach((group) => this.parseGroup(group, callback));\n }\n\n static parseGroup(\n group: FaustUIGroup,\n callback: (item: FaustUIItem) => any\n ) {\n if (group.items) {\n this.parseItems(group.items, callback);\n }\n }\n static parseItems(\n items: FaustUIItem[],\n callback: (item: FaustUIItem) => any\n ) {\n items.forEach((item) => this.parseItem(item, callback));\n }\n\n static parseItem(item: FaustUIItem, callback: (item: FaustUIItem) => any) {\n if (\n item.type === 'vgroup' ||\n item.type === 'hgroup' ||\n item.type === 'tgroup'\n ) {\n this.parseItems(item.items, callback);\n } else {\n callback(item);\n }\n }\n\n /** Split the soundfile names and return an array of names */\n static splitSoundfileNames(input: string): string[] {\n // Trim off the curly braces at the start and end, if present\n const trimmed = input.replace(/^\\{|\\}$/g, '');\n // Split the string into an array of strings and remove first and last characters\n return trimmed\n .split(';')\n .map((str) =>\n str.length <= 2 ? '' : str.substring(1, str.length - 1)\n )\n .map((str) => str.trim())\n .filter((str) => str.length > 0);\n }\n\n get hasAccInput() {\n return this.fAcc.x.length + this.fAcc.y.length + this.fAcc.z.length > 0;\n }\n propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n // Get accelerometervalues\n const { x, y, z } = accelerationIncludingGravity;\n\n if (invert) {\n // Call the accelerometer handlers\n if (x !== null) this.fAcc.x.forEach((handler) => handler(-x));\n if (y !== null) this.fAcc.y.forEach((handler) => handler(-y));\n if (z !== null) this.fAcc.z.forEach((handler) => handler(-z));\n } else {\n // Call the accelerometer handlers\n if (x !== null) this.fAcc.x.forEach((handler) => handler(x));\n if (y !== null) this.fAcc.y.forEach((handler) => handler(y));\n if (z !== null) this.fAcc.z.forEach((handler) => handler(z));\n }\n }\n\n get hasGyrInput() {\n return this.fGyr.x.length + this.fGyr.y.length + this.fGyr.z.length > 0;\n }\n propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n // Get gyroscope values\n const { alpha, beta, gamma } = event;\n\n // Call the gyroscope handlers\n if (alpha !== null) this.fGyr.x.forEach((handler) => handler(alpha));\n if (beta !== null) this.fGyr.y.forEach((handler) => handler(beta));\n if (gamma !== null) this.fGyr.z.forEach((handler) => handler(gamma));\n }\n\n /** Build the accelerometer handler */\n private setupAccHandler(\n path: string,\n axis: Axis,\n curve: Curve,\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ) {\n const handler: UpdatableValueConverter = FaustSensors.buildHandler(\n curve,\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n switch (axis) {\n case Axis.x:\n this.fAcc.x.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n case Axis.y:\n this.fAcc.y.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n case Axis.z:\n this.fAcc.z.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n }\n }\n\n /** Build the gyroscope handler */\n private setupGyrHandler(\n path: string,\n axis: Axis,\n curve: Curve,\n amin: number,\n amid: number,\n amax: number,\n min: number,\n init: number,\n max: number\n ) {\n const handler: UpdatableValueConverter = FaustSensors.buildHandler(\n curve,\n amin,\n amid,\n amax,\n min,\n init,\n max\n );\n switch (axis) {\n case Axis.x:\n this.fGyr.x.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n case Axis.y:\n this.fGyr.y.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n case Axis.z:\n this.fGyr.z.push((val) =>\n this.setParamValue(path, handler.uiToFaust(val))\n );\n break;\n }\n }\n\n static extractUrlsFromMeta(dspMeta: FaustDspMeta): string[] {\n // Find the entry with the \"soundfiles\" key\n const soundfilesEntry = dspMeta.meta.find(\n (entry) => entry.soundfiles !== undefined\n );\n // If the entry is found, split the string by semicolon to get the URLs\n if (soundfilesEntry) {\n return soundfilesEntry.soundfiles\n .split(';')\n .filter((url) => url !== '');\n } else {\n return [];\n }\n }\n\n /**\n * Load a soundfile possibly containing several parts in the DSP struct.\n * Soundfile pointers are located at 'index' offset, to be read in the JSON file.\n * The DSP struct is located at baseDSP in the wasm memory,\n * either a monophonic DSP, or a voice in a polyphonic context.\n *\n * @param allocator : the wasm memory allocator\n * @param baseDSP : the base DSP in the wasm memory\n * @param name : the name of the soundfile\n * @param url : the url of the soundfile\n */\n private loadSoundfile(\n allocator: WasmAllocator,\n baseDSP: number,\n name: string,\n url: string\n ) {\n console.log(`Soundfile ${name} paths: ${url}`);\n const soundfileIds = FaustBaseWebAudioDsp.splitSoundfileNames(url);\n const item = this.fSoundfiles.find((item) => item.url === url);\n if (!item) throw new Error(`Soundfile with ${url} cannot be found !}`);\n // Use the cached Soundfile\n if (item.basePtr !== -1) {\n // Update HEAP32 after soundfile creation\n const HEAP32 = allocator.getInt32Array();\n // Fill the soundfile structure in wasm memory, soundfiles are at the beginning of the DSP memory\n console.log(\n `Soundfile CACHE ${url}} : ${name} loaded at ${item.basePtr} in wasm memory with index ${item.index}`\n );\n // Soundfile is located at 'index' in the DSP struct, to be added with baseDSP in the wasm memory\n HEAP32[(baseDSP + item.index) >> 2] = item.basePtr;\n } else {\n // Create the soundfiles\n const soundfile = this.createSoundfile(\n allocator,\n soundfileIds,\n this.fSoundfileBuffers\n );\n if (soundfile) {\n // Update HEAP32 after soundfile creation\n const HEAP32 = soundfile.getHEAP32();\n // Get the soundfile pointer in wasm memory\n item.basePtr = soundfile.getPtr();\n console.log(\n `Soundfile ${name} loaded at ${item.basePtr} in wasm memory with index ${item.index}`\n );\n // Soundfile is located at 'index' in the DSP struct, to be added with baseDSP in the wasm memory\n HEAP32[(baseDSP + item.index) >> 2] = item.basePtr;\n } else {\n console.log(\n `Soundfile ${name} for ${url} cannot be created !}`\n );\n }\n }\n }\n\n createSoundfile(\n allocator: WasmAllocator,\n soundfileIdList: string[],\n soundfiles: LooseFaustDspFactory['soundfiles'],\n maxChan = Soundfile.MAX_CHAN\n ) {\n let curChan = 1; // At least one channel\n let totalLength = 0;\n\n // Compute total length and channels max of all files\n for (const soundfileId of soundfileIdList) {\n let chan = 0;\n let len = 0;\n const audioData = soundfiles?.[soundfileId];\n if (audioData) {\n chan = audioData.audioBuffer.length;\n len = audioData.audioBuffer[0].length;\n } else {\n len = Soundfile.BUFFER_SIZE;\n chan = 1;\n }\n curChan = Math.max(curChan, chan);\n totalLength += len;\n }\n\n // Complete with empty parts\n totalLength +=\n (Soundfile.MAX_SOUNDFILE_PARTS - soundfileIdList.length) *\n Soundfile.BUFFER_SIZE;\n\n // Create the soundfile\n const soundfile = new Soundfile(\n allocator,\n this.fSampleSize,\n curChan,\n totalLength,\n maxChan,\n soundfileIdList.length\n );\n\n //soundfile.displayMemory(\"After soundfile creation\");\n // Init offset\n let offset = 0;\n\n // Read all files\n for (let part = 0; part < soundfileIdList.length; part++) {\n const soundfileId = soundfileIdList[part];\n const audioData = soundfiles?.[soundfileId];\n if (audioData) {\n //soundfile.displayMemory(\"BEFORE copyToOut\");\n soundfile.copyToOut(part, maxChan, offset, audioData);\n //soundfile.displayMemory(\"AFTER copyToOut\");\n offset += audioData.audioBuffer[0].length;\n } else {\n // Empty sound\n offset = soundfile.emptyFile(part, offset);\n }\n }\n\n //soundfile.displayMemory(\"After reading soundfiles\");\n\n // Complete with empty parts\n for (\n let part = soundfileIdList.length;\n part < Soundfile.MAX_SOUNDFILE_PARTS;\n part++\n ) {\n offset = soundfile.emptyFile(part, offset);\n }\n\n //soundfile.displayMemory(\"After emptyFile\");\n\n // Share the same buffers for all other channels so that we have maxChan channels available\n soundfile.shareBuffers(curChan, maxChan);\n\n //soundfile.displayMemory(\"After shareBuffers\");\n\n return soundfile;\n }\n /**\n * Init soundfiles memory.\n *\n * @param allocator : the wasm memory allocator\n * @param baseDSP : the DSP struct (either a monophonic DSP of polyphonic voice) base DSP in the wasm memory\n */\n protected initSoundfileMemory(allocator: WasmAllocator, baseDSP: number) {\n // Create and fill the soundfile structure\n for (const { name, url } of this.fSoundfiles) {\n this.loadSoundfile(allocator, baseDSP, name, url);\n }\n }\n\n protected updateOutputs() {\n if (\n this.fOutputsItems.length > 0 &&\n this.fOutputHandler &&\n this.fOutputsTimer-- === 0\n ) {\n this.fOutputsTimer = 5;\n this.fOutputsItems.forEach((item) =>\n this.fOutputHandler?.(item, this.getParamValue(item))\n );\n }\n }\n\n // Public API\n metadata(handler: MetadataHandler) {\n if (this.fJSONDsp.meta) {\n this.fJSONDsp.meta.forEach((meta) =>\n handler(Object.keys(meta)[0], meta[Object.keys(meta)[0]])\n );\n }\n }\n\n compute(input: Float32Array[], output: Float32Array[]) {\n return false;\n }\n\n setOutputParamHandler(handler: OutputParamHandler | null) {\n this.fOutputHandler = handler;\n }\n getOutputParamHandler() {\n return this.fOutputHandler;\n }\n callOutputParamHandler(path: string, value: number) {\n if (this.fOutputHandler) {\n this.fOutputHandler(path, value);\n }\n }\n\n setInputParamHandler(handler: InputParamHandler | null) {\n this.fInputHandler = handler;\n }\n getInputParamHandler() {\n return this.fInputHandler;\n }\n callInputParamHandler(path: string, value: number) {\n if (this.fInputHandler) {\n this.fInputHandler(path, value);\n }\n }\n\n setComputeHandler(handler: ComputeHandler | null) {\n this.fComputeHandler = handler;\n }\n getComputeHandler() {\n return this.fComputeHandler;\n }\n\n setPlotHandler(handler: PlotHandler | null) {\n this.fPlotHandler = handler;\n }\n getPlotHandler() {\n return this.fPlotHandler;\n }\n\n getNumInputs() {\n return -1;\n }\n getNumOutputs() {\n return -1;\n }\n\n midiMessage(data: number[] | Uint8Array) {\n if (this.fPlotHandler) this.fCachedEvents.push({ data, type: 'midi' });\n const cmd = data[0] >> 4;\n const channel = data[0] & 0xf;\n const data1 = data[1];\n const data2 = data[2];\n if (cmd === 11) return this.ctrlChange(channel, data1, data2);\n if (cmd === 14) return this.pitchWheel(channel, data2 * 128.0 + data1);\n if (cmd === 9) {\n if (data2 > 0) return this.keyOn(channel, data1, data2);\n else return this.keyOff(channel, data1, data2);\n }\n if (cmd === 8) {\n return this.keyOff(channel, data1, data2);\n }\n }\n\n ctrlChange(channel: number, ctrl: number, value: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'ctrlChange',\n data: [channel, ctrl, value]\n });\n if (this.fCtrlLabel[ctrl].length) {\n this.fCtrlLabel[ctrl].forEach((ctrl) => {\n const { path, chan } = ctrl;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(\n path,\n FaustBaseWebAudioDsp.remap(\n value,\n 0,\n 127,\n ctrl.min,\n ctrl.max\n )\n );\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n }\n }\n\n keyOn(channel: number, pitch: number, velocity: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'keyOn',\n data: [channel, pitch, velocity]\n });\n this.fMidiKeyOnLabel[pitch].forEach((key) => {\n const { path, chan } = key;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(\n path,\n FaustBaseWebAudioDsp.remap(\n velocity,\n 0,\n 127,\n key.min,\n key.max\n )\n );\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n this.fMidiKeyLabel[pitch].forEach((key) => {\n const { path, chan } = key;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(\n path,\n FaustBaseWebAudioDsp.remap(\n velocity,\n 0,\n 127,\n key.min,\n key.max\n )\n );\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n }\n\n keyOff(channel: number, pitch: number, velocity: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'keyOff',\n data: [channel, pitch, velocity]\n });\n this.fMidiKeyOffLabel[pitch].forEach((key) => {\n const { path, chan } = key;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(\n path,\n FaustBaseWebAudioDsp.remap(\n velocity,\n 0,\n 127,\n key.min,\n key.max\n )\n );\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n this.fMidiKeyLabel[pitch].forEach((key) => {\n const { path, chan } = key;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(path, 0);\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n }\n\n pitchWheel(channel: number, wheel: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'pitchWheel',\n data: [channel, wheel]\n });\n this.fPitchwheelLabel.forEach((pw) => {\n const { path, chan } = pw;\n if (chan === 0 || channel === chan - 1) {\n this.setParamValue(\n path,\n FaustBaseWebAudioDsp.remap(wheel, 0, 16383, pw.min, pw.max)\n );\n // Typically used to reflect parameter change on GUI\n if (this.fOutputHandler)\n this.fOutputHandler(path, this.getParamValue(path));\n }\n });\n }\n\n setParamValue(path: string, value: number) {}\n getParamValue(path: string) {\n return 0;\n }\n\n getParams() {\n return this.fInputsItems;\n }\n getMeta() {\n return this.fJSONDsp;\n }\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n getUI() {\n return this.fJSONDsp.ui;\n }\n getDescriptors() {\n return this.fDescriptor;\n }\n\n hasSoundfiles() {\n return this.fSoundfiles.length > 0;\n }\n\n startSensors(): void {\n this.startSensors();\n }\n\n stopSensors(): void {\n this.stopSensors();\n }\n\n init() {}\n\n instanceInit() {}\n\n instanceClear() {}\n\n instanceConstants() {}\n\n instanceResetUserInterface() {}\n\n start() {\n this.fProcessing = true;\n }\n\n stop() {\n this.fProcessing = false;\n }\n\n destroy() {\n this.fDestroyed = true;\n this.fOutputHandler = null;\n this.fInputHandler = null;\n this.fComputeHandler = null;\n this.fPlotHandler = null;\n }\n}\n\nexport class FaustMonoWebAudioDsp\n extends FaustBaseWebAudioDsp\n implements IFaustMonoWebAudioDsp\n{\n private fInstance: FaustMonoDspInstance;\n private fDSP!: number;\n private fSampleRate: number;\n\n /**\n * Render one slice, for `renderBlock`.\n *\n * A field rather than an inline closure so it is allocated once instead of\n * on every `compute` call.\n */\n private fRenderSlice = (offset: number, count: number) => {\n this.setBufferOffset(offset);\n this.fInstance.api.compute(\n this.fDSP,\n count,\n this.fAudioInputs,\n this.fAudioOutputs\n );\n };\n\n constructor(\n instance: FaustMonoDspInstance,\n sampleRate: number,\n sampleSize: number,\n bufferSize: number,\n soundfiles: LooseFaustDspFactory['soundfiles']\n ) {\n super(sampleSize, bufferSize, soundfiles);\n this.fInstance = instance;\n this.fSampleRate = sampleRate;\n\n console.log(`sampleSize: ${sampleSize} bufferSize: ${bufferSize}`);\n\n // Create JSON object\n this.fJSONDsp = JSON.parse(this.fInstance.json);\n\n // Setup GUI\n FaustBaseWebAudioDsp.parseUI(this.fJSONDsp.ui, this.fUICallback);\n\n // Setup wasm memory\n this.fEndMemory = this.initMemory();\n\n // Init DSP\n this.fInstance.api.init(this.fDSP, sampleRate);\n\n // Init soundfiles memory is needed\n if (this.fSoundfiles.length > 0) {\n // Create memory allocator for soundfiles in wasm memory, starting at the end of DSP memory\n const allocator = new WasmAllocator(\n this.fInstance.memory,\n this.fEndMemory\n );\n\n // Init soundfiles memory\n this.initSoundfileMemory(allocator, this.fDSP);\n }\n }\n\n init() {\n this.fInstance.api.init(this.fDSP, this.fSampleRate);\n }\n\n instanceInit() {\n this.fInstance.api.instanceInit(this.fDSP, this.fSampleRate);\n }\n\n instanceClear() {\n this.fInstance.api.instanceClear(this.fDSP);\n }\n\n instanceConstants() {\n this.fInstance.api.instanceConstants(this.fDSP, this.fSampleRate);\n }\n\n instanceResetUserInterface() {\n this.fInstance.api.instanceResetUserInterface(this.fDSP);\n }\n\n private initMemory(): number {\n // Start of DSP memory: Mono DSP is placed first with index 0\n this.fDSP = 0;\n\n // Audio buffer start at the end of DSP\n const $audio = this.fJSONDsp.size;\n\n // Setup audio pointers offset\n this.fAudioInputs = $audio;\n this.fAudioOutputs =\n this.fAudioInputs + this.getNumInputs() * this.fPtrSize;\n\n // Prepare wasm memory layout\n const $audioInputs =\n this.fAudioOutputs + this.getNumOutputs() * this.fPtrSize;\n const $audioOutputs =\n $audioInputs +\n this.getNumInputs() * this.fBufferSize * this.fSampleSize;\n // Compute memory end in bytes\n const endMemory =\n $audioOutputs +\n this.getNumOutputs() * this.fBufferSize * this.fSampleSize;\n\n // Setup Int32 and Real views of the memory\n const HEAP = this.fInstance.memory.buffer;\n const HEAP32 = new Int32Array(HEAP);\n const HEAPF =\n this.fSampleSize === 4\n ? new Float32Array(HEAP)\n : new Float64Array(HEAP);\n\n if (this.getNumInputs() > 0) {\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n HEAP32[(this.fAudioInputs >> 2) + chan] =\n $audioInputs + this.fBufferSize * this.fSampleSize * chan;\n }\n // Prepare Ins buffer tables\n const dspInChans = HEAP32.subarray(\n this.fAudioInputs >> 2,\n (this.fAudioInputs + this.getNumInputs() * this.fPtrSize) >> 2\n );\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n this.fInChannels[chan] = HEAPF.subarray(\n dspInChans[chan] >> Math.log2(this.fSampleSize),\n (dspInChans[chan] + this.fBufferSize * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n }\n }\n if (this.getNumOutputs() > 0) {\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n HEAP32[(this.fAudioOutputs >> 2) + chan] =\n $audioOutputs + this.fBufferSize * this.fSampleSize * chan;\n }\n // Prepare Out buffer tables\n const dspOutChans = HEAP32.subarray(\n this.fAudioOutputs >> 2,\n (this.fAudioOutputs + this.getNumOutputs() * this.fPtrSize) >> 2\n );\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n this.fOutChannels[chan] = HEAPF.subarray(\n dspOutChans[chan] >> Math.log2(this.fSampleSize),\n (dspOutChans[chan] + this.fBufferSize * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n }\n }\n\n // Record where each channel starts: `setBufferOffset` overwrites the\n // tables between slices, so they stop being a record of that.\n this.fHEAP32 = HEAP32;\n this.fInBase = [];\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n this.fInBase[chan] = HEAP32[(this.fAudioInputs >> 2) + chan];\n }\n this.fOutBase = [];\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n this.fOutBase[chan] = HEAP32[(this.fAudioOutputs >> 2) + chan];\n }\n\n return endMemory;\n }\n\n toString() {\n return `============== Mono Memory layout ==============\n this.fBufferSize: ${this.fBufferSize}\n this.fJSONDsp.size: ${this.fJSONDsp.size}\n this.fAudioInputs: ${this.fAudioInputs}\n this.fAudioOutputs: ${this.fAudioOutputs}\n this.fDSP: ${this.fDSP}`;\n }\n\n // Public API\n compute(\n input:\n | Float32Array[]\n | ((input: Float32Array[] | Float64Array[]) => any),\n output:\n | Float32Array[]\n | ((output: Float32Array[] | Float64Array[]) => any),\n events?: FaustTimedEvent[]\n ) {\n // Check DSP state\n if (this.fDestroyed) return false;\n\n // Check Processing state: the node returns 'true' to stay in the graph, even if not processing\n if (!this.fProcessing) {\n this.applyEvents(events);\n return true;\n }\n\n // Init memory again on first call (since WebAssembly.memory.grow() may have been called)\n if (this.fFirstCall) {\n this.initMemory();\n this.fFirstCall = false;\n }\n\n if (typeof input === 'function') {\n // Call input callback to avoid array copy\n input(this.fInChannels);\n } else {\n // Check inputs\n if (\n this.getNumInputs() > 0 &&\n (!input || !input[0] || input[0].length === 0)\n ) {\n // console.log(\"Process input error\");\n this.applyEvents(events);\n return true;\n }\n\n // Check outputs\n if (\n this.getNumOutputs() > 0 &&\n typeof output !== 'function' &&\n (!output || !output[0] || output[0].length === 0)\n ) {\n // console.log(\"Process output error\");\n this.applyEvents(events);\n return true;\n }\n\n // Copy inputs\n if (input !== undefined) {\n for (\n let chan = 0;\n chan < Math.min(this.getNumInputs(), input.length);\n chan++\n ) {\n const dspInput = this.fInChannels[chan];\n dspInput.set(input[chan]);\n }\n }\n }\n // Possibly call an externally given callback (for instance to synchronize playing a MIDIFile...)\n if (this.fComputeHandler) this.fComputeHandler(this.fBufferSize);\n\n // Compute -- in slices around the events, if there are any\n this.renderBlock(events, this.fRenderSlice);\n\n // Update bargraph\n this.updateOutputs();\n\n let forPlot = this.fOutChannels;\n if (typeof output === 'function') {\n // Call output callback to avoid array copy\n output(this.fOutChannels);\n } else {\n // Copy outputs\n for (\n let chan = 0;\n chan < Math.min(this.getNumOutputs(), output.length);\n chan++\n ) {\n const dspOutput = this.fOutChannels[chan];\n output[chan].set(dspOutput);\n // console.log(\"chan: \" + chan + \" output: \" + dspOutput[0]);\n }\n forPlot = output;\n }\n\n // PlotHandler handling\n if (this.fPlotHandler) {\n this.fPlotHandler(\n forPlot,\n this.fBufferNum++,\n this.fCachedEvents.length ? this.fCachedEvents : undefined\n );\n this.fCachedEvents = [];\n }\n\n return true;\n }\n\n metadata(handler: MetadataHandler) {\n super.metadata(handler);\n }\n\n getNumInputs() {\n return this.fInstance.api.getNumInputs(this.fDSP);\n }\n getNumOutputs() {\n return this.fInstance.api.getNumOutputs(this.fDSP);\n }\n\n setParamValue(path: string, value: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({ type: 'param', data: { path, value } });\n this.fInstance.api.setParamValue(\n this.fDSP,\n this.fPathTable[path],\n value\n );\n this.callInputParamHandler(path, this.getParamValue(path));\n }\n getParamValue(path: string) {\n return this.fInstance.api.getParamValue(\n this.fDSP,\n this.fPathTable[path]\n );\n }\n\n getMeta() {\n return this.fJSONDsp;\n }\n getJSON() {\n return this.fInstance.json;\n }\n getDescriptors() {\n return this.fDescriptor;\n }\n getUI() {\n return this.fJSONDsp.ui;\n }\n}\n\nexport class FaustWebAudioDspVoice {\n // Voice state\n static get kActiveVoice() {\n return 0;\n }\n static get kFreeVoice() {\n return -1;\n }\n static get kReleaseVoice() {\n return -2;\n }\n static get kLegatoVoice() {\n return -3;\n }\n static get kNoVoice() {\n return -4;\n }\n static get VOICE_STOP_LEVEL() {\n return 0.00003162;\n } // -90 db\n\n private fFreqLabel: number[] = [];\n private fGateLabel: number[] = [];\n private fGainLabel: number[] = [];\n private fKeyLabel: number[] = [];\n private fVelLabel: number[] = [];\n private fDSP: number; // Voice DSP location in wasm memory\n private fAPI: IFaustDspInstance; // Voice DSP code\n private fSampleRate: number;\n // Accessed by PolyDSPImp class\n fCurNote = FaustWebAudioDspVoice.kFreeVoice;\n fNextNote = -1;\n fNextVel = -1;\n fDate = 0;\n fLevel = 0;\n\n constructor(\n $dsp: number,\n api: IFaustDspInstance,\n inputItems: string[],\n pathTable: { [address: string]: number },\n sampleRate: number\n ) {\n this.fDSP = $dsp;\n this.fAPI = api;\n this.fSampleRate = sampleRate;\n this.init(sampleRate);\n this.extractPaths(inputItems, pathTable);\n }\n\n static midiToFreq(note: number) {\n return 440.0 * 2 ** ((note - 69) / 12);\n }\n\n static normalizeVelocity(velocity: number) {\n return velocity / 127.0;\n }\n\n init(sampleRate: number) {\n this.fAPI.init(this.fDSP, sampleRate);\n }\n\n instanceInit() {\n this.fAPI.instanceInit(this.fDSP, this.fSampleRate);\n }\n\n instanceClear() {\n this.fAPI.instanceClear(this.fDSP);\n }\n\n instanceConstants() {\n this.fAPI.instanceConstants(this.fDSP, this.fSampleRate);\n }\n\n instanceResetUserInterface() {\n this.fAPI.instanceResetUserInterface(this.fDSP);\n }\n\n private extractPaths(\n inputItems: string[],\n pathTable: { [address: string]: number }\n ) {\n inputItems.forEach((item) => {\n if (item.endsWith('/gate')) {\n this.fGateLabel.push(pathTable[item]);\n } else if (item.endsWith('/freq')) {\n this.fFreqLabel.push(pathTable[item]);\n } else if (item.endsWith('/key')) {\n this.fKeyLabel.push(pathTable[item]);\n } else if (item.endsWith('/gain')) {\n this.fGainLabel.push(pathTable[item]);\n } else if (item.endsWith('/vel') && item.endsWith('/velocity')) {\n this.fVelLabel.push(pathTable[item]);\n }\n });\n }\n\n // Public API\n keyOn(pitch: number, velocity: number, legato: boolean = false) {\n if (legato) {\n this.fNextNote = pitch;\n this.fNextVel = velocity;\n } else {\n this.fFreqLabel.forEach((index) =>\n this.fAPI.setParamValue(\n this.fDSP,\n index,\n FaustWebAudioDspVoice.midiToFreq(pitch)\n )\n );\n this.fGateLabel.forEach((index) =>\n this.fAPI.setParamValue(this.fDSP, index, 1)\n );\n this.fGainLabel.forEach((index) =>\n this.fAPI.setParamValue(\n this.fDSP,\n index,\n FaustWebAudioDspVoice.normalizeVelocity(velocity)\n )\n );\n this.fKeyLabel.forEach((index) =>\n this.fAPI.setParamValue(this.fDSP, index, pitch)\n );\n this.fVelLabel.forEach((index) =>\n this.fAPI.setParamValue(this.fDSP, index, velocity)\n );\n // Keep pitch\n this.fCurNote = pitch;\n }\n }\n\n keyOff(hard: boolean = false) {\n this.fGateLabel.forEach((index) =>\n this.fAPI.setParamValue(this.fDSP, index, 0)\n );\n if (hard) {\n this.fCurNote = FaustWebAudioDspVoice.kFreeVoice;\n } else {\n this.fCurNote = FaustWebAudioDspVoice.kReleaseVoice;\n }\n }\n\n computeLegato(\n bufferSize: number,\n $inputs: number,\n $outputZero: number,\n $outputsHalf: number\n ) {\n // `>> 1` rather than `/ 2` because `bufferSize` need not be even, and\n // wasm counts whole frames. The second half takes the remainder.\n const size = bufferSize >> 1;\n\n // Reset envelops\n this.fGateLabel.forEach((index) =>\n this.fAPI.setParamValue(this.fDSP, index, 0)\n );\n\n // Compute current voice on half buffer\n this.fAPI.compute(this.fDSP, size, $inputs, $outputZero);\n\n // Start next keyOn\n this.keyOn(this.fNextNote, this.fNextVel);\n\n // Compute on second half buffer\n this.fAPI.compute(this.fDSP, bufferSize - size, $inputs, $outputsHalf);\n }\n\n compute(bufferSize: number, $inputs: number, $outputs: number) {\n this.fAPI.compute(this.fDSP, bufferSize, $inputs, $outputs);\n }\n\n setParamValue(index: number, value: number) {\n this.fAPI.setParamValue(this.fDSP, index, value);\n }\n getParamValue(index: number) {\n return this.fAPI.getParamValue(this.fDSP, index);\n }\n}\n\nexport class FaustPolyWebAudioDsp\n extends FaustBaseWebAudioDsp\n implements IFaustPolyWebAudioDsp\n{\n private fInstance: FaustPolyDspInstance;\n private fEffect!: number;\n private fJSONEffect: FaustDspMeta | null;\n private fAudioMixing!: number;\n private fAudioMixingHalf!: number;\n private fMixingBase: number[] = [];\n /** Float view of the memory, kept from `initMemory` like `fHEAP32`. */\n private fHEAPF!: Float32Array | Float64Array;\n private fVoiceTable: FaustWebAudioDspVoice[];\n private fSampleRate: number;\n\n /** Voices whose crossfade this block already rendered in full. */\n private fStolen: FaustWebAudioDspVoice[] = [];\n\n /**\n * Render one slice: every live voice into the sum, then the effect.\n *\n * The mixer, the voices and the effect all take a frame count, so a slice\n * is the same work over fewer frames. A field rather than an inline\n * closure so it is allocated once instead of on every `compute` call.\n *\n * Two things `compute` does around this. The sum is cleared once for the\n * block, not per slice, because `renderStolenVoices` has already written\n * across the whole of it. And those stolen voices are skipped here.\n *\n * A voice that becomes `kLegatoVoice` partway through the block is not one\n * of them: it plays out the note it is losing and crossfades at the top of\n * the next block, as it did when a `keyOn` could only arrive between\n * blocks.\n */\n private fRenderSlice = (offset: number, count: number) => {\n this.setBufferOffset(offset);\n this.setMixingOffset(offset, count);\n this.fVoiceTable.forEach((voice) => {\n if (voice.fCurNote === FaustWebAudioDspVoice.kFreeVoice) return;\n if (this.fStolen.length && this.fStolen.indexOf(voice) !== -1)\n return;\n // Compute current note\n voice.compute(count, this.fAudioInputs, this.fAudioMixing);\n // Mix it in result\n const level = this.fInstance.mixerAPI.mixCheckVoice(\n count,\n this.getNumOutputs(),\n this.fAudioMixing,\n this.fAudioOutputs\n );\n // Keep the loudest level from any slice. A few frames landing on\n // a zero crossing read near silence from a voice that is still\n // sounding, so `compute` decides whether a release has finished\n // once the whole block is done.\n if (level > voice.fLevel) voice.fLevel = level;\n });\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.compute(\n this.fEffect,\n count,\n this.fAudioOutputs,\n this.fAudioOutputs\n );\n };\n\n /**\n * Render the stolen voices, each across the whole block.\n *\n * A steal is a hand-over: the voice plays the note it is losing over the\n * first half of the buffer, that half fades out, and the new note plays\n * the second half, faded in. Both fades are needed. `fadeOut` scales the\n * buffer, not the voice: after `keyOn` the DSP carries on from its live\n * state -- an envelope that never reached silence is still up -- so\n * without the fade-in the second half started at full level, a step on\n * every stolen note. On a monophonic patch whose voice never falls\n * silent that is a click on every note after the first (measured on a\n * long-release bass: 0, 0, 0, 0.1485, 0.2618 across the split).\n *\n * The fades have to be half a block -- 64 frames -- rather than half a\n * slice, which late in the block would be a frame or two, or nothing at\n * all. So this runs before the slicing, and `fRenderSlice` skips these\n * voices.\n */\n private renderStolenVoices() {\n const stolen = this.fStolen;\n stolen.length = 0;\n this.fVoiceTable.forEach((voice) => {\n if (voice.fCurNote !== FaustWebAudioDspVoice.kLegatoVoice) return;\n stolen.push(voice);\n // Play from current note and next note\n voice.computeLegato(\n this.fBufferSize,\n this.fAudioInputs,\n this.fAudioMixing,\n this.fAudioMixingHalf\n );\n // FadeOut on first half buffer\n this.fInstance.mixerAPI.fadeOut(\n this.fBufferSize >> 1,\n this.getNumOutputs(),\n this.fAudioMixing\n );\n // FadeIn on second half buffer, the mirror of fadeOut: 1/count\n // up to 1. `computeLegato` gives an odd count's extra frame to\n // the second half, so it is measured from the split, not halved.\n this.fadeIn(\n this.fBufferSize - (this.fBufferSize >> 1),\n this.getNumOutputs(),\n this.fAudioMixingHalf\n );\n // Mix it in result\n voice.fLevel = this.fInstance.mixerAPI.mixCheckVoice(\n this.fBufferSize,\n this.getNumOutputs(),\n this.fAudioMixing,\n this.fAudioOutputs\n );\n });\n }\n\n /**\n * Scale `count` frames of each channel at `$tables` from 1/count up to 1.\n *\n * The mixer has `fadeOut` in wasm; this is its counterpart on the JS\n * side, over the channel-pointer table the same way the mixer reads it.\n */\n private fadeIn(count: number, chans: number, $tables: number) {\n const shift = Math.log2(this.fSampleSize);\n const HEAPF = this.fHEAPF;\n for (let chan = 0; chan < chans; chan++) {\n const start = this.fHEAP32[($tables >> 2) + chan] >> shift;\n for (let i = 0; i < count; i++) {\n HEAPF[start + i] *= (i + 1) / count;\n }\n }\n }\n\n /**\n * Move the mixing tables along with the input and output ones.\n *\n * `fAudioMixing` is where a voice renders before being summed into the\n * output, so it follows the slice. `fAudioMixingHalf` is the crossfade\n * split point, `count >> 1` frames in, matching `computeLegato`. Only\n * `renderStolenVoices` uses it, and always with the whole block.\n */\n private setMixingOffset(offset: number, count: number) {\n const bytes = offset * this.fSampleSize;\n const half = (offset + (count >> 1)) * this.fSampleSize;\n for (let chan = 0; chan < this.fMixingBase.length; chan++) {\n this.fHEAP32[(this.fAudioMixing >> 2) + chan] =\n this.fMixingBase[chan] + bytes;\n this.fHEAP32[(this.fAudioMixingHalf >> 2) + chan] =\n this.fMixingBase[chan] + half;\n }\n }\n\n constructor(\n instance: FaustPolyDspInstance,\n sampleRate: number,\n sampleSize: number,\n bufferSize: number,\n soundfiles: LooseFaustDspFactory['soundfiles']\n ) {\n super(sampleSize, bufferSize, soundfiles);\n this.fInstance = instance;\n this.fSampleRate = sampleRate;\n\n console.log(`sampleSize: ${sampleSize} bufferSize: ${bufferSize}`);\n\n // Create JSON for voice\n this.fJSONDsp = JSON.parse(this.fInstance.voiceJSON);\n\n // Create JSON for effect\n this.fJSONEffect =\n this.fInstance.effectAPI && this.fInstance.effectJSON\n ? JSON.parse(this.fInstance.effectJSON)\n : null;\n\n // Setup GUI\n FaustBaseWebAudioDsp.parseUI(this.fJSONDsp.ui, this.fUICallback);\n if (this.fJSONEffect)\n FaustBaseWebAudioDsp.parseUI(this.fJSONEffect.ui, this.fUICallback);\n\n // Setup wasm memory\n this.fEndMemory = this.initMemory();\n\n // Init DSP voices\n this.fVoiceTable = [];\n for (let voice = 0; voice < this.fInstance.voices; voice++) {\n this.fVoiceTable.push(\n new FaustWebAudioDspVoice(\n this.fJSONDsp.size * voice,\n this.fInstance.voiceAPI,\n this.fInputsItems,\n this.fPathTable,\n sampleRate\n )\n );\n }\n\n // Init effect\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.init(this.fEffect, sampleRate);\n\n // Init soundfiles memory is needed\n if (this.fSoundfiles.length > 0) {\n // Create memory allocator for soundfiles in wasm memory, starting at the end of DSP memory\n const allocator = new WasmAllocator(\n this.fInstance.memory,\n this.fEndMemory\n );\n // Init soundfiles memory for all voices\n for (let voice = 0; voice < this.fInstance.voices; voice++) {\n this.initSoundfileMemory(allocator, this.fJSONDsp.size * voice);\n }\n }\n }\n\n init() {\n this.fVoiceTable.forEach((voice) => voice.init(this.fSampleRate));\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.init(this.fEffect, this.fSampleRate);\n }\n\n instanceInit() {\n this.fVoiceTable.forEach((voice) => voice.instanceInit());\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.instanceInit(\n this.fEffect,\n this.fSampleRate\n );\n }\n\n instanceClear() {\n this.fVoiceTable.forEach((voice) => voice.instanceClear());\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.instanceClear(this.fEffect);\n }\n\n instanceConstants() {\n this.fVoiceTable.forEach((voice) => voice.instanceConstants());\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.instanceConstants(\n this.fEffect,\n this.fSampleRate\n );\n }\n\n instanceResetUserInterface() {\n this.fVoiceTable.forEach((voice) => voice.instanceResetUserInterface());\n if (this.fInstance.effectAPI)\n this.fInstance.effectAPI.instanceResetUserInterface(this.fEffect);\n }\n\n private initMemory() {\n // Effet start at the end of all DSP voices\n this.fEffect = this.fJSONDsp.size * this.fInstance.voices;\n\n // Audio buffer start at the end of effect\n const $audio =\n this.fEffect + (this.fJSONEffect ? this.fJSONEffect.size : 0);\n\n // Setup audio pointers offset\n this.fAudioInputs = $audio;\n this.fAudioOutputs =\n this.fAudioInputs + this.getNumInputs() * this.fPtrSize;\n this.fAudioMixing =\n this.fAudioOutputs + this.getNumOutputs() * this.fPtrSize;\n this.fAudioMixingHalf =\n this.fAudioMixing + this.getNumOutputs() * this.fPtrSize;\n\n // Prepare wasm memory layout\n const $audioInputs =\n this.fAudioMixingHalf + this.getNumOutputs() * this.fPtrSize;\n const $audioOutputs =\n $audioInputs +\n this.getNumInputs() * this.fBufferSize * this.fSampleSize;\n const $audioMixing =\n $audioOutputs +\n this.getNumOutputs() * this.fBufferSize * this.fSampleSize;\n\n // Compute memory end in bytes\n const endMemory =\n $audioMixing +\n this.getNumOutputs() * this.fBufferSize * this.fSampleSize;\n\n // Setup Int32 and Real views of the memory\n const HEAP = this.fInstance.memory.buffer;\n const HEAP32 = new Int32Array(HEAP);\n const HEAPF =\n this.fSampleSize === 4\n ? new Float32Array(HEAP)\n : new Float64Array(HEAP);\n\n if (this.getNumInputs() > 0) {\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n HEAP32[(this.fAudioInputs >> 2) + chan] =\n $audioInputs + this.fBufferSize * this.fSampleSize * chan;\n }\n // Prepare Ins buffer tables\n const dspInChans = HEAP32.subarray(\n this.fAudioInputs >> 2,\n (this.fAudioInputs + this.getNumInputs() * this.fPtrSize) >> 2\n );\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n this.fInChannels[chan] = HEAPF.subarray(\n dspInChans[chan] >> Math.log2(this.fSampleSize),\n (dspInChans[chan] + this.fBufferSize * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n }\n }\n if (this.getNumOutputs() > 0) {\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n HEAP32[(this.fAudioOutputs >> 2) + chan] =\n $audioOutputs + this.fBufferSize * this.fSampleSize * chan;\n HEAP32[(this.fAudioMixing >> 2) + chan] =\n $audioMixing + this.fBufferSize * this.fSampleSize * chan;\n HEAP32[(this.fAudioMixingHalf >> 2) + chan] =\n $audioMixing +\n this.fBufferSize * this.fSampleSize * chan +\n (this.fBufferSize / 2) * this.fSampleSize;\n }\n // Prepare Out buffer tables\n const dspOutChans = HEAP32.subarray(\n this.fAudioOutputs >> 2,\n (this.fAudioOutputs + this.getNumOutputs() * this.fPtrSize) >> 2\n );\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n this.fOutChannels[chan] = HEAPF.subarray(\n dspOutChans[chan] >> Math.log2(this.fSampleSize),\n (dspOutChans[chan] + this.fBufferSize * this.fSampleSize) >>\n Math.log2(this.fSampleSize)\n );\n }\n }\n\n // Record where each channel starts: `setBufferOffset` overwrites the\n // tables between slices, so they stop being a record of that.\n this.fHEAP32 = HEAP32;\n this.fInBase = [];\n for (let chan = 0; chan < this.getNumInputs(); chan++) {\n this.fInBase[chan] = HEAP32[(this.fAudioInputs >> 2) + chan];\n }\n this.fHEAPF = HEAPF;\n this.fOutBase = [];\n this.fMixingBase = [];\n for (let chan = 0; chan < this.getNumOutputs(); chan++) {\n this.fOutBase[chan] = HEAP32[(this.fAudioOutputs >> 2) + chan];\n this.fMixingBase[chan] = HEAP32[(this.fAudioMixing >> 2) + chan];\n }\n\n return endMemory;\n }\n\n toString() {\n return `============== Poly Memory layout ==============\n this.fBufferSize: ${this.fBufferSize}\n this.fJSONDsp.size: ${this.fJSONDsp.size}\n this.fAudioInputs: ${this.fAudioInputs}\n this.fAudioOutputs: ${this.fAudioOutputs}\n this.fAudioMixing: ${this.fAudioMixing}\n this.fAudioMixingHalf: ${this.fAudioMixingHalf}`;\n }\n\n /**\n * When each voice was last allocated, as one global monotonic date.\n *\n * Incrementing the voice's own `fDate` instead, as this used to, made the\n * date a per-slot reuse counter: notes played and released before a chord\n * kept reusing slot 0 and inflating only its date, and when the chord\n * then overflowed the pool, the allocator considered a younger note\n * \"oldest\" and stole the wrong voice.\n */\n private fDate = 0;\n\n private allocVoice(voice: number, type: number) {\n this.fVoiceTable[voice].fDate = this.fDate++;\n this.fVoiceTable[voice].fCurNote = type;\n return voice;\n }\n\n private getPlayingVoice(pitch: number) {\n let voicePlaying = FaustWebAudioDspVoice.kNoVoice;\n let oldestDatePlaying = Number.MAX_VALUE;\n\n for (let i = 0; i < this.fInstance.voices; i++) {\n const curNote = this.fVoiceTable[i].fCurNote;\n const nextNote = this.fVoiceTable[i].fNextNote;\n\n if (\n curNote === pitch ||\n (curNote === FaustWebAudioDspVoice.kLegatoVoice &&\n nextNote === pitch)\n ) {\n // Keeps oldest playing voice\n if (this.fVoiceTable[i].fDate < oldestDatePlaying) {\n oldestDatePlaying = this.fVoiceTable[i].fDate;\n voicePlaying = i;\n }\n }\n }\n return voicePlaying;\n }\n\n private getFreeVoice() {\n for (let voice = 0; voice < this.fInstance.voices; voice++) {\n if (\n this.fVoiceTable[voice].fCurNote ===\n FaustWebAudioDspVoice.kFreeVoice\n ) {\n return this.allocVoice(\n voice,\n FaustWebAudioDspVoice.kActiveVoice\n );\n }\n }\n\n let voiceRelease = FaustWebAudioDspVoice.kNoVoice;\n let voicePlaying = FaustWebAudioDspVoice.kNoVoice;\n let oldestDateRelease = Number.MAX_VALUE;\n let oldestDatePlaying = Number.MAX_VALUE;\n\n for (let voice = 0; voice < this.fInstance.voices; voice++) {\n // Scan all voices\n // Try to steal a voice in DspVoice.kReleaseVoice mode...\n if (\n this.fVoiceTable[voice].fCurNote ===\n FaustWebAudioDspVoice.kReleaseVoice\n ) {\n // Keeps oldest release voice\n if (this.fVoiceTable[voice].fDate < oldestDateRelease) {\n oldestDateRelease = this.fVoiceTable[voice].fDate;\n voiceRelease = voice;\n }\n } else if (this.fVoiceTable[voice].fDate < oldestDatePlaying) {\n oldestDatePlaying = this.fVoiceTable[voice].fDate;\n voicePlaying = voice;\n }\n }\n // Then decide which one to steal\n if (oldestDateRelease !== Number.MAX_VALUE) {\n console.log(\n `Steal release voice : voice_date = ${this.fVoiceTable[voiceRelease].fDate} voice = ${voiceRelease}`\n );\n return this.allocVoice(\n voiceRelease,\n FaustWebAudioDspVoice.kLegatoVoice\n );\n }\n if (oldestDatePlaying !== Number.MAX_VALUE) {\n console.log(\n `Steal playing voice : voice_date = ${this.fVoiceTable[voicePlaying].fDate} voice = ${voicePlaying}`\n );\n return this.allocVoice(\n voicePlaying,\n FaustWebAudioDspVoice.kLegatoVoice\n );\n }\n return FaustWebAudioDspVoice.kNoVoice;\n }\n\n // Public API\n compute(\n input: Float32Array[],\n output: Float32Array[],\n events?: FaustTimedEvent[]\n ) {\n // Check DSP state\n if (this.fDestroyed) return false;\n\n // Init memory again on first call (since WebAssembly.memory.grow() may have been called)\n if (this.fFirstCall) {\n this.initMemory();\n this.fFirstCall = false;\n }\n\n // Check Processing state: the node returns 'true' to stay in the graph, even if not processing\n if (!this.fProcessing) {\n this.applyEvents(events);\n return true;\n }\n\n // Check inputs\n if (\n this.getNumInputs() > 0 &&\n (!input || !input[0] || input[0].length === 0)\n ) {\n // console.log(\"Process input error\");\n this.applyEvents(events);\n return true;\n }\n\n // Check outputs\n if (\n this.getNumOutputs() > 0 &&\n (!output || !output[0] || output[0].length === 0)\n ) {\n // console.log(\"Process output error\");\n this.applyEvents(events);\n return true;\n }\n\n // Copy inputs\n if (input !== undefined) {\n for (\n let chan = 0;\n chan < Math.min(this.getNumInputs(), input.length);\n ++chan\n ) {\n const dspInput = this.fInChannels[chan];\n dspInput.set(input[chan]);\n }\n }\n\n // Possibly call an externally given callback (for instance to synchronize playing a MIDIFile...)\n if (this.fComputeHandler) this.fComputeHandler(this.fBufferSize);\n\n // Clear the sum once for the block, not per slice: the stolen voices\n // below write across the whole of it, and a slice clearing its own\n // range afterwards would erase part of that.\n this.setBufferOffset(0);\n this.setMixingOffset(0, this.fBufferSize);\n this.fInstance.mixerAPI.clearOutput(\n this.fBufferSize,\n this.getNumOutputs(),\n this.fAudioOutputs\n );\n this.fVoiceTable.forEach((voice) => (voice.fLevel = 0));\n this.renderStolenVoices();\n\n // Compute -- in slices around the events, if there are any\n this.renderBlock(events, this.fRenderSlice);\n\n // A releasing voice that stayed below the threshold for every slice\n // has died away, and its slot is free again.\n this.fVoiceTable.forEach((voice) => {\n if (\n voice.fCurNote === FaustWebAudioDspVoice.kReleaseVoice &&\n voice.fLevel < FaustWebAudioDspVoice.VOICE_STOP_LEVEL\n ) {\n voice.fCurNote = FaustWebAudioDspVoice.kFreeVoice;\n }\n });\n\n // Update bargraph\n this.updateOutputs();\n\n if (output !== undefined) {\n // Copy outputs\n for (\n let chan = 0;\n chan < Math.min(this.getNumOutputs(), output.length);\n chan++\n ) {\n const dspOutput = this.fOutChannels[chan];\n output[chan].set(dspOutput);\n }\n\n // PlotHandler handling\n if (this.fPlotHandler) {\n this.fPlotHandler(\n output,\n this.fBufferNum++,\n this.fCachedEvents.length ? this.fCachedEvents : undefined\n );\n this.fCachedEvents = [];\n }\n }\n\n return true;\n }\n\n getNumInputs() {\n return this.fInstance.voiceAPI.getNumInputs(0);\n }\n getNumOutputs() {\n return this.fInstance.voiceAPI.getNumOutputs(0);\n }\n\n private static findPath(o: any, p: string) {\n if (typeof o !== 'object') {\n return false;\n } else if (o.address) {\n return o.address === p;\n } else {\n for (const k in o) {\n if (FaustPolyWebAudioDsp.findPath(o[k], p)) return true;\n }\n return false;\n }\n }\n\n setParamValue(path: string, value: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({ type: 'param', data: { path, value } });\n if (\n this.fJSONEffect &&\n FaustPolyWebAudioDsp.findPath(this.fJSONEffect.ui, path) &&\n this.fInstance.effectAPI\n ) {\n this.fInstance.effectAPI.setParamValue(\n this.fEffect,\n this.fPathTable[path],\n value\n );\n } else {\n this.fVoiceTable.forEach((voice) =>\n voice.setParamValue(this.fPathTable[path], value)\n );\n }\n this.callInputParamHandler(path, this.getParamValue(path));\n }\n getParamValue(path: string) {\n if (\n this.fJSONEffect &&\n FaustPolyWebAudioDsp.findPath(this.fJSONEffect.ui, path) &&\n this.fInstance.effectAPI\n ) {\n return this.fInstance.effectAPI.getParamValue(\n this.fEffect,\n this.fPathTable[path]\n );\n } else {\n return this.fVoiceTable[0].getParamValue(this.fPathTable[path]);\n }\n }\n\n getMeta() {\n const o = this.fJSONDsp;\n const e = this.fJSONEffect;\n const r = { ...o };\n if (e) {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Sequencer',\n items: [\n { type: 'vgroup', label: 'Instrument', items: o.ui },\n { type: 'vgroup', label: 'Effect', items: e.ui }\n ]\n }\n ];\n } else {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Polyphonic',\n items: [{ type: 'vgroup', label: 'Voices', items: o.ui }]\n }\n ];\n }\n return r as FaustDspMeta;\n }\n\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n\n getUI() {\n return this.getMeta().ui;\n }\n\n getDescriptors() {\n return this.fDescriptor;\n }\n\n midiMessage(data: number[] | Uint8Array) {\n const cmd = data[0] >> 4;\n const channel = data[0] & 0xf;\n const data1 = data[1];\n const data2 = data[2];\n if (cmd === 8 || (cmd === 9 && data2 === 0))\n return this.keyOff(channel, data1, data2);\n else if (cmd === 9) return this.keyOn(channel, data1, data2);\n else super.midiMessage(data);\n }\n\n ctrlChange(channel: number, ctrl: number, value: number) {\n if (ctrl === 123 || ctrl === 120) {\n this.allNotesOff(true);\n } else {\n super.ctrlChange(channel, ctrl, value);\n }\n }\n\n keyOn(channel: number, pitch: number, velocity: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'keyOn',\n data: [channel, pitch, velocity]\n });\n const voice = this.getFreeVoice();\n this.fVoiceTable[voice].keyOn(\n pitch,\n velocity,\n this.fVoiceTable[voice].fCurNote ==\n FaustWebAudioDspVoice.kLegatoVoice\n );\n }\n\n keyOff(channel: number, pitch: number, velocity: number) {\n if (this.fPlotHandler)\n this.fCachedEvents.push({\n type: 'keyOff',\n data: [channel, pitch, velocity]\n });\n const voice = this.getPlayingVoice(pitch);\n if (voice !== FaustWebAudioDspVoice.kNoVoice) {\n this.fVoiceTable[voice].keyOff();\n } else {\n console.log('Playing pitch = %d not found\\n', pitch);\n }\n }\n\n allNotesOff(hard: boolean = true) {\n this.fCachedEvents.push({ type: 'ctrlChange', data: [0, 123, 0] });\n this.fVoiceTable.forEach((voice) => voice.keyOff(hard));\n }\n}\n", "import {\n ComputeHandler,\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n FaustPolyWebAudioDsp,\n IFaustBaseWebAudioDsp,\n IFaustMonoWebAudioDsp,\n IFaustPolyWebAudioDsp,\n InputParamHandler,\n MetadataHandler,\n OutputParamHandler,\n PlotHandler\n} from './FaustWebAudioDsp';\nimport { AudioParamDescriptor, FaustUIItem } from './types';\n\n/**\n * For offline rendering.\n */\nexport interface IFaustOfflineProcessor extends IFaustBaseWebAudioDsp {\n render(\n inputs?: Float32Array[],\n length?: number,\n onUpdate?: (sample: number) => any\n ): Float32Array[];\n}\n\nexport interface IFaustMonoOfflineProcessor\n extends IFaustOfflineProcessor, IFaustMonoWebAudioDsp {}\nexport interface IFaustPolyOfflineProcessor\n extends IFaustOfflineProcessor, IFaustPolyWebAudioDsp {}\n\nexport class FaustOfflineProcessor<Poly extends boolean = false> {\n protected fDSPCode!: Poly extends true\n ? FaustPolyWebAudioDsp\n : FaustMonoWebAudioDsp;\n\n protected fBufferSize: number;\n protected fInputs: Float32Array[];\n protected fOutputs: Float32Array[];\n\n constructor(\n instance: Poly extends true\n ? FaustPolyWebAudioDsp\n : FaustMonoWebAudioDsp,\n bufferSize: number\n ) {\n this.fDSPCode = instance;\n this.fBufferSize = bufferSize;\n this.fInputs = new Array(this.fDSPCode.getNumInputs())\n .fill(null)\n .map(() => new Float32Array(bufferSize));\n this.fOutputs = new Array(this.fDSPCode.getNumOutputs())\n .fill(null)\n .map(() => new Float32Array(bufferSize));\n }\n\n // Public API\n\n getParameterDescriptors() {\n const params = [] as AudioParamDescriptor[];\n // Analyse voice JSON to generate AudioParam parameters\n const callback = (item: FaustUIItem) => {\n let param: AudioParamDescriptor | null = null;\n const polyKeywords = [\n '/gate',\n '/freq',\n '/gain',\n '/key',\n '/vel',\n '/velocity'\n ];\n const isPolyReserved =\n 'address' in item &&\n !!polyKeywords.find((k) => item.address.endsWith(k));\n if (\n this.fDSPCode instanceof FaustMonoWebAudioDsp ||\n !isPolyReserved\n ) {\n if (\n item.type === 'vslider' ||\n item.type === 'hslider' ||\n item.type === 'nentry'\n ) {\n param = {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: item.min || 0,\n maxValue: item.max || 0\n };\n } else if (item.type === 'button' || item.type === 'checkbox') {\n param = {\n name: item.address,\n defaultValue: item.init || 0,\n minValue: 0,\n maxValue: 1\n };\n }\n }\n if (param) params.push(param);\n };\n FaustBaseWebAudioDsp.parseUI(this.fDSPCode.getUI(), callback);\n return params;\n }\n compute(input: Float32Array[], output: Float32Array[]) {\n return this.fDSPCode.compute(input, output);\n }\n\n setOutputParamHandler(handler: OutputParamHandler) {\n this.fDSPCode.setOutputParamHandler(handler);\n }\n getOutputParamHandler() {\n return this.fDSPCode.getOutputParamHandler();\n }\n callOutputParamHandler(path: string, value: number) {\n this.fDSPCode.callOutputParamHandler(path, value);\n }\n\n setInputParamHandler(handler: InputParamHandler) {\n this.fDSPCode.setInputParamHandler(handler);\n }\n getInputParamHandler() {\n return this.fDSPCode.getInputParamHandler();\n }\n callInputParamHandler(path: string, value: number) {\n this.fDSPCode.callInputParamHandler(path, value);\n }\n\n setComputeHandler(handler: ComputeHandler) {\n this.fDSPCode.setComputeHandler(handler);\n }\n getComputeHandler() {\n return this.fDSPCode.getComputeHandler();\n }\n\n setPlotHandler(handler: PlotHandler) {\n this.fDSPCode.setPlotHandler(handler);\n }\n getPlotHandler() {\n return this.fDSPCode.getPlotHandler();\n }\n\n getNumInputs() {\n return this.fDSPCode.getNumInputs();\n }\n getNumOutputs() {\n return this.fDSPCode.getNumOutputs();\n }\n\n metadata(handler: MetadataHandler) {}\n\n midiMessage(data: number[] | Uint8Array) {\n this.fDSPCode.midiMessage(data);\n }\n\n ctrlChange(chan: number, ctrl: number, value: number) {\n this.fDSPCode.ctrlChange(chan, ctrl, value);\n }\n pitchWheel(chan: number, value: number) {\n this.fDSPCode.pitchWheel(chan, value);\n }\n keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n\n setParamValue(path: string, value: number) {\n this.fDSPCode.setParamValue(path, value);\n }\n getParamValue(path: string) {\n return this.fDSPCode.getParamValue(path);\n }\n getParams() {\n return this.fDSPCode.getParams();\n }\n\n getMeta() {\n return this.fDSPCode.getMeta();\n }\n getJSON() {\n return this.fDSPCode.getJSON();\n }\n getDescriptors() {\n return this.fDSPCode.getDescriptors();\n }\n getUI() {\n return this.fDSPCode.getUI();\n }\n\n init() {\n this.fDSPCode.init();\n }\n\n instanceInit() {\n this.fDSPCode.instanceInit();\n }\n\n instanceClear() {\n this.fDSPCode.instanceClear();\n }\n\n instanceConstants() {\n this.fDSPCode.instanceConstants();\n }\n\n instanceResetUserInterface() {\n this.fDSPCode.instanceResetUserInterface();\n }\n\n start() {\n this.fDSPCode.start();\n }\n stop() {\n this.fDSPCode.stop();\n }\n\n destroy() {\n this.fDSPCode.destroy();\n }\n\n get hasAccInput() {\n return this.fDSPCode.hasAccInput;\n }\n\n propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n this.fDSPCode.propagateAcc(accelerationIncludingGravity, invert);\n }\n\n get hasGyrInput() {\n return this.fDSPCode.hasGyrInput;\n }\n\n propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n this.fDSPCode.propagateGyr(event);\n }\n\n startSensors(): void {}\n\n stopSensors(): void {}\n\n /**\n * Render frames in an array.\n *\n * @param inputs - input signal\n * @param length - the number of frames to render (default: bufferSize)\n * @param onUpdate - a callback after each buffer calculated, with an argument \"current sample\"\n * @return an array of Float32Array with the rendered frames\n */\n render(\n inputs: Float32Array[] = [],\n length = this.fBufferSize,\n onUpdate?: (sample: number) => any\n ): Float32Array[] {\n let l = 0;\n const outputs = new Array(this.fDSPCode.getNumOutputs())\n .fill(null)\n .map(() => new Float32Array(length));\n // The node has to be started before rendering\n this.fDSPCode.start();\n while (l < length) {\n const sliceLength = Math.min(length - l, this.fBufferSize);\n for (let i = 0; i < this.fDSPCode.getNumInputs(); i++) {\n let input: Float32Array;\n if (inputs[i]) {\n if (inputs[i].length <= l) {\n input = new Float32Array(sliceLength);\n } else if (inputs[i].length > l + sliceLength) {\n input = inputs[i].subarray(l, l + sliceLength);\n } else {\n input = inputs[i].subarray(l, inputs[i].length);\n }\n } else {\n input = new Float32Array(sliceLength);\n }\n this.fInputs[i] = input;\n }\n this.fDSPCode.compute(this.fInputs, this.fOutputs);\n for (let i = 0; i < this.fDSPCode.getNumOutputs(); i++) {\n const output = this.fOutputs[i];\n if (sliceLength < this.fBufferSize) {\n outputs[i].set(output.subarray(0, sliceLength), l);\n } else {\n outputs[i].set(output, l);\n }\n }\n l += sliceLength;\n onUpdate?.(l);\n }\n // The node can be stopped after rendering\n this.fDSPCode.stop();\n return outputs;\n }\n}\n\nexport class FaustMonoOfflineProcessor\n extends FaustOfflineProcessor<false>\n implements IFaustMonoWebAudioDsp {}\n\nexport class FaustPolyOfflineProcessor\n extends FaustOfflineProcessor<true>\n implements IFaustPolyWebAudioDsp\n{\n keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n allNotesOff(hard: boolean) {\n this.fDSPCode.allNotesOff(hard);\n }\n}\n\nexport default FaustOfflineProcessor;\n", "import type FaustCompiler from './FaustCompiler';\n\ninterface IFaustSvgDiagrams {\n /**\n * Generates auxiliary files from Faust code. The output depends on the compiler options.\n *\n * @param name - the DSP's name\n * @param code - Faust code\n * @param args - compilation args\n * @returns the svg diagrams as a filename - svg string map\n */\n from(name: string, code: string, args: string): Record<string, string>;\n}\n\nclass FaustSvgDiagrams implements IFaustSvgDiagrams {\n private compiler: FaustCompiler;\n\n constructor(compiler: FaustCompiler) {\n this.compiler = compiler;\n }\n\n from(name: string, code: string, args: string) {\n const fs = this.compiler.fs();\n try {\n const files: string[] = fs.readdir(`/${name}-svg/`);\n files\n .filter((file) => file !== '.' && file !== '..')\n .forEach((file) => fs.unlink(`/${name}-svg/${file}`));\n } catch {}\n const success = this.compiler.generateAuxFiles(\n name,\n code,\n `-lang wasm -o binary -svg ${args}`\n );\n if (!success) throw new Error(this.compiler.getErrorMessage());\n const svgs: Record<string, string> = {};\n const files: string[] = fs.readdir(`/${name}-svg/`);\n files\n .filter((file) => file !== '.' && file !== '..')\n .forEach(\n (file) =>\n (svgs[file] = fs.readFile(`/${name}-svg/${file}`, {\n encoding: 'utf8'\n }) as string)\n );\n return svgs;\n }\n}\n\nexport default FaustSvgDiagrams;\n", "import type FaustCompiler from './FaustCompiler';\n\ninterface IFaustCmajor {\n /**\n * Generates auxiliary files from Faust code. The output depends on the compiler options.\n *\n * @param name - the DSP's name\n * @param code - Faust code\n * @param args - compilation args\n * @returns the Cmajor compiled string\n */\n compile(name: string, code: string, args: string): string;\n}\n\nclass FaustCmajor implements IFaustCmajor {\n private fCompiler: FaustCompiler;\n\n constructor(compiler: FaustCompiler) {\n this.fCompiler = compiler;\n }\n\n compile(name: string, code: string, args: string) {\n const fs = this.fCompiler.fs();\n const success = this.fCompiler.generateAuxFiles(\n name,\n code,\n `-lang cmajor-hybrid -cn ${name} -o ${name}.cmajor`\n );\n return success\n ? (fs.readFile(`${name}.cmajor`, { encoding: 'utf8' }) as string)\n : '';\n }\n}\n\nexport default FaustCmajor;\n", "import type { FaustModule, LibFaustWasm, FaustInfoType } from './types';\n\nexport interface ILibFaust extends LibFaustWasm {\n module(): FaustModule;\n fs(): typeof FS;\n}\n\nclass LibFaust implements ILibFaust {\n private fModule: FaustModule;\n private fCompiler: LibFaustWasm;\n private fFileSystem: typeof FS;\n\n constructor(module: FaustModule) {\n this.fModule = module;\n this.fCompiler = new module.libFaustWasm();\n this.fFileSystem = this.fModule.FS;\n }\n module() {\n return this.fModule;\n }\n fs() {\n return this.fFileSystem;\n }\n version() {\n return this.fCompiler.version();\n }\n createDSPFactory(\n name: string,\n code: string,\n args: string,\n useInternalMemory: boolean\n ) {\n return this.fCompiler.createDSPFactory(\n name,\n code,\n args,\n useInternalMemory\n );\n }\n deleteDSPFactory(cFactory: number) {\n return this.fCompiler.deleteDSPFactory(cFactory);\n }\n expandDSP(name: string, code: string, args: string) {\n return this.fCompiler.expandDSP(name, code, args);\n }\n generateAuxFiles(name: string, code: string, args: string) {\n return this.fCompiler.generateAuxFiles(name, code, args);\n }\n deleteAllDSPFactories() {\n return this.fCompiler.deleteAllDSPFactories();\n }\n getErrorAfterException() {\n return this.fCompiler.getErrorAfterException();\n }\n cleanupAfterException() {\n return this.fCompiler.cleanupAfterException();\n }\n getInfos(what: FaustInfoType) {\n return this.fCompiler.getInfos(what);\n }\n toString() {\n return `LibFaust module: ${this.fModule}, compiler: ${this.fCompiler}`;\n }\n}\n\nexport default LibFaust;\n", "export interface WavEncoderOptions {\n bitDepth: number;\n float?: boolean;\n symmetric?: boolean;\n shared?: boolean;\n sampleRate: number;\n}\ninterface Format {\n formatId: number;\n float: boolean;\n symmetric: boolean;\n numberOfChannels: number;\n sampleRate: number;\n length: number;\n bitDepth: number;\n byteDepth: number;\n}\n\n/**\n * Code from https://github.com/mohayonao/wav-encoder\n */\nclass WavEncoder {\n static encode(audioBuffer: Float32Array[], options: WavEncoderOptions) {\n const numberOfChannels = audioBuffer.length;\n const length = audioBuffer[0].length;\n const { shared, float } = options;\n const bitDepth = float ? 32 : options.bitDepth | 0 || 16;\n const byteDepth = bitDepth >> 3;\n const byteLength = length * numberOfChannels * byteDepth;\n const AB = shared\n ? globalThis.SharedArrayBuffer || globalThis.ArrayBuffer\n : globalThis.ArrayBuffer;\n const ab = new AB((44 + byteLength) * Uint8Array.BYTES_PER_ELEMENT);\n const dataView = new DataView(ab);\n const writer = new Writer(dataView);\n const format: Format = {\n formatId: float ? 0x0003 : 0x0001,\n float: !!float,\n numberOfChannels,\n sampleRate: options.sampleRate,\n symmetric: !!options.symmetric,\n length,\n bitDepth,\n byteDepth\n };\n this.writeHeader(writer, format);\n this.writeData(writer, audioBuffer, format);\n return ab;\n }\n private static writeHeader(writer: Writer, format: Format) {\n const {\n formatId,\n sampleRate,\n bitDepth,\n numberOfChannels,\n length,\n byteDepth\n } = format;\n writer.string('RIFF');\n writer.uint32(writer.dataView.byteLength - 8);\n writer.string('WAVE');\n writer.string('fmt ');\n writer.uint32(16);\n writer.uint16(formatId);\n writer.uint16(numberOfChannels);\n writer.uint32(sampleRate);\n writer.uint32(sampleRate * numberOfChannels * byteDepth);\n writer.uint16(numberOfChannels * byteDepth);\n writer.uint16(bitDepth);\n writer.string('data');\n writer.uint32(length * numberOfChannels * byteDepth);\n return writer.pos;\n }\n private static writeData(\n writer: Writer,\n audioBuffer: Float32Array[],\n format: Format\n ) {\n const { bitDepth, float, length, numberOfChannels, symmetric } = format;\n if (bitDepth === 32 && float) {\n const { dataView, pos } = writer;\n const ab = dataView.buffer;\n const f32View = new Float32Array(ab, pos);\n if (numberOfChannels === 1) {\n f32View.set(audioBuffer[0]);\n return;\n }\n for (let ch = 0; ch < numberOfChannels; ch++) {\n const channel = audioBuffer[ch];\n for (let i = 0; i < length; i++) {\n f32View[i * numberOfChannels + ch] = channel[i];\n }\n }\n return;\n }\n const encoderOption = float ? 'f' : symmetric ? 's' : '';\n const methodName = 'pcm' + bitDepth + encoderOption;\n\n if (!(writer as any)[methodName]) {\n throw new TypeError('Not supported bit depth: ' + bitDepth);\n }\n\n const write: (value: number) => void = (writer as any)[methodName].bind(\n writer\n );\n\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < numberOfChannels; j++) {\n write(audioBuffer[j][i]);\n }\n }\n }\n}\n\nclass Writer {\n pos = 0;\n dataView: DataView;\n constructor(dataView: DataView) {\n this.dataView = dataView;\n }\n int16(value: number) {\n this.dataView.setInt16(this.pos, value, true);\n this.pos += 2;\n }\n uint16(value: number) {\n this.dataView.setUint16(this.pos, value, true);\n this.pos += 2;\n }\n uint32(value: number) {\n this.dataView.setUint32(this.pos, value, true);\n this.pos += 4;\n }\n string(value: string) {\n for (let i = 0, imax = value.length; i < imax; i++) {\n this.dataView.setUint8(this.pos++, value.charCodeAt(i));\n }\n }\n pcm8(valueIn: number) {\n let value = valueIn;\n value = Math.max(-1, Math.min(value, +1));\n value = (value * 0.5 + 0.5) * 255;\n value = Math.round(value) | 0;\n this.dataView.setUint8(this.pos, value /* , true*/);\n this.pos += 1;\n }\n pcm8s(valueIn: number) {\n let value = valueIn;\n value = Math.round(value * 128) + 128;\n value = Math.max(0, Math.min(value, 255));\n this.dataView.setUint8(this.pos, value /* , true*/);\n this.pos += 1;\n }\n pcm16(valueIn: number) {\n let value = valueIn;\n value = Math.max(-1, Math.min(value, +1));\n value = value < 0 ? value * 32768 : value * 32767;\n value = Math.round(value) | 0;\n this.dataView.setInt16(this.pos, value, true);\n this.pos += 2;\n }\n pcm16s(valueIn: number) {\n let value = valueIn;\n value = Math.round(value * 32768);\n value = Math.max(-32768, Math.min(value, 32767));\n this.dataView.setInt16(this.pos, value, true);\n this.pos += 2;\n }\n pcm24(valueIn: number) {\n let value = valueIn;\n value = Math.max(-1, Math.min(value, +1));\n value = value < 0 ? 0x1000000 + value * 8388608 : value * 8388607;\n value = Math.round(value) | 0;\n\n const x0 = (value >> 0) & 0xff;\n const x1 = (value >> 8) & 0xff;\n const x2 = (value >> 16) & 0xff;\n\n this.dataView.setUint8(this.pos + 0, x0);\n this.dataView.setUint8(this.pos + 1, x1);\n this.dataView.setUint8(this.pos + 2, x2);\n this.pos += 3;\n }\n pcm24s(valueIn: number) {\n let value = valueIn;\n value = Math.round(value * 8388608);\n value = Math.max(-8388608, Math.min(value, 8388607));\n\n const x0 = (value >> 0) & 0xff;\n const x1 = (value >> 8) & 0xff;\n const x2 = (value >> 16) & 0xff;\n\n this.dataView.setUint8(this.pos + 0, x0);\n this.dataView.setUint8(this.pos + 1, x1);\n this.dataView.setUint8(this.pos + 2, x2);\n this.pos += 3;\n }\n pcm32(valueIn: number) {\n let value = valueIn;\n value = Math.max(-1, Math.min(value, +1));\n value = value < 0 ? value * 2147483648 : value * 2147483647;\n value = Math.round(value) | 0;\n this.dataView.setInt32(this.pos, value, true);\n this.pos += 4;\n }\n pcm32s(valueIn: number) {\n let value = valueIn;\n value = Math.round(value * 2147483648);\n value = Math.max(-2147483648, Math.min(value, +2147483647));\n this.dataView.setInt32(this.pos, value, true);\n this.pos += 4;\n }\n pcm32f(value: number) {\n this.dataView.setFloat32(this.pos, value, true);\n this.pos += 4;\n }\n}\n\nexport default WavEncoder;\n", "export interface WavDecoderOptions {\n symmetric?: boolean;\n shared?: boolean;\n}\ninterface Format {\n formatId: number;\n float: boolean;\n numberOfChannels: number;\n sampleRate: number;\n byteRate: number;\n blockSize: number;\n bitDepth: number;\n}\n\n/**\n * Code from https://github.com/mohayonao/wav-decoder\n */\nclass WavDecoder {\n static decode(buffer: ArrayBuffer, options?: WavDecoderOptions) {\n const dataView = new DataView(buffer);\n const reader = new Reader(dataView);\n if (reader.string(4) !== 'RIFF') {\n throw new TypeError('Invalid WAV file');\n }\n reader.uint32(); // skip file length\n if (reader.string(4) !== 'WAVE') {\n throw new TypeError('Invalid WAV file');\n }\n let format: Format | null = null;\n let audioData: {\n numberOfChannels: number;\n length: number;\n sampleRate: number;\n channelData: Float32Array[];\n } | null = null;\n do {\n const chunkType = reader.string(4);\n const chunkSize = reader.uint32();\n if (chunkType === 'fmt ') {\n format = this.decodeFormat(reader, chunkSize);\n } else if (chunkType === 'data') {\n audioData = this.decodeData(\n reader,\n chunkSize,\n format as Format,\n options || {}\n );\n } else {\n reader.skip(chunkSize);\n }\n } while (audioData === null);\n return audioData;\n }\n private static decodeFormat(reader: Reader, chunkSize: number) {\n const formats = {\n 0x0001: 'lpcm',\n 0x0003: 'lpcm'\n };\n const formatId = reader.uint16();\n if (!Object.prototype.hasOwnProperty.call(formats, formatId)) {\n throw new TypeError(\n 'Unsupported format in WAV file: 0x' + formatId.toString(16)\n );\n }\n const format: Format = {\n formatId: formatId,\n float: formatId === 0x0003,\n numberOfChannels: reader.uint16(),\n sampleRate: reader.uint32(),\n byteRate: reader.uint32(),\n blockSize: reader.uint16(),\n bitDepth: reader.uint16()\n };\n reader.skip(chunkSize - 16);\n return format;\n }\n private static decodeData(\n reader: Reader,\n chunkSizeIn: number,\n format: Format,\n options: WavDecoderOptions\n ) {\n const chunkSize = Math.min(chunkSizeIn, reader.remain());\n const length = Math.floor(chunkSize / format.blockSize);\n const numberOfChannels = format.numberOfChannels;\n const sampleRate = format.sampleRate;\n const channelData: Float32Array[] = new Array(numberOfChannels);\n for (let ch = 0; ch < numberOfChannels; ch++) {\n const AB = options.shared\n ? globalThis.SharedArrayBuffer || globalThis.ArrayBuffer\n : globalThis.ArrayBuffer;\n const ab = new AB(length * Float32Array.BYTES_PER_ELEMENT);\n channelData[ch] = new Float32Array(ab);\n }\n this.readPCM(reader, channelData, length, format, options);\n return {\n numberOfChannels,\n length,\n sampleRate,\n channelData\n };\n }\n private static readPCM(\n reader: Reader,\n channelData: Float32Array[],\n length: number,\n format: Format,\n options: WavDecoderOptions\n ) {\n const bitDepth = format.bitDepth;\n const decoderOption = format.float ? 'f' : options.symmetric ? 's' : '';\n const methodName = ('pcm' +\n bitDepth +\n decoderOption) as `pcm${8 | 16 | 32}${'f' | 's' | ''}`;\n if (!(reader as any)[methodName]) {\n throw new TypeError('Not supported bit depth: ' + format.bitDepth);\n }\n const read: () => number = (reader as any)[methodName].bind(reader);\n const numberOfChannels = format.numberOfChannels;\n for (let i = 0; i < length; i++) {\n for (let ch = 0; ch < numberOfChannels; ch++) {\n channelData[ch][i] = read();\n }\n }\n }\n}\n\nclass Reader {\n pos = 0;\n dataView: DataView;\n constructor(dataView: DataView) {\n this.dataView = dataView;\n }\n remain() {\n return this.dataView.byteLength - this.pos;\n }\n skip(n: number) {\n this.pos += n;\n }\n uint8() {\n const data = this.dataView.getUint8(this.pos);\n this.pos += 1;\n return data;\n }\n int16() {\n const data = this.dataView.getInt16(this.pos, true);\n this.pos += 2;\n return data;\n }\n uint16() {\n const data = this.dataView.getUint16(this.pos, true);\n this.pos += 2;\n return data;\n }\n uint32() {\n const data = this.dataView.getUint32(this.pos, true);\n this.pos += 4;\n return data;\n }\n string(n: number) {\n let data = '';\n for (let i = 0; i < n; i++) {\n data += String.fromCharCode(this.uint8());\n }\n return data;\n }\n pcm8() {\n const data = this.dataView.getUint8(this.pos) - 128;\n this.pos += 1;\n return data < 0 ? data / 128 : data / 127;\n }\n pcm8s() {\n const data = this.dataView.getUint8(this.pos) - 127.5;\n this.pos += 1;\n return data / 127.5;\n }\n pcm16() {\n const data = this.dataView.getInt16(this.pos, true);\n this.pos += 2;\n return data < 0 ? data / 32768 : data / 32767;\n }\n pcm16s() {\n const data = this.dataView.getInt16(this.pos, true);\n this.pos += 2;\n return data / 32768;\n }\n pcm24() {\n const x0 = this.dataView.getUint8(this.pos + 0);\n const x1 = this.dataView.getUint8(this.pos + 1);\n const x2 = this.dataView.getUint8(this.pos + 2);\n const xx = x0 + (x1 << 8) + (x2 << 16);\n\n const data = xx > 0x800000 ? xx - 0x1000000 : xx;\n this.pos += 3;\n return data < 0 ? data / 8388608 : data / 8388607;\n }\n pcm24s() {\n const x0 = this.dataView.getUint8(this.pos + 0);\n const x1 = this.dataView.getUint8(this.pos + 1);\n const x2 = this.dataView.getUint8(this.pos + 2);\n const xx = x0 + (x1 << 8) + (x2 << 16);\n\n const data = xx > 0x800000 ? xx - 0x1000000 : xx;\n this.pos += 3;\n return data / 8388608;\n }\n pcm32() {\n const data = this.dataView.getInt32(this.pos, true);\n this.pos += 4;\n return data < 0 ? data / 2147483648 : data / 2147483647;\n }\n pcm32s() {\n const data = this.dataView.getInt32(this.pos, true);\n this.pos += 4;\n return data / 2147483648;\n }\n pcm32f() {\n const data = this.dataView.getFloat32(this.pos, true);\n this.pos += 4;\n return data;\n }\n pcm64f() {\n const data = this.dataView.getFloat64(this.pos, true);\n this.pos += 8;\n return data;\n }\n}\n\nexport default WavDecoder;\n", "import { FaustBaseWebAudioDsp } from './FaustWebAudioDsp';\nimport WavDecoder from './WavDecoder';\nimport type {\n AudioData,\n FaustDspMeta,\n FaustUIItem,\n LooseFaustDspFactory\n} from './types';\n\n/** Read metadata and fetch soundfiles */\nclass SoundfileReader {\n /**\n * Set fallback base URLs used to resolve soundfile paths.\n *\n * In Node or other non-browser runtimes, `location` may be undefined;\n * in that case this returns an empty list to avoid resolution errors.\n */\n static get fallbackPaths() {\n const loc =\n typeof location !== 'undefined' ? (location as Location) : null;\n const href = loc?.href;\n const origin = loc?.origin;\n const parent = href ? this.getParentUrl(href) : null;\n return [href, parent, origin].filter(\n (value): value is string =>\n typeof value === 'string' && value.length > 0\n );\n }\n\n /**\n * Extract the parent URL from an URL.\n * @param url : the URL\n * @returns : the parent URL\n */\n private static getParentUrl(url: string) {\n return url.substring(0, url.lastIndexOf('/') + 1);\n }\n\n /**\n * Convert an audio buffer to audio data.\n *\n * @param audioBuffer : the audio buffer to convert\n * @returns : the audio data\n */\n private static toAudioData(audioBuffer: AudioBuffer): AudioData {\n const { sampleRate, numberOfChannels } = audioBuffer;\n return {\n sampleRate,\n audioBuffer: new Array(numberOfChannels)\n .fill(null)\n .map((v, i) => audioBuffer.getChannelData(i))\n } as AudioData;\n }\n\n private static isWaveFile(buffer: ArrayBuffer) {\n if (buffer.byteLength < 12) return false;\n const reader = new DataView(buffer);\n const riff =\n reader.getUint8(0) === 0x52 &&\n reader.getUint8(1) === 0x49 &&\n reader.getUint8(2) === 0x46 &&\n reader.getUint8(3) === 0x46;\n const wave =\n reader.getUint8(8) === 0x57 &&\n reader.getUint8(9) === 0x41 &&\n reader.getUint8(10) === 0x56 &&\n reader.getUint8(11) === 0x45;\n return riff && wave;\n }\n\n private static decodeWaveFile(buffer: ArrayBuffer): AudioData {\n const decoded = WavDecoder.decode(buffer);\n return {\n sampleRate: decoded.sampleRate,\n audioBuffer: decoded.channelData\n };\n }\n\n /**\n * Extract the URLs from the metadata.\n *\n * @param dspMeta : the metadata\n * @returns : the URLs\n */\n static findSoundfilesFromMeta(\n dspMeta: FaustDspMeta\n ): LooseFaustDspFactory['soundfiles'] {\n const soundfiles: LooseFaustDspFactory['soundfiles'] = {};\n const callback = (item: FaustUIItem) => {\n if (item.type === 'soundfile') {\n const urls = FaustBaseWebAudioDsp.splitSoundfileNames(item.url);\n // soundfiles.map[item.label] = urls;\n urls.filter((url) => url.trim().length > 0).forEach(\n (url) => (soundfiles[url] = null)\n );\n }\n };\n FaustBaseWebAudioDsp.parseUI(dspMeta.ui, callback);\n return soundfiles;\n }\n /**\n * Fetch the soundfile.\n *\n * @param url : the url of the soundfile\n * @param audioCtx : the audio context\n * @returns : the audio data\n */\n private static async fetchSoundfile(\n url: string,\n audioCtx: BaseAudioContext\n ): Promise<AudioData> {\n console.log(`Loading sound file from ${url}`);\n const response = await fetch(url);\n if (!response.ok)\n throw new Error(\n `Failed to load sound file from ${url}: ${response.statusText}`\n );\n // Decode the audio data\n const arrayBuffer = await response.arrayBuffer();\n if (this.isWaveFile(arrayBuffer)) {\n try {\n return this.decodeWaveFile(arrayBuffer);\n } catch (error) {\n console.error(error);\n }\n }\n const audioBuffer = await audioCtx.decodeAudioData(arrayBuffer);\n return this.toAudioData(audioBuffer);\n }\n\n /**\n * Load the soundfile.\n *\n * @param filename : the filename\n * @param metaUrls : the metadata URLs\n * @param soundfiles : the soundfiles\n * @param audioCtx : the audio context\n */\n private static async loadSoundfile(\n filename: string,\n metaUrls: string[],\n soundfiles: LooseFaustDspFactory['soundfiles'],\n audioCtx: BaseAudioContext\n ): Promise<void> {\n if (soundfiles?.[filename]) return;\n const urlsToCheck = [\n filename,\n ...[...metaUrls, ...this.fallbackPaths].map(\n (path) =>\n new URL(filename, path.endsWith('/') ? path : `${path}/`)\n .href\n )\n ];\n // Try each candidate once to avoid double downloads (no preflight GET).\n let lastError: unknown = null;\n for (const url of urlsToCheck) {\n try {\n soundfiles![filename] = await this.fetchSoundfile(\n url,\n audioCtx\n );\n return;\n } catch (error) {\n lastError = error;\n }\n }\n throw new Error(\n `Failed to load sound file ${filename}, all check failed. Last error: ${String(lastError)}`\n );\n }\n\n /**\n * Load the soundfiles, public API.\n *\n * @param dspMeta : the metadata\n * @param soundfilesIn : the soundfiles\n * @param audioCtx : the audio context\n * @returns : the soundfiles\n */\n static async loadSoundfiles(\n dspMeta: FaustDspMeta,\n soundfilesIn: LooseFaustDspFactory['soundfiles'],\n audioCtx: BaseAudioContext\n ): Promise<LooseFaustDspFactory['soundfiles']> {\n const metaUrls = FaustBaseWebAudioDsp.extractUrlsFromMeta(dspMeta);\n const soundfiles = this.findSoundfilesFromMeta(dspMeta);\n for (const id in soundfiles) {\n if (soundfilesIn?.[id]) {\n soundfiles[id] = soundfilesIn[id];\n continue;\n }\n try {\n await this.loadSoundfile(id, metaUrls, soundfiles, audioCtx);\n } catch (error) {\n console.error(error);\n }\n }\n return soundfiles;\n }\n}\n\nexport default SoundfileReader;\n", "/**\n * Layout:\n *\n *\n * invert-isAndroid (uint8)\n * new-acc-data-available (uint8)\n * new-gyr-data-available (uint8)\n * empty (uint8)\n *\n * acc.x, acc.y, acc.z (f32)\n *\n * gyr.alpha, gyr.beta, gyr.gamma (f32)\n */\nexport class FaustAudioWorkletCommunicator {\n protected readonly port: MessagePort;\n protected readonly supportSharedArrayBuffer: boolean;\n protected readonly byteLength: number;\n protected uin8Invert: Uint8ClampedArray;\n protected uin8NewAccData: Uint8ClampedArray;\n protected uin8NewGyrData: Uint8ClampedArray;\n protected f32Acc: Float32Array;\n protected f32Gyr: Float32Array;\n constructor(port: MessagePort) {\n this.port = port;\n this.supportSharedArrayBuffer = !!globalThis.SharedArrayBuffer;\n this.byteLength =\n 4 * Uint8Array.BYTES_PER_ELEMENT +\n 3 * Float32Array.BYTES_PER_ELEMENT +\n 3 * Float32Array.BYTES_PER_ELEMENT;\n }\n initializeBuffer(ab: SharedArrayBuffer | ArrayBuffer) {\n let ptr = 0;\n this.uin8Invert = new Uint8ClampedArray(ab, ptr, 1);\n ptr += Uint8ClampedArray.BYTES_PER_ELEMENT;\n this.uin8NewAccData = new Uint8ClampedArray(ab, ptr, 1);\n ptr += Uint8ClampedArray.BYTES_PER_ELEMENT;\n this.uin8NewGyrData = new Uint8ClampedArray(ab, ptr, 1);\n ptr += Uint8ClampedArray.BYTES_PER_ELEMENT;\n ptr += Uint8ClampedArray.BYTES_PER_ELEMENT; // empty\n this.f32Acc = new Float32Array(ab, ptr, 3);\n ptr += 3 * Float32Array.BYTES_PER_ELEMENT;\n this.f32Gyr = new Float32Array(ab, ptr, 3);\n ptr += 3 * Float32Array.BYTES_PER_ELEMENT;\n }\n setNewAccDataAvailable(value: boolean) {\n if (!this.uin8NewAccData) return;\n this.uin8NewAccData[0] = +value;\n }\n getNewAccDataAvailable() {\n return !!this.uin8NewAccData?.[0];\n }\n setNewGyrDataAvailable(value: boolean) {\n if (!this.uin8NewGyrData) return;\n this.uin8NewGyrData[0] = +value;\n }\n getNewGyrDataAvailable() {\n return !!this.uin8NewGyrData?.[0];\n }\n setAcc({ x, y, z }: { x: number; y: number; z: number }, invert = false) {\n if (!this.supportSharedArrayBuffer) {\n const e = { type: 'acc', data: { x, y, z }, invert };\n this.port.postMessage(e);\n }\n if (!this.uin8NewAccData) return;\n this.uin8Invert[0] = +invert;\n this.f32Acc[0] = x;\n this.f32Acc[1] = y;\n this.f32Acc[2] = z;\n this.uin8NewAccData[0] = 1;\n }\n getAcc() {\n if (!this.uin8NewAccData) return;\n const invert = !!this.uin8Invert[0];\n const [x, y, z] = this.f32Acc;\n return { x, y, z, invert };\n }\n setGyr({\n alpha,\n beta,\n gamma\n }: {\n alpha: number;\n beta: number;\n gamma: number;\n }) {\n if (!this.supportSharedArrayBuffer) {\n const e = { type: 'gyr', data: { alpha, beta, gamma } };\n this.port.postMessage(e);\n }\n if (!this.uin8NewGyrData) return;\n this.f32Gyr[0] = alpha;\n this.f32Gyr[1] = beta;\n this.f32Gyr[2] = gamma;\n this.uin8NewGyrData[0] = 1;\n }\n getGyr() {\n if (!this.uin8NewGyrData) return;\n const [alpha, beta, gamma] = this.f32Gyr;\n return { alpha, beta, gamma };\n }\n}\n\nexport class FaustAudioWorkletNodeCommunicator extends FaustAudioWorkletCommunicator {\n constructor(port: MessagePort) {\n super(port);\n if (this.supportSharedArrayBuffer) {\n const sab = new SharedArrayBuffer(this.byteLength);\n this.initializeBuffer(sab);\n this.port.postMessage({ type: 'initSab', sab });\n } else {\n const ab = new ArrayBuffer(this.byteLength);\n this.initializeBuffer(ab);\n }\n }\n}\n\nexport class FaustAudioWorkletProcessorCommunicator extends FaustAudioWorkletCommunicator {\n constructor(port: MessagePort) {\n super(port);\n\n if (this.supportSharedArrayBuffer) {\n this.port.addEventListener('message', (event) => {\n const { data } = event;\n if (data.type === 'initSab') {\n this.initializeBuffer(data.sab);\n }\n });\n } else {\n const ab = new ArrayBuffer(this.byteLength);\n this.initializeBuffer(ab);\n this.port.addEventListener('message', (event) => {\n const msg = event.data;\n\n switch (msg.type) {\n // Sensors messages\n case 'acc': {\n this.setAcc(msg.data, msg.invert);\n break;\n }\n case 'gyr': {\n this.setGyr(msg.data);\n break;\n }\n default:\n break;\n }\n });\n }\n }\n}\n", "import {\n InputParamHandler,\n OutputParamHandler,\n ComputeHandler,\n PlotHandler,\n UIHandler,\n MetadataHandler,\n FaustBaseWebAudioDsp,\n IFaustMonoWebAudioDsp,\n IFaustPolyWebAudioDsp\n} from './FaustWebAudioDsp';\nimport type { FaustAudioWorkletNodeOptions } from './FaustAudioWorkletProcessor';\nimport type {\n LooseFaustDspFactory,\n FaustDspMeta,\n FaustUIInputItem,\n FaustUIItem\n} from './types';\nimport { FaustAudioWorkletNodeCommunicator } from './FaustAudioWorkletCommunicator';\n\n/**\n * Base class for Monophonic and Polyphonic AudioWorkletNode\n */\nexport class FaustAudioWorkletNode<\n Poly extends boolean = false\n> extends (globalThis.AudioWorkletNode || null) {\n protected fJSONDsp: FaustDspMeta;\n protected fJSON: string;\n protected fInputsItems: string[];\n protected fOutputHandler: OutputParamHandler | null;\n protected fInputHandler: InputParamHandler | null;\n protected fComputeHandler: ComputeHandler | null;\n protected fPlotHandler: PlotHandler | null;\n protected fUICallback: UIHandler;\n protected fDescriptor: FaustUIInputItem[];\n protected fCommunicator: FaustAudioWorkletNodeCommunicator;\n protected fParamAliases: Record<string, string>;\n #hasAccInput = false;\n #hasGyrInput = false;\n\n constructor(\n context: BaseAudioContext,\n name: string,\n factory: LooseFaustDspFactory,\n options: Partial<FaustAudioWorkletNodeOptions<Poly>> = {}\n ) {\n // Create JSON object\n const JSONObj: FaustDspMeta = JSON.parse(factory.json);\n\n // Create proxy FaustAudioWorkletProcessor\n super(context, name, {\n numberOfInputs: JSONObj.inputs > 0 ? 1 : 0,\n numberOfOutputs: JSONObj.outputs > 0 ? 1 : 0,\n channelCount: Math.max(1, JSONObj.inputs),\n outputChannelCount: [JSONObj.outputs],\n channelCountMode: 'explicit',\n channelInterpretation: 'speakers',\n processorOptions: options.processorOptions,\n ...options\n });\n\n this.fJSONDsp = JSONObj;\n this.fJSON = factory.json;\n this.fOutputHandler = null;\n this.fInputHandler = null;\n this.fComputeHandler = null;\n this.fPlotHandler = null;\n this.fDescriptor = [];\n this.fParamAliases = {};\n\n // Parse UI\n this.fInputsItems = [];\n this.fUICallback = (item: FaustUIItem) => {\n if (\n item.type === 'vslider' ||\n item.type === 'hslider' ||\n item.type === 'button' ||\n item.type === 'checkbox' ||\n item.type === 'nentry'\n ) {\n // Keep inputs adresses\n this.fInputsItems.push(item.address);\n this.fDescriptor.push(item);\n const registerAlias = (alias: string) => {\n if (!this.fParamAliases[alias]) {\n this.fParamAliases[alias] = item.address;\n }\n };\n registerAlias(item.shortname);\n registerAlias(item.label);\n if (!item.meta) return;\n item.meta.forEach((meta) => {\n const { midi, acc, gyr } = meta;\n if (acc) this.#hasAccInput = true;\n if (gyr) this.#hasGyrInput = true;\n });\n }\n };\n\n FaustBaseWebAudioDsp.parseUI(this.fJSONDsp.ui, this.fUICallback);\n\n this.fCommunicator = new FaustAudioWorkletNodeCommunicator(this.port);\n\n // Patch it with additional functions\n this.port.addEventListener('message', this.handleMessageAux);\n this.port.start();\n }\n\n protected handleMessageAux = (e: MessageEvent) => {\n if (e.data.type === 'out-param' && this.fOutputHandler) {\n this.fOutputHandler(e.data.path, e.data.value);\n } else if (e.data.type === 'in-param' && this.fInputHandler) {\n this.fInputHandler(e.data.path, e.data.value);\n } else if (e.data.type === 'plot' && this.fPlotHandler) {\n this.fPlotHandler(e.data.value, e.data.index, e.data.events);\n }\n };\n\n // Accelerometer and gyroscope handlers\n private handleDeviceMotion = ({\n accelerationIncludingGravity\n }: DeviceMotionEvent) => {\n const isAndroid: boolean = /Android/i.test(navigator.userAgent);\n if (!accelerationIncludingGravity) return;\n const { x, y, z } = accelerationIncludingGravity;\n this.propagateAcc({ x, y, z }, isAndroid);\n };\n\n private handleDeviceOrientation = ({\n alpha,\n beta,\n gamma\n }: DeviceOrientationEvent) => {\n this.propagateGyr({ alpha, beta, gamma });\n };\n\n // Public API\n\n /** Setup accelerometer and gyroscope handlers */\n async startSensors() {\n if (this.hasAccInput) {\n if (window.DeviceMotionEvent) {\n // iOS 13+ requires a user gesture to enable DeviceMotionEvent, to be done in the main thread\n window.addEventListener(\n 'devicemotion',\n this.handleDeviceMotion,\n true\n );\n } else {\n // Browser doesn't support DeviceMotionEvent\n console.log('Cannot set the accelerometer handler.');\n }\n }\n if (this.hasGyrInput) {\n if (window.DeviceMotionEvent) {\n // iOS 13+ requires a user gesture to enable DeviceMotionEvent, to be done in the main thread\n window.addEventListener(\n 'deviceorientation',\n this.handleDeviceOrientation,\n true\n );\n } else {\n // Browser doesn't support DeviceMotionEvent\n console.log('Cannot set the gyroscope handler.');\n }\n }\n }\n\n stopSensors() {\n if (this.hasAccInput) {\n window.removeEventListener(\n 'devicemotion',\n this.handleDeviceMotion,\n true\n );\n }\n if (this.hasGyrInput) {\n window.removeEventListener(\n 'deviceorientation',\n this.handleDeviceOrientation,\n true\n );\n }\n }\n\n setOutputParamHandler(handler: OutputParamHandler | null) {\n this.fOutputHandler = handler;\n }\n getOutputParamHandler() {\n return this.fOutputHandler;\n }\n callOutputParamHandler(path: string, value: number) {\n if (this.fOutputHandler) {\n this.fOutputHandler(path, value);\n }\n }\n\n setInputParamHandler(handler: InputParamHandler | null) {\n this.fInputHandler = handler;\n }\n getInputParamHandler() {\n return this.fInputHandler;\n }\n callInputParamHandler(path: string, value: number) {\n if (this.fInputHandler) {\n this.fInputHandler(path, value);\n }\n }\n\n setComputeHandler(handler: ComputeHandler | null) {\n this.fComputeHandler = handler;\n }\n getComputeHandler(): ComputeHandler | null {\n return this.fComputeHandler;\n }\n\n setPlotHandler(handler: PlotHandler | null) {\n this.fPlotHandler = handler;\n // Set PlotHandler on processor side\n if (this.fPlotHandler) {\n this.port.postMessage({ type: 'setPlotHandler', data: true });\n } else {\n this.port.postMessage({ type: 'setPlotHandler', data: false });\n }\n }\n getPlotHandler(): PlotHandler | null {\n return this.fPlotHandler;\n }\n\n setupWamEventHandler() {\n this.port.postMessage({ type: 'setupWamEventHandler' });\n }\n\n getNumInputs() {\n return this.fJSONDsp.inputs;\n }\n getNumOutputs() {\n return this.fJSONDsp.outputs;\n }\n\n // Implemented in subclasses\n compute(inputs: Float32Array[], outputs: Float32Array[]) {\n return false;\n }\n\n metadata(handler: MetadataHandler) {\n if (this.fJSONDsp.meta) {\n this.fJSONDsp.meta.forEach((meta) =>\n handler(Object.keys(meta)[0], meta[Object.keys(meta)[0]])\n );\n }\n }\n\n /**\n * `time` is in AudioContext seconds, the clock `AudioParam` methods take.\n *\n * With a time, the processor holds the message until the block containing\n * that instant and applies it on the exact sample. Without one, it is\n * applied on arrival.\n *\n * A time already in the past is late, not rejected: the message happens at\n * the top of the next block. `setParamValue` is the exception -- it also\n * writes an `AudioParam`, and `setValueAtTime` throws on a negative time.\n */\n midiMessage(data: number[] | Uint8Array, time?: number): void {\n const cmd = data[0] >> 4;\n const channel = data[0] & 0xf;\n const data1 = data[1];\n const data2 = data[2];\n if (cmd === 11) this.ctrlChange(channel, data1, data2, time);\n else if (cmd === 14)\n this.pitchWheel(channel, data2 * 128.0 + data1, time);\n if (cmd === 8 || (cmd === 9 && data2 === 0))\n this.keyOff(channel, data1, data2, time);\n else if (cmd === 9) this.keyOn(channel, data1, data2, time);\n else this.port.postMessage({ type: 'midi', data: data, time });\n }\n\n ctrlChange(channel: number, ctrl: number, value: number, time?: number) {\n const e = { type: 'ctrlChange', data: [channel, ctrl, value], time };\n this.port.postMessage(e);\n }\n pitchWheel(channel: number, wheel: number, time?: number) {\n const e = { type: 'pitchWheel', data: [channel, wheel], time };\n this.port.postMessage(e);\n }\n keyOn(channel: number, pitch: number, velocity: number, time?: number) {\n const e = { type: 'keyOn', data: [channel, pitch, velocity], time };\n this.port.postMessage(e);\n }\n keyOff(channel: number, pitch: number, velocity: number, time?: number) {\n const e = { type: 'keyOff', data: [channel, pitch, velocity], time };\n this.port.postMessage(e);\n }\n\n get hasAccInput() {\n return this.#hasAccInput;\n }\n\n propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n if (!accelerationIncludingGravity) return;\n const { x, y, z } = accelerationIncludingGravity;\n this.fCommunicator.setAcc({ x: x!, y: y!, z: z! }, invert);\n }\n\n get hasGyrInput() {\n return this.#hasGyrInput;\n }\n\n propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n if (!event) return;\n const { alpha, beta, gamma } = event;\n this.fCommunicator.setGyr({\n alpha: alpha!,\n beta: beta!,\n gamma: gamma!\n });\n }\n\n /**\n * `time` is in AudioContext seconds; see `midiMessage`.\n *\n * Unlike a note, a negative `time` throws instead of arriving late, and\n * nothing is sent. `AudioParam.setValueAtTime` is what rejects it, which\n * is why that call comes first.\n */\n setParamValue(path: string, value: number, time?: number) {\n const resolved = this.fParamAliases[path] || path;\n // The AudioParam first, because it is the half that can refuse:\n // `setValueAtTime` throws on a negative or NaN time. Posting first\n // would leave the DSP holding a value the AudioParam rejected, with\n // the caller seeing only the exception.\n //\n // Both are written so they stay in step: `getParamValue` and any later\n // automation start from this value. The processor reads that\n // automation per sample, so message and AudioParam agree on the value\n // and the frame, and whichever the DSP sees second is a no-op.\n const param = this.parameters.get(resolved);\n if (param)\n param.setValueAtTime(value, time ?? this.context.currentTime);\n this.port.postMessage({\n type: 'param',\n data: { path: resolved, value },\n time\n });\n }\n getParamValue(path: string) {\n // Get value of AudioParam\n const resolved = this.fParamAliases[path] || path;\n const param = this.parameters.get(resolved);\n return param ? param.value : 0;\n }\n\n getParams() {\n return this.fInputsItems;\n }\n getMeta() {\n return this.fJSONDsp;\n }\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n getUI() {\n return this.fJSONDsp.ui;\n }\n getDescriptors() {\n return this.fDescriptor;\n }\n\n init() {\n this.port.postMessage({ type: 'init' });\n }\n\n instanceInit() {\n this.port.postMessage({ type: 'instanceInit' });\n }\n\n instanceClear() {\n this.port.postMessage({ type: 'instanceClear' });\n }\n\n instanceConstants() {\n this.port.postMessage({ type: 'instanceConstants' });\n }\n\n instanceResetUserInterface() {\n this.port.postMessage({ type: 'instanceResetUserInterface' });\n }\n\n start() {\n this.port.postMessage({ type: 'start' });\n }\n\n stop() {\n this.port.postMessage({ type: 'stop' });\n }\n\n destroy() {\n this.port.postMessage({ type: 'destroy' });\n this.port.close();\n }\n}\n\n/**\n * Monophonic AudioWorkletNode\n */\nexport class FaustMonoAudioWorkletNode\n extends FaustAudioWorkletNode<false>\n implements IFaustMonoWebAudioDsp\n{\n onprocessorerror = (e: Event) => {\n // console.error(\"Error from \" + this.fJSONDsp.name + \" FaustMonoAudioWorkletNode\");\n throw e;\n };\n\n constructor(\n context: BaseAudioContext,\n options: Partial<FaustAudioWorkletNodeOptions<false>> &\n Pick<FaustAudioWorkletNodeOptions<false>, 'processorOptions'>\n ) {\n super(\n context,\n options.processorOptions.name,\n options.processorOptions.factory,\n options\n );\n }\n}\n\n/**\n * Polyphonic AudioWorkletNode\n */\nexport class FaustPolyAudioWorkletNode\n extends FaustAudioWorkletNode<true>\n implements IFaustPolyWebAudioDsp\n{\n private fJSONEffect: FaustDspMeta | null;\n\n onprocessorerror = (e: Event) => {\n // console.error(\"Error from \" + this.fJSONDsp.name + \" FaustPolyAudioWorkletNode\");\n throw e;\n };\n\n constructor(\n context: BaseAudioContext,\n options: Partial<FaustAudioWorkletNodeOptions<true>> &\n Pick<FaustAudioWorkletNodeOptions<true>, 'processorOptions'>\n ) {\n super(\n context,\n options.processorOptions.name,\n options.processorOptions.voiceFactory,\n options\n );\n\n this.fJSONEffect = options.processorOptions.effectFactory\n ? JSON.parse(options.processorOptions.effectFactory.json)\n : null;\n\n if (this.fJSONEffect) {\n FaustBaseWebAudioDsp.parseUI(this.fJSONEffect.ui, this.fUICallback);\n }\n }\n\n // Public API\n // `keyOn` and `keyOff` are inherited: the base posts the same message,\n // which the processor routes to the polyphonic DSP.\n\n allNotesOff(hard: boolean) {\n const e = { type: 'ctrlChange', data: [0, 123, 0] };\n this.port.postMessage(e);\n }\n\n getMeta() {\n const o = this.fJSONDsp;\n const e = this.fJSONEffect;\n const r = { ...o };\n if (e) {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Sequencer',\n items: [\n { type: 'vgroup', label: 'Instrument', items: o.ui },\n { type: 'vgroup', label: 'Effect', items: e.ui }\n ]\n }\n ];\n } else {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Polyphonic',\n items: [{ type: 'vgroup', label: 'Voices', items: o.ui }]\n }\n ];\n }\n return r as FaustDspMeta;\n }\n\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n\n getUI() {\n return this.getMeta().ui;\n }\n}\n", "import type {\n ComputeHandler,\n FaustMonoWebAudioDsp,\n FaustPolyWebAudioDsp,\n IFaustMonoWebAudioDsp,\n IFaustPolyWebAudioDsp,\n InputParamHandler,\n MetadataHandler,\n OutputParamHandler,\n PlotHandler\n} from './FaustWebAudioDsp';\n\n/**\n * Base class for Monophonic and Polyphonic ScriptProcessorNode\n */\nexport class FaustScriptProcessorNode<\n Poly extends boolean = false\n> extends (globalThis.ScriptProcessorNode || null) {\n protected fDSPCode!: Poly extends true\n ? FaustPolyWebAudioDsp\n : FaustMonoWebAudioDsp;\n\n // Needed for ScriptProcessorNode\n protected fInputs!: Float32Array[];\n protected fOutputs!: Float32Array[];\n protected handleDeviceMotion = undefined as any;\n protected handleDeviceOrientation = undefined as any;\n\n setupNode(\n instance: Poly extends true\n ? FaustPolyWebAudioDsp\n : FaustMonoWebAudioDsp\n ) {\n this.fDSPCode = instance;\n\n this.fInputs = new Array(this.fDSPCode.getNumInputs());\n this.fOutputs = new Array(this.fDSPCode.getNumOutputs());\n\n // Accelerometer and gyroscope handlers\n this.handleDeviceMotion = ({\n accelerationIncludingGravity\n }: DeviceMotionEvent) => {\n const isAndroid: boolean = /Android/i.test(navigator.userAgent);\n if (!accelerationIncludingGravity) return;\n const { x, y, z } = accelerationIncludingGravity;\n this.propagateAcc({ x, y, z }, isAndroid);\n };\n\n this.handleDeviceOrientation = ({\n alpha,\n beta,\n gamma\n }: DeviceOrientationEvent) => {\n this.propagateGyr({ alpha, beta, gamma });\n };\n\n this.onaudioprocess = (e) => {\n // Read inputs\n for (let chan = 0; chan < this.fDSPCode.getNumInputs(); chan++) {\n this.fInputs[chan] = e.inputBuffer.getChannelData(chan);\n }\n\n // Read outputs\n for (let chan = 0; chan < this.fDSPCode.getNumOutputs(); chan++) {\n this.fOutputs[chan] = e.outputBuffer.getChannelData(chan);\n }\n\n return this.fDSPCode.compute(this.fInputs, this.fOutputs);\n };\n\n this.start();\n }\n\n init() {\n this.fDSPCode.init();\n }\n\n instanceInit() {\n this.fDSPCode.instanceInit();\n }\n\n instanceClear() {\n this.fDSPCode.instanceClear();\n }\n\n instanceConstants() {\n this.fDSPCode.instanceConstants();\n }\n\n instanceResetUserInterface() {\n this.fDSPCode.instanceResetUserInterface();\n }\n\n // Public API\n\n /** Start accelerometer and gyroscope handlers */\n async startSensors() {\n if (this.hasAccInput) {\n if (window.DeviceMotionEvent) {\n // iOS 13+ requires a user gesture to enable DeviceMotionEvent, to be done in the main thread\n window.addEventListener(\n 'devicemotion',\n this.handleDeviceMotion,\n true\n );\n } else {\n // Browser doesn't support DeviceMotionEvent\n console.log('Cannot set the accelerometer handler.');\n }\n }\n if (this.hasGyrInput) {\n if (window.DeviceMotionEvent) {\n // iOS 13+ requires a user gesture to enable DeviceMotionEvent, to be done in the main thread\n window.addEventListener(\n 'deviceorientation',\n this.handleDeviceOrientation,\n true\n );\n } else {\n // Browser doesn't support DeviceMotionEvent\n console.log('Cannot set the gyroscope handler.');\n }\n }\n }\n\n /** Stop accelerometer and gyroscope handlers */\n stopSensors() {\n if (this.hasAccInput) {\n window.removeEventListener(\n 'devicemotion',\n this.handleDeviceMotion,\n true\n );\n }\n if (this.hasGyrInput) {\n window.removeEventListener(\n 'deviceorientation',\n this.handleDeviceOrientation,\n true\n );\n }\n }\n\n compute(input: Float32Array[], output: Float32Array[]) {\n return this.fDSPCode.compute(input, output);\n }\n\n setOutputParamHandler(handler: OutputParamHandler) {\n this.fDSPCode.setOutputParamHandler(handler);\n }\n getOutputParamHandler() {\n return this.fDSPCode.getOutputParamHandler();\n }\n callOutputParamHandler(path: string, value: number) {\n this.fDSPCode.callOutputParamHandler(path, value);\n }\n\n setInputParamHandler(handler: InputParamHandler) {\n this.fDSPCode.setInputParamHandler(handler);\n }\n getInputParamHandler() {\n return this.fDSPCode.getInputParamHandler();\n }\n callInputParamHandler(path: string, value: number) {\n this.fDSPCode.callInputParamHandler(path, value);\n }\n\n setComputeHandler(handler: ComputeHandler) {\n this.fDSPCode.setComputeHandler(handler);\n }\n getComputeHandler() {\n return this.fDSPCode.getComputeHandler();\n }\n\n setPlotHandler(handler: PlotHandler) {\n this.fDSPCode.setPlotHandler(handler);\n }\n getPlotHandler() {\n return this.fDSPCode.getPlotHandler();\n }\n\n getNumInputs() {\n return this.fDSPCode.getNumInputs();\n }\n getNumOutputs() {\n return this.fDSPCode.getNumOutputs();\n }\n\n metadata(handler: MetadataHandler) {}\n\n midiMessage(data: number[] | Uint8Array) {\n this.fDSPCode.midiMessage(data);\n }\n\n ctrlChange(chan: number, ctrl: number, value: number) {\n this.fDSPCode.ctrlChange(chan, ctrl, value);\n }\n pitchWheel(chan: number, value: number) {\n this.fDSPCode.pitchWheel(chan, value);\n }\n keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n\n setParamValue(path: string, value: number) {\n this.fDSPCode.setParamValue(path, value);\n }\n getParamValue(path: string) {\n return this.fDSPCode.getParamValue(path);\n }\n getParams() {\n return this.fDSPCode.getParams();\n }\n\n getMeta() {\n return this.fDSPCode.getMeta();\n }\n getJSON() {\n return this.fDSPCode.getJSON();\n }\n getDescriptors() {\n return this.fDSPCode.getDescriptors();\n }\n getUI() {\n return this.fDSPCode.getUI();\n }\n\n start() {\n this.fDSPCode.start();\n }\n stop() {\n this.fDSPCode.stop();\n }\n\n destroy() {\n this.fDSPCode.destroy();\n }\n\n get hasAccInput() {\n return this.fDSPCode.hasAccInput;\n }\n\n propagateAcc(\n accelerationIncludingGravity: NonNullable<\n DeviceMotionEvent['accelerationIncludingGravity']\n >,\n invert: boolean = false\n ) {\n this.fDSPCode.propagateAcc(accelerationIncludingGravity, invert);\n }\n\n get hasGyrInput() {\n return this.fDSPCode.hasGyrInput;\n }\n\n propagateGyr(\n event: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>\n ) {\n this.fDSPCode.propagateGyr(event);\n }\n}\n\nexport class FaustMonoScriptProcessorNode\n extends FaustScriptProcessorNode<false>\n implements IFaustMonoWebAudioDsp {}\n\nexport class FaustPolyScriptProcessorNode\n extends FaustScriptProcessorNode<true>\n implements IFaustPolyWebAudioDsp\n{\n keyOn(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOn(channel, pitch, velocity);\n }\n keyOff(channel: number, pitch: number, velocity: number) {\n this.fDSPCode.keyOff(channel, pitch, velocity);\n }\n allNotesOff(hard: boolean) {\n this.fDSPCode.allNotesOff(hard);\n }\n}\n", "import {\n FaustMonoAudioWorkletNode,\n FaustPolyAudioWorkletNode\n} from './FaustAudioWorkletNode';\nimport getFaustAudioWorkletProcessor, {\n FaustData\n} from './FaustAudioWorkletProcessor';\nimport getFaustFFTAudioWorkletProcessor, {\n FaustFFTData,\n FaustFFTOptionsData\n} from './FaustFFTAudioWorkletProcessor';\nimport { FaustDspInstance } from './FaustDspInstance';\nimport FaustWasmInstantiator from './FaustWasmInstantiator';\nimport {\n FaustMonoOfflineProcessor,\n FaustPolyOfflineProcessor,\n IFaustMonoOfflineProcessor,\n IFaustPolyOfflineProcessor\n} from './FaustOfflineProcessor';\nimport {\n FaustMonoScriptProcessorNode,\n FaustPolyScriptProcessorNode\n} from './FaustScriptProcessorNode';\nimport {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n FaustPolyWebAudioDsp,\n FaustWebAudioDspVoice,\n IFaustMonoWebAudioNode,\n IFaustPolyWebAudioNode,\n Soundfile,\n WasmAllocator\n} from './FaustWebAudioDsp';\nimport SoundfileReader from './SoundfileReader';\nimport FaustSensors from './FaustSensors';\nimport FaustCompiler, { IFaustCompiler } from './FaustCompiler';\nimport type {\n FaustDspFactory,\n FaustUIDescriptor,\n FaustDspMeta,\n FFTUtils,\n LooseFaustDspFactory,\n AudioData\n} from './types';\nimport {\n FaustAudioWorkletCommunicator,\n FaustAudioWorkletProcessorCommunicator\n} from './FaustAudioWorkletCommunicator';\nimport instantiateFaustModuleFromFile from './instantiateFaustModuleFromFile';\nimport LibFaust from './LibFaust';\n\nexport interface GeneratorSupportingSoundfiles {\n /**\n * Attach a map of id - audio data, call after `compile()` before `createNode()`\n *\n * @param soundfileMap a map of id - `AudioData` as an object where `AudioData` contains channel data as `audioBuffer: Float32Array[]` and `sampleRate: number`\n */\n addSoundfiles(soundfileMap: Record<string, AudioData>): void;\n\n /**\n * Get a list of soundfiles needed, call after `compile()`\n */\n getSoundfileList(): string[];\n}\n\nexport interface IFaustDspGenerator {\n /**\n * Create a monophonic or polyphonic WebAudio node (either ScriptProcessorNode or AudioWorkletNode).\n * Analyze the code to decide whether to create a monophonic or polyphonic node.\n *\n * @param context - the WebAudio context\n * @param name - DSP name, can be used for processorName\n * @param code - the DSP code\n * @param sp - whether to compile a ScriptProcessorNode or an AudioWorkletNode\n * @param bufferSize - the buffer size in frames to be used in ScriptProcessorNode only, since AudioWorkletNode always uses 128 frames\n * @returns the compiled monophonic or polyphonic WebAudio node or 'null' if failure\n */\n createFaustNode(\n context: BaseAudioContext,\n name: string,\n code: string,\n sp?: boolean,\n bufferSize?: number,\n ): Promise<IFaustMonoWebAudioNode | IFaustPolyWebAudioNode | null>;\n}\n\nexport interface IFaustMonoDspGenerator extends GeneratorSupportingSoundfiles {\n /**\n * Compile a monophonic DSP factory from given code.\n *\n * @param compiler - the Faust compiler\n * @param name - the DSP name\n * @param code - the DSP code\n * @param args - the compilation parameters\n * @returns the compiled factory or 'null' if failure\n */\n compile(\n compiler: IFaustCompiler,\n name: string,\n code: string,\n args: string\n ): Promise<{\n factory: FaustDspFactory | null;\n name?: string;\n meta?: FaustDspMeta;\n } | null>;\n\n /**\n * Create a monophonic WebAudio node (either ScriptProcessorNode or AudioWorkletNode).\n *\n * @param context - the WebAudio context\n * @param name - DSP name, can be used for processorName\n * @param factory - default is the compiled factory\n * @param sp - whether to compile a ScriptProcessorNode or an AudioWorkletNode\n * @param bufferSize - the buffer size in frames to be used in ScriptProcessorNode only, since AudioWorkletNode always uses 128 frames\n * @param processorName - AudioWorklet Processor name\n * @param processorOptions - Additional AudioWorklet Processor options\n * @returns the compiled WebAudio node or 'null' if failure\n */\n createNode(\n context: BaseAudioContext,\n name?: string,\n factory?: LooseFaustDspFactory,\n sp?: boolean,\n bufferSize?: number,\n processorName?: string,\n processorOptions?: Record<string, any>\n ): Promise<IFaustMonoWebAudioNode | null>;\n\n /**\n * Create a monophonic WebAudio node (either ScriptProcessorNode or AudioWorkletNode).\n *\n * @param context - the WebAudio context\n * @param fftUtils - should be an anonymous class with static methods, without any import from outside\n * @param name - DSP name, can be used for processorName\n * @param factory - default is the compiled factory\n * @param fftOptions - initial FFT options\n * @param processorName - AudioWorklet Processor name\n * @param processorOptions - Additional AudioWorklet Processor options\n * @returns the compiled WebAudio node or 'null' if failure\n */\n createFFTNode(\n context: BaseAudioContext,\n fftUtils: typeof FFTUtils,\n name?: string,\n factory?: LooseFaustDspFactory,\n fftOptions?: Partial<FaustFFTOptionsData>,\n processorName?: string,\n processorOptions?: Record<string, any>\n ): Promise<FaustMonoAudioWorkletNode | null>;\n\n /**\n * Create a monophonic Offline processor.\n *\n * @param sampleRate - the sample rate in Hz\n * @param bufferSize - the buffer size in frames\n * @param factory - default is the compiled factory\n * @param context - if this exists, will be used to fetch soundfiles online\n * @returns the compiled processor or 'null' if failure\n */\n createOfflineProcessor(\n sampleRate: number,\n bufferSize: number,\n factory?: LooseFaustDspFactory,\n context?: BaseAudioContext\n ): Promise<IFaustMonoOfflineProcessor | null>;\n\n /**\n * Get DSP JSON description with its UI and metadata as object.\n *\n * @return the DSP JSON description as object\n */\n getMeta(): FaustDspMeta;\n\n /**\n * Get DSP JSON description with its UI and metadata.\n *\n * @return the DSP JSON description\n */\n getJSON(): string;\n\n /**\n * Get DSP UI description.\n *\n * @return the DSP UI description\n */\n getUI(): FaustUIDescriptor;\n}\n\nexport interface IFaustPolyDspGenerator extends GeneratorSupportingSoundfiles {\n /**\n * Compile a monophonic DSP factory from given code.\n *\n * @param compiler - the Faust compiler\n * @param name - the DSP name\n * @param dspCode - the DSP code ('dspCode' can possibly contain an integrated effect)\n * @param args - the compilation parameters\n * @param effectCode - optional effect DSP code\n * @returns the compiled factory or 'null' if failure\n */\n compile(\n compiler: IFaustCompiler,\n name: string,\n dspCode: string,\n args: string,\n effectCode?: string\n ): Promise<{\n voiceFactory: FaustDspFactory | null;\n effectFactory?: FaustDspFactory | null;\n } | null>;\n\n /**\n * Create a polyphonic WebAudio node (either ScriptProcessorNode or AudioWorkletNode).\n *\n * @param context the WebAudio context\n * @param voices - the number of voices\n * @param name - AudioWorklet Processor name\n * @param voiceFactory - the Faust factory for voices, either obtained with a compiler (createDSPFactory) or loaded from files (loadDSPFactory)\n * @param mixerModule - the wasm Mixer module (loaded from 'mixer32.wasm' or 'mixer64.wasm' files located in the 'faustwasm' package)\n * @param effectFactory - the Faust factory for the effect, either obtained with a compiler (createDSPFactory) or loaded from files (loadDSPFactory)\n * @param sp - whether to compile a ScriptProcessorNode or an AudioWorkletNode\n * @param bufferSize - the buffer size in frames to be used in ScriptProcessorNode only, since AudioWorkletNode always uses 128 frames\n * @param processorOptions - Additional AudioWorklet Processor options\n * @returns the compiled WebAudio node or 'null' if failure\n */\n createNode(\n context: BaseAudioContext,\n voices: number,\n name?: string,\n voiceFactory?: LooseFaustDspFactory,\n mixerModule?: WebAssembly.Module,\n effectFactory?: LooseFaustDspFactory | null,\n sp?: boolean,\n bufferSize?: number,\n processorName?: string,\n processorOptions?: Record<string, any>\n ): Promise<IFaustPolyWebAudioNode | null>;\n\n /**\n * Create a monophonic Offline processor.\n *\n * @param sampleRate - the sample rate in Hz\n * @param bufferSize - the buffer size in frames\n * @param voiceFactory - the Faust factory for voices, either obtained with a compiler (createDSPFactory) or loaded from files (loadDSPFactory)\n * @param mixerModule - the wasm Mixer module (loaded from 'mixer32.wasm' or 'mixer64.wasm' files)\n * @param effectFactory - the Faust factory for the effect, either obtained with a compiler (createDSPFactory) or loaded from files (loadDSPFactory)\n * @param context - if this exists, will be used to fetch soundfiles online\n * @returns the compiled processor or 'null' if failure\n */\n createOfflineProcessor(\n sampleRate: number,\n bufferSize: number,\n voices: number,\n voiceFactory?: LooseFaustDspFactory,\n mixerModule?: WebAssembly.Module,\n effectFactory?: LooseFaustDspFactory | null,\n context?: BaseAudioContext\n ): Promise<IFaustPolyOfflineProcessor | null>;\n\n /**\n * Get DSP JSON description with its UI and metadata as object.\n *\n * @return the DSP JSON description as object\n */\n getMeta(): FaustDspMeta;\n\n /**\n * Get DSP JSON description with its UI and metadata.\n *\n * @return the DSP JSON description\n */\n getJSON(): string;\n\n /**\n * Get DSP UI description.\n *\n * @return the DSP UI description\n */\n getUI(): FaustUIDescriptor;\n}\n\nexport class FaustMonoDspGenerator implements IFaustMonoDspGenerator {\n // Set of all created WorkletProcessors, each of them has to be unique\n private static gWorkletProcessors: Map<BaseAudioContext, Set<string>> =\n new Map();\n\n name: string;\n factory!: FaustDspFactory | null;\n\n constructor() {\n this.factory = null;\n }\n async compile(\n compiler: IFaustCompiler,\n name: string,\n code: string,\n args: string\n ) {\n this.factory = await compiler.createMonoDSPFactory(name, code, args);\n if (this.factory) {\n this.name = name;\n return this;\n } else {\n return null;\n }\n }\n\n addSoundfiles(soundfileMap: Record<string, AudioData>) {\n if (!this.factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n for (const id in soundfileMap) {\n this.factory.soundfiles[id] = soundfileMap[id];\n }\n }\n getSoundfileList() {\n if (!this.factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n const meta = JSON.parse(this.factory.json);\n const map = SoundfileReader.findSoundfilesFromMeta(meta);\n if (!map) return [];\n return Object.keys(map);\n }\n\n async createNode<SP extends boolean = false>(\n context: BaseAudioContext,\n name = this.name,\n factory = this.factory as LooseFaustDspFactory,\n sp = false as SP,\n bufferSize = 1024,\n processorName = factory?.shaKey || name,\n processorOptions: Record<string, any> = {}\n ): Promise<\n SP extends true\n ? FaustMonoScriptProcessorNode | null\n : FaustMonoAudioWorkletNode | null\n > {\n if (!factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const meta = JSON.parse(factory.json);\n const sampleSize = meta.compile_options.match('-double') ? 8 : 4;\n factory.soundfiles = await SoundfileReader.loadSoundfiles(\n meta,\n factory.soundfiles || {},\n context\n );\n if (sp) {\n const instance =\n await FaustWasmInstantiator.createAsyncMonoDSPInstance(factory);\n const monoDsp = new FaustMonoWebAudioDsp(\n instance,\n context.sampleRate,\n sampleSize,\n bufferSize,\n factory.soundfiles\n );\n\n const sp = context.createScriptProcessor(\n bufferSize,\n monoDsp.getNumInputs(),\n monoDsp.getNumOutputs()\n ) as FaustMonoScriptProcessorNode;\n Object.setPrototypeOf(sp, FaustMonoScriptProcessorNode.prototype);\n sp.setupNode(monoDsp);\n return sp as SP extends true\n ? FaustMonoScriptProcessorNode\n : FaustMonoAudioWorkletNode;\n } else {\n // Dynamically create AudioWorkletProcessor if code not yet created\n if (!FaustMonoDspGenerator.gWorkletProcessors.has(context))\n FaustMonoDspGenerator.gWorkletProcessors.set(\n context,\n new Set()\n );\n if (\n !FaustMonoDspGenerator.gWorkletProcessors\n .get(context)\n ?.has(processorName)\n ) {\n try {\n const processorCode = `\n// DSP name and JSON string for DSP are generated\nconst faustData = ${JSON.stringify({\n processorName,\n dspName: name,\n dspMeta: meta,\n poly: false\n } as FaustData)};\n// Implementation needed classes of functions\nvar ${FaustDspInstance.name} = ${FaustDspInstance.toString()}\nvar FaustDspInstance = ${FaustDspInstance.name};\nvar ${FaustBaseWebAudioDsp.name} = ${FaustBaseWebAudioDsp.toString()}\nvar FaustBaseWebAudioDsp = ${FaustBaseWebAudioDsp.name};\nvar ${FaustMonoWebAudioDsp.name} = ${FaustMonoWebAudioDsp.toString()}\nvar FaustMonoWebAudioDsp = ${FaustMonoWebAudioDsp.name};\nvar ${FaustWasmInstantiator.name} = ${FaustWasmInstantiator.toString()}\nvar FaustWasmInstantiator = ${FaustWasmInstantiator.name};\nvar ${Soundfile.name} = ${Soundfile.toString()}\nvar Soundfile = ${Soundfile.name};\nvar ${WasmAllocator.name} = ${WasmAllocator.toString()}\nvar WasmAllocator = ${WasmAllocator.name};\nvar ${FaustSensors.name} = ${FaustSensors.toString()}\nvar FaustSensors = ${FaustSensors.name};\nvar ${FaustAudioWorkletCommunicator.name} = ${FaustAudioWorkletCommunicator.toString()}\nvar FaustAudioWorkletCommunicator = ${FaustAudioWorkletCommunicator.name};\nvar ${FaustAudioWorkletProcessorCommunicator.name} = ${FaustAudioWorkletProcessorCommunicator.toString()}\nvar FaustAudioWorkletProcessorCommunicator = ${FaustAudioWorkletProcessorCommunicator.name};\n// Put them in dependencies\nconst dependencies = {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n FaustWasmInstantiator,\n FaustAudioWorkletProcessorCommunicator\n};\n// Generate the actual AudioWorkletProcessor code\n(${getFaustAudioWorkletProcessor.toString()})(dependencies, faustData);\n`;\n const url = URL.createObjectURL(\n new Blob([processorCode], { type: 'text/javascript' })\n );\n await context.audioWorklet.addModule(url);\n // Keep the DSP name\n FaustMonoDspGenerator.gWorkletProcessors\n .get(context)\n ?.add(processorName);\n } catch (e) {\n // console.error(`=> exception raised while running createMonoNode: ${e}`);\n // console.error(`=> check that your page is served using https.${e}`);\n throw e;\n }\n }\n // Create the AWN\n const node = new FaustMonoAudioWorkletNode(context, {\n processorOptions: {\n name: processorName,\n factory,\n sampleSize,\n ...processorOptions\n }\n });\n\n return node as SP extends true\n ? FaustMonoScriptProcessorNode\n : FaustMonoAudioWorkletNode;\n }\n }\n\n async createFFTNode(\n context: BaseAudioContext,\n fftUtils: typeof FFTUtils,\n name = this.name,\n factory = this.factory as LooseFaustDspFactory,\n fftOptions: Partial<FaustFFTOptionsData> = {},\n processorName = factory?.shaKey ? `${factory.shaKey}_fft` : name,\n processorOptions: Record<string, any> = {}\n ): Promise<FaustMonoAudioWorkletNode | null> {\n if (!factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const meta: FaustDspMeta = JSON.parse(factory.json);\n const sampleSize = meta.compile_options.match('-double') ? 8 : 4;\n factory.soundfiles = await SoundfileReader.loadSoundfiles(\n meta,\n factory.soundfiles || {},\n context\n );\n // Dynamically create AudioWorkletProcessor if code not yet created\n if (!FaustMonoDspGenerator.gWorkletProcessors.has(context))\n FaustMonoDspGenerator.gWorkletProcessors.set(context, new Set());\n if (\n !FaustMonoDspGenerator.gWorkletProcessors\n .get(context)\n ?.has(processorName)\n ) {\n try {\n const processorCode = `\n// DSP name and JSON string for DSP are generated\nconst faustData = ${JSON.stringify({\n processorName,\n dspName: name,\n dspMeta: meta,\n fftOptions\n } as FaustFFTData)};\n// Implementation needed classes of functions\nvar ${FaustDspInstance.name} = ${FaustDspInstance.toString()}\nvar FaustDspInstance = ${FaustDspInstance.name};\nvar ${FaustBaseWebAudioDsp.name} = ${FaustBaseWebAudioDsp.toString()}\nvar FaustBaseWebAudioDsp = ${FaustBaseWebAudioDsp.name};\nvar ${FaustMonoWebAudioDsp.name} = ${FaustMonoWebAudioDsp.toString()}\nvar FaustMonoWebAudioDsp = ${FaustMonoWebAudioDsp.name};\nvar ${FaustWasmInstantiator.name} = ${FaustWasmInstantiator.toString()}\nvar FaustWasmInstantiator = ${FaustWasmInstantiator.name};\nvar ${Soundfile.name} = ${Soundfile.toString()}\nvar Soundfile = ${Soundfile.name};\nvar ${WasmAllocator.name} = ${WasmAllocator.toString()}\nvar WasmAllocator = ${WasmAllocator.name};\nvar ${FaustSensors.name} = ${FaustSensors.toString()}\nvar FaustSensors = ${FaustSensors.name};\nvar ${FaustAudioWorkletCommunicator.name} = ${FaustAudioWorkletCommunicator.toString()}\nvar FaustAudioWorkletCommunicator = ${FaustAudioWorkletCommunicator.name};\nvar ${FaustAudioWorkletProcessorCommunicator.name} = ${FaustAudioWorkletProcessorCommunicator.toString()}\nvar FaustAudioWorkletProcessorCommunicator = ${FaustAudioWorkletProcessorCommunicator.name};\nvar FFTUtils = ${fftUtils.toString()}\n// Put them in dependencies\nconst dependencies = {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n FaustWasmInstantiator,\n FaustAudioWorkletProcessorCommunicator,\n FFTUtils\n};\n// Generate the actual AudioWorkletProcessor code\n(${getFaustFFTAudioWorkletProcessor.toString()})(dependencies, faustData);\n`;\n const url = URL.createObjectURL(\n new Blob([processorCode], { type: 'text/javascript' })\n );\n await context.audioWorklet.addModule(url);\n // Keep the DSP name\n FaustMonoDspGenerator.gWorkletProcessors\n .get(context)\n ?.add(processorName);\n } catch (e) {\n // console.error(`=> exception raised while running createMonoNode: ${e}`);\n // console.error(`=> check that your page is served using https.${e}`);\n throw e;\n }\n }\n // Create the AWN\n const node = new FaustMonoAudioWorkletNode(context, {\n channelCount: Math.max(1, Math.ceil(meta.inputs / 3)),\n outputChannelCount: [Math.ceil(meta.outputs / 2)],\n processorOptions: {\n name: processorName,\n factory,\n sampleSize,\n ...processorOptions\n }\n });\n if (fftOptions.fftSize) {\n const param = node.parameters.get('fftSize');\n if (param) param.value = fftOptions.fftSize;\n }\n if (fftOptions.fftOverlap) {\n const param = node.parameters.get('fftOverlap');\n if (param) param.value = fftOptions.fftOverlap;\n }\n if (typeof fftOptions.defaultWindowFunction === 'number') {\n const param = node.parameters.get('windowFunction');\n if (param) param.value = fftOptions.defaultWindowFunction + 1;\n }\n if (typeof fftOptions.noIFFT === 'boolean') {\n const param = node.parameters.get('noIFFT');\n if (param) param.value = +fftOptions.noIFFT;\n }\n return node;\n }\n\n async createAudioWorkletProcessor(\n name = this.name,\n factory = this.factory as LooseFaustDspFactory,\n processorName = factory?.shaKey || name\n ) {\n if (!factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const meta = JSON.parse(factory.json);\n const dependencies = {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp,\n FaustWasmInstantiator,\n FaustAudioWorkletProcessorCommunicator,\n FaustPolyWebAudioDsp: undefined,\n FaustWebAudioDspVoice: undefined\n };\n // const sampleSize = meta.compile_options.match(\"-double\") ? 8 : 4;\n // Dynamically create AudioWorkletProcessor if code not yet created\n try {\n // DSP name and JSON string for DSP are generated\n const faustData = {\n processorName,\n dspName: name,\n dspMeta: meta,\n poly: false\n } as FaustData;\n // Generate the actual AudioWorkletProcessor code\n const Processor = getFaustAudioWorkletProcessor(\n dependencies,\n faustData\n );\n return Processor;\n } catch (e) {\n // console.error(`=> exception raised while running createMonoNode: ${e}`);\n // console.error(`=> check that your page is served using https.${e}`);\n throw e;\n }\n }\n\n async createOfflineProcessor(\n sampleRate: number,\n bufferSize: number,\n factory = this.factory as LooseFaustDspFactory,\n context?: BaseAudioContext\n ) {\n if (!factory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const meta = JSON.parse(factory.json);\n const instance =\n await FaustWasmInstantiator.createAsyncMonoDSPInstance(factory);\n const sampleSize = meta.compile_options.match('-double') ? 8 : 4;\n if (context)\n factory.soundfiles = await SoundfileReader.loadSoundfiles(\n meta,\n factory.soundfiles || {},\n context\n );\n const monoDsp = new FaustMonoWebAudioDsp(\n instance,\n sampleRate,\n sampleSize,\n bufferSize,\n factory.soundfiles\n );\n return new FaustMonoOfflineProcessor(monoDsp, bufferSize);\n }\n\n getMeta() {\n return JSON.parse(this.factory!.json);\n }\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n getUI() {\n return this.getMeta().ui;\n }\n}\n\nexport class FaustPolyDspGenerator implements IFaustPolyDspGenerator {\n // Set of all created WorkletProcessors, each of them has to be unique\n private static gWorkletProcessors: Map<BaseAudioContext, Set<string>> =\n new Map();\n\n name: string;\n voiceFactory!: FaustDspFactory | null;\n effectFactory!: FaustDspFactory | null;\n mixerBuffer!: Uint8Array;\n mixerModule!: WebAssembly.Module;\n\n constructor() {\n this.voiceFactory = null;\n this.effectFactory = null;\n }\n async compile(\n compiler: IFaustCompiler,\n name: string,\n dspCodeAux: string,\n args: string,\n // The ${dspCode} has to be added with wrapping new lines to make it properly formatted and ready to compile\n effectCodeAux = `dsp_code = environment{\n ${dspCodeAux}\n };\n process = dsp_code.effect;`\n ) {\n // Try to compile effect, possibly failing\n try {\n this.effectFactory = await compiler.createPolyDSPFactory(\n name,\n effectCodeAux,\n args\n );\n // Since the effect is processing the same buffers for inputs and outputs (in place processing),\n // the voice and effect are adapted, possibly clearing buffers\n if (this.effectFactory) {\n const effectJSON = JSON.parse(this.effectFactory.json);\n const dspCode = `\\\n// Voice output is forced to 2, when DSP is stereo or effect has 2 ins or 2 outs,\n// so that the effect can process the 2 channels of the voice\nadaptOut(1,1,1) = _;\nadaptOut(1,1,2) = _ <: _,0; // The left channel only is kept\nadaptOut(1,2,1) = _ <: _,_;\nadaptOut(1,2,2) = _ <: _,_;\nadaptOut(2,1,1) = _,_;\nadaptOut(2,1,2) = _,_;\nadaptOut(2,2,1) = _,_;\nadaptOut(2,2,2) = _,_;\nadaptor(F) = adaptOut(outputs(F),${effectJSON.inputs},${effectJSON.outputs});\ndsp_code = environment{\n ${dspCodeAux}\n};\nprocess = dsp_code.process : adaptor(dsp_code.process);\n`;\n const effectCode = `\\\n// Inputs\nadaptIn(1,1,1) = _;\nadaptIn(1,1,2) = _,_ :> _; \nadaptIn(1,2,1) = _,_;\nadaptIn(1,2,2) = _,_;\nadaptIn(2,1,1) = _,_ :> _;\nadaptIn(2,1,2) = _,_ :> _;\nadaptIn(2,2,1) = _,_;\nadaptIn(2,2,2) = _,_;\n// Outputs\nadaptOut(1,1) = _ <: _,0; // The left channel only is kept\nadaptOut(1,2) = _,_;\nadaptOut(2,1) = _ <: _,0; // The left channel only is kept\nadaptOut(2,2) = _,_;\nadaptorIns(F) = adaptIn(outputs(F),${effectJSON.inputs},${effectJSON.outputs});\nadaptorOuts = adaptOut(${effectJSON.inputs},${effectJSON.outputs});\ndsp_code = environment{\n ${dspCodeAux}\n};\nprocess = adaptorIns(dsp_code.process) : dsp_code.effect : adaptorOuts;\n`;\n this.voiceFactory = await compiler.createPolyDSPFactory(\n name,\n dspCode,\n args\n );\n try {\n // Effect is processing same buffers for inputs and outputs, so has to use -inpl option\n this.effectFactory = await compiler.createPolyDSPFactory(\n name,\n effectCode,\n args + ' -inpl'\n );\n } catch (e) {\n console.warn(e);\n }\n }\n } catch (e) {\n // Hack to detect 'undefined effect' symbol error, when no effect is defined in the polyphonic code.\n // The error message is not printed to avoid confusing the user.\n const errorMessage =\n e instanceof Error ? e.message : String(e ?? 'unknown error');\n if (!errorMessage.includes('undefined symbol : effect')) {\n console.warn(e);\n }\n this.voiceFactory = await compiler.createPolyDSPFactory(\n name,\n dspCodeAux,\n args\n );\n }\n\n if (this.voiceFactory) {\n this.name = name;\n const voiceMeta = JSON.parse(this.voiceFactory.json);\n const isDouble = voiceMeta.compile_options.match('-double');\n const { mixerBuffer, mixerModule } =\n await compiler.getAsyncInternalMixerModule(!!isDouble);\n this.mixerBuffer = mixerBuffer;\n this.mixerModule = mixerModule;\n return this;\n } else {\n return null;\n }\n }\n\n addSoundfiles(soundfileMap: Record<string, AudioData>) {\n if (!this.voiceFactory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n for (const id in soundfileMap) {\n this.voiceFactory.soundfiles[id] = soundfileMap[id];\n }\n }\n getSoundfileList() {\n if (!this.voiceFactory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n const meta = JSON.parse(this.voiceFactory.json);\n const map = SoundfileReader.findSoundfilesFromMeta(meta);\n if (!map) return [];\n if (!this.effectFactory) return Object.keys(map);\n const effectMeta = JSON.parse(this.effectFactory.json);\n const effectMap = SoundfileReader.findSoundfilesFromMeta(effectMeta);\n return Object.keys({ ...effectMap, ...map });\n }\n\n async createNode<SP extends boolean = false>(\n context: BaseAudioContext,\n voices: number,\n name = this.name,\n voiceFactory = this.voiceFactory as LooseFaustDspFactory,\n mixerModule = this.mixerModule,\n effectFactory = this.effectFactory as LooseFaustDspFactory | null,\n sp = false as SP,\n bufferSize = 1024,\n processorName = (voiceFactory?.shaKey || '') +\n (effectFactory?.shaKey || '') || `${name}_poly`,\n processorOptions = {}\n ): Promise<\n SP extends true\n ? FaustPolyScriptProcessorNode | null\n : FaustPolyAudioWorkletNode | null\n > {\n if (!voiceFactory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const voiceMeta = JSON.parse(voiceFactory.json);\n const effectMeta = effectFactory\n ? JSON.parse(effectFactory.json)\n : undefined;\n const sampleSize = voiceMeta.compile_options.match('-double') ? 8 : 4;\n voiceFactory.soundfiles = await SoundfileReader.loadSoundfiles(\n voiceMeta,\n voiceFactory.soundfiles || {},\n context\n );\n if (effectFactory)\n effectFactory.soundfiles = await SoundfileReader.loadSoundfiles(\n effectMeta,\n effectFactory.soundfiles || {},\n context\n );\n if (sp) {\n const instance =\n await FaustWasmInstantiator.createAsyncPolyDSPInstance(\n voiceFactory,\n mixerModule,\n voices,\n effectFactory || undefined\n );\n const soundfiles = {\n ...effectFactory?.soundfiles,\n ...voiceFactory.soundfiles\n };\n const polyDsp = new FaustPolyWebAudioDsp(\n instance,\n context.sampleRate,\n sampleSize,\n bufferSize,\n soundfiles\n );\n\n const sp = context.createScriptProcessor(\n bufferSize,\n polyDsp.getNumInputs(),\n polyDsp.getNumOutputs()\n ) as FaustPolyScriptProcessorNode;\n Object.setPrototypeOf(sp, FaustPolyScriptProcessorNode.prototype);\n sp.setupNode(polyDsp);\n return sp as SP extends true\n ? FaustPolyScriptProcessorNode\n : FaustPolyAudioWorkletNode;\n } else {\n // Dynamically create AudioWorkletProcessor if code not yet created\n if (!FaustPolyDspGenerator.gWorkletProcessors.has(context))\n FaustPolyDspGenerator.gWorkletProcessors.set(\n context,\n new Set()\n );\n if (\n !FaustPolyDspGenerator.gWorkletProcessors\n .get(context)\n ?.has(processorName)\n ) {\n try {\n const processorCode = `\n// DSP name and JSON string for DSP are generated\nconst faustData = ${JSON.stringify({\n processorName,\n dspName: name,\n dspMeta: voiceMeta,\n poly: true,\n effectMeta\n } as FaustData)};\n// Implementation needed classes of functions\nvar ${FaustDspInstance.name} = ${FaustDspInstance.toString()}\nvar FaustDspInstance = ${FaustDspInstance.name};\nvar ${FaustBaseWebAudioDsp.name} = ${FaustBaseWebAudioDsp.toString()}\nvar FaustBaseWebAudioDsp = ${FaustBaseWebAudioDsp.name};\nvar ${FaustPolyWebAudioDsp.name} = ${FaustPolyWebAudioDsp.toString()}\nvar FaustPolyWebAudioDsp = ${FaustPolyWebAudioDsp.name};\nvar ${FaustWebAudioDspVoice.name} = ${FaustWebAudioDspVoice.toString()}\nvar FaustWebAudioDspVoice = ${FaustWebAudioDspVoice.name};\nvar ${FaustWasmInstantiator.name} = ${FaustWasmInstantiator.toString()}\nvar FaustWasmInstantiator = ${FaustWasmInstantiator.name};\nvar ${Soundfile.name} = ${Soundfile.toString()}\nvar Soundfile = ${Soundfile.name};\nvar ${WasmAllocator.name} = ${WasmAllocator.toString()}\nvar WasmAllocator = ${WasmAllocator.name};\nvar ${FaustSensors.name} = ${FaustSensors.toString()}\nvar FaustSensors = ${FaustSensors.name};\nvar ${FaustAudioWorkletCommunicator.name} = ${FaustAudioWorkletCommunicator.toString()}\nvar FaustAudioWorkletCommunicator = ${FaustAudioWorkletCommunicator.name};\nvar ${FaustAudioWorkletProcessorCommunicator.name} = ${FaustAudioWorkletProcessorCommunicator.toString()}\nvar FaustAudioWorkletProcessorCommunicator = ${FaustAudioWorkletProcessorCommunicator.name};\n// Put them in dependencies\nconst dependencies = {\n FaustBaseWebAudioDsp,\n FaustPolyWebAudioDsp,\n FaustWasmInstantiator,\n FaustAudioWorkletProcessorCommunicator\n};\n// Generate the actual AudioWorkletProcessor code\n(${getFaustAudioWorkletProcessor.toString()})(dependencies, faustData);\n`;\n const url = URL.createObjectURL(\n new Blob([processorCode], { type: 'text/javascript' })\n );\n await context.audioWorklet.addModule(url);\n // Keep the DSP name\n FaustPolyDspGenerator.gWorkletProcessors\n .get(context)\n ?.add(processorName);\n } catch (e) {\n // console.error(`=> exception raised while running createPolyNode: ${e}`);\n // console.error(`=> check that your page is served using https.${e}`);\n throw e;\n }\n }\n // Create the AWN\n // `addModule` above resolves even when the module's top-level code\n // throws \u2014 the browser reports that as an unhandled error inside\n // the AudioWorkletGlobalScope rather than as a load failure. So a\n // processor that failed to register only shows up here, as\n // \"the node name '<name>' is not defined\", which reads as a naming\n // or loading problem and says nothing about the real cause. Point\n // the caller at the worklet console, where the actual error is.\n let node: FaustPolyAudioWorkletNode;\n try {\n node = new FaustPolyAudioWorkletNode(context, {\n processorOptions: {\n name: processorName,\n voiceFactory,\n mixerModule,\n voices,\n sampleSize,\n effectFactory: effectFactory || undefined,\n ...processorOptions\n }\n });\n } catch (error) {\n throw new Error(\n `Faust: the AudioWorkletProcessor \"${processorName}\" did not register. ` +\n `The module loaded, so the failure happened inside registerProcessor \u2014 ` +\n `its error is reported in the AudioWorklet scope and appears in the ` +\n `browser console above this one. A duplicate control path shared ` +\n `between \\`process\\` and \\`effect\\` is the usual cause. ` +\n `Original error: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n return node as SP extends true\n ? FaustPolyScriptProcessorNode\n : FaustPolyAudioWorkletNode;\n }\n }\n\n async createAudioWorkletProcessor(\n name = this.name,\n voiceFactory = this.voiceFactory as LooseFaustDspFactory,\n effectFactory = this.effectFactory as LooseFaustDspFactory | null,\n processorName = (voiceFactory?.shaKey || '') +\n (effectFactory?.shaKey || '') || `${name}_poly`\n ) {\n if (!voiceFactory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const voiceMeta = JSON.parse(voiceFactory.json);\n const effectMeta = effectFactory\n ? JSON.parse(effectFactory.json)\n : undefined;\n const sampleSize = voiceMeta.compile_options.match('-double') ? 8 : 4;\n // Dynamically create AudioWorkletProcessor if code not yet created\n try {\n const dependencies = {\n FaustBaseWebAudioDsp,\n FaustMonoWebAudioDsp: undefined,\n FaustWasmInstantiator,\n FaustPolyWebAudioDsp,\n FaustWebAudioDspVoice,\n FaustAudioWorkletProcessorCommunicator\n };\n // DSP name and JSON string for DSP are generated\n const faustData = {\n processorName,\n dspName: name,\n dspMeta: voiceMeta,\n poly: true,\n effectMeta\n } as FaustData;\n // Generate the actual AudioWorkletProcessor code\n const Processor = getFaustAudioWorkletProcessor<true>(\n dependencies,\n faustData\n );\n return Processor;\n } catch (e) {\n // console.error(`=> exception raised while running createPolyNode: ${e}`);\n // console.error(`=> check that your page is served using https.${e}`);\n throw e;\n }\n }\n\n async createOfflineProcessor(\n sampleRate: number,\n bufferSize: number,\n voices: number,\n voiceFactory = this.voiceFactory as LooseFaustDspFactory,\n mixerModule = this.mixerModule,\n effectFactory = this.effectFactory as LooseFaustDspFactory | null,\n context?: BaseAudioContext\n ) {\n if (!voiceFactory)\n throw new Error(\n 'Code is not compiled, please define the factory or call `await this.compile()` first.'\n );\n\n const voiceMeta = JSON.parse(voiceFactory.json);\n const effectMeta = effectFactory\n ? JSON.parse(effectFactory.json)\n : undefined;\n const instance = await FaustWasmInstantiator.createAsyncPolyDSPInstance(\n voiceFactory,\n mixerModule,\n voices,\n effectFactory || undefined\n );\n const sampleSize = voiceMeta.compile_options.match('-double') ? 8 : 4;\n if (context) {\n voiceFactory.soundfiles = await SoundfileReader.loadSoundfiles(\n voiceMeta,\n voiceFactory.soundfiles || {},\n context\n );\n if (effectFactory)\n effectFactory.soundfiles = await SoundfileReader.loadSoundfiles(\n effectMeta,\n effectFactory.soundfiles || {},\n context\n );\n }\n const soundfiles = {\n ...effectFactory?.soundfiles,\n ...voiceFactory.soundfiles\n };\n const polyDsp = new FaustPolyWebAudioDsp(\n instance,\n sampleRate,\n sampleSize,\n bufferSize,\n soundfiles\n );\n return new FaustPolyOfflineProcessor(polyDsp, bufferSize);\n }\n\n getMeta() {\n const o = this.voiceFactory ? JSON.parse(this.voiceFactory.json) : null;\n const e = this.effectFactory\n ? JSON.parse(this.effectFactory.json)\n : null;\n const r = { ...o };\n if (e) {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Sequencer',\n items: [\n { type: 'vgroup', label: 'Instrument', items: o.ui },\n { type: 'vgroup', label: 'Effect', items: e.ui }\n ]\n }\n ];\n } else {\n r.ui = [\n {\n type: 'tgroup',\n label: 'Polyphonic',\n items: [{ type: 'vgroup', label: 'Voices', items: o.ui }]\n }\n ];\n }\n return r as FaustDspMeta;\n }\n\n getJSON() {\n return JSON.stringify(this.getMeta());\n }\n\n getUI() {\n return this.getMeta().ui;\n }\n}\n\ninterface JSONData {\n meta: Array<{ options?: string }>;\n}\n\nexport class FaustDspGenerator implements IFaustDspGenerator {\n \n private static compilerPromise: Promise<FaustCompiler> | null = null;\n \n // Analyze the metadata of a Faust JSON file and extract the [midi:on] and [nvoices:n] options\n private extractMidiAndNvoices(\n jsonData: JSONData\n ): { midi: boolean; nvoices: number } {\n const optionsMetadata = jsonData.meta.find((meta) => meta.options);\n if (optionsMetadata && optionsMetadata.options) {\n const options = optionsMetadata.options;\n\n const midiRegex = /\\[midi:(on|off)\\]/;\n const nvoicesRegex = /\\[nvoices:(\\d+)\\]/;\n\n const midiMatch = options.match(midiRegex);\n const nvoicesMatch = options.match(nvoicesRegex);\n\n const midi = midiMatch ? midiMatch[1] === 'on' : false;\n const nvoices = nvoicesMatch ? parseInt(nvoicesMatch[1], 10) : -1;\n\n return { midi, nvoices };\n } else {\n return { midi: false, nvoices: -1 };\n }\n }\n \n /**\n * Compile DSP code, inspect metadata for [nvoices:] (and optionally [midi:on]), and build either a mono\n * or poly WebAudio node (ScriptProcessor or AudioWorklet depending on `sp`). Compilation uses a shared,\n * lazily-created libfaust instance to avoid repeatedly instantiating the WASM compiler.\n */\n async createFaustNode(\n context: BaseAudioContext,\n name: string,\n code: string,\n sp?: boolean,\n bufferSize?: number,\n ): Promise<IFaustMonoWebAudioNode | IFaustPolyWebAudioNode | null> {\n const getCompiler = async () => {\n if (!FaustDspGenerator.compilerPromise) {\n // Resolve libfaust-wasm assets relative to current script/page location (works in browser and bundlers).\n // Falling back to document/baseURI keeps things working when import.meta.url is unavailable (es2019 target).\n const baseURL =\n (typeof document !== 'undefined'\n ? ('src' in (document.currentScript || {})\n ? (document.currentScript as HTMLScriptElement)\n .src\n : document.baseURI)\n : undefined) ||\n (typeof window !== 'undefined'\n ? window.location.href\n : undefined);\n if (!baseURL)\n throw new Error('Cannot resolve libfaust-wasm location.');\n const jsURL = new URL(\n '../libfaust-wasm/libfaust-wasm.js',\n baseURL\n ).href;\n const dataURL = jsURL.replace(/c?js$/, 'data');\n const wasmURL = jsURL.replace(/c?js$/, 'wasm');\n FaustDspGenerator.compilerPromise =\n instantiateFaustModuleFromFile(\n jsURL,\n dataURL,\n wasmURL\n ).then((module) => new FaustCompiler(new LibFaust(module)));\n }\n return FaustDspGenerator.compilerPromise;\n };\n\n const args = '-ftz 2';\n\n try {\n const compiler = await getCompiler();\n // First compile as mono to inspect metadata for nvoices/midi tags; if nvoices > 0 we recompile as poly.\n const monoGenerator = new FaustMonoDspGenerator();\n const compiledMono = await monoGenerator.compile(\n compiler,\n name,\n code,\n args\n );\n if (!compiledMono) return null;\n\n // Extract nvoices from metadata\n const { nvoices } = this.extractMidiAndNvoices(\n monoGenerator.getMeta() as unknown as JSONData\n );\n\n // If nvoices > 0, recompile as polyphonic\n if (nvoices > 0) {\n const polyGenerator = new FaustPolyDspGenerator();\n const compiledPoly = await polyGenerator.compile(\n compiler,\n name,\n code,\n args\n );\n if (!compiledPoly) return null;\n\n // Poly creation: combine voice/effect factories, create node with requested SP/AWN and buffer size.\n return await polyGenerator.createNode(\n context,\n nvoices,\n name,\n undefined,\n undefined,\n undefined,\n sp,\n bufferSize\n );\n }\n\n // Mono creation path when no polyphony hint is present.\n return await monoGenerator.createNode(\n context,\n name,\n undefined,\n sp,\n bufferSize\n );\n } catch (e) {\n console.error(e);\n return null;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["_a", "_b", "Module", "assert", "preRun", "result", "exports", "err", "xhr", "lazyArray", "_c", "typeConverters", "fieldTypes", "i", "handle", "throwBindingError", "rv", "wasmExports", "factoryFn", "libfaust_wasm_default", "FaustBaseWebAudioDsp", "FaustWasmInstantiator", "FaustAudioWorkletProcessorCommunicator", "FaustMonoWebAudioDsp", "FaustPolyWebAudioDsp", "FaustBaseWebAudioDsp", "FaustWasmInstantiator", "FaustMonoWebAudioDsp", "FaustAudioWorkletProcessorCommunicator", "apply", "RawSha256", "fromUtf8", "Sha256", "sha256", "item", "ctrl", "files", "sp"]
7
7
  }