UNPKG

virtual-audio-graph

Version:

Library for declaratively manipulating the Web Audio API

45 lines (44 loc) 2.01 kB
"use strict"; 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); }