virtual-audio-graph
Version:
Library for declaratively manipulating the Web Audio API
86 lines (85 loc) • 3.85 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var connectAudioNodes_1 = require("../connectAudioNodes");
var constants_1 = require("../constants");
var updateVirtualNodeGraph_1 = require("../updateVirtualNodeGraph");
var VirtualAudioNodeBase_1 = require("./VirtualAudioNodeBase");
var CustomVirtualAudioNode = /** @class */ (function (_super) {
__extends(CustomVirtualAudioNode, _super);
function CustomVirtualAudioNode(node, output, params) {
var _this = _super.call(this) || this;
_this.node = node;
_this.output = output;
_this.audioNode = undefined;
_this.connected = false;
_this.params = params || {};
return _this;
}
CustomVirtualAudioNode.prototype.connect = function () {
var connectArgs = [];
for (var _i = 0; _i < arguments.length; _i++) {
connectArgs[_i] = arguments[_i];
}
for (var _a = 0, _b = Object.values(this.virtualNodes); _a < _b.length; _a++) {
var childVirtualNode = _b[_a];
var output = childVirtualNode.output;
if (output === constants_1.OUTPUT ||
(Array.isArray(output) && output.indexOf(constants_1.OUTPUT) !== -1)) {
childVirtualNode.connect.apply(childVirtualNode, connectArgs.filter(Boolean));
}
}
this.connected = true;
};
CustomVirtualAudioNode.prototype.disconnect = function (node) {
for (var _i = 0, _a = Object.values(this.virtualNodes); _i < _a.length; _i++) {
var virtualNode = _a[_i];
var output = virtualNode.output;
if (output === constants_1.OUTPUT ||
(Array.isArray(output) && output.indexOf(constants_1.OUTPUT) !== -1)) {
virtualNode.disconnect(node);
}
}
this.connected = false;
};
CustomVirtualAudioNode.prototype.disconnectAndDestroy = function () {
for (var _i = 0, _a = Object.values(this.virtualNodes); _i < _a.length; _i++) {
var virtualNode = _a[_i];
virtualNode.disconnectAndDestroy();
}
this.connected = false;
};
CustomVirtualAudioNode.prototype.initialize = function (audioContext) {
this.virtualNodes = Object.fromEntries(Object.entries(this.node(this.params)).map(function (_a) {
var key = _a[0], virtualAudioNodeParam = _a[1];
return [
key,
virtualAudioNodeParam.initialize(audioContext),
];
}));
(0, connectAudioNodes_1.default)(this.virtualNodes, function () { });
return this;
};
CustomVirtualAudioNode.prototype.update = function (_params, audioContext) {
var params = _params !== null && _params !== void 0 ? _params : {};
(0, updateVirtualNodeGraph_1.default)(this.virtualNodes, this.node(params), audioContext);
this.params = params;
return this;
};
return CustomVirtualAudioNode;
}(VirtualAudioNodeBase_1.default));
exports.default = CustomVirtualAudioNode;