import Tone from "../core/Tone"; import "../core/AudioNode"; /** * @class Base class for all Signals. Used Internally. * * @constructor * @extends {Tone} */ Tone.SignalBase = function(){ Tone.AudioNode.call(this); }; Tone.extend(Tone.SignalBase, Tone.AudioNode); /** * When signals connect to other signals or AudioParams, * they take over the output value of that signal or AudioParam. * For all other nodes, the behavior is the same as a default connect. * * @override * @param {AudioParam|AudioNode|Tone.Signal|Tone} node * @param {number} [outputNumber=0] The output number to connect from. * @param {number} [inputNumber=0] The input number to connect to. * @returns {Tone.SignalBase} this */ Tone.SignalBase.prototype.connect = function(node, outputNumber, inputNumber){ //zero it out so that the signal can have full control if ((Tone.Signal && Tone.Signal === node.constructor) || (Tone.Param && Tone.Param === node.constructor)){ //cancel changes node._param.cancelScheduledValues(0); //reset the value node._param.setValueAtTime(0, 0); //mark the value as overridden node.overridden = true; } else if (node instanceof AudioParam){ node.cancelScheduledValues(0); node.setValueAtTime(0, 0); } Tone.AudioNode.prototype.connect.call(this, node, outputNumber, inputNumber); return this; }; export default Tone.SignalBase;