diff --git a/src/app.js b/src/app.js index a40d93e9..2a34f4e6 100644 --- a/src/app.js +++ b/src/app.js @@ -31,7 +31,10 @@ import Effect from './effect' ; p5.Effect = Effect; import './filter'; -import './eq'; + +import EQ from './eq'; +p5.EQ = EQ; + import './panner3d'; import './listener3d'; import './delay'; diff --git a/src/eq.js b/src/eq.js index 82f3d7ee..9702171d 100644 --- a/src/eq.js +++ b/src/eq.js @@ -79,125 +79,125 @@ import EQFilter from './eqFilter'; * } * */ -p5.EQ = function (_eqsize) { - Effect.call(this); +class EQ extends Effect { + constructor(_eqsize) { + super(); - //p5.EQ can be of size (3) or (8), defaults to 3 - _eqsize = _eqsize === 3 || _eqsize === 8 ? _eqsize : 3; + //p5.EQ can be of size (3) or (8), defaults to 3 + _eqsize = _eqsize === 3 || _eqsize === 8 ? _eqsize : 3; - var factor; - _eqsize === 3 ? (factor = Math.pow(2, 3)) : (factor = 2); + var factor; + _eqsize === 3 ? (factor = Math.pow(2, 3)) : (factor = 2); - /** - * The p5.EQ is built with abstracted p5.Filter objects. - * To modify any bands, use methods of the - * p5.Filter API, especially `gain` and `freq`. - * Bands are stored in an array, with indices 0 - 3, or 0 - 7 - * @property {Array} bands - * - */ - this.bands = []; + /** + * The p5.EQ is built with abstracted p5.Filter objects. + * To modify any bands, use methods of the + * p5.Filter API, especially `gain` and `freq`. + * Bands are stored in an array, with indices 0 - 3, or 0 - 7 + * @property {Array} bands + * + */ + this.bands = []; - var freq, res; - for (var i = 0; i < _eqsize; i++) { - if (i === _eqsize - 1) { - freq = 21000; - res = 0.01; - } else if (i === 0) { - freq = 100; - res = 0.1; - } else if (i === 1) { - freq = _eqsize === 3 ? 360 * factor : 360; - res = 1; - } else { - freq = this.bands[i - 1].freq() * factor; - res = 1; - } - this.bands[i] = this._newBand(freq, res); + var freq, res; + for (var i = 0; i < _eqsize; i++) { + if (i === _eqsize - 1) { + freq = 21000; + res = 0.01; + } else if (i === 0) { + freq = 100; + res = 0.1; + } else if (i === 1) { + freq = _eqsize === 3 ? 360 * factor : 360; + res = 1; + } else { + freq = this.bands[i - 1].freq() * factor; + res = 1; + } + this.bands[i] = this._newBand(freq, res); - if (i > 0) { - this.bands[i - 1].connect(this.bands[i].biquad); - } else { - this.input.connect(this.bands[i].biquad); + if (i > 0) { + this.bands[i - 1].connect(this.bands[i].biquad); + } else { + this.input.connect(this.bands[i].biquad); + } } + this.bands[_eqsize - 1].connect(this.output); } - this.bands[_eqsize - 1].connect(this.output); -}; -p5.EQ.prototype = Object.create(Effect.prototype); -/** - * Process an input by connecting it to the EQ - * @method process - * @param {Object} src Audio source - */ -p5.EQ.prototype.process = function (src) { - src.connect(this.input); -}; + /** + * Process an input by connecting it to the EQ + * @method process + * @param {Object} src Audio source + */ + process(src) { + src.connect(this.input); + } -// /** -// * Set the frequency and gain of each band in the EQ. This method should be -// * called with 3 or 8 frequency and gain pairs, depending on the size of the EQ. -// * ex. eq.set(freq0, gain0, freq1, gain1, freq2, gain2); -// * -// * @method set -// * @for p5.EQ -// * @param {Number} [freq0] Frequency value for band with index 0 -// * @param {Number} [gain0] Gain value for band with index 0 -// * @param {Number} [freq1] Frequency value for band with index 1 -// * @param {Number} [gain1] Gain value for band with index 1 -// * @param {Number} [freq2] Frequency value for band with index 2 -// * @param {Number} [gain2] Gain value for band with index 2 -// * @param {Number} [freq3] Frequency value for band with index 3 -// * @param {Number} [gain3] Gain value for band with index 3 -// * @param {Number} [freq4] Frequency value for band with index 4 -// * @param {Number} [gain4] Gain value for band with index 4 -// * @param {Number} [freq5] Frequency value for band with index 5 -// * @param {Number} [gain5] Gain value for band with index 5 -// * @param {Number} [freq6] Frequency value for band with index 6 -// * @param {Number} [gain6] Gain value for band with index 6 -// * @param {Number} [freq7] Frequency value for band with index 7 -// * @param {Number} [gain7] Gain value for band with index 7 -// */ -p5.EQ.prototype.set = function () { - if (arguments.length === this.bands.length * 2) { - for (var i = 0; i < arguments.length; i += 2) { - this.bands[i / 2].freq(arguments[i]); - this.bands[i / 2].gain(arguments[i + 1]); + // /** + // * Set the frequency and gain of each band in the EQ. This method should be + // * called with 3 or 8 frequency and gain pairs, depending on the size of the EQ. + // * ex. eq.set(freq0, gain0, freq1, gain1, freq2, gain2); + // * + // * @method set + // * @for p5.EQ + // * @param {Number} [freq0] Frequency value for band with index 0 + // * @param {Number} [gain0] Gain value for band with index 0 + // * @param {Number} [freq1] Frequency value for band with index 1 + // * @param {Number} [gain1] Gain value for band with index 1 + // * @param {Number} [freq2] Frequency value for band with index 2 + // * @param {Number} [gain2] Gain value for band with index 2 + // * @param {Number} [freq3] Frequency value for band with index 3 + // * @param {Number} [gain3] Gain value for band with index 3 + // * @param {Number} [freq4] Frequency value for band with index 4 + // * @param {Number} [gain4] Gain value for band with index 4 + // * @param {Number} [freq5] Frequency value for band with index 5 + // * @param {Number} [gain5] Gain value for band with index 5 + // * @param {Number} [freq6] Frequency value for band with index 6 + // * @param {Number} [gain6] Gain value for band with index 6 + // * @param {Number} [freq7] Frequency value for band with index 7 + // * @param {Number} [gain7] Gain value for band with index 7 + // */ + set() { + if (arguments.length === this.bands.length * 2) { + for (var i = 0; i < arguments.length; i += 2) { + this.bands[i / 2].freq(arguments[i]); + this.bands[i / 2].gain(arguments[i + 1]); + } + } else { + console.error( + 'Argument mismatch. .set() should be called with ' + + this.bands.length * 2 + + ' arguments. (one frequency and gain value pair for each band of the eq)' + ); } - } else { - console.error( - 'Argument mismatch. .set() should be called with ' + - this.bands.length * 2 + - ' arguments. (one frequency and gain value pair for each band of the eq)' - ); } -}; -/** - * Add a new band. Creates a p5.Filter and strips away everything but - * the raw biquad filter. This method returns an abstracted p5.Filter, - * which can be added to p5.EQ.bands, in order to create new EQ bands. - * @private - * @for p5.EQ - * @method _newBand - * @param {Number} freq - * @param {Number} res - * @return {Object} Abstracted Filter - */ -p5.EQ.prototype._newBand = function (freq, res) { - return new EQFilter(freq, res); -}; + /** + * Add a new band. Creates a p5.Filter and strips away everything but + * the raw biquad filter. This method returns an abstracted p5.Filter, + * which can be added to p5.EQ.bands, in order to create new EQ bands. + * @private + * @for p5.EQ + * @method _newBand + * @param {Number} freq + * @param {Number} res + * @return {Object} Abstracted Filter + */ + _newBand(freq, res) { + return new EQFilter(freq, res); + } -p5.EQ.prototype.dispose = function () { - Effect.prototype.dispose.apply(this); + dispose() { + super.dispose(); - if (this.bands) { - while (this.bands.length > 0) { - delete this.bands.pop().dispose(); + if (this.bands) { + while (this.bands.length > 0) { + delete this.bands.pop().dispose(); + } + delete this.bands; } - delete this.bands; } -}; - -export default p5.EQ; +} +export default EQ;