Tone.js/Tone/core/Gain.js

99 lines
2.3 KiB
JavaScript
Raw Normal View History

2016-04-18 04:36:08 +00:00
define(["Tone/core/Tone", "Tone/core/Param", "Tone/type/Type"], function (Tone) {
2015-08-15 23:30:43 +00:00
2015-10-21 16:11:19 +00:00
"use strict";
/**
* createGain shim
* @private
*/
if (window.GainNode && !AudioContext.prototype.createGain){
AudioContext.prototype.createGain = AudioContext.prototype.createGainNode;
}
2015-08-15 23:30:43 +00:00
/**
* @class A thin wrapper around the Native Web Audio GainNode.
* The GainNode is a basic building block of the Web Audio
* API and is useful for routing audio and adjusting gains.
* @extends {Tone}
* @param {Number=} gain The initial gain of the GainNode
2015-10-21 14:02:23 +00:00
* @param {Tone.Type=} units The units of the gain parameter.
2015-08-15 23:30:43 +00:00
*/
2015-10-21 14:02:23 +00:00
Tone.Gain = function(){
2015-08-15 23:30:43 +00:00
2017-04-26 02:23:22 +00:00
var options = Tone.defaults(arguments, ["gain", "units"], Tone.Gain);
Tone.call(this);
2015-08-16 18:23:01 +00:00
2015-08-15 23:30:43 +00:00
/**
* The GainNode
* @type {GainNode}
* @private
*/
this.input = this.output = this._gainNode = this.context.createGain();
2015-08-15 23:30:43 +00:00
/**
2015-10-21 14:02:23 +00:00
* The gain parameter of the gain node.
* @type {Tone.Param}
2015-08-15 23:30:43 +00:00
* @signal
*/
this.gain = new Tone.Param({
"param" : this._gainNode.gain,
"units" : options.units,
"value" : options.gain,
"convert" : options.convert
});
2015-08-15 23:30:43 +00:00
this._readOnly("gain");
};
Tone.extend(Tone.Gain);
2015-08-15 23:30:43 +00:00
/**
* The defaults
* @const
* @type {Object}
*/
Tone.Gain.defaults = {
"gain" : 1,
"convert" : true,
2015-08-15 23:30:43 +00:00
};
/**
* Clean up.
* @return {Tone.Gain} this
*/
Tone.Gain.prototype.dispose = function(){
2015-10-21 14:02:23 +00:00
Tone.Param.prototype.dispose.call(this);
2015-08-15 23:30:43 +00:00
this._gainNode.disconnect();
this._gainNode = null;
this._writable("gain");
this.gain.dispose();
2015-08-15 23:30:43 +00:00
this.gain = null;
};
//STATIC///////////////////////////////////////////////////////////////////
/**
* Create input and outputs for this object.
* @param {Number} input The number of inputs
* @param {Number=} outputs The number of outputs
* @return {Tone} this
* @internal
*/
Tone.prototype.createInsOuts = function(inputs, outputs){
if (inputs === 1){
this.input = new Tone.Gain();
} else if (inputs > 1){
this.input = new Array(inputs);
}
if (outputs === 1){
this.output = new Tone.Gain();
} else if (outputs > 1){
this.output = new Array(outputs);
}
};
///////////////////////////////////////////////////////////////////////////
2015-08-15 23:30:43 +00:00
return Tone.Gain;
});