wam-community
Version:
A collection of prebuilt Web Audio Modules ready for use
523 lines (470 loc) • 64.7 kB
JavaScript
/*
Code generated with Faust version 2.40.12
Compilation options: -lang wasm-ib -cn kbverb -es 1 -mcd 16 -single -ftz 2
*/
function getJSONkbverb() {
return '{"name": "kbverb","filename": "kbverb.dsp","version": "2.40.12","compile_options": "-lang wasm-ib -cn kbverb -es 1 -mcd 16 -single -ftz 2","include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust",".","/tmp/sessions/24C23DFED200FFB2C5EF16FFF5C3F1D9AD7B8BD5/web/wap"],"size": 731672,"inputs": 2,"outputs": 2,"meta": [ { "author": "Corey Kereliuk" },{ "compilation_options": "-single -scal -I libraries/ -I project/ -lang wasm" },{ "compile_options": "-lang wasm-ib -cn kbverb -es 1 -mcd 16 -single -ftz 2" },{ "copyright": "Corey Kereliuk" },{ "delays_lib_name": "Faust Delay Library" },{ "delays_lib_version": "0.1" },{ "filename": "kbverb.dsp" },{ "library_path0": "/libraries/delays.lib" },{ "library_path1": "/libraries/signals.lib" },{ "library_path2": "/libraries/maths.lib" },{ "library_path3": "/libraries/stdfaust.lib" },{ "library_path4": "/libraries/platform.lib" },{ "license": "MIT" },{ "maths_lib_author": "GRAME" },{ "maths_lib_copyright": "GRAME" },{ "maths_lib_license": "LGPL with exception" },{ "maths_lib_name": "Faust Math Library" },{ "maths_lib_version": "2.5" },{ "name": "kbverb" },{ "platform_lib_name": "Generic Platform Library" },{ "platform_lib_version": "0.2" },{ "signals_lib_name": "Faust Signal Routing Library" },{ "signals_lib_version": "0.1" },{ "version": "0.0" }],"ui": [ {"type": "vgroup","label": "kbverb","items": [ {"type": "checkbox","label": "bypass","shortname": "bypass","address": "/kbverb/bypass","index": 5216},{"type": "hslider","label": "feedback","shortname": "feedback","address": "/kbverb/feedback","index": 5228,"meta": [{ "style": "knob" }],"init": 0.5,"min": 0,"max": 1,"step": 0.01}]}]}';
}
function getBase64Codekbverb() {
return "AGFzbQEAAAABy4CAgAAOYAJ/fwBgBH9/f38AYAF/AX9gAX8Bf2ACf38BfWABfwF/YAJ/fwBgAX8AYAJ/fwBgAn9/AGABfwBgAn9/AX9gAn9/AX9gA39/fQACgYCAgAAAA4+AgIAADgABAgMEBQYHCAkKCwwNBYyAgIAAAQGQgICAAPiHgIAAB7qBgIAADAdjb21wdXRlAAEMZ2V0TnVtSW5wdXRzAAINZ2V0TnVtT3V0cHV0cwADDWdldFBhcmFtVmFsdWUABA1nZXRTYW1wbGVSYXRlAAUEaW5pdAAGDWluc3RhbmNlQ2xlYXIABxFpbnN0YW5jZUNvbnN0YW50cwAIDGluc3RhbmNlSW5pdAAJGmluc3RhbmNlUmVzZXRVc2VySW50ZXJmYWNlAAoNc2V0UGFyYW1WYWx1ZQANBm1lbW9yeQIACqu2gYAADrrogIAAAQF/QQAhAkEAQQI2AsCrLEEAQQM2AsSrLEEAQQU2AsirLEEAQQc2AsyrLEEAQQs2AtCrLEEAQQ02AtSrLEEAQRE2AtirLEEAQRM2AtyrLEEAQRc2AuCrLEEAQR02AuSrLEEAQR82AuirLEEAQSU2AuyrLEEAQSk2AvCrLEEAQSs2AvSrLEEAQS82AvirLEEAQTU2AvyrLEEAQTs2AoCsLEEAQT02AoSsLEEAQcMANgKIrCxBAEHHADYCjKwsQQBByQA2ApCsLEEAQc8ANgKUrCxBAEHTADYCmKwsQQBB2QA2ApysLEEAQeEANgKgrCxBAEHlADYCpKwsQQBB5wA2AqisLEEAQesANgKsrCxBAEHtADYCsKwsQQBB8QA2ArSsLEEAQf8ANgK4rCxBAEGDATYCvKwsQQBBiQE2AsCsLEEAQYsBNgLErCxBAEGVATYCyKwsQQBBlwE2AsysLEEAQZ0BNgLQrCxBAEGjATYC1KwsQQBBpwE2AtisLEEAQa0BNgLcrCxBAEGzATYC4KwsQQBBtQE2AuSsLEEAQb8BNgLorCxBAEHBATYC7KwsQQBBxQE2AvCsLEEAQccBNgL0rCxBAEHTATYC+KwsQQBB3wE2AvysLEEAQeMBNgKArSxBAEHlATYChK0sQQBB6QE2AoitLEEAQe8BNgKMrSxBAEHxATYCkK0sQQBB+wE2ApStLEEAQYECNgKYrSxBAEGHAjYCnK0sQQBBjQI2AqCtLEEAQY8CNgKkrSxBAEGVAjYCqK0sQQBBmQI2AqytLEEAQZsCNgKwrSxBAEGlAjYCtK0sQQBBswI2AritLEEAQbcCNgK8rSxBAEG5AjYCwK0sQQBBvQI2AsStLEEAQcsCNgLIrSxBAEHRAjYCzK0sQQBB2wI2AtCtLEEAQd0CNgLUrSxBAEHhAjYC2K0sQQBB5wI2AtytLEEAQe8CNgLgrSxBAEH1AjYC5K0sQQBB+wI2AuitLEEAQf8CNgLsrSxBAEGFAzYC8K0sQQBBjQM2AvStLEEAQZEDNgL4rSxBAEGZAzYC/K0sQQBBowM2AoCuLEEAQaUDNgKErixBAEGvAzYCiK4sQQBBsQM2AoyuLEEAQbcDNgKQrixBAEG7AzYClK4sQQBBwQM2ApiuLEEAQckDNgKcrixBAEHNAzYCoK4sQQBBzwM2AqSuLEEAQdMDNgKorixBAEHfAzYCrK4sQQBB5wM2ArCuLEEAQesDNgK0rixBAEHzAzYCuK4sQQBB9wM2AryuLEEAQf0DNgLArixBAEGJBDYCxK4sQQBBiwQ2AsiuLEEAQZ0ENgLMrixBAEGjBDYC0K4sQQBBrQQ2AtSuLEEAQbMENgLYrixBAEG5BDYC3K4sQQBBuwQ2AuCuLEEAQcEENgLkrixBAEHLBDYC6K4sQQBB0QQ2AuyuLEEAQdcENgLwrixBAEHZBDYC9K4sQQBB3wQ2AviuLEEAQeUENgL8rixBAEHpBDYCgK8sQQBB6wQ2AoSvLEEAQfcENgKIryxBAEGBBTYCjK8sQQBBgwU2ApCvLEEAQYcFNgKUryxBAEGNBTYCmK8sQQBBkwU2ApyvLEEAQZUFNgKgryxBAEGhBTYCpK8sQQBBpQU2AqivLEEAQasFNgKsryxBAEGzBTYCsK8sQQBBvQU2ArSvLEEAQcUFNgK4ryxBAEHPBTYCvK8sQQBB1wU2AsCvLEEAQd0FNgLEryxBAEHjBTYCyK8sQQBB5wU2AsyvLEEAQe8FNgLQryxBAEH1BTYC1K8sQQBB+QU2AtivLEEAQYEGNgLcryxBAEGFBjYC4K8sQQBBkwY2AuSvLEEAQZ0GNgLoryxBAEGpBjYC7K8sQQBBqwY2AvCvLEEAQbUGNgL0ryxBAEG3BjYC+K8sQQBBuwY2AvyvLEEAQb0GNgKAsCxBAEHHBjYChLAsQQBB1QY2AoiwLEEA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Qa8oNgL8wCxBAEGzKDYCgMEsQQBBuyg2AoTBLEEAQcUoNgKIwSxBAEHNKDYCjMEsQQBB2Sg2ApDBLEEAQesoNgKUwSxBAEHvKDYCmMEsQQBB8Sg2ApzBLEEAQfUoNgKgwSxBAEGNKTYCpMEsQQBBmSk2AqjBLEEAQZ8pNgKswSxBAEGhKTYCsMEsQQBBsSk2ArTBLEEAQbcpNgK4wSxBAEG9KTYCvMEsQQBByyk2AsDBLEEAQdUpNgLEwSxBAEHjKTYCyMEsQQBB5yk2AszBLEEAQYUqNgLQwSxBAEGLKjYC1MEsQQBBkSo2AtjBLEEAQZcqNgLcwSxBAEGfKjYC4MEsQQBBpSo2AuTBLEEAQakqNgLowSxBAEGrKjYC7MEsQQBBtyo2AvDBLEEAQb0qNgL0wSxBAEHBKjYC+MEsQQBBwyo2AvzBLEEAQckqNgKAwixBAEHfKjYChMIsQQBB5So2AojCLEEAQecqNgKMwixBAEHrKjYCkMIsQQBB/So2ApTCLEEAQf8qNgKYwixBAEGDKzYCnMIsQQBBjys2AqDCLEEAQZErNgKkwixBAEGXKzYCqMIsQQBBmys2AqzCLEEAQbUrNgKwwixBAEG7KzYCtMIsQQBBwSs2ArjCLEEAQcUrNgK8wixBAEHNKzYCwMIsQQBB1ys2AsTCLEEAQfcrNgLIwixBAEGHLDYCzMIsQQBBiSw2AtDCLEEAQY8sNgLUwixBAEGTLDYC2MIsQQBBlSw2AtzCLEEAQZksNgLgwixBAEGbLDYC5MIsQQBBpSw2AujCLEEAQbMsNgLswixBAEG5LDYC8MIsQQBBvSw2AvTCLEEAQcUsNgL4wixBAEHPLDYC/MIsQQBB1Sw2AoDDLEEAQeksNgKEwyxBAEHtLDYCiMMsQQBB7yw2AozDLEEAQfUsNgKQwyxBAEGTLTYClMMsQQBBly02ApjDLEEAQZ8tNgKcwyxBAEGpLTYCoMMsQQBBry02AqTDLEEAQbUtNgKowyxBAEG9LTYCrMMsQQBBwy02ArDDLEEAQc8tNgK0wyxBAEHTLTYCuMMsQQBB2S02ArzDLEEAQdstNgLAwyxBAEHhLTYCxMMsQQBB5S02AsjDLEEAQestNgLMwyxBAEHtLTYC0MMsQQBB9y02AtTDLEEAQfktNgLYwyxBAEGJLjYC3MMsQQBBjy42AuDDLEEA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IiB9LHsgImRlbGF5c19saWJfdmVyc2lvbiI6ICIwLjEiIH0seyAiZmlsZW5hbWUiOiAia2J2ZXJiLmRzcCIgfSx7ICJsaWJyYXJ5X3BhdGgwIjogIi9saWJyYXJpZXMvZGVsYXlzLmxpYiIgfSx7ICJsaWJyYXJ5X3BhdGgxIjogIi9saWJyYXJpZXMvc2lnbmFscy5saWIiIH0seyAibGlicmFyeV9wYXRoMiI6ICIvbGlicmFyaWVzL21hdGhzLmxpYiIgfSx7ICJsaWJyYXJ5X3BhdGgzIjogIi9saWJyYXJpZXMvc3RkZmF1c3QubGliIiB9LHsgImxpYnJhcnlfcGF0aDQiOiAiL2xpYnJhcmllcy9wbGF0Zm9ybS5saWIiIH0seyAibGljZW5zZSI6ICJNSVQiIH0seyAibWF0aHNfbGliX2F1dGhvciI6ICJHUkFNRSIgfSx7ICJtYXRoc19saWJfY29weXJpZ2h0IjogIkdSQU1FIiB9LHsgIm1hdGhzX2xpYl9saWNlbnNlIjogIkxHUEwgd2l0aCBleGNlcHRpb24iIH0seyAibWF0aHNfbGliX25hbWUiOiAiRmF1c3QgTWF0aCBMaWJyYXJ5IiB9LHsgIm1hdGhzX2xpYl92ZXJzaW9uIjogIjIuNSIgfSx7ICJuYW1lIjogImtidmVyYiIgfSx7ICJwbGF0Zm9ybV9saWJfbmFtZSI6ICJHZW5lcmljIFBsYXRmb3JtIExpYnJhcnkiIH0seyAicGxhdGZvcm1fbGliX3ZlcnNpb24iOiAiMC4yIiB9LHsgInNpZ25hbHNfbGliX25hbWUiOiAiRmF1c3QgU2lnbmFsIFJvdXRpbmcgTGlicmFyeSIgfSx7ICJzaWduYWxzX2xpYl92ZXJzaW9uIjogIjAuMSIgfSx7ICJ2ZXJzaW9uIjogIjAuMCIgfV0sInVpIjogWyB7InR5cGUiOiAidmdyb3VwIiwibGFiZWwiOiAia2J2ZXJiIiwiaXRlbXMiOiBbIHsidHlwZSI6ICJjaGVja2JveCIsImxhYmVsIjogImJ5cGFzcyIsInNob3J0bmFtZSI6ICJieXBhc3MiLCJhZGRyZXNzIjogIi9rYnZlcmIvYnlwYXNzIiwiaW5kZXgiOiA1MjE2fSx7InR5cGUiOiAiaHNsaWRlciIsImxhYmVsIjogImZlZWRiYWNrIiwic2hvcnRuYW1lIjogImZlZWRiYWNrIiwiYWRkcmVzcyI6ICIva2J2ZXJiL2ZlZWRiYWNrIiwiaW5kZXgiOiA1MjI4LCJtZXRhIjogW3sgInN0eWxlIjogImtub2IiIH1dLCJpbml0IjogMC41LCJtaW4iOiAwLCJtYXgiOiAxLCJzdGVwIjogMC4wMX1dfV19";
}
/*
faust2wasm: GRAME 2017-2019
*/
("use strict");
if (typeof AudioWorkletNode === "undefined") {
alert("AudioWorklet is not supported in this browser !");
}
class kbverbNode extends AudioWorkletNode {
constructor(context, baseURL, options) {
super(context, "kbverb", options);
this.baseURL = baseURL;
this.json = options.processorOptions.json;
this.json_object = JSON.parse(this.json);
// JSON parsing functions
this.parse_ui = function (ui, obj) {
for (var i = 0; i < ui.length; i++) {
this.parse_group(ui[i], obj);
}
};
this.parse_group = function (group, obj) {
if (group.items) {
this.parse_items(group.items, obj);
}
};
this.parse_items = function (items, obj) {
for (var i = 0; i < items.length; i++) {
this.parse_item(items[i], obj);
}
};
this.parse_item = function (item, obj) {
if (item.type === "vgroup" || item.type === "hgroup" || item.type === "tgroup") {
this.parse_items(item.items, obj);
} else if (item.type === "hbargraph" || item.type === "vbargraph") {
// Keep bargraph adresses
obj.outputs_items.push(item.address);
} else if (
item.type === "vslider" ||
item.type === "hslider" ||
item.type === "button" ||
item.type === "checkbox" ||
item.type === "nentry"
) {
// Keep inputs adresses
obj.inputs_items.push(item.address);
obj.descriptor.push(item);
// Decode MIDI
if (item.meta !== undefined) {
for (var i = 0; i < item.meta.length; i++) {
if (item.meta[i].midi !== undefined) {
if (item.meta[i].midi.trim() === "pitchwheel") {
obj.fPitchwheelLabel.push({
path: item.address,
min: parseFloat(item.min),
max: parseFloat(item.max),
});
} else if (item.meta[i].midi.trim().split(" ")[0] === "ctrl") {
obj.fCtrlLabel[parseInt(item.meta[i].midi.trim().split(" ")[1])].push({
path: item.address,
min: parseFloat(item.min),
max: parseFloat(item.max),
});
}
}
}
}
// Define setXXX/getXXX, replacing '/c' with 'C' everywhere in the string
var set_name = "set" + item.address;
var get_name = "get" + item.address;
set_name = set_name.replace(/\/./g, (x) => {
return x.substr(1, 1).toUpperCase();
});
get_name = get_name.replace(/\/./g, (x) => {
return x.substr(1, 1).toUpperCase();
});
obj[set_name] = (val) => {
obj.setParamValue(item.address, val);
};
obj[get_name] = () => {
return obj.getParamValue(item.address);
};
//console.log(set_name);
//console.log(get_name);
}
};
this.output_handler = null;
// input/output items
this.inputs_items = [];
this.outputs_items = [];
this.descriptor = [];
// MIDI
this.fPitchwheelLabel = [];
this.fCtrlLabel = new Array(128);
for (var i = 0; i < this.fCtrlLabel.length; i++) {
this.fCtrlLabel[i] = [];
}
// Parse UI
this.parse_ui(this.json_object.ui, this);
// Set message handler
this.port.onmessage = this.handleMessage.bind(this);
try {
if (this.parameters) this.parameters.forEach((p) => (p.automationRate = "k-rate"));
} catch (e) {}
}
// To be called by the message port with messages coming from the processor
handleMessage(event) {
var msg = event.data;
if (this.output_handler) {
this.output_handler(msg.path, msg.value);
}
}
// Public API
/**
* Destroy the node, deallocate resources.
*/
destroy() {
this.port.postMessage({ type: "destroy" });
this.port.close();
}
/**
* Returns a full JSON description of the DSP.
*/
getJSON() {
return this.json;
}
// For WAP
async getMetadata() {
return new Promise((resolve) => {
let real_url = this.baseURL === "" ? "main.json" : this.baseURL + "/main.json";
fetch(real_url)
.then((responseJSON) => {
return responseJSON.json();
})
.then((json) => {
resolve(json);
});
});
}
/**
* Set the control value at a given path.
*
* @param path - a path to the control
* @param val - the value to be set
*/
setParamValue(path, val) {
// Needed for sample accurate control
this.parameters.get(path).setValueAtTime(val, 0);
}
// For WAP
setParam(path, val) {
// Needed for sample accurate control
this.parameters.get(path).setValueAtTime(val, 0);
}
/**
* Get the control value at a given path.
*
* @return the current control value
*/
getParamValue(path) {
return this.parameters.get(path).value;
}
// For WAP
getParam(path) {
return this.parameters.get(path).value;
}
/**
* Setup a control output handler with a function of type (path, value)
* to be used on each generated output value. This handler will be called
* each audio cycle at the end of the 'compute' method.
*
* @param handler - a function of type function(path, value)
*/
setOutputParamHandler(handler) {
this.output_handler = handler;
}
/**
* Get the current output handler.
*/
getOutputParamHandler() {
return this.output_handler;
}
getNumInputs() {
return parseInt(this.json_object.inputs);
}
getNumOutputs() {
return parseInt(this.json_object.outputs);
}
// For WAP
inputChannelCount() {
return parseInt(this.json_object.inputs);
}
outputChannelCount() {
return parseInt(this.json_object.outputs);
}
/**
* Returns an array of all input paths (to be used with setParamValue/getParamValue)
*/
getParams() {
return this.inputs_items;
}
// For WAP
getDescriptor() {
var desc = {};
for (const item in this.descriptor) {
if (this.descriptor.hasOwnProperty(item)) {
if (this.descriptor[item].label != "bypass") {
desc = Object.assign(
{
[this.descriptor[item].label]: {
minValue: this.descriptor[item].min,
maxValue: this.descriptor[item].max,
defaultValue: this.descriptor[item].init,
},
},
desc
);
}
}
}
return desc;
}
/**
* Control change
*
* @param channel - the MIDI channel (0..15, not used for now)
* @param ctrl - the MIDI controller number (0..127)
* @param value - the MIDI controller value (0..127)
*/
ctrlChange(channel, ctrl, value) {
if (this.fCtrlLabel[ctrl] !== []) {
for (var i = 0; i < this.fCtrlLabel[ctrl].length; i++) {
var path = this.fCtrlLabel[ctrl][i].path;
this.setParamValue(
path,
kbverbNode.remap(value, 0, 127, this.fCtrlLabel[ctrl][i].min, this.fCtrlLabel[ctrl][i].max)
);
if (this.output_handler) {
this.output_handler(path, this.getParamValue(path));
}
}
}
}
/**
* PitchWeel
*
* @param channel - the MIDI channel (0..15, not used for now)
* @param value - the MIDI controller value (0..16383)
*/
pitchWheel(channel, wheel) {
for (var i = 0; i < this.fPitchwheelLabel.length; i++) {
var pw = this.fPitchwheelLabel[i];
this.setParamValue(pw.path, kbverbNode.remap(wheel, 0, 16383, pw.min, pw.max));
if (this.output_handler) {
this.output_handler(pw.path, this.getParamValue(pw.path));
}
}
}
/**
* Generic MIDI message handler.
*/
midiMessage(data) {
var cmd = data[0] >> 4;
var channel = data[0] & 0xf;
var data1 = data[1];
var data2 = data[2];
if (channel === 9) {
return;
} else if (cmd === 11) {
this.ctrlChange(channel, data1, data2);
} else if (cmd === 14) {
this.pitchWheel(channel, data2 * 128.0 + data1);
}
}
// For WAP
onMidi(data) {
midiMessage(data);
}
/**
* @returns {Object} describes the path for each available param and its current value
*/
async getState() {
var params = new Object();
for (let i = 0; i < this.getParams().length; i++) {
Object.assign(params, { [this.getParams()[i]]: `${this.getParam(this.getParams()[i])}` });
}
return new Promise((resolve) => {
resolve(params);
});
}
/**
* Sets each params with the value indicated in the state object
* @param {Object} state
*/
async setState(state) {
return new Promise((resolve) => {
for (const param in state) {
if (state.hasOwnProperty(param)) this.setParam(param, state[param]);
}
try {
this.gui.setAttribute("state", JSON.stringify(state));
} catch (error) {
console.warn("Plugin without gui or GUI not defined", error);
}
resolve(state);
});
}
/**
* A different call closer to the preset management
* @param {Object} patch to assign as a preset to the node
*/
setPatch(patch) {
this.setState(this.presets[patch]);
}
static remap(v, mn0, mx0, mn1, mx1) {
return ((1.0 * (v - mn0)) / (mx0 - mn0)) * (mx1 - mn1) + mn1;
}
}
// Factory class
export default class kbverb {
static fWorkletProcessors;
/**
* Factory constructor.
*
* @param context - the audio context
* @param baseURL - the baseURL of the plugin folder
*/
constructor(context, baseURL = "") {
console.log("baseLatency " + context.baseLatency);
console.log("outputLatency " + context.outputLatency);
console.log("sampleRate " + context.sampleRate);
this.context = context;
this.baseURL = baseURL;
this.pathTable = [];
this.fWorkletProcessors = this.fWorkletProcessors || [];
}
heap2Str(buf) {
let str = "";
let i = 0;
while (buf[i] !== 0) {
str += String.fromCharCode(buf[i++]);
}
return str;
}
/**
* Load additionnal resources to prepare the custom AudioWorkletNode. Returns a promise to be used with the created node.
*/
async load() {
try {
const importObject = {
env: {
memoryBase: 0,
tableBase: 0,
_abs: Math.abs,
// Float version
_acosf: Math.acos,
_asinf: Math.asin,
_atanf: Math.atan,
_atan2f: Math.atan2,
_ceilf: Math.ceil,
_cosf: Math.cos,
_expf: Math.exp,
_floorf: Math.floor,
_fmodf: (x, y) => x % y,
_logf: Math.log,
_log10f: Math.log10,
_max_f: Math.max,
_min_f: Math.min,
_remainderf: (x, y) => x - Math.round(x / y) * y,
_powf: Math.pow,
_roundf: Math.fround,
_sinf: Math.sin,
_sqrtf: Math.sqrt,
_tanf: Math.tan,
_acoshf: Math.acosh,
_asinhf: Math.asinh,
_atanhf: Math.atanh,
_coshf: Math.cosh,
_sinhf: Math.sinh,
_tanhf: Math.tanh,
_isnanf: Number.isNaN,
_isinff: function (x) {
return !isFinite(x);
},
_copysignf: function (x, y) {
return Math.sign(x) === Math.sign(y) ? x : -x;
},
// Double version
_acos: Math.acos,
_asin: Math.asin,
_atan: Math.atan,
_atan2: Math.atan2,
_ceil: Math.ceil,
_cos: Math.cos,
_exp: Math.exp,
_floor: Math.floor,
_fmod: (x, y) => x % y,
_log: Math.log,
_log10: Math.log10,
_max_: Math.max,
_min_: Math.min,
_remainder: (x, y) => x - Math.round(x / y) * y,
_pow: Math.pow,
_round: Math.fround,
_sin: Math.sin,
_sqrt: Math.sqrt,
_tan: Math.tan,
_acosh: Math.acosh,
_asinh: Math.asinh,
_atanh: Math.atanh,
_cosh: Math.cosh,
_sinh: Math.sinh,
_tanh: Math.tanh,
_isnan: Number.isNaN,
_isinf: function (x) {
return !isFinite(x);
},
_copysign: function (x, y) {
return Math.sign(x) === Math.sign(y) ? x : -x;
},
table: new WebAssembly.Table({ initial: 0, element: "anyfunc" }),
},
};
let real_url = this.baseURL === "" ? "kbverb.wasm" : this.baseURL + "/kbverb.wasm";
const dspFile = await fetch(real_url);
const dspBuffer = await dspFile.arrayBuffer();
const dspModule = await WebAssembly.compile(dspBuffer);
const dspInstance = await WebAssembly.instantiate(dspModule, importObject);
let HEAPU8 = new Uint8Array(dspInstance.exports.memory.buffer);
let json = this.heap2Str(HEAPU8);
let json_object = JSON.parse(json);
let options = { wasm_module: dspModule, json: json };
if (this.fWorkletProcessors.indexOf(name) === -1) {
try {
let re = /JSON_STR/g;
let kbverbProcessorString1 = kbverbProcessorString.replace(re, json);
let real_url = window.URL.createObjectURL(new Blob([kbverbProcessorString1], { type: "text/javascript" }));
await this.context.audioWorklet.addModule(real_url);
// Keep the DSP name
console.log("Keep the DSP name");
this.fWorkletProcessors.push(name);
} catch (e) {
console.error(e);
console.error("Faust " + this.name + " cannot be loaded or compiled");
return null;
}
}
this.node = new kbverbNode(this.context, this.baseURL, {
numberOfInputs: parseInt(json_object.inputs) > 0 ? 1 : 0,
numberOfOutputs: parseInt(json_object.outputs) > 0 ? 1 : 0,
channelCount: Math.max(1, parseInt(json_object.inputs)),
outputChannelCount: [parseInt(json_object.outputs)],
channelCountMode: "explicit",
channelInterpretation: "speakers",
processorOptions: options,
});
this.node.onprocessorerror = () => {
console.log("An error from kbverb-processor was detected.");
};
return this.node;
} catch (e) {
console.