UNPKG

web-audio-test-api

Version:
313 lines (264 loc) 12.5 kB
"use strict"; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _desc, _value, _class; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _Immigration = require("./utils/Immigration"); var _Immigration2 = _interopRequireDefault(_Immigration); var _Junction = require("./utils/Junction"); var _Junction2 = _interopRequireDefault(_Junction); var _defaults = require("./utils/defaults"); var _defaults2 = _interopRequireDefault(_defaults); var _toJSON2 = require("./utils/toJSON"); var _toJSON3 = _interopRequireDefault(_toJSON2); var _toSeconds = require("./utils/toSeconds"); var _toSeconds2 = _interopRequireDefault(_toSeconds); var _props = require("./decorators/props"); var props = _interopRequireWildcard(_props); var _methods = require("./decorators/methods"); var methods = _interopRequireWildcard(_methods); var _validators = require("./validators"); var validators = _interopRequireWildcard(_validators); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var immigration = _Immigration2.default.getInstance(); var AudioParam = (_dec = props.typed(validators.isNumber, 0), _dec2 = props.readonly(), _dec3 = props.readonly(), _dec4 = methods.param("value", validators.isNumber), _dec5 = methods.param("startTime", validators.isNumber), _dec6 = methods.param("value", validators.isNumber), _dec7 = methods.param("endTime", validators.isNumber), _dec8 = methods.param("value", validators.isNumber), _dec9 = methods.param("endTime", validators.isNumber), _dec10 = methods.param("value", validators.isNumber), _dec11 = methods.param("endTime", validators.isNumber), _dec12 = methods.param("timeConstant", validators.isNumber), _dec13 = methods.param("values", validators.isInstanceOf(Float32Array)), _dec14 = methods.param("startTime", validators.isNumber), _dec15 = methods.param("duration", validators.isNumber), _dec16 = methods.param("startTime", validators.isNumber), (_class = (function () { function AudioParam(admission, node, name, defaultValue) { _classCallCheck(this, AudioParam); immigration.check(admission, function () { throw new TypeError("Illegal constructor"); }); Object.defineProperty(this, "_", { value: {} }); this._.value = defaultValue; this._.name = name; this._.defaultValue = defaultValue; this._.context = node.context; this._.node = node; this._.inputs = [new _Junction2.default(this, 0)]; this._.events = []; this._.tick = -1; } _createClass(AudioParam, [{ key: "name", value: function name() { return this._.name; } }, { key: "defaultValue", value: function defaultValue() { return this._.defaultValue; } }, { key: "setValueAtTime", value: function setValueAtTime(value, startTime) { this.__insertEvent({ type: "SetValue", value: value, time: startTime }); } }, { key: "linearRampToValueAtTime", value: function linearRampToValueAtTime(value, endTime) { this.__insertEvent({ type: "LinearRampToValue", value: value, time: endTime }); } }, { key: "exponentialRampToValueAtTime", value: function exponentialRampToValueAtTime(value, endTime) { this.__insertEvent({ type: "ExponentialRampToValue", value: value, time: endTime }); } }, { key: "setTargetAtTime", value: function setTargetAtTime(target, startTime, timeConstant) { this.__insertEvent({ type: "SetTarget", value: target, time: startTime, timeConstant: timeConstant }); } }, { key: "setValueCurveAtTime", value: function setValueCurveAtTime(values, startTime, duration) { this.__insertEvent({ type: "SetValueCurve", time: startTime, duration: duration, curve: values }); } }, { key: "cancelScheduledValues", value: function cancelScheduledValues(startTime) { var events = this.$events; for (var i = 0, imax = events.length; i < imax; ++i) { if (events[i].time >= startTime) { return events.splice(i); } } } }, { key: "toJSON", value: function toJSON(memo) { return (0, _toJSON3.default)(this, function (node, memo) { var json = {}; json.value = node.value; json.inputs = node.$inputs[0].toJSON(memo); return json; }, memo); } }, { key: "$valueAtTime", value: function $valueAtTime(when) { var time = (0, _toSeconds2.default)(when); var value = this._.value; var events = this.$events; var t0 = undefined; for (var i = 0; i < events.length; i++) { var e0 = events[i]; var e1 = events[i + 1]; if (time < e0.time) { break; } t0 = Math.min(time, e1 ? e1.time : time); if (e1 && e1.type === "LinearRampToValue") { value = AudioParam.$linearRampToValueAtTime(value, e0.value, e1.value, t0, e0.time, e1.time); } else if (e1 && e1.type === "ExponentialRampToValue") { value = AudioParam.$exponentialRampToValueAtTime(value, e0.value, e1.value, t0, e0.time, e1.time); } else { switch (e0.type) { case "SetValue": case "LinearRampToValue": case "ExponentialRampToValue": value = e0.value; break; case "SetTarget": value = AudioParam.$setTargetAtTime(value, e0.value, t0, e0.time, e0.timeConstant); break; case "SetValueCurve": value = AudioParam.$setValueCurveAtTime(value, t0, e0.time, e0.time + e0.duration, e0.curve); break; default: // no default } } } return value; } }, { key: "$process", value: function $process(inNumSamples, tick) { if (this._.tick !== tick) { this._.tick = tick; this.$inputs[0].process(inNumSamples, tick); } } }, { key: "$isConnectedFrom", value: function $isConnectedFrom(destination) { var output = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; if (!(destination instanceof global.AudioNode)) { return false; } var outputJunction = destination._.outputs[output]; var inputJunction = this._.inputs[0]; if (!outputJunction || !inputJunction) { return false; } return inputJunction.inputs.some(function (junction) { return junction === outputJunction; }); } }, { key: "__insertEvent", value: function __insertEvent(event) { var time = event.time; var events = this.$events; var replace = 0; var i = undefined, imax = events.length; for (i = 0; i < imax; ++i) { if (events[i].time === time && events[i].type === event.type) { replace = 1; break; } if (events[i].time > time) { break; } } events.splice(i, replace, event); } }, { key: "value", get: function get() { this._.value = this.$valueAtTime(this.$context.currentTime); return this._.value; } }, { key: "$name", get: function get() { return "AudioParam"; } }, { key: "$context", get: function get() { return this._.context; } }, { key: "$node", get: function get() { return this._.node; } }, { key: "$inputs", get: function get() { return this._.inputs; } }, { key: "$events", get: function get() { return this._.events; } }], [{ key: "$linearRampToValueAtTime", value: function $linearRampToValueAtTime(v, v0, v1, t, t0, t1) { if (t <= t0) { return v0; } if (t1 <= t) { return v1; } var dt = (t - t0) / (t1 - t0); return (1 - dt) * v0 + dt * v1; } }, { key: "$exponentialRampToValueAtTime", value: function $exponentialRampToValueAtTime(v, v0, v1, t, t0, t1) { if (t <= t0) { return v0; } if (t1 <= t) { return v1; } if (v0 === v1) { return v0; } var dt = (t - t0) / (t1 - t0); if (0 < v0 && 0 < v1 || v0 < 0 && v1 < 0) { return v0 * Math.pow(v1 / v0, dt); } return v; } }, { key: "$setTargetAtTime", value: function $setTargetAtTime(v0, v1, t, t0, tau) { if (t <= t0) { return v0; } return v1 + (v0 - v1) * Math.exp((t0 - t) / tau); } }, { key: "$setValueCurveAtTime", value: function $setValueCurveAtTime(v, t, t0, t1, curve) { var dt = (t - t0) / (t1 - t0); if (dt <= 0) { return (0, _defaults2.default)(curve[0], v); } if (1 <= dt) { return (0, _defaults2.default)(curve[curve.length - 1], v); } return (0, _defaults2.default)(curve[curve.length * dt | 0], v); } }]); return AudioParam; })(), (_desc = _dec(_class.prototype, "value", _desc = Object.getOwnPropertyDescriptor(_class.prototype, "value")) || _desc, _desc ? Object.defineProperty(_class.prototype, "value", _desc) : void 0, _desc = _dec2(_class.prototype, "name", _desc = Object.getOwnPropertyDescriptor(_class.prototype, "name")) || _desc, _desc ? Object.defineProperty(_class.prototype, "name", _desc) : void 0, _desc = _dec3(_class.prototype, "defaultValue", _desc = Object.getOwnPropertyDescriptor(_class.prototype, "defaultValue")) || _desc, _desc ? Object.defineProperty(_class.prototype, "defaultValue", _desc) : void 0, _desc = _dec4(_class.prototype, "setValueAtTime", _desc = _dec5(_class.prototype, "setValueAtTime", _desc = Object.getOwnPropertyDescriptor(_class.prototype, "setValueAtTime")) || _desc) || _desc, _desc ? Object.defineProperty(_class.prototype, "setValueAtTime", _desc) : void 0, _desc = _dec6(_class.prototype, "linearRampToValueAtTime", _desc = _dec7(_class.prototype, "linearRampToValueAtTime", _desc = Object.getOwnPropertyDescriptor(_class.prototype, "linearRampToValueAtTime")) || _desc) || _desc, _desc ? Object.defineProperty(_class.prototype, "linearRampToValueAtTime", _desc) : void 0, _desc = _dec8(_class.prototype, "exponentialRampToValueAtTime", _desc = _dec9(_class.prototype, "exponentialRampToValueAtTime", _desc = Object.getOwnPropertyDescriptor(_class.prototype, "exponentialRampToValueAtTime")) || _desc) || _desc, _desc ? Object.defineProperty(_class.prototype, "exponentialRampToValueAtTime", _desc) : void 0, _desc = _dec10(_class.prototype, "setTargetAtTime", _desc = _dec11(_class.prototype, "setTargetAtTime", _desc = _dec12(_class.prototype, "setTargetAtTime", _desc = Object.getOwnPropertyDescriptor(_class.prototype, "setTargetAtTime")) || _desc) || _desc) || _desc, _desc ? Object.defineProperty(_class.prototype, "setTargetAtTime", _desc) : void 0, _desc = _dec13(_class.prototype, "setValueCurveAtTime", _desc = _dec14(_class.prototype, "setValueCurveAtTime", _desc = _dec15(_class.prototype, "setValueCurveAtTime", _desc = Object.getOwnPropertyDescriptor(_class.prototype, "setValueCurveAtTime")) || _desc) || _desc) || _desc, _desc ? Object.defineProperty(_class.prototype, "setValueCurveAtTime", _desc) : void 0, _desc = _dec16(_class.prototype, "cancelScheduledValues", _desc = Object.getOwnPropertyDescriptor(_class.prototype, "cancelScheduledValues")) || _desc, _desc ? Object.defineProperty(_class.prototype, "cancelScheduledValues", _desc) : void 0), _class)); exports.default = AudioParam;