444 lines
89 KiB
JavaScript
444 lines
89 KiB
JavaScript
var SignalsmithStretch = (() => {
|
|
var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined;
|
|
|
|
return (
|
|
async function(moduleArg = {}) {
|
|
var moduleRtn;
|
|
|
|
var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var crypto=globalThis?.crypto||{getRandomValues:array=>{for(var i=0;i<array.length;i++)array[i]=Math.random()*256|0}};var performance=globalThis?.performance||{now:_=>Date.now()};var moduleOverrides=Object.assign({},Module);var arguments_=[];var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";var readAsync,readBinary;if(ENVIRONMENT_IS_SHELL){readBinary=f=>{if(typeof readbuffer=="function"){return new Uint8Array(readbuffer(f))}let data=read(f,"binary");assert(typeof data=="object");return data};readAsync=async f=>readBinary(f);globalThis.clearTimeout??=id=>{};globalThis.setTimeout??=f=>f();arguments_=globalThis.arguments||globalThis.scriptArgs;if(typeof quit=="function"){quit_=(status,toThrow)=>{setTimeout(()=>{if(!(toThrow instanceof ExitStatus)){let toLog=toThrow;if(toThrow&&typeof toThrow=="object"&&toThrow.stack){toLog=[toThrow,toThrow.stack]}err(`exiting due to exception: ${toLog}`)}quit(status)});throw toThrow}}if(typeof print!="undefined"){globalThis.console??={};console.log=print;console.warn=console.error=globalThis.printErr??print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.slice(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{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=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;var wasmBinary;var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=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)}function preRun(){}function initRuntime(){runtimeInitialized=true;wasmExports["e"]()}function preMain(){}function postRun(){}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++}function removeRunDependency(id){runDependencies--;if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var wasmBinaryFile="data:application/octet-stream;base64,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ACICIAAgBWtBHGxqIQADQCACIAEpAgA3AgAgAiABKAIYNgIYIAIgASkCEDcCECACIAEpAgg3AgggAkEcaiICIABHDQALQeQyIAA2AgAPC0HkMkHgMigCACAAQRxsajYCAA8LIAIEQEHkMiACNgIAIAIQA0HoMkEANgIAQeAyQgA3AgBBACEDCwJAIABByqSSyQBPDQBByaSSyQAgA0EcbSIDQQF0IgQgACAAIARJGyADQaSSySRPGyIDQcqkkskATw0AQeQyIANBHGwiAxAEIgQ2AgBB4DIgBDYCAEHoMiADIARqNgIAIAQhAiAAQRxsIgBBHGsiBUEcbiIDQQNxQQNHBEAgA0EBakEDcSEGQQAhAwNAIAIgASkCADcCACACIAEoAhg2AhggAiABKQIQNwIQIAIgASkCCDcCCCACQRxqIQIgA0EBaiIDIAZHDQALCyAAIARqIQAgBUHUAE8EQANAIAIgASkCADcCACACIAEoAhg2AhggAiABKQIQNwIQIAIgASkCCDcCCCACIAEoAhg2AjQgAiABKQIQNwIsIAIgASkCCDcCJCACIAEpAgA3AhwgAiABKAIYNgJQIAIgASkCEDcCSCACQUBrIAEpAgg3AgAgAiABKQIANwI4IAIgASkCADcCVCACIAEpAgg3AlwgAiABKQIQNwJkIAIgASgCGDYCbCACQfAAaiICIABHDQALC0HkMiAANgIADwsQBQAL3QQCBn8BfkGUMSgCACIDQYwxKAIAIgJrQQN1IABPBEACQEGQMSgCACACa0EDdSIFIAAgACAFSxsiBEUNAAJAIARBB3EiBkUEQCAEIQMMAQsgBCEDA0AgAiABKQIANwIAIANBAWshAyACQQhqIQIgB0EBaiIHIAZHDQALCyAEQQhJDQADQCACIAEpAgA3AgAgAiABKQIANwIIIAIgASkCADcCECACIAEpAgA3AhggAiABKQIANwIgIAIgASkCADcCKCACIAEpAgA3AjAgAiABKQIANwI4IAJBQGshAiADQQhrIgMNAAsLIAAgBUsEQEGQMSgCACICIAAgBWtBA3RqIQADQCACIAEpAgA3AgAgAkEIaiICIABHDQALQZAxIAA2AgAPC0GQMUGMMSgCACAAQQN0ajYCAA8LIAIEQEGQMSACNgIAIAIQA0GUMUEANgIAQYwxQgA3AgBBACEDCwJAIABB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ACACKALwASEJIAIoArQCIQpBACEIIAFBAUcEQCABQf7///8HcSEZQQAhAwNAIAAgCEECdCILaiAJIAtqKgIAIAogC2oqAgCMlDgCACAAIAtBBHIiC2ogCSALaioCACAKIAtqKgIAjJQ4AgAgCEECaiEIIANBAmoiAyAZRw0ACwsgAUEBcUUNACAAIAhBAnQiA2ogAyAJaioCACADIApqKgIAjJQ4AgALAkAgASAFTg0AIAFBAWohAyACKAL8ASEIIAIoAvABIQkgAigCtAIhCiABIgBBAXEEQCAIIAkgAEECdCIAaioCACAAIApqKgIAlDgCACADIQALIAMgBUYNAANAIAggACABa0ECdGogCSAAQQJ0IgNqKgIAIAMgCmoqAgCUOAIAIAggAEEBaiIDIAFrQQJ0aiAJIANBAnQiA2oqAgAgAyAKaioCAJQ4AgAgAEECaiIAIAVHDQALCyAVIBggE0EIahAdIAdBAWoiByACKAKoAiIDSA0ACyACQQA6AMECQQAgA0EATA0AGkEAIQFBASACKAKsAiIIQQBMDQAaA0BBACEAIAhBAEoEQCACKALIAiABIAhsQRxsaiEDIAIoAnQgAigCcCABbEEDdGohBANAIAMgAEEcbGogBCAAQQN0aikCADcCACAAQQFqIgAgAigCrAIiCEgNAAsgAigCqAIhAwsgAUEBaiIBIANIDQALIANBAEoLIAItAMACRSACKAJQIgEgEUZxDQBFDQBBACEHQQAgBiABayIUayIMQQAgDEEAShshBCACQYABaiEPIAJB/AFqIRUDQAJAIAIoAkgiASAMIAEgDEgbIgtBAEwNACACKAKUAiACKAKQAiAHbCAUamohCCACKAK0AiEGIAIoApwCIQkgAigCmAIhCkEAIQVBACEAIAtBBE8EQCALQfz///8HcSEYQQAhAwNAIAYgAEECdGogCSAKIAAgCGpxQQJ0aioCADgCACAGIABBAXIiF0ECdGogCSAKIAggF2pxQQJ0aioCADgCACAGIABBAnIiF0ECdGogCSAKIAggF2pxQQJ0aioCADgCACAGIABBA3IiF0ECdGogCSAKIAggF2pxQQJ0aioCADgCACAAQQRqIQAgA0EEaiIDIBhHDQALCyALQQNxIgNFDQADQCAGIABBAnRqIAkgCiAAIAhqcUECdGoqAgA4AgAgAEEBaiEA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";function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){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}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["d"];updateMemoryViews();removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();try{var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}catch(e){readyPromiseReject(e);return Promise.reject(e)}}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var base64Decode=b64=>{var b1,b2,i=0,j=0,bLength=b64.length;var output=new Uint8Array((bLength*3>>2)-(b64[bLength-2]=="=")-(b64[bLength-1]=="="));for(;i<bLength;i+=4,j+=3){b1=base64ReverseLookup[b64.charCodeAt(i+1)];b2=base64ReverseLookup[b64.charCodeAt(i+2)];output[j]=base64ReverseLookup[b64.charCodeAt(i)]<<2|b1>>4;output[j+1]=b1<<4|b2>>2;output[j+2]=b2<<6|base64ReverseLookup[b64.charCodeAt(i+3)]}return output};var isDataURI=filename=>filename.startsWith(dataURIPrefix);var dataURIPrefix="data:application/octet-stream;base64,";var tryParseAsDataURI=filename=>{if(isDataURI(filename)){return base64Decode(filename.slice(dataURIPrefix.length))}};var __abort_js=()=>abort("");var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){abortOnCannotGrowMemory(requestedSize)}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.5/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}}abortOnCannotGrowMemory(requestedSize)};var initRandomFill=()=>view=>crypto.getRandomValues(view);var randomFill=view=>{(randomFill=initRandomFill())(view)};var _random_get=(buffer,size)=>{randomFill(HEAPU8.subarray(buffer,buffer+size));return 0};var keepRuntimeAlive=()=>true;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;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{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)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";for(var base64ReverseLookup=new Uint8Array(123),i=25;i>=0;--i){base64ReverseLookup[48+i]=52+i;base64ReverseLookup[65+i]=i;base64ReverseLookup[97+i]=26+i}base64ReverseLookup[43]=62;base64ReverseLookup[47]=63;var wasmImports={c:__abort_js,b:_emscripten_resize_heap,a:_random_get};var wasmExports=await createWasm();var ___wasm_call_ctors=wasmExports["e"];var _setBuffers=Module["_setBuffers"]=wasmExports["g"];var _blockSamples=Module["_blockSamples"]=wasmExports["h"];var _intervalSamples=Module["_intervalSamples"]=wasmExports["i"];var _inputLatency=Module["_inputLatency"]=wasmExports["j"];var _outputLatency=Module["_outputLatency"]=wasmExports["k"];var _reset=Module["_reset"]=wasmExports["l"];var _presetDefault=Module["_presetDefault"]=wasmExports["m"];var _presetCheaper=Module["_presetCheaper"]=wasmExports["n"];var _configure=Module["_configure"]=wasmExports["o"];var _setTransposeFactor=Module["_setTransposeFactor"]=wasmExports["p"];var _setTransposeSemitones=Module["_setTransposeSemitones"]=wasmExports["q"];var _seek=Module["_seek"]=wasmExports["r"];var _process=Module["_process"]=wasmExports["s"];var _flush=Module["_flush"]=wasmExports["t"];var _main=Module["_main"]=wasmExports["u"];Module["UTF8ToString"]=UTF8ToString;function callMain(){var entryFunction=_main;var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);var noInitialRun;if(!noInitialRun)callMain();postRun()}{doRun()}}run();moduleRtn=readyPromise;
|
|
|
|
|
|
return moduleRtn;
|
|
}
|
|
);
|
|
})();
|
|
function registerWorkletProcessor(Module, audioNodeKey) {
|
|
class WasmProcessor extends AudioWorkletProcessor {
|
|
constructor(options) {
|
|
super(options);
|
|
this.wasmReady = false;
|
|
this.wasmModule = null;
|
|
this.channels = 0;
|
|
this.buffersIn = [];
|
|
this.buffersOut = [];
|
|
|
|
this.audioBuffers = []; // list of (multi-channel) audio buffers
|
|
this.audioBuffersStart = 0; // time-stamp for the first audio buffer
|
|
this.audioBuffersEnd = 0; // just to be helpful
|
|
|
|
this.timeIntervalSamples = sampleRate*0.1;
|
|
this.timeIntervalCounter = 0;
|
|
|
|
this.timeMap = [{
|
|
active: false,
|
|
input: 0,
|
|
output: 0,
|
|
rate: 1,
|
|
semitones: 0,
|
|
loopStart: 0,
|
|
loopEnd: 0
|
|
}];
|
|
|
|
let remoteMethods = {
|
|
configure: config => {
|
|
let blockChanged = (config.blockMs != this.config.blockMs || config.intervalMs != this.config.intervalMs);
|
|
Object.assign(this.config, config);
|
|
if (config.blockMs && blockChanged) this.configure();
|
|
},
|
|
setUpdateInterval: seconds => {
|
|
this.timeIntervalSamples = sampleRate*seconds;
|
|
},
|
|
stop: when => {
|
|
if (typeof when !== 'number') when = currentTime;
|
|
return remoteMethods.schedule({active: false, output: when});
|
|
},
|
|
start: (when, offset, duration, rate, semitones) => {
|
|
if (typeof when === 'object') {
|
|
if (!('active' in when)) when.active = true;
|
|
return remoteMethods.schedule(when);
|
|
}
|
|
|
|
let obj = {active: true, input: 0, output: currentTime + this.outputLatencySeconds};
|
|
if (typeof when === 'number') obj.output = when;
|
|
if (typeof offset === 'number') obj.input = offset;
|
|
if (typeof rate === 'number') obj.rate = rate;
|
|
if (typeof semitones === 'number') obj.semitones = semitones;
|
|
let result = remoteMethods.schedule(obj);
|
|
if (typeof duration === 'number') {
|
|
remoteMethods.stop(obj.output + duration);
|
|
obj.output += duration;
|
|
obj.active = false;
|
|
remoteMethods.schedule(obj);
|
|
}
|
|
return result;
|
|
},
|
|
schedule: (objIn, adjustPrevious) => {
|
|
let outputTime = ('outputTime' in objIn) ? objIn.outputTime : currentTime;
|
|
|
|
let latestSegment = this.timeMap[this.timeMap.length - 1];
|
|
while (this.timeMap.length && this.timeMap[this.timeMap.length - 1].output >= outputTime) {
|
|
latestSegment = this.timeMap.pop();
|
|
}
|
|
|
|
let obj = {
|
|
active: latestSegment.active,
|
|
input: null,
|
|
output: outputTime,
|
|
rate: latestSegment.rate,
|
|
semitones: latestSegment.semitones,
|
|
loopStart: latestSegment.loopStart,
|
|
loopEnd: latestSegment.loopEnd
|
|
};
|
|
Object.assign(obj, objIn);
|
|
if (obj.input === null) {
|
|
let rate = (latestSegment.active ? latestSegment.rate : 0);
|
|
obj.input = latestSegment.input + (obj.output - latestSegment.output)*rate;
|
|
}
|
|
this.timeMap.push(obj);
|
|
|
|
if (adjustPrevious && this.timeMap.length > 1) {
|
|
let previous = this.timeMap[this.timeMap.length - 2];
|
|
if (previous.output < currentTime) {
|
|
let rate = (previous.active ? previous.rate : 0);
|
|
previous.input += (currentTime - previous.output)*rate;
|
|
previous.output = currentTime;
|
|
}
|
|
previous.rate = (obj.input - previous.input)/(obj.output - previous.output);
|
|
}
|
|
|
|
let currentMapSegment = this.timeMap[0];
|
|
while (this.timeMap.length > 1 && this.timeMap[1].output <= outputTime) {
|
|
this.timeMap.shift();
|
|
currentMapSegment = this.timeMap[0];
|
|
}
|
|
let rate = (currentMapSegment.active ? currentMapSegment.rate : 0);
|
|
let inputTime = currentMapSegment.input + (outputTime - currentMapSegment.output)*rate;
|
|
this.timeIntervalCounter = this.timeIntervalSamples;
|
|
this.port.postMessage(['time', inputTime]);
|
|
|
|
return obj;
|
|
},
|
|
dropBuffers: toSeconds => {
|
|
if (typeof toSeconds !== 'number') {
|
|
let buffers = this.audioBuffers.flat(1).map(b => b.buffer);;
|
|
this.audioBuffers = [];
|
|
this.audioBuffersStart = this.audioBuffersEnd = 0;
|
|
return {
|
|
value: {start: 0, end: 0},
|
|
transfer: buffers
|
|
};
|
|
}
|
|
let transfer = [];
|
|
while (this.audioBuffers.length) {
|
|
let first = this.audioBuffers[0];
|
|
let length = first[0].length;
|
|
let endSamples = this.audioBuffersStart + length;
|
|
let endSeconds = endSamples/sampleRate;
|
|
if (endSeconds > toSeconds) break;
|
|
|
|
this.audioBuffers.shift().forEach(b => transfer.push(b.buffer));
|
|
this.audioBuffersStart += length;
|
|
}
|
|
return {
|
|
value: {
|
|
start: this.audioBuffersStart/sampleRate,
|
|
end: this.audioBuffersEnd/sampleRate
|
|
},
|
|
transfer: transfer
|
|
};
|
|
},
|
|
addBuffers: sampleBuffers => {
|
|
sampleBuffers = [].concat(sampleBuffers);
|
|
this.audioBuffers.push(sampleBuffers);
|
|
let length = sampleBuffers[0].length;
|
|
this.audioBuffersEnd += length;
|
|
return this.audioBuffersEnd/sampleRate;
|
|
}
|
|
};
|
|
|
|
let pendingMessages = [];
|
|
this.port.onmessage = event => pendingMessages.push(event);
|
|
|
|
Module().then(wasmModule => {
|
|
this.wasmModule = wasmModule;
|
|
this.wasmReady = true;
|
|
|
|
wasmModule._main();
|
|
|
|
this.channels = options.numberOfOutputs ? options.outputChannelCount[0] : 2; // stereo by default
|
|
this.configure();
|
|
|
|
this.port.onmessage = event => {
|
|
let data = event.data;
|
|
let messageId = data.shift();
|
|
let method = data.shift();
|
|
let result = remoteMethods[method](...data);
|
|
if (result?.transfer) {
|
|
this.port.postMessage([messageId, result.value], result.transfer);
|
|
} else {
|
|
this.port.postMessage([messageId, result]);
|
|
}
|
|
};
|
|
let methodArgCounts = {};
|
|
for (let key in remoteMethods) {
|
|
methodArgCounts[key] = remoteMethods[key].length;
|
|
}
|
|
this.port.postMessage(['ready', methodArgCounts]);
|
|
pendingMessages.forEach(this.port.onmessage);
|
|
pendingMessages = null;
|
|
});
|
|
}
|
|
|
|
config = {
|
|
tonalityHz: 8000
|
|
};
|
|
configure() {
|
|
if (this.config.blockMs) {
|
|
let blockSamples = Math.round(this.config.blockMs/1000*sampleRate);
|
|
let intervalSamples = Math.round((this.config.intervalMs || this.config.blockMs*0.25)/1000*sampleRate);
|
|
this.wasmModule._configure(this.channels, blockSamples, intervalSamples);
|
|
this.wasmModule._reset();
|
|
} else {
|
|
this.wasmModule._presetDefault(this.channels, sampleRate);
|
|
}
|
|
this.updateBuffers();
|
|
this.inputLatencySeconds = this.wasmModule._inputLatency()/sampleRate;
|
|
this.outputLatencySeconds = this.wasmModule._outputLatency()/sampleRate;
|
|
}
|
|
|
|
updateBuffers() {
|
|
let wasmModule = this.wasmModule;
|
|
// longer than one STFT block, so we can seek smoothly
|
|
this.bufferLength = (wasmModule._inputLatency() + wasmModule._outputLatency());
|
|
|
|
let lengthBytes = this.bufferLength*4;
|
|
let bufferPointer = wasmModule._setBuffers(this.channels, this.bufferLength);
|
|
this.buffersIn = [];
|
|
this.buffersOut = [];
|
|
for (let c = 0; c < this.channels; ++c) {
|
|
this.buffersIn.push(bufferPointer + lengthBytes*c);
|
|
this.buffersOut.push(bufferPointer + lengthBytes*(c + this.channels));
|
|
}
|
|
}
|
|
|
|
process(inputList, outputList, parameters) {
|
|
if (!this.wasmReady) {
|
|
outputList.forEach(output => {
|
|
output.forEach(channel => {
|
|
channel.fill(0);
|
|
});
|
|
});
|
|
return true;
|
|
}
|
|
if (!outputList[0]?.length) return false;
|
|
|
|
let outputTime = currentTime + this.outputLatencySeconds;
|
|
while (this.timeMap.length > 1 && this.timeMap[1].output <= outputTime) {
|
|
this.timeMap.shift();
|
|
}
|
|
let currentMapSegment = this.timeMap[0];
|
|
|
|
let wasmModule = this.wasmModule;
|
|
wasmModule._setTransposeSemitones(currentMapSegment.semitones, this.config.tonalityHz/sampleRate)
|
|
|
|
// Check the input/output channel counts
|
|
if (outputList[0].length != this.channels) {
|
|
this.channels = outputList[0]?.length || 0;
|
|
configure();
|
|
}
|
|
let outputBlockSize = outputList[0][0].length;
|
|
|
|
let memory = wasmModule.exports ? wasmModule.exports.memory.buffer : wasmModule.HEAP8.buffer;
|
|
// Buffer list (one per channel)
|
|
let inputs = inputList[0];
|
|
if (!currentMapSegment.active) {
|
|
outputList[0].forEach((_, c) => {
|
|
let channelBuffer = inputs[c%inputs.length];
|
|
let buffer = new Float32Array(memory, this.buffersIn[c], outputBlockSize);
|
|
buffer.fill(0);
|
|
});
|
|
// Should detect silent input and skip processing
|
|
wasmModule._process(outputBlockSize, outputBlockSize);
|
|
} else if (inputs?.length) {
|
|
// Live input
|
|
outputList[0].forEach((_, c) => {
|
|
let channelBuffer = inputs[c%inputs.length];
|
|
let buffer = new Float32Array(memory, this.buffersIn[c], outputBlockSize);
|
|
if (channelBuffer) {
|
|
buffer.set(channelBuffer);
|
|
} else {
|
|
buffer.fill(0);
|
|
}
|
|
})
|
|
wasmModule._process(outputBlockSize, outputBlockSize);
|
|
} else {
|
|
let inputTime = currentMapSegment.input + (outputTime - currentMapSegment.output)*currentMapSegment.rate;
|
|
let loopLength = currentMapSegment.loopEnd - currentMapSegment.loopStart;
|
|
if (loopLength > 0 && inputTime >= currentMapSegment.loopEnd) {
|
|
currentMapSegment.input -= loopLength;
|
|
inputTime -= loopLength;
|
|
}
|
|
|
|
inputTime += this.inputLatencySeconds;
|
|
let inputSamplesEnd = Math.round(inputTime*sampleRate);
|
|
|
|
// Fill the buffer with previous input
|
|
let buffers = outputList[0].map((_, c) => new Float32Array(memory, this.buffersIn[c], this.bufferLength));
|
|
|
|
let blockSamples = 0; // current write position in the temporary input buffer
|
|
let audioBufferIndex = 0;
|
|
let audioSamples = this.audioBuffersStart; // start of current audio buffer
|
|
// zero-pad until the start of the audio data
|
|
let inputSamples = inputSamplesEnd - this.bufferLength;
|
|
if (inputSamples < audioSamples) {
|
|
blockSamples = audioSamples - inputSamples;
|
|
buffers.forEach(b => b.fill(0, 0, blockSamples));
|
|
inputSamples = audioSamples;
|
|
}
|
|
while (audioBufferIndex < this.audioBuffers.length && audioSamples < inputSamplesEnd) {
|
|
let audioBuffer = this.audioBuffers[audioBufferIndex];
|
|
let startIndex = inputSamples - audioSamples; // start index within the audio buffer
|
|
let bufferEnd = audioSamples + audioBuffer[0].length;
|
|
// how many samples to copy: min(how many left in the buffer, how many more we need)
|
|
let count = Math.min(audioBuffer[0].length - startIndex, inputSamplesEnd - inputSamples);
|
|
if (count > 0) {
|
|
buffers.forEach((buffer, c) => {
|
|
let channelBuffer = audioBuffer[c%audioBuffer.length];
|
|
buffer.subarray(blockSamples).set(channelBuffer.subarray(startIndex, startIndex + count));
|
|
});
|
|
audioSamples += count;
|
|
blockSamples += count;
|
|
} else { // we're already past this buffer - skip it
|
|
audioSamples += audioBuffer[0].length;
|
|
}
|
|
++audioBufferIndex;
|
|
}
|
|
if (blockSamples < this.bufferLength) {
|
|
buffers.forEach(buffer => buffer.subarray(blockSamples).fill(0));
|
|
}
|
|
|
|
// constantly seeking, so we don't have to worry about the input buffers needing to be a rate-dependent size
|
|
wasmModule._seek(this.bufferLength, currentMapSegment.rate);
|
|
wasmModule._process(0, outputBlockSize);
|
|
|
|
this.timeIntervalCounter -= outputBlockSize;
|
|
if (this.timeIntervalCounter <= 0) {
|
|
this.timeIntervalCounter = this.timeIntervalSamples;
|
|
this.port.postMessage(['time', inputTime]);
|
|
}
|
|
}
|
|
|
|
// Re-fetch in case the memory changed (even though there *shouldn't* be any allocations)
|
|
memory = wasmModule.exports ? wasmModule.exports.memory.buffer : wasmModule.HEAP8.buffer;
|
|
outputList[0].forEach((channelBuffer, c) => {
|
|
let buffer = new Float32Array(memory, this.buffersOut[c], outputBlockSize);
|
|
channelBuffer.set(buffer);
|
|
});
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
registerProcessor(audioNodeKey, WasmProcessor);
|
|
}
|
|
|
|
/**
|
|
Creates a Stretch node
|
|
@async
|
|
@function SignalsmithStretch
|
|
@param {AudioContext} audioContext
|
|
@param {Object} options - channel configuration (as per [options]{@link https://developer.mozilla.org/en-US/docs/Web/API/AudioWorkletNode/AudioWorkletNode#options})
|
|
@returns {Promise<StretchNode>}
|
|
*/
|
|
SignalsmithStretch = ((Module, audioNodeKey) => {
|
|
if (typeof AudioWorkletProcessor === "function" && typeof registerProcessor === "function") {
|
|
// AudioWorklet side
|
|
registerWorkletProcessor(Module, audioNodeKey);
|
|
return {};
|
|
}
|
|
let promiseKey = Symbol();
|
|
let createNode = async function(audioContext, options) {
|
|
/**
|
|
@classdesc An `AudioWorkletNode` with Signalsmith Stretch extensions
|
|
@name StretchNode
|
|
@augments AudioWorkletNode
|
|
@property {number} inputTime - the current playback (in seconds) within the input audio stored by the node
|
|
*/
|
|
let audioNode;
|
|
options = options || {
|
|
numberOfInputs: 1,
|
|
numberOfOutputs: 1,
|
|
outputChannelCount: [2]
|
|
};
|
|
try {
|
|
audioNode = new AudioWorkletNode(audioContext, audioNodeKey, options);
|
|
} catch (e) {
|
|
if (!audioContext[promiseKey]) {
|
|
let moduleUrl = createNode.moduleUrl;
|
|
if (!moduleUrl) {
|
|
let moduleCode = `(${registerWorkletProcessor})((_scriptName=>${Module})(),${JSON.stringify(audioNodeKey)})`;
|
|
moduleUrl = URL.createObjectURL(new Blob([moduleCode], {type: 'text/javascript'}));
|
|
}
|
|
audioContext[promiseKey] = audioContext.audioWorklet.addModule(moduleUrl);
|
|
}
|
|
await audioContext[promiseKey];
|
|
audioNode = new AudioWorkletNode(audioContext, audioNodeKey, options);
|
|
}
|
|
|
|
// messages with Promise responses
|
|
let requestMap = {};
|
|
let idCounter = 0;
|
|
let timeUpdateCallback = null;
|
|
let post = (transfer, ...data) => {
|
|
let id = idCounter++;
|
|
return new Promise(resolve => {
|
|
requestMap[id] = resolve;
|
|
audioNode.port.postMessage([id].concat(data), transfer);
|
|
});
|
|
};
|
|
audioNode.inputTime = 0;
|
|
audioNode.port.onmessage = (event) => {
|
|
let data = event.data;
|
|
let id = data[0], value = data[1];
|
|
if (id == 'time') {
|
|
audioNode.inputTime = value;
|
|
if (timeUpdateCallback) timeUpdateCallback(value);
|
|
}
|
|
if (id in requestMap) {
|
|
requestMap[id](value);
|
|
delete requestMap[id];
|
|
}
|
|
};
|
|
|
|
return new Promise(resolve => {
|
|
requestMap['ready'] = remoteMethodKeys => {
|
|
Object.keys(remoteMethodKeys).forEach(key => {
|
|
let argCount = remoteMethodKeys[key];
|
|
audioNode[key] = (...args) => {
|
|
let transfer = null;
|
|
if (args.length > argCount) {
|
|
transfer = args.pop();
|
|
}
|
|
return post(transfer, key, ...args);
|
|
}
|
|
});
|
|
/** @lends StretchNode.prototype
|
|
@method setUpdateInterval
|
|
*/
|
|
audioNode.setUpdateInterval = (seconds, callback) => {
|
|
timeUpdateCallback = callback;
|
|
return post(null, 'setUpdateInterval', seconds);
|
|
}
|
|
resolve(audioNode);
|
|
}
|
|
});
|
|
};
|
|
return createNode;
|
|
})(SignalsmithStretch, "signalsmith-stretch");
|
|
// register as a CommonJS/AMD module
|
|
if (typeof exports === 'object' && typeof module === 'object') {
|
|
module.exports = SignalsmithStretch;
|
|
} else if (typeof define === 'function' && define['amd']) {
|
|
define([], () => SignalsmithStretch);
|
|
}
|