2014-08-24 16:46:45 +00:00
|
|
|
define(["Tone/core/Tone", "Tone/signal/Signal", "Tone/component/Filter"], function(Tone){
|
|
|
|
|
2014-09-04 04:41:40 +00:00
|
|
|
"use strict";
|
|
|
|
|
2014-08-24 16:46:45 +00:00
|
|
|
/**
|
|
|
|
* @class A 3 band EQ with control over low, mid, and high gain as
|
|
|
|
* well as the low and high crossover frequencies.
|
|
|
|
*
|
|
|
|
* @constructor
|
|
|
|
* @extends {Tone}
|
|
|
|
*
|
|
|
|
* @param {number|object=} [lowLevel=1] the gain applied to the low
|
|
|
|
* @param {number=} [midLevel=1] the gain applied to the mid
|
|
|
|
* @param {number=} [highLevel=1] the gain applied to the high
|
|
|
|
*/
|
2014-08-24 23:28:42 +00:00
|
|
|
Tone.EQ = function(){
|
2014-08-24 16:46:45 +00:00
|
|
|
|
|
|
|
Tone.call(this);
|
|
|
|
|
2014-08-25 14:23:37 +00:00
|
|
|
var options = this.optionsObject(arguments, ["low", "mid", "high"], Tone.EQ.defaults);
|
2014-08-24 16:46:45 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* the low band
|
|
|
|
* @type {Tone.Filter}
|
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
this._lowFilter = new Tone.Filter(0, "lowpass");
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the lower filter of the mid band
|
|
|
|
* @type {Tone.Filter}
|
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
this._lowMidFilter = new Tone.Filter(0, "highpass");
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the lower filter of the mid band
|
|
|
|
* @type {Tone.Filter}
|
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
this._highMidFilter = new Tone.Filter(0, "lowpass");
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the high filter
|
|
|
|
* @type {Tone.Filter}
|
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
this._highFilter = new Tone.Filter(0, "highpass");
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the crossover frequency for lows
|
|
|
|
* @type {Tone.Signal}
|
|
|
|
*/
|
|
|
|
this.lowFrequency = new Tone.Signal(options.lowFrequency);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the crossover frequency for highs
|
|
|
|
* @type {Tone.Signal}
|
|
|
|
*/
|
|
|
|
this.highFrequency = new Tone.Signal(options.highFrequency);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the low gain
|
|
|
|
* @type {GainNode}
|
|
|
|
*/
|
|
|
|
this.lowGain = this.context.createGain();
|
|
|
|
this.lowGain.gain.value = options.low;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the mid gain
|
|
|
|
* @type {GainNode}
|
|
|
|
*/
|
|
|
|
this.midGain = this.context.createGain();
|
|
|
|
this.midGain.gain.value = options.mid;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the high gain
|
|
|
|
* @type {GainNode}
|
|
|
|
*/
|
|
|
|
this.highGain = this.context.createGain();
|
|
|
|
this.highGain.gain.value = options.high;
|
|
|
|
|
|
|
|
//the frequency bands
|
|
|
|
this.chain(this.input, this._lowFilter, this.lowGain, this.output);
|
|
|
|
this.chain(this.input, this._lowMidFilter, this._highMidFilter, this.midGain, this.output);
|
|
|
|
this.chain(this.input, this._highFilter, this.highGain, this.output);
|
|
|
|
//frequency control
|
|
|
|
this.lowFrequency.connect(this._lowFilter.frequency);
|
|
|
|
this.lowFrequency.connect(this._lowMidFilter.frequency);
|
|
|
|
this.highFrequency.connect(this._highMidFilter.frequency);
|
|
|
|
this.highFrequency.connect(this._highFilter.frequency);
|
|
|
|
};
|
|
|
|
|
|
|
|
Tone.extend(Tone.EQ);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the default values
|
|
|
|
* @type {Object}
|
|
|
|
* @static
|
|
|
|
*/
|
2014-08-25 14:23:37 +00:00
|
|
|
Tone.EQ.defaults = {
|
2014-08-24 16:46:45 +00:00
|
|
|
"low" : 1,
|
|
|
|
"mid" : 1,
|
|
|
|
"high" : 1,
|
|
|
|
"lowFrequency" : 400,
|
|
|
|
"highFrequency" : 2500
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* set the values in bulk
|
|
|
|
* @param {object} params the parameters
|
|
|
|
*/
|
|
|
|
Tone.EQ.prototype.set = function(params){
|
|
|
|
if (!this.isUndef(params.mid)) this.setMid(params.mid);
|
|
|
|
if (!this.isUndef(params.high)) this.setHigh(params.high);
|
|
|
|
if (!this.isUndef(params.low)) this.setLow(params.low);
|
|
|
|
if (!this.isUndef(params.lowFrequency)) this.lowFrequency.setValue(params.lowFrequency);
|
|
|
|
if (!this.isUndef(params.highFrequency)) this.highFrequency.setValue(params.highFrequency);
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* set the mid range
|
|
|
|
* @param {number} level the level of the mids
|
|
|
|
*/
|
|
|
|
Tone.EQ.prototype.setMid = function(level){
|
|
|
|
this.midGain.gain.value = level;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* set the high range
|
|
|
|
* @param {number} level the level of the highs
|
|
|
|
*/
|
|
|
|
Tone.EQ.prototype.setHigh = function(level){
|
|
|
|
this.highGain.gain.value = level;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* set the low range
|
|
|
|
* @param {number} level the level of the lows
|
|
|
|
*/
|
|
|
|
Tone.EQ.prototype.setLow = function(level){
|
|
|
|
this.lowGain.gain.value = level;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* clean up
|
|
|
|
*/
|
|
|
|
Tone.EQ.prototype.dispose = function(){
|
|
|
|
Tone.prototype.dispose.call(this);
|
|
|
|
this._lowFilter.dispose();
|
|
|
|
this._lowMidFilter.dispose();
|
|
|
|
this._highMidFilter.dispose();
|
|
|
|
this._highFilter.dispose();
|
|
|
|
this.lowFrequency.dispose();
|
|
|
|
this.highFrequency.dispose();
|
|
|
|
this.lowGain.disconnect();
|
|
|
|
this.midGain.disconnect();
|
|
|
|
this.highGain.disconnect();
|
|
|
|
this._lowFilter = null;
|
|
|
|
this._lowMidFilter = null;
|
|
|
|
this._highMidFilter = null;
|
|
|
|
this._highFilter = null;
|
|
|
|
this.lowFrequency = null;
|
|
|
|
this.highFrequency = null;
|
|
|
|
this.lowGain = null;
|
|
|
|
this.midGain = null;
|
|
|
|
this.highGain = null;
|
|
|
|
};
|
|
|
|
|
|
|
|
return Tone.EQ;
|
|
|
|
});
|