Tone.js/Tone/core/TransportEvent.js
Yotam Mann 79397e1075 Merge branch 'dev'
# Conflicts:
#	Tone/core/Tone.js
2018-04-06 17:22:23 -07:00

93 lines
1.9 KiB
JavaScript

define(["Tone/core/Tone", "Tone/type/Ticks"], function(Tone){
/**
* @class Tone.TransportEvent is an internal class used by (Tone.Transport)[Transport]
* to schedule events. Do no invoke this class directly, it is
* handled from within Tone.Transport.
* @extends {Tone}
* @param {Object} options
*/
Tone.TransportEvent = function(Transport, options){
options = Tone.defaultArg(options, Tone.TransportEvent.defaults);
Tone.call(this);
/**
* Reference to the Transport that created it
* @type {Tone.Transport}
*/
this.Transport = Transport;
/**
* The unique id of the event
* @type {Number}
*/
this.id = Tone.TransportEvent._eventId++;
/**
* The time the event starts
* @type {Ticks}
*/
this.time = Tone.Ticks(options.time);
/**
* The callback to invoke
* @type {Function}
*/
this.callback = options.callback;
/**
* If the event should be removed after being created.
* @type {Boolean}
* @private
*/
this._once = options.once;
};
Tone.extend(Tone.TransportEvent);
/**
* The defaults
* @static
* @type {Object}
*/
Tone.TransportEvent.defaults = {
"once" : false,
"callback" : Tone.noOp,
};
/**
* Current ID counter
* @private
* @static
* @type {Number}
*/
Tone.TransportEvent._eventId = 0;
/**
* Invoke the event callback.
* @param {Time} time The AudioContext time in seconds of the event
*/
Tone.TransportEvent.prototype.invoke = function(time){
if (this.callback){
this.callback(time);
if (this._once && this.Transport){
this.Transport.clear(this.id);
}
}
};
/**
* Clean up
* @return {Tone.TransportEvent} this
*/
Tone.TransportEvent.prototype.dispose = function(){
Tone.prototype.dispose.call(this);
this.Transport = null;
this.callback = null;
this.time = null;
return this;
};
return Tone.TransportEvent;
});