mirror of
https://github.com/Tonejs/Tone.js
synced 2024-12-29 04:53:10 +00:00
ed71d8141b
no longer using AMD (require.js) style imports, and beginning to move to es6 "import/export" statements everywhere.
103 lines
2.2 KiB
JavaScript
103 lines
2.2 KiB
JavaScript
import Tone from "../core/Tone";
|
|
import "../effect/Effect";
|
|
import "../core/Delay";
|
|
import "../component/LFO";
|
|
|
|
/**
|
|
* @class A Vibrato effect composed of a Tone.Delay and a Tone.LFO. The LFO
|
|
* modulates the delayTime of the delay, causing the pitch to rise
|
|
* and fall.
|
|
* @extends {Tone.Effect}
|
|
* @param {Frequency} frequency The frequency of the vibrato.
|
|
* @param {NormalRange} depth The amount the pitch is modulated.
|
|
*/
|
|
Tone.Vibrato = function(){
|
|
|
|
var options = Tone.defaults(arguments, ["frequency", "depth"], Tone.Vibrato);
|
|
Tone.Effect.call(this, options);
|
|
|
|
/**
|
|
* The delay node used for the vibrato effect
|
|
* @type {Tone.Delay}
|
|
* @private
|
|
*/
|
|
this._delayNode = new Tone.Delay(0, options.maxDelay);
|
|
|
|
/**
|
|
* The LFO used to control the vibrato
|
|
* @type {Tone.LFO}
|
|
* @private
|
|
*/
|
|
this._lfo = new Tone.LFO({
|
|
"type" : options.type,
|
|
"min" : 0,
|
|
"max" : options.maxDelay,
|
|
"frequency" : options.frequency,
|
|
"phase" : -90 //offse the phase so the resting position is in the center
|
|
}).start().connect(this._delayNode.delayTime);
|
|
|
|
/**
|
|
* The frequency of the vibrato
|
|
* @type {Frequency}
|
|
* @signal
|
|
*/
|
|
this.frequency = this._lfo.frequency;
|
|
|
|
/**
|
|
* The depth of the vibrato.
|
|
* @type {NormalRange}
|
|
* @signal
|
|
*/
|
|
this.depth = this._lfo.amplitude;
|
|
|
|
this.depth.value = options.depth;
|
|
this._readOnly(["frequency", "depth"]);
|
|
this.effectSend.chain(this._delayNode, this.effectReturn);
|
|
};
|
|
|
|
Tone.extend(Tone.Vibrato, Tone.Effect);
|
|
|
|
/**
|
|
* The defaults
|
|
* @type {Object}
|
|
* @const
|
|
*/
|
|
Tone.Vibrato.defaults = {
|
|
"maxDelay" : 0.005,
|
|
"frequency" : 5,
|
|
"depth" : 0.1,
|
|
"type" : "sine"
|
|
};
|
|
|
|
/**
|
|
* Type of oscillator attached to the Vibrato.
|
|
* @memberOf Tone.Vibrato#
|
|
* @type {string}
|
|
* @name type
|
|
*/
|
|
Object.defineProperty(Tone.Vibrato.prototype, "type", {
|
|
get : function(){
|
|
return this._lfo.type;
|
|
},
|
|
set : function(type){
|
|
this._lfo.type = type;
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Clean up.
|
|
* @returns {Tone.Vibrato} this
|
|
*/
|
|
Tone.Vibrato.prototype.dispose = function(){
|
|
Tone.Effect.prototype.dispose.call(this);
|
|
this._delayNode.dispose();
|
|
this._delayNode = null;
|
|
this._lfo.dispose();
|
|
this._lfo = null;
|
|
this._writable(["frequency", "depth"]);
|
|
this.frequency = null;
|
|
this.depth = null;
|
|
};
|
|
|
|
export default Tone.Vibrato;
|
|
|