virtual-audio-graph
Version:
Library for declaratively manipulating the Web Audio API
45 lines (44 loc) • 2.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = updateVirtualNodeGraph;
var connectAudioNodes_1 = require("./connectAudioNodes");
var utils_1 = require("./utils");
var disconnectParents = function (virtualGraph, virtualNode) {
for (var _i = 0, _a = Object.values(virtualGraph); _i < _a.length; _i++) {
var node = _a[_i];
node.disconnect(virtualNode);
}
};
function updateVirtualNodeGraph(currentGraph, newGraph, audioContext, connectCallback) {
if (connectCallback === void 0) { connectCallback = function () { }; }
for (var _i = 0, _a = Object.entries(currentGraph); _i < _a.length; _i++) {
var _b = _a[_i], id = _b[0], virtualAudioNode = _b[1];
if (newGraph.hasOwnProperty(id))
continue;
virtualAudioNode.disconnectAndDestroy();
disconnectParents(currentGraph, virtualAudioNode);
delete currentGraph[id];
}
for (var _c = 0, _d = Object.keys(newGraph); _c < _d.length; _c++) {
var key = _d[_c];
var newVirtualAudioNode = newGraph[key];
var virtualAudioNode = currentGraph[key];
if (virtualAudioNode == null) {
currentGraph[key] = newVirtualAudioNode.initialize(audioContext);
continue;
}
if (virtualAudioNode.cannotUpdateInPlace(newVirtualAudioNode)) {
virtualAudioNode.disconnectAndDestroy();
disconnectParents(currentGraph, virtualAudioNode);
currentGraph[key] = newVirtualAudioNode.initialize(audioContext);
continue;
}
if (!(0, utils_1.equals)(newVirtualAudioNode.output, virtualAudioNode.output)) {
virtualAudioNode.disconnect();
disconnectParents(currentGraph, virtualAudioNode);
virtualAudioNode.output = newVirtualAudioNode.output;
}
virtualAudioNode.update(newVirtualAudioNode.params, audioContext);
}
(0, connectAudioNodes_1.default)(currentGraph, connectCallback);
}