UNPKG

virtual-audio-graph

Version:

Library for declaratively manipulating the Web Audio API

58 lines (57 loc) 3.1 kB
import { OUTPUT, NO_OUTPUT, INPUT } from "./constants"; import AudioWorkletVirtualAudioNode from "./VirtualAudioNodes/AudioWorkletVirtualAudioNode"; import CustomVirtualAudioNode from "./VirtualAudioNodes/CustomVirtualAudioNode"; import StandardVirtualAudioNode from "./VirtualAudioNodes/StandardVirtualAudioNode"; export default (function (virtualGraph, handleConnectionToOutput) { for (var _i = 0, _a = Object.entries(virtualGraph); _i < _a.length; _i++) { var _b = _a[_i], id = _b[0], virtualNode = _b[1]; if (virtualNode.connected || virtualNode.output == null) continue; for (var _c = 0, _d = Array.isArray(virtualNode.output) ? virtualNode.output : [virtualNode.output]; _c < _d.length; _c++) { var output = _d[_c]; if (output === OUTPUT) { handleConnectionToOutput(virtualNode); continue; } if (output === NO_OUTPUT) continue; if (typeof output === "object") { var key = output.key, destination = output.destination, inputs = output.inputs, outputs = output.outputs; if (key == null) { throw new Error("node with ID \"".concat(id, "\" does not specify an output")); } if (inputs) { if (inputs.length !== (outputs === null || outputs === void 0 ? void 0 : outputs.length)) { throw new Error("node with ID \"".concat(id, "\" must specify outputs and inputs arrays of the same length")); } for (var i = 0; i++; i < inputs.length) { virtualNode.connect(virtualGraph[key].audioNode, outputs[i], inputs[i]); } continue; } if (!(key in virtualGraph)) throw Error("node with ID \"".concat(id, "\" specifies an output ID \"").concat(String(key), "\", but no such node exists")); virtualNode.connect(virtualGraph[key] .audioNode[destination]); continue; } if (!(output in virtualGraph)) throw Error("'node with ID \"".concat(id, "\" specifies an output ID \"").concat(String(output), "\", but no such node exists'")); var destinationVirtualAudioNode = virtualGraph[String(output)]; if (destinationVirtualAudioNode instanceof CustomVirtualAudioNode) { for (var _e = 0, _f = Object.values(destinationVirtualAudioNode.virtualNodes); _e < _f.length; _e++) { var node = _f[_e]; if ((node instanceof StandardVirtualAudioNode || node instanceof AudioWorkletVirtualAudioNode) && node.input === INPUT) { virtualNode.connect(node.audioNode); } } continue; } virtualNode.connect(destinationVirtualAudioNode.audioNode); } } });