From 05cab92983458fd38e8f8774ebeccd33891dabb5 Mon Sep 17 00:00:00 2001 From: Lanny McNie Date: Wed, 27 May 2015 12:16:05 -0600 Subject: [PATCH] Updated NEXT docs and libs --- docs/soundjs_docs-NEXT.zip | Bin 610012 -> 608553 bytes lib/cordovaaudioplugin-NEXT.combined.js | 29 +- lib/cordovaaudioplugin-NEXT.min.js | 4 +- lib/flashaudioplugin-NEXT.combined.js | 29 +- lib/flashaudioplugin-NEXT.min.js | 4 +- lib/soundjs-NEXT.combined.js | 14363 +++++++++++----------- lib/soundjs-NEXT.min.js | 4 +- 7 files changed, 7257 insertions(+), 7176 deletions(-) diff --git a/docs/soundjs_docs-NEXT.zip b/docs/soundjs_docs-NEXT.zip index b7abc0e3876a14750c1df96ad2327e743930f558..924a11d75a05453164b20d3a102bb87aaa5f0267 100644 GIT binary patch delta 398089 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

h=O+2@q9}8R*82;%e*W84f&r{?4ikKrv(}a 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�_D%i0!vU!CDP3sxaLBKlY_0JnP#wq* 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

6lYzZTg{DNhHN1W5~m-aZO6-SAD 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 delta 399851 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%0D3WO5Q8@q?czyJ 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®GyMq; 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

-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 ZKHH*^EYpFy1 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

$NKTHV(iGEZX137T_@H$Jxu6odn`CbsM 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

eGL)RBwcefIjz(H`Ur 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

Example

- * - * myObject.addEventListener("change", createjs.proxy(myMethod, scope)); - * - * @class Utility Methods - * @main Utility Methods - */ - -(function() { - "use strict"; - - /** - * A function proxy for methods. By default, JavaScript methods do not maintain scope, so passing a method as a - * callback will result in the method getting called in the scope of the caller. Using a proxy ensures that the - * method gets called in the correct scope. - * - * Additional arguments can be passed that will be applied to the function when it is called. - * - *

Example

- * - * myObject.addEventListener("event", createjs.proxy(myHandler, this, arg1, arg2)); - * - * function myHandler(arg1, arg2) { - * // This gets called when myObject.myCallback is executed. - * } - * - * @method proxy - * @param {Function} method The function to call - * @param {Object} scope The scope to call the method name on - * @param {mixed} [arg] * Arguments that are appended to the callback for additional params. - * @public - * @static - */ - createjs.proxy = function (method, scope) { - var aArgs = Array.prototype.slice.call(arguments, 2); - return function () { - return method.apply(scope, Array.prototype.slice.call(arguments, 0).concat(aArgs)); - }; - } - +this.createjs = this.createjs||{}; + +/** + * Various utilities that the CreateJS Suite uses. Utilities are created as separate files, and will be available on the + * createjs namespace directly. + * + *

Example

+ * + * myObject.addEventListener("change", createjs.proxy(myMethod, scope)); + * + * @class Utility Methods + * @main Utility Methods + */ + +(function() { + "use strict"; + + /** + * A function proxy for methods. By default, JavaScript methods do not maintain scope, so passing a method as a + * callback will result in the method getting called in the scope of the caller. Using a proxy ensures that the + * method gets called in the correct scope. + * + * Additional arguments can be passed that will be applied to the function when it is called. + * + *

Example

+ * + * myObject.addEventListener("event", createjs.proxy(myHandler, this, arg1, arg2)); + * + * function myHandler(arg1, arg2) { + * // This gets called when myObject.myCallback is executed. + * } + * + * @method proxy + * @param {Function} method The function to call + * @param {Object} scope The scope to call the method name on + * @param {mixed} [arg] * Arguments that are appended to the callback for additional params. + * @public + * @static + */ + createjs.proxy = function (method, scope) { + var aArgs = Array.prototype.slice.call(arguments, 2); + return function () { + return method.apply(scope, Array.prototype.slice.call(arguments, 0).concat(aArgs)); + }; + } + }()); //############################################################################## // BrowserDetect.js //############################################################################## -this.createjs = this.createjs||{}; - -/** - * @class Utility Methods - */ -(function() { - "use strict"; - - /** - * An object that determines the current browser, version, operating system, and other environment - * variables via user agent string. - * - * Used for audio because feature detection is unable to detect the many limitations of mobile devices. - * - *

Example

- * - * if (createjs.BrowserDetect.isIOS) { // do stuff } - * - * @property BrowserDetect - * @type {Object} - * @param {Boolean} isFirefox True if our browser is Firefox. - * @param {Boolean} isOpera True if our browser is opera. - * @param {Boolean} isChrome True if our browser is Chrome. Note that Chrome for Android returns true, but is a - * completely different browser with different abilities. - * @param {Boolean} isIOS True if our browser is safari for iOS devices (iPad, iPhone, and iPod). - * @param {Boolean} isAndroid True if our browser is Android. - * @param {Boolean} isBlackberry True if our browser is Blackberry. - * @constructor - * @static - */ - function BrowserDetect() { - throw "BrowserDetect cannot be instantiated"; - }; - - var agent = BrowserDetect.agent = window.navigator.userAgent; - BrowserDetect.isWindowPhone = (agent.indexOf("IEMobile") > -1) || (agent.indexOf("Windows Phone") > -1); - BrowserDetect.isFirefox = (agent.indexOf("Firefox") > -1); - BrowserDetect.isOpera = (window.opera != null); - BrowserDetect.isChrome = (agent.indexOf("Chrome") > -1); // NOTE that Chrome on Android returns true but is a completely different browser with different abilities - BrowserDetect.isIOS = (agent.indexOf("iPod") > -1 || agent.indexOf("iPhone") > -1 || agent.indexOf("iPad") > -1) && !BrowserDetect.isWindowPhone; - BrowserDetect.isAndroid = (agent.indexOf("Android") > -1) && !BrowserDetect.isWindowPhone; - BrowserDetect.isBlackberry = (agent.indexOf("Blackberry") > -1); - - createjs.BrowserDetect = BrowserDetect; - +this.createjs = this.createjs||{}; + +/** + * @class Utility Methods + */ +(function() { + "use strict"; + + /** + * An object that determines the current browser, version, operating system, and other environment + * variables via user agent string. + * + * Used for audio because feature detection is unable to detect the many limitations of mobile devices. + * + *

Example

+ * + * if (createjs.BrowserDetect.isIOS) { // do stuff } + * + * @property BrowserDetect + * @type {Object} + * @param {Boolean} isFirefox True if our browser is Firefox. + * @param {Boolean} isOpera True if our browser is opera. + * @param {Boolean} isChrome True if our browser is Chrome. Note that Chrome for Android returns true, but is a + * completely different browser with different abilities. + * @param {Boolean} isIOS True if our browser is safari for iOS devices (iPad, iPhone, and iPod). + * @param {Boolean} isAndroid True if our browser is Android. + * @param {Boolean} isBlackberry True if our browser is Blackberry. + * @constructor + * @static + */ + function BrowserDetect() { + throw "BrowserDetect cannot be instantiated"; + }; + + var agent = BrowserDetect.agent = window.navigator.userAgent; + BrowserDetect.isWindowPhone = (agent.indexOf("IEMobile") > -1) || (agent.indexOf("Windows Phone") > -1); + BrowserDetect.isFirefox = (agent.indexOf("Firefox") > -1); + BrowserDetect.isOpera = (window.opera != null); + BrowserDetect.isChrome = (agent.indexOf("Chrome") > -1); // NOTE that Chrome on Android returns true but is a completely different browser with different abilities + BrowserDetect.isIOS = (agent.indexOf("iPod") > -1 || agent.indexOf("iPhone") > -1 || agent.indexOf("iPad") > -1) && !BrowserDetect.isWindowPhone; + BrowserDetect.isAndroid = (agent.indexOf("Android") > -1) && !BrowserDetect.isWindowPhone; + BrowserDetect.isBlackberry = (agent.indexOf("Blackberry") > -1); + + createjs.BrowserDetect = BrowserDetect; + }()); //############################################################################## @@ -648,7056 +675,7056 @@ this.createjs = this.createjs||{}; // Event.js //############################################################################## -this.createjs = this.createjs||{}; - -(function() { - "use strict"; - -// constructor: - /** - * Contains properties and methods shared by all events for use with - * {{#crossLink "EventDispatcher"}}{{/crossLink}}. - * - * Note that Event objects are often reused, so you should never - * rely on an event object's state outside of the call stack it was received in. - * @class Event - * @param {String} type The event type. - * @param {Boolean} bubbles Indicates whether the event will bubble through the display list. - * @param {Boolean} cancelable Indicates whether the default behaviour of this event can be cancelled. - * @constructor - **/ - function Event(type, bubbles, cancelable) { - - - // public properties: - /** - * The type of event. - * @property type - * @type String - **/ - this.type = type; - - /** - * The object that generated an event. - * @property target - * @type Object - * @default null - * @readonly - */ - this.target = null; - - /** - * The current target that a bubbling event is being dispatched from. For non-bubbling events, this will - * always be the same as target. For example, if childObj.parent = parentObj, and a bubbling event - * is generated from childObj, then a listener on parentObj would receive the event with - * target=childObj (the original target) and currentTarget=parentObj (where the listener was added). - * @property currentTarget - * @type Object - * @default null - * @readonly - */ - this.currentTarget = null; - - /** - * For bubbling events, this indicates the current event phase:
    - *
  1. capture phase: starting from the top parent to the target
  2. - *
  3. at target phase: currently being dispatched from the target
  4. - *
  5. bubbling phase: from the target to the top parent
  6. - *
- * @property eventPhase - * @type Number - * @default 0 - * @readonly - */ - this.eventPhase = 0; - - /** - * Indicates whether the event will bubble through the display list. - * @property bubbles - * @type Boolean - * @default false - * @readonly - */ - this.bubbles = !!bubbles; - - /** - * Indicates whether the default behaviour of this event can be cancelled via - * {{#crossLink "Event/preventDefault"}}{{/crossLink}}. This is set via the Event constructor. - * @property cancelable - * @type Boolean - * @default false - * @readonly - */ - this.cancelable = !!cancelable; - - /** - * The epoch time at which this event was created. - * @property timeStamp - * @type Number - * @default 0 - * @readonly - */ - this.timeStamp = (new Date()).getTime(); - - /** - * Indicates if {{#crossLink "Event/preventDefault"}}{{/crossLink}} has been called - * on this event. - * @property defaultPrevented - * @type Boolean - * @default false - * @readonly - */ - this.defaultPrevented = false; - - /** - * Indicates if {{#crossLink "Event/stopPropagation"}}{{/crossLink}} or - * {{#crossLink "Event/stopImmediatePropagation"}}{{/crossLink}} has been called on this event. - * @property propagationStopped - * @type Boolean - * @default false - * @readonly - */ - this.propagationStopped = false; - - /** - * Indicates if {{#crossLink "Event/stopImmediatePropagation"}}{{/crossLink}} has been called - * on this event. - * @property immediatePropagationStopped - * @type Boolean - * @default false - * @readonly - */ - this.immediatePropagationStopped = false; - - /** - * Indicates if {{#crossLink "Event/remove"}}{{/crossLink}} has been called on this event. - * @property removed - * @type Boolean - * @default false - * @readonly - */ - this.removed = false; - } - var p = Event.prototype; - - /** - * REMOVED. Removed in favor of using `MySuperClass_constructor`. - * See {{#crossLink "Utility Methods/extend"}}{{/crossLink}} and {{#crossLink "Utility Methods/promote"}}{{/crossLink}} - * for details. - * - * There is an inheritance tutorial distributed with EaselJS in /tutorials/Inheritance. - * - * @method initialize - * @protected - * @deprecated - */ - // p.initialize = function() {}; // searchable for devs wondering where it is. - - -// public methods: - /** - * Sets {{#crossLink "Event/defaultPrevented"}}{{/crossLink}} to true. - * Mirrors the DOM event standard. - * @method preventDefault - **/ - p.preventDefault = function() { - this.defaultPrevented = this.cancelable&&true; - }; - - /** - * Sets {{#crossLink "Event/propagationStopped"}}{{/crossLink}} to true. - * Mirrors the DOM event standard. - * @method stopPropagation - **/ - p.stopPropagation = function() { - this.propagationStopped = true; - }; - - /** - * Sets {{#crossLink "Event/propagationStopped"}}{{/crossLink}} and - * {{#crossLink "Event/immediatePropagationStopped"}}{{/crossLink}} to true. - * Mirrors the DOM event standard. - * @method stopImmediatePropagation - **/ - p.stopImmediatePropagation = function() { - this.immediatePropagationStopped = this.propagationStopped = true; - }; - - /** - * Causes the active listener to be removed via removeEventListener(); - * - * myBtn.addEventListener("click", function(evt) { - * // do stuff... - * evt.remove(); // removes this listener. - * }); - * - * @method remove - **/ - p.remove = function() { - this.removed = true; - }; - - /** - * Returns a clone of the Event instance. - * @method clone - * @return {Event} a clone of the Event instance. - **/ - p.clone = function() { - return new Event(this.type, this.bubbles, this.cancelable); - }; - - /** - * Provides a chainable shortcut method for setting a number of properties on the instance. - * - * @method set - * @param {Object} props A generic object containing properties to copy to the instance. - * @return {Event} Returns the instance the method is called on (useful for chaining calls.) - * @chainable - */ - p.set = function(props) { - for (var n in props) { this[n] = props[n]; } - return this; - }; - - /** - * Returns a string representation of this object. - * @method toString - * @return {String} a string representation of the instance. - **/ - p.toString = function() { - return "[Event (type="+this.type+")]"; - }; - - createjs.Event = Event; +this.createjs = this.createjs||{}; + +(function() { + "use strict"; + +// constructor: + /** + * Contains properties and methods shared by all events for use with + * {{#crossLink "EventDispatcher"}}{{/crossLink}}. + * + * Note that Event objects are often reused, so you should never + * rely on an event object's state outside of the call stack it was received in. + * @class Event + * @param {String} type The event type. + * @param {Boolean} bubbles Indicates whether the event will bubble through the display list. + * @param {Boolean} cancelable Indicates whether the default behaviour of this event can be cancelled. + * @constructor + **/ + function Event(type, bubbles, cancelable) { + + + // public properties: + /** + * The type of event. + * @property type + * @type String + **/ + this.type = type; + + /** + * The object that generated an event. + * @property target + * @type Object + * @default null + * @readonly + */ + this.target = null; + + /** + * The current target that a bubbling event is being dispatched from. For non-bubbling events, this will + * always be the same as target. For example, if childObj.parent = parentObj, and a bubbling event + * is generated from childObj, then a listener on parentObj would receive the event with + * target=childObj (the original target) and currentTarget=parentObj (where the listener was added). + * @property currentTarget + * @type Object + * @default null + * @readonly + */ + this.currentTarget = null; + + /** + * For bubbling events, this indicates the current event phase:
    + *
  1. capture phase: starting from the top parent to the target
  2. + *
  3. at target phase: currently being dispatched from the target
  4. + *
  5. bubbling phase: from the target to the top parent
  6. + *
+ * @property eventPhase + * @type Number + * @default 0 + * @readonly + */ + this.eventPhase = 0; + + /** + * Indicates whether the event will bubble through the display list. + * @property bubbles + * @type Boolean + * @default false + * @readonly + */ + this.bubbles = !!bubbles; + + /** + * Indicates whether the default behaviour of this event can be cancelled via + * {{#crossLink "Event/preventDefault"}}{{/crossLink}}. This is set via the Event constructor. + * @property cancelable + * @type Boolean + * @default false + * @readonly + */ + this.cancelable = !!cancelable; + + /** + * The epoch time at which this event was created. + * @property timeStamp + * @type Number + * @default 0 + * @readonly + */ + this.timeStamp = (new Date()).getTime(); + + /** + * Indicates if {{#crossLink "Event/preventDefault"}}{{/crossLink}} has been called + * on this event. + * @property defaultPrevented + * @type Boolean + * @default false + * @readonly + */ + this.defaultPrevented = false; + + /** + * Indicates if {{#crossLink "Event/stopPropagation"}}{{/crossLink}} or + * {{#crossLink "Event/stopImmediatePropagation"}}{{/crossLink}} has been called on this event. + * @property propagationStopped + * @type Boolean + * @default false + * @readonly + */ + this.propagationStopped = false; + + /** + * Indicates if {{#crossLink "Event/stopImmediatePropagation"}}{{/crossLink}} has been called + * on this event. + * @property immediatePropagationStopped + * @type Boolean + * @default false + * @readonly + */ + this.immediatePropagationStopped = false; + + /** + * Indicates if {{#crossLink "Event/remove"}}{{/crossLink}} has been called on this event. + * @property removed + * @type Boolean + * @default false + * @readonly + */ + this.removed = false; + } + var p = Event.prototype; + + /** + * REMOVED. Removed in favor of using `MySuperClass_constructor`. + * See {{#crossLink "Utility Methods/extend"}}{{/crossLink}} and {{#crossLink "Utility Methods/promote"}}{{/crossLink}} + * for details. + * + * There is an inheritance tutorial distributed with EaselJS in /tutorials/Inheritance. + * + * @method initialize + * @protected + * @deprecated + */ + // p.initialize = function() {}; // searchable for devs wondering where it is. + + +// public methods: + /** + * Sets {{#crossLink "Event/defaultPrevented"}}{{/crossLink}} to true. + * Mirrors the DOM event standard. + * @method preventDefault + **/ + p.preventDefault = function() { + this.defaultPrevented = this.cancelable&&true; + }; + + /** + * Sets {{#crossLink "Event/propagationStopped"}}{{/crossLink}} to true. + * Mirrors the DOM event standard. + * @method stopPropagation + **/ + p.stopPropagation = function() { + this.propagationStopped = true; + }; + + /** + * Sets {{#crossLink "Event/propagationStopped"}}{{/crossLink}} and + * {{#crossLink "Event/immediatePropagationStopped"}}{{/crossLink}} to true. + * Mirrors the DOM event standard. + * @method stopImmediatePropagation + **/ + p.stopImmediatePropagation = function() { + this.immediatePropagationStopped = this.propagationStopped = true; + }; + + /** + * Causes the active listener to be removed via removeEventListener(); + * + * myBtn.addEventListener("click", function(evt) { + * // do stuff... + * evt.remove(); // removes this listener. + * }); + * + * @method remove + **/ + p.remove = function() { + this.removed = true; + }; + + /** + * Returns a clone of the Event instance. + * @method clone + * @return {Event} a clone of the Event instance. + **/ + p.clone = function() { + return new Event(this.type, this.bubbles, this.cancelable); + }; + + /** + * Provides a chainable shortcut method for setting a number of properties on the instance. + * + * @method set + * @param {Object} props A generic object containing properties to copy to the instance. + * @return {Event} Returns the instance the method is called on (useful for chaining calls.) + * @chainable + */ + p.set = function(props) { + for (var n in props) { this[n] = props[n]; } + return this; + }; + + /** + * Returns a string representation of this object. + * @method toString + * @return {String} a string representation of the instance. + **/ + p.toString = function() { + return "[Event (type="+this.type+")]"; + }; + + createjs.Event = Event; }()); //############################################################################## // ErrorEvent.js //############################################################################## -this.createjs = this.createjs||{}; - -(function() { - "use strict"; - - /** - * A general error {{#crossLink "Event"}}{{/crossLink}}, that describes an error that occurred, as well as any details. - * @class ErrorEvent - * @param {String} [title] The error title - * @param {String} [message] The error description - * @param {Object} [data] Additional error data - * @constructor - */ - function ErrorEvent(title, message, data) { - this.Event_constructor("error"); - - /** - * The short error title, which indicates the type of error that occurred. - * @property title - * @type String - */ - this.title = title; - - /** - * The verbose error message, containing details about the error. - * @property message - * @type String - */ - this.message = message; - - /** - * Additional data attached to an error. - * @property data - * @type {Object} - */ - this.data = data; - } - - var p = createjs.extend(ErrorEvent, createjs.Event); - - p.clone = function() { - return new createjs.ErrorEvent(this.title, this.message, this.data); - }; - - createjs.ErrorEvent = createjs.promote(ErrorEvent, "Event"); - +this.createjs = this.createjs||{}; + +(function() { + "use strict"; + + /** + * A general error {{#crossLink "Event"}}{{/crossLink}}, that describes an error that occurred, as well as any details. + * @class ErrorEvent + * @param {String} [title] The error title + * @param {String} [message] The error description + * @param {Object} [data] Additional error data + * @constructor + */ + function ErrorEvent(title, message, data) { + this.Event_constructor("error"); + + /** + * The short error title, which indicates the type of error that occurred. + * @property title + * @type String + */ + this.title = title; + + /** + * The verbose error message, containing details about the error. + * @property message + * @type String + */ + this.message = message; + + /** + * Additional data attached to an error. + * @property data + * @type {Object} + */ + this.data = data; + } + + var p = createjs.extend(ErrorEvent, createjs.Event); + + p.clone = function() { + return new createjs.ErrorEvent(this.title, this.message, this.data); + }; + + createjs.ErrorEvent = createjs.promote(ErrorEvent, "Event"); + }()); //############################################################################## // ProgressEvent.js //############################################################################## -this.createjs = this.createjs || {}; - -(function (scope) { - "use strict"; - - // constructor - /** - * A CreateJS {{#crossLink "Event"}}{{/crossLink}} that is dispatched when progress changes. - * @class ProgressEvent - * @param {Number} loaded The amount that has been loaded. This can be any number relative to the total. - * @param {Number} [total=1] The total amount that will load. This will default to 1, so if the `loaded` value is - * a percentage (between 0 and 1), it can be omitted. - * @todo Consider having this event be a "fileprogress" event as well - * @constructor - */ - function ProgressEvent(loaded, total) { - this.Event_constructor("progress"); - - /** - * The amount that has been loaded (out of a total amount) - * @property loaded - * @type {Number} - */ - this.loaded = loaded; - - /** - * The total "size" of the load. - * @property total - * @type {Number} - * @default 1 - */ - this.total = (total == null) ? 1 : total; - - /** - * The percentage (out of 1) that the load has been completed. This is calculated using `loaded/total`. - * @property progress - * @type {Number} - * @default 0 - */ - this.progress = (total == 0) ? 0 : this.loaded / this.total; - }; - - var p = createjs.extend(ProgressEvent, createjs.Event); - - /** - * Returns a clone of the ProgressEvent instance. - * @method clone - * @return {ProgressEvent} a clone of the Event instance. - **/ - p.clone = function() { - return new createjs.ProgressEvent(this.loaded, this.total); - }; - - createjs.ProgressEvent = createjs.promote(ProgressEvent, "Event"); - +this.createjs = this.createjs || {}; + +(function (scope) { + "use strict"; + + // constructor + /** + * A CreateJS {{#crossLink "Event"}}{{/crossLink}} that is dispatched when progress changes. + * @class ProgressEvent + * @param {Number} loaded The amount that has been loaded. This can be any number relative to the total. + * @param {Number} [total=1] The total amount that will load. This will default to 1, so if the `loaded` value is + * a percentage (between 0 and 1), it can be omitted. + * @todo Consider having this event be a "fileprogress" event as well + * @constructor + */ + function ProgressEvent(loaded, total) { + this.Event_constructor("progress"); + + /** + * The amount that has been loaded (out of a total amount) + * @property loaded + * @type {Number} + */ + this.loaded = loaded; + + /** + * The total "size" of the load. + * @property total + * @type {Number} + * @default 1 + */ + this.total = (total == null) ? 1 : total; + + /** + * The percentage (out of 1) that the load has been completed. This is calculated using `loaded/total`. + * @property progress + * @type {Number} + * @default 0 + */ + this.progress = (total == 0) ? 0 : this.loaded / this.total; + }; + + var p = createjs.extend(ProgressEvent, createjs.Event); + + /** + * Returns a clone of the ProgressEvent instance. + * @method clone + * @return {ProgressEvent} a clone of the Event instance. + **/ + p.clone = function() { + return new createjs.ProgressEvent(this.loaded, this.total); + }; + + createjs.ProgressEvent = createjs.promote(ProgressEvent, "Event"); + }(window)); //############################################################################## // LoadItem.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - - /** - * All loaders accept an item containing the properties defined in this class. If a raw object is passed instead, - * it will not be affected, but it must contain at least a {{#crossLink "src:property"}}{{/crossLink}} property. A - * string path or HTML tag is also acceptable, but it will be automatically converted to a LoadItem using the - * {{#crossLink "create"}}{{/crossLink}} method by {{#crossLink "AbstractLoader"}}{{/crossLink}} - * @class LoadItem - * @constructor - * @since 0.6.0 - */ - function LoadItem() { - /** - * The source of the file that is being loaded. This property is required. The source can either be a - * string (recommended), or an HTML tag. - * This can also be an object, but in that case it has to include a type and be handled by a plugin. - * @property src - * @type {String} - * @default null - */ - this.src = null; - - /** - * The type file that is being loaded. The type of the file is usually inferred by the extension, but can also - * be set manually. This is helpful in cases where a file does not have an extension. - * @property type - * @type {String} - * @default null - */ - this.type = null; - - /** - * A string identifier which can be used to reference the loaded object. If none is provided, this will be - * automatically set to the {{#crossLink "src:property"}}{{/crossLink}}. - * @property id - * @type {String} - * @default null - */ - this.id = null; - - /** - * Determines if a manifest will maintain the order of this item, in relation to other items in the manifest - * that have also set the `maintainOrder` property to `true`. This only applies when the max connections has - * been set above 1 (using {{#crossLink "LoadQueue/setMaxConnections"}}{{/crossLink}}). Everything with this - * property set to `false` will finish as it is loaded. Ordered items are combined with script tags loading in - * order when {{#crossLink "LoadQueue/maintainScriptOrder:property"}}{{/crossLink}} is set to `true`. - * @property maintainOrder - * @type {Boolean} - * @default false - */ - this.maintainOrder = false; - - /** - * A callback used by JSONP requests that defines what global method to call when the JSONP content is loaded. - * @property callback - * @type {String} - * @default null - */ - this.callback = null; - - /** - * An arbitrary data object, which is included with the loaded object. - * @property data - * @type {Object} - * @default null - */ - this.data = null; - - /** - * The request method used for HTTP calls. Both {{#crossLink "AbstractLoader/GET:property"}}{{/crossLink}} or - * {{#crossLink "AbstractLoader/POST:property"}}{{/crossLink}} request types are supported, and are defined as - * constants on {{#crossLink "AbstractLoader"}}{{/crossLink}}. - * @property method - * @type {String} - * @default get - */ - this.method = createjs.LoadItem.GET; - - /** - * An object hash of name/value pairs to send to the server. - * @property values - * @type {Object} - * @default null - */ - this.values = null; - - /** - * An object hash of headers to attach to an XHR request. PreloadJS will automatically attach some default - * headers when required, including "Origin", "Content-Type", and "X-Requested-With". You may override the - * default headers by including them in your headers object. - * @property headers - * @type {Object} - * @default null - */ - this.headers = null; - - /** - * Enable credentials for XHR requests. - * @property withCredentials - * @type {Boolean} - * @default false - */ - this.withCredentials = false; - - /** - * Set the mime type of XHR-based requests. This is automatically set to "text/plain; charset=utf-8" for text - * based files (json, xml, text, css, js). - * @property mimeType - * @type {String} - * @default null - */ - this.mimeType = null; - - /** - * Sets the crossOrigin attribute for CORS-enabled images loading cross-domain. - * @property crossOrigin - * @type {boolean} - * @default Anonymous - */ - this.crossOrigin = null; - - /** - * The duration in milliseconds to wait before a request times out. This only applies to tag-based and and XHR - * (level one) loading, as XHR (level 2) provides its own timeout event. - * @property loadTimeout - * @type {Number} - * @default 8000 (8 seconds) - */ - this.loadTimeout = s.LOAD_TIMEOUT_DEFAULT; - }; - - var p = LoadItem.prototype = {}; - var s = LoadItem; - - /** - * Default duration in milliseconds to wait before a request times out. This only applies to tag-based and and XHR - * (level one) loading, as XHR (level 2) provides its own timeout event. - * @property LOAD_TIMEOUT_DEFAULT - * @type {number} - * @static - */ - s.LOAD_TIMEOUT_DEFAULT = 8000; - - /** - * Create a LoadItem. - *
    - *
  • String-based items are converted to a LoadItem with a populated {{#crossLink "src:property"}}{{/crossLink}}.
  • - *
  • LoadItem instances are returned as-is
  • - *
  • Objects are returned with any needed properties added
  • - *
- * @method create - * @param {LoadItem|String|Object} value The load item value - * @returns {LoadItem|Object} - * @static - */ - s.create = function (value) { - if (typeof value == "string") { - var item = new LoadItem(); - item.src = value; - return item; - } else if (value instanceof s) { - return value; - } else if (value instanceof Object && value.src) { - if (value.loadTimeout == null) { - value.loadTimeout = s.LOAD_TIMEOUT_DEFAULT; - } - return value; - } else { - throw new Error("Type not recognized."); - } - }; - - /** - * Provides a chainable shortcut method for setting a number of properties on the instance. - * - *

Example

- * - * var loadItem = new createjs.LoadItem().set({src:"image.png", maintainOrder:true}); - * - * @method set - * @param {Object} props A generic object containing properties to copy to the LoadItem instance. - * @return {LoadItem} Returns the instance the method is called on (useful for chaining calls.) - */ - p.set = function(props) { - for (var n in props) { this[n] = props[n]; } - return this; - }; - - createjs.LoadItem = s; - +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + + /** + * All loaders accept an item containing the properties defined in this class. If a raw object is passed instead, + * it will not be affected, but it must contain at least a {{#crossLink "src:property"}}{{/crossLink}} property. A + * string path or HTML tag is also acceptable, but it will be automatically converted to a LoadItem using the + * {{#crossLink "create"}}{{/crossLink}} method by {{#crossLink "AbstractLoader"}}{{/crossLink}} + * @class LoadItem + * @constructor + * @since 0.6.0 + */ + function LoadItem() { + /** + * The source of the file that is being loaded. This property is required. The source can either be a + * string (recommended), or an HTML tag. + * This can also be an object, but in that case it has to include a type and be handled by a plugin. + * @property src + * @type {String} + * @default null + */ + this.src = null; + + /** + * The type file that is being loaded. The type of the file is usually inferred by the extension, but can also + * be set manually. This is helpful in cases where a file does not have an extension. + * @property type + * @type {String} + * @default null + */ + this.type = null; + + /** + * A string identifier which can be used to reference the loaded object. If none is provided, this will be + * automatically set to the {{#crossLink "src:property"}}{{/crossLink}}. + * @property id + * @type {String} + * @default null + */ + this.id = null; + + /** + * Determines if a manifest will maintain the order of this item, in relation to other items in the manifest + * that have also set the `maintainOrder` property to `true`. This only applies when the max connections has + * been set above 1 (using {{#crossLink "LoadQueue/setMaxConnections"}}{{/crossLink}}). Everything with this + * property set to `false` will finish as it is loaded. Ordered items are combined with script tags loading in + * order when {{#crossLink "LoadQueue/maintainScriptOrder:property"}}{{/crossLink}} is set to `true`. + * @property maintainOrder + * @type {Boolean} + * @default false + */ + this.maintainOrder = false; + + /** + * A callback used by JSONP requests that defines what global method to call when the JSONP content is loaded. + * @property callback + * @type {String} + * @default null + */ + this.callback = null; + + /** + * An arbitrary data object, which is included with the loaded object. + * @property data + * @type {Object} + * @default null + */ + this.data = null; + + /** + * The request method used for HTTP calls. Both {{#crossLink "AbstractLoader/GET:property"}}{{/crossLink}} or + * {{#crossLink "AbstractLoader/POST:property"}}{{/crossLink}} request types are supported, and are defined as + * constants on {{#crossLink "AbstractLoader"}}{{/crossLink}}. + * @property method + * @type {String} + * @default get + */ + this.method = createjs.LoadItem.GET; + + /** + * An object hash of name/value pairs to send to the server. + * @property values + * @type {Object} + * @default null + */ + this.values = null; + + /** + * An object hash of headers to attach to an XHR request. PreloadJS will automatically attach some default + * headers when required, including "Origin", "Content-Type", and "X-Requested-With". You may override the + * default headers by including them in your headers object. + * @property headers + * @type {Object} + * @default null + */ + this.headers = null; + + /** + * Enable credentials for XHR requests. + * @property withCredentials + * @type {Boolean} + * @default false + */ + this.withCredentials = false; + + /** + * Set the mime type of XHR-based requests. This is automatically set to "text/plain; charset=utf-8" for text + * based files (json, xml, text, css, js). + * @property mimeType + * @type {String} + * @default null + */ + this.mimeType = null; + + /** + * Sets the crossOrigin attribute for CORS-enabled images loading cross-domain. + * @property crossOrigin + * @type {boolean} + * @default Anonymous + */ + this.crossOrigin = null; + + /** + * The duration in milliseconds to wait before a request times out. This only applies to tag-based and and XHR + * (level one) loading, as XHR (level 2) provides its own timeout event. + * @property loadTimeout + * @type {Number} + * @default 8000 (8 seconds) + */ + this.loadTimeout = s.LOAD_TIMEOUT_DEFAULT; + }; + + var p = LoadItem.prototype = {}; + var s = LoadItem; + + /** + * Default duration in milliseconds to wait before a request times out. This only applies to tag-based and and XHR + * (level one) loading, as XHR (level 2) provides its own timeout event. + * @property LOAD_TIMEOUT_DEFAULT + * @type {number} + * @static + */ + s.LOAD_TIMEOUT_DEFAULT = 8000; + + /** + * Create a LoadItem. + *
    + *
  • String-based items are converted to a LoadItem with a populated {{#crossLink "src:property"}}{{/crossLink}}.
  • + *
  • LoadItem instances are returned as-is
  • + *
  • Objects are returned with any needed properties added
  • + *
+ * @method create + * @param {LoadItem|String|Object} value The load item value + * @returns {LoadItem|Object} + * @static + */ + s.create = function (value) { + if (typeof value == "string") { + var item = new LoadItem(); + item.src = value; + return item; + } else if (value instanceof s) { + return value; + } else if (value instanceof Object && value.src) { + if (value.loadTimeout == null) { + value.loadTimeout = s.LOAD_TIMEOUT_DEFAULT; + } + return value; + } else { + throw new Error("Type not recognized."); + } + }; + + /** + * Provides a chainable shortcut method for setting a number of properties on the instance. + * + *

Example

+ * + * var loadItem = new createjs.LoadItem().set({src:"image.png", maintainOrder:true}); + * + * @method set + * @param {Object} props A generic object containing properties to copy to the LoadItem instance. + * @return {LoadItem} Returns the instance the method is called on (useful for chaining calls.) + */ + p.set = function(props) { + for (var n in props) { this[n] = props[n]; } + return this; + }; + + createjs.LoadItem = s; + }()); //############################################################################## // RequestUtils.js //############################################################################## -(function () { - - /** - * Utilities that assist with parsing load items, and determining file types, etc. - * @class RequestUtils - */ - var s = {}; - - /** - * The Regular Expression used to test file URLS for an absolute path. - * @property ABSOLUTE_PATH - * @type {RegExp} - * @static - */ - s.ABSOLUTE_PATT = /^(?:\w+:)?\/{2}/i; - - /** - * The Regular Expression used to test file URLS for a relative path. - * @property RELATIVE_PATH - * @type {RegExp} - * @static - */ - s.RELATIVE_PATT = (/^[./]*?\//i); - - /** - * The Regular Expression used to test file URLS for an extension. Note that URIs must already have the query string - * removed. - * @property EXTENSION_PATT - * @type {RegExp} - * @static - */ - s.EXTENSION_PATT = /\/?[^/]+\.(\w{1,5})$/i; - - /** - * Parse a file path to determine the information we need to work with it. Currently, PreloadJS needs to know: - *
    - *
  • If the path is absolute. Absolute paths start with a protocol (such as `http://`, `file://`, or - * `//networkPath`)
  • - *
  • If the path is relative. Relative paths start with `../` or `/path` (or similar)
  • - *
  • The file extension. This is determined by the filename with an extension. Query strings are dropped, and - * the file path is expected to follow the format `name.ext`.
  • - *
- * @method parseURI - * @param {String} path - * @returns {Object} An Object with an `absolute` and `relative` Boolean values, as well as an optional 'extension` - * property, which is the lowercase extension. - * @static - */ - s.parseURI = function (path) { - var info = {absolute: false, relative: false}; - if (path == null) { return info; } - - // Drop the query string - var queryIndex = path.indexOf("?"); - if (queryIndex > -1) { - path = path.substr(0, queryIndex); - } - - // Absolute - var match; - if (s.ABSOLUTE_PATT.test(path)) { - info.absolute = true; - - // Relative - } else if (s.RELATIVE_PATT.test(path)) { - info.relative = true; - } - - // Extension - if (match = path.match(s.EXTENSION_PATT)) { - info.extension = match[1].toLowerCase(); - } - return info; - }; - - /** - * Formats an object into a query string for either a POST or GET request. - * @method formatQueryString - * @param {Object} data The data to convert to a query string. - * @param {Array} [query] Existing name/value pairs to append on to this query. - * @static - */ - s.formatQueryString = function (data, query) { - if (data == null) { - throw new Error('You must specify data.'); - } - var params = []; - for (var n in data) { - params.push(n + '=' + escape(data[n])); - } - if (query) { - params = params.concat(query); - } - return params.join('&'); - }; - - /** - * A utility method that builds a file path using a source and a data object, and formats it into a new path. - * @method buildPath - * @param {String} src The source path to add values to. - * @param {Object} [data] Object used to append values to this request as a query string. Existing parameters on the - * path will be preserved. - * @returns {string} A formatted string that contains the path and the supplied parameters. - * @static - */ - s.buildPath = function (src, data) { - if (data == null) { - return src; - } - - var query = []; - var idx = src.indexOf('?'); - - if (idx != -1) { - var q = src.slice(idx + 1); - query = query.concat(q.split('&')); - } - - if (idx != -1) { - return src.slice(0, idx) + '?' + this._formatQueryString(data, query); - } else { - return src + '?' + this._formatQueryString(data, query); - } - }; - - /** - * @method isCrossDomain - * @param {LoadItem|Object} item A load item with a `src` property. - * @return {Boolean} If the load item is loading from a different domain than the current location. - * @static - */ - s.isCrossDomain = function (item) { - var target = document.createElement("a"); - target.href = item.src; - - var host = document.createElement("a"); - host.href = location.href; - - var crossdomain = (target.hostname != "") && - (target.port != host.port || - target.protocol != host.protocol || - target.hostname != host.hostname); - return crossdomain; - }; - - /** - * @method isLocal - * @param {LoadItem|Object} item A load item with a `src` property - * @return {Boolean} If the load item is loading from the "file:" protocol. Assume that the host must be local as - * well. - * @static - */ - s.isLocal = function (item) { - var target = document.createElement("a"); - target.href = item.src; - return target.hostname == "" && target.protocol == "file:"; - }; - - /** - * Determine if a specific type should be loaded as a binary file. Currently, only images and items marked - * specifically as "binary" are loaded as binary. Note that audio is not a binary type, as we can not play - * back using an audio tag if it is loaded as binary. Plugins can change the item type to binary to ensure they get - * a binary result to work with. Binary files are loaded using XHR2. Types are defined as static constants on - * {{#crossLink "AbstractLoader"}}{{/crossLink}}. - * @method isBinary - * @param {String} type The item type. - * @return {Boolean} If the specified type is binary. - * @static - */ - s.isBinary = function (type) { - switch (type) { - case createjs.AbstractLoader.IMAGE: - case createjs.AbstractLoader.BINARY: - return true; - default: - return false; - } - }; - - /** - * Check if item is a valid HTMLImageElement - * @method isImageTag - * @param {Object} item - * @returns {Boolean} - * @static - */ - s.isImageTag = function(item) { - return item instanceof HTMLImageElement; - }; - - /** - * Check if item is a valid HTMLAudioElement - * @method isAudioTag - * @param {Object} item - * @returns {Boolean} - * @static - */ - s.isAudioTag = function(item) { - if (window.HTMLAudioElement) { - return item instanceof HTMLAudioElement; - } else { - return false; - } - }; - - /** - * Check if item is a valid HTMLVideoElement - * @method isVideoTag - * @param {Object} item - * @returns {Boolean} - * @static - */ - s.isVideoTag = function(item) { - if (window.HTMLVideoElement) { - return item instanceof HTMLVideoElement; - } else { - return false; - } - }; - - /** - * Determine if a specific type is a text-based asset, and should be loaded as UTF-8. - * @method isText - * @param {String} type The item type. - * @return {Boolean} If the specified type is text. - * @static - */ - s.isText = function (type) { - switch (type) { - case createjs.AbstractLoader.TEXT: - case createjs.AbstractLoader.JSON: - case createjs.AbstractLoader.MANIFEST: - case createjs.AbstractLoader.XML: - case createjs.AbstractLoader.CSS: - case createjs.AbstractLoader.SVG: - case createjs.AbstractLoader.JAVASCRIPT: - case createjs.AbstractLoader.SPRITESHEET: - return true; - default: - return false; - } - }; - - /** - * Determine the type of the object using common extensions. Note that the type can be passed in with the load item - * if it is an unusual extension. - * @method getTypeByExtension - * @param {String} extension The file extension to use to determine the load type. - * @return {String} The determined load type (for example, AbstractLoader.IMAGE). Will return `null` if - * the type can not be determined by the extension. - * @static - */ - s.getTypeByExtension = function (extension) { - if (extension == null) { - return createjs.AbstractLoader.TEXT; - } - - switch (extension.toLowerCase()) { - case "jpeg": - case "jpg": - case "gif": - case "png": - case "webp": - case "bmp": - return createjs.AbstractLoader.IMAGE; - case "ogg": - case "mp3": - case "webm": - return createjs.AbstractLoader.SOUND; - case "mp4": - case "webm": - case "ts": - return createjs.AbstractLoader.VIDEO; - case "json": - return createjs.AbstractLoader.JSON; - case "xml": - return createjs.AbstractLoader.XML; - case "css": - return createjs.AbstractLoader.CSS; - case "js": - return createjs.AbstractLoader.JAVASCRIPT; - case 'svg': - return createjs.AbstractLoader.SVG; - default: - return createjs.AbstractLoader.TEXT; - } - }; - - createjs.RequestUtils = s; - +(function () { + + /** + * Utilities that assist with parsing load items, and determining file types, etc. + * @class RequestUtils + */ + var s = {}; + + /** + * The Regular Expression used to test file URLS for an absolute path. + * @property ABSOLUTE_PATH + * @type {RegExp} + * @static + */ + s.ABSOLUTE_PATT = /^(?:\w+:)?\/{2}/i; + + /** + * The Regular Expression used to test file URLS for a relative path. + * @property RELATIVE_PATH + * @type {RegExp} + * @static + */ + s.RELATIVE_PATT = (/^[./]*?\//i); + + /** + * The Regular Expression used to test file URLS for an extension. Note that URIs must already have the query string + * removed. + * @property EXTENSION_PATT + * @type {RegExp} + * @static + */ + s.EXTENSION_PATT = /\/?[^/]+\.(\w{1,5})$/i; + + /** + * Parse a file path to determine the information we need to work with it. Currently, PreloadJS needs to know: + *
    + *
  • If the path is absolute. Absolute paths start with a protocol (such as `http://`, `file://`, or + * `//networkPath`)
  • + *
  • If the path is relative. Relative paths start with `../` or `/path` (or similar)
  • + *
  • The file extension. This is determined by the filename with an extension. Query strings are dropped, and + * the file path is expected to follow the format `name.ext`.
  • + *
+ * @method parseURI + * @param {String} path + * @returns {Object} An Object with an `absolute` and `relative` Boolean values, as well as an optional 'extension` + * property, which is the lowercase extension. + * @static + */ + s.parseURI = function (path) { + var info = {absolute: false, relative: false}; + if (path == null) { return info; } + + // Drop the query string + var queryIndex = path.indexOf("?"); + if (queryIndex > -1) { + path = path.substr(0, queryIndex); + } + + // Absolute + var match; + if (s.ABSOLUTE_PATT.test(path)) { + info.absolute = true; + + // Relative + } else if (s.RELATIVE_PATT.test(path)) { + info.relative = true; + } + + // Extension + if (match = path.match(s.EXTENSION_PATT)) { + info.extension = match[1].toLowerCase(); + } + return info; + }; + + /** + * Formats an object into a query string for either a POST or GET request. + * @method formatQueryString + * @param {Object} data The data to convert to a query string. + * @param {Array} [query] Existing name/value pairs to append on to this query. + * @static + */ + s.formatQueryString = function (data, query) { + if (data == null) { + throw new Error('You must specify data.'); + } + var params = []; + for (var n in data) { + params.push(n + '=' + escape(data[n])); + } + if (query) { + params = params.concat(query); + } + return params.join('&'); + }; + + /** + * A utility method that builds a file path using a source and a data object, and formats it into a new path. + * @method buildPath + * @param {String} src The source path to add values to. + * @param {Object} [data] Object used to append values to this request as a query string. Existing parameters on the + * path will be preserved. + * @returns {string} A formatted string that contains the path and the supplied parameters. + * @static + */ + s.buildPath = function (src, data) { + if (data == null) { + return src; + } + + var query = []; + var idx = src.indexOf('?'); + + if (idx != -1) { + var q = src.slice(idx + 1); + query = query.concat(q.split('&')); + } + + if (idx != -1) { + return src.slice(0, idx) + '?' + this._formatQueryString(data, query); + } else { + return src + '?' + this._formatQueryString(data, query); + } + }; + + /** + * @method isCrossDomain + * @param {LoadItem|Object} item A load item with a `src` property. + * @return {Boolean} If the load item is loading from a different domain than the current location. + * @static + */ + s.isCrossDomain = function (item) { + var target = document.createElement("a"); + target.href = item.src; + + var host = document.createElement("a"); + host.href = location.href; + + var crossdomain = (target.hostname != "") && + (target.port != host.port || + target.protocol != host.protocol || + target.hostname != host.hostname); + return crossdomain; + }; + + /** + * @method isLocal + * @param {LoadItem|Object} item A load item with a `src` property + * @return {Boolean} If the load item is loading from the "file:" protocol. Assume that the host must be local as + * well. + * @static + */ + s.isLocal = function (item) { + var target = document.createElement("a"); + target.href = item.src; + return target.hostname == "" && target.protocol == "file:"; + }; + + /** + * Determine if a specific type should be loaded as a binary file. Currently, only images and items marked + * specifically as "binary" are loaded as binary. Note that audio is not a binary type, as we can not play + * back using an audio tag if it is loaded as binary. Plugins can change the item type to binary to ensure they get + * a binary result to work with. Binary files are loaded using XHR2. Types are defined as static constants on + * {{#crossLink "AbstractLoader"}}{{/crossLink}}. + * @method isBinary + * @param {String} type The item type. + * @return {Boolean} If the specified type is binary. + * @static + */ + s.isBinary = function (type) { + switch (type) { + case createjs.AbstractLoader.IMAGE: + case createjs.AbstractLoader.BINARY: + return true; + default: + return false; + } + }; + + /** + * Check if item is a valid HTMLImageElement + * @method isImageTag + * @param {Object} item + * @returns {Boolean} + * @static + */ + s.isImageTag = function(item) { + return item instanceof HTMLImageElement; + }; + + /** + * Check if item is a valid HTMLAudioElement + * @method isAudioTag + * @param {Object} item + * @returns {Boolean} + * @static + */ + s.isAudioTag = function(item) { + if (window.HTMLAudioElement) { + return item instanceof HTMLAudioElement; + } else { + return false; + } + }; + + /** + * Check if item is a valid HTMLVideoElement + * @method isVideoTag + * @param {Object} item + * @returns {Boolean} + * @static + */ + s.isVideoTag = function(item) { + if (window.HTMLVideoElement) { + return item instanceof HTMLVideoElement; + } else { + return false; + } + }; + + /** + * Determine if a specific type is a text-based asset, and should be loaded as UTF-8. + * @method isText + * @param {String} type The item type. + * @return {Boolean} If the specified type is text. + * @static + */ + s.isText = function (type) { + switch (type) { + case createjs.AbstractLoader.TEXT: + case createjs.AbstractLoader.JSON: + case createjs.AbstractLoader.MANIFEST: + case createjs.AbstractLoader.XML: + case createjs.AbstractLoader.CSS: + case createjs.AbstractLoader.SVG: + case createjs.AbstractLoader.JAVASCRIPT: + case createjs.AbstractLoader.SPRITESHEET: + return true; + default: + return false; + } + }; + + /** + * Determine the type of the object using common extensions. Note that the type can be passed in with the load item + * if it is an unusual extension. + * @method getTypeByExtension + * @param {String} extension The file extension to use to determine the load type. + * @return {String} The determined load type (for example, AbstractLoader.IMAGE). Will return `null` if + * the type can not be determined by the extension. + * @static + */ + s.getTypeByExtension = function (extension) { + if (extension == null) { + return createjs.AbstractLoader.TEXT; + } + + switch (extension.toLowerCase()) { + case "jpeg": + case "jpg": + case "gif": + case "png": + case "webp": + case "bmp": + return createjs.AbstractLoader.IMAGE; + case "ogg": + case "mp3": + case "webm": + return createjs.AbstractLoader.SOUND; + case "mp4": + case "webm": + case "ts": + return createjs.AbstractLoader.VIDEO; + case "json": + return createjs.AbstractLoader.JSON; + case "xml": + return createjs.AbstractLoader.XML; + case "css": + return createjs.AbstractLoader.CSS; + case "js": + return createjs.AbstractLoader.JAVASCRIPT; + case 'svg': + return createjs.AbstractLoader.SVG; + default: + return createjs.AbstractLoader.TEXT; + } + }; + + createjs.RequestUtils = s; + }()); //############################################################################## // AbstractLoader.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - -// constructor - /** - * The base loader, which defines all the generic methods, properties, and events. All loaders extend this class, - * including the {{#crossLink "LoadQueue"}}{{/crossLink}}. - * @class AbstractLoader - * @param {LoadItem|object|string} loadItem The item to be loaded. - * @param {Boolean} [preferXHR] Determines if the LoadItem should try and load using XHR, or take a - * tag-based approach, which can be better in cross-domain situations. Not all loaders can load using one or the - * other, so this is a suggested directive. - * @param {String} [type] The type of loader. Loader types are defined as constants on the AbstractLoader class, - * such as {{#crossLink "IMAGE:property"}}{{/crossLink}}, {{#crossLink "CSS:property"}}{{/crossLink}}, etc. - * @extends EventDispatcher - */ - function AbstractLoader(loadItem, preferXHR, type) { - this.EventDispatcher_constructor(); - - // public properties - /** - * If the loader has completed loading. This provides a quick check, but also ensures that the different approaches - * used for loading do not pile up resulting in more than one `complete` {{#crossLink "Event"}}{{/crossLink}}. - * @property loaded - * @type {Boolean} - * @default false - */ - this.loaded = false; - - /** - * Determine if the loader was canceled. Canceled loads will not fire complete events. Note that this property - * is readonly, so {{#crossLink "LoadQueue"}}{{/crossLink}} queues should be closed using {{#crossLink "LoadQueue/close"}}{{/crossLink}} - * instead. - * @property canceled - * @type {Boolean} - * @default false - */ - this.canceled = false; - - /** - * The current load progress (percentage) for this item. This will be a number between 0 and 1. - * - *

Example

- * - * var queue = new createjs.LoadQueue(); - * queue.loadFile("largeImage.png"); - * queue.on("progress", function() { - * console.log("Progress:", queue.progress, event.progress); - * }); - * - * @property progress - * @type {Number} - * @default 0 - */ - this.progress = 0; - - /** - * The type of item this loader will load. See {{#crossLink "AbstractLoader"}}{{/crossLink}} for a full list of - * supported types. - * @property type - * @type {String} - */ - this.type = type; - - /** - * A formatter function that converts the loaded raw result into the final result. For example, the JSONLoader - * converts a string of text into a JavaScript object. Not all loaders have a resultFormatter, and this property - * can be overridden to provide custom formatting. - * - * Optionally, a resultFormatter can return a callback function in cases where the formatting needs to be - * asynchronous, such as creating a new image. - * @property resultFormatter - * @type {Function} - * @default null - */ - this.resultFormatter = null; - - // protected properties - /** - * The {{#crossLink "LoadItem"}}{{/crossLink}} this loader represents. Note that this is null in a {{#crossLink "LoadQueue"}}{{/crossLink}}, - * but will be available on loaders such as {{#crossLink "XMLLoader"}}{{/crossLink}} and {{#crossLink "ImageLoader"}}{{/crossLink}}. - * @property _item - * @type {LoadItem|Object} - * @private - */ - if (loadItem) { - this._item = createjs.LoadItem.create(loadItem); - } else { - this._item = null; - } - - /** - * Whether the loader will try and load content using XHR (true) or HTML tags (false). - * @property _preferXHR - * @type {Boolean} - * @private - */ - this._preferXHR = preferXHR; - - /** - * The loaded result after it is formatted by an optional {{#crossLink "resultFormatter"}}{{/crossLink}}. For - * items that are not formatted, this will be the same as the {{#crossLink "_rawResult:property"}}{{/crossLink}}. - * The result is accessed using the {{#crossLink "getResult"}}{{/crossLink}} method. - * @property _result - * @type {Object|String} - * @private - */ - this._result = null; - - /** - * The loaded result before it is formatted. The rawResult is accessed using the {{#crossLink "getResult"}}{{/crossLink}} - * method, and passing `true`. - * @property _rawResult - * @type {Object|String} - * @private - */ - this._rawResult = null; - - /** - * A list of items that loaders load behind the scenes. This does not include the main item the loader is - * responsible for loading. Examples of loaders that have sub-items include the {{#crossLink "SpriteSheetLoader"}}{{/crossLink}} and - * {{#crossLink "ManifestLoader"}}{{/crossLink}}. - * @property _loadItems - * @type {null} - * @protected - */ - this._loadedItems = null; - - /** - * The attribute the items loaded using tags use for the source. - * @type {string} - * @default null - * @private - */ - this._tagSrcAttribute = null; - - /** - * An HTML tag (or similar) that a loader may use to load HTML content, such as images, scripts, etc. - * @property _tag - * @type {Object} - * @private - */ - this._tag = null; - }; - - var p = createjs.extend(AbstractLoader, createjs.EventDispatcher); - var s = AbstractLoader; - - // TODO: deprecated - // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. - - - /** - * Defines a POST request, use for a method value when loading data. - * @property POST - * @type {string} - * @default post - * @static - */ - s.POST = "POST"; - - /** - * Defines a GET request, use for a method value when loading data. - * @property GET - * @type {string} - * @default get - * @static - */ - s.GET = "GET"; - - /** - * The preload type for generic binary types. Note that images are loaded as binary files when using XHR. - * @property BINARY - * @type {String} - * @default binary - * @static - * @since 0.6.0 - */ - s.BINARY = "binary"; - - /** - * The preload type for css files. CSS files are loaded using a <link> when loaded with XHR, or a - * <style> tag when loaded with tags. - * @property CSS - * @type {String} - * @default css - * @static - * @since 0.6.0 - */ - s.CSS = "css"; - - /** - * The preload type for image files, usually png, gif, or jpg/jpeg. Images are loaded into an <image> tag. - * @property IMAGE - * @type {String} - * @default image - * @static - * @since 0.6.0 - */ - s.IMAGE = "image"; - - /** - * The preload type for javascript files, usually with the "js" file extension. JavaScript files are loaded into a - * <script> tag. - * - * Since version 0.4.1+, due to how tag-loaded scripts work, all JavaScript files are automatically injected into - * the body of the document to maintain parity between XHR and tag-loaded scripts. In version 0.4.0 and earlier, - * only tag-loaded scripts are injected. - * @property JAVASCRIPT - * @type {String} - * @default javascript - * @static - * @since 0.6.0 - */ - s.JAVASCRIPT = "javascript"; - - /** - * The preload type for json files, usually with the "json" file extension. JSON data is loaded and parsed into a - * JavaScript object. Note that if a `callback` is present on the load item, the file will be loaded with JSONP, - * no matter what the {{#crossLink "LoadQueue/preferXHR:property"}}{{/crossLink}} property is set to, and the JSON - * must contain a matching wrapper function. - * @property JSON - * @type {String} - * @default json - * @static - * @since 0.6.0 - */ - s.JSON = "json"; - - /** - * The preload type for jsonp files, usually with the "json" file extension. JSON data is loaded and parsed into a - * JavaScript object. You are required to pass a callback parameter that matches the function wrapper in the JSON. - * Note that JSONP will always be used if there is a callback present, no matter what the {{#crossLink "LoadQueue/preferXHR:property"}}{{/crossLink}} - * property is set to. - * @property JSONP - * @type {String} - * @default jsonp - * @static - * @since 0.6.0 - */ - s.JSONP = "jsonp"; - - /** - * The preload type for json-based manifest files, usually with the "json" file extension. The JSON data is loaded - * and parsed into a JavaScript object. PreloadJS will then look for a "manifest" property in the JSON, which is an - * Array of files to load, following the same format as the {{#crossLink "LoadQueue/loadManifest"}}{{/crossLink}} - * method. If a "callback" is specified on the manifest object, then it will be loaded using JSONP instead, - * regardless of what the {{#crossLink "LoadQueue/preferXHR:property"}}{{/crossLink}} property is set to. - * @property MANIFEST - * @type {String} - * @default manifest - * @static - * @since 0.6.0 - */ - s.MANIFEST = "manifest"; - - /** - * The preload type for sound files, usually mp3, ogg, or wav. When loading via tags, audio is loaded into an - * <audio> tag. - * @property SOUND - * @type {String} - * @default sound - * @static - * @since 0.6.0 - */ - s.SOUND = "sound"; - - /** - * The preload type for video files, usually mp4, ts, or ogg. When loading via tags, video is loaded into an - * <video> tag. - * @property VIDEO - * @type {String} - * @default video - * @static - * @since 0.6.0 - */ - s.VIDEO = "video"; - - /** - * The preload type for SpriteSheet files. SpriteSheet files are JSON files that contain string image paths. - * @property SPRITESHEET - * @type {String} - * @default spritesheet - * @static - * @since 0.6.0 - */ - s.SPRITESHEET = "spritesheet"; - - /** - * The preload type for SVG files. - * @property SVG - * @type {String} - * @default svg - * @static - * @since 0.6.0 - */ - s.SVG = "svg"; - - /** - * The preload type for text files, which is also the default file type if the type can not be determined. Text is - * loaded as raw text. - * @property TEXT - * @type {String} - * @default text - * @static - * @since 0.6.0 - */ - s.TEXT = "text"; - - /** - * The preload type for xml files. XML is loaded into an XML document. - * @property XML - * @type {String} - * @default xml - * @static - * @since 0.6.0 - */ - s.XML = "xml"; - -// Events - /** - * The {{#crossLink "ProgressEvent"}}{{/crossLink}} that is fired when the overall progress changes. Prior to - * version 0.6.0, this was just a regular {{#crossLink "Event"}}{{/crossLink}}. - * @event progress - * @since 0.3.0 - */ - - /** - * The {{#crossLink "Event"}}{{/crossLink}} that is fired when a load starts. - * @event loadstart - * @param {Object} target The object that dispatched the event. - * @param {String} type The event type. - * @since 0.3.1 - */ - - /** - * The {{#crossLink "Event"}}{{/crossLink}} that is fired when the entire queue has been loaded. - * @event complete - * @param {Object} target The object that dispatched the event. - * @param {String} type The event type. - * @since 0.3.0 - */ - - /** - * The {{#crossLink "ErrorEvent"}}{{/crossLink}} that is fired when the loader encounters an error. If the error was - * encountered by a file, the event will contain the item that caused the error. Prior to version 0.6.0, this was - * just a regular {{#crossLink "Event"}}{{/crossLink}}. - * @event error - * @since 0.3.0 - */ - - /** - * The {{#crossLink "Event"}}{{/crossLink}} that is fired when the loader encounters an internal file load error. - * This enables loaders to maintain internal queues, and surface file load errors. - * @event fileerror - * @param {Object} target The object that dispatched the event. - * @param {String} type The even type ("fileerror") - * @param {LoadItem|object} The item that encountered the error - * @since 0.6.0 - */ - - /** - * The {{#crossLink "Event"}}{{/crossLink}} that is fired when a loader internally loads a file. This enables - * loaders such as {{#crossLink "ManifestLoader"}}{{/crossLink}} to maintain internal {{#crossLink "LoadQueue"}}{{/crossLink}}s - * and notify when they have loaded a file. The {{#crossLink "LoadQueue"}}{{/crossLink}} class dispatches a - * slightly different {{#crossLink "LoadQueue/fileload:event"}}{{/crossLink}} event. - * @event fileload - * @param {Object} target The object that dispatched the event. - * @param {String} type The event type ("fileload") - * @param {Object} item The file item which was specified in the {{#crossLink "LoadQueue/loadFile"}}{{/crossLink}} - * or {{#crossLink "LoadQueue/loadManifest"}}{{/crossLink}} call. If only a string path or tag was specified, the - * object will contain that value as a `src` property. - * @param {Object} result The HTML tag or parsed result of the loaded item. - * @param {Object} rawResult The unprocessed result, usually the raw text or binary data before it is converted - * to a usable object. - * @since 0.6.0 - */ - - /** - * The {{#crossLink "Event"}}{{/crossLink}} that is fired after the internal request is created, but before a load. - * This allows updates to the loader for specific loading needs, such as binary or XHR image loading. - * @event initialize - * @param {Object} target The object that dispatched the event. - * @param {String} type The event type ("initialize") - * @param {AbstractLoader} loader The loader that has been initialized. - */ - - - /** - * Get a reference to the manifest item that is loaded by this loader. In some cases this will be the value that was - * passed into {{#crossLink "LoadQueue"}}{{/crossLink}} using {{#crossLink "LoadQueue/loadFile"}}{{/crossLink}} or - * {{#crossLink "LoadQueue/loadManifest"}}{{/crossLink}}. However if only a String path was passed in, then it will - * be a {{#crossLink "LoadItem"}}{{/crossLink}}. - * @method getItem - * @return {Object} The manifest item that this loader is responsible for loading. - * @since 0.6.0 - */ - p.getItem = function () { - return this._item; - }; - - /** - * Get a reference to the content that was loaded by the loader (only available after the {{#crossLink "complete:event"}}{{/crossLink}} - * event is dispatched. - * @method getResult - * @param {Boolean} [raw=false] Determines if the returned result will be the formatted content, or the raw loaded - * data (if it exists). - * @return {Object} - * @since 0.6.0 - */ - p.getResult = function (raw) { - return raw ? this._rawResult : this._result; - }; - - /** - * Return the `tag` this object creates or uses for loading. - * @method getTag - * @return {Object} The tag instance - * @since 0.6.0 - */ - p.getTag = function () { - return this._tag; - }; - - /** - * Set the `tag` this item uses for loading. - * @method setTag - * @param {Object} tag The tag instance - * @since 0.6.0 - */ - p.setTag = function(tag) { - this._tag = tag; - }; - - /** - * Begin loading the item. This method is required when using a loader by itself. - * - *

Example

- * - * var queue = new createjs.LoadQueue(); - * queue.on("complete", handleComplete); - * queue.loadManifest(fileArray, false); // Note the 2nd argument that tells the queue not to start loading yet - * queue.load(); - * - * @method load - */ - p.load = function () { - this._createRequest(); - - this._request.on("complete", this, this); - this._request.on("progress", this, this); - this._request.on("loadStart", this, this); - this._request.on("abort", this, this); - this._request.on("timeout", this, this); - this._request.on("error", this, this); - - var evt = new createjs.Event("initialize"); - evt.loader = this._request; - this.dispatchEvent(evt); - - this._request.load(); - }; - - /** - * Close the the item. This will stop any open requests (although downloads using HTML tags may still continue in - * the background), but events will not longer be dispatched. - * @method cancel - */ - p.cancel = function () { - this.canceled = true; - this.destroy(); - }; - - /** - * Clean up the loader. - * @method destroy - */ - p.destroy = function() { - if (this._request) { - this._request.removeAllEventListeners(); - this._request.destroy(); - } - - this._request = null; - - this._item = null; - this._rawResult = null; - this._result = null; - - this._loadItems = null; - - this.removeAllEventListeners(); - }; - - /** - * Get any items loaded internally by the loader. The enables loaders such as {{#crossLink "ManifestLoader"}}{{/crossLink}} - * to expose items it loads internally. - * @method getLoadedItems - * @return {Array} A list of the items loaded by the loader. - * @since 0.6.0 - */ - p.getLoadedItems = function () { - return this._loadedItems; - }; - - - // Private methods - /** - * Create an internal request used for loading. By default, an {{#crossLink "XHRRequest"}}{{/crossLink}} or - * {{#crossLink "TagRequest"}}{{/crossLink}} is created, depending on the value of {{#crossLink "preferXHR:property"}}{{/crossLink}}. - * Other loaders may override this to use different request types, such as {{#crossLink "ManifestLoader"}}{{/crossLink}}, - * which uses {{#crossLink "JSONLoader"}}{{/crossLink}} or {{#crossLink "JSONPLoader"}}{{/crossLink}} under the hood. - * @method _createRequest - * @protected - */ - p._createRequest = function() { - if (!this._preferXHR) { - this._request = new createjs.TagRequest(this._item, this._tag || this._createTag(), this._tagSrcAttribute); - } else { - this._request = new createjs.XHRRequest(this._item); - } - }; - - /** - * Create the HTML tag used for loading. This method does nothing by default, and needs to be implemented - * by loaders that require tag loading. - * @method _createTag - * @param {String} src The tag source - * @return {HTMLElement} The tag that was created - * @protected - */ - p._createTag = function(src) { return null; }; - - /** - * Dispatch a loadstart {{#crossLink "Event"}}{{/crossLink}}. Please see the {{#crossLink "AbstractLoader/loadstart:event"}}{{/crossLink}} - * event for details on the event payload. - * @method _sendLoadStart - * @protected - */ - p._sendLoadStart = function () { - if (this._isCanceled()) { return; } - this.dispatchEvent("loadstart"); - }; - - /** - * Dispatch a {{#crossLink "ProgressEvent"}}{{/crossLink}}. - * @method _sendProgress - * @param {Number | Object} value The progress of the loaded item, or an object containing loaded - * and total properties. - * @protected - */ - p._sendProgress = function (value) { - if (this._isCanceled()) { return; } - var event = null; - if (typeof(value) == "number") { - this.progress = value; - event = new createjs.ProgressEvent(this.progress); - } else { - event = value; - this.progress = value.loaded / value.total; - event.progress = this.progress; - if (isNaN(this.progress) || this.progress == Infinity) { this.progress = 0; } - } - this.hasEventListener("progress") && this.dispatchEvent(event); - }; - - /** - * Dispatch a complete {{#crossLink "Event"}}{{/crossLink}}. Please see the {{#crossLink "AbstractLoader/complete:event"}}{{/crossLink}} event - * @method _sendComplete - * @protected - */ - p._sendComplete = function () { - if (this._isCanceled()) { return; } - - this.loaded = true; - - var event = new createjs.Event("complete"); - event.rawResult = this._rawResult; - - if (this._result != null) { - event.result = this._result; - } - - this.dispatchEvent(event); - }; - - /** - * Dispatch an error {{#crossLink "Event"}}{{/crossLink}}. Please see the {{#crossLink "AbstractLoader/error:event"}}{{/crossLink}} - * event for details on the event payload. - * @method _sendError - * @param {ErrorEvent} event The event object containing specific error properties. - * @protected - */ - p._sendError = function (event) { - if (this._isCanceled() || !this.hasEventListener("error")) { return; } - if (event == null) { - event = new createjs.ErrorEvent("PRELOAD_ERROR_EMPTY"); // TODO: Populate error - } - this.dispatchEvent(event); - }; - - /** - * Determine if the load has been canceled. This is important to ensure that method calls or asynchronous events - * do not cause issues after the queue has been cleaned up. - * @method _isCanceled - * @return {Boolean} If the loader has been canceled. - * @protected - */ - p._isCanceled = function () { - if (window.createjs == null || this.canceled) { - return true; - } - return false; - }; - - /** - * A custom result formatter function, which is called just before a request dispatches its complete event. Most - * loader types already have an internal formatter, but this can be user-overridden for custom formatting. The - * formatted result will be available on Loaders using {{#crossLink "getResult"}}{{/crossLink}}, and passing `true`. - * @property resultFormatter - * @type Function - * @return {Object} The formatted result - * @since 0.6.0 - */ - p.resultFormatter = null; //TODO: Add support for async formatting. - - /** - * Handle events from internal requests. By default, loaders will handle, and redispatch the necessary events, but - * this method can be overridden for custom behaviours. - * @method handleEvent - * @param {Event} event The event that the internal request dispatches. - * @protected - * @since 0.6.0 - */ - p.handleEvent = function (event) { - switch (event.type) { - case "complete": - this._rawResult = event.target._response; - var result = this.resultFormatter && this.resultFormatter(this); - var _this = this; - if (result instanceof Function) { - result(function(result) { - _this._result = result; - _this._sendComplete(); - }); - } else { - this._result = result || this._rawResult; - this._sendComplete(); - } - break; - case "progress": - this._sendProgress(event); - break; - case "error": - this._sendError(event); - break; - case "loadstart": - this._sendLoadStart(); - break; - case "abort": - case "timeout": - if (!this._isCanceled()) { - this.dispatchEvent(event.type); - } - break; - } - }; - - /** - * @method buildPath - * @protected - * @deprecated Use the {{#crossLink "RequestUtils"}}{{/crossLink}} method {{#crossLink "RequestUtils/buildPath"}}{{/crossLink}} - * instead. - */ - p.buildPath = function (src, data) { - return createjs.RequestUtils.buildPath(src, data); - }; - - /** - * @method toString - * @return {String} a string representation of the instance. - */ - p.toString = function () { - return "[PreloadJS AbstractLoader]"; - }; - - createjs.AbstractLoader = createjs.promote(AbstractLoader, "EventDispatcher"); - -}()); +this.createjs = this.createjs || {}; -//############################################################################## -// AbstractMediaLoader.js -//############################################################################## +(function () { + "use strict"; -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - - // constructor - /** - * The AbstractMediaLoader is a base class that handles some of the shared methods and properties of loaders that - * handle HTML media elements, such as Video and Audio. - * @class AbstractMediaLoader - * @param {LoadItem|Object} loadItem - * @param {Boolean} preferXHR - * @param {String} type The type of media to load. Usually "video" or "audio". - * @extends AbstractLoader - * @constructor - */ - function AbstractMediaLoader(loadItem, preferXHR, type) { - this.AbstractLoader_constructor(loadItem, preferXHR, type); - - // public properties - this.resultFormatter = this._formatResult; - - // protected properties - this._tagSrcAttribute = "src"; - }; - - var p = createjs.extend(AbstractMediaLoader, createjs.AbstractLoader); - - // static properties - // public methods - p.load = function () { - // TagRequest will handle most of this, but Sound / Video need a few custom properties, so just handle them here. - if (!this._tag) { - this._tag = this._createTag(this._item.src); - } - - this._tag.preload = "auto"; - this._tag.load(); - - this.AbstractLoader_load(); - }; - - // protected methods - /** - * Creates a new tag for loading if it doesn't exist yet. - * @method _createTag - * @private - */ - p._createTag = function () {}; - - - p._createRequest = function() { - if (!this._preferXHR) { - this._request = new createjs.MediaTagRequest(this._item, this._tag || this._createTag(), this._tagSrcAttribute); - } else { - this._request = new createjs.XHRRequest(this._item); - } - }; - - /** - * The result formatter for media files. - * @method _formatResult - * @param {AbstractLoader} loader - * @returns {HTMLVideoElement|HTMLAudioElement} - * @private - */ - p._formatResult = function (loader) { - this._tag.removeEventListener && this._tag.removeEventListener("canplaythrough", this._loadedHandler); - this._tag.onstalled = null; - if (this._preferXHR) { - loader.getTag().src = loader.getResult(true); - } - return loader.getTag(); - }; - - createjs.AbstractMediaLoader = createjs.promote(AbstractMediaLoader, "AbstractLoader"); - -}()); +// constructor + /** + * The base loader, which defines all the generic methods, properties, and events. All loaders extend this class, + * including the {{#crossLink "LoadQueue"}}{{/crossLink}}. + * @class AbstractLoader + * @param {LoadItem|object|string} loadItem The item to be loaded. + * @param {Boolean} [preferXHR] Determines if the LoadItem should try and load using XHR, or take a + * tag-based approach, which can be better in cross-domain situations. Not all loaders can load using one or the + * other, so this is a suggested directive. + * @param {String} [type] The type of loader. Loader types are defined as constants on the AbstractLoader class, + * such as {{#crossLink "IMAGE:property"}}{{/crossLink}}, {{#crossLink "CSS:property"}}{{/crossLink}}, etc. + * @extends EventDispatcher + */ + function AbstractLoader(loadItem, preferXHR, type) { + this.EventDispatcher_constructor(); -//############################################################################## -// AbstractRequest.js -//############################################################################## + // public properties + /** + * If the loader has completed loading. This provides a quick check, but also ensures that the different approaches + * used for loading do not pile up resulting in more than one `complete` {{#crossLink "Event"}}{{/crossLink}}. + * @property loaded + * @type {Boolean} + * @default false + */ + this.loaded = false; -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - - /** - * A base class for actual data requests, such as {{#crossLink "XHRRequest"}}{{/crossLink}}, {{#crossLink "TagRequest"}}{{/crossLink}}, - * and {{#crossLink "MediaRequest"}}{{/crossLink}}. PreloadJS loaders will typically use a data loader under the - * hood to get data. - * @class AbstractRequest - * @param {LoadItem} item - * @constructor - */ - var AbstractRequest = function (item) { - this._item = item; - }; - - var p = createjs.extend(AbstractRequest, createjs.EventDispatcher); - - // public methods - /** - * Begin a load. - * @method load - */ - p.load = function() {}; - - /** - * Clean up a request. - * @method destroy - */ - p.destroy = function() {}; - - /** - * Cancel an in-progress request. - * @method cancel - */ - p.cancel = function() {}; - - createjs.AbstractRequest = createjs.promote(AbstractRequest, "EventDispatcher"); - -}()); + /** + * Determine if the loader was canceled. Canceled loads will not fire complete events. Note that this property + * is readonly, so {{#crossLink "LoadQueue"}}{{/crossLink}} queues should be closed using {{#crossLink "LoadQueue/close"}}{{/crossLink}} + * instead. + * @property canceled + * @type {Boolean} + * @default false + */ + this.canceled = false; -//############################################################################## -// TagRequest.js -//############################################################################## + /** + * The current load progress (percentage) for this item. This will be a number between 0 and 1. + * + *

Example

+ * + * var queue = new createjs.LoadQueue(); + * queue.loadFile("largeImage.png"); + * queue.on("progress", function() { + * console.log("Progress:", queue.progress, event.progress); + * }); + * + * @property progress + * @type {Number} + * @default 0 + */ + this.progress = 0; + + /** + * The type of item this loader will load. See {{#crossLink "AbstractLoader"}}{{/crossLink}} for a full list of + * supported types. + * @property type + * @type {String} + */ + this.type = type; + + /** + * A formatter function that converts the loaded raw result into the final result. For example, the JSONLoader + * converts a string of text into a JavaScript object. Not all loaders have a resultFormatter, and this property + * can be overridden to provide custom formatting. + * + * Optionally, a resultFormatter can return a callback function in cases where the formatting needs to be + * asynchronous, such as creating a new image. + * @property resultFormatter + * @type {Function} + * @default null + */ + this.resultFormatter = null; + + // protected properties + /** + * The {{#crossLink "LoadItem"}}{{/crossLink}} this loader represents. Note that this is null in a {{#crossLink "LoadQueue"}}{{/crossLink}}, + * but will be available on loaders such as {{#crossLink "XMLLoader"}}{{/crossLink}} and {{#crossLink "ImageLoader"}}{{/crossLink}}. + * @property _item + * @type {LoadItem|Object} + * @private + */ + if (loadItem) { + this._item = createjs.LoadItem.create(loadItem); + } else { + this._item = null; + } + + /** + * Whether the loader will try and load content using XHR (true) or HTML tags (false). + * @property _preferXHR + * @type {Boolean} + * @private + */ + this._preferXHR = preferXHR; + + /** + * The loaded result after it is formatted by an optional {{#crossLink "resultFormatter"}}{{/crossLink}}. For + * items that are not formatted, this will be the same as the {{#crossLink "_rawResult:property"}}{{/crossLink}}. + * The result is accessed using the {{#crossLink "getResult"}}{{/crossLink}} method. + * @property _result + * @type {Object|String} + * @private + */ + this._result = null; + + /** + * The loaded result before it is formatted. The rawResult is accessed using the {{#crossLink "getResult"}}{{/crossLink}} + * method, and passing `true`. + * @property _rawResult + * @type {Object|String} + * @private + */ + this._rawResult = null; + + /** + * A list of items that loaders load behind the scenes. This does not include the main item the loader is + * responsible for loading. Examples of loaders that have sub-items include the {{#crossLink "SpriteSheetLoader"}}{{/crossLink}} and + * {{#crossLink "ManifestLoader"}}{{/crossLink}}. + * @property _loadItems + * @type {null} + * @protected + */ + this._loadedItems = null; + + /** + * The attribute the items loaded using tags use for the source. + * @type {string} + * @default null + * @private + */ + this._tagSrcAttribute = null; + + /** + * An HTML tag (or similar) that a loader may use to load HTML content, such as images, scripts, etc. + * @property _tag + * @type {Object} + * @private + */ + this._tag = null; + }; + + var p = createjs.extend(AbstractLoader, createjs.EventDispatcher); + var s = AbstractLoader; + + // TODO: deprecated + // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. + + + /** + * Defines a POST request, use for a method value when loading data. + * @property POST + * @type {string} + * @default post + * @static + */ + s.POST = "POST"; + + /** + * Defines a GET request, use for a method value when loading data. + * @property GET + * @type {string} + * @default get + * @static + */ + s.GET = "GET"; + + /** + * The preload type for generic binary types. Note that images are loaded as binary files when using XHR. + * @property BINARY + * @type {String} + * @default binary + * @static + * @since 0.6.0 + */ + s.BINARY = "binary"; + + /** + * The preload type for css files. CSS files are loaded using a <link> when loaded with XHR, or a + * <style> tag when loaded with tags. + * @property CSS + * @type {String} + * @default css + * @static + * @since 0.6.0 + */ + s.CSS = "css"; + + /** + * The preload type for image files, usually png, gif, or jpg/jpeg. Images are loaded into an <image> tag. + * @property IMAGE + * @type {String} + * @default image + * @static + * @since 0.6.0 + */ + s.IMAGE = "image"; + + /** + * The preload type for javascript files, usually with the "js" file extension. JavaScript files are loaded into a + * <script> tag. + * + * Since version 0.4.1+, due to how tag-loaded scripts work, all JavaScript files are automatically injected into + * the body of the document to maintain parity between XHR and tag-loaded scripts. In version 0.4.0 and earlier, + * only tag-loaded scripts are injected. + * @property JAVASCRIPT + * @type {String} + * @default javascript + * @static + * @since 0.6.0 + */ + s.JAVASCRIPT = "javascript"; + + /** + * The preload type for json files, usually with the "json" file extension. JSON data is loaded and parsed into a + * JavaScript object. Note that if a `callback` is present on the load item, the file will be loaded with JSONP, + * no matter what the {{#crossLink "LoadQueue/preferXHR:property"}}{{/crossLink}} property is set to, and the JSON + * must contain a matching wrapper function. + * @property JSON + * @type {String} + * @default json + * @static + * @since 0.6.0 + */ + s.JSON = "json"; + + /** + * The preload type for jsonp files, usually with the "json" file extension. JSON data is loaded and parsed into a + * JavaScript object. You are required to pass a callback parameter that matches the function wrapper in the JSON. + * Note that JSONP will always be used if there is a callback present, no matter what the {{#crossLink "LoadQueue/preferXHR:property"}}{{/crossLink}} + * property is set to. + * @property JSONP + * @type {String} + * @default jsonp + * @static + * @since 0.6.0 + */ + s.JSONP = "jsonp"; + + /** + * The preload type for json-based manifest files, usually with the "json" file extension. The JSON data is loaded + * and parsed into a JavaScript object. PreloadJS will then look for a "manifest" property in the JSON, which is an + * Array of files to load, following the same format as the {{#crossLink "LoadQueue/loadManifest"}}{{/crossLink}} + * method. If a "callback" is specified on the manifest object, then it will be loaded using JSONP instead, + * regardless of what the {{#crossLink "LoadQueue/preferXHR:property"}}{{/crossLink}} property is set to. + * @property MANIFEST + * @type {String} + * @default manifest + * @static + * @since 0.6.0 + */ + s.MANIFEST = "manifest"; + + /** + * The preload type for sound files, usually mp3, ogg, or wav. When loading via tags, audio is loaded into an + * <audio> tag. + * @property SOUND + * @type {String} + * @default sound + * @static + * @since 0.6.0 + */ + s.SOUND = "sound"; + + /** + * The preload type for video files, usually mp4, ts, or ogg. When loading via tags, video is loaded into an + * <video> tag. + * @property VIDEO + * @type {String} + * @default video + * @static + * @since 0.6.0 + */ + s.VIDEO = "video"; + + /** + * The preload type for SpriteSheet files. SpriteSheet files are JSON files that contain string image paths. + * @property SPRITESHEET + * @type {String} + * @default spritesheet + * @static + * @since 0.6.0 + */ + s.SPRITESHEET = "spritesheet"; + + /** + * The preload type for SVG files. + * @property SVG + * @type {String} + * @default svg + * @static + * @since 0.6.0 + */ + s.SVG = "svg"; + + /** + * The preload type for text files, which is also the default file type if the type can not be determined. Text is + * loaded as raw text. + * @property TEXT + * @type {String} + * @default text + * @static + * @since 0.6.0 + */ + s.TEXT = "text"; + + /** + * The preload type for xml files. XML is loaded into an XML document. + * @property XML + * @type {String} + * @default xml + * @static + * @since 0.6.0 + */ + s.XML = "xml"; + +// Events + /** + * The {{#crossLink "ProgressEvent"}}{{/crossLink}} that is fired when the overall progress changes. Prior to + * version 0.6.0, this was just a regular {{#crossLink "Event"}}{{/crossLink}}. + * @event progress + * @since 0.3.0 + */ + + /** + * The {{#crossLink "Event"}}{{/crossLink}} that is fired when a load starts. + * @event loadstart + * @param {Object} target The object that dispatched the event. + * @param {String} type The event type. + * @since 0.3.1 + */ + + /** + * The {{#crossLink "Event"}}{{/crossLink}} that is fired when the entire queue has been loaded. + * @event complete + * @param {Object} target The object that dispatched the event. + * @param {String} type The event type. + * @since 0.3.0 + */ + + /** + * The {{#crossLink "ErrorEvent"}}{{/crossLink}} that is fired when the loader encounters an error. If the error was + * encountered by a file, the event will contain the item that caused the error. Prior to version 0.6.0, this was + * just a regular {{#crossLink "Event"}}{{/crossLink}}. + * @event error + * @since 0.3.0 + */ + + /** + * The {{#crossLink "Event"}}{{/crossLink}} that is fired when the loader encounters an internal file load error. + * This enables loaders to maintain internal queues, and surface file load errors. + * @event fileerror + * @param {Object} target The object that dispatched the event. + * @param {String} type The even type ("fileerror") + * @param {LoadItem|object} The item that encountered the error + * @since 0.6.0 + */ + + /** + * The {{#crossLink "Event"}}{{/crossLink}} that is fired when a loader internally loads a file. This enables + * loaders such as {{#crossLink "ManifestLoader"}}{{/crossLink}} to maintain internal {{#crossLink "LoadQueue"}}{{/crossLink}}s + * and notify when they have loaded a file. The {{#crossLink "LoadQueue"}}{{/crossLink}} class dispatches a + * slightly different {{#crossLink "LoadQueue/fileload:event"}}{{/crossLink}} event. + * @event fileload + * @param {Object} target The object that dispatched the event. + * @param {String} type The event type ("fileload") + * @param {Object} item The file item which was specified in the {{#crossLink "LoadQueue/loadFile"}}{{/crossLink}} + * or {{#crossLink "LoadQueue/loadManifest"}}{{/crossLink}} call. If only a string path or tag was specified, the + * object will contain that value as a `src` property. + * @param {Object} result The HTML tag or parsed result of the loaded item. + * @param {Object} rawResult The unprocessed result, usually the raw text or binary data before it is converted + * to a usable object. + * @since 0.6.0 + */ + + /** + * The {{#crossLink "Event"}}{{/crossLink}} that is fired after the internal request is created, but before a load. + * This allows updates to the loader for specific loading needs, such as binary or XHR image loading. + * @event initialize + * @param {Object} target The object that dispatched the event. + * @param {String} type The event type ("initialize") + * @param {AbstractLoader} loader The loader that has been initialized. + */ + + + /** + * Get a reference to the manifest item that is loaded by this loader. In some cases this will be the value that was + * passed into {{#crossLink "LoadQueue"}}{{/crossLink}} using {{#crossLink "LoadQueue/loadFile"}}{{/crossLink}} or + * {{#crossLink "LoadQueue/loadManifest"}}{{/crossLink}}. However if only a String path was passed in, then it will + * be a {{#crossLink "LoadItem"}}{{/crossLink}}. + * @method getItem + * @return {Object} The manifest item that this loader is responsible for loading. + * @since 0.6.0 + */ + p.getItem = function () { + return this._item; + }; + + /** + * Get a reference to the content that was loaded by the loader (only available after the {{#crossLink "complete:event"}}{{/crossLink}} + * event is dispatched. + * @method getResult + * @param {Boolean} [raw=false] Determines if the returned result will be the formatted content, or the raw loaded + * data (if it exists). + * @return {Object} + * @since 0.6.0 + */ + p.getResult = function (raw) { + return raw ? this._rawResult : this._result; + }; + + /** + * Return the `tag` this object creates or uses for loading. + * @method getTag + * @return {Object} The tag instance + * @since 0.6.0 + */ + p.getTag = function () { + return this._tag; + }; + + /** + * Set the `tag` this item uses for loading. + * @method setTag + * @param {Object} tag The tag instance + * @since 0.6.0 + */ + p.setTag = function(tag) { + this._tag = tag; + }; + + /** + * Begin loading the item. This method is required when using a loader by itself. + * + *

Example

+ * + * var queue = new createjs.LoadQueue(); + * queue.on("complete", handleComplete); + * queue.loadManifest(fileArray, false); // Note the 2nd argument that tells the queue not to start loading yet + * queue.load(); + * + * @method load + */ + p.load = function () { + this._createRequest(); + + this._request.on("complete", this, this); + this._request.on("progress", this, this); + this._request.on("loadStart", this, this); + this._request.on("abort", this, this); + this._request.on("timeout", this, this); + this._request.on("error", this, this); + + var evt = new createjs.Event("initialize"); + evt.loader = this._request; + this.dispatchEvent(evt); + + this._request.load(); + }; + + /** + * Close the the item. This will stop any open requests (although downloads using HTML tags may still continue in + * the background), but events will not longer be dispatched. + * @method cancel + */ + p.cancel = function () { + this.canceled = true; + this.destroy(); + }; + + /** + * Clean up the loader. + * @method destroy + */ + p.destroy = function() { + if (this._request) { + this._request.removeAllEventListeners(); + this._request.destroy(); + } + + this._request = null; + + this._item = null; + this._rawResult = null; + this._result = null; + + this._loadItems = null; + + this.removeAllEventListeners(); + }; + + /** + * Get any items loaded internally by the loader. The enables loaders such as {{#crossLink "ManifestLoader"}}{{/crossLink}} + * to expose items it loads internally. + * @method getLoadedItems + * @return {Array} A list of the items loaded by the loader. + * @since 0.6.0 + */ + p.getLoadedItems = function () { + return this._loadedItems; + }; + + + // Private methods + /** + * Create an internal request used for loading. By default, an {{#crossLink "XHRRequest"}}{{/crossLink}} or + * {{#crossLink "TagRequest"}}{{/crossLink}} is created, depending on the value of {{#crossLink "preferXHR:property"}}{{/crossLink}}. + * Other loaders may override this to use different request types, such as {{#crossLink "ManifestLoader"}}{{/crossLink}}, + * which uses {{#crossLink "JSONLoader"}}{{/crossLink}} or {{#crossLink "JSONPLoader"}}{{/crossLink}} under the hood. + * @method _createRequest + * @protected + */ + p._createRequest = function() { + if (!this._preferXHR) { + this._request = new createjs.TagRequest(this._item, this._tag || this._createTag(), this._tagSrcAttribute); + } else { + this._request = new createjs.XHRRequest(this._item); + } + }; + + /** + * Create the HTML tag used for loading. This method does nothing by default, and needs to be implemented + * by loaders that require tag loading. + * @method _createTag + * @param {String} src The tag source + * @return {HTMLElement} The tag that was created + * @protected + */ + p._createTag = function(src) { return null; }; + + /** + * Dispatch a loadstart {{#crossLink "Event"}}{{/crossLink}}. Please see the {{#crossLink "AbstractLoader/loadstart:event"}}{{/crossLink}} + * event for details on the event payload. + * @method _sendLoadStart + * @protected + */ + p._sendLoadStart = function () { + if (this._isCanceled()) { return; } + this.dispatchEvent("loadstart"); + }; + + /** + * Dispatch a {{#crossLink "ProgressEvent"}}{{/crossLink}}. + * @method _sendProgress + * @param {Number | Object} value The progress of the loaded item, or an object containing loaded + * and total properties. + * @protected + */ + p._sendProgress = function (value) { + if (this._isCanceled()) { return; } + var event = null; + if (typeof(value) == "number") { + this.progress = value; + event = new createjs.ProgressEvent(this.progress); + } else { + event = value; + this.progress = value.loaded / value.total; + event.progress = this.progress; + if (isNaN(this.progress) || this.progress == Infinity) { this.progress = 0; } + } + this.hasEventListener("progress") && this.dispatchEvent(event); + }; + + /** + * Dispatch a complete {{#crossLink "Event"}}{{/crossLink}}. Please see the {{#crossLink "AbstractLoader/complete:event"}}{{/crossLink}} event + * @method _sendComplete + * @protected + */ + p._sendComplete = function () { + if (this._isCanceled()) { return; } + + this.loaded = true; + + var event = new createjs.Event("complete"); + event.rawResult = this._rawResult; + + if (this._result != null) { + event.result = this._result; + } + + this.dispatchEvent(event); + }; + + /** + * Dispatch an error {{#crossLink "Event"}}{{/crossLink}}. Please see the {{#crossLink "AbstractLoader/error:event"}}{{/crossLink}} + * event for details on the event payload. + * @method _sendError + * @param {ErrorEvent} event The event object containing specific error properties. + * @protected + */ + p._sendError = function (event) { + if (this._isCanceled() || !this.hasEventListener("error")) { return; } + if (event == null) { + event = new createjs.ErrorEvent("PRELOAD_ERROR_EMPTY"); // TODO: Populate error + } + this.dispatchEvent(event); + }; + + /** + * Determine if the load has been canceled. This is important to ensure that method calls or asynchronous events + * do not cause issues after the queue has been cleaned up. + * @method _isCanceled + * @return {Boolean} If the loader has been canceled. + * @protected + */ + p._isCanceled = function () { + if (window.createjs == null || this.canceled) { + return true; + } + return false; + }; + + /** + * A custom result formatter function, which is called just before a request dispatches its complete event. Most + * loader types already have an internal formatter, but this can be user-overridden for custom formatting. The + * formatted result will be available on Loaders using {{#crossLink "getResult"}}{{/crossLink}}, and passing `true`. + * @property resultFormatter + * @type Function + * @return {Object} The formatted result + * @since 0.6.0 + */ + p.resultFormatter = null; //TODO: Add support for async formatting. + + /** + * Handle events from internal requests. By default, loaders will handle, and redispatch the necessary events, but + * this method can be overridden for custom behaviours. + * @method handleEvent + * @param {Event} event The event that the internal request dispatches. + * @protected + * @since 0.6.0 + */ + p.handleEvent = function (event) { + switch (event.type) { + case "complete": + this._rawResult = event.target._response; + var result = this.resultFormatter && this.resultFormatter(this); + var _this = this; + if (result instanceof Function) { + result(function(result) { + _this._result = result; + _this._sendComplete(); + }); + } else { + this._result = result || this._rawResult; + this._sendComplete(); + } + break; + case "progress": + this._sendProgress(event); + break; + case "error": + this._sendError(event); + break; + case "loadstart": + this._sendLoadStart(); + break; + case "abort": + case "timeout": + if (!this._isCanceled()) { + this.dispatchEvent(event.type); + } + break; + } + }; + + /** + * @method buildPath + * @protected + * @deprecated Use the {{#crossLink "RequestUtils"}}{{/crossLink}} method {{#crossLink "RequestUtils/buildPath"}}{{/crossLink}} + * instead. + */ + p.buildPath = function (src, data) { + return createjs.RequestUtils.buildPath(src, data); + }; + + /** + * @method toString + * @return {String} a string representation of the instance. + */ + p.toString = function () { + return "[PreloadJS AbstractLoader]"; + }; + + createjs.AbstractLoader = createjs.promote(AbstractLoader, "EventDispatcher"); + +}()); + +//############################################################################## +// AbstractMediaLoader.js +//############################################################################## + +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + + // constructor + /** + * The AbstractMediaLoader is a base class that handles some of the shared methods and properties of loaders that + * handle HTML media elements, such as Video and Audio. + * @class AbstractMediaLoader + * @param {LoadItem|Object} loadItem + * @param {Boolean} preferXHR + * @param {String} type The type of media to load. Usually "video" or "audio". + * @extends AbstractLoader + * @constructor + */ + function AbstractMediaLoader(loadItem, preferXHR, type) { + this.AbstractLoader_constructor(loadItem, preferXHR, type); + + // public properties + this.resultFormatter = this._formatResult; + + // protected properties + this._tagSrcAttribute = "src"; + }; + + var p = createjs.extend(AbstractMediaLoader, createjs.AbstractLoader); + + // static properties + // public methods + p.load = function () { + // TagRequest will handle most of this, but Sound / Video need a few custom properties, so just handle them here. + if (!this._tag) { + this._tag = this._createTag(this._item.src); + } + + this._tag.preload = "auto"; + this._tag.load(); + + this.AbstractLoader_load(); + }; + + // protected methods + /** + * Creates a new tag for loading if it doesn't exist yet. + * @method _createTag + * @private + */ + p._createTag = function () {}; + + + p._createRequest = function() { + if (!this._preferXHR) { + this._request = new createjs.MediaTagRequest(this._item, this._tag || this._createTag(), this._tagSrcAttribute); + } else { + this._request = new createjs.XHRRequest(this._item); + } + }; + + /** + * The result formatter for media files. + * @method _formatResult + * @param {AbstractLoader} loader + * @returns {HTMLVideoElement|HTMLAudioElement} + * @private + */ + p._formatResult = function (loader) { + this._tag.removeEventListener && this._tag.removeEventListener("canplaythrough", this._loadedHandler); + this._tag.onstalled = null; + if (this._preferXHR) { + loader.getTag().src = loader.getResult(true); + } + return loader.getTag(); + }; + + createjs.AbstractMediaLoader = createjs.promote(AbstractMediaLoader, "AbstractLoader"); + +}()); + +//############################################################################## +// AbstractRequest.js +//############################################################################## + +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + + /** + * A base class for actual data requests, such as {{#crossLink "XHRRequest"}}{{/crossLink}}, {{#crossLink "TagRequest"}}{{/crossLink}}, + * and {{#crossLink "MediaRequest"}}{{/crossLink}}. PreloadJS loaders will typically use a data loader under the + * hood to get data. + * @class AbstractRequest + * @param {LoadItem} item + * @constructor + */ + var AbstractRequest = function (item) { + this._item = item; + }; + + var p = createjs.extend(AbstractRequest, createjs.EventDispatcher); + + // public methods + /** + * Begin a load. + * @method load + */ + p.load = function() {}; + + /** + * Clean up a request. + * @method destroy + */ + p.destroy = function() {}; + + /** + * Cancel an in-progress request. + * @method cancel + */ + p.cancel = function() {}; + + createjs.AbstractRequest = createjs.promote(AbstractRequest, "EventDispatcher"); + +}()); + +//############################################################################## +// TagRequest.js +//############################################################################## + +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + + // constructor + /** + * An {{#crossLink "AbstractRequest"}}{{/crossLink}} that loads HTML tags, such as images and scripts. + * @class TagRequest + * @param {LoadItem} loadItem + * @param {HTMLElement} tag + * @param {String} srcAttribute The tag attribute that specifies the source, such as "src", "href", etc. + */ + function TagRequest(loadItem, tag, srcAttribute) { + this.AbstractRequest_constructor(loadItem); + + // protected properties + /** + * The HTML tag instance that is used to load. + * @property _tag + * @type {HTMLElement} + * @protected + */ + this._tag = tag; + + /** + * The tag attribute that specifies the source, such as "src", "href", etc. + * @property _tagSrcAttribute + * @type {String} + * @protected + */ + this._tagSrcAttribute = srcAttribute; + + /** + * A method closure used for handling the tag load event. + * @property _loadedHandler + * @type {Function} + * @private + */ + this._loadedHandler = createjs.proxy(this._handleTagComplete, this); + + /** + * Determines if the element was added to the DOM automatically by PreloadJS, so it can be cleaned up after. + * @property _addedToDOM + * @type {Boolean} + * @private + */ + this._addedToDOM = false; + + /** + * Determines what the tags initial style.visibility was, so we can set it correctly after a load. + * + * @type {null} + * @private + */ + this._startTagVisibility = null; + }; + + var p = createjs.extend(TagRequest, createjs.AbstractRequest); + + // public methods + p.load = function () { + this._tag.onload = createjs.proxy(this._handleTagComplete, this); + this._tag.onreadystatechange = createjs.proxy(this._handleReadyStateChange, this); + this._tag.onerror = createjs.proxy(this._handleError, this); + + var evt = new createjs.Event("initialize"); + evt.loader = this._tag; + + this.dispatchEvent(evt); + + this._hideTag(); + + this._loadTimeout = setTimeout(createjs.proxy(this._handleTimeout, this), this._item.loadTimeout); + + this._tag[this._tagSrcAttribute] = this._item.src; + + // wdg:: Append the tag AFTER setting the src, or SVG loading on iOS will fail. + if (this._tag.parentNode == null) { + window.document.body.appendChild(this._tag); + this._addedToDOM = true; + } + }; + + p.destroy = function() { + this._clean(); + this._tag = null; + + this.AbstractRequest_destroy(); + }; + + // private methods + /** + * Handle the readyStateChange event from a tag. We need this in place of the `onload` callback (mainly SCRIPT + * and LINK tags), but other cases may exist. + * @method _handleReadyStateChange + * @private + */ + p._handleReadyStateChange = function () { + clearTimeout(this._loadTimeout); + // This is strictly for tags in browsers that do not support onload. + var tag = this._tag; + + // Complete is for old IE support. + if (tag.readyState == "loaded" || tag.readyState == "complete") { + this._handleTagComplete(); + } + }; + + /** + * Handle any error events from the tag. + * @method _handleError + * @protected + */ + p._handleError = function() { + this._clean(); + this.dispatchEvent("error"); + }; + + /** + * Handle the tag's onload callback. + * @method _handleTagComplete + * @private + */ + p._handleTagComplete = function () { + this._rawResult = this._tag; + this._result = this.resultFormatter && this.resultFormatter(this) || this._rawResult; + + this._clean(); + this._showTag(); + + this.dispatchEvent("complete"); + }; + + /** + * The tag request has not loaded within the time specified in loadTimeout. + * @method _handleError + * @param {Object} event The XHR error event. + * @private + */ + p._handleTimeout = function () { + this._clean(); + this.dispatchEvent(new createjs.Event("timeout")); + }; + + /** + * Remove event listeners, but don't destroy the request object + * @method _clean + * @private + */ + p._clean = function() { + this._tag.onload = null; + this._tag.onreadystatechange = null; + this._tag.onerror = null; + if (this._addedToDOM && this._tag.parentNode != null) { + this._tag.parentNode.removeChild(this._tag); + } + clearTimeout(this._loadTimeout); + }; + + p._hideTag = function() { + this._startTagVisibility = this._tag.style.visibility; + this._tag.style.visibility = "hidden"; + }; + + p._showTag = function() { + this._tag.style.visibility = this._startTagVisibility; + }; + + /** + * Handle a stalled audio event. The main place this happens is with HTMLAudio in Chrome when playing back audio + * that is already in a load, but not complete. + * @method _handleStalled + * @private + */ + p._handleStalled = function () { + //Ignore, let the timeout take care of it. Sometimes its not really stopped. + }; + + createjs.TagRequest = createjs.promote(TagRequest, "AbstractRequest"); -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - - // constructor - /** - * An {{#crossLink "AbstractRequest"}}{{/crossLink}} that loads HTML tags, such as images and scripts. - * @class TagRequest - * @param {LoadItem} loadItem - * @param {HTMLElement} tag - * @param {String} srcAttribute The tag attribute that specifies the source, such as "src", "href", etc. - */ - function TagRequest(loadItem, tag, srcAttribute) { - this.AbstractRequest_constructor(loadItem); - - // protected properties - /** - * The HTML tag instance that is used to load. - * @property _tag - * @type {HTMLElement} - * @protected - */ - this._tag = tag; - - /** - * The tag attribute that specifies the source, such as "src", "href", etc. - * @property _tagSrcAttribute - * @type {String} - * @protected - */ - this._tagSrcAttribute = srcAttribute; - - /** - * A method closure used for handling the tag load event. - * @property _loadedHandler - * @type {Function} - * @private - */ - this._loadedHandler = createjs.proxy(this._handleTagComplete, this); - - /** - * Determines if the element was added to the DOM automatically by PreloadJS, so it can be cleaned up after. - * @property _addedToDOM - * @type {Boolean} - * @private - */ - this._addedToDOM = false; - - /** - * Determines what the tags initial style.visibility was, so we can set it correctly after a load. - * - * @type {null} - * @private - */ - this._startTagVisibility = null; - }; - - var p = createjs.extend(TagRequest, createjs.AbstractRequest); - - // public methods - p.load = function () { - this._tag.onload = createjs.proxy(this._handleTagComplete, this); - this._tag.onreadystatechange = createjs.proxy(this._handleReadyStateChange, this); - this._tag.onerror = createjs.proxy(this._handleError, this); - - var evt = new createjs.Event("initialize"); - evt.loader = this._tag; - - this.dispatchEvent(evt); - - this._hideTag(); - - this._loadTimeout = setTimeout(createjs.proxy(this._handleTimeout, this), this._item.loadTimeout); - - this._tag[this._tagSrcAttribute] = this._item.src; - - // wdg:: Append the tag AFTER setting the src, or SVG loading on iOS will fail. - if (this._tag.parentNode == null) { - window.document.body.appendChild(this._tag); - this._addedToDOM = true; - } - }; - - p.destroy = function() { - this._clean(); - this._tag = null; - - this.AbstractRequest_destroy(); - }; - - // private methods - /** - * Handle the readyStateChange event from a tag. We need this in place of the `onload` callback (mainly SCRIPT - * and LINK tags), but other cases may exist. - * @method _handleReadyStateChange - * @private - */ - p._handleReadyStateChange = function () { - clearTimeout(this._loadTimeout); - // This is strictly for tags in browsers that do not support onload. - var tag = this._tag; - - // Complete is for old IE support. - if (tag.readyState == "loaded" || tag.readyState == "complete") { - this._handleTagComplete(); - } - }; - - /** - * Handle any error events from the tag. - * @method _handleError - * @protected - */ - p._handleError = function() { - this._clean(); - this.dispatchEvent("error"); - }; - - /** - * Handle the tag's onload callback. - * @method _handleTagComplete - * @private - */ - p._handleTagComplete = function () { - this._rawResult = this._tag; - this._result = this.resultFormatter && this.resultFormatter(this) || this._rawResult; - - this._clean(); - this._showTag(); - - this.dispatchEvent("complete"); - }; - - /** - * The tag request has not loaded within the time specified in loadTimeout. - * @method _handleError - * @param {Object} event The XHR error event. - * @private - */ - p._handleTimeout = function () { - this._clean(); - this.dispatchEvent(new createjs.Event("timeout")); - }; - - /** - * Remove event listeners, but don't destroy the request object - * @method _clean - * @private - */ - p._clean = function() { - this._tag.onload = null; - this._tag.onreadystatechange = null; - this._tag.onerror = null; - if (this._addedToDOM && this._tag.parentNode != null) { - this._tag.parentNode.removeChild(this._tag); - } - clearTimeout(this._loadTimeout); - }; - - p._hideTag = function() { - this._startTagVisibility = this._tag.style.visibility; - this._tag.style.visibility = "hidden"; - }; - - p._showTag = function() { - this._tag.style.visibility = this._startTagVisibility; - }; - - /** - * Handle a stalled audio event. The main place this happens is with HTMLAudio in Chrome when playing back audio - * that is already in a load, but not complete. - * @method _handleStalled - * @private - */ - p._handleStalled = function () { - //Ignore, let the timeout take care of it. Sometimes its not really stopped. - }; - - createjs.TagRequest = createjs.promote(TagRequest, "AbstractRequest"); - }()); //############################################################################## // MediaTagRequest.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - - // constructor - /** - * An {{#crossLink "TagRequest"}}{{/crossLink}} that loads HTML tags for video and audio. - * @class MediaTagRequest - * @param {LoadItem} loadItem - * @param {HTMLAudioElement|HTMLVideoElement} tag - * @param {String} srcAttribute The tag attribute that specifies the source, such as "src", "href", etc. - * @constructor - */ - function MediaTagRequest(loadItem, tag, srcAttribute) { - this.AbstractRequest_constructor(loadItem); - - // protected properties - this._tag = tag; - this._tagSrcAttribute = srcAttribute; - this._loadedHandler = createjs.proxy(this._handleTagComplete, this); - }; - - var p = createjs.extend(MediaTagRequest, createjs.TagRequest); - var s = MediaTagRequest; - - // public methods - p.load = function () { - var sc = createjs.proxy(this._handleStalled, this); - this._stalledCallback = sc; - - var pc = createjs.proxy(this._handleProgress, this); - this._handleProgress = pc; - - this._tag.addEventListener("stalled", sc); - this._tag.addEventListener("progress", pc); - - // This will tell us when audio is buffered enough to play through, but not when its loaded. - // The tag doesn't keep loading in Chrome once enough has buffered, and we have decided that behaviour is sufficient. - this._tag.addEventListener && this._tag.addEventListener("canplaythrough", this._loadedHandler, false); // canplaythrough callback doesn't work in Chrome, so we use an event. - - this.TagRequest_load(); - }; - - // private methods - p._handleReadyStateChange = function () { - clearTimeout(this._loadTimeout); - // This is strictly for tags in browsers that do not support onload. - var tag = this._tag; - - // Complete is for old IE support. - if (tag.readyState == "loaded" || tag.readyState == "complete") { - this._handleTagComplete(); - } - }; - - p._handleStalled = function () { - //Ignore, let the timeout take care of it. Sometimes its not really stopped. - }; - - /** - * An XHR request has reported progress. - * @method _handleProgress - * @param {Object} event The XHR progress event. - * @private - */ - p._handleProgress = function (event) { - if (!event || event.loaded > 0 && event.total == 0) { - return; // Sometimes we get no "total", so just ignore the progress event. - } - - var newEvent = new createjs.ProgressEvent(event.loaded, event.total); - this.dispatchEvent(newEvent); - }; - - // protected methods - p._clean = function () { - this._tag.removeEventListener && this._tag.removeEventListener("canplaythrough", this._loadedHandler); - this._tag.removeEventListener("stalled", this._stalledCallback); - this._tag.removeEventListener("progress", this._progressCallback); - - this.TagRequest__clean(); - }; - - createjs.MediaTagRequest = createjs.promote(MediaTagRequest, "TagRequest"); - +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + + // constructor + /** + * An {{#crossLink "TagRequest"}}{{/crossLink}} that loads HTML tags for video and audio. + * @class MediaTagRequest + * @param {LoadItem} loadItem + * @param {HTMLAudioElement|HTMLVideoElement} tag + * @param {String} srcAttribute The tag attribute that specifies the source, such as "src", "href", etc. + * @constructor + */ + function MediaTagRequest(loadItem, tag, srcAttribute) { + this.AbstractRequest_constructor(loadItem); + + // protected properties + this._tag = tag; + this._tagSrcAttribute = srcAttribute; + this._loadedHandler = createjs.proxy(this._handleTagComplete, this); + }; + + var p = createjs.extend(MediaTagRequest, createjs.TagRequest); + var s = MediaTagRequest; + + // public methods + p.load = function () { + var sc = createjs.proxy(this._handleStalled, this); + this._stalledCallback = sc; + + var pc = createjs.proxy(this._handleProgress, this); + this._handleProgress = pc; + + this._tag.addEventListener("stalled", sc); + this._tag.addEventListener("progress", pc); + + // This will tell us when audio is buffered enough to play through, but not when its loaded. + // The tag doesn't keep loading in Chrome once enough has buffered, and we have decided that behaviour is sufficient. + this._tag.addEventListener && this._tag.addEventListener("canplaythrough", this._loadedHandler, false); // canplaythrough callback doesn't work in Chrome, so we use an event. + + this.TagRequest_load(); + }; + + // private methods + p._handleReadyStateChange = function () { + clearTimeout(this._loadTimeout); + // This is strictly for tags in browsers that do not support onload. + var tag = this._tag; + + // Complete is for old IE support. + if (tag.readyState == "loaded" || tag.readyState == "complete") { + this._handleTagComplete(); + } + }; + + p._handleStalled = function () { + //Ignore, let the timeout take care of it. Sometimes its not really stopped. + }; + + /** + * An XHR request has reported progress. + * @method _handleProgress + * @param {Object} event The XHR progress event. + * @private + */ + p._handleProgress = function (event) { + if (!event || event.loaded > 0 && event.total == 0) { + return; // Sometimes we get no "total", so just ignore the progress event. + } + + var newEvent = new createjs.ProgressEvent(event.loaded, event.total); + this.dispatchEvent(newEvent); + }; + + // protected methods + p._clean = function () { + this._tag.removeEventListener && this._tag.removeEventListener("canplaythrough", this._loadedHandler); + this._tag.removeEventListener("stalled", this._stalledCallback); + this._tag.removeEventListener("progress", this._progressCallback); + + this.TagRequest__clean(); + }; + + createjs.MediaTagRequest = createjs.promote(MediaTagRequest, "TagRequest"); + }()); //############################################################################## // XHRRequest.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - -// constructor - /** - * A preloader that loads items using XHR requests, usually XMLHttpRequest. However XDomainRequests will be used - * for cross-domain requests if possible, and older versions of IE fall back on to ActiveX objects when necessary. - * XHR requests load the content as text or binary data, provide progress and consistent completion events, and - * can be canceled during load. Note that XHR is not supported in IE 6 or earlier, and is not recommended for - * cross-domain loading. - * @class XHRRequest - * @constructor - * @param {Object} item The object that defines the file to load. Please see the {{#crossLink "LoadQueue/loadFile"}}{{/crossLink}} - * for an overview of supported file properties. - * @extends AbstractLoader - */ - function XHRRequest(item) { - this.AbstractRequest_constructor(item); - - // protected properties - /** - * A reference to the XHR request used to load the content. - * @property _request - * @type {XMLHttpRequest | XDomainRequest | ActiveX.XMLHTTP} - * @private - */ - this._request = null; - - /** - * A manual load timeout that is used for browsers that do not support the onTimeout event on XHR (XHR level 1, - * typically IE9). - * @property _loadTimeout - * @type {Number} - * @private - */ - this._loadTimeout = null; - - /** - * The browser's XHR (XMLHTTPRequest) version. Supported versions are 1 and 2. There is no official way to detect - * the version, so we use capabilities to make a best guess. - * @property _xhrLevel - * @type {Number} - * @default 1 - * @private - */ - this._xhrLevel = 1; - - /** - * The response of a loaded file. This is set because it is expensive to look up constantly. This property will be - * null until the file is loaded. - * @property _response - * @type {mixed} - * @private - */ - this._response = null; - - /** - * The response of the loaded file before it is modified. In most cases, content is converted from raw text to - * an HTML tag or a formatted object which is set to the result property, but the developer may still - * want to access the raw content as it was loaded. - * @property _rawResponse - * @type {String|Object} - * @private - */ - this._rawResponse = null; - - this._canceled = false; - - // Setup our event handlers now. - this._handleLoadStartProxy = createjs.proxy(this._handleLoadStart, this); - this._handleProgressProxy = createjs.proxy(this._handleProgress, this); - this._handleAbortProxy = createjs.proxy(this._handleAbort, this); - this._handleErrorProxy = createjs.proxy(this._handleError, this); - this._handleTimeoutProxy = createjs.proxy(this._handleTimeout, this); - this._handleLoadProxy = createjs.proxy(this._handleLoad, this); - this._handleReadyStateChangeProxy = createjs.proxy(this._handleReadyStateChange, this); - - if (!this._createXHR(item)) { - //TODO: Throw error? - } - }; - - var p = createjs.extend(XHRRequest, createjs.AbstractRequest); - -// static properties - /** - * A list of XMLHTTP object IDs to try when building an ActiveX object for XHR requests in earlier versions of IE. - * @property ACTIVEX_VERSIONS - * @type {Array} - * @since 0.4.2 - * @private - */ - XHRRequest.ACTIVEX_VERSIONS = [ - "Msxml2.XMLHTTP.6.0", - "Msxml2.XMLHTTP.5.0", - "Msxml2.XMLHTTP.4.0", - "MSXML2.XMLHTTP.3.0", - "MSXML2.XMLHTTP", - "Microsoft.XMLHTTP" - ]; - -// Public methods - /** - * Look up the loaded result. - * @method getResult - * @param {Boolean} [raw=false] Return a raw result instead of a formatted result. This applies to content - * loaded via XHR such as scripts, XML, CSS, and Images. If there is no raw result, the formatted result will be - * returned instead. - * @return {Object} A result object containing the content that was loaded, such as: - *
    - *
  • An image tag (<image />) for images
  • - *
  • A script tag for JavaScript (<script />). Note that scripts loaded with tags may be added to the - * HTML head.
  • - *
  • A style tag for CSS (<style />)
  • - *
  • Raw text for TEXT
  • - *
  • A formatted JavaScript object defined by JSON
  • - *
  • An XML document
  • - *
  • An binary arraybuffer loaded by XHR
  • - *
- * Note that if a raw result is requested, but not found, the result will be returned instead. - */ - p.getResult = function (raw) { - if (raw && this._rawResponse) { - return this._rawResponse; - } - return this._response; - }; - - // Overrides abstract method in AbstractRequest - p.cancel = function () { - this.canceled = true; - this._clean(); - this._request.abort(); - }; - - // Overrides abstract method in AbstractLoader - p.load = function () { - if (this._request == null) { - this._handleError(); - return; - } - - //Events - this._request.addEventListener("loadstart", this._handleLoadStartProxy, false); - this._request.addEventListener("progress", this._handleProgressProxy, false); - this._request.addEventListener("abort", this._handleAbortProxy, false); - this._request.addEventListener("error",this._handleErrorProxy, false); - this._request.addEventListener("timeout", this._handleTimeoutProxy, false); - - // Note: We don't get onload in all browsers (earlier FF and IE). onReadyStateChange handles these. - this._request.addEventListener("load", this._handleLoadProxy, false); - this._request.addEventListener("readystatechange", this._handleReadyStateChangeProxy, false); - - // Set up a timeout if we don't have XHR2 - if (this._xhrLevel == 1) { - this._loadTimeout = setTimeout(createjs.proxy(this._handleTimeout, this), this._item.loadTimeout); - } - - // Sometimes we get back 404s immediately, particularly when there is a cross origin request. // note this does not catch in Chrome - try { - if (!this._item.values || this._item.method == createjs.AbstractLoader.GET) { - this._request.send(); - } else if (this._item.method == createjs.AbstractLoader.POST) { - this._request.send(createjs.RequestUtils.formatQueryString(this._item.values)); - } - } catch (error) { - this.dispatchEvent(new createjs.ErrorEvent("XHR_SEND", null, error)); - } - }; - - p.setResponseType = function (type) { - this._request.responseType = type; - }; - - /** - * Get all the response headers from the XmlHttpRequest. - * - * From the docs: Return all the HTTP headers, excluding headers that are a case-insensitive match - * for Set-Cookie or Set-Cookie2, as a single string, with each header line separated by a U+000D CR U+000A LF pair, - * excluding the status line, and with each header name and header value separated by a U+003A COLON U+0020 SPACE - * pair. - * @method getAllResponseHeaders - * @return {String} - * @since 0.4.1 - */ - p.getAllResponseHeaders = function () { - if (this._request.getAllResponseHeaders instanceof Function) { - return this._request.getAllResponseHeaders(); - } else { - return null; - } - }; - - /** - * Get a specific response header from the XmlHttpRequest. - * - * From the docs: Returns the header field value from the response of which the field name matches - * header, unless the field name is Set-Cookie or Set-Cookie2. - * @method getResponseHeader - * @param {String} header The header name to retrieve. - * @return {String} - * @since 0.4.1 - */ - p.getResponseHeader = function (header) { - if (this._request.getResponseHeader instanceof Function) { - return this._request.getResponseHeader(header); - } else { - return null; - } - }; - -// protected methods - /** - * The XHR request has reported progress. - * @method _handleProgress - * @param {Object} event The XHR progress event. - * @private - */ - p._handleProgress = function (event) { - if (!event || event.loaded > 0 && event.total == 0) { - return; // Sometimes we get no "total", so just ignore the progress event. - } - - var newEvent = new createjs.ProgressEvent(event.loaded, event.total); - this.dispatchEvent(newEvent); - }; - - /** - * The XHR request has reported a load start. - * @method _handleLoadStart - * @param {Object} event The XHR loadStart event. - * @private - */ - p._handleLoadStart = function (event) { - clearTimeout(this._loadTimeout); - this.dispatchEvent("loadstart"); - }; - - /** - * The XHR request has reported an abort event. - * @method handleAbort - * @param {Object} event The XHR abort event. - * @private - */ - p._handleAbort = function (event) { - this._clean(); - this.dispatchEvent(new createjs.ErrorEvent("XHR_ABORTED", null, event)); - }; - - /** - * The XHR request has reported an error event. - * @method _handleError - * @param {Object} event The XHR error event. - * @private - */ - p._handleError = function (event) { - this._clean(); - this.dispatchEvent(new createjs.ErrorEvent(event.message)); - }; - - /** - * The XHR request has reported a readyState change. Note that older browsers (IE 7 & 8) do not provide an onload - * event, so we must monitor the readyStateChange to determine if the file is loaded. - * @method _handleReadyStateChange - * @param {Object} event The XHR readyStateChange event. - * @private - */ - p._handleReadyStateChange = function (event) { - if (this._request.readyState == 4) { - this._handleLoad(); - } - }; - - /** - * The XHR request has completed. This is called by the XHR request directly, or by a readyStateChange that has - * request.readyState == 4. Only the first call to this method will be processed. - * @method _handleLoad - * @param {Object} event The XHR load event. - * @private - */ - p._handleLoad = function (event) { - if (this.loaded) { - return; - } - this.loaded = true; - - var error = this._checkError(); - if (error) { - this._handleError(error); - return; - } - - this._response = this._getResponse(); - this._clean(); - - this.dispatchEvent(new createjs.Event("complete")); - }; - - /** - * The XHR request has timed out. This is called by the XHR request directly, or via a setTimeout - * callback. - * @method _handleTimeout - * @param {Object} [event] The XHR timeout event. This is occasionally null when called by the backup setTimeout. - * @private - */ - p._handleTimeout = function (event) { - this._clean(); - - this.dispatchEvent(new createjs.ErrorEvent("PRELOAD_TIMEOUT", null, event)); - }; - -// Protected - /** - * Determine if there is an error in the current load. This checks the status of the request for problem codes. Note - * that this does not check for an actual response. Currently, it only checks for 404 or 0 error code. - * @method _checkError - * @return {int} If the request status returns an error code. - * @private - */ - p._checkError = function () { - //LM: Probably need additional handlers here, maybe 501 - var status = parseInt(this._request.status); - - switch (status) { - case 404: // Not Found - case 0: // Not Loaded - return new Error(status); - } - return null; - }; - - /** - * Validate the response. Different browsers have different approaches, some of which throw errors when accessed - * in other browsers. If there is no response, the _response property will remain null. - * @method _getResponse - * @private - */ - p._getResponse = function () { - if (this._response != null) { - return this._response; - } - - if (this._request.response != null) { - return this._request.response; - } - - // Android 2.2 uses .responseText - try { - if (this._request.responseText != null) { - return this._request.responseText; - } - } catch (e) { - } - - // When loading XML, IE9 does not return .response, instead it returns responseXML.xml - try { - if (this._request.responseXML != null) { - return this._request.responseXML; - } - } catch (e) { - } - - return null; - }; - - /** - * Create an XHR request. Depending on a number of factors, we get totally different results. - *
  1. Some browsers get an XDomainRequest when loading cross-domain.
  2. - *
  3. XMLHttpRequest are created when available.
  4. - *
  5. ActiveX.XMLHTTP objects are used in older IE browsers.
  6. - *
  7. Text requests override the mime type if possible
  8. - *
  9. Origin headers are sent for crossdomain requests in some browsers.
  10. - *
  11. Binary loads set the response type to "arraybuffer"
- * @method _createXHR - * @param {Object} item The requested item that is being loaded. - * @return {Boolean} If an XHR request or equivalent was successfully created. - * @private - */ - p._createXHR = function (item) { - // Check for cross-domain loads. We can't fully support them, but we can try. - var crossdomain = createjs.RequestUtils.isCrossDomain(item); - var headers = {}; - - // Create the request. Fallback to whatever support we have. - var req = null; - if (window.XMLHttpRequest) { - req = new XMLHttpRequest(); - // This is 8 or 9, so use XDomainRequest instead. - if (crossdomain && req.withCredentials === undefined && window.XDomainRequest) { - req = new XDomainRequest(); - } - } else { // Old IE versions use a different approach - for (var i = 0, l = s.ACTIVEX_VERSIONS.length; i < l; i++) { - var axVersion = s.ACTIVEX_VERSIONS[i]; - try { - req = new ActiveXObject(axVersions); - break; - } catch (e) {} - } - if (req == null) { return false; } - } - - // Default to utf-8 for Text requests. - if (item.mimeType == null && createjs.RequestUtils.isText(item.type)) { - item.mimeType = "text/plain; charset=utf-8"; - } - - // IE9 doesn't support overrideMimeType(), so we need to check for it. - if (item.mimeType && req.overrideMimeType) { - req.overrideMimeType(item.mimeType); - } - - // Determine the XHR level - this._xhrLevel = (typeof req.responseType === "string") ? 2 : 1; - - var src = null; - if (item.method == createjs.AbstractLoader.GET) { - src = createjs.RequestUtils.buildPath(item.src, item.values); - } else { - src = item.src; - } - - // Open the request. Set cross-domain flags if it is supported (XHR level 1 only) - req.open(item.method || createjs.AbstractLoader.GET, src, true); - - if (crossdomain && req instanceof XMLHttpRequest && this._xhrLevel == 1) { - headers["Origin"] = location.origin; - } - - // To send data we need to set the Content-type header) - if (item.values && item.method == createjs.AbstractLoader.POST) { - headers["Content-Type"] = "application/x-www-form-urlencoded"; - } - - if (!crossdomain && !headers["X-Requested-With"]) { - headers["X-Requested-With"] = "XMLHttpRequest"; - } - - if (item.headers) { - for (var n in item.headers) { - headers[n] = item.headers[n]; - } - } - - for (n in headers) { - req.setRequestHeader(n, headers[n]) - } - - if (req instanceof XMLHttpRequest && item.withCredentials !== undefined) { - req.withCredentials = item.withCredentials; - } - - this._request = req; - - return true; - }; - - /** - * A request has completed (or failed or canceled), and needs to be disposed. - * @method _clean - * @private - */ - p._clean = function () { - clearTimeout(this._loadTimeout); - - this._request.removeEventListener("loadstart", this._handleLoadStartProxy); - this._request.removeEventListener("progress", this._handleProgressProxy); - this._request.removeEventListener("abort", this._handleAbortProxy); - this._request.removeEventListener("error",this._handleErrorProxy); - this._request.removeEventListener("timeout", this._handleTimeoutProxy); - this._request.removeEventListener("load", this._handleLoadProxy); - this._request.removeEventListener("readystatechange", this._handleReadyStateChangeProxy); - }; - - p.toString = function () { - return "[PreloadJS XHRRequest]"; - }; - - createjs.XHRRequest = createjs.promote(XHRRequest, "AbstractRequest"); - +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + +// constructor + /** + * A preloader that loads items using XHR requests, usually XMLHttpRequest. However XDomainRequests will be used + * for cross-domain requests if possible, and older versions of IE fall back on to ActiveX objects when necessary. + * XHR requests load the content as text or binary data, provide progress and consistent completion events, and + * can be canceled during load. Note that XHR is not supported in IE 6 or earlier, and is not recommended for + * cross-domain loading. + * @class XHRRequest + * @constructor + * @param {Object} item The object that defines the file to load. Please see the {{#crossLink "LoadQueue/loadFile"}}{{/crossLink}} + * for an overview of supported file properties. + * @extends AbstractLoader + */ + function XHRRequest(item) { + this.AbstractRequest_constructor(item); + + // protected properties + /** + * A reference to the XHR request used to load the content. + * @property _request + * @type {XMLHttpRequest | XDomainRequest | ActiveX.XMLHTTP} + * @private + */ + this._request = null; + + /** + * A manual load timeout that is used for browsers that do not support the onTimeout event on XHR (XHR level 1, + * typically IE9). + * @property _loadTimeout + * @type {Number} + * @private + */ + this._loadTimeout = null; + + /** + * The browser's XHR (XMLHTTPRequest) version. Supported versions are 1 and 2. There is no official way to detect + * the version, so we use capabilities to make a best guess. + * @property _xhrLevel + * @type {Number} + * @default 1 + * @private + */ + this._xhrLevel = 1; + + /** + * The response of a loaded file. This is set because it is expensive to look up constantly. This property will be + * null until the file is loaded. + * @property _response + * @type {mixed} + * @private + */ + this._response = null; + + /** + * The response of the loaded file before it is modified. In most cases, content is converted from raw text to + * an HTML tag or a formatted object which is set to the result property, but the developer may still + * want to access the raw content as it was loaded. + * @property _rawResponse + * @type {String|Object} + * @private + */ + this._rawResponse = null; + + this._canceled = false; + + // Setup our event handlers now. + this._handleLoadStartProxy = createjs.proxy(this._handleLoadStart, this); + this._handleProgressProxy = createjs.proxy(this._handleProgress, this); + this._handleAbortProxy = createjs.proxy(this._handleAbort, this); + this._handleErrorProxy = createjs.proxy(this._handleError, this); + this._handleTimeoutProxy = createjs.proxy(this._handleTimeout, this); + this._handleLoadProxy = createjs.proxy(this._handleLoad, this); + this._handleReadyStateChangeProxy = createjs.proxy(this._handleReadyStateChange, this); + + if (!this._createXHR(item)) { + //TODO: Throw error? + } + }; + + var p = createjs.extend(XHRRequest, createjs.AbstractRequest); + +// static properties + /** + * A list of XMLHTTP object IDs to try when building an ActiveX object for XHR requests in earlier versions of IE. + * @property ACTIVEX_VERSIONS + * @type {Array} + * @since 0.4.2 + * @private + */ + XHRRequest.ACTIVEX_VERSIONS = [ + "Msxml2.XMLHTTP.6.0", + "Msxml2.XMLHTTP.5.0", + "Msxml2.XMLHTTP.4.0", + "MSXML2.XMLHTTP.3.0", + "MSXML2.XMLHTTP", + "Microsoft.XMLHTTP" + ]; + +// Public methods + /** + * Look up the loaded result. + * @method getResult + * @param {Boolean} [raw=false] Return a raw result instead of a formatted result. This applies to content + * loaded via XHR such as scripts, XML, CSS, and Images. If there is no raw result, the formatted result will be + * returned instead. + * @return {Object} A result object containing the content that was loaded, such as: + *
    + *
  • An image tag (<image />) for images
  • + *
  • A script tag for JavaScript (<script />). Note that scripts loaded with tags may be added to the + * HTML head.
  • + *
  • A style tag for CSS (<style />)
  • + *
  • Raw text for TEXT
  • + *
  • A formatted JavaScript object defined by JSON
  • + *
  • An XML document
  • + *
  • An binary arraybuffer loaded by XHR
  • + *
+ * Note that if a raw result is requested, but not found, the result will be returned instead. + */ + p.getResult = function (raw) { + if (raw && this._rawResponse) { + return this._rawResponse; + } + return this._response; + }; + + // Overrides abstract method in AbstractRequest + p.cancel = function () { + this.canceled = true; + this._clean(); + this._request.abort(); + }; + + // Overrides abstract method in AbstractLoader + p.load = function () { + if (this._request == null) { + this._handleError(); + return; + } + + //Events + this._request.addEventListener("loadstart", this._handleLoadStartProxy, false); + this._request.addEventListener("progress", this._handleProgressProxy, false); + this._request.addEventListener("abort", this._handleAbortProxy, false); + this._request.addEventListener("error",this._handleErrorProxy, false); + this._request.addEventListener("timeout", this._handleTimeoutProxy, false); + + // Note: We don't get onload in all browsers (earlier FF and IE). onReadyStateChange handles these. + this._request.addEventListener("load", this._handleLoadProxy, false); + this._request.addEventListener("readystatechange", this._handleReadyStateChangeProxy, false); + + // Set up a timeout if we don't have XHR2 + if (this._xhrLevel == 1) { + this._loadTimeout = setTimeout(createjs.proxy(this._handleTimeout, this), this._item.loadTimeout); + } + + // Sometimes we get back 404s immediately, particularly when there is a cross origin request. // note this does not catch in Chrome + try { + if (!this._item.values || this._item.method == createjs.AbstractLoader.GET) { + this._request.send(); + } else if (this._item.method == createjs.AbstractLoader.POST) { + this._request.send(createjs.RequestUtils.formatQueryString(this._item.values)); + } + } catch (error) { + this.dispatchEvent(new createjs.ErrorEvent("XHR_SEND", null, error)); + } + }; + + p.setResponseType = function (type) { + this._request.responseType = type; + }; + + /** + * Get all the response headers from the XmlHttpRequest. + * + * From the docs: Return all the HTTP headers, excluding headers that are a case-insensitive match + * for Set-Cookie or Set-Cookie2, as a single string, with each header line separated by a U+000D CR U+000A LF pair, + * excluding the status line, and with each header name and header value separated by a U+003A COLON U+0020 SPACE + * pair. + * @method getAllResponseHeaders + * @return {String} + * @since 0.4.1 + */ + p.getAllResponseHeaders = function () { + if (this._request.getAllResponseHeaders instanceof Function) { + return this._request.getAllResponseHeaders(); + } else { + return null; + } + }; + + /** + * Get a specific response header from the XmlHttpRequest. + * + * From the docs: Returns the header field value from the response of which the field name matches + * header, unless the field name is Set-Cookie or Set-Cookie2. + * @method getResponseHeader + * @param {String} header The header name to retrieve. + * @return {String} + * @since 0.4.1 + */ + p.getResponseHeader = function (header) { + if (this._request.getResponseHeader instanceof Function) { + return this._request.getResponseHeader(header); + } else { + return null; + } + }; + +// protected methods + /** + * The XHR request has reported progress. + * @method _handleProgress + * @param {Object} event The XHR progress event. + * @private + */ + p._handleProgress = function (event) { + if (!event || event.loaded > 0 && event.total == 0) { + return; // Sometimes we get no "total", so just ignore the progress event. + } + + var newEvent = new createjs.ProgressEvent(event.loaded, event.total); + this.dispatchEvent(newEvent); + }; + + /** + * The XHR request has reported a load start. + * @method _handleLoadStart + * @param {Object} event The XHR loadStart event. + * @private + */ + p._handleLoadStart = function (event) { + clearTimeout(this._loadTimeout); + this.dispatchEvent("loadstart"); + }; + + /** + * The XHR request has reported an abort event. + * @method handleAbort + * @param {Object} event The XHR abort event. + * @private + */ + p._handleAbort = function (event) { + this._clean(); + this.dispatchEvent(new createjs.ErrorEvent("XHR_ABORTED", null, event)); + }; + + /** + * The XHR request has reported an error event. + * @method _handleError + * @param {Object} event The XHR error event. + * @private + */ + p._handleError = function (event) { + this._clean(); + this.dispatchEvent(new createjs.ErrorEvent(event.message)); + }; + + /** + * The XHR request has reported a readyState change. Note that older browsers (IE 7 & 8) do not provide an onload + * event, so we must monitor the readyStateChange to determine if the file is loaded. + * @method _handleReadyStateChange + * @param {Object} event The XHR readyStateChange event. + * @private + */ + p._handleReadyStateChange = function (event) { + if (this._request.readyState == 4) { + this._handleLoad(); + } + }; + + /** + * The XHR request has completed. This is called by the XHR request directly, or by a readyStateChange that has + * request.readyState == 4. Only the first call to this method will be processed. + * @method _handleLoad + * @param {Object} event The XHR load event. + * @private + */ + p._handleLoad = function (event) { + if (this.loaded) { + return; + } + this.loaded = true; + + var error = this._checkError(); + if (error) { + this._handleError(error); + return; + } + + this._response = this._getResponse(); + this._clean(); + + this.dispatchEvent(new createjs.Event("complete")); + }; + + /** + * The XHR request has timed out. This is called by the XHR request directly, or via a setTimeout + * callback. + * @method _handleTimeout + * @param {Object} [event] The XHR timeout event. This is occasionally null when called by the backup setTimeout. + * @private + */ + p._handleTimeout = function (event) { + this._clean(); + + this.dispatchEvent(new createjs.ErrorEvent("PRELOAD_TIMEOUT", null, event)); + }; + +// Protected + /** + * Determine if there is an error in the current load. This checks the status of the request for problem codes. Note + * that this does not check for an actual response. Currently, it only checks for 404 or 0 error code. + * @method _checkError + * @return {int} If the request status returns an error code. + * @private + */ + p._checkError = function () { + //LM: Probably need additional handlers here, maybe 501 + var status = parseInt(this._request.status); + + switch (status) { + case 404: // Not Found + case 0: // Not Loaded + return new Error(status); + } + return null; + }; + + /** + * Validate the response. Different browsers have different approaches, some of which throw errors when accessed + * in other browsers. If there is no response, the _response property will remain null. + * @method _getResponse + * @private + */ + p._getResponse = function () { + if (this._response != null) { + return this._response; + } + + if (this._request.response != null) { + return this._request.response; + } + + // Android 2.2 uses .responseText + try { + if (this._request.responseText != null) { + return this._request.responseText; + } + } catch (e) { + } + + // When loading XML, IE9 does not return .response, instead it returns responseXML.xml + try { + if (this._request.responseXML != null) { + return this._request.responseXML; + } + } catch (e) { + } + + return null; + }; + + /** + * Create an XHR request. Depending on a number of factors, we get totally different results. + *
  1. Some browsers get an XDomainRequest when loading cross-domain.
  2. + *
  3. XMLHttpRequest are created when available.
  4. + *
  5. ActiveX.XMLHTTP objects are used in older IE browsers.
  6. + *
  7. Text requests override the mime type if possible
  8. + *
  9. Origin headers are sent for crossdomain requests in some browsers.
  10. + *
  11. Binary loads set the response type to "arraybuffer"
+ * @method _createXHR + * @param {Object} item The requested item that is being loaded. + * @return {Boolean} If an XHR request or equivalent was successfully created. + * @private + */ + p._createXHR = function (item) { + // Check for cross-domain loads. We can't fully support them, but we can try. + var crossdomain = createjs.RequestUtils.isCrossDomain(item); + var headers = {}; + + // Create the request. Fallback to whatever support we have. + var req = null; + if (window.XMLHttpRequest) { + req = new XMLHttpRequest(); + // This is 8 or 9, so use XDomainRequest instead. + if (crossdomain && req.withCredentials === undefined && window.XDomainRequest) { + req = new XDomainRequest(); + } + } else { // Old IE versions use a different approach + for (var i = 0, l = s.ACTIVEX_VERSIONS.length; i < l; i++) { + var axVersion = s.ACTIVEX_VERSIONS[i]; + try { + req = new ActiveXObject(axVersions); + break; + } catch (e) {} + } + if (req == null) { return false; } + } + + // Default to utf-8 for Text requests. + if (item.mimeType == null && createjs.RequestUtils.isText(item.type)) { + item.mimeType = "text/plain; charset=utf-8"; + } + + // IE9 doesn't support overrideMimeType(), so we need to check for it. + if (item.mimeType && req.overrideMimeType) { + req.overrideMimeType(item.mimeType); + } + + // Determine the XHR level + this._xhrLevel = (typeof req.responseType === "string") ? 2 : 1; + + var src = null; + if (item.method == createjs.AbstractLoader.GET) { + src = createjs.RequestUtils.buildPath(item.src, item.values); + } else { + src = item.src; + } + + // Open the request. Set cross-domain flags if it is supported (XHR level 1 only) + req.open(item.method || createjs.AbstractLoader.GET, src, true); + + if (crossdomain && req instanceof XMLHttpRequest && this._xhrLevel == 1) { + headers["Origin"] = location.origin; + } + + // To send data we need to set the Content-type header) + if (item.values && item.method == createjs.AbstractLoader.POST) { + headers["Content-Type"] = "application/x-www-form-urlencoded"; + } + + if (!crossdomain && !headers["X-Requested-With"]) { + headers["X-Requested-With"] = "XMLHttpRequest"; + } + + if (item.headers) { + for (var n in item.headers) { + headers[n] = item.headers[n]; + } + } + + for (n in headers) { + req.setRequestHeader(n, headers[n]) + } + + if (req instanceof XMLHttpRequest && item.withCredentials !== undefined) { + req.withCredentials = item.withCredentials; + } + + this._request = req; + + return true; + }; + + /** + * A request has completed (or failed or canceled), and needs to be disposed. + * @method _clean + * @private + */ + p._clean = function () { + clearTimeout(this._loadTimeout); + + this._request.removeEventListener("loadstart", this._handleLoadStartProxy); + this._request.removeEventListener("progress", this._handleProgressProxy); + this._request.removeEventListener("abort", this._handleAbortProxy); + this._request.removeEventListener("error",this._handleErrorProxy); + this._request.removeEventListener("timeout", this._handleTimeoutProxy); + this._request.removeEventListener("load", this._handleLoadProxy); + this._request.removeEventListener("readystatechange", this._handleReadyStateChangeProxy); + }; + + p.toString = function () { + return "[PreloadJS XHRRequest]"; + }; + + createjs.XHRRequest = createjs.promote(XHRRequest, "AbstractRequest"); + }()); //############################################################################## // SoundLoader.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - - // constructor - /** - * A loader for HTML audio files. PreloadJS can not load WebAudio files, as a WebAudio context is required, which - * should be created by either a library playing the sound (such as
SoundJS, or an - * external framework that handles audio playback. To load content that can be played by WebAudio, use the - * {{#crossLink "BinaryLoader"}}{{/crossLink}}, and handle the audio context decoding manually. - * @class SoundLoader - * @param {LoadItem|Object} loadItem - * @param {Boolean} preferXHR - * @extends AbstractMediaLoader - * @constructor - */ - function SoundLoader(loadItem, preferXHR) { - this.AbstractMediaLoader_constructor(loadItem, preferXHR, createjs.AbstractLoader.SOUND); - - // protected properties - if (createjs.RequestUtils.isAudioTag(loadItem)) { - this._tag = loadItem; - } else if (createjs.RequestUtils.isAudioTag(loadItem.src)) { - this._tag = loadItem; - } else if (createjs.RequestUtils.isAudioTag(loadItem.tag)) { - this._tag = createjs.RequestUtils.isAudioTag(loadItem) ? loadItem : loadItem.src; - } - - if (this._tag != null) { - this._preferXHR = false; - } - }; - - var p = createjs.extend(SoundLoader, createjs.AbstractMediaLoader); - var s = SoundLoader; - - // static methods - /** - * Determines if the loader can load a specific item. This loader can only load items that are of type - * {{#crossLink "AbstractLoader/SOUND:property"}}{{/crossLink}}. - * @method canLoadItem - * @param {LoadItem|Object} item The LoadItem that a LoadQueue is trying to load. - * @returns {Boolean} Whether the loader can load the item. - * @static - */ - s.canLoadItem = function (item) { - return item.type == createjs.AbstractLoader.SOUND; - }; - - // protected methods - p._createTag = function (src) { - var tag = document.createElement("audio"); - tag.autoplay = false; - tag.preload = "none"; - - //LM: Firefox fails when this the preload="none" for other tags, but it needs to be "none" to ensure PreloadJS works. - tag.src = src; - return tag; - }; - - createjs.SoundLoader = createjs.promote(SoundLoader, "AbstractMediaLoader"); - +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + + // constructor + /** + * A loader for HTML audio files. PreloadJS can not load WebAudio files, as a WebAudio context is required, which + * should be created by either a library playing the sound (such as SoundJS, or an + * external framework that handles audio playback. To load content that can be played by WebAudio, use the + * {{#crossLink "BinaryLoader"}}{{/crossLink}}, and handle the audio context decoding manually. + * @class SoundLoader + * @param {LoadItem|Object} loadItem + * @param {Boolean} preferXHR + * @extends AbstractMediaLoader + * @constructor + */ + function SoundLoader(loadItem, preferXHR) { + this.AbstractMediaLoader_constructor(loadItem, preferXHR, createjs.AbstractLoader.SOUND); + + // protected properties + if (createjs.RequestUtils.isAudioTag(loadItem)) { + this._tag = loadItem; + } else if (createjs.RequestUtils.isAudioTag(loadItem.src)) { + this._tag = loadItem; + } else if (createjs.RequestUtils.isAudioTag(loadItem.tag)) { + this._tag = createjs.RequestUtils.isAudioTag(loadItem) ? loadItem : loadItem.src; + } + + if (this._tag != null) { + this._preferXHR = false; + } + }; + + var p = createjs.extend(SoundLoader, createjs.AbstractMediaLoader); + var s = SoundLoader; + + // static methods + /** + * Determines if the loader can load a specific item. This loader can only load items that are of type + * {{#crossLink "AbstractLoader/SOUND:property"}}{{/crossLink}}. + * @method canLoadItem + * @param {LoadItem|Object} item The LoadItem that a LoadQueue is trying to load. + * @returns {Boolean} Whether the loader can load the item. + * @static + */ + s.canLoadItem = function (item) { + return item.type == createjs.AbstractLoader.SOUND; + }; + + // protected methods + p._createTag = function (src) { + var tag = document.createElement("audio"); + tag.autoplay = false; + tag.preload = "none"; + + //LM: Firefox fails when this the preload="none" for other tags, but it needs to be "none" to ensure PreloadJS works. + tag.src = src; + return tag; + }; + + createjs.SoundLoader = createjs.promote(SoundLoader, "AbstractMediaLoader"); + }()); //############################################################################## // AudioSprite.js //############################################################################## -// NOTE this is "Class" is purely to document audioSprite Setup and usage. - - -/** - * Note: AudioSprite is not a class, but its usage is easily lost in the documentation, so it has been called - * out here for quick reference. - * - * Audio sprites are much like CSS sprites or image sprite sheets: multiple audio assets grouped into a single file. - * Audio sprites work around limitations in certain browsers, where only a single sound can be loaded and played at a - * time. We recommend at least 300ms of silence between audio clips to deal with HTML audio tag inaccuracy, and to prevent - * accidentally playing bits of the neighbouring clips. - * - * Benefits of Audio Sprites: - *
    - *
  • More robust support for older browsers and devices that only allow a single audio instance, such as iOS 5.
  • - *
  • They provide a work around for the Internet Explorer 9 audio tag limit, which restricts how many different - * sounds that could be loaded at once.
  • - *
  • Faster loading by only requiring a single network request for several sounds, especially on mobile devices - * where the network round trip for each file can add significant latency.
  • - *
- * - * Drawbacks of Audio Sprites - *
    - *
  • No guarantee of smooth looping when using HTML or Flash audio. If you have a track that needs to loop - * smoothly and you are supporting non-web audio browsers, do not use audio sprites for that sound if you can avoid - * it.
  • - *
  • No guarantee that HTML audio will play back immediately, especially the first time. In some browsers - * (Chrome!), HTML audio will only load enough to play through at the current download speed – so we rely on the - * `canplaythrough` event to determine if the audio is loaded. Since audio sprites must jump ahead to play specific - * sounds, the audio may not yet have downloaded fully.
  • - *
  • Audio sprites share the same core source, so if you have a sprite with 5 sounds and are limited to 2 - * concurrently playing instances, you can only play 2 of the sounds at the same time.
  • - *
- * - *

Example

- * - * createjs.Sound.initializeDefaultPlugins(); - * var assetsPath = "./assets/"; - * var sounds = [{ - * src:"MyAudioSprite.ogg", data: { - * audioSprite: [ - * {id:"sound1", startTime:0, duration:500}, - * {id:"sound2", startTime:1000, duration:400}, - * {id:"sound3", startTime:1700, duration: 1000} - * ]} - * } - * ]; - * createjs.Sound.alternateExtensions = ["mp3"]; - * createjs.Sound.on("fileload", loadSound); - * createjs.Sound.registerSounds(sounds, assetsPath); - * // after load is complete - * createjs.Sound.play("sound2"); - * - * You can also create audio sprites on the fly by setting the startTime and duration when creating an new AbstractSoundInstance. - * - * createjs.Sound.play("MyAudioSprite", {startTime: 1000, duration: 400}); - * - * The excellent CreateJS community has created a tool to create audio sprites, available at - * https://github.com/tonistiigi/audiosprite, - * as well as a jsfiddle to convert the output - * to SoundJS format. - * - * @class AudioSprite - * @since 0.6.0 +// NOTE this is "Class" is purely to document audioSprite Setup and usage. + + +/** + * Note: AudioSprite is not a class, but its usage is easily lost in the documentation, so it has been called + * out here for quick reference. + * + * Audio sprites are much like CSS sprites or image sprite sheets: multiple audio assets grouped into a single file. + * Audio sprites work around limitations in certain browsers, where only a single sound can be loaded and played at a + * time. We recommend at least 300ms of silence between audio clips to deal with HTML audio tag inaccuracy, and to prevent + * accidentally playing bits of the neighbouring clips. + * + * Benefits of Audio Sprites: + *
    + *
  • More robust support for older browsers and devices that only allow a single audio instance, such as iOS 5.
  • + *
  • They provide a work around for the Internet Explorer 9 audio tag limit, which restricts how many different + * sounds that could be loaded at once.
  • + *
  • Faster loading by only requiring a single network request for several sounds, especially on mobile devices + * where the network round trip for each file can add significant latency.
  • + *
+ * + * Drawbacks of Audio Sprites + *
    + *
  • No guarantee of smooth looping when using HTML or Flash audio. If you have a track that needs to loop + * smoothly and you are supporting non-web audio browsers, do not use audio sprites for that sound if you can avoid + * it.
  • + *
  • No guarantee that HTML audio will play back immediately, especially the first time. In some browsers + * (Chrome!), HTML audio will only load enough to play through at the current download speed – so we rely on the + * `canplaythrough` event to determine if the audio is loaded. Since audio sprites must jump ahead to play specific + * sounds, the audio may not yet have downloaded fully.
  • + *
  • Audio sprites share the same core source, so if you have a sprite with 5 sounds and are limited to 2 + * concurrently playing instances, you can only play 2 of the sounds at the same time.
  • + *
+ * + *

Example

+ * + * createjs.Sound.initializeDefaultPlugins(); + * var assetsPath = "./assets/"; + * var sounds = [{ + * src:"MyAudioSprite.ogg", data: { + * audioSprite: [ + * {id:"sound1", startTime:0, duration:500}, + * {id:"sound2", startTime:1000, duration:400}, + * {id:"sound3", startTime:1700, duration: 1000} + * ]} + * } + * ]; + * createjs.Sound.alternateExtensions = ["mp3"]; + * createjs.Sound.on("fileload", loadSound); + * createjs.Sound.registerSounds(sounds, assetsPath); + * // after load is complete + * createjs.Sound.play("sound2"); + * + * You can also create audio sprites on the fly by setting the startTime and duration when creating an new AbstractSoundInstance. + * + * createjs.Sound.play("MyAudioSprite", {startTime: 1000, duration: 400}); + * + * The excellent CreateJS community has created a tool to create audio sprites, available at + * https://github.com/tonistiigi/audiosprite, + * as well as a jsfiddle to convert the output + * to SoundJS format. + * + * @class AudioSprite + * @since 0.6.0 */ //############################################################################## // PlayPropsConfig.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - /** - * A class to store the optional play properties passed in {{#crossLink "Sound/play"}}{{/crossLink}} and - * {{#crossLink "AbstractSoundInstance/play"}}{{/crossLink}} calls. - * - * Optional Play Properties Include: - *
    - *
  • interrupt - How to interrupt any currently playing instances of audio with the same source, - * if the maximum number of instances of the sound are already playing. Values are defined as INTERRUPT_TYPE - * constants on the Sound class, with the default defined by {{#crossLink "Sound/defaultInterruptBehavior:property"}}{{/crossLink}}.
  • - *
  • delay - The amount of time to delay the start of audio playback, in milliseconds.
  • - *
  • offset - The offset from the start of the audio to begin playback, in milliseconds.
  • - *
  • loop - How many times the audio loops when it reaches the end of playback. The default is 0 (no - * loops), and -1 can be used for infinite playback.
  • - *
  • volume - The volume of the sound, between 0 and 1. Note that the master volume is applied - * against the individual volume.
  • - *
  • pan - The left-right pan of the sound (if supported), between -1 (left) and 1 (right).
  • - *
  • startTime - To create an audio sprite (with duration), the initial offset to start playback and loop from, in milliseconds.
  • - *
  • duration - To create an audio sprite (with startTime), the amount of time to play the clip for, in milliseconds.
  • - *
- * - *

Example

- * - * var ppc = new createjs.PlayPropsConfig().set({interrupt: createjs.Sound.INTERRUPT_ANY, loop: -1, volume: 0.5}) - * createjs.Sound.play("mySound", ppc); - * mySoundInstance.play(ppc); - * - * @class PlayPropsConfig - * @constructor - * @since 0.6.1 - */ - // TODO think of a better name for this class - var PlayPropsConfig = function () { -// Public Properties - /** - * How to interrupt any currently playing instances of audio with the same source, - * if the maximum number of instances of the sound are already playing. Values are defined as - * INTERRUPT_TYPE constants on the Sound class, with the default defined by - * {{#crossLink "Sound/defaultInterruptBehavior:property"}}{{/crossLink}}. - * @property interrupt - * @type {string} - * @default null - */ - this.interrupt = null; - - /** - * The amount of time to delay the start of audio playback, in milliseconds. - * @property delay - * @type {Number} - * @default null - */ - this.delay = null; - - /** - * The offset from the start of the audio to begin playback, in milliseconds. - * @property offset - * @type {number} - * @default null - */ - this.offset = null; - - /** - * How many times the audio loops when it reaches the end of playback. The default is 0 (no - * loops), and -1 can be used for infinite playback. - * @property loop - * @type {number} - * @default null - */ - this.loop = null; - - /** - * The volume of the sound, between 0 and 1. Note that the master volume is applied - * against the individual volume. - * @property volume - * @type {number} - * @default null - */ - this.volume = null; - - /** - * The left-right pan of the sound (if supported), between -1 (left) and 1 (right). - * @property pan - * @type {number} - * @default null - */ - this.pan = null; - - /** - * Used to create an audio sprite (with duration), the initial offset to start playback and loop from, in milliseconds. - * @property startTime - * @type {number} - * @default null - */ - this.startTime = null; - - /** - * Used to create an audio sprite (with startTime), the amount of time to play the clip for, in milliseconds. - * @property duration - * @type {number} - * @default null - */ - this.duration = null; - }; - var p = PlayPropsConfig.prototype = {}; - var s = PlayPropsConfig; - - -// Static Methods - /** - * Creates a PlayPropsConfig from another PlayPropsConfig or an Object. - * - * @method create - * @param {PlayPropsConfig|Object} value The play properties - * @returns {PlayPropsConfig} - * @static - */ - s.create = function (value) { - if (value instanceof s || value instanceof Object) { - var ppc = new createjs.PlayPropsConfig(); - ppc.set(value); - return ppc; - } else { - throw new Error("Type not recognized."); - } - }; - -// Public Methods - /** - * Provides a chainable shortcut method for setting a number of properties on the instance. - * - *

Example

- * - * var PlayPropsConfig = new createjs.PlayPropsConfig().set({loop:-1, volume:0.7}); - * - * @method set - * @param {Object} props A generic object containing properties to copy to the PlayPropsConfig instance. - * @return {PlayPropsConfig} Returns the instance the method is called on (useful for chaining calls.) - */ - p.set = function(props) { - for (var n in props) { this[n] = props[n]; } - return this; - }; - - p.toString = function() { - return "[PlayPropsConfig]"; - }; - - createjs.PlayPropsConfig = s; - +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + /** + * A class to store the optional play properties passed in {{#crossLink "Sound/play"}}{{/crossLink}} and + * {{#crossLink "AbstractSoundInstance/play"}}{{/crossLink}} calls. + * + * Optional Play Properties Include: + *
    + *
  • interrupt - How to interrupt any currently playing instances of audio with the same source, + * if the maximum number of instances of the sound are already playing. Values are defined as INTERRUPT_TYPE + * constants on the Sound class, with the default defined by {{#crossLink "Sound/defaultInterruptBehavior:property"}}{{/crossLink}}.
  • + *
  • delay - The amount of time to delay the start of audio playback, in milliseconds.
  • + *
  • offset - The offset from the start of the audio to begin playback, in milliseconds.
  • + *
  • loop - How many times the audio loops when it reaches the end of playback. The default is 0 (no + * loops), and -1 can be used for infinite playback.
  • + *
  • volume - The volume of the sound, between 0 and 1. Note that the master volume is applied + * against the individual volume.
  • + *
  • pan - The left-right pan of the sound (if supported), between -1 (left) and 1 (right).
  • + *
  • startTime - To create an audio sprite (with duration), the initial offset to start playback and loop from, in milliseconds.
  • + *
  • duration - To create an audio sprite (with startTime), the amount of time to play the clip for, in milliseconds.
  • + *
+ * + *

Example

+ * + * var ppc = new createjs.PlayPropsConfig().set({interrupt: createjs.Sound.INTERRUPT_ANY, loop: -1, volume: 0.5}) + * createjs.Sound.play("mySound", ppc); + * mySoundInstance.play(ppc); + * + * @class PlayPropsConfig + * @constructor + * @since 0.6.1 + */ + // TODO think of a better name for this class + var PlayPropsConfig = function () { +// Public Properties + /** + * How to interrupt any currently playing instances of audio with the same source, + * if the maximum number of instances of the sound are already playing. Values are defined as + * INTERRUPT_TYPE constants on the Sound class, with the default defined by + * {{#crossLink "Sound/defaultInterruptBehavior:property"}}{{/crossLink}}. + * @property interrupt + * @type {string} + * @default null + */ + this.interrupt = null; + + /** + * The amount of time to delay the start of audio playback, in milliseconds. + * @property delay + * @type {Number} + * @default null + */ + this.delay = null; + + /** + * The offset from the start of the audio to begin playback, in milliseconds. + * @property offset + * @type {number} + * @default null + */ + this.offset = null; + + /** + * How many times the audio loops when it reaches the end of playback. The default is 0 (no + * loops), and -1 can be used for infinite playback. + * @property loop + * @type {number} + * @default null + */ + this.loop = null; + + /** + * The volume of the sound, between 0 and 1. Note that the master volume is applied + * against the individual volume. + * @property volume + * @type {number} + * @default null + */ + this.volume = null; + + /** + * The left-right pan of the sound (if supported), between -1 (left) and 1 (right). + * @property pan + * @type {number} + * @default null + */ + this.pan = null; + + /** + * Used to create an audio sprite (with duration), the initial offset to start playback and loop from, in milliseconds. + * @property startTime + * @type {number} + * @default null + */ + this.startTime = null; + + /** + * Used to create an audio sprite (with startTime), the amount of time to play the clip for, in milliseconds. + * @property duration + * @type {number} + * @default null + */ + this.duration = null; + }; + var p = PlayPropsConfig.prototype = {}; + var s = PlayPropsConfig; + + +// Static Methods + /** + * Creates a PlayPropsConfig from another PlayPropsConfig or an Object. + * + * @method create + * @param {PlayPropsConfig|Object} value The play properties + * @returns {PlayPropsConfig} + * @static + */ + s.create = function (value) { + if (value instanceof s || value instanceof Object) { + var ppc = new createjs.PlayPropsConfig(); + ppc.set(value); + return ppc; + } else { + throw new Error("Type not recognized."); + } + }; + +// Public Methods + /** + * Provides a chainable shortcut method for setting a number of properties on the instance. + * + *

Example

+ * + * var PlayPropsConfig = new createjs.PlayPropsConfig().set({loop:-1, volume:0.7}); + * + * @method set + * @param {Object} props A generic object containing properties to copy to the PlayPropsConfig instance. + * @return {PlayPropsConfig} Returns the instance the method is called on (useful for chaining calls.) + */ + p.set = function(props) { + for (var n in props) { this[n] = props[n]; } + return this; + }; + + p.toString = function() { + return "[PlayPropsConfig]"; + }; + + createjs.PlayPropsConfig = s; + }()); //############################################################################## // Sound.js //############################################################################## -this.createjs = this.createjs || {}; - - - -(function () { - "use strict"; - - /** - * The Sound class is the public API for creating sounds, controlling the overall sound levels, and managing plugins. - * All Sound APIs on this class are static. - * - * Registering and Preloading
- * Before you can play a sound, it must be registered. You can do this with {{#crossLink "Sound/registerSound"}}{{/crossLink}}, - * or register multiple sounds using {{#crossLink "Sound/registerSounds"}}{{/crossLink}}. If you don't register a - * sound prior to attempting to play it using {{#crossLink "Sound/play"}}{{/crossLink}} or create it using {{#crossLink "Sound/createInstance"}}{{/crossLink}}, - * the sound source will be automatically registered but playback will fail as the source will not be ready. If you use - * PreloadJS, registration is handled for you when the sound is - * preloaded. It is recommended to preload sounds either internally using the register functions or externally using - * PreloadJS so they are ready when you want to use them. - * - * Playback
- * To play a sound once it's been registered and preloaded, use the {{#crossLink "Sound/play"}}{{/crossLink}} method. - * This method returns a {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} which can be paused, resumed, muted, etc. - * Please see the {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} documentation for more on the instance control APIs. - * - * Plugins
- * By default, the {{#crossLink "WebAudioPlugin"}}{{/crossLink}} or the {{#crossLink "HTMLAudioPlugin"}}{{/crossLink}} - * are used (when available), although developers can change plugin priority or add new plugins (such as the - * provided {{#crossLink "FlashAudioPlugin"}}{{/crossLink}}). Please see the {{#crossLink "Sound"}}{{/crossLink}} API - * methods for more on the playback and plugin APIs. To install plugins, or specify a different plugin order, see - * {{#crossLink "Sound/installPlugins"}}{{/crossLink}}. - * - *

Example

- * - * createjs.FlashAudioPlugin.swfPath = "../src/soundjs/flashaudio"; - * createjs.Sound.registerPlugins([createjs.WebAudioPlugin, createjs.FlashAudioPlugin]); - * createjs.Sound.alternateExtensions = ["mp3"]; - * createjs.Sound.on("fileload", createjs.proxy(this.loadHandler, (this))); - * createjs.Sound.registerSound("path/to/mySound.ogg", "sound"); - * function loadHandler(event) { - * // This is fired for each sound that is registered. - * var instance = createjs.Sound.play("sound"); // play using id. Could also use full source path or event.src. - * instance.on("complete", createjs.proxy(this.handleComplete, this)); - * instance.volume = 0.5; - * } - * - * The maximum number of concurrently playing instances of the same sound can be specified in the "data" argument - * of {{#crossLink "Sound/registerSound"}}{{/crossLink}}. Note that if not specified, the active plugin will apply - * a default limit. Currently HTMLAudioPlugin sets a default limit of 2, while WebAudioPlugin and FlashAudioPlugin set a - * default limit of 100. - * - * createjs.Sound.registerSound("sound.mp3", "soundId", 4); - * - * Sound can be used as a plugin with PreloadJS to help preload audio properly. Audio preloaded with PreloadJS is - * automatically registered with the Sound class. When audio is not preloaded, Sound will do an automatic internal - * load. As a result, it may fail to play the first time play is called if the audio is not finished loading. Use the - * {{#crossLink "Sound/fileload"}}{{/crossLink}} event to determine when a sound has finished internally preloading. - * It is recommended that all audio is preloaded before it is played. - * - * var queue = new createjs.LoadQueue(); - * queue.installPlugin(createjs.Sound); - * - * Audio Sprites
- * SoundJS has added support for {{#crossLink "AudioSprite"}}{{/crossLink}}, available as of version 0.6.0. - * For those unfamiliar with audio sprites, they are much like CSS sprites or sprite sheets: multiple audio assets - * grouped into a single file. - * - *

Example

- * - * var assetsPath = "./assets/"; - * var sounds = [{ - * src:"MyAudioSprite.ogg", data: { - * audioSprite: [ - * {id:"sound1", startTime:0, duration:500}, - * {id:"sound2", startTime:1000, duration:400}, - * {id:"sound3", startTime:1700, duration: 1000} - * ]} - * } - * ]; - * createjs.Sound.alternateExtensions = ["mp3"]; - * createjs.Sound.on("fileload", loadSound); - * createjs.Sound.registerSounds(sounds, assetsPath); - * // after load is complete - * createjs.Sound.play("sound2"); - * - * Mobile Safe Approach
- * Mobile devices require sounds to be played inside of a user initiated event (touch/click) in varying degrees. - * As of SoundJS 0.4.1, you can launch a site inside of a user initiated event and have audio playback work. To - * enable as broadly as possible, the site needs to setup the Sound plugin in its initialization (for example via - * createjs.Sound.initializeDefaultPlugins();), and all sounds need to be played in the scope of the - * application. See the MobileSafe demo for a working example. - * - *

Example

- * - * document.getElementById("status").addEventListener("click", handleTouch, false); // works on Android and iPad - * function handleTouch(event) { - * document.getElementById("status").removeEventListener("click", handleTouch, false); // remove the listener - * var thisApp = new myNameSpace.MyApp(); // launch the app - * } - * - * Loading Alternate Paths and Extensionless Files
- * SoundJS supports loading alternate paths and extensionless files by passing an object for src that has various paths - * with property labels matching the extension. These labels are how SoundJS determines if the browser will support the sound. - * Priority is determined by the property order (first property is tried first). This is supported by both internal loading - * and loading with PreloadJS. - * - * Note an id is required for playback. - * - *

Example

- * - * var sounds = {path:"./audioPath/", - * manifest: [ - * {id: "cool", src: {mp3:"mp3/awesome.mp3", ogg:"noExtensionOggFile"}} - * ]}; - * - * createjs.Sound.alternateExtensions = ["mp3"]; - * createjs.Sound.addEventListener("fileload", handleLoad); - * createjs.Sound.registerSounds(sounds); - * - *

Known Browser and OS issues

- * IE 9 HTML Audio limitations
- *
  • There is a delay in applying volume changes to tags that occurs once playback is started. So if you have - * muted all sounds, they will all play during this delay until the mute applies internally. This happens regardless of - * when or how you apply the volume change, as the tag seems to need to play to apply it.
  • - *
  • MP3 encoding will not always work for audio tags, particularly in Internet Explorer. We've found default - * encoding with 64kbps works.
  • - *
  • Occasionally very short samples will get cut off.
  • - *
  • There is a limit to how many audio tags you can load and play at once, which appears to be determined by - * hardware and browser settings. See {{#crossLink "HTMLAudioPlugin.MAX_INSTANCES"}}{{/crossLink}} for a safe estimate.
- * - * Firefox 25 Web Audio limitations - *
  • mp3 audio files do not load properly on all windows machines, reported - * here.
    - * For this reason it is recommended to pass another FF supported type (ie ogg) first until this bug is resolved, if possible.
- - * Safari limitations
- *
  • Safari requires Quicktime to be installed for audio playback.
- * - * iOS 6 Web Audio limitations
- *
  • Sound is initially muted and will only unmute through play being called inside a user initiated event - * (touch/click).
  • - *
  • A bug exists that will distort un-cached web audio when a video element is present in the DOM that has audio at a different sampleRate.
  • - *
- * - * Android HTML Audio limitations
- *
  • We have no control over audio volume. Only the user can set volume on their device.
  • - *
  • We can only play audio inside a user event (touch/click). This currently means you cannot loop sound or use - * a delay.
- * - * Web Audio and PreloadJS
- *
  • Web Audio must be loaded through XHR, therefore when used with PreloadJS tag loading is not possible. This means that tag loading cannot - * be used to avoid cross domain issues if WebAudioPlugin is used
    • - * - * @class Sound - * @static - * @uses EventDispatcher - */ - function Sound() { - throw "Sound cannot be instantiated"; - } - - var s = Sound; - - -// Static Properties - /** - * The interrupt value to interrupt any currently playing instance with the same source, if the maximum number of - * instances of the sound are already playing. - * @property INTERRUPT_ANY - * @type {String} - * @default any - * @static - */ - s.INTERRUPT_ANY = "any"; - - /** - * The interrupt value to interrupt the earliest currently playing instance with the same source that progressed the - * least distance in the audio track, if the maximum number of instances of the sound are already playing. - * @property INTERRUPT_EARLY - * @type {String} - * @default early - * @static - */ - s.INTERRUPT_EARLY = "early"; - - /** - * The interrupt value to interrupt the currently playing instance with the same source that progressed the most - * distance in the audio track, if the maximum number of instances of the sound are already playing. - * @property INTERRUPT_LATE - * @type {String} - * @default late - * @static - */ - s.INTERRUPT_LATE = "late"; - - /** - * The interrupt value to not interrupt any currently playing instances with the same source, if the maximum number of - * instances of the sound are already playing. - * @property INTERRUPT_NONE - * @type {String} - * @default none - * @static - */ - s.INTERRUPT_NONE = "none"; - - /** - * Defines the playState of an instance that is still initializing. - * @property PLAY_INITED - * @type {String} - * @default playInited - * @static - */ - s.PLAY_INITED = "playInited"; - - /** - * Defines the playState of an instance that is currently playing or paused. - * @property PLAY_SUCCEEDED - * @type {String} - * @default playSucceeded - * @static - */ - s.PLAY_SUCCEEDED = "playSucceeded"; - - /** - * Defines the playState of an instance that was interrupted by another instance. - * @property PLAY_INTERRUPTED - * @type {String} - * @default playInterrupted - * @static - */ - s.PLAY_INTERRUPTED = "playInterrupted"; - - /** - * Defines the playState of an instance that completed playback. - * @property PLAY_FINISHED - * @type {String} - * @default playFinished - * @static - */ - s.PLAY_FINISHED = "playFinished"; - - /** - * Defines the playState of an instance that failed to play. This is usually caused by a lack of available channels - * when the interrupt mode was "INTERRUPT_NONE", the playback stalled, or the sound could not be found. - * @property PLAY_FAILED - * @type {String} - * @default playFailed - * @static - */ - s.PLAY_FAILED = "playFailed"; - - /** - * A list of the default supported extensions that Sound will try to play. Plugins will check if the browser - * can play these types, so modifying this list before a plugin is initialized will allow the plugins to try to - * support additional media types. - * - * NOTE this does not currently work for {{#crossLink "FlashAudioPlugin"}}{{/crossLink}}. - * - * More details on file formats can be found at http://en.wikipedia.org/wiki/Audio_file_format.
      - * A very detailed list of file formats can be found at http://www.fileinfo.com/filetypes/audio. - * @property SUPPORTED_EXTENSIONS - * @type {Array[String]} - * @default ["mp3", "ogg", "opus", "mpeg", "wav", "m4a", "mp4", "aiff", "wma", "mid"] - * @since 0.4.0 - * @static - */ - s.SUPPORTED_EXTENSIONS = ["mp3", "ogg", "opus", "mpeg", "wav", "m4a", "mp4", "aiff", "wma", "mid"]; - - /** - * Some extensions use another type of extension support to play (one of them is a codex). This allows you to map - * that support so plugins can accurately determine if an extension is supported. Adding to this list can help - * plugins determine more accurately if an extension is supported. - * - * A useful list of extensions for each format can be found at http://html5doctor.com/html5-audio-the-state-of-play/. - * @property EXTENSION_MAP - * @type {Object} - * @since 0.4.0 - * @default {m4a:"mp4"} - * @static - */ - s.EXTENSION_MAP = { - m4a:"mp4" - }; - - /** - * The RegExp pattern used to parse file URIs. This supports simple file names, as well as full domain URIs with - * query strings. The resulting match is: protocol:$1 domain:$2 path:$3 file:$4 extension:$5 query:$6. - * @property FILE_PATTERN - * @type {RegExp} - * @static - * @protected - */ - s.FILE_PATTERN = /^(?:(\w+:)\/{2}(\w+(?:\.\w+)*\/?))?([/.]*?(?:[^?]+)?\/)?((?:[^/?]+)\.(\w+))(?:\?(\S+)?)?$/; - - -// Class Public properties - /** - * Determines the default behavior for interrupting other currently playing instances with the same source, if the - * maximum number of instances of the sound are already playing. Currently the default is {{#crossLink "Sound/INTERRUPT_NONE:property"}}{{/crossLink}} - * but this can be set and will change playback behavior accordingly. This is only used when {{#crossLink "Sound/play"}}{{/crossLink}} - * is called without passing a value for interrupt. - * @property defaultInterruptBehavior - * @type {String} - * @default Sound.INTERRUPT_NONE, or "none" - * @static - * @since 0.4.0 - */ - s.defaultInterruptBehavior = s.INTERRUPT_NONE; // OJR does s.INTERRUPT_ANY make more sense as default? Needs game dev testing to see which case makes more sense. - - /** - * An array of extensions to attempt to use when loading sound, if the default is unsupported by the active plugin. - * These are applied in order, so if you try to Load Thunder.ogg in a browser that does not support ogg, and your - * extensions array is ["mp3", "m4a", "wav"] it will check mp3 support, then m4a, then wav. The audio files need - * to exist in the same location, as only the extension is altered. - * - * Note that regardless of which file is loaded, you can call {{#crossLink "Sound/createInstance"}}{{/crossLink}} - * and {{#crossLink "Sound/play"}}{{/crossLink}} using the same id or full source path passed for loading. - * - *

      Example

      - * - * var sounds = [ - * {src:"myPath/mySound.ogg", id:"example"}, - * ]; - * createjs.Sound.alternateExtensions = ["mp3"]; // now if ogg is not supported, SoundJS will try asset0.mp3 - * createjs.Sound.on("fileload", handleLoad); // call handleLoad when each sound loads - * createjs.Sound.registerSounds(sounds, assetPath); - * // ... - * createjs.Sound.play("myPath/mySound.ogg"); // works regardless of what extension is supported. Note calling with ID is a better approach - * - * @property alternateExtensions - * @type {Array} - * @since 0.5.2 - * @static - */ - s.alternateExtensions = []; - - /** - * The currently active plugin. If this is null, then no plugin could be initialized. If no plugin was specified, - * Sound attempts to apply the default plugins: {{#crossLink "WebAudioPlugin"}}{{/crossLink}}, followed by - * {{#crossLink "HTMLAudioPlugin"}}{{/crossLink}}. - * @property activePlugin - * @type {Object} - * @static - */ - s.activePlugin = null; - - -// class getter / setter properties - /** - * Set the master volume of Sound. The master volume is multiplied against each sound's individual volume. For - * example, if master volume is 0.5 and a sound's volume is 0.5, the resulting volume is 0.25. To set individual - * sound volume, use AbstractSoundInstance {{#crossLink "AbstractSoundInstance/volume:property"}}{{/crossLink}} instead. - * - *

      Example

      - * - * createjs.Sound.volume = 0.5; - * - * - * @property volume - * @type {Number} - * @default 1 - * @since 0.6.1 - */ - s._masterVolume = 1; - Object.defineProperty(s, "volume", { - get: function () {return this._masterVolume;}, - set: function (value) { - if (Number(value) == null) {return false;} - value = Math.max(0, Math.min(1, value)); - s._masterVolume = value; - if (!this.activePlugin || !this.activePlugin.setVolume || !this.activePlugin.setVolume(value)) { - var instances = this._instances; - for (var i = 0, l = instances.length; i < l; i++) { - instances[i].setMasterVolume(value); - } - } - } - }); - - /** - * Mute/Unmute all audio. Note that muted audio still plays at 0 volume. This global mute value is maintained - * separately and when set will override, but not change the mute property of individual instances. To mute an individual - * instance, use AbstractSoundInstance {{#crossLink "AbstractSoundInstance/muted:property"}}{{/crossLink}} instead. - * - *

      Example

      - * - * createjs.Sound.muted = true; - * - * - * @property muted - * @type {Boolean} - * @default false - * @since 0.6.1 - */ - s._masterMute = false; - // OJR references to the methods were not working, so the code had to be duplicated here - Object.defineProperty(s, "muted", { - get: function () {return this._masterMute;}, - set: function (value) { - if (value == null) {return false;} - - this._masterMute = value; - if (!this.activePlugin || !this.activePlugin.setMute || !this.activePlugin.setMute(value)) { - var instances = this._instances; - for (var i = 0, l = instances.length; i < l; i++) { - instances[i].setMasterMute(value); - } - } - return true; - } - }); - - /** - * Get the active plugins capabilities, which help determine if a plugin can be used in the current environment, - * or if the plugin supports a specific feature. Capabilities include: - *
        - *
      • panning: If the plugin can pan audio from left to right
      • - *
      • volume; If the plugin can control audio volume.
      • - *
      • tracks: The maximum number of audio tracks that can be played back at a time. This will be -1 - * if there is no known limit.
      • - *
        An entry for each file type in {{#crossLink "Sound/SUPPORTED_EXTENSIONS:property"}}{{/crossLink}}: - *
      • mp3: If MP3 audio is supported.
      • - *
      • ogg: If OGG audio is supported.
      • - *
      • wav: If WAV audio is supported.
      • - *
      • mpeg: If MPEG audio is supported.
      • - *
      • m4a: If M4A audio is supported.
      • - *
      • mp4: If MP4 audio is supported.
      • - *
      • aiff: If aiff audio is supported.
      • - *
      • wma: If wma audio is supported.
      • - *
      • mid: If mid audio is supported.
      • - *
      - * - * You can get a specific capability of the active plugin using standard object notation - * - *

      Example

      - * - * var mp3 = createjs.Sound.capabilities.mp3; - * - * Note this property is read only. - * - * @property capabilities - * @type {Object} - * @static - * @readOnly - * @since 0.6.1 - */ - Object.defineProperty(s, "capabilities", { - get: function () { - if (s.activePlugin == null) {return null;} - return s.activePlugin._capabilities; - }, - set: function (value) { return false;} - }); - - -// Class Private properties - /** - * Determines if the plugins have been registered. If false, the first call to play() will instantiate the default - * plugins ({{#crossLink "WebAudioPlugin"}}{{/crossLink}}, followed by {{#crossLink "HTMLAudioPlugin"}}{{/crossLink}}). - * If plugins have been registered, but none are applicable, then sound playback will fail. - * @property _pluginsRegistered - * @type {Boolean} - * @default false - * @static - * @protected - */ - s._pluginsRegistered = false; - - /** - * Used internally to assign unique IDs to each AbstractSoundInstance. - * @property _lastID - * @type {Number} - * @static - * @protected - */ - s._lastID = 0; - - /** - * An array containing all currently playing instances. This allows Sound to control the volume, mute, and playback of - * all instances when using static APIs like {{#crossLink "Sound/stop"}}{{/crossLink}} and {{#crossLink "Sound/setVolume"}}{{/crossLink}}. - * When an instance has finished playback, it gets removed via the {{#crossLink "Sound/finishedPlaying"}}{{/crossLink}} - * method. If the user replays an instance, it gets added back in via the {{#crossLink "Sound/_beginPlaying"}}{{/crossLink}} - * method. - * @property _instances - * @type {Array} - * @protected - * @static - */ - s._instances = []; - - /** - * An object hash storing objects with sound sources, startTime, and duration via there corresponding ID. - * @property _idHash - * @type {Object} - * @protected - * @static - */ - s._idHash = {}; - - /** - * An object hash that stores preloading sound sources via the parsed source that is passed to the plugin. Contains the - * source, id, and data that was passed in by the user. Parsed sources can contain multiple instances of source, id, - * and data. - * @property _preloadHash - * @type {Object} - * @protected - * @static - */ - s._preloadHash = {}; - - /** - * An object hash storing {{#crossLink "PlayPropsConfig"}}{{/crossLink}} via the parsed source that is passed as defaultPlayProps in - * {{#crossLink "Sound/registerSound"}}{{/crossLink}} and {{#crossLink "Sound/registerSounds"}}{{/crossLink}}. - * @property _defaultPlayPropsHash - * @type {Object} - * @protected - * @static - * @since 0.6.1 - */ - s._defaultPlayPropsHash = {}; - - -// EventDispatcher methods: - s.addEventListener = null; - s.removeEventListener = null; - s.removeAllEventListeners = null; - s.dispatchEvent = null; - s.hasEventListener = null; - s._listeners = null; - - createjs.EventDispatcher.initialize(s); // inject EventDispatcher methods. - - -// Events - /** - * This event is fired when a file finishes loading internally. This event is fired for each loaded sound, - * so any handler methods should look up the event.src to handle a particular sound. - * @event fileload - * @param {Object} target The object that dispatched the event. - * @param {String} type The event type. - * @param {String} src The source of the sound that was loaded. - * @param {String} [id] The id passed in when the sound was registered. If one was not provided, it will be null. - * @param {Number|Object} [data] Any additional data associated with the item. If not provided, it will be undefined. - * @since 0.4.1 - */ - - /** - * This event is fired when a file fails loading internally. This event is fired for each loaded sound, - * so any handler methods should look up the event.src to handle a particular sound. - * @event fileerror - * @param {Object} target The object that dispatched the event. - * @param {String} type The event type. - * @param {String} src The source of the sound that was loaded. - * @param {String} [id] The id passed in when the sound was registered. If one was not provided, it will be null. - * @param {Number|Object} [data] Any additional data associated with the item. If not provided, it will be undefined. - * @since 0.6.0 - */ - - -// Class Public Methods - /** - * Get the preload rules to allow Sound to be used as a plugin by PreloadJS. - * Any load calls that have the matching type or extension will fire the callback method, and use the resulting - * object, which is potentially modified by Sound. This helps when determining the correct path, as well as - * registering the audio instance(s) with Sound. This method should not be called, except by PreloadJS. - * @method getPreloadHandlers - * @return {Object} An object containing: - *
      • callback: A preload callback that is fired when a file is added to PreloadJS, which provides - * Sound a mechanism to modify the load parameters, select the correct file format, register the sound, etc.
      • - *
      • types: A list of file types that are supported by Sound (currently supports "sound").
      • - *
      • extensions: A list of file extensions that are supported by Sound (see {{#crossLink "Sound/SUPPORTED_EXTENSIONS:property"}}{{/crossLink}}).
      - * @static - * @protected - */ - s.getPreloadHandlers = function () { - return { - callback:createjs.proxy(s.initLoad, s), - types:["sound"], - extensions:s.SUPPORTED_EXTENSIONS - }; - }; - - /** - * Used to dispatch fileload events from internal loading. - * @method _handleLoadComplete - * @param event A loader event. - * @protected - * @static - * @since 0.6.0 - */ - s._handleLoadComplete = function(event) { - var src = event.target.getItem().src; - if (!s._preloadHash[src]) {return;} - - for (var i = 0, l = s._preloadHash[src].length; i < l; i++) { - var item = s._preloadHash[src][i]; - s._preloadHash[src][i] = true; - - if (!s.hasEventListener("fileload")) { continue; } - - var event = new createjs.Event("fileload"); - event.src = item.src; - event.id = item.id; - event.data = item.data; - event.sprite = item.sprite; - - s.dispatchEvent(event); - } - }; - - /** - * Used to dispatch error events from internal preloading. - * @param event - * @protected - * @since 0.6.0 - * @static - */ - s._handleLoadError = function(event) { - var src = event.target.getItem().src; - if (!s._preloadHash[src]) {return;} - - for (var i = 0, l = s._preloadHash[src].length; i < l; i++) { - var item = s._preloadHash[src][i]; - s._preloadHash[src][i] = false; - - if (!s.hasEventListener("fileerror")) { continue; } - - var event = new createjs.Event("fileerror"); - event.src = item.src; - event.id = item.id; - event.data = item.data; - event.sprite = item.sprite; - - s.dispatchEvent(event); - } - }; - - /** - * Used by {{#crossLink "Sound/registerPlugins"}}{{/crossLink}} to register a Sound plugin. - * - * @method _registerPlugin - * @param {Object} plugin The plugin class to install. - * @return {Boolean} Whether the plugin was successfully initialized. - * @static - * @private - */ - s._registerPlugin = function (plugin) { - // Note: Each plugin is passed in as a class reference, but we store the activePlugin as an instance - if (plugin.isSupported()) { - s.activePlugin = new plugin(); - return true; - } - return false; - }; - - /** - * Register a list of Sound plugins, in order of precedence. To register a single plugin, pass a single element in the array. - * - *

      Example

      - * - * createjs.FlashAudioPlugin.swfPath = "../src/soundjs/flashaudio/"; - * createjs.Sound.registerPlugins([createjs.WebAudioPlugin, createjs.HTMLAudioPlugin, createjs.FlashAudioPlugin]); - * - * @method registerPlugins - * @param {Array} plugins An array of plugins classes to install. - * @return {Boolean} Whether a plugin was successfully initialized. - * @static - */ - s.registerPlugins = function (plugins) { - s._pluginsRegistered = true; - for (var i = 0, l = plugins.length; i < l; i++) { - if (s._registerPlugin(plugins[i])) { - return true; - } - } - return false; - }; - - /** - * Initialize the default plugins. This method is automatically called when any audio is played or registered before - * the user has manually registered plugins, and enables Sound to work without manual plugin setup. Currently, the - * default plugins are {{#crossLink "WebAudioPlugin"}}{{/crossLink}} followed by {{#crossLink "HTMLAudioPlugin"}}{{/crossLink}}. - * - *

      Example

      - * - * if (!createjs.initializeDefaultPlugins()) { return; } - * - * @method initializeDefaultPlugins - * @returns {Boolean} True if a plugin was initialized, false otherwise. - * @since 0.4.0 - * @static - */ - s.initializeDefaultPlugins = function () { - if (s.activePlugin != null) {return true;} - if (s._pluginsRegistered) {return false;} - if (s.registerPlugins([createjs.WebAudioPlugin, createjs.HTMLAudioPlugin])) {return true;} - return false; - }; - - /** - * Determines if Sound has been initialized, and a plugin has been activated. - * - *

      Example

      - * This example sets up a Flash fallback, but only if there is no plugin specified yet. - * - * if (!createjs.Sound.isReady()) { - * createjs.FlashAudioPlugin.swfPath = "../src/soundjs/flashaudio/"; - * createjs.Sound.registerPlugins([createjs.WebAudioPlugin, createjs.HTMLAudioPlugin, createjs.FlashAudioPlugin]); - * } - * - * @method isReady - * @return {Boolean} If Sound has initialized a plugin. - * @static - */ - s.isReady = function () { - return (s.activePlugin != null); - }; - - /** - * Deprecated, please use {{#crossLink "Sound/capabilities:property"}}{{/crossLink}} instead. - * - * @method getCapabilities - * @return {Object} An object containing the capabilities of the active plugin. - * @static - * @deprecated - */ - s.getCapabilities = function () { - if (s.activePlugin == null) {return null;} - return s.activePlugin._capabilities; - }; - - /** - * Deprecated, please use {{#crossLink "Sound/capabilities:property"}}{{/crossLink}} instead. - * - * @method getCapability - * @param {String} key The capability to retrieve - * @return {Number|Boolean} The value of the capability. - * @static - * @see getCapabilities - * @deprecated - */ - s.getCapability = function (key) { - if (s.activePlugin == null) {return null;} - return s.activePlugin._capabilities[key]; - }; - - /** - * Process manifest items from PreloadJS. This method is intended - * for usage by a plugin, and not for direct interaction. - * @method initLoad - * @param {Object} src The object to load. - * @return {Object|AbstractLoader} An instance of AbstractLoader. - * @protected - * @static - */ - s.initLoad = function (loadItem) { - return s._registerSound(loadItem); - }; - - /** - * Internal method for loading sounds. This should not be called directly. - * - * @method _registerSound - * @param {Object} src The object to load, containing src property and optionally containing id and data. - * @return {Object} An object with the modified values that were passed in, which defines the sound. - * Returns false if the source cannot be parsed or no plugins can be initialized. - * Returns true if the source is already loaded. - * @static - * @private - * @since 0.6.0 - */ - - s._registerSound = function (loadItem) { - if (!s.initializeDefaultPlugins()) {return false;} - - var details; - if (loadItem.src instanceof Object) { - details = s._parseSrc(loadItem.src); - details.src = loadItem.path + details.src; - } else { - details = s._parsePath(loadItem.src); - } - if (details == null) {return false;} - loadItem.src = details.src; - loadItem.type = "sound"; - - var data = loadItem.data; - var numChannels = null; - if (data != null) { - if (!isNaN(data.channels)) { - numChannels = parseInt(data.channels); - } else if (!isNaN(data)) { - numChannels = parseInt(data); - } - - if(data.audioSprite) { - var sp; - for(var i = data.audioSprite.length; i--; ) { - sp = data.audioSprite[i]; - s._idHash[sp.id] = {src: loadItem.src, startTime: parseInt(sp.startTime), duration: parseInt(sp.duration)}; - - if (sp.defaultPlayProps) { - s._defaultPlayPropsHash[sp.id] = createjs.PlayPropsConfig.create(sp.defaultPlayProps); - } - } - } - } - if (loadItem.id != null) {s._idHash[loadItem.id] = {src: loadItem.src}}; - var loader = s.activePlugin.register(loadItem); - - SoundChannel.create(loadItem.src, numChannels); - - // return the number of instances to the user. This will also be returned in the load event. - if (data == null || !isNaN(data)) { - loadItem.data = numChannels || SoundChannel.maxPerChannel(); - } else { - loadItem.data.channels = numChannels || SoundChannel.maxPerChannel(); - } - - if (loader.type) {loadItem.type = loader.type;} - - if (loadItem.defaultPlayProps) { - s._defaultPlayPropsHash[loadItem.src] = createjs.PlayPropsConfig.create(loadItem.defaultPlayProps); - } - return loader; - }; - - /** - * Register an audio file for loading and future playback in Sound. This is automatically called when using - * PreloadJS. It is recommended to register all sounds that - * need to be played back in order to properly prepare and preload them. Sound does internal preloading when required. - * - *

      Example

      - * - * createjs.Sound.alternateExtensions = ["mp3"]; - * createjs.Sound.on("fileload", handleLoad); // add an event listener for when load is completed - * createjs.Sound.registerSound("myAudioPath/mySound.ogg", "myID", 3); - * createjs.Sound.registerSound({ogg:"path1/mySound.ogg", mp3:"path2/mySoundNoExtension"}, "myID", 3); - * - * - * @method registerSound - * @param {String | Object} src The source or an Object with a "src" property or an Object with multiple extension labeled src properties. - * @param {String} [id] An id specified by the user to play the sound later. Note id is required for when src is multiple extension labeled src properties. - * @param {Number | Object} [data] Data associated with the item. Sound uses the data parameter as the number of - * channels for an audio instance, however a "channels" property can be appended to the data object if it is used - * for other information. The audio channels will set a default based on plugin if no value is found. - * Sound also uses the data property to hold an {{#crossLink "AudioSprite"}}{{/crossLink}} array of objects in the following format {id, startTime, duration}.
      - * id used to play the sound later, in the same manner as a sound src with an id.
      - * startTime is the initial offset to start playback and loop from, in milliseconds.
      - * duration is the amount of time to play the clip for, in milliseconds.
      - * This allows Sound to support audio sprites that are played back by id. - * @param {string} basePath Set a path that will be prepended to src for loading. - * @param {Object | PlayPropsConfig} defaultPlayProps Optional Playback properties that will be set as the defaults on any new AbstractSoundInstance. - * See {{#crossLink "PlayPropsConfig"}}{{/crossLink}} for options. - * @return {Object} An object with the modified values that were passed in, which defines the sound. - * Returns false if the source cannot be parsed or no plugins can be initialized. - * Returns true if the source is already loaded. - * @static - * @since 0.4.0 - */ - s.registerSound = function (src, id, data, basePath, defaultPlayProps) { - var loadItem = {src: src, id: id, data:data, defaultPlayProps:defaultPlayProps}; - if (src instanceof Object && src.src) { - basePath = id; - loadItem = src; - } - loadItem = createjs.LoadItem.create(loadItem); - loadItem.path = basePath; - - if (basePath != null && !(loadItem.src instanceof Object)) {loadItem.src = basePath + src;} - - var loader = s._registerSound(loadItem); - if(!loader) {return false;} - - if (!s._preloadHash[loadItem.src]) { s._preloadHash[loadItem.src] = [];} - s._preloadHash[loadItem.src].push(loadItem); - if (s._preloadHash[loadItem.src].length == 1) { - // OJR note this will disallow reloading a sound if loading fails or the source changes - loader.on("complete", createjs.proxy(this._handleLoadComplete, this)); - loader.on("error", createjs.proxy(this._handleLoadError, this)); - s.activePlugin.preload(loader); - } else { - if (s._preloadHash[loadItem.src][0] == true) {return true;} - } - - return loadItem; - }; - - /** - * Register an array of audio files for loading and future playback in Sound. It is recommended to register all - * sounds that need to be played back in order to properly prepare and preload them. Sound does internal preloading - * when required. - * - *

      Example

      - * - * var assetPath = "./myAudioPath/"; - * var sounds = [ - * {src:"asset0.ogg", id:"example"}, - * {src:"asset1.ogg", id:"1", data:6}, - * {src:"asset2.mp3", id:"works"} - * {src:{mp3:"path1/asset3.mp3", ogg:"path2/asset3NoExtension}, id:"better"} - * ]; - * createjs.Sound.alternateExtensions = ["mp3"]; // if the passed extension is not supported, try this extension - * createjs.Sound.on("fileload", handleLoad); // call handleLoad when each sound loads - * createjs.Sound.registerSounds(sounds, assetPath); - * - * @method registerSounds - * @param {Array} sounds An array of objects to load. Objects are expected to be in the format needed for - * {{#crossLink "Sound/registerSound"}}{{/crossLink}}: {src:srcURI, id:ID, data:Data} - * with "id" and "data" being optional. - * You can also pass an object with path and manifest properties, where path is a basePath and manifest is an array of objects to load. - * Note id is required if src is an object with extension labeled src properties. - * @param {string} basePath Set a path that will be prepended to each src when loading. When creating, playing, or removing - * audio that was loaded with a basePath by src, the basePath must be included. - * @return {Object} An array of objects with the modified values that were passed in, which defines each sound. - * Like registerSound, it will return false for any values when the source cannot be parsed or if no plugins can be initialized. - * Also, it will return true for any values when the source is already loaded. - * @static - * @since 0.6.0 - */ - s.registerSounds = function (sounds, basePath) { - var returnValues = []; - if (sounds.path) { - if (!basePath) { - basePath = sounds.path; - } else { - basePath = basePath + sounds.path; - } - sounds = sounds.manifest; - // TODO document this feature - } - for (var i = 0, l = sounds.length; i < l; i++) { - returnValues[i] = createjs.Sound.registerSound(sounds[i].src, sounds[i].id, sounds[i].data, basePath, sounds[i].defaultPlayProps); - } - return returnValues; - }; - - /** - * Remove a sound that has been registered with {{#crossLink "Sound/registerSound"}}{{/crossLink}} or - * {{#crossLink "Sound/registerSounds"}}{{/crossLink}}. - *
      Note this will stop playback on active instances playing this sound before deleting them. - *
      Note if you passed in a basePath, you need to pass it or prepend it to the src here. - * - *

      Example

      - * - * createjs.Sound.removeSound("myID"); - * createjs.Sound.removeSound("myAudioBasePath/mySound.ogg"); - * createjs.Sound.removeSound("myPath/myOtherSound.mp3", "myBasePath/"); - * createjs.Sound.removeSound({mp3:"musicNoExtension", ogg:"music.ogg"}, "myBasePath/"); - * - * @method removeSound - * @param {String | Object} src The src or ID of the audio, or an Object with a "src" property, or an Object with multiple extension labeled src properties. - * @param {string} basePath Set a path that will be prepended to each src when removing. - * @return {Boolean} True if sound is successfully removed. - * @static - * @since 0.4.1 - */ - s.removeSound = function(src, basePath) { - if (s.activePlugin == null) {return false;} - - if (src instanceof Object && src.src) {src = src.src;} - - var details; - if (src instanceof Object) { - details = s._parseSrc(src); - } else { - src = s._getSrcById(src).src; - details = s._parsePath(src); - } - if (details == null) {return false;} - src = details.src; - if (basePath != null) {src = basePath + src;} - - for(var prop in s._idHash){ - if(s._idHash[prop].src == src) { - delete(s._idHash[prop]); - } - } - - // clear from SoundChannel, which also stops and deletes all instances - SoundChannel.removeSrc(src); - - delete(s._preloadHash[src]); - - s.activePlugin.removeSound(src); - - return true; - }; - - /** - * Remove an array of audio files that have been registered with {{#crossLink "Sound/registerSound"}}{{/crossLink}} or - * {{#crossLink "Sound/registerSounds"}}{{/crossLink}}. - *
      Note this will stop playback on active instances playing this audio before deleting them. - *
      Note if you passed in a basePath, you need to pass it or prepend it to the src here. - * - *

      Example

      - * - * assetPath = "./myPath/"; - * var sounds = [ - * {src:"asset0.ogg", id:"example"}, - * {src:"asset1.ogg", id:"1", data:6}, - * {src:"asset2.mp3", id:"works"} - * ]; - * createjs.Sound.removeSounds(sounds, assetPath); - * - * @method removeSounds - * @param {Array} sounds An array of objects to remove. Objects are expected to be in the format needed for - * {{#crossLink "Sound/removeSound"}}{{/crossLink}}: {srcOrID:srcURIorID}. - * You can also pass an object with path and manifest properties, where path is a basePath and manifest is an array of objects to remove. - * @param {string} basePath Set a path that will be prepended to each src when removing. - * @return {Object} An array of Boolean values representing if the sounds with the same array index were - * successfully removed. - * @static - * @since 0.4.1 - */ - s.removeSounds = function (sounds, basePath) { - var returnValues = []; - if (sounds.path) { - if (!basePath) { - basePath = sounds.path; - } else { - basePath = basePath + sounds.path; - } - sounds = sounds.manifest; - } - for (var i = 0, l = sounds.length; i < l; i++) { - returnValues[i] = createjs.Sound.removeSound(sounds[i].src, basePath); - } - return returnValues; - }; - - /** - * Remove all sounds that have been registered with {{#crossLink "Sound/registerSound"}}{{/crossLink}} or - * {{#crossLink "Sound/registerSounds"}}{{/crossLink}}. - *
      Note this will stop playback on all active sound instances before deleting them. - * - *

      Example

      - * - * createjs.Sound.removeAllSounds(); - * - * @method removeAllSounds - * @static - * @since 0.4.1 - */ - s.removeAllSounds = function() { - s._idHash = {}; - s._preloadHash = {}; - SoundChannel.removeAll(); - if (s.activePlugin) {s.activePlugin.removeAllSounds();} - }; - - /** - * Check if a source has been loaded by internal preloaders. This is necessary to ensure that sounds that are - * not completed preloading will not kick off a new internal preload if they are played. - * - *

      Example

      - * - * var mySound = "assetPath/asset0.ogg"; - * if(createjs.Sound.loadComplete(mySound) { - * createjs.Sound.play(mySound); - * } - * - * @method loadComplete - * @param {String} src The src or id that is being loaded. - * @return {Boolean} If the src is already loaded. - * @since 0.4.0 - * @static - */ - s.loadComplete = function (src) { - if (!s.isReady()) { return false; } - var details = s._parsePath(src); - if (details) { - src = s._getSrcById(details.src).src; - } else { - src = s._getSrcById(src).src; - } - if(s._preloadHash[src] == undefined) {return false;} - return (s._preloadHash[src][0] == true); // src only loads once, so if it's true for the first it's true for all - }; - - /** - * Parse the path of a sound. Alternate extensions will be attempted in order if the - * current extension is not supported - * @method _parsePath - * @param {String} value The path to an audio source. - * @return {Object} A formatted object that can be registered with the {{#crossLink "Sound/activePlugin:property"}}{{/crossLink}} - * and returned to a preloader like PreloadJS. - * @protected - * @static - */ - s._parsePath = function (value) { - if (typeof(value) != "string") {value = value.toString();} - - var match = value.match(s.FILE_PATTERN); - if (match == null) {return false;} - - var name = match[4]; - var ext = match[5]; - var c = s.capabilities; - var i = 0; - while (!c[ext]) { - ext = s.alternateExtensions[i++]; - if (i > s.alternateExtensions.length) { return null;} // no extensions are supported - } - value = value.replace("."+match[5], "."+ext); - - var ret = {name:name, src:value, extension:ext}; - return ret; - }; - - /** - * Parse the path of a sound based on properties of src matching with supported extensions. - * Returns false if none of the properties are supported - * @method _parseSrc - * @param {Object} value The paths to an audio source, indexed by extension type. - * @return {Object} A formatted object that can be registered with the {{#crossLink "Sound/activePlugin:property"}}{{/crossLink}} - * and returned to a preloader like PreloadJS. - * @protected - * @static - */ - s._parseSrc = function (value) { - var ret = {name:undefined, src:undefined, extension:undefined}; - var c = s.capabilities; - - for (var prop in value) { - if(value.hasOwnProperty(prop) && c[prop]) { - ret.src = value[prop]; - ret.extension = prop; - break; - } - } - if (!ret.src) {return false;} // no matches - - var i = ret.src.lastIndexOf("/"); - if (i != -1) { - ret.name = ret.src.slice(i+1); - } else { - ret.name = ret.src; - } - - return ret; - }; - - /* --------------- - Static API. - --------------- */ - /** - * Play a sound and get a {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} to control. If the sound fails to play, a - * AbstractSoundInstance will still be returned, and have a playState of {{#crossLink "Sound/PLAY_FAILED:property"}}{{/crossLink}}. - * Note that even on sounds with failed playback, you may still be able to call AbstractSoundInstance {{#crossLink "AbstractSoundInstance/play"}}{{/crossLink}}, - * since the failure could be due to lack of available channels. If the src does not have a supported extension or - * if there is no available plugin, a default AbstractSoundInstance will be returned which will not play any audio, but will not generate errors. - * - *

      Example

      - * - * createjs.Sound.on("fileload", handleLoad); - * createjs.Sound.registerSound("myAudioPath/mySound.mp3", "myID", 3); - * function handleLoad(event) { - * createjs.Sound.play("myID"); - * // store off AbstractSoundInstance for controlling - * var myInstance = createjs.Sound.play("myID", {interrupt: createjs.Sound.INTERRUPT_ANY, loop:-1}); - * } - * - * NOTE to create an audio sprite that has not already been registered, both startTime and duration need to be set. - * This is only when creating a new audio sprite, not when playing using the id of an already registered audio sprite. - * - * Parameters Deprecated
      - * The parameters for this method are deprecated in favor of a single parameter that is an Object or {{#crossLink "PlayPropsConfig"}}{{/crossLink}}. - * - * @method play - * @param {String} src The src or ID of the audio. - * @param {String | Object} [interrupt="none"|options] This parameter will be renamed playProps in the next release.
      - * This parameter can be an instance of {{#crossLink "PlayPropsConfig"}}{{/crossLink}} or an Object that contains any or all optional properties by name, - * including: interrupt, delay, offset, loop, volume, pan, startTime, and duration (see the above code sample). - *
      OR
      - * Deprecated How to interrupt any currently playing instances of audio with the same source, - * if the maximum number of instances of the sound are already playing. Values are defined as INTERRUPT_TYPE - * constants on the Sound class, with the default defined by {{#crossLink "Sound/defaultInterruptBehavior:property"}}{{/crossLink}}. - * @param {Number} [delay=0] Deprecated The amount of time to delay the start of audio playback, in milliseconds. - * @param {Number} [offset=0] Deprecated The offset from the start of the audio to begin playback, in milliseconds. - * @param {Number} [loop=0] Deprecated How many times the audio loops when it reaches the end of playback. The default is 0 (no - * loops), and -1 can be used for infinite playback. - * @param {Number} [volume=1] Deprecated The volume of the sound, between 0 and 1. Note that the master volume is applied - * against the individual volume. - * @param {Number} [pan=0] Deprecated The left-right pan of the sound (if supported), between -1 (left) and 1 (right). - * @param {Number} [startTime=null] Deprecated To create an audio sprite (with duration), the initial offset to start playback and loop from, in milliseconds. - * @param {Number} [duration=null] Deprecated To create an audio sprite (with startTime), the amount of time to play the clip for, in milliseconds. - * @return {AbstractSoundInstance} A {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} that can be controlled after it is created. - * @static - */ - s.play = function (src, interrupt, delay, offset, loop, volume, pan, startTime, duration) { - var playProps; - if (interrupt instanceof Object || interrupt instanceof createjs.PlayPropsConfig) { - playProps = createjs.PlayPropsConfig.create(interrupt); - } else { - playProps = createjs.PlayPropsConfig.create({interrupt:interrupt, delay:delay, offset:offset, loop:loop, volume:volume, pan:pan, startTime:startTime, duration:duration}); - } - var instance = s.createInstance(src, playProps.startTime, playProps.duration); - var ok = s._playInstance(instance, playProps); - if (!ok) {instance._playFailed();} - return instance; - }; - - /** - * Creates a {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} using the passed in src. If the src does not have a - * supported extension or if there is no available plugin, a default AbstractSoundInstance will be returned that can be - * called safely but does nothing. - * - *

      Example

      - * - * var myInstance = null; - * createjs.Sound.on("fileload", handleLoad); - * createjs.Sound.registerSound("myAudioPath/mySound.mp3", "myID", 3); - * function handleLoad(event) { - * myInstance = createjs.Sound.createInstance("myID"); - * // alternately we could call the following - * myInstance = createjs.Sound.createInstance("myAudioPath/mySound.mp3"); - * } - * - * NOTE to create an audio sprite that has not already been registered, both startTime and duration need to be set. - * This is only when creating a new audio sprite, not when playing using the id of an already registered audio sprite. - * - * @method createInstance - * @param {String} src The src or ID of the audio. - * @param {Number} [startTime=null] To create an audio sprite (with duration), the initial offset to start playback and loop from, in milliseconds. - * @param {Number} [duration=null] To create an audio sprite (with startTime), the amount of time to play the clip for, in milliseconds. - * @return {AbstractSoundInstance} A {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} that can be controlled after it is created. - * Unsupported extensions will return the default AbstractSoundInstance. - * @since 0.4.0 - * @static - */ - s.createInstance = function (src, startTime, duration) { - if (!s.initializeDefaultPlugins()) {return new createjs.DefaultSoundInstance(src, startTime, duration);} - - var defaultPlayProps = s._defaultPlayPropsHash[src]; // for audio sprites, which create and store defaults by id - src = s._getSrcById(src); - - var details = s._parsePath(src.src); - - var instance = null; - if (details != null && details.src != null) { - SoundChannel.create(details.src); - if (startTime == null) {startTime = src.startTime;} - instance = s.activePlugin.create(details.src, startTime, duration || src.duration); - - defaultPlayProps = defaultPlayProps || s._defaultPlayPropsHash[details.src]; - if(defaultPlayProps) { - instance.applyPlayProps(defaultPlayProps); - } - } else { - instance = new createjs.DefaultSoundInstance(src, startTime, duration); - } - - instance.uniqueId = s._lastID++; - - return instance; - }; - - /** - * Stop all audio (global stop). Stopped audio is reset, and not paused. To play audio that has been stopped, - * call AbstractSoundInstance {{#crossLink "AbstractSoundInstance/play"}}{{/crossLink}}. - * - *

      Example

      - * - * createjs.Sound.stop(); - * - * @method stop - * @static - */ - s.stop = function () { - var instances = this._instances; - for (var i = instances.length; i--; ) { - instances[i].stop(); // NOTE stop removes instance from this._instances - } - }; - - /** - * Deprecated, please use {{#crossLink "Sound/volume:property"}}{{/crossLink}} instead. - * - * @method setVolume - * @param {Number} value The master volume value. The acceptable range is 0-1. - * @static - * @deprecated - */ - s.setVolume = function (value) { - if (Number(value) == null) {return false;} - value = Math.max(0, Math.min(1, value)); - s._masterVolume = value; - if (!this.activePlugin || !this.activePlugin.setVolume || !this.activePlugin.setVolume(value)) { - var instances = this._instances; - for (var i = 0, l = instances.length; i < l; i++) { - instances[i].setMasterVolume(value); - } - } - }; - - /** - * Deprecated, please use {{#crossLink "Sound/volume:property"}}{{/crossLink}} instead. - * - * @method getVolume - * @return {Number} The master volume, in a range of 0-1. - * @static - * @deprecated - */ - s.getVolume = function () { - return this._masterVolume; - }; - - /** - * Deprecated, please use {{#crossLink "Sound/muted:property"}}{{/crossLink}} instead. - * - * @method setMute - * @param {Boolean} value Whether the audio should be muted or not. - * @return {Boolean} If the mute was set. - * @static - * @since 0.4.0 - * @deprecated - */ - s.setMute = function (value) { - if (value == null) {return false;} - - this._masterMute = value; - if (!this.activePlugin || !this.activePlugin.setMute || !this.activePlugin.setMute(value)) { - var instances = this._instances; - for (var i = 0, l = instances.length; i < l; i++) { - instances[i].setMasterMute(value); - } - } - return true; - }; - - /** - * Deprecated, please use {{#crossLink "Sound/muted:property"}}{{/crossLink}} instead. - * - * @method getMute - * @return {Boolean} The mute value of Sound. - * @static - * @since 0.4.0 - * @deprecated - */ - s.getMute = function () { - return this._masterMute; - }; - - /** - * Set the default playback properties for all new SoundInstances of the passed in src or ID. - * See {{#crossLink "PlayPropsConfig"}}{{/crossLink}} for available properties. - * - * @method setDefaultPlayProps - * @param {String} src The src or ID used to register the audio. - * @param {Object | PlayPropsConfig} playProps The playback properties you would like to set. - * @since 0.6.1 - */ - s.setDefaultPlayProps = function(src, playProps) { - src = s._getSrcById(src); - s._defaultPlayPropsHash[s._parsePath(src.src).src] = createjs.PlayPropsConfig.create(playProps); - }; - - /** - * Get the default playback properties for the passed in src or ID. These properties are applied to all - * new SoundInstances. Returns null if default does not exist. - * - * @method getDefaultPlayProps - * @param {String} src The src or ID used to register the audio. - * @returns {PlayPropsConfig} returns an existing PlayPropsConfig or null if one does not exist - * @since 0.6.1 - */ - s.getDefaultPlayProps = function(src) { - src = s._getSrcById(src); - return s._defaultPlayPropsHash[s._parsePath(src.src).src]; - }; - - - /* --------------- - Internal methods - --------------- */ - /** - * Play an instance. This is called by the static API, as well as from plugins. This allows the core class to - * control delays. - * @method _playInstance - * @param {AbstractSoundInstance} instance The {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} to start playing. - * @param {PlayPropsConfig} playProps A PlayPropsConfig object. - * @return {Boolean} If the sound can start playing. Sounds that fail immediately will return false. Sounds that - * have a delay will return true, but may still fail to play. - * @protected - * @static - */ - s._playInstance = function (instance, playProps) { - var defaultPlayProps = s._defaultPlayPropsHash[instance.src] || {}; - if (playProps.interrupt == null) {playProps.interrupt = defaultPlayProps.interrupt || s.defaultInterruptBehavior}; - if (playProps.delay == null) {playProps.delay = defaultPlayProps.delay || 0;} - if (playProps.offset == null) {playProps.offset = instance.getPosition();} - if (playProps.loop == null) {playProps.loop = instance.loop;} - if (playProps.volume == null) {playProps.volume = instance.volume;} - if (playProps.pan == null) {playProps.pan = instance.pan;} - - if (playProps.delay == 0) { - var ok = s._beginPlaying(instance, playProps); - if (!ok) {return false;} - } else { - //Note that we can't pass arguments to proxy OR setTimeout (IE only), so just wrap the function call. - // OJR WebAudio may want to handle this differently, so it might make sense to move this functionality into the plugins in the future - var delayTimeoutId = setTimeout(function () { - s._beginPlaying(instance, playProps); - }, playProps.delay); - instance.delayTimeoutId = delayTimeoutId; - } - - this._instances.push(instance); - - return true; - }; - - /** - * Begin playback. This is called immediately or after delay by {{#crossLink "Sound/playInstance"}}{{/crossLink}}. - * @method _beginPlaying - * @param {AbstractSoundInstance} instance A {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} to begin playback. - * @param {PlayPropsConfig} playProps A PlayPropsConfig object. - * @return {Boolean} If the sound can start playing. If there are no available channels, or the instance fails to - * start, this will return false. - * @protected - * @static - */ - s._beginPlaying = function (instance, playProps) { - if (!SoundChannel.add(instance, playProps.interrupt)) { - return false; - } - var result = instance._beginPlaying(playProps); - if (!result) { - var index = createjs.indexOf(this._instances, instance); - if (index > -1) {this._instances.splice(index, 1);} - return false; - } - return true; - }; - - /** - * Get the source of a sound via the ID passed in with a register call. If no ID is found the value is returned - * instead. - * @method _getSrcById - * @param {String} value The ID the sound was registered with. - * @return {String} The source of the sound if it has been registered with this ID or the value that was passed in. - * @protected - * @static - */ - s._getSrcById = function (value) { - return s._idHash[value] || {src: value}; - }; - - /** - * A sound has completed playback, been interrupted, failed, or been stopped. This method removes the instance from - * Sound management. It will be added again, if the sound re-plays. Note that this method is called from the - * instances themselves. - * @method _playFinished - * @param {AbstractSoundInstance} instance The instance that finished playback. - * @protected - * @static - */ - s._playFinished = function (instance) { - SoundChannel.remove(instance); - var index = createjs.indexOf(this._instances, instance); - if (index > -1) {this._instances.splice(index, 1);} // OJR this will always be > -1, there is no way for an instance to exist without being added to this._instances - }; - - createjs.Sound = Sound; - - /** - * An internal class that manages the number of active {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} instances for - * each sound type. This method is only used internally by the {{#crossLink "Sound"}}{{/crossLink}} class. - * - * The number of sounds is artificially limited by Sound in order to prevent over-saturation of a - * single sound, as well as to stay within hardware limitations, although the latter may disappear with better - * browser support. - * - * When a sound is played, this class ensures that there is an available instance, or interrupts an appropriate - * sound that is already playing. - * #class SoundChannel - * @param {String} src The source of the instances - * @param {Number} [max=1] The number of instances allowed - * @constructor - * @protected - */ - function SoundChannel(src, max) { - this.init(src, max); - } - - /* ------------ - Static API - ------------ */ - /** - * A hash of channel instances indexed by source. - * #property channels - * @type {Object} - * @static - */ - SoundChannel.channels = {}; - - /** - * Create a sound channel. Note that if the sound channel already exists, this will fail. - * #method create - * @param {String} src The source for the channel - * @param {Number} max The maximum amount this channel holds. The default is {{#crossLink "SoundChannel.maxDefault"}}{{/crossLink}}. - * @return {Boolean} If the channels were created. - * @static - */ - SoundChannel.create = function (src, max) { - var channel = SoundChannel.get(src); - if (channel == null) { - SoundChannel.channels[src] = new SoundChannel(src, max); - return true; - } - return false; - }; - /** - * Delete a sound channel, stop and delete all related instances. Note that if the sound channel does not exist, this will fail. - * #method remove - * @param {String} src The source for the channel - * @return {Boolean} If the channels were deleted. - * @static - */ - SoundChannel.removeSrc = function (src) { - var channel = SoundChannel.get(src); - if (channel == null) {return false;} - channel._removeAll(); // this stops and removes all active instances - delete(SoundChannel.channels[src]); - return true; - }; - /** - * Delete all sound channels, stop and delete all related instances. - * #method removeAll - * @static - */ - SoundChannel.removeAll = function () { - for(var channel in SoundChannel.channels) { - SoundChannel.channels[channel]._removeAll(); // this stops and removes all active instances - } - SoundChannel.channels = {}; - }; - /** - * Add an instance to a sound channel. - * #method add - * @param {AbstractSoundInstance} instance The instance to add to the channel - * @param {String} interrupt The interrupt value to use. Please see the {{#crossLink "Sound/play"}}{{/crossLink}} - * for details on interrupt modes. - * @return {Boolean} The success of the method call. If the channel is full, it will return false. - * @static - */ - SoundChannel.add = function (instance, interrupt) { - var channel = SoundChannel.get(instance.src); - if (channel == null) {return false;} - return channel._add(instance, interrupt); - }; - /** - * Remove an instance from the channel. - * #method remove - * @param {AbstractSoundInstance} instance The instance to remove from the channel - * @return The success of the method call. If there is no channel, it will return false. - * @static - */ - SoundChannel.remove = function (instance) { - var channel = SoundChannel.get(instance.src); - if (channel == null) {return false;} - channel._remove(instance); - return true; - }; - /** - * Get the maximum number of sounds you can have in a channel. - * #method maxPerChannel - * @return {Number} The maximum number of sounds you can have in a channel. - */ - SoundChannel.maxPerChannel = function () { - return p.maxDefault; - }; - /** - * Get a channel instance by its src. - * #method get - * @param {String} src The src to use to look up the channel - * @static - */ - SoundChannel.get = function (src) { - return SoundChannel.channels[src]; - }; - - var p = SoundChannel.prototype; - p.constructor = SoundChannel; - - /** - * REMOVED. Removed in favor of using `MySuperClass_constructor`. - * See {{#crossLink "Utility Methods/extend"}}{{/crossLink}} and {{#crossLink "Utility Methods/promote"}}{{/crossLink}} - * for details. - * - * There is an inheritance tutorial distributed with EaselJS in /tutorials/Inheritance. - * - * @method initialize - * @protected - * @deprecated - */ - // p.initialize = function() {}; // searchable for devs wondering where it is. - - - /** - * The source of the channel. - * #property src - * @type {String} - */ - p.src = null; - - /** - * The maximum number of instances in this channel. -1 indicates no limit - * #property max - * @type {Number} - */ - p.max = null; - - /** - * The default value to set for max, if it isn't passed in. Also used if -1 is passed. - * #property maxDefault - * @type {Number} - * @default 100 - * @since 0.4.0 - */ - p.maxDefault = 100; - - /** - * The current number of active instances. - * #property length - * @type {Number} - */ - p.length = 0; - - /** - * Initialize the channel. - * #method init - * @param {String} src The source of the channel - * @param {Number} max The maximum number of instances in the channel - * @protected - */ - p.init = function (src, max) { - this.src = src; - this.max = max || this.maxDefault; - if (this.max == -1) {this.max = this.maxDefault;} - this._instances = []; - }; - - /** - * Get an instance by index. - * #method get - * @param {Number} index The index to return. - * @return {AbstractSoundInstance} The AbstractSoundInstance at a specific instance. - */ - p._get = function (index) { - return this._instances[index]; - }; - - /** - * Add a new instance to the channel. - * #method add - * @param {AbstractSoundInstance} instance The instance to add. - * @return {Boolean} The success of the method call. If the channel is full, it will return false. - */ - p._add = function (instance, interrupt) { - if (!this._getSlot(interrupt, instance)) {return false;} - this._instances.push(instance); - this.length++; - return true; - }; - - /** - * Remove an instance from the channel, either when it has finished playing, or it has been interrupted. - * #method remove - * @param {AbstractSoundInstance} instance The instance to remove - * @return {Boolean} The success of the remove call. If the instance is not found in this channel, it will - * return false. - */ - p._remove = function (instance) { - var index = createjs.indexOf(this._instances, instance); - if (index == -1) {return false;} - this._instances.splice(index, 1); - this.length--; - return true; - }; - - /** - * Stop playback and remove all instances from the channel. Usually in response to a delete call. - * #method removeAll - */ - p._removeAll = function () { - // Note that stop() removes the item from the list - for (var i=this.length-1; i>=0; i--) { - this._instances[i].stop(); - } - }; - - /** - * Get an available slot depending on interrupt value and if slots are available. - * #method getSlot - * @param {String} interrupt The interrupt value to use. - * @param {AbstractSoundInstance} instance The sound instance that will go in the channel if successful. - * @return {Boolean} Determines if there is an available slot. Depending on the interrupt mode, if there are no slots, - * an existing AbstractSoundInstance may be interrupted. If there are no slots, this method returns false. - */ - p._getSlot = function (interrupt, instance) { - var target, replacement; - - if (interrupt != Sound.INTERRUPT_NONE) { - // First replacement candidate - replacement = this._get(0); - if (replacement == null) { - return true; - } - } - - for (var i = 0, l = this.max; i < l; i++) { - target = this._get(i); - - // Available Space - if (target == null) { - return true; - } - - // Audio is complete or not playing - if (target.playState == Sound.PLAY_FINISHED || - target.playState == Sound.PLAY_INTERRUPTED || - target.playState == Sound.PLAY_FAILED) { - replacement = target; - break; - } - - if (interrupt == Sound.INTERRUPT_NONE) { - continue; - } - - // Audio is a better candidate than the current target, according to playhead - if ((interrupt == Sound.INTERRUPT_EARLY && target.getPosition() < replacement.getPosition()) || - (interrupt == Sound.INTERRUPT_LATE && target.getPosition() > replacement.getPosition())) { - replacement = target; - } - } - - if (replacement != null) { - replacement._interrupt(); - this._remove(replacement); - return true; - } - return false; - }; - - p.toString = function () { - return "[Sound SoundChannel]"; - }; - // do not add SoundChannel to namespace - -}()); - -//############################################################################## -// AbstractSoundInstance.js -//############################################################################## - -this.createjs = this.createjs || {}; - -/** - * A AbstractSoundInstance is created when any calls to the Sound API method {{#crossLink "Sound/play"}}{{/crossLink}} or - * {{#crossLink "Sound/createInstance"}}{{/crossLink}} are made. The AbstractSoundInstance is returned by the active plugin - * for control by the user. - * - *

      Example

      - * - * var myInstance = createjs.Sound.play("myAssetPath/mySrcFile.mp3"); - * - * A number of additional parameters provide a quick way to determine how a sound is played. Please see the Sound - * API method {{#crossLink "Sound/play"}}{{/crossLink}} for a list of arguments. - * - * Once a AbstractSoundInstance is created, a reference can be stored that can be used to control the audio directly through - * the AbstractSoundInstance. If the reference is not stored, the AbstractSoundInstance will play out its audio (and any loops), and - * is then de-referenced from the {{#crossLink "Sound"}}{{/crossLink}} class so that it can be cleaned up. If audio - * playback has completed, a simple call to the {{#crossLink "AbstractSoundInstance/play"}}{{/crossLink}} instance method - * will rebuild the references the Sound class need to control it. - * - * var myInstance = createjs.Sound.play("myAssetPath/mySrcFile.mp3", {loop:2}); - * myInstance.on("loop", handleLoop); - * function handleLoop(event) { - * myInstance.volume = myInstance.volume * 0.5; - * } - * - * Events are dispatched from the instance to notify when the sound has completed, looped, or when playback fails - * - * var myInstance = createjs.Sound.play("myAssetPath/mySrcFile.mp3"); - * myInstance.on("complete", handleComplete); - * myInstance.on("loop", handleLoop); - * myInstance.on("failed", handleFailed); - * - * - * @class AbstractSoundInstance - * @param {String} src The path to and file name of the sound. - * @param {Number} startTime Audio sprite property used to apply an offset, in milliseconds. - * @param {Number} duration Audio sprite property used to set the time the clip plays for, in milliseconds. - * @param {Object} playbackResource Any resource needed by plugin to support audio playback. - * @extends EventDispatcher - * @constructor - */ - -(function () { - "use strict"; - - -// Constructor: - var AbstractSoundInstance = function (src, startTime, duration, playbackResource) { - this.EventDispatcher_constructor(); - - - // public properties: - /** - * The source of the sound. - * @property src - * @type {String} - * @default null - */ - this.src = src; - - /** - * The unique ID of the instance. This is set by {{#crossLink "Sound"}}{{/crossLink}}. - * @property uniqueId - * @type {String} | Number - * @default -1 - */ - this.uniqueId = -1; - - /** - * The play state of the sound. Play states are defined as constants on {{#crossLink "Sound"}}{{/crossLink}}. - * @property playState - * @type {String} - * @default null - */ - this.playState = null; - - /** - * A Timeout created by {{#crossLink "Sound"}}{{/crossLink}} when this AbstractSoundInstance is played with a delay. - * This allows AbstractSoundInstance to remove the delay if stop, pause, or cleanup are called before playback begins. - * @property delayTimeoutId - * @type {timeoutVariable} - * @default null - * @protected - * @since 0.4.0 - */ - this.delayTimeoutId = null; - // TODO consider moving delay into AbstractSoundInstance so it can be handled by plugins - - - // private properties - // Getter / Setter Properties - // OJR TODO find original reason that we didn't use defined functions. I think it was performance related - /** - * The volume of the sound, between 0 and 1. - * - * The actual output volume of a sound can be calculated using: - * myInstance.volume * createjs.Sound.getVolume(); - * - * @property volume - * @type {Number} - * @default 1 - */ - this._volume = 1; - Object.defineProperty(this, "volume", { - get: this.getVolume, - set: this.setVolume - }); - - /** - * The pan of the sound, between -1 (left) and 1 (right). Note that pan is not supported by HTML Audio. - * - *
      Note in WebAudioPlugin this only gives us the "x" value of what is actually 3D audio. - * - * @property pan - * @type {Number} - * @default 0 - */ - this._pan = 0; - Object.defineProperty(this, "pan", { - get: this.getPan, - set: this.setPan - }); - - /** - * Audio sprite property used to determine the starting offset. - * @property startTime - * @type {Number} - * @default 0 - * @since 0.6.1 - */ - this._startTime = Math.max(0, startTime || 0); - Object.defineProperty(this, "startTime", { - get: this.getStartTime, - set: this.setStartTime - }); - - /** - * The length of the audio clip, in milliseconds. - * - * @property duration - * @type {Number} - * @default 0 - * @since 0.6.0 - */ - this._duration = Math.max(0, duration || 0); - Object.defineProperty(this, "duration", { - get: this.getDuration, - set: this.setDuration - }); - - /** - * Object that holds plugin specific resource need for audio playback. - * This is set internally by the plugin. For example, WebAudioPlugin will set an array buffer, - * HTMLAudioPlugin will set a tag, FlashAudioPlugin will set a flash reference. - * - * @property playbackResource - * @type {Object} - * @default null - */ - this._playbackResource = null; - Object.defineProperty(this, "playbackResource", { - get: this.getPlaybackResource, - set: this.setPlaybackResource - }); - if(playbackResource !== false && playbackResource !== true) { this.setPlaybackResource(playbackResource); } - - /** - * The position of the playhead in milliseconds. This can be set while a sound is playing, paused, or stopped. - * - * @property position - * @type {Number} - * @default 0 - * @since 0.6.0 - */ - this._position = 0; - Object.defineProperty(this, "position", { - get: this.getPosition, - set: this.setPosition - }); - - /** - * The number of play loops remaining. Negative values will loop infinitely. - * - * @property loop - * @type {Number} - * @default 0 - * @public - * @since 0.6.0 - */ - this._loop = 0; - Object.defineProperty(this, "loop", { - get: this.getLoop, - set: this.setLoop - }); - - /** - * Determines if the audio is currently muted. - * - * @property muted - * @type {Boolean} - * @default false - * @since 0.6.0 - */ - this._muted = false; - Object.defineProperty(this, "muted", { - get: this.getMuted, - set: this.setMuted - }); - - /** - * Tells you if the audio is currently paused. - * - * @property paused - * @type {Boolean} - */ - this._paused = false; - Object.defineProperty(this, "paused", { - get: this.getPaused, - set: this.setPaused - }); - - - // Events - /** - * The event that is fired when playback has started successfully. - * @event succeeded - * @param {Object} target The object that dispatched the event. - * @param {String} type The event type. - * @since 0.4.0 - */ - - /** - * The event that is fired when playback is interrupted. This happens when another sound with the same - * src property is played using an interrupt value that causes this instance to stop playing. - * @event interrupted - * @param {Object} target The object that dispatched the event. - * @param {String} type The event type. - * @since 0.4.0 - */ - - /** - * The event that is fired when playback has failed. This happens when there are too many channels with the same - * src property already playing (and the interrupt value doesn't cause an interrupt of another instance), or - * the sound could not be played, perhaps due to a 404 error. - * @event failed - * @param {Object} target The object that dispatched the event. - * @param {String} type The event type. - * @since 0.4.0 - */ - - /** - * The event that is fired when a sound has completed playing but has loops remaining. - * @event loop - * @param {Object} target The object that dispatched the event. - * @param {String} type The event type. - * @since 0.4.0 - */ - - /** - * The event that is fired when playback completes. This means that the sound has finished playing in its - * entirety, including its loop iterations. - * @event complete - * @param {Object} target The object that dispatched the event. - * @param {String} type The event type. - * @since 0.4.0 - */ - }; - - var p = createjs.extend(AbstractSoundInstance, createjs.EventDispatcher); - - // TODO: deprecated - // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. - - -// Public Methods: - /** - * Play an instance. This method is intended to be called on SoundInstances that already exist (created - * with the Sound API {{#crossLink "Sound/createInstance"}}{{/crossLink}} or {{#crossLink "Sound/play"}}{{/crossLink}}). - * - *

      Example

      - * - * var myInstance = createjs.Sound.createInstance(mySrc); - * myInstance.play({interrupt:createjs.Sound.INTERRUPT_ANY, loop:2, pan:0.5}); - * - * Note that if this sound is already playing, this call will still set the passed in parameters. - - * Parameters Deprecated
      - * The parameters for this method are deprecated in favor of a single parameter that is an Object or {{#crossLink "PlayPropsConfig"}}{{/crossLink}}. - * - * @method play - * @param {String | Object} [interrupt="none"|options] This parameter will be renamed playProps in the next release.
      - * This parameter can be an instance of {{#crossLink "PlayPropsConfig"}}{{/crossLink}} or an Object that contains any or all optional properties by name, - * including: interrupt, delay, offset, loop, volume, pan, startTime, and duration (see the above code sample). - *
      OR
      - * Deprecated How to interrupt any currently playing instances of audio with the same source, - * if the maximum number of instances of the sound are already playing. Values are defined as INTERRUPT_TYPE - * constants on the Sound class, with the default defined by {{#crossLink "Sound/defaultInterruptBehavior:property"}}{{/crossLink}}. - * @param {Number} [delay=0] Deprecated The amount of time to delay the start of audio playback, in milliseconds. - * @param {Number} [offset=0] Deprecated The offset from the start of the audio to begin playback, in milliseconds. - * @param {Number} [loop=0] Deprecated How many times the audio loops when it reaches the end of playback. The default is 0 (no - * loops), and -1 can be used for infinite playback. - * @param {Number} [volume=1] Deprecated The volume of the sound, between 0 and 1. Note that the master volume is applied - * against the individual volume. - * @param {Number} [pan=0] Deprecated The left-right pan of the sound (if supported), between -1 (left) and 1 (right). - * Note that pan is not supported for HTML Audio. - * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. - */ - p.play = function (interrupt, delay, offset, loop, volume, pan) { - var playProps; - if (interrupt instanceof Object || interrupt instanceof createjs.PlayPropsConfig) { - playProps = createjs.PlayPropsConfig.create(interrupt); - } else { - playProps = createjs.PlayPropsConfig.create({interrupt:interrupt, delay:delay, offset:offset, loop:loop, volume:volume, pan:pan}); - } - - if (this.playState == createjs.Sound.PLAY_SUCCEEDED) { - this.applyPlayProps(playProps); - if (this._paused) { this.setPaused(false); } - return; - } - this._cleanUp(); - createjs.Sound._playInstance(this, playProps); // make this an event dispatch?? - return this; - }; - - /** - * Stop playback of the instance. Stopped sounds will reset their position to 0, and calls to {{#crossLink "AbstractSoundInstance/resume"}}{{/crossLink}} - * will fail. To start playback again, call {{#crossLink "AbstractSoundInstance/play"}}{{/crossLink}}. - * - *

      Example

      - * - * myInstance.stop(); - * - * @method stop - * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. - */ - p.stop = function () { - this._position = 0; - this._paused = false; - this._handleStop(); - this._cleanUp(); - this.playState = createjs.Sound.PLAY_FINISHED; - return this; - }; - - /** - * Remove all external references and resources from AbstractSoundInstance. Note this is irreversible and AbstractSoundInstance will no longer work - * @method destroy - * @since 0.6.0 - */ - p.destroy = function() { - this._cleanUp(); - this.src = null; - this.playbackResource = null; - - this.removeAllEventListeners(); - }; - - /** - * Takes an PlayPropsConfig or Object with the same properties and sets them on this instance. - * @method applyPlayProps - * @param {PlayPropsConfig | Object} playProps A PlayPropsConfig or object containing the same properties. - * @since 0.6.1 - * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. - */ - p.applyPlayProps = function(playProps) { - if (playProps.offset != null) { this.setPosition(playProps.offset) } - if (playProps.loop != null) { this.setLoop(playProps.loop); } - if (playProps.volume != null) { this.setVolume(playProps.volume); } - if (playProps.pan != null) { this.setPan(playProps.pan); } - if (playProps.startTime != null) { - this.setStartTime(playProps.startTime); - this.setDuration(playProps.duration); - } - return this; - }; - - p.toString = function () { - return "[AbstractSoundInstance]"; - }; - -// get/set methods that allow support for IE8 - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/paused:property"}}{{/crossLink}} directly as a property, - * - * @deprecated - * @method getPaused - * @returns {boolean} If the instance is currently paused - * @since 0.6.0 - */ - p.getPaused = function() { - return this._paused; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/paused:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method setPaused - * @param {boolean} value - * @since 0.6.0 - * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. - */ - p.setPaused = function (value) { - if ((value !== true && value !== false) || this._paused == value) {return;} - if (value == true && this.playState != createjs.Sound.PLAY_SUCCEEDED) {return;} - this._paused = value; - if(value) { - this._pause(); - } else { - this._resume(); - } - clearTimeout(this.delayTimeoutId); - return this; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/volume:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method setVolume - * @param {Number} value The volume to set, between 0 and 1. - * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. - */ - p.setVolume = function (value) { - if (value == this._volume) { return this; } - this._volume = Math.max(0, Math.min(1, value)); - if (!this._muted) { - this._updateVolume(); - } - return this; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/volume:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method getVolume - * @return {Number} The current volume of the sound instance. - */ - p.getVolume = function () { - return this._volume; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/muted:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method setMuted - * @param {Boolean} value If the sound should be muted. - * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. - * @since 0.6.0 - */ - p.setMuted = function (value) { - if (value !== true && value !== false) {return;} - this._muted = value; - this._updateVolume(); - return this; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/muted:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method getMuted - * @return {Boolean} If the sound is muted. - * @since 0.6.0 - */ - p.getMuted = function () { - return this._muted; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/pan:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method setPan - * @param {Number} value The pan value, between -1 (left) and 1 (right). - * @return {AbstractSoundInstance} Returns reference to itself for chaining calls - */ - p.setPan = function (value) { - if(value == this._pan) { return this; } - this._pan = Math.max(-1, Math.min(1, value)); - this._updatePan(); - return this; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/pan:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method getPan - * @return {Number} The value of the pan, between -1 (left) and 1 (right). - */ - p.getPan = function () { - return this._pan; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/position:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method getPosition - * @return {Number} The position of the playhead in the sound, in milliseconds. - */ - p.getPosition = function () { - if (!this._paused && this.playState == createjs.Sound.PLAY_SUCCEEDED) { - this._position = this._calculateCurrentPosition(); - } - return this._position; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/position:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method setPosition - * @param {Number} value The position to place the playhead, in milliseconds. - * @return {AbstractSoundInstance} Returns reference to itself for chaining calls - */ - p.setPosition = function (value) { - this._position = Math.max(0, value); - if (this.playState == createjs.Sound.PLAY_SUCCEEDED) { - this._updatePosition(); - } - return this; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/startTime:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method getStartTime - * @return {Number} The startTime of the sound instance in milliseconds. - */ - p.getStartTime = function () { - return this._startTime; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/startTime:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method setStartTime - * @param {number} value The new startTime time in milli seconds. - * @return {AbstractSoundInstance} Returns reference to itself for chaining calls - */ - p.setStartTime = function (value) { - if (value == this._startTime) { return this; } - this._startTime = Math.max(0, value || 0); - this._updateStartTime(); - return this; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/duration:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method getDuration - * @return {Number} The duration of the sound instance in milliseconds. - */ - p.getDuration = function () { - return this._duration; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/duration:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method setDuration - * @param {number} value The new duration time in milli seconds. - * @return {AbstractSoundInstance} Returns reference to itself for chaining calls - * @since 0.6.0 - */ - p.setDuration = function (value) { - if (value == this._duration) { return this; } - this._duration = Math.max(0, value || 0); - this._updateDuration(); - return this; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/playbackResource:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method setPlayback - * @param {Object} value The new playback resource. - * @return {AbstractSoundInstance} Returns reference to itself for chaining calls - * @since 0.6.0 - **/ - p.setPlaybackResource = function (value) { - this._playbackResource = value; - if (this._duration == 0) { this._setDurationFromSource(); } - return this; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/playbackResource:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method setPlayback - * @param {Object} value The new playback resource. - * @return {Object} playback resource used for playing audio - * @since 0.6.0 - **/ - p.getPlaybackResource = function () { - return this._playbackResource; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/loop:property"}}{{/crossLink}} directly as a property - * - * @deprecated - * @method getLoop - * @return {number} - * @since 0.6.0 - **/ - p.getLoop = function () { - return this._loop; - }; - - /** - * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/loop:property"}}{{/crossLink}} directly as a property, - * - * @deprecated - * @method setLoop - * @param {number} value The number of times to loop after play. - * @since 0.6.0 - */ - p.setLoop = function (value) { - if(this._playbackResource != null) { - // remove looping - if (this._loop != 0 && value == 0) { - this._removeLooping(value); - } - // add looping - else if (this._loop == 0 && value != 0) { - this._addLooping(value); - } - } - this._loop = value; - }; - - -// Private Methods: - /** - * A helper method that dispatches all events for AbstractSoundInstance. - * @method _sendEvent - * @param {String} type The event type - * @protected - */ - p._sendEvent = function (type) { - var event = new createjs.Event(type); - this.dispatchEvent(event); - }; - - /** - * Clean up the instance. Remove references and clean up any additional properties such as timers. - * @method _cleanUp - * @protected - */ - p._cleanUp = function () { - clearTimeout(this.delayTimeoutId); // clear timeout that plays delayed sound - this._handleCleanUp(); - this._paused = false; - - createjs.Sound._playFinished(this); // TODO change to an event - }; - - /** - * The sound has been interrupted. - * @method _interrupt - * @protected - */ - p._interrupt = function () { - this._cleanUp(); - this.playState = createjs.Sound.PLAY_INTERRUPTED; - this._sendEvent("interrupted"); - }; - - /** - * Called by the Sound class when the audio is ready to play (delay has completed). Starts sound playing if the - * src is loaded, otherwise playback will fail. - * @method _beginPlaying - * @param {PlayPropsConfig} playProps A PlayPropsConfig object. - * @return {Boolean} If playback succeeded. - * @protected - */ - // OJR FlashAudioSoundInstance overwrites - p._beginPlaying = function (playProps) { - this.setPosition(playProps.offset); - this.setLoop(playProps.loop); - this.setVolume(playProps.volume); - this.setPan(playProps.pan); - if (playProps.startTime != null) { - this.setStartTime(playProps.startTime); - this.setDuration(playProps.duration); - } - - if (this._playbackResource != null && this._position < this._duration) { - this._paused = false; - this._handleSoundReady(); - this.playState = createjs.Sound.PLAY_SUCCEEDED; - this._sendEvent("succeeded"); - return true; - } else { - this._playFailed(); - return false; - } - }; - - /** - * Play has failed, which can happen for a variety of reasons. - * Cleans up instance and dispatches failed event - * @method _playFailed - * @private - */ - p._playFailed = function () { - this._cleanUp(); - this.playState = createjs.Sound.PLAY_FAILED; - this._sendEvent("failed"); - }; - - /** - * Audio has finished playing. Manually loop it if required. - * @method _handleSoundComplete - * @param event - * @protected - */ - p._handleSoundComplete = function (event) { - this._position = 0; // have to set this as it can be set by pause during playback - - if (this._loop != 0) { - this._loop--; // NOTE this introduces a theoretical limit on loops = float max size x 2 - 1 - this._handleLoop(); - this._sendEvent("loop"); - return; - } - - this._cleanUp(); - this.playState = createjs.Sound.PLAY_FINISHED; - this._sendEvent("complete"); - }; - -// Plugin specific code - /** - * Handles starting playback when the sound is ready for playing. - * @method _handleSoundReady - * @protected - */ - p._handleSoundReady = function () { - // plugin specific code - }; - - /** - * Internal function used to update the volume based on the instance volume, master volume, instance mute value, - * and master mute value. - * @method _updateVolume - * @protected - */ - p._updateVolume = function () { - // plugin specific code - }; - - /** - * Internal function used to update the pan - * @method _updatePan - * @protected - * @since 0.6.0 - */ - p._updatePan = function () { - // plugin specific code - }; - - /** - * Internal function used to update the startTime of the audio. - * @method _updateStartTime - * @protected - * @since 0.6.1 - */ - p._updateStartTime = function () { - // plugin specific code - }; - - /** - * Internal function used to update the duration of the audio. - * @method _updateDuration - * @protected - * @since 0.6.0 - */ - p._updateDuration = function () { - // plugin specific code - }; - - /** - * Internal function used to get the duration of the audio from the source we'll be playing. - * @method _updateDuration - * @protected - * @since 0.6.0 - */ - p._setDurationFromSource = function () { - // plugin specific code - }; - - /** - * Internal function that calculates the current position of the playhead and sets this._position to that value - * @method _calculateCurrentPosition - * @protected - * @since 0.6.0 - */ - p._calculateCurrentPosition = function () { - // plugin specific code that sets this.position - }; - - /** - * Internal function used to update the position of the playhead. - * @method _updatePosition - * @protected - * @since 0.6.0 - */ - p._updatePosition = function () { - // plugin specific code - }; - - /** - * Internal function called when looping is removed during playback. - * @method _removeLooping - * @param {number} value The number of times to loop after play. - * @protected - * @since 0.6.0 - */ - p._removeLooping = function (value) { - // plugin specific code - }; - - /** - * Internal function called when looping is added during playback. - * @method _addLooping - * @param {number} value The number of times to loop after play. - * @protected - * @since 0.6.0 - */ - p._addLooping = function (value) { - // plugin specific code - }; - - /** - * Internal function called when pausing playback - * @method _pause - * @protected - * @since 0.6.0 - */ - p._pause = function () { - // plugin specific code - }; - - /** - * Internal function called when resuming playback - * @method _resume - * @protected - * @since 0.6.0 - */ - p._resume = function () { - // plugin specific code - }; - - /** - * Internal function called when stopping playback - * @method _handleStop - * @protected - * @since 0.6.0 - */ - p._handleStop = function() { - // plugin specific code - }; - - /** - * Internal function called when AbstractSoundInstance is being cleaned up - * @method _handleCleanUp - * @protected - * @since 0.6.0 - */ - p._handleCleanUp = function() { - // plugin specific code - }; - - /** - * Internal function called when AbstractSoundInstance has played to end and is looping - * @method _handleLoop - * @protected - * @since 0.6.0 - */ - p._handleLoop = function () { - // plugin specific code - }; - - createjs.AbstractSoundInstance = createjs.promote(AbstractSoundInstance, "EventDispatcher"); - createjs.DefaultSoundInstance = createjs.AbstractSoundInstance; // used when no plugin is supported +this.createjs = this.createjs || {}; + + + +(function () { + "use strict"; + + /** + * The Sound class is the public API for creating sounds, controlling the overall sound levels, and managing plugins. + * All Sound APIs on this class are static. + * + * Registering and Preloading
      + * Before you can play a sound, it must be registered. You can do this with {{#crossLink "Sound/registerSound"}}{{/crossLink}}, + * or register multiple sounds using {{#crossLink "Sound/registerSounds"}}{{/crossLink}}. If you don't register a + * sound prior to attempting to play it using {{#crossLink "Sound/play"}}{{/crossLink}} or create it using {{#crossLink "Sound/createInstance"}}{{/crossLink}}, + * the sound source will be automatically registered but playback will fail as the source will not be ready. If you use + * PreloadJS, registration is handled for you when the sound is + * preloaded. It is recommended to preload sounds either internally using the register functions or externally using + * PreloadJS so they are ready when you want to use them. + * + * Playback
      + * To play a sound once it's been registered and preloaded, use the {{#crossLink "Sound/play"}}{{/crossLink}} method. + * This method returns a {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} which can be paused, resumed, muted, etc. + * Please see the {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} documentation for more on the instance control APIs. + * + * Plugins
      + * By default, the {{#crossLink "WebAudioPlugin"}}{{/crossLink}} or the {{#crossLink "HTMLAudioPlugin"}}{{/crossLink}} + * are used (when available), although developers can change plugin priority or add new plugins (such as the + * provided {{#crossLink "FlashAudioPlugin"}}{{/crossLink}}). Please see the {{#crossLink "Sound"}}{{/crossLink}} API + * methods for more on the playback and plugin APIs. To install plugins, or specify a different plugin order, see + * {{#crossLink "Sound/installPlugins"}}{{/crossLink}}. + * + *

      Example

      + * + * createjs.FlashAudioPlugin.swfPath = "../src/soundjs/flashaudio"; + * createjs.Sound.registerPlugins([createjs.WebAudioPlugin, createjs.FlashAudioPlugin]); + * createjs.Sound.alternateExtensions = ["mp3"]; + * createjs.Sound.on("fileload", createjs.proxy(this.loadHandler, (this))); + * createjs.Sound.registerSound("path/to/mySound.ogg", "sound"); + * function loadHandler(event) { + * // This is fired for each sound that is registered. + * var instance = createjs.Sound.play("sound"); // play using id. Could also use full source path or event.src. + * instance.on("complete", createjs.proxy(this.handleComplete, this)); + * instance.volume = 0.5; + * } + * + * The maximum number of concurrently playing instances of the same sound can be specified in the "data" argument + * of {{#crossLink "Sound/registerSound"}}{{/crossLink}}. Note that if not specified, the active plugin will apply + * a default limit. Currently HTMLAudioPlugin sets a default limit of 2, while WebAudioPlugin and FlashAudioPlugin set a + * default limit of 100. + * + * createjs.Sound.registerSound("sound.mp3", "soundId", 4); + * + * Sound can be used as a plugin with PreloadJS to help preload audio properly. Audio preloaded with PreloadJS is + * automatically registered with the Sound class. When audio is not preloaded, Sound will do an automatic internal + * load. As a result, it may fail to play the first time play is called if the audio is not finished loading. Use the + * {{#crossLink "Sound/fileload"}}{{/crossLink}} event to determine when a sound has finished internally preloading. + * It is recommended that all audio is preloaded before it is played. + * + * var queue = new createjs.LoadQueue(); + * queue.installPlugin(createjs.Sound); + * + * Audio Sprites
      + * SoundJS has added support for {{#crossLink "AudioSprite"}}{{/crossLink}}, available as of version 0.6.0. + * For those unfamiliar with audio sprites, they are much like CSS sprites or sprite sheets: multiple audio assets + * grouped into a single file. + * + *

      Example

      + * + * var assetsPath = "./assets/"; + * var sounds = [{ + * src:"MyAudioSprite.ogg", data: { + * audioSprite: [ + * {id:"sound1", startTime:0, duration:500}, + * {id:"sound2", startTime:1000, duration:400}, + * {id:"sound3", startTime:1700, duration: 1000} + * ]} + * } + * ]; + * createjs.Sound.alternateExtensions = ["mp3"]; + * createjs.Sound.on("fileload", loadSound); + * createjs.Sound.registerSounds(sounds, assetsPath); + * // after load is complete + * createjs.Sound.play("sound2"); + * + * Mobile Safe Approach
      + * Mobile devices require sounds to be played inside of a user initiated event (touch/click) in varying degrees. + * As of SoundJS 0.4.1, you can launch a site inside of a user initiated event and have audio playback work. To + * enable as broadly as possible, the site needs to setup the Sound plugin in its initialization (for example via + * createjs.Sound.initializeDefaultPlugins();), and all sounds need to be played in the scope of the + * application. See the MobileSafe demo for a working example. + * + *

      Example

      + * + * document.getElementById("status").addEventListener("click", handleTouch, false); // works on Android and iPad + * function handleTouch(event) { + * document.getElementById("status").removeEventListener("click", handleTouch, false); // remove the listener + * var thisApp = new myNameSpace.MyApp(); // launch the app + * } + * + * Loading Alternate Paths and Extensionless Files
      + * SoundJS supports loading alternate paths and extensionless files by passing an object for src that has various paths + * with property labels matching the extension. These labels are how SoundJS determines if the browser will support the sound. + * Priority is determined by the property order (first property is tried first). This is supported by both internal loading + * and loading with PreloadJS. + * + * Note an id is required for playback. + * + *

      Example

      + * + * var sounds = {path:"./audioPath/", + * manifest: [ + * {id: "cool", src: {mp3:"mp3/awesome.mp3", ogg:"noExtensionOggFile"}} + * ]}; + * + * createjs.Sound.alternateExtensions = ["mp3"]; + * createjs.Sound.addEventListener("fileload", handleLoad); + * createjs.Sound.registerSounds(sounds); + * + *

      Known Browser and OS issues

      + * IE 9 HTML Audio limitations
      + *
      • There is a delay in applying volume changes to tags that occurs once playback is started. So if you have + * muted all sounds, they will all play during this delay until the mute applies internally. This happens regardless of + * when or how you apply the volume change, as the tag seems to need to play to apply it.
      • + *
      • MP3 encoding will not always work for audio tags, particularly in Internet Explorer. We've found default + * encoding with 64kbps works.
      • + *
      • Occasionally very short samples will get cut off.
      • + *
      • There is a limit to how many audio tags you can load and play at once, which appears to be determined by + * hardware and browser settings. See {{#crossLink "HTMLAudioPlugin.MAX_INSTANCES"}}{{/crossLink}} for a safe estimate.
      + * + * Firefox 25 Web Audio limitations + *
      • mp3 audio files do not load properly on all windows machines, reported + * here.
        + * For this reason it is recommended to pass another FF supported type (ie ogg) first until this bug is resolved, if possible.
      + + * Safari limitations
      + *
      • Safari requires Quicktime to be installed for audio playback.
      + * + * iOS 6 Web Audio limitations
      + *
      • Sound is initially muted and will only unmute through play being called inside a user initiated event + * (touch/click).
      • + *
      • A bug exists that will distort un-cached web audio when a video element is present in the DOM that has audio at a different sampleRate.
      • + *
      + * + * Android HTML Audio limitations
      + *
      • We have no control over audio volume. Only the user can set volume on their device.
      • + *
      • We can only play audio inside a user event (touch/click). This currently means you cannot loop sound or use + * a delay.
      + * + * Web Audio and PreloadJS
      + *
      • Web Audio must be loaded through XHR, therefore when used with PreloadJS tag loading is not possible. This means that tag loading cannot + * be used to avoid cross domain issues if WebAudioPlugin is used
        • + * + * @class Sound + * @static + * @uses EventDispatcher + */ + function Sound() { + throw "Sound cannot be instantiated"; + } + + var s = Sound; + + +// Static Properties + /** + * The interrupt value to interrupt any currently playing instance with the same source, if the maximum number of + * instances of the sound are already playing. + * @property INTERRUPT_ANY + * @type {String} + * @default any + * @static + */ + s.INTERRUPT_ANY = "any"; + + /** + * The interrupt value to interrupt the earliest currently playing instance with the same source that progressed the + * least distance in the audio track, if the maximum number of instances of the sound are already playing. + * @property INTERRUPT_EARLY + * @type {String} + * @default early + * @static + */ + s.INTERRUPT_EARLY = "early"; + + /** + * The interrupt value to interrupt the currently playing instance with the same source that progressed the most + * distance in the audio track, if the maximum number of instances of the sound are already playing. + * @property INTERRUPT_LATE + * @type {String} + * @default late + * @static + */ + s.INTERRUPT_LATE = "late"; + + /** + * The interrupt value to not interrupt any currently playing instances with the same source, if the maximum number of + * instances of the sound are already playing. + * @property INTERRUPT_NONE + * @type {String} + * @default none + * @static + */ + s.INTERRUPT_NONE = "none"; + + /** + * Defines the playState of an instance that is still initializing. + * @property PLAY_INITED + * @type {String} + * @default playInited + * @static + */ + s.PLAY_INITED = "playInited"; + + /** + * Defines the playState of an instance that is currently playing or paused. + * @property PLAY_SUCCEEDED + * @type {String} + * @default playSucceeded + * @static + */ + s.PLAY_SUCCEEDED = "playSucceeded"; + + /** + * Defines the playState of an instance that was interrupted by another instance. + * @property PLAY_INTERRUPTED + * @type {String} + * @default playInterrupted + * @static + */ + s.PLAY_INTERRUPTED = "playInterrupted"; + + /** + * Defines the playState of an instance that completed playback. + * @property PLAY_FINISHED + * @type {String} + * @default playFinished + * @static + */ + s.PLAY_FINISHED = "playFinished"; + + /** + * Defines the playState of an instance that failed to play. This is usually caused by a lack of available channels + * when the interrupt mode was "INTERRUPT_NONE", the playback stalled, or the sound could not be found. + * @property PLAY_FAILED + * @type {String} + * @default playFailed + * @static + */ + s.PLAY_FAILED = "playFailed"; + + /** + * A list of the default supported extensions that Sound will try to play. Plugins will check if the browser + * can play these types, so modifying this list before a plugin is initialized will allow the plugins to try to + * support additional media types. + * + * NOTE this does not currently work for {{#crossLink "FlashAudioPlugin"}}{{/crossLink}}. + * + * More details on file formats can be found at http://en.wikipedia.org/wiki/Audio_file_format.
          + * A very detailed list of file formats can be found at http://www.fileinfo.com/filetypes/audio. + * @property SUPPORTED_EXTENSIONS + * @type {Array[String]} + * @default ["mp3", "ogg", "opus", "mpeg", "wav", "m4a", "mp4", "aiff", "wma", "mid"] + * @since 0.4.0 + * @static + */ + s.SUPPORTED_EXTENSIONS = ["mp3", "ogg", "opus", "mpeg", "wav", "m4a", "mp4", "aiff", "wma", "mid"]; + + /** + * Some extensions use another type of extension support to play (one of them is a codex). This allows you to map + * that support so plugins can accurately determine if an extension is supported. Adding to this list can help + * plugins determine more accurately if an extension is supported. + * + * A useful list of extensions for each format can be found at http://html5doctor.com/html5-audio-the-state-of-play/. + * @property EXTENSION_MAP + * @type {Object} + * @since 0.4.0 + * @default {m4a:"mp4"} + * @static + */ + s.EXTENSION_MAP = { + m4a:"mp4" + }; + + /** + * The RegExp pattern used to parse file URIs. This supports simple file names, as well as full domain URIs with + * query strings. The resulting match is: protocol:$1 domain:$2 path:$3 file:$4 extension:$5 query:$6. + * @property FILE_PATTERN + * @type {RegExp} + * @static + * @protected + */ + s.FILE_PATTERN = /^(?:(\w+:)\/{2}(\w+(?:\.\w+)*\/?))?([/.]*?(?:[^?]+)?\/)?((?:[^/?]+)\.(\w+))(?:\?(\S+)?)?$/; + + +// Class Public properties + /** + * Determines the default behavior for interrupting other currently playing instances with the same source, if the + * maximum number of instances of the sound are already playing. Currently the default is {{#crossLink "Sound/INTERRUPT_NONE:property"}}{{/crossLink}} + * but this can be set and will change playback behavior accordingly. This is only used when {{#crossLink "Sound/play"}}{{/crossLink}} + * is called without passing a value for interrupt. + * @property defaultInterruptBehavior + * @type {String} + * @default Sound.INTERRUPT_NONE, or "none" + * @static + * @since 0.4.0 + */ + s.defaultInterruptBehavior = s.INTERRUPT_NONE; // OJR does s.INTERRUPT_ANY make more sense as default? Needs game dev testing to see which case makes more sense. + + /** + * An array of extensions to attempt to use when loading sound, if the default is unsupported by the active plugin. + * These are applied in order, so if you try to Load Thunder.ogg in a browser that does not support ogg, and your + * extensions array is ["mp3", "m4a", "wav"] it will check mp3 support, then m4a, then wav. The audio files need + * to exist in the same location, as only the extension is altered. + * + * Note that regardless of which file is loaded, you can call {{#crossLink "Sound/createInstance"}}{{/crossLink}} + * and {{#crossLink "Sound/play"}}{{/crossLink}} using the same id or full source path passed for loading. + * + *

          Example

          + * + * var sounds = [ + * {src:"myPath/mySound.ogg", id:"example"}, + * ]; + * createjs.Sound.alternateExtensions = ["mp3"]; // now if ogg is not supported, SoundJS will try asset0.mp3 + * createjs.Sound.on("fileload", handleLoad); // call handleLoad when each sound loads + * createjs.Sound.registerSounds(sounds, assetPath); + * // ... + * createjs.Sound.play("myPath/mySound.ogg"); // works regardless of what extension is supported. Note calling with ID is a better approach + * + * @property alternateExtensions + * @type {Array} + * @since 0.5.2 + * @static + */ + s.alternateExtensions = []; + + /** + * The currently active plugin. If this is null, then no plugin could be initialized. If no plugin was specified, + * Sound attempts to apply the default plugins: {{#crossLink "WebAudioPlugin"}}{{/crossLink}}, followed by + * {{#crossLink "HTMLAudioPlugin"}}{{/crossLink}}. + * @property activePlugin + * @type {Object} + * @static + */ + s.activePlugin = null; + + +// class getter / setter properties + /** + * Set the master volume of Sound. The master volume is multiplied against each sound's individual volume. For + * example, if master volume is 0.5 and a sound's volume is 0.5, the resulting volume is 0.25. To set individual + * sound volume, use AbstractSoundInstance {{#crossLink "AbstractSoundInstance/volume:property"}}{{/crossLink}} instead. + * + *

          Example

          + * + * createjs.Sound.volume = 0.5; + * + * + * @property volume + * @type {Number} + * @default 1 + * @since 0.6.1 + */ + s._masterVolume = 1; + Object.defineProperty(s, "volume", { + get: function () {return this._masterVolume;}, + set: function (value) { + if (Number(value) == null) {return false;} + value = Math.max(0, Math.min(1, value)); + s._masterVolume = value; + if (!this.activePlugin || !this.activePlugin.setVolume || !this.activePlugin.setVolume(value)) { + var instances = this._instances; + for (var i = 0, l = instances.length; i < l; i++) { + instances[i].setMasterVolume(value); + } + } + } + }); + + /** + * Mute/Unmute all audio. Note that muted audio still plays at 0 volume. This global mute value is maintained + * separately and when set will override, but not change the mute property of individual instances. To mute an individual + * instance, use AbstractSoundInstance {{#crossLink "AbstractSoundInstance/muted:property"}}{{/crossLink}} instead. + * + *

          Example

          + * + * createjs.Sound.muted = true; + * + * + * @property muted + * @type {Boolean} + * @default false + * @since 0.6.1 + */ + s._masterMute = false; + // OJR references to the methods were not working, so the code had to be duplicated here + Object.defineProperty(s, "muted", { + get: function () {return this._masterMute;}, + set: function (value) { + if (value == null) {return false;} + + this._masterMute = value; + if (!this.activePlugin || !this.activePlugin.setMute || !this.activePlugin.setMute(value)) { + var instances = this._instances; + for (var i = 0, l = instances.length; i < l; i++) { + instances[i].setMasterMute(value); + } + } + return true; + } + }); + + /** + * Get the active plugins capabilities, which help determine if a plugin can be used in the current environment, + * or if the plugin supports a specific feature. Capabilities include: + *
            + *
          • panning: If the plugin can pan audio from left to right
          • + *
          • volume; If the plugin can control audio volume.
          • + *
          • tracks: The maximum number of audio tracks that can be played back at a time. This will be -1 + * if there is no known limit.
          • + *
            An entry for each file type in {{#crossLink "Sound/SUPPORTED_EXTENSIONS:property"}}{{/crossLink}}: + *
          • mp3: If MP3 audio is supported.
          • + *
          • ogg: If OGG audio is supported.
          • + *
          • wav: If WAV audio is supported.
          • + *
          • mpeg: If MPEG audio is supported.
          • + *
          • m4a: If M4A audio is supported.
          • + *
          • mp4: If MP4 audio is supported.
          • + *
          • aiff: If aiff audio is supported.
          • + *
          • wma: If wma audio is supported.
          • + *
          • mid: If mid audio is supported.
          • + *
          + * + * You can get a specific capability of the active plugin using standard object notation + * + *

          Example

          + * + * var mp3 = createjs.Sound.capabilities.mp3; + * + * Note this property is read only. + * + * @property capabilities + * @type {Object} + * @static + * @readOnly + * @since 0.6.1 + */ + Object.defineProperty(s, "capabilities", { + get: function () { + if (s.activePlugin == null) {return null;} + return s.activePlugin._capabilities; + }, + set: function (value) { return false;} + }); + + +// Class Private properties + /** + * Determines if the plugins have been registered. If false, the first call to play() will instantiate the default + * plugins ({{#crossLink "WebAudioPlugin"}}{{/crossLink}}, followed by {{#crossLink "HTMLAudioPlugin"}}{{/crossLink}}). + * If plugins have been registered, but none are applicable, then sound playback will fail. + * @property _pluginsRegistered + * @type {Boolean} + * @default false + * @static + * @protected + */ + s._pluginsRegistered = false; + + /** + * Used internally to assign unique IDs to each AbstractSoundInstance. + * @property _lastID + * @type {Number} + * @static + * @protected + */ + s._lastID = 0; + + /** + * An array containing all currently playing instances. This allows Sound to control the volume, mute, and playback of + * all instances when using static APIs like {{#crossLink "Sound/stop"}}{{/crossLink}} and {{#crossLink "Sound/setVolume"}}{{/crossLink}}. + * When an instance has finished playback, it gets removed via the {{#crossLink "Sound/finishedPlaying"}}{{/crossLink}} + * method. If the user replays an instance, it gets added back in via the {{#crossLink "Sound/_beginPlaying"}}{{/crossLink}} + * method. + * @property _instances + * @type {Array} + * @protected + * @static + */ + s._instances = []; + + /** + * An object hash storing objects with sound sources, startTime, and duration via there corresponding ID. + * @property _idHash + * @type {Object} + * @protected + * @static + */ + s._idHash = {}; + + /** + * An object hash that stores preloading sound sources via the parsed source that is passed to the plugin. Contains the + * source, id, and data that was passed in by the user. Parsed sources can contain multiple instances of source, id, + * and data. + * @property _preloadHash + * @type {Object} + * @protected + * @static + */ + s._preloadHash = {}; + + /** + * An object hash storing {{#crossLink "PlayPropsConfig"}}{{/crossLink}} via the parsed source that is passed as defaultPlayProps in + * {{#crossLink "Sound/registerSound"}}{{/crossLink}} and {{#crossLink "Sound/registerSounds"}}{{/crossLink}}. + * @property _defaultPlayPropsHash + * @type {Object} + * @protected + * @static + * @since 0.6.1 + */ + s._defaultPlayPropsHash = {}; + + +// EventDispatcher methods: + s.addEventListener = null; + s.removeEventListener = null; + s.removeAllEventListeners = null; + s.dispatchEvent = null; + s.hasEventListener = null; + s._listeners = null; + + createjs.EventDispatcher.initialize(s); // inject EventDispatcher methods. + + +// Events + /** + * This event is fired when a file finishes loading internally. This event is fired for each loaded sound, + * so any handler methods should look up the event.src to handle a particular sound. + * @event fileload + * @param {Object} target The object that dispatched the event. + * @param {String} type The event type. + * @param {String} src The source of the sound that was loaded. + * @param {String} [id] The id passed in when the sound was registered. If one was not provided, it will be null. + * @param {Number|Object} [data] Any additional data associated with the item. If not provided, it will be undefined. + * @since 0.4.1 + */ + + /** + * This event is fired when a file fails loading internally. This event is fired for each loaded sound, + * so any handler methods should look up the event.src to handle a particular sound. + * @event fileerror + * @param {Object} target The object that dispatched the event. + * @param {String} type The event type. + * @param {String} src The source of the sound that was loaded. + * @param {String} [id] The id passed in when the sound was registered. If one was not provided, it will be null. + * @param {Number|Object} [data] Any additional data associated with the item. If not provided, it will be undefined. + * @since 0.6.0 + */ + + +// Class Public Methods + /** + * Get the preload rules to allow Sound to be used as a plugin by PreloadJS. + * Any load calls that have the matching type or extension will fire the callback method, and use the resulting + * object, which is potentially modified by Sound. This helps when determining the correct path, as well as + * registering the audio instance(s) with Sound. This method should not be called, except by PreloadJS. + * @method getPreloadHandlers + * @return {Object} An object containing: + *
          • callback: A preload callback that is fired when a file is added to PreloadJS, which provides + * Sound a mechanism to modify the load parameters, select the correct file format, register the sound, etc.
          • + *
          • types: A list of file types that are supported by Sound (currently supports "sound").
          • + *
          • extensions: A list of file extensions that are supported by Sound (see {{#crossLink "Sound/SUPPORTED_EXTENSIONS:property"}}{{/crossLink}}).
          + * @static + * @protected + */ + s.getPreloadHandlers = function () { + return { + callback:createjs.proxy(s.initLoad, s), + types:["sound"], + extensions:s.SUPPORTED_EXTENSIONS + }; + }; + + /** + * Used to dispatch fileload events from internal loading. + * @method _handleLoadComplete + * @param event A loader event. + * @protected + * @static + * @since 0.6.0 + */ + s._handleLoadComplete = function(event) { + var src = event.target.getItem().src; + if (!s._preloadHash[src]) {return;} + + for (var i = 0, l = s._preloadHash[src].length; i < l; i++) { + var item = s._preloadHash[src][i]; + s._preloadHash[src][i] = true; + + if (!s.hasEventListener("fileload")) { continue; } + + var event = new createjs.Event("fileload"); + event.src = item.src; + event.id = item.id; + event.data = item.data; + event.sprite = item.sprite; + + s.dispatchEvent(event); + } + }; + + /** + * Used to dispatch error events from internal preloading. + * @param event + * @protected + * @since 0.6.0 + * @static + */ + s._handleLoadError = function(event) { + var src = event.target.getItem().src; + if (!s._preloadHash[src]) {return;} + + for (var i = 0, l = s._preloadHash[src].length; i < l; i++) { + var item = s._preloadHash[src][i]; + s._preloadHash[src][i] = false; + + if (!s.hasEventListener("fileerror")) { continue; } + + var event = new createjs.Event("fileerror"); + event.src = item.src; + event.id = item.id; + event.data = item.data; + event.sprite = item.sprite; + + s.dispatchEvent(event); + } + }; + + /** + * Used by {{#crossLink "Sound/registerPlugins"}}{{/crossLink}} to register a Sound plugin. + * + * @method _registerPlugin + * @param {Object} plugin The plugin class to install. + * @return {Boolean} Whether the plugin was successfully initialized. + * @static + * @private + */ + s._registerPlugin = function (plugin) { + // Note: Each plugin is passed in as a class reference, but we store the activePlugin as an instance + if (plugin.isSupported()) { + s.activePlugin = new plugin(); + return true; + } + return false; + }; + + /** + * Register a list of Sound plugins, in order of precedence. To register a single plugin, pass a single element in the array. + * + *

          Example

          + * + * createjs.FlashAudioPlugin.swfPath = "../src/soundjs/flashaudio/"; + * createjs.Sound.registerPlugins([createjs.WebAudioPlugin, createjs.HTMLAudioPlugin, createjs.FlashAudioPlugin]); + * + * @method registerPlugins + * @param {Array} plugins An array of plugins classes to install. + * @return {Boolean} Whether a plugin was successfully initialized. + * @static + */ + s.registerPlugins = function (plugins) { + s._pluginsRegistered = true; + for (var i = 0, l = plugins.length; i < l; i++) { + if (s._registerPlugin(plugins[i])) { + return true; + } + } + return false; + }; + + /** + * Initialize the default plugins. This method is automatically called when any audio is played or registered before + * the user has manually registered plugins, and enables Sound to work without manual plugin setup. Currently, the + * default plugins are {{#crossLink "WebAudioPlugin"}}{{/crossLink}} followed by {{#crossLink "HTMLAudioPlugin"}}{{/crossLink}}. + * + *

          Example

          + * + * if (!createjs.initializeDefaultPlugins()) { return; } + * + * @method initializeDefaultPlugins + * @returns {Boolean} True if a plugin was initialized, false otherwise. + * @since 0.4.0 + * @static + */ + s.initializeDefaultPlugins = function () { + if (s.activePlugin != null) {return true;} + if (s._pluginsRegistered) {return false;} + if (s.registerPlugins([createjs.WebAudioPlugin, createjs.HTMLAudioPlugin])) {return true;} + return false; + }; + + /** + * Determines if Sound has been initialized, and a plugin has been activated. + * + *

          Example

          + * This example sets up a Flash fallback, but only if there is no plugin specified yet. + * + * if (!createjs.Sound.isReady()) { + * createjs.FlashAudioPlugin.swfPath = "../src/soundjs/flashaudio/"; + * createjs.Sound.registerPlugins([createjs.WebAudioPlugin, createjs.HTMLAudioPlugin, createjs.FlashAudioPlugin]); + * } + * + * @method isReady + * @return {Boolean} If Sound has initialized a plugin. + * @static + */ + s.isReady = function () { + return (s.activePlugin != null); + }; + + /** + * Deprecated, please use {{#crossLink "Sound/capabilities:property"}}{{/crossLink}} instead. + * + * @method getCapabilities + * @return {Object} An object containing the capabilities of the active plugin. + * @static + * @deprecated + */ + s.getCapabilities = function () { + if (s.activePlugin == null) {return null;} + return s.activePlugin._capabilities; + }; + + /** + * Deprecated, please use {{#crossLink "Sound/capabilities:property"}}{{/crossLink}} instead. + * + * @method getCapability + * @param {String} key The capability to retrieve + * @return {Number|Boolean} The value of the capability. + * @static + * @see getCapabilities + * @deprecated + */ + s.getCapability = function (key) { + if (s.activePlugin == null) {return null;} + return s.activePlugin._capabilities[key]; + }; + + /** + * Process manifest items from PreloadJS. This method is intended + * for usage by a plugin, and not for direct interaction. + * @method initLoad + * @param {Object} src The object to load. + * @return {Object|AbstractLoader} An instance of AbstractLoader. + * @protected + * @static + */ + s.initLoad = function (loadItem) { + return s._registerSound(loadItem); + }; + + /** + * Internal method for loading sounds. This should not be called directly. + * + * @method _registerSound + * @param {Object} src The object to load, containing src property and optionally containing id and data. + * @return {Object} An object with the modified values that were passed in, which defines the sound. + * Returns false if the source cannot be parsed or no plugins can be initialized. + * Returns true if the source is already loaded. + * @static + * @private + * @since 0.6.0 + */ + + s._registerSound = function (loadItem) { + if (!s.initializeDefaultPlugins()) {return false;} + + var details; + if (loadItem.src instanceof Object) { + details = s._parseSrc(loadItem.src); + details.src = loadItem.path + details.src; + } else { + details = s._parsePath(loadItem.src); + } + if (details == null) {return false;} + loadItem.src = details.src; + loadItem.type = "sound"; + + var data = loadItem.data; + var numChannels = null; + if (data != null) { + if (!isNaN(data.channels)) { + numChannels = parseInt(data.channels); + } else if (!isNaN(data)) { + numChannels = parseInt(data); + } + + if(data.audioSprite) { + var sp; + for(var i = data.audioSprite.length; i--; ) { + sp = data.audioSprite[i]; + s._idHash[sp.id] = {src: loadItem.src, startTime: parseInt(sp.startTime), duration: parseInt(sp.duration)}; + + if (sp.defaultPlayProps) { + s._defaultPlayPropsHash[sp.id] = createjs.PlayPropsConfig.create(sp.defaultPlayProps); + } + } + } + } + if (loadItem.id != null) {s._idHash[loadItem.id] = {src: loadItem.src}}; + var loader = s.activePlugin.register(loadItem); + + SoundChannel.create(loadItem.src, numChannels); + + // return the number of instances to the user. This will also be returned in the load event. + if (data == null || !isNaN(data)) { + loadItem.data = numChannels || SoundChannel.maxPerChannel(); + } else { + loadItem.data.channels = numChannels || SoundChannel.maxPerChannel(); + } + + if (loader.type) {loadItem.type = loader.type;} + + if (loadItem.defaultPlayProps) { + s._defaultPlayPropsHash[loadItem.src] = createjs.PlayPropsConfig.create(loadItem.defaultPlayProps); + } + return loader; + }; + + /** + * Register an audio file for loading and future playback in Sound. This is automatically called when using + * PreloadJS. It is recommended to register all sounds that + * need to be played back in order to properly prepare and preload them. Sound does internal preloading when required. + * + *

          Example

          + * + * createjs.Sound.alternateExtensions = ["mp3"]; + * createjs.Sound.on("fileload", handleLoad); // add an event listener for when load is completed + * createjs.Sound.registerSound("myAudioPath/mySound.ogg", "myID", 3); + * createjs.Sound.registerSound({ogg:"path1/mySound.ogg", mp3:"path2/mySoundNoExtension"}, "myID", 3); + * + * + * @method registerSound + * @param {String | Object} src The source or an Object with a "src" property or an Object with multiple extension labeled src properties. + * @param {String} [id] An id specified by the user to play the sound later. Note id is required for when src is multiple extension labeled src properties. + * @param {Number | Object} [data] Data associated with the item. Sound uses the data parameter as the number of + * channels for an audio instance, however a "channels" property can be appended to the data object if it is used + * for other information. The audio channels will set a default based on plugin if no value is found. + * Sound also uses the data property to hold an {{#crossLink "AudioSprite"}}{{/crossLink}} array of objects in the following format {id, startTime, duration}.
          + * id used to play the sound later, in the same manner as a sound src with an id.
          + * startTime is the initial offset to start playback and loop from, in milliseconds.
          + * duration is the amount of time to play the clip for, in milliseconds.
          + * This allows Sound to support audio sprites that are played back by id. + * @param {string} basePath Set a path that will be prepended to src for loading. + * @param {Object | PlayPropsConfig} defaultPlayProps Optional Playback properties that will be set as the defaults on any new AbstractSoundInstance. + * See {{#crossLink "PlayPropsConfig"}}{{/crossLink}} for options. + * @return {Object} An object with the modified values that were passed in, which defines the sound. + * Returns false if the source cannot be parsed or no plugins can be initialized. + * Returns true if the source is already loaded. + * @static + * @since 0.4.0 + */ + s.registerSound = function (src, id, data, basePath, defaultPlayProps) { + var loadItem = {src: src, id: id, data:data, defaultPlayProps:defaultPlayProps}; + if (src instanceof Object && src.src) { + basePath = id; + loadItem = src; + } + loadItem = createjs.LoadItem.create(loadItem); + loadItem.path = basePath; + + if (basePath != null && !(loadItem.src instanceof Object)) {loadItem.src = basePath + src;} + + var loader = s._registerSound(loadItem); + if(!loader) {return false;} + + if (!s._preloadHash[loadItem.src]) { s._preloadHash[loadItem.src] = [];} + s._preloadHash[loadItem.src].push(loadItem); + if (s._preloadHash[loadItem.src].length == 1) { + // OJR note this will disallow reloading a sound if loading fails or the source changes + loader.on("complete", createjs.proxy(this._handleLoadComplete, this)); + loader.on("error", createjs.proxy(this._handleLoadError, this)); + s.activePlugin.preload(loader); + } else { + if (s._preloadHash[loadItem.src][0] == true) {return true;} + } + + return loadItem; + }; + + /** + * Register an array of audio files for loading and future playback in Sound. It is recommended to register all + * sounds that need to be played back in order to properly prepare and preload them. Sound does internal preloading + * when required. + * + *

          Example

          + * + * var assetPath = "./myAudioPath/"; + * var sounds = [ + * {src:"asset0.ogg", id:"example"}, + * {src:"asset1.ogg", id:"1", data:6}, + * {src:"asset2.mp3", id:"works"} + * {src:{mp3:"path1/asset3.mp3", ogg:"path2/asset3NoExtension}, id:"better"} + * ]; + * createjs.Sound.alternateExtensions = ["mp3"]; // if the passed extension is not supported, try this extension + * createjs.Sound.on("fileload", handleLoad); // call handleLoad when each sound loads + * createjs.Sound.registerSounds(sounds, assetPath); + * + * @method registerSounds + * @param {Array} sounds An array of objects to load. Objects are expected to be in the format needed for + * {{#crossLink "Sound/registerSound"}}{{/crossLink}}: {src:srcURI, id:ID, data:Data} + * with "id" and "data" being optional. + * You can also pass an object with path and manifest properties, where path is a basePath and manifest is an array of objects to load. + * Note id is required if src is an object with extension labeled src properties. + * @param {string} basePath Set a path that will be prepended to each src when loading. When creating, playing, or removing + * audio that was loaded with a basePath by src, the basePath must be included. + * @return {Object} An array of objects with the modified values that were passed in, which defines each sound. + * Like registerSound, it will return false for any values when the source cannot be parsed or if no plugins can be initialized. + * Also, it will return true for any values when the source is already loaded. + * @static + * @since 0.6.0 + */ + s.registerSounds = function (sounds, basePath) { + var returnValues = []; + if (sounds.path) { + if (!basePath) { + basePath = sounds.path; + } else { + basePath = basePath + sounds.path; + } + sounds = sounds.manifest; + // TODO document this feature + } + for (var i = 0, l = sounds.length; i < l; i++) { + returnValues[i] = createjs.Sound.registerSound(sounds[i].src, sounds[i].id, sounds[i].data, basePath, sounds[i].defaultPlayProps); + } + return returnValues; + }; + + /** + * Remove a sound that has been registered with {{#crossLink "Sound/registerSound"}}{{/crossLink}} or + * {{#crossLink "Sound/registerSounds"}}{{/crossLink}}. + *
          Note this will stop playback on active instances playing this sound before deleting them. + *
          Note if you passed in a basePath, you need to pass it or prepend it to the src here. + * + *

          Example

          + * + * createjs.Sound.removeSound("myID"); + * createjs.Sound.removeSound("myAudioBasePath/mySound.ogg"); + * createjs.Sound.removeSound("myPath/myOtherSound.mp3", "myBasePath/"); + * createjs.Sound.removeSound({mp3:"musicNoExtension", ogg:"music.ogg"}, "myBasePath/"); + * + * @method removeSound + * @param {String | Object} src The src or ID of the audio, or an Object with a "src" property, or an Object with multiple extension labeled src properties. + * @param {string} basePath Set a path that will be prepended to each src when removing. + * @return {Boolean} True if sound is successfully removed. + * @static + * @since 0.4.1 + */ + s.removeSound = function(src, basePath) { + if (s.activePlugin == null) {return false;} + + if (src instanceof Object && src.src) {src = src.src;} + + var details; + if (src instanceof Object) { + details = s._parseSrc(src); + } else { + src = s._getSrcById(src).src; + details = s._parsePath(src); + } + if (details == null) {return false;} + src = details.src; + if (basePath != null) {src = basePath + src;} + + for(var prop in s._idHash){ + if(s._idHash[prop].src == src) { + delete(s._idHash[prop]); + } + } + + // clear from SoundChannel, which also stops and deletes all instances + SoundChannel.removeSrc(src); + + delete(s._preloadHash[src]); + + s.activePlugin.removeSound(src); + + return true; + }; + + /** + * Remove an array of audio files that have been registered with {{#crossLink "Sound/registerSound"}}{{/crossLink}} or + * {{#crossLink "Sound/registerSounds"}}{{/crossLink}}. + *
          Note this will stop playback on active instances playing this audio before deleting them. + *
          Note if you passed in a basePath, you need to pass it or prepend it to the src here. + * + *

          Example

          + * + * assetPath = "./myPath/"; + * var sounds = [ + * {src:"asset0.ogg", id:"example"}, + * {src:"asset1.ogg", id:"1", data:6}, + * {src:"asset2.mp3", id:"works"} + * ]; + * createjs.Sound.removeSounds(sounds, assetPath); + * + * @method removeSounds + * @param {Array} sounds An array of objects to remove. Objects are expected to be in the format needed for + * {{#crossLink "Sound/removeSound"}}{{/crossLink}}: {srcOrID:srcURIorID}. + * You can also pass an object with path and manifest properties, where path is a basePath and manifest is an array of objects to remove. + * @param {string} basePath Set a path that will be prepended to each src when removing. + * @return {Object} An array of Boolean values representing if the sounds with the same array index were + * successfully removed. + * @static + * @since 0.4.1 + */ + s.removeSounds = function (sounds, basePath) { + var returnValues = []; + if (sounds.path) { + if (!basePath) { + basePath = sounds.path; + } else { + basePath = basePath + sounds.path; + } + sounds = sounds.manifest; + } + for (var i = 0, l = sounds.length; i < l; i++) { + returnValues[i] = createjs.Sound.removeSound(sounds[i].src, basePath); + } + return returnValues; + }; + + /** + * Remove all sounds that have been registered with {{#crossLink "Sound/registerSound"}}{{/crossLink}} or + * {{#crossLink "Sound/registerSounds"}}{{/crossLink}}. + *
          Note this will stop playback on all active sound instances before deleting them. + * + *

          Example

          + * + * createjs.Sound.removeAllSounds(); + * + * @method removeAllSounds + * @static + * @since 0.4.1 + */ + s.removeAllSounds = function() { + s._idHash = {}; + s._preloadHash = {}; + SoundChannel.removeAll(); + if (s.activePlugin) {s.activePlugin.removeAllSounds();} + }; + + /** + * Check if a source has been loaded by internal preloaders. This is necessary to ensure that sounds that are + * not completed preloading will not kick off a new internal preload if they are played. + * + *

          Example

          + * + * var mySound = "assetPath/asset0.ogg"; + * if(createjs.Sound.loadComplete(mySound) { + * createjs.Sound.play(mySound); + * } + * + * @method loadComplete + * @param {String} src The src or id that is being loaded. + * @return {Boolean} If the src is already loaded. + * @since 0.4.0 + * @static + */ + s.loadComplete = function (src) { + if (!s.isReady()) { return false; } + var details = s._parsePath(src); + if (details) { + src = s._getSrcById(details.src).src; + } else { + src = s._getSrcById(src).src; + } + if(s._preloadHash[src] == undefined) {return false;} + return (s._preloadHash[src][0] == true); // src only loads once, so if it's true for the first it's true for all + }; + + /** + * Parse the path of a sound. Alternate extensions will be attempted in order if the + * current extension is not supported + * @method _parsePath + * @param {String} value The path to an audio source. + * @return {Object} A formatted object that can be registered with the {{#crossLink "Sound/activePlugin:property"}}{{/crossLink}} + * and returned to a preloader like PreloadJS. + * @protected + * @static + */ + s._parsePath = function (value) { + if (typeof(value) != "string") {value = value.toString();} + + var match = value.match(s.FILE_PATTERN); + if (match == null) {return false;} + + var name = match[4]; + var ext = match[5]; + var c = s.capabilities; + var i = 0; + while (!c[ext]) { + ext = s.alternateExtensions[i++]; + if (i > s.alternateExtensions.length) { return null;} // no extensions are supported + } + value = value.replace("."+match[5], "."+ext); + + var ret = {name:name, src:value, extension:ext}; + return ret; + }; + + /** + * Parse the path of a sound based on properties of src matching with supported extensions. + * Returns false if none of the properties are supported + * @method _parseSrc + * @param {Object} value The paths to an audio source, indexed by extension type. + * @return {Object} A formatted object that can be registered with the {{#crossLink "Sound/activePlugin:property"}}{{/crossLink}} + * and returned to a preloader like PreloadJS. + * @protected + * @static + */ + s._parseSrc = function (value) { + var ret = {name:undefined, src:undefined, extension:undefined}; + var c = s.capabilities; + + for (var prop in value) { + if(value.hasOwnProperty(prop) && c[prop]) { + ret.src = value[prop]; + ret.extension = prop; + break; + } + } + if (!ret.src) {return false;} // no matches + + var i = ret.src.lastIndexOf("/"); + if (i != -1) { + ret.name = ret.src.slice(i+1); + } else { + ret.name = ret.src; + } + + return ret; + }; + + /* --------------- + Static API. + --------------- */ + /** + * Play a sound and get a {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} to control. If the sound fails to play, a + * AbstractSoundInstance will still be returned, and have a playState of {{#crossLink "Sound/PLAY_FAILED:property"}}{{/crossLink}}. + * Note that even on sounds with failed playback, you may still be able to call AbstractSoundInstance {{#crossLink "AbstractSoundInstance/play"}}{{/crossLink}}, + * since the failure could be due to lack of available channels. If the src does not have a supported extension or + * if there is no available plugin, a default AbstractSoundInstance will be returned which will not play any audio, but will not generate errors. + * + *

          Example

          + * + * createjs.Sound.on("fileload", handleLoad); + * createjs.Sound.registerSound("myAudioPath/mySound.mp3", "myID", 3); + * function handleLoad(event) { + * createjs.Sound.play("myID"); + * // store off AbstractSoundInstance for controlling + * var myInstance = createjs.Sound.play("myID", {interrupt: createjs.Sound.INTERRUPT_ANY, loop:-1}); + * } + * + * NOTE to create an audio sprite that has not already been registered, both startTime and duration need to be set. + * This is only when creating a new audio sprite, not when playing using the id of an already registered audio sprite. + * + * Parameters Deprecated
          + * The parameters for this method are deprecated in favor of a single parameter that is an Object or {{#crossLink "PlayPropsConfig"}}{{/crossLink}}. + * + * @method play + * @param {String} src The src or ID of the audio. + * @param {String | Object} [interrupt="none"|options] This parameter will be renamed playProps in the next release.
          + * This parameter can be an instance of {{#crossLink "PlayPropsConfig"}}{{/crossLink}} or an Object that contains any or all optional properties by name, + * including: interrupt, delay, offset, loop, volume, pan, startTime, and duration (see the above code sample). + *
          OR
          + * Deprecated How to interrupt any currently playing instances of audio with the same source, + * if the maximum number of instances of the sound are already playing. Values are defined as INTERRUPT_TYPE + * constants on the Sound class, with the default defined by {{#crossLink "Sound/defaultInterruptBehavior:property"}}{{/crossLink}}. + * @param {Number} [delay=0] Deprecated The amount of time to delay the start of audio playback, in milliseconds. + * @param {Number} [offset=0] Deprecated The offset from the start of the audio to begin playback, in milliseconds. + * @param {Number} [loop=0] Deprecated How many times the audio loops when it reaches the end of playback. The default is 0 (no + * loops), and -1 can be used for infinite playback. + * @param {Number} [volume=1] Deprecated The volume of the sound, between 0 and 1. Note that the master volume is applied + * against the individual volume. + * @param {Number} [pan=0] Deprecated The left-right pan of the sound (if supported), between -1 (left) and 1 (right). + * @param {Number} [startTime=null] Deprecated To create an audio sprite (with duration), the initial offset to start playback and loop from, in milliseconds. + * @param {Number} [duration=null] Deprecated To create an audio sprite (with startTime), the amount of time to play the clip for, in milliseconds. + * @return {AbstractSoundInstance} A {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} that can be controlled after it is created. + * @static + */ + s.play = function (src, interrupt, delay, offset, loop, volume, pan, startTime, duration) { + var playProps; + if (interrupt instanceof Object || interrupt instanceof createjs.PlayPropsConfig) { + playProps = createjs.PlayPropsConfig.create(interrupt); + } else { + playProps = createjs.PlayPropsConfig.create({interrupt:interrupt, delay:delay, offset:offset, loop:loop, volume:volume, pan:pan, startTime:startTime, duration:duration}); + } + var instance = s.createInstance(src, playProps.startTime, playProps.duration); + var ok = s._playInstance(instance, playProps); + if (!ok) {instance._playFailed();} + return instance; + }; + + /** + * Creates a {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} using the passed in src. If the src does not have a + * supported extension or if there is no available plugin, a default AbstractSoundInstance will be returned that can be + * called safely but does nothing. + * + *

          Example

          + * + * var myInstance = null; + * createjs.Sound.on("fileload", handleLoad); + * createjs.Sound.registerSound("myAudioPath/mySound.mp3", "myID", 3); + * function handleLoad(event) { + * myInstance = createjs.Sound.createInstance("myID"); + * // alternately we could call the following + * myInstance = createjs.Sound.createInstance("myAudioPath/mySound.mp3"); + * } + * + * NOTE to create an audio sprite that has not already been registered, both startTime and duration need to be set. + * This is only when creating a new audio sprite, not when playing using the id of an already registered audio sprite. + * + * @method createInstance + * @param {String} src The src or ID of the audio. + * @param {Number} [startTime=null] To create an audio sprite (with duration), the initial offset to start playback and loop from, in milliseconds. + * @param {Number} [duration=null] To create an audio sprite (with startTime), the amount of time to play the clip for, in milliseconds. + * @return {AbstractSoundInstance} A {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} that can be controlled after it is created. + * Unsupported extensions will return the default AbstractSoundInstance. + * @since 0.4.0 + * @static + */ + s.createInstance = function (src, startTime, duration) { + if (!s.initializeDefaultPlugins()) {return new createjs.DefaultSoundInstance(src, startTime, duration);} + + var defaultPlayProps = s._defaultPlayPropsHash[src]; // for audio sprites, which create and store defaults by id + src = s._getSrcById(src); + + var details = s._parsePath(src.src); + + var instance = null; + if (details != null && details.src != null) { + SoundChannel.create(details.src); + if (startTime == null) {startTime = src.startTime;} + instance = s.activePlugin.create(details.src, startTime, duration || src.duration); + + defaultPlayProps = defaultPlayProps || s._defaultPlayPropsHash[details.src]; + if(defaultPlayProps) { + instance.applyPlayProps(defaultPlayProps); + } + } else { + instance = new createjs.DefaultSoundInstance(src, startTime, duration); + } + + instance.uniqueId = s._lastID++; + + return instance; + }; + + /** + * Stop all audio (global stop). Stopped audio is reset, and not paused. To play audio that has been stopped, + * call AbstractSoundInstance {{#crossLink "AbstractSoundInstance/play"}}{{/crossLink}}. + * + *

          Example

          + * + * createjs.Sound.stop(); + * + * @method stop + * @static + */ + s.stop = function () { + var instances = this._instances; + for (var i = instances.length; i--; ) { + instances[i].stop(); // NOTE stop removes instance from this._instances + } + }; + + /** + * Deprecated, please use {{#crossLink "Sound/volume:property"}}{{/crossLink}} instead. + * + * @method setVolume + * @param {Number} value The master volume value. The acceptable range is 0-1. + * @static + * @deprecated + */ + s.setVolume = function (value) { + if (Number(value) == null) {return false;} + value = Math.max(0, Math.min(1, value)); + s._masterVolume = value; + if (!this.activePlugin || !this.activePlugin.setVolume || !this.activePlugin.setVolume(value)) { + var instances = this._instances; + for (var i = 0, l = instances.length; i < l; i++) { + instances[i].setMasterVolume(value); + } + } + }; + + /** + * Deprecated, please use {{#crossLink "Sound/volume:property"}}{{/crossLink}} instead. + * + * @method getVolume + * @return {Number} The master volume, in a range of 0-1. + * @static + * @deprecated + */ + s.getVolume = function () { + return this._masterVolume; + }; + + /** + * Deprecated, please use {{#crossLink "Sound/muted:property"}}{{/crossLink}} instead. + * + * @method setMute + * @param {Boolean} value Whether the audio should be muted or not. + * @return {Boolean} If the mute was set. + * @static + * @since 0.4.0 + * @deprecated + */ + s.setMute = function (value) { + if (value == null) {return false;} + + this._masterMute = value; + if (!this.activePlugin || !this.activePlugin.setMute || !this.activePlugin.setMute(value)) { + var instances = this._instances; + for (var i = 0, l = instances.length; i < l; i++) { + instances[i].setMasterMute(value); + } + } + return true; + }; + + /** + * Deprecated, please use {{#crossLink "Sound/muted:property"}}{{/crossLink}} instead. + * + * @method getMute + * @return {Boolean} The mute value of Sound. + * @static + * @since 0.4.0 + * @deprecated + */ + s.getMute = function () { + return this._masterMute; + }; + + /** + * Set the default playback properties for all new SoundInstances of the passed in src or ID. + * See {{#crossLink "PlayPropsConfig"}}{{/crossLink}} for available properties. + * + * @method setDefaultPlayProps + * @param {String} src The src or ID used to register the audio. + * @param {Object | PlayPropsConfig} playProps The playback properties you would like to set. + * @since 0.6.1 + */ + s.setDefaultPlayProps = function(src, playProps) { + src = s._getSrcById(src); + s._defaultPlayPropsHash[s._parsePath(src.src).src] = createjs.PlayPropsConfig.create(playProps); + }; + + /** + * Get the default playback properties for the passed in src or ID. These properties are applied to all + * new SoundInstances. Returns null if default does not exist. + * + * @method getDefaultPlayProps + * @param {String} src The src or ID used to register the audio. + * @returns {PlayPropsConfig} returns an existing PlayPropsConfig or null if one does not exist + * @since 0.6.1 + */ + s.getDefaultPlayProps = function(src) { + src = s._getSrcById(src); + return s._defaultPlayPropsHash[s._parsePath(src.src).src]; + }; + + + /* --------------- + Internal methods + --------------- */ + /** + * Play an instance. This is called by the static API, as well as from plugins. This allows the core class to + * control delays. + * @method _playInstance + * @param {AbstractSoundInstance} instance The {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} to start playing. + * @param {PlayPropsConfig} playProps A PlayPropsConfig object. + * @return {Boolean} If the sound can start playing. Sounds that fail immediately will return false. Sounds that + * have a delay will return true, but may still fail to play. + * @protected + * @static + */ + s._playInstance = function (instance, playProps) { + var defaultPlayProps = s._defaultPlayPropsHash[instance.src] || {}; + if (playProps.interrupt == null) {playProps.interrupt = defaultPlayProps.interrupt || s.defaultInterruptBehavior}; + if (playProps.delay == null) {playProps.delay = defaultPlayProps.delay || 0;} + if (playProps.offset == null) {playProps.offset = instance.getPosition();} + if (playProps.loop == null) {playProps.loop = instance.loop;} + if (playProps.volume == null) {playProps.volume = instance.volume;} + if (playProps.pan == null) {playProps.pan = instance.pan;} + + if (playProps.delay == 0) { + var ok = s._beginPlaying(instance, playProps); + if (!ok) {return false;} + } else { + //Note that we can't pass arguments to proxy OR setTimeout (IE only), so just wrap the function call. + // OJR WebAudio may want to handle this differently, so it might make sense to move this functionality into the plugins in the future + var delayTimeoutId = setTimeout(function () { + s._beginPlaying(instance, playProps); + }, playProps.delay); + instance.delayTimeoutId = delayTimeoutId; + } + + this._instances.push(instance); + + return true; + }; + + /** + * Begin playback. This is called immediately or after delay by {{#crossLink "Sound/playInstance"}}{{/crossLink}}. + * @method _beginPlaying + * @param {AbstractSoundInstance} instance A {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} to begin playback. + * @param {PlayPropsConfig} playProps A PlayPropsConfig object. + * @return {Boolean} If the sound can start playing. If there are no available channels, or the instance fails to + * start, this will return false. + * @protected + * @static + */ + s._beginPlaying = function (instance, playProps) { + if (!SoundChannel.add(instance, playProps.interrupt)) { + return false; + } + var result = instance._beginPlaying(playProps); + if (!result) { + var index = createjs.indexOf(this._instances, instance); + if (index > -1) {this._instances.splice(index, 1);} + return false; + } + return true; + }; + + /** + * Get the source of a sound via the ID passed in with a register call. If no ID is found the value is returned + * instead. + * @method _getSrcById + * @param {String} value The ID the sound was registered with. + * @return {String} The source of the sound if it has been registered with this ID or the value that was passed in. + * @protected + * @static + */ + s._getSrcById = function (value) { + return s._idHash[value] || {src: value}; + }; + + /** + * A sound has completed playback, been interrupted, failed, or been stopped. This method removes the instance from + * Sound management. It will be added again, if the sound re-plays. Note that this method is called from the + * instances themselves. + * @method _playFinished + * @param {AbstractSoundInstance} instance The instance that finished playback. + * @protected + * @static + */ + s._playFinished = function (instance) { + SoundChannel.remove(instance); + var index = createjs.indexOf(this._instances, instance); + if (index > -1) {this._instances.splice(index, 1);} // OJR this will always be > -1, there is no way for an instance to exist without being added to this._instances + }; + + createjs.Sound = Sound; + + /** + * An internal class that manages the number of active {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} instances for + * each sound type. This method is only used internally by the {{#crossLink "Sound"}}{{/crossLink}} class. + * + * The number of sounds is artificially limited by Sound in order to prevent over-saturation of a + * single sound, as well as to stay within hardware limitations, although the latter may disappear with better + * browser support. + * + * When a sound is played, this class ensures that there is an available instance, or interrupts an appropriate + * sound that is already playing. + * #class SoundChannel + * @param {String} src The source of the instances + * @param {Number} [max=1] The number of instances allowed + * @constructor + * @protected + */ + function SoundChannel(src, max) { + this.init(src, max); + } + + /* ------------ + Static API + ------------ */ + /** + * A hash of channel instances indexed by source. + * #property channels + * @type {Object} + * @static + */ + SoundChannel.channels = {}; + + /** + * Create a sound channel. Note that if the sound channel already exists, this will fail. + * #method create + * @param {String} src The source for the channel + * @param {Number} max The maximum amount this channel holds. The default is {{#crossLink "SoundChannel.maxDefault"}}{{/crossLink}}. + * @return {Boolean} If the channels were created. + * @static + */ + SoundChannel.create = function (src, max) { + var channel = SoundChannel.get(src); + if (channel == null) { + SoundChannel.channels[src] = new SoundChannel(src, max); + return true; + } + return false; + }; + /** + * Delete a sound channel, stop and delete all related instances. Note that if the sound channel does not exist, this will fail. + * #method remove + * @param {String} src The source for the channel + * @return {Boolean} If the channels were deleted. + * @static + */ + SoundChannel.removeSrc = function (src) { + var channel = SoundChannel.get(src); + if (channel == null) {return false;} + channel._removeAll(); // this stops and removes all active instances + delete(SoundChannel.channels[src]); + return true; + }; + /** + * Delete all sound channels, stop and delete all related instances. + * #method removeAll + * @static + */ + SoundChannel.removeAll = function () { + for(var channel in SoundChannel.channels) { + SoundChannel.channels[channel]._removeAll(); // this stops and removes all active instances + } + SoundChannel.channels = {}; + }; + /** + * Add an instance to a sound channel. + * #method add + * @param {AbstractSoundInstance} instance The instance to add to the channel + * @param {String} interrupt The interrupt value to use. Please see the {{#crossLink "Sound/play"}}{{/crossLink}} + * for details on interrupt modes. + * @return {Boolean} The success of the method call. If the channel is full, it will return false. + * @static + */ + SoundChannel.add = function (instance, interrupt) { + var channel = SoundChannel.get(instance.src); + if (channel == null) {return false;} + return channel._add(instance, interrupt); + }; + /** + * Remove an instance from the channel. + * #method remove + * @param {AbstractSoundInstance} instance The instance to remove from the channel + * @return The success of the method call. If there is no channel, it will return false. + * @static + */ + SoundChannel.remove = function (instance) { + var channel = SoundChannel.get(instance.src); + if (channel == null) {return false;} + channel._remove(instance); + return true; + }; + /** + * Get the maximum number of sounds you can have in a channel. + * #method maxPerChannel + * @return {Number} The maximum number of sounds you can have in a channel. + */ + SoundChannel.maxPerChannel = function () { + return p.maxDefault; + }; + /** + * Get a channel instance by its src. + * #method get + * @param {String} src The src to use to look up the channel + * @static + */ + SoundChannel.get = function (src) { + return SoundChannel.channels[src]; + }; + + var p = SoundChannel.prototype; + p.constructor = SoundChannel; + + /** + * REMOVED. Removed in favor of using `MySuperClass_constructor`. + * See {{#crossLink "Utility Methods/extend"}}{{/crossLink}} and {{#crossLink "Utility Methods/promote"}}{{/crossLink}} + * for details. + * + * There is an inheritance tutorial distributed with EaselJS in /tutorials/Inheritance. + * + * @method initialize + * @protected + * @deprecated + */ + // p.initialize = function() {}; // searchable for devs wondering where it is. + + + /** + * The source of the channel. + * #property src + * @type {String} + */ + p.src = null; + + /** + * The maximum number of instances in this channel. -1 indicates no limit + * #property max + * @type {Number} + */ + p.max = null; + + /** + * The default value to set for max, if it isn't passed in. Also used if -1 is passed. + * #property maxDefault + * @type {Number} + * @default 100 + * @since 0.4.0 + */ + p.maxDefault = 100; + + /** + * The current number of active instances. + * #property length + * @type {Number} + */ + p.length = 0; + + /** + * Initialize the channel. + * #method init + * @param {String} src The source of the channel + * @param {Number} max The maximum number of instances in the channel + * @protected + */ + p.init = function (src, max) { + this.src = src; + this.max = max || this.maxDefault; + if (this.max == -1) {this.max = this.maxDefault;} + this._instances = []; + }; + + /** + * Get an instance by index. + * #method get + * @param {Number} index The index to return. + * @return {AbstractSoundInstance} The AbstractSoundInstance at a specific instance. + */ + p._get = function (index) { + return this._instances[index]; + }; + + /** + * Add a new instance to the channel. + * #method add + * @param {AbstractSoundInstance} instance The instance to add. + * @return {Boolean} The success of the method call. If the channel is full, it will return false. + */ + p._add = function (instance, interrupt) { + if (!this._getSlot(interrupt, instance)) {return false;} + this._instances.push(instance); + this.length++; + return true; + }; + + /** + * Remove an instance from the channel, either when it has finished playing, or it has been interrupted. + * #method remove + * @param {AbstractSoundInstance} instance The instance to remove + * @return {Boolean} The success of the remove call. If the instance is not found in this channel, it will + * return false. + */ + p._remove = function (instance) { + var index = createjs.indexOf(this._instances, instance); + if (index == -1) {return false;} + this._instances.splice(index, 1); + this.length--; + return true; + }; + + /** + * Stop playback and remove all instances from the channel. Usually in response to a delete call. + * #method removeAll + */ + p._removeAll = function () { + // Note that stop() removes the item from the list + for (var i=this.length-1; i>=0; i--) { + this._instances[i].stop(); + } + }; + + /** + * Get an available slot depending on interrupt value and if slots are available. + * #method getSlot + * @param {String} interrupt The interrupt value to use. + * @param {AbstractSoundInstance} instance The sound instance that will go in the channel if successful. + * @return {Boolean} Determines if there is an available slot. Depending on the interrupt mode, if there are no slots, + * an existing AbstractSoundInstance may be interrupted. If there are no slots, this method returns false. + */ + p._getSlot = function (interrupt, instance) { + var target, replacement; + + if (interrupt != Sound.INTERRUPT_NONE) { + // First replacement candidate + replacement = this._get(0); + if (replacement == null) { + return true; + } + } + + for (var i = 0, l = this.max; i < l; i++) { + target = this._get(i); + + // Available Space + if (target == null) { + return true; + } + + // Audio is complete or not playing + if (target.playState == Sound.PLAY_FINISHED || + target.playState == Sound.PLAY_INTERRUPTED || + target.playState == Sound.PLAY_FAILED) { + replacement = target; + break; + } + + if (interrupt == Sound.INTERRUPT_NONE) { + continue; + } + + // Audio is a better candidate than the current target, according to playhead + if ((interrupt == Sound.INTERRUPT_EARLY && target.getPosition() < replacement.getPosition()) || + (interrupt == Sound.INTERRUPT_LATE && target.getPosition() > replacement.getPosition())) { + replacement = target; + } + } + + if (replacement != null) { + replacement._interrupt(); + this._remove(replacement); + return true; + } + return false; + }; + + p.toString = function () { + return "[Sound SoundChannel]"; + }; + // do not add SoundChannel to namespace + }()); //############################################################################## -// AbstractPlugin.js +// AbstractSoundInstance.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - - -// constructor: - /** - * A default plugin class used as a base for all other plugins. - * @class AbstractPlugin - * @constructor - * @since 0.6.0 - */ - - var AbstractPlugin = function () { - // private properties: - /** - * The capabilities of the plugin. - * method and is used internally. - * @property _capabilities - * @type {Object} - * @default null - * @protected - * @static - */ - this._capabilities = null; - - /** - * Object hash indexed by the source URI of all created loaders, used to properly destroy them if sources are removed. - * @type {Object} - * @protected - */ - this._loaders = {}; - - /** - * Object hash indexed by the source URI of each file to indicate if an audio source has begun loading, - * is currently loading, or has completed loading. Can be used to store non boolean data after loading - * is complete (for example arrayBuffers for web audio). - * @property _audioSources - * @type {Object} - * @protected - */ - this._audioSources = {}; - - /** - * Object hash indexed by the source URI of all created SoundInstances, updates the playbackResource if it loads after they are created, - * and properly destroy them if sources are removed - * @type {Object} - * @protected - */ - this._soundInstances = {}; - - /** - * The internal master volume value of the plugin. - * @property _volume - * @type {Number} - * @default 1 - * @protected - */ - this._volume = 1; - - /** - * A reference to a loader class used by a plugin that must be set. - * @type {Object} - * @protected - */ - this._loaderClass; - - /** - * A reference to an AbstractSoundInstance class used by a plugin that must be set. - * @type {Object} - * @protected; - */ - this._soundInstanceClass; - }; - var p = AbstractPlugin.prototype; - - /** - * REMOVED. Removed in favor of using `MySuperClass_constructor`. - * See {{#crossLink "Utility Methods/extend"}}{{/crossLink}} and {{#crossLink "Utility Methods/promote"}}{{/crossLink}} - * for details. - * - * There is an inheritance tutorial distributed with EaselJS in /tutorials/Inheritance. - * - * @method initialize - * @protected - * @deprecated - */ - // p.initialize = function() {}; // searchable for devs wondering where it is. - - -// Static Properties: -// NOTE THESE PROPERTIES NEED TO BE ADDED TO EACH PLUGIN - /** - * The capabilities of the plugin. This is generated via the _generateCapabilities method and is used internally. - * @property _capabilities - * @type {Object} - * @default null - * @protected - * @static - */ - AbstractPlugin._capabilities = null; - - /** - * Determine if the plugin can be used in the current browser/OS. - * @method isSupported - * @return {Boolean} If the plugin can be initialized. - * @static - */ - AbstractPlugin.isSupported = function () { - return true; - }; - - -// public methods: - /** - * Pre-register a sound for preloading and setup. This is called by {{#crossLink "Sound"}}{{/crossLink}}. - * Note all plugins provide a Loader instance, which PreloadJS - * can use to assist with preloading. - * @method register - * @param {String} loadItem An Object containing the source of the audio - * Note that not every plugin will manage this value. - * @return {Object} A result object, containing a "tag" for preloading purposes. - */ - p.register = function (loadItem) { - var loader = this._loaders[loadItem.src]; - if(loader && !loader.canceled) {return this._loaders[loadItem.src];} // already loading/loaded this, so don't load twice - // OJR potential issue that we won't be firing loaded event, might need to trigger if this is already loaded? - this._audioSources[loadItem.src] = true; - this._soundInstances[loadItem.src] = []; - loader = new this._loaderClass(loadItem); - loader.on("complete", createjs.proxy(this._handlePreloadComplete, this)); - this._loaders[loadItem.src] = loader; - return loader; - }; - - // note sound calls register before calling preload - /** - * Internally preload a sound. - * @method preload - * @param {Loader} loader The sound URI to load. - */ - p.preload = function (loader) { - loader.on("error", createjs.proxy(this._handlePreloadError, this)); - loader.load(); - }; - - /** - * Checks if preloading has started for a specific source. If the source is found, we can assume it is loading, - * or has already finished loading. - * @method isPreloadStarted - * @param {String} src The sound URI to check. - * @return {Boolean} - */ - p.isPreloadStarted = function (src) { - return (this._audioSources[src] != null); - }; - - /** - * Checks if preloading has finished for a specific source. - * @method isPreloadComplete - * @param {String} src The sound URI to load. - * @return {Boolean} - */ - p.isPreloadComplete = function (src) { - return (!(this._audioSources[src] == null || this._audioSources[src] == true)); - }; - - /** - * Remove a sound added using {{#crossLink "WebAudioPlugin/register"}}{{/crossLink}}. Note this does not cancel a preload. - * @method removeSound - * @param {String} src The sound URI to unload. - */ - p.removeSound = function (src) { - if (!this._soundInstances[src]) { return; } - for (var i = this._soundInstances[src].length; i--; ) { - var item = this._soundInstances[src][i]; - item.destroy(); - } - delete(this._soundInstances[src]); - delete(this._audioSources[src]); - if(this._loaders[src]) { this._loaders[src].destroy(); } - delete(this._loaders[src]); - }; - - /** - * Remove all sounds added using {{#crossLink "WebAudioPlugin/register"}}{{/crossLink}}. Note this does not cancel a preload. - * @method removeAllSounds - * @param {String} src The sound URI to unload. - */ - p.removeAllSounds = function () { - for(var key in this._audioSources) { - this.removeSound(key); - } - }; - - /** - * Create a sound instance. If the sound has not been preloaded, it is internally preloaded here. - * @method create - * @param {String} src The sound source to use. - * @param {Number} startTime Audio sprite property used to apply an offset, in milliseconds. - * @param {Number} duration Audio sprite property used to set the time the clip plays for, in milliseconds. - * @return {AbstractSoundInstance} A sound instance for playback and control. - */ - p.create = function (src, startTime, duration) { - if (!this.isPreloadStarted(src)) { - this.preload(this.register(src)); - } - var si = new this._soundInstanceClass(src, startTime, duration, this._audioSources[src]); - this._soundInstances[src].push(si); - return si; - }; - - // if a plugin does not support volume and mute, it should set these to null - /** - * Set the master volume of the plugin, which affects all SoundInstances. - * @method setVolume - * @param {Number} value The volume to set, between 0 and 1. - * @return {Boolean} If the plugin processes the setVolume call (true). The Sound class will affect all the - * instances manually otherwise. - */ - p.setVolume = function (value) { - this._volume = value; - this._updateVolume(); - return true; - }; - - /** - * Get the master volume of the plugin, which affects all SoundInstances. - * @method getVolume - * @return {Number} The volume level, between 0 and 1. - */ - p.getVolume = function () { - return this._volume; - }; - - /** - * Mute all sounds via the plugin. - * @method setMute - * @param {Boolean} value If all sound should be muted or not. Note that plugin-level muting just looks up - * the mute value of Sound {{#crossLink "Sound/getMute"}}{{/crossLink}}, so this property is not used here. - * @return {Boolean} If the mute call succeeds. - */ - p.setMute = function (value) { - this._updateVolume(); - return true; - }; - - // plugins should overwrite this method - p.toString = function () { - return "[AbstractPlugin]"; - }; - - -// private methods: - /** - * Handles internal preload completion. - * @method _handlePreloadComplete - * @protected - */ - p._handlePreloadComplete = function (event) { - var src = event.target.getItem().src; - this._audioSources[src] = event.result; - for (var i = 0, l = this._soundInstances[src].length; i < l; i++) { - var item = this._soundInstances[src][i]; - item.setPlaybackResource(this._audioSources[src]); - // ToDo consider adding play call here if playstate == playfailed - } - }; - - /** - * Handles internal preload erros - * @method _handlePreloadError - * @param event - * @protected - */ - p._handlePreloadError = function(event) { - //delete(this._audioSources[src]); - }; - - /** - * Set the gain value for master audio. Should not be called externally. - * @method _updateVolume - * @protected - */ - p._updateVolume = function () { - // Plugin Specific code - }; - - createjs.AbstractPlugin = AbstractPlugin; +this.createjs = this.createjs || {}; + +/** + * A AbstractSoundInstance is created when any calls to the Sound API method {{#crossLink "Sound/play"}}{{/crossLink}} or + * {{#crossLink "Sound/createInstance"}}{{/crossLink}} are made. The AbstractSoundInstance is returned by the active plugin + * for control by the user. + * + *

          Example

          + * + * var myInstance = createjs.Sound.play("myAssetPath/mySrcFile.mp3"); + * + * A number of additional parameters provide a quick way to determine how a sound is played. Please see the Sound + * API method {{#crossLink "Sound/play"}}{{/crossLink}} for a list of arguments. + * + * Once a AbstractSoundInstance is created, a reference can be stored that can be used to control the audio directly through + * the AbstractSoundInstance. If the reference is not stored, the AbstractSoundInstance will play out its audio (and any loops), and + * is then de-referenced from the {{#crossLink "Sound"}}{{/crossLink}} class so that it can be cleaned up. If audio + * playback has completed, a simple call to the {{#crossLink "AbstractSoundInstance/play"}}{{/crossLink}} instance method + * will rebuild the references the Sound class need to control it. + * + * var myInstance = createjs.Sound.play("myAssetPath/mySrcFile.mp3", {loop:2}); + * myInstance.on("loop", handleLoop); + * function handleLoop(event) { + * myInstance.volume = myInstance.volume * 0.5; + * } + * + * Events are dispatched from the instance to notify when the sound has completed, looped, or when playback fails + * + * var myInstance = createjs.Sound.play("myAssetPath/mySrcFile.mp3"); + * myInstance.on("complete", handleComplete); + * myInstance.on("loop", handleLoop); + * myInstance.on("failed", handleFailed); + * + * + * @class AbstractSoundInstance + * @param {String} src The path to and file name of the sound. + * @param {Number} startTime Audio sprite property used to apply an offset, in milliseconds. + * @param {Number} duration Audio sprite property used to set the time the clip plays for, in milliseconds. + * @param {Object} playbackResource Any resource needed by plugin to support audio playback. + * @extends EventDispatcher + * @constructor + */ + +(function () { + "use strict"; + + +// Constructor: + var AbstractSoundInstance = function (src, startTime, duration, playbackResource) { + this.EventDispatcher_constructor(); + + + // public properties: + /** + * The source of the sound. + * @property src + * @type {String} + * @default null + */ + this.src = src; + + /** + * The unique ID of the instance. This is set by {{#crossLink "Sound"}}{{/crossLink}}. + * @property uniqueId + * @type {String} | Number + * @default -1 + */ + this.uniqueId = -1; + + /** + * The play state of the sound. Play states are defined as constants on {{#crossLink "Sound"}}{{/crossLink}}. + * @property playState + * @type {String} + * @default null + */ + this.playState = null; + + /** + * A Timeout created by {{#crossLink "Sound"}}{{/crossLink}} when this AbstractSoundInstance is played with a delay. + * This allows AbstractSoundInstance to remove the delay if stop, pause, or cleanup are called before playback begins. + * @property delayTimeoutId + * @type {timeoutVariable} + * @default null + * @protected + * @since 0.4.0 + */ + this.delayTimeoutId = null; + // TODO consider moving delay into AbstractSoundInstance so it can be handled by plugins + + + // private properties + // Getter / Setter Properties + // OJR TODO find original reason that we didn't use defined functions. I think it was performance related + /** + * The volume of the sound, between 0 and 1. + * + * The actual output volume of a sound can be calculated using: + * myInstance.volume * createjs.Sound.getVolume(); + * + * @property volume + * @type {Number} + * @default 1 + */ + this._volume = 1; + Object.defineProperty(this, "volume", { + get: this.getVolume, + set: this.setVolume + }); + + /** + * The pan of the sound, between -1 (left) and 1 (right). Note that pan is not supported by HTML Audio. + * + *
          Note in WebAudioPlugin this only gives us the "x" value of what is actually 3D audio. + * + * @property pan + * @type {Number} + * @default 0 + */ + this._pan = 0; + Object.defineProperty(this, "pan", { + get: this.getPan, + set: this.setPan + }); + + /** + * Audio sprite property used to determine the starting offset. + * @property startTime + * @type {Number} + * @default 0 + * @since 0.6.1 + */ + this._startTime = Math.max(0, startTime || 0); + Object.defineProperty(this, "startTime", { + get: this.getStartTime, + set: this.setStartTime + }); + + /** + * The length of the audio clip, in milliseconds. + * + * @property duration + * @type {Number} + * @default 0 + * @since 0.6.0 + */ + this._duration = Math.max(0, duration || 0); + Object.defineProperty(this, "duration", { + get: this.getDuration, + set: this.setDuration + }); + + /** + * Object that holds plugin specific resource need for audio playback. + * This is set internally by the plugin. For example, WebAudioPlugin will set an array buffer, + * HTMLAudioPlugin will set a tag, FlashAudioPlugin will set a flash reference. + * + * @property playbackResource + * @type {Object} + * @default null + */ + this._playbackResource = null; + Object.defineProperty(this, "playbackResource", { + get: this.getPlaybackResource, + set: this.setPlaybackResource + }); + if(playbackResource !== false && playbackResource !== true) { this.setPlaybackResource(playbackResource); } + + /** + * The position of the playhead in milliseconds. This can be set while a sound is playing, paused, or stopped. + * + * @property position + * @type {Number} + * @default 0 + * @since 0.6.0 + */ + this._position = 0; + Object.defineProperty(this, "position", { + get: this.getPosition, + set: this.setPosition + }); + + /** + * The number of play loops remaining. Negative values will loop infinitely. + * + * @property loop + * @type {Number} + * @default 0 + * @public + * @since 0.6.0 + */ + this._loop = 0; + Object.defineProperty(this, "loop", { + get: this.getLoop, + set: this.setLoop + }); + + /** + * Determines if the audio is currently muted. + * + * @property muted + * @type {Boolean} + * @default false + * @since 0.6.0 + */ + this._muted = false; + Object.defineProperty(this, "muted", { + get: this.getMuted, + set: this.setMuted + }); + + /** + * Tells you if the audio is currently paused. + * + * @property paused + * @type {Boolean} + */ + this._paused = false; + Object.defineProperty(this, "paused", { + get: this.getPaused, + set: this.setPaused + }); + + + // Events + /** + * The event that is fired when playback has started successfully. + * @event succeeded + * @param {Object} target The object that dispatched the event. + * @param {String} type The event type. + * @since 0.4.0 + */ + + /** + * The event that is fired when playback is interrupted. This happens when another sound with the same + * src property is played using an interrupt value that causes this instance to stop playing. + * @event interrupted + * @param {Object} target The object that dispatched the event. + * @param {String} type The event type. + * @since 0.4.0 + */ + + /** + * The event that is fired when playback has failed. This happens when there are too many channels with the same + * src property already playing (and the interrupt value doesn't cause an interrupt of another instance), or + * the sound could not be played, perhaps due to a 404 error. + * @event failed + * @param {Object} target The object that dispatched the event. + * @param {String} type The event type. + * @since 0.4.0 + */ + + /** + * The event that is fired when a sound has completed playing but has loops remaining. + * @event loop + * @param {Object} target The object that dispatched the event. + * @param {String} type The event type. + * @since 0.4.0 + */ + + /** + * The event that is fired when playback completes. This means that the sound has finished playing in its + * entirety, including its loop iterations. + * @event complete + * @param {Object} target The object that dispatched the event. + * @param {String} type The event type. + * @since 0.4.0 + */ + }; + + var p = createjs.extend(AbstractSoundInstance, createjs.EventDispatcher); + + // TODO: deprecated + // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. + + +// Public Methods: + /** + * Play an instance. This method is intended to be called on SoundInstances that already exist (created + * with the Sound API {{#crossLink "Sound/createInstance"}}{{/crossLink}} or {{#crossLink "Sound/play"}}{{/crossLink}}). + * + *

          Example

          + * + * var myInstance = createjs.Sound.createInstance(mySrc); + * myInstance.play({interrupt:createjs.Sound.INTERRUPT_ANY, loop:2, pan:0.5}); + * + * Note that if this sound is already playing, this call will still set the passed in parameters. + + * Parameters Deprecated
          + * The parameters for this method are deprecated in favor of a single parameter that is an Object or {{#crossLink "PlayPropsConfig"}}{{/crossLink}}. + * + * @method play + * @param {String | Object} [interrupt="none"|options] This parameter will be renamed playProps in the next release.
          + * This parameter can be an instance of {{#crossLink "PlayPropsConfig"}}{{/crossLink}} or an Object that contains any or all optional properties by name, + * including: interrupt, delay, offset, loop, volume, pan, startTime, and duration (see the above code sample). + *
          OR
          + * Deprecated How to interrupt any currently playing instances of audio with the same source, + * if the maximum number of instances of the sound are already playing. Values are defined as INTERRUPT_TYPE + * constants on the Sound class, with the default defined by {{#crossLink "Sound/defaultInterruptBehavior:property"}}{{/crossLink}}. + * @param {Number} [delay=0] Deprecated The amount of time to delay the start of audio playback, in milliseconds. + * @param {Number} [offset=0] Deprecated The offset from the start of the audio to begin playback, in milliseconds. + * @param {Number} [loop=0] Deprecated How many times the audio loops when it reaches the end of playback. The default is 0 (no + * loops), and -1 can be used for infinite playback. + * @param {Number} [volume=1] Deprecated The volume of the sound, between 0 and 1. Note that the master volume is applied + * against the individual volume. + * @param {Number} [pan=0] Deprecated The left-right pan of the sound (if supported), between -1 (left) and 1 (right). + * Note that pan is not supported for HTML Audio. + * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. + */ + p.play = function (interrupt, delay, offset, loop, volume, pan) { + var playProps; + if (interrupt instanceof Object || interrupt instanceof createjs.PlayPropsConfig) { + playProps = createjs.PlayPropsConfig.create(interrupt); + } else { + playProps = createjs.PlayPropsConfig.create({interrupt:interrupt, delay:delay, offset:offset, loop:loop, volume:volume, pan:pan}); + } + + if (this.playState == createjs.Sound.PLAY_SUCCEEDED) { + this.applyPlayProps(playProps); + if (this._paused) { this.setPaused(false); } + return; + } + this._cleanUp(); + createjs.Sound._playInstance(this, playProps); // make this an event dispatch?? + return this; + }; + + /** + * Stop playback of the instance. Stopped sounds will reset their position to 0, and calls to {{#crossLink "AbstractSoundInstance/resume"}}{{/crossLink}} + * will fail. To start playback again, call {{#crossLink "AbstractSoundInstance/play"}}{{/crossLink}}. + * + *

          Example

          + * + * myInstance.stop(); + * + * @method stop + * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. + */ + p.stop = function () { + this._position = 0; + this._paused = false; + this._handleStop(); + this._cleanUp(); + this.playState = createjs.Sound.PLAY_FINISHED; + return this; + }; + + /** + * Remove all external references and resources from AbstractSoundInstance. Note this is irreversible and AbstractSoundInstance will no longer work + * @method destroy + * @since 0.6.0 + */ + p.destroy = function() { + this._cleanUp(); + this.src = null; + this.playbackResource = null; + + this.removeAllEventListeners(); + }; + + /** + * Takes an PlayPropsConfig or Object with the same properties and sets them on this instance. + * @method applyPlayProps + * @param {PlayPropsConfig | Object} playProps A PlayPropsConfig or object containing the same properties. + * @since 0.6.1 + * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. + */ + p.applyPlayProps = function(playProps) { + if (playProps.offset != null) { this.setPosition(playProps.offset) } + if (playProps.loop != null) { this.setLoop(playProps.loop); } + if (playProps.volume != null) { this.setVolume(playProps.volume); } + if (playProps.pan != null) { this.setPan(playProps.pan); } + if (playProps.startTime != null) { + this.setStartTime(playProps.startTime); + this.setDuration(playProps.duration); + } + return this; + }; + + p.toString = function () { + return "[AbstractSoundInstance]"; + }; + +// get/set methods that allow support for IE8 + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/paused:property"}}{{/crossLink}} directly as a property, + * + * @deprecated + * @method getPaused + * @returns {boolean} If the instance is currently paused + * @since 0.6.0 + */ + p.getPaused = function() { + return this._paused; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/paused:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method setPaused + * @param {boolean} value + * @since 0.6.0 + * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. + */ + p.setPaused = function (value) { + if ((value !== true && value !== false) || this._paused == value) {return;} + if (value == true && this.playState != createjs.Sound.PLAY_SUCCEEDED) {return;} + this._paused = value; + if(value) { + this._pause(); + } else { + this._resume(); + } + clearTimeout(this.delayTimeoutId); + return this; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/volume:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method setVolume + * @param {Number} value The volume to set, between 0 and 1. + * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. + */ + p.setVolume = function (value) { + if (value == this._volume) { return this; } + this._volume = Math.max(0, Math.min(1, value)); + if (!this._muted) { + this._updateVolume(); + } + return this; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/volume:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method getVolume + * @return {Number} The current volume of the sound instance. + */ + p.getVolume = function () { + return this._volume; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/muted:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method setMuted + * @param {Boolean} value If the sound should be muted. + * @return {AbstractSoundInstance} A reference to itself, intended for chaining calls. + * @since 0.6.0 + */ + p.setMuted = function (value) { + if (value !== true && value !== false) {return;} + this._muted = value; + this._updateVolume(); + return this; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/muted:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method getMuted + * @return {Boolean} If the sound is muted. + * @since 0.6.0 + */ + p.getMuted = function () { + return this._muted; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/pan:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method setPan + * @param {Number} value The pan value, between -1 (left) and 1 (right). + * @return {AbstractSoundInstance} Returns reference to itself for chaining calls + */ + p.setPan = function (value) { + if(value == this._pan) { return this; } + this._pan = Math.max(-1, Math.min(1, value)); + this._updatePan(); + return this; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/pan:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method getPan + * @return {Number} The value of the pan, between -1 (left) and 1 (right). + */ + p.getPan = function () { + return this._pan; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/position:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method getPosition + * @return {Number} The position of the playhead in the sound, in milliseconds. + */ + p.getPosition = function () { + if (!this._paused && this.playState == createjs.Sound.PLAY_SUCCEEDED) { + this._position = this._calculateCurrentPosition(); + } + return this._position; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/position:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method setPosition + * @param {Number} value The position to place the playhead, in milliseconds. + * @return {AbstractSoundInstance} Returns reference to itself for chaining calls + */ + p.setPosition = function (value) { + this._position = Math.max(0, value); + if (this.playState == createjs.Sound.PLAY_SUCCEEDED) { + this._updatePosition(); + } + return this; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/startTime:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method getStartTime + * @return {Number} The startTime of the sound instance in milliseconds. + */ + p.getStartTime = function () { + return this._startTime; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/startTime:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method setStartTime + * @param {number} value The new startTime time in milli seconds. + * @return {AbstractSoundInstance} Returns reference to itself for chaining calls + */ + p.setStartTime = function (value) { + if (value == this._startTime) { return this; } + this._startTime = Math.max(0, value || 0); + this._updateStartTime(); + return this; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/duration:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method getDuration + * @return {Number} The duration of the sound instance in milliseconds. + */ + p.getDuration = function () { + return this._duration; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/duration:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method setDuration + * @param {number} value The new duration time in milli seconds. + * @return {AbstractSoundInstance} Returns reference to itself for chaining calls + * @since 0.6.0 + */ + p.setDuration = function (value) { + if (value == this._duration) { return this; } + this._duration = Math.max(0, value || 0); + this._updateDuration(); + return this; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/playbackResource:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method setPlayback + * @param {Object} value The new playback resource. + * @return {AbstractSoundInstance} Returns reference to itself for chaining calls + * @since 0.6.0 + **/ + p.setPlaybackResource = function (value) { + this._playbackResource = value; + if (this._duration == 0) { this._setDurationFromSource(); } + return this; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/playbackResource:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method setPlayback + * @param {Object} value The new playback resource. + * @return {Object} playback resource used for playing audio + * @since 0.6.0 + **/ + p.getPlaybackResource = function () { + return this._playbackResource; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/loop:property"}}{{/crossLink}} directly as a property + * + * @deprecated + * @method getLoop + * @return {number} + * @since 0.6.0 + **/ + p.getLoop = function () { + return this._loop; + }; + + /** + * DEPRECATED, please use {{#crossLink "AbstractSoundInstance/loop:property"}}{{/crossLink}} directly as a property, + * + * @deprecated + * @method setLoop + * @param {number} value The number of times to loop after play. + * @since 0.6.0 + */ + p.setLoop = function (value) { + if(this._playbackResource != null) { + // remove looping + if (this._loop != 0 && value == 0) { + this._removeLooping(value); + } + // add looping + else if (this._loop == 0 && value != 0) { + this._addLooping(value); + } + } + this._loop = value; + }; + + +// Private Methods: + /** + * A helper method that dispatches all events for AbstractSoundInstance. + * @method _sendEvent + * @param {String} type The event type + * @protected + */ + p._sendEvent = function (type) { + var event = new createjs.Event(type); + this.dispatchEvent(event); + }; + + /** + * Clean up the instance. Remove references and clean up any additional properties such as timers. + * @method _cleanUp + * @protected + */ + p._cleanUp = function () { + clearTimeout(this.delayTimeoutId); // clear timeout that plays delayed sound + this._handleCleanUp(); + this._paused = false; + + createjs.Sound._playFinished(this); // TODO change to an event + }; + + /** + * The sound has been interrupted. + * @method _interrupt + * @protected + */ + p._interrupt = function () { + this._cleanUp(); + this.playState = createjs.Sound.PLAY_INTERRUPTED; + this._sendEvent("interrupted"); + }; + + /** + * Called by the Sound class when the audio is ready to play (delay has completed). Starts sound playing if the + * src is loaded, otherwise playback will fail. + * @method _beginPlaying + * @param {PlayPropsConfig} playProps A PlayPropsConfig object. + * @return {Boolean} If playback succeeded. + * @protected + */ + // OJR FlashAudioSoundInstance overwrites + p._beginPlaying = function (playProps) { + this.setPosition(playProps.offset); + this.setLoop(playProps.loop); + this.setVolume(playProps.volume); + this.setPan(playProps.pan); + if (playProps.startTime != null) { + this.setStartTime(playProps.startTime); + this.setDuration(playProps.duration); + } + + if (this._playbackResource != null && this._position < this._duration) { + this._paused = false; + this._handleSoundReady(); + this.playState = createjs.Sound.PLAY_SUCCEEDED; + this._sendEvent("succeeded"); + return true; + } else { + this._playFailed(); + return false; + } + }; + + /** + * Play has failed, which can happen for a variety of reasons. + * Cleans up instance and dispatches failed event + * @method _playFailed + * @private + */ + p._playFailed = function () { + this._cleanUp(); + this.playState = createjs.Sound.PLAY_FAILED; + this._sendEvent("failed"); + }; + + /** + * Audio has finished playing. Manually loop it if required. + * @method _handleSoundComplete + * @param event + * @protected + */ + p._handleSoundComplete = function (event) { + this._position = 0; // have to set this as it can be set by pause during playback + + if (this._loop != 0) { + this._loop--; // NOTE this introduces a theoretical limit on loops = float max size x 2 - 1 + this._handleLoop(); + this._sendEvent("loop"); + return; + } + + this._cleanUp(); + this.playState = createjs.Sound.PLAY_FINISHED; + this._sendEvent("complete"); + }; + +// Plugin specific code + /** + * Handles starting playback when the sound is ready for playing. + * @method _handleSoundReady + * @protected + */ + p._handleSoundReady = function () { + // plugin specific code + }; + + /** + * Internal function used to update the volume based on the instance volume, master volume, instance mute value, + * and master mute value. + * @method _updateVolume + * @protected + */ + p._updateVolume = function () { + // plugin specific code + }; + + /** + * Internal function used to update the pan + * @method _updatePan + * @protected + * @since 0.6.0 + */ + p._updatePan = function () { + // plugin specific code + }; + + /** + * Internal function used to update the startTime of the audio. + * @method _updateStartTime + * @protected + * @since 0.6.1 + */ + p._updateStartTime = function () { + // plugin specific code + }; + + /** + * Internal function used to update the duration of the audio. + * @method _updateDuration + * @protected + * @since 0.6.0 + */ + p._updateDuration = function () { + // plugin specific code + }; + + /** + * Internal function used to get the duration of the audio from the source we'll be playing. + * @method _updateDuration + * @protected + * @since 0.6.0 + */ + p._setDurationFromSource = function () { + // plugin specific code + }; + + /** + * Internal function that calculates the current position of the playhead and sets this._position to that value + * @method _calculateCurrentPosition + * @protected + * @since 0.6.0 + */ + p._calculateCurrentPosition = function () { + // plugin specific code that sets this.position + }; + + /** + * Internal function used to update the position of the playhead. + * @method _updatePosition + * @protected + * @since 0.6.0 + */ + p._updatePosition = function () { + // plugin specific code + }; + + /** + * Internal function called when looping is removed during playback. + * @method _removeLooping + * @param {number} value The number of times to loop after play. + * @protected + * @since 0.6.0 + */ + p._removeLooping = function (value) { + // plugin specific code + }; + + /** + * Internal function called when looping is added during playback. + * @method _addLooping + * @param {number} value The number of times to loop after play. + * @protected + * @since 0.6.0 + */ + p._addLooping = function (value) { + // plugin specific code + }; + + /** + * Internal function called when pausing playback + * @method _pause + * @protected + * @since 0.6.0 + */ + p._pause = function () { + // plugin specific code + }; + + /** + * Internal function called when resuming playback + * @method _resume + * @protected + * @since 0.6.0 + */ + p._resume = function () { + // plugin specific code + }; + + /** + * Internal function called when stopping playback + * @method _handleStop + * @protected + * @since 0.6.0 + */ + p._handleStop = function() { + // plugin specific code + }; + + /** + * Internal function called when AbstractSoundInstance is being cleaned up + * @method _handleCleanUp + * @protected + * @since 0.6.0 + */ + p._handleCleanUp = function() { + // plugin specific code + }; + + /** + * Internal function called when AbstractSoundInstance has played to end and is looping + * @method _handleLoop + * @protected + * @since 0.6.0 + */ + p._handleLoop = function () { + // plugin specific code + }; + + createjs.AbstractSoundInstance = createjs.promote(AbstractSoundInstance, "EventDispatcher"); + createjs.DefaultSoundInstance = createjs.AbstractSoundInstance; // used when no plugin is supported +}()); + +//############################################################################## +// AbstractPlugin.js +//############################################################################## + +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + + +// constructor: + /** + * A default plugin class used as a base for all other plugins. + * @class AbstractPlugin + * @constructor + * @since 0.6.0 + */ + + var AbstractPlugin = function () { + // private properties: + /** + * The capabilities of the plugin. + * method and is used internally. + * @property _capabilities + * @type {Object} + * @default null + * @protected + * @static + */ + this._capabilities = null; + + /** + * Object hash indexed by the source URI of all created loaders, used to properly destroy them if sources are removed. + * @type {Object} + * @protected + */ + this._loaders = {}; + + /** + * Object hash indexed by the source URI of each file to indicate if an audio source has begun loading, + * is currently loading, or has completed loading. Can be used to store non boolean data after loading + * is complete (for example arrayBuffers for web audio). + * @property _audioSources + * @type {Object} + * @protected + */ + this._audioSources = {}; + + /** + * Object hash indexed by the source URI of all created SoundInstances, updates the playbackResource if it loads after they are created, + * and properly destroy them if sources are removed + * @type {Object} + * @protected + */ + this._soundInstances = {}; + + /** + * The internal master volume value of the plugin. + * @property _volume + * @type {Number} + * @default 1 + * @protected + */ + this._volume = 1; + + /** + * A reference to a loader class used by a plugin that must be set. + * @type {Object} + * @protected + */ + this._loaderClass; + + /** + * A reference to an AbstractSoundInstance class used by a plugin that must be set. + * @type {Object} + * @protected; + */ + this._soundInstanceClass; + }; + var p = AbstractPlugin.prototype; + + /** + * REMOVED. Removed in favor of using `MySuperClass_constructor`. + * See {{#crossLink "Utility Methods/extend"}}{{/crossLink}} and {{#crossLink "Utility Methods/promote"}}{{/crossLink}} + * for details. + * + * There is an inheritance tutorial distributed with EaselJS in /tutorials/Inheritance. + * + * @method initialize + * @protected + * @deprecated + */ + // p.initialize = function() {}; // searchable for devs wondering where it is. + + +// Static Properties: +// NOTE THESE PROPERTIES NEED TO BE ADDED TO EACH PLUGIN + /** + * The capabilities of the plugin. This is generated via the _generateCapabilities method and is used internally. + * @property _capabilities + * @type {Object} + * @default null + * @protected + * @static + */ + AbstractPlugin._capabilities = null; + + /** + * Determine if the plugin can be used in the current browser/OS. + * @method isSupported + * @return {Boolean} If the plugin can be initialized. + * @static + */ + AbstractPlugin.isSupported = function () { + return true; + }; + + +// public methods: + /** + * Pre-register a sound for preloading and setup. This is called by {{#crossLink "Sound"}}{{/crossLink}}. + * Note all plugins provide a Loader instance, which PreloadJS + * can use to assist with preloading. + * @method register + * @param {String} loadItem An Object containing the source of the audio + * Note that not every plugin will manage this value. + * @return {Object} A result object, containing a "tag" for preloading purposes. + */ + p.register = function (loadItem) { + var loader = this._loaders[loadItem.src]; + if(loader && !loader.canceled) {return this._loaders[loadItem.src];} // already loading/loaded this, so don't load twice + // OJR potential issue that we won't be firing loaded event, might need to trigger if this is already loaded? + this._audioSources[loadItem.src] = true; + this._soundInstances[loadItem.src] = []; + loader = new this._loaderClass(loadItem); + loader.on("complete", createjs.proxy(this._handlePreloadComplete, this)); + this._loaders[loadItem.src] = loader; + return loader; + }; + + // note sound calls register before calling preload + /** + * Internally preload a sound. + * @method preload + * @param {Loader} loader The sound URI to load. + */ + p.preload = function (loader) { + loader.on("error", createjs.proxy(this._handlePreloadError, this)); + loader.load(); + }; + + /** + * Checks if preloading has started for a specific source. If the source is found, we can assume it is loading, + * or has already finished loading. + * @method isPreloadStarted + * @param {String} src The sound URI to check. + * @return {Boolean} + */ + p.isPreloadStarted = function (src) { + return (this._audioSources[src] != null); + }; + + /** + * Checks if preloading has finished for a specific source. + * @method isPreloadComplete + * @param {String} src The sound URI to load. + * @return {Boolean} + */ + p.isPreloadComplete = function (src) { + return (!(this._audioSources[src] == null || this._audioSources[src] == true)); + }; + + /** + * Remove a sound added using {{#crossLink "WebAudioPlugin/register"}}{{/crossLink}}. Note this does not cancel a preload. + * @method removeSound + * @param {String} src The sound URI to unload. + */ + p.removeSound = function (src) { + if (!this._soundInstances[src]) { return; } + for (var i = this._soundInstances[src].length; i--; ) { + var item = this._soundInstances[src][i]; + item.destroy(); + } + delete(this._soundInstances[src]); + delete(this._audioSources[src]); + if(this._loaders[src]) { this._loaders[src].destroy(); } + delete(this._loaders[src]); + }; + + /** + * Remove all sounds added using {{#crossLink "WebAudioPlugin/register"}}{{/crossLink}}. Note this does not cancel a preload. + * @method removeAllSounds + * @param {String} src The sound URI to unload. + */ + p.removeAllSounds = function () { + for(var key in this._audioSources) { + this.removeSound(key); + } + }; + + /** + * Create a sound instance. If the sound has not been preloaded, it is internally preloaded here. + * @method create + * @param {String} src The sound source to use. + * @param {Number} startTime Audio sprite property used to apply an offset, in milliseconds. + * @param {Number} duration Audio sprite property used to set the time the clip plays for, in milliseconds. + * @return {AbstractSoundInstance} A sound instance for playback and control. + */ + p.create = function (src, startTime, duration) { + if (!this.isPreloadStarted(src)) { + this.preload(this.register(src)); + } + var si = new this._soundInstanceClass(src, startTime, duration, this._audioSources[src]); + this._soundInstances[src].push(si); + return si; + }; + + // if a plugin does not support volume and mute, it should set these to null + /** + * Set the master volume of the plugin, which affects all SoundInstances. + * @method setVolume + * @param {Number} value The volume to set, between 0 and 1. + * @return {Boolean} If the plugin processes the setVolume call (true). The Sound class will affect all the + * instances manually otherwise. + */ + p.setVolume = function (value) { + this._volume = value; + this._updateVolume(); + return true; + }; + + /** + * Get the master volume of the plugin, which affects all SoundInstances. + * @method getVolume + * @return {Number} The volume level, between 0 and 1. + */ + p.getVolume = function () { + return this._volume; + }; + + /** + * Mute all sounds via the plugin. + * @method setMute + * @param {Boolean} value If all sound should be muted or not. Note that plugin-level muting just looks up + * the mute value of Sound {{#crossLink "Sound/getMute"}}{{/crossLink}}, so this property is not used here. + * @return {Boolean} If the mute call succeeds. + */ + p.setMute = function (value) { + this._updateVolume(); + return true; + }; + + // plugins should overwrite this method + p.toString = function () { + return "[AbstractPlugin]"; + }; + + +// private methods: + /** + * Handles internal preload completion. + * @method _handlePreloadComplete + * @protected + */ + p._handlePreloadComplete = function (event) { + var src = event.target.getItem().src; + this._audioSources[src] = event.result; + for (var i = 0, l = this._soundInstances[src].length; i < l; i++) { + var item = this._soundInstances[src][i]; + item.setPlaybackResource(this._audioSources[src]); + // ToDo consider adding play call here if playstate == playfailed + } + }; + + /** + * Handles internal preload erros + * @method _handlePreloadError + * @param event + * @protected + */ + p._handlePreloadError = function(event) { + //delete(this._audioSources[src]); + }; + + /** + * Set the gain value for master audio. Should not be called externally. + * @method _updateVolume + * @protected + */ + p._updateVolume = function () { + // Plugin Specific code + }; + + createjs.AbstractPlugin = AbstractPlugin; }()); //############################################################################## // WebAudioLoader.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - - /** - * Loader provides a mechanism to preload Web Audio content via PreloadJS or internally. Instances are returned to - * the preloader, and the load method is called when the asset needs to be requested. - * - * @class WebAudioLoader - * @param {String} loadItem The item to be loaded - * @extends XHRRequest - * @protected - */ - function Loader(loadItem) { - this.AbstractLoader_constructor(loadItem, true, createjs.AbstractLoader.SOUND); - - }; - var p = createjs.extend(Loader, createjs.AbstractLoader); - - // TODO: deprecated - // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. - - - /** - * web audio context required for decoding audio - * @property context - * @type {AudioContext} - * @static - */ - Loader.context = null; - - -// public methods - p.toString = function () { - return "[WebAudioLoader]"; - }; - - -// private methods - p._createRequest = function() { - this._request = new createjs.XHRRequest(this._item, false); - this._request.setResponseType("arraybuffer"); - }; - - p._sendComplete = function (event) { - // OJR we leave this wrapped in Loader because we need to reference src and the handler only receives a single argument, the decodedAudio - Loader.context.decodeAudioData(this._rawResult, - createjs.proxy(this._handleAudioDecoded, this), - createjs.proxy(this._sendError, this)); - }; - - - /** - * The audio has been decoded. - * @method handleAudioDecoded - * @param decoded - * @protected - */ - p._handleAudioDecoded = function (decodedAudio) { - this._result = decodedAudio; - this.AbstractLoader__sendComplete(); - }; - - createjs.WebAudioLoader = createjs.promote(Loader, "AbstractLoader"); +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + + /** + * Loader provides a mechanism to preload Web Audio content via PreloadJS or internally. Instances are returned to + * the preloader, and the load method is called when the asset needs to be requested. + * + * @class WebAudioLoader + * @param {String} loadItem The item to be loaded + * @extends XHRRequest + * @protected + */ + function Loader(loadItem) { + this.AbstractLoader_constructor(loadItem, true, createjs.AbstractLoader.SOUND); + + }; + var p = createjs.extend(Loader, createjs.AbstractLoader); + + // TODO: deprecated + // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. + + + /** + * web audio context required for decoding audio + * @property context + * @type {AudioContext} + * @static + */ + Loader.context = null; + + +// public methods + p.toString = function () { + return "[WebAudioLoader]"; + }; + + +// private methods + p._createRequest = function() { + this._request = new createjs.XHRRequest(this._item, false); + this._request.setResponseType("arraybuffer"); + }; + + p._sendComplete = function (event) { + // OJR we leave this wrapped in Loader because we need to reference src and the handler only receives a single argument, the decodedAudio + Loader.context.decodeAudioData(this._rawResult, + createjs.proxy(this._handleAudioDecoded, this), + createjs.proxy(this._sendError, this)); + }; + + + /** + * The audio has been decoded. + * @method handleAudioDecoded + * @param decoded + * @protected + */ + p._handleAudioDecoded = function (decodedAudio) { + this._result = decodedAudio; + this.AbstractLoader__sendComplete(); + }; + + createjs.WebAudioLoader = createjs.promote(Loader, "AbstractLoader"); }()); //############################################################################## // WebAudioSoundInstance.js //############################################################################## -this.createjs = this.createjs || {}; - -/** - * WebAudioSoundInstance extends the base api of {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} and is used by - * {{#crossLink "WebAudioPlugin"}}{{/crossLink}}. - * - * WebAudioSoundInstance exposes audioNodes for advanced users. - * - * @param {String} src The path to and file name of the sound. - * @param {Number} startTime Audio sprite property used to apply an offset, in milliseconds. - * @param {Number} duration Audio sprite property used to set the time the clip plays for, in milliseconds. - * @param {Object} playbackResource Any resource needed by plugin to support audio playback. - * @class WebAudioSoundInstance - * @extends AbstractSoundInstance - * @constructor - */ -(function () { - "use strict"; - - function WebAudioSoundInstance(src, startTime, duration, playbackResource) { - this.AbstractSoundInstance_constructor(src, startTime, duration, playbackResource); - - -// public properties - /** - * NOTE this is only intended for use by advanced users. - *
          GainNode for controlling WebAudioSoundInstance volume. Connected to the {{#crossLink "WebAudioSoundInstance/destinationNode:property"}}{{/crossLink}}. - * @property gainNode - * @type {AudioGainNode} - * @since 0.4.0 - * - */ - this.gainNode = s.context.createGain(); - - /** - * NOTE this is only intended for use by advanced users. - *
          A panNode allowing left and right audio channel panning only. Connected to WebAudioSoundInstance {{#crossLink "WebAudioSoundInstance/gainNode:property"}}{{/crossLink}}. - * @property panNode - * @type {AudioPannerNode} - * @since 0.4.0 - */ - this.panNode = s.context.createPanner(); - this.panNode.panningModel = s._panningModel; - this.panNode.connect(this.gainNode); - - /** - * NOTE this is only intended for use by advanced users. - *
          sourceNode is the audio source. Connected to WebAudioSoundInstance {{#crossLink "WebAudioSoundInstance/panNode:property"}}{{/crossLink}}. - * @property sourceNode - * @type {AudioNode} - * @since 0.4.0 - * - */ - this.sourceNode = null; - - -// private properties - /** - * Timeout that is created internally to handle sound playing to completion. - * Stored so we can remove it when stop, pause, or cleanup are called - * @property _soundCompleteTimeout - * @type {timeoutVariable} - * @default null - * @protected - * @since 0.4.0 - */ - this._soundCompleteTimeout = null; - - /** - * NOTE this is only intended for use by very advanced users. - * _sourceNodeNext is the audio source for the next loop, inserted in a look ahead approach to allow for smooth - * looping. Connected to {{#crossLink "WebAudioSoundInstance/gainNode:property"}}{{/crossLink}}. - * @property _sourceNodeNext - * @type {AudioNode} - * @default null - * @protected - * @since 0.4.1 - * - */ - this._sourceNodeNext = null; - - /** - * Time audio started playback, in seconds. Used to handle set position, get position, and resuming from paused. - * @property _playbackStartTime - * @type {Number} - * @default 0 - * @protected - * @since 0.4.0 - */ - this._playbackStartTime = 0; - - // Proxies, make removing listeners easier. - this._endedHandler = createjs.proxy(this._handleSoundComplete, this); - }; - var p = createjs.extend(WebAudioSoundInstance, createjs.AbstractSoundInstance); - var s = WebAudioSoundInstance; - - // TODO: deprecated - // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. - - - /** - * Note this is only intended for use by advanced users. - *
          Audio context used to create nodes. This is and needs to be the same context used by {{#crossLink "WebAudioPlugin"}}{{/crossLink}}. - * @property context - * @type {AudioContext} - * @static - * @since 0.6.0 - */ - s.context = null; - - /** - * Note this is only intended for use by advanced users. - *
          Audio node from WebAudioPlugin that sequences to context.destination - * @property destinationNode - * @type {AudioNode} - * @static - * @since 0.6.0 - */ - s.destinationNode = null; - - /** - * Value to set panning model to equal power for WebAudioSoundInstance. Can be "equalpower" or 0 depending on browser implementation. - * @property _panningModel - * @type {Number / String} - * @protected - * @static - * @since 0.6.0 - */ - s._panningModel = "equalpower"; - - -// Public methods - p.destroy = function() { - this.AbstractSoundInstance_destroy(); - - this.panNode.disconnect(0); - this.panNode = null; - this.gainNode.disconnect(0); - this.gainNode = null; - }; - - p.toString = function () { - return "[WebAudioSoundInstance]"; - }; - - -// Private Methods - p._updatePan = function() { - this.panNode.setPosition(this._pan, 0, -0.5); - // z need to be -0.5 otherwise the sound only plays in left, right, or center - }; - - p._removeLooping = function(value) { - this._sourceNodeNext = this._cleanUpAudioNode(this._sourceNodeNext); - }; - - p._addLooping = function(value) { - if (this.playState != createjs.Sound.PLAY_SUCCEEDED) { return; } - this._sourceNodeNext = this._createAndPlayAudioNode(this._playbackStartTime, 0); - }; - - p._setDurationFromSource = function () { - this._duration = this.playbackResource.duration * 1000; - }; - - p._handleCleanUp = function () { - if (this.sourceNode && this.playState == createjs.Sound.PLAY_SUCCEEDED) { - this.sourceNode = this._cleanUpAudioNode(this.sourceNode); - this._sourceNodeNext = this._cleanUpAudioNode(this._sourceNodeNext); - } - - if (this.gainNode.numberOfOutputs != 0) {this.gainNode.disconnect(0);} - // OJR there appears to be a bug that this doesn't always work in webkit (Chrome and Safari). According to the documentation, this should work. - - clearTimeout(this._soundCompleteTimeout); - - this._playbackStartTime = 0; // This is used by getPosition - }; - - /** - * Turn off and disconnect an audioNode, then set reference to null to release it for garbage collection - * @method _cleanUpAudioNode - * @param audioNode - * @return {audioNode} - * @protected - * @since 0.4.1 - */ - p._cleanUpAudioNode = function(audioNode) { - if(audioNode) { - audioNode.stop(0); - audioNode.disconnect(0); - audioNode = null; - } - return audioNode; - }; - - p._handleSoundReady = function (event) { - this.gainNode.connect(s.destinationNode); // this line can cause a memory leak. Nodes need to be disconnected from the audioDestination or any sequence that leads to it. - - var dur = this._duration * 0.001; - var pos = this._position * 0.001; - if (pos > dur) {pos = dur;} - this.sourceNode = this._createAndPlayAudioNode((s.context.currentTime - dur), pos); - this._playbackStartTime = this.sourceNode.startTime - pos; - - this._soundCompleteTimeout = setTimeout(this._endedHandler, (dur - pos) * 1000); - - if(this._loop != 0) { - this._sourceNodeNext = this._createAndPlayAudioNode(this._playbackStartTime, 0); - } - }; - - /** - * Creates an audio node using the current src and context, connects it to the gain node, and starts playback. - * @method _createAndPlayAudioNode - * @param {Number} startTime The time to add this to the web audio context, in seconds. - * @param {Number} offset The amount of time into the src audio to start playback, in seconds. - * @return {audioNode} - * @protected - * @since 0.4.1 - */ - p._createAndPlayAudioNode = function(startTime, offset) { - var audioNode = s.context.createBufferSource(); - audioNode.buffer = this.playbackResource; - audioNode.connect(this.panNode); - var dur = this._duration * 0.001; - audioNode.startTime = startTime + dur; - audioNode.start(audioNode.startTime, offset+(this._startTime*0.001), dur - offset); - return audioNode; - }; - - p._pause = function () { - this._position = (s.context.currentTime - this._playbackStartTime) * 1000; // * 1000 to give milliseconds, lets us restart at same point - this.sourceNode = this._cleanUpAudioNode(this.sourceNode); - this._sourceNodeNext = this._cleanUpAudioNode(this._sourceNodeNext); - - if (this.gainNode.numberOfOutputs != 0) {this.gainNode.disconnect(0);} - - clearTimeout(this._soundCompleteTimeout); - }; - - p._resume = function () { - this._handleSoundReady(); - }; - - /* - p._handleStop = function () { - // web audio does not need to do anything extra - }; - */ - - p._updateVolume = function () { - var newVolume = this._muted ? 0 : this._volume; - if (newVolume != this.gainNode.gain.value) { - this.gainNode.gain.value = newVolume; - } - }; - - p._calculateCurrentPosition = function () { - return ((s.context.currentTime - this._playbackStartTime) * 1000); // pos in seconds * 1000 to give milliseconds - }; - - p._updatePosition = function () { - this.sourceNode = this._cleanUpAudioNode(this.sourceNode); - this._sourceNodeNext = this._cleanUpAudioNode(this._sourceNodeNext); - clearTimeout(this._soundCompleteTimeout); - - if (!this._paused) {this._handleSoundReady();} - }; - - // OJR we are using a look ahead approach to ensure smooth looping. - // We add _sourceNodeNext to the audio context so that it starts playing even if this callback is delayed. - // This technique is described here: http://www.html5rocks.com/en/tutorials/audio/scheduling/ - // NOTE the cost of this is that our audio loop may not always match the loop event timing precisely. - p._handleLoop = function () { - this._cleanUpAudioNode(this.sourceNode); - this.sourceNode = this._sourceNodeNext; - this._playbackStartTime = this.sourceNode.startTime; - this._sourceNodeNext = this._createAndPlayAudioNode(this._playbackStartTime, 0); - this._soundCompleteTimeout = setTimeout(this._endedHandler, this._duration); - }; - - p._updateDuration = function () { - if(this.playState == createjs.Sound.PLAY_SUCCEEDED) { - this._pause(); - this._resume(); - } - }; - - createjs.WebAudioSoundInstance = createjs.promote(WebAudioSoundInstance, "AbstractSoundInstance"); +this.createjs = this.createjs || {}; + +/** + * WebAudioSoundInstance extends the base api of {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} and is used by + * {{#crossLink "WebAudioPlugin"}}{{/crossLink}}. + * + * WebAudioSoundInstance exposes audioNodes for advanced users. + * + * @param {String} src The path to and file name of the sound. + * @param {Number} startTime Audio sprite property used to apply an offset, in milliseconds. + * @param {Number} duration Audio sprite property used to set the time the clip plays for, in milliseconds. + * @param {Object} playbackResource Any resource needed by plugin to support audio playback. + * @class WebAudioSoundInstance + * @extends AbstractSoundInstance + * @constructor + */ +(function () { + "use strict"; + + function WebAudioSoundInstance(src, startTime, duration, playbackResource) { + this.AbstractSoundInstance_constructor(src, startTime, duration, playbackResource); + + +// public properties + /** + * NOTE this is only intended for use by advanced users. + *
          GainNode for controlling WebAudioSoundInstance volume. Connected to the {{#crossLink "WebAudioSoundInstance/destinationNode:property"}}{{/crossLink}}. + * @property gainNode + * @type {AudioGainNode} + * @since 0.4.0 + * + */ + this.gainNode = s.context.createGain(); + + /** + * NOTE this is only intended for use by advanced users. + *
          A panNode allowing left and right audio channel panning only. Connected to WebAudioSoundInstance {{#crossLink "WebAudioSoundInstance/gainNode:property"}}{{/crossLink}}. + * @property panNode + * @type {AudioPannerNode} + * @since 0.4.0 + */ + this.panNode = s.context.createPanner(); + this.panNode.panningModel = s._panningModel; + this.panNode.connect(this.gainNode); + + /** + * NOTE this is only intended for use by advanced users. + *
          sourceNode is the audio source. Connected to WebAudioSoundInstance {{#crossLink "WebAudioSoundInstance/panNode:property"}}{{/crossLink}}. + * @property sourceNode + * @type {AudioNode} + * @since 0.4.0 + * + */ + this.sourceNode = null; + + +// private properties + /** + * Timeout that is created internally to handle sound playing to completion. + * Stored so we can remove it when stop, pause, or cleanup are called + * @property _soundCompleteTimeout + * @type {timeoutVariable} + * @default null + * @protected + * @since 0.4.0 + */ + this._soundCompleteTimeout = null; + + /** + * NOTE this is only intended for use by very advanced users. + * _sourceNodeNext is the audio source for the next loop, inserted in a look ahead approach to allow for smooth + * looping. Connected to {{#crossLink "WebAudioSoundInstance/gainNode:property"}}{{/crossLink}}. + * @property _sourceNodeNext + * @type {AudioNode} + * @default null + * @protected + * @since 0.4.1 + * + */ + this._sourceNodeNext = null; + + /** + * Time audio started playback, in seconds. Used to handle set position, get position, and resuming from paused. + * @property _playbackStartTime + * @type {Number} + * @default 0 + * @protected + * @since 0.4.0 + */ + this._playbackStartTime = 0; + + // Proxies, make removing listeners easier. + this._endedHandler = createjs.proxy(this._handleSoundComplete, this); + }; + var p = createjs.extend(WebAudioSoundInstance, createjs.AbstractSoundInstance); + var s = WebAudioSoundInstance; + + // TODO: deprecated + // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. + + + /** + * Note this is only intended for use by advanced users. + *
          Audio context used to create nodes. This is and needs to be the same context used by {{#crossLink "WebAudioPlugin"}}{{/crossLink}}. + * @property context + * @type {AudioContext} + * @static + * @since 0.6.0 + */ + s.context = null; + + /** + * Note this is only intended for use by advanced users. + *
          Audio node from WebAudioPlugin that sequences to context.destination + * @property destinationNode + * @type {AudioNode} + * @static + * @since 0.6.0 + */ + s.destinationNode = null; + + /** + * Value to set panning model to equal power for WebAudioSoundInstance. Can be "equalpower" or 0 depending on browser implementation. + * @property _panningModel + * @type {Number / String} + * @protected + * @static + * @since 0.6.0 + */ + s._panningModel = "equalpower"; + + +// Public methods + p.destroy = function() { + this.AbstractSoundInstance_destroy(); + + this.panNode.disconnect(0); + this.panNode = null; + this.gainNode.disconnect(0); + this.gainNode = null; + }; + + p.toString = function () { + return "[WebAudioSoundInstance]"; + }; + + +// Private Methods + p._updatePan = function() { + this.panNode.setPosition(this._pan, 0, -0.5); + // z need to be -0.5 otherwise the sound only plays in left, right, or center + }; + + p._removeLooping = function(value) { + this._sourceNodeNext = this._cleanUpAudioNode(this._sourceNodeNext); + }; + + p._addLooping = function(value) { + if (this.playState != createjs.Sound.PLAY_SUCCEEDED) { return; } + this._sourceNodeNext = this._createAndPlayAudioNode(this._playbackStartTime, 0); + }; + + p._setDurationFromSource = function () { + this._duration = this.playbackResource.duration * 1000; + }; + + p._handleCleanUp = function () { + if (this.sourceNode && this.playState == createjs.Sound.PLAY_SUCCEEDED) { + this.sourceNode = this._cleanUpAudioNode(this.sourceNode); + this._sourceNodeNext = this._cleanUpAudioNode(this._sourceNodeNext); + } + + if (this.gainNode.numberOfOutputs != 0) {this.gainNode.disconnect(0);} + // OJR there appears to be a bug that this doesn't always work in webkit (Chrome and Safari). According to the documentation, this should work. + + clearTimeout(this._soundCompleteTimeout); + + this._playbackStartTime = 0; // This is used by getPosition + }; + + /** + * Turn off and disconnect an audioNode, then set reference to null to release it for garbage collection + * @method _cleanUpAudioNode + * @param audioNode + * @return {audioNode} + * @protected + * @since 0.4.1 + */ + p._cleanUpAudioNode = function(audioNode) { + if(audioNode) { + audioNode.stop(0); + audioNode.disconnect(0); + audioNode = null; + } + return audioNode; + }; + + p._handleSoundReady = function (event) { + this.gainNode.connect(s.destinationNode); // this line can cause a memory leak. Nodes need to be disconnected from the audioDestination or any sequence that leads to it. + + var dur = this._duration * 0.001; + var pos = this._position * 0.001; + if (pos > dur) {pos = dur;} + this.sourceNode = this._createAndPlayAudioNode((s.context.currentTime - dur), pos); + this._playbackStartTime = this.sourceNode.startTime - pos; + + this._soundCompleteTimeout = setTimeout(this._endedHandler, (dur - pos) * 1000); + + if(this._loop != 0) { + this._sourceNodeNext = this._createAndPlayAudioNode(this._playbackStartTime, 0); + } + }; + + /** + * Creates an audio node using the current src and context, connects it to the gain node, and starts playback. + * @method _createAndPlayAudioNode + * @param {Number} startTime The time to add this to the web audio context, in seconds. + * @param {Number} offset The amount of time into the src audio to start playback, in seconds. + * @return {audioNode} + * @protected + * @since 0.4.1 + */ + p._createAndPlayAudioNode = function(startTime, offset) { + var audioNode = s.context.createBufferSource(); + audioNode.buffer = this.playbackResource; + audioNode.connect(this.panNode); + var dur = this._duration * 0.001; + audioNode.startTime = startTime + dur; + audioNode.start(audioNode.startTime, offset+(this._startTime*0.001), dur - offset); + return audioNode; + }; + + p._pause = function () { + this._position = (s.context.currentTime - this._playbackStartTime) * 1000; // * 1000 to give milliseconds, lets us restart at same point + this.sourceNode = this._cleanUpAudioNode(this.sourceNode); + this._sourceNodeNext = this._cleanUpAudioNode(this._sourceNodeNext); + + if (this.gainNode.numberOfOutputs != 0) {this.gainNode.disconnect(0);} + + clearTimeout(this._soundCompleteTimeout); + }; + + p._resume = function () { + this._handleSoundReady(); + }; + + /* + p._handleStop = function () { + // web audio does not need to do anything extra + }; + */ + + p._updateVolume = function () { + var newVolume = this._muted ? 0 : this._volume; + if (newVolume != this.gainNode.gain.value) { + this.gainNode.gain.value = newVolume; + } + }; + + p._calculateCurrentPosition = function () { + return ((s.context.currentTime - this._playbackStartTime) * 1000); // pos in seconds * 1000 to give milliseconds + }; + + p._updatePosition = function () { + this.sourceNode = this._cleanUpAudioNode(this.sourceNode); + this._sourceNodeNext = this._cleanUpAudioNode(this._sourceNodeNext); + clearTimeout(this._soundCompleteTimeout); + + if (!this._paused) {this._handleSoundReady();} + }; + + // OJR we are using a look ahead approach to ensure smooth looping. + // We add _sourceNodeNext to the audio context so that it starts playing even if this callback is delayed. + // This technique is described here: http://www.html5rocks.com/en/tutorials/audio/scheduling/ + // NOTE the cost of this is that our audio loop may not always match the loop event timing precisely. + p._handleLoop = function () { + this._cleanUpAudioNode(this.sourceNode); + this.sourceNode = this._sourceNodeNext; + this._playbackStartTime = this.sourceNode.startTime; + this._sourceNodeNext = this._createAndPlayAudioNode(this._playbackStartTime, 0); + this._soundCompleteTimeout = setTimeout(this._endedHandler, this._duration); + }; + + p._updateDuration = function () { + if(this.playState == createjs.Sound.PLAY_SUCCEEDED) { + this._pause(); + this._resume(); + } + }; + + createjs.WebAudioSoundInstance = createjs.promote(WebAudioSoundInstance, "AbstractSoundInstance"); }()); //############################################################################## // WebAudioPlugin.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - - "use strict"; - - /** - * Play sounds using Web Audio in the browser. The WebAudioPlugin is currently the default plugin, and will be used - * anywhere that it is supported. To change plugin priority, check out the Sound API - * {{#crossLink "Sound/registerPlugins"}}{{/crossLink}} method. - - *

          Known Browser and OS issues for Web Audio

          - * Firefox 25 - *
          • mp3 audio files do not load properly on all windows machines, reported - * here.
            - * For this reason it is recommended to pass another FF supported type (ie ogg) first until this bug is resolved, if possible.
          - *
          - * Webkit (Chrome and Safari) - *
          • AudioNode.disconnect does not always seem to work. This can cause the file size to grow over time if you - * are playing a lot of audio files.
          - *
          - * iOS 6 limitations - *
          • Sound is initially muted and will only unmute through play being called inside a user initiated event (touch/click).
          • - *
          • A bug exists that will distort uncached audio when a video element is present in the DOM. You can avoid this bug - * by ensuring the audio and video audio share the same sampleRate.
          • - *
          - * @class WebAudioPlugin - * @extends AbstractPlugin - * @constructor - * @since 0.4.0 - */ - function WebAudioPlugin() { - this.AbstractPlugin_constructor(); - - -// Private Properties - /** - * Value to set panning model to equal power for WebAudioSoundInstance. Can be "equalpower" or 0 depending on browser implementation. - * @property _panningModel - * @type {Number / String} - * @protected - */ - this._panningModel = s._panningModel;; - - /** - * The web audio context, which WebAudio uses to play audio. All nodes that interact with the WebAudioPlugin - * need to be created within this context. - * @property context - * @type {AudioContext} - */ - this.context = s.context; - - /** - * A DynamicsCompressorNode, which is used to improve sound quality and prevent audio distortion. - * It is connected to context.destination. - * - * Can be accessed by advanced users through createjs.Sound.activePlugin.dynamicsCompressorNode. - * @property dynamicsCompressorNode - * @type {AudioNode} - */ - this.dynamicsCompressorNode = this.context.createDynamicsCompressor(); - this.dynamicsCompressorNode.connect(this.context.destination); - - /** - * A GainNode for controlling master volume. It is connected to {{#crossLink "WebAudioPlugin/dynamicsCompressorNode:property"}}{{/crossLink}}. - * - * Can be accessed by advanced users through createjs.Sound.activePlugin.gainNode. - * @property gainNode - * @type {AudioGainNode} - */ - this.gainNode = this.context.createGain(); - this.gainNode.connect(this.dynamicsCompressorNode); - createjs.WebAudioSoundInstance.destinationNode = this.gainNode; - - this._capabilities = s._capabilities; - - this._loaderClass = createjs.WebAudioLoader; - this._soundInstanceClass = createjs.WebAudioSoundInstance; - - this._addPropsToClasses(); - } - var p = createjs.extend(WebAudioPlugin, createjs.AbstractPlugin); - - // TODO: deprecated - // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. - - -// Static Properties - var s = WebAudioPlugin; - /** - * The capabilities of the plugin. This is generated via the {{#crossLink "WebAudioPlugin/_generateCapabilities:method"}}{{/crossLink}} - * method and is used internally. - * @property _capabilities - * @type {Object} - * @default null - * @protected - * @static - */ - s._capabilities = null; - - /** - * Value to set panning model to equal power for WebAudioSoundInstance. Can be "equalpower" or 0 depending on browser implementation. - * @property _panningModel - * @type {Number / String} - * @protected - * @static - */ - s._panningModel = "equalpower"; - - /** - * The web audio context, which WebAudio uses to play audio. All nodes that interact with the WebAudioPlugin - * need to be created within this context. - * - * Advanced users can set this to an existing context, but must do so before they call - * {{#crossLink "Sound/registerPlugins"}}{{/crossLink}} or {{#crossLink "Sound/initializeDefaultPlugins"}}{{/crossLink}}. - * - * @property context - * @type {AudioContext} - * @static - */ - s.context = null; - - -// Static Public Methods - /** - * Determine if the plugin can be used in the current browser/OS. - * @method isSupported - * @return {Boolean} If the plugin can be initialized. - * @static - */ - s.isSupported = function () { - // check if this is some kind of mobile device, Web Audio works with local protocol under PhoneGap and it is unlikely someone is trying to run a local file - var isMobilePhoneGap = createjs.BrowserDetect.isIOS || createjs.BrowserDetect.isAndroid || createjs.BrowserDetect.isBlackberry; - // OJR isMobile may be redundant with _isFileXHRSupported available. Consider removing. - if (location.protocol == "file:" && !isMobilePhoneGap && !this._isFileXHRSupported()) { return false; } // Web Audio requires XHR, which is not usually available locally - s._generateCapabilities(); - if (s.context == null) {return false;} - return true; - }; - - /** - * Plays an empty sound in the web audio context. This is used to enable web audio on iOS devices, as they - * require the first sound to be played inside of a user initiated event (touch/click). This is called when - * {{#crossLink "WebAudioPlugin"}}{{/crossLink}} is initialized (by Sound {{#crossLink "Sound/initializeDefaultPlugins"}}{{/crossLink}} - * for example). - * - *

          Example

          - * - * function handleTouch(event) { - * createjs.WebAudioPlugin.playEmptySound(); - * } - * - * @method playEmptySound - * @static - * @since 0.4.1 - */ - s.playEmptySound = function() { - if (s.context == null) {return;} - var source = s.context.createBufferSource(); - source.buffer = s.context.createBuffer(1, 1, 22050); - source.connect(s.context.destination); - source.start(0, 0, 0); - }; - - -// Static Private Methods - /** - * Determine if XHR is supported, which is necessary for web audio. - * @method _isFileXHRSupported - * @return {Boolean} If XHR is supported. - * @since 0.4.2 - * @protected - * @static - */ - s._isFileXHRSupported = function() { - // it's much easier to detect when something goes wrong, so let's start optimistically - var supported = true; - - var xhr = new XMLHttpRequest(); - try { - xhr.open("GET", "WebAudioPluginTest.fail", false); // loading non-existant file triggers 404 only if it could load (synchronous call) - } catch (error) { - // catch errors in cases where the onerror is passed by - supported = false; - return supported; - } - xhr.onerror = function() { supported = false; }; // cause irrelevant - // with security turned off, we can get empty success results, which is actually a failed read (status code 0?) - xhr.onload = function() { supported = this.status == 404 || (this.status == 200 || (this.status == 0 && this.response != "")); }; - try { - xhr.send(); - } catch (error) { - // catch errors in cases where the onerror is passed by - supported = false; - } - - return supported; - }; - - /** - * Determine the capabilities of the plugin. Used internally. Please see the Sound API {{#crossLink "Sound/getCapabilities"}}{{/crossLink}} - * method for an overview of plugin capabilities. - * @method _generateCapabilities - * @static - * @protected - */ - s._generateCapabilities = function () { - if (s._capabilities != null) {return;} - // Web Audio can be in any formats supported by the audio element, from http://www.w3.org/TR/webaudio/#AudioContext-section - var t = document.createElement("audio"); - if (t.canPlayType == null) {return null;} - - if (s.context == null) { - if (window.AudioContext) { - s.context = new AudioContext(); - } else if (window.webkitAudioContext) { - s.context = new webkitAudioContext(); - } else { - return null; - } - } - - s._compatibilitySetUp(); - - // playing this inside of a touch event will enable audio on iOS, which starts muted - s.playEmptySound(); - - s._capabilities = { - panning:true, - volume:true, - tracks:-1 - }; - - // determine which extensions our browser supports for this plugin by iterating through Sound.SUPPORTED_EXTENSIONS - var supportedExtensions = createjs.Sound.SUPPORTED_EXTENSIONS; - var extensionMap = createjs.Sound.EXTENSION_MAP; - for (var i = 0, l = supportedExtensions.length; i < l; i++) { - var ext = supportedExtensions[i]; - var playType = extensionMap[ext] || ext; - s._capabilities[ext] = (t.canPlayType("audio/" + ext) != "no" && t.canPlayType("audio/" + ext) != "") || (t.canPlayType("audio/" + playType) != "no" && t.canPlayType("audio/" + playType) != ""); - } // OJR another way to do this might be canPlayType:"m4a", codex: mp4 - - // 0=no output, 1=mono, 2=stereo, 4=surround, 6=5.1 surround. - // See http://www.w3.org/TR/webaudio/#AudioChannelSplitter for more details on channels. - if (s.context.destination.numberOfChannels < 2) { - s._capabilities.panning = false; - } - }; - - /** - * Set up compatibility if only deprecated web audio calls are supported. - * See http://www.w3.org/TR/webaudio/#DeprecationNotes - * Needed so we can support new browsers that don't support deprecated calls (Firefox) as well as old browsers that - * don't support new calls. - * - * @method _compatibilitySetUp - * @static - * @protected - * @since 0.4.2 - */ - s._compatibilitySetUp = function() { - s._panningModel = "equalpower"; - //assume that if one new call is supported, they all are - if (s.context.createGain) { return; } - - // simple name change, functionality the same - s.context.createGain = s.context.createGainNode; - - // source node, add to prototype - var audioNode = s.context.createBufferSource(); - audioNode.__proto__.start = audioNode.__proto__.noteGrainOn; // note that noteGrainOn requires all 3 parameters - audioNode.__proto__.stop = audioNode.__proto__.noteOff; - - // panningModel - s._panningModel = 0; - }; - - -// Public Methods - p.toString = function () { - return "[WebAudioPlugin]"; - }; - - -// Private Methods - /** - * Set up needed properties on supported classes WebAudioSoundInstance and WebAudioLoader. - * @method _addPropsToClasses - * @static - * @protected - * @since 0.6.0 - */ - p._addPropsToClasses = function() { - var c = this._soundInstanceClass; - c.context = this.context; - c.destinationNode = this.gainNode; - c._panningModel = this._panningModel; - - this._loaderClass.context = this.context; - }; - - - /** - * Set the gain value for master audio. Should not be called externally. - * @method _updateVolume - * @protected - */ - p._updateVolume = function () { - var newVolume = createjs.Sound._masterMute ? 0 : this._volume; - if (newVolume != this.gainNode.gain.value) { - this.gainNode.gain.value = newVolume; - } - }; - - createjs.WebAudioPlugin = createjs.promote(WebAudioPlugin, "AbstractPlugin"); +this.createjs = this.createjs || {}; + +(function () { + + "use strict"; + + /** + * Play sounds using Web Audio in the browser. The WebAudioPlugin is currently the default plugin, and will be used + * anywhere that it is supported. To change plugin priority, check out the Sound API + * {{#crossLink "Sound/registerPlugins"}}{{/crossLink}} method. + + *

          Known Browser and OS issues for Web Audio

          + * Firefox 25 + *
          • mp3 audio files do not load properly on all windows machines, reported + * here.
            + * For this reason it is recommended to pass another FF supported type (ie ogg) first until this bug is resolved, if possible.
          + *
          + * Webkit (Chrome and Safari) + *
          • AudioNode.disconnect does not always seem to work. This can cause the file size to grow over time if you + * are playing a lot of audio files.
          + *
          + * iOS 6 limitations + *
          • Sound is initially muted and will only unmute through play being called inside a user initiated event (touch/click).
          • + *
          • A bug exists that will distort uncached audio when a video element is present in the DOM. You can avoid this bug + * by ensuring the audio and video audio share the same sampleRate.
          • + *
          + * @class WebAudioPlugin + * @extends AbstractPlugin + * @constructor + * @since 0.4.0 + */ + function WebAudioPlugin() { + this.AbstractPlugin_constructor(); + + +// Private Properties + /** + * Value to set panning model to equal power for WebAudioSoundInstance. Can be "equalpower" or 0 depending on browser implementation. + * @property _panningModel + * @type {Number / String} + * @protected + */ + this._panningModel = s._panningModel;; + + /** + * The web audio context, which WebAudio uses to play audio. All nodes that interact with the WebAudioPlugin + * need to be created within this context. + * @property context + * @type {AudioContext} + */ + this.context = s.context; + + /** + * A DynamicsCompressorNode, which is used to improve sound quality and prevent audio distortion. + * It is connected to context.destination. + * + * Can be accessed by advanced users through createjs.Sound.activePlugin.dynamicsCompressorNode. + * @property dynamicsCompressorNode + * @type {AudioNode} + */ + this.dynamicsCompressorNode = this.context.createDynamicsCompressor(); + this.dynamicsCompressorNode.connect(this.context.destination); + + /** + * A GainNode for controlling master volume. It is connected to {{#crossLink "WebAudioPlugin/dynamicsCompressorNode:property"}}{{/crossLink}}. + * + * Can be accessed by advanced users through createjs.Sound.activePlugin.gainNode. + * @property gainNode + * @type {AudioGainNode} + */ + this.gainNode = this.context.createGain(); + this.gainNode.connect(this.dynamicsCompressorNode); + createjs.WebAudioSoundInstance.destinationNode = this.gainNode; + + this._capabilities = s._capabilities; + + this._loaderClass = createjs.WebAudioLoader; + this._soundInstanceClass = createjs.WebAudioSoundInstance; + + this._addPropsToClasses(); + } + var p = createjs.extend(WebAudioPlugin, createjs.AbstractPlugin); + + // TODO: deprecated + // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. + + +// Static Properties + var s = WebAudioPlugin; + /** + * The capabilities of the plugin. This is generated via the {{#crossLink "WebAudioPlugin/_generateCapabilities:method"}}{{/crossLink}} + * method and is used internally. + * @property _capabilities + * @type {Object} + * @default null + * @protected + * @static + */ + s._capabilities = null; + + /** + * Value to set panning model to equal power for WebAudioSoundInstance. Can be "equalpower" or 0 depending on browser implementation. + * @property _panningModel + * @type {Number / String} + * @protected + * @static + */ + s._panningModel = "equalpower"; + + /** + * The web audio context, which WebAudio uses to play audio. All nodes that interact with the WebAudioPlugin + * need to be created within this context. + * + * Advanced users can set this to an existing context, but must do so before they call + * {{#crossLink "Sound/registerPlugins"}}{{/crossLink}} or {{#crossLink "Sound/initializeDefaultPlugins"}}{{/crossLink}}. + * + * @property context + * @type {AudioContext} + * @static + */ + s.context = null; + + +// Static Public Methods + /** + * Determine if the plugin can be used in the current browser/OS. + * @method isSupported + * @return {Boolean} If the plugin can be initialized. + * @static + */ + s.isSupported = function () { + // check if this is some kind of mobile device, Web Audio works with local protocol under PhoneGap and it is unlikely someone is trying to run a local file + var isMobilePhoneGap = createjs.BrowserDetect.isIOS || createjs.BrowserDetect.isAndroid || createjs.BrowserDetect.isBlackberry; + // OJR isMobile may be redundant with _isFileXHRSupported available. Consider removing. + if (location.protocol == "file:" && !isMobilePhoneGap && !this._isFileXHRSupported()) { return false; } // Web Audio requires XHR, which is not usually available locally + s._generateCapabilities(); + if (s.context == null) {return false;} + return true; + }; + + /** + * Plays an empty sound in the web audio context. This is used to enable web audio on iOS devices, as they + * require the first sound to be played inside of a user initiated event (touch/click). This is called when + * {{#crossLink "WebAudioPlugin"}}{{/crossLink}} is initialized (by Sound {{#crossLink "Sound/initializeDefaultPlugins"}}{{/crossLink}} + * for example). + * + *

          Example

          + * + * function handleTouch(event) { + * createjs.WebAudioPlugin.playEmptySound(); + * } + * + * @method playEmptySound + * @static + * @since 0.4.1 + */ + s.playEmptySound = function() { + if (s.context == null) {return;} + var source = s.context.createBufferSource(); + source.buffer = s.context.createBuffer(1, 1, 22050); + source.connect(s.context.destination); + source.start(0, 0, 0); + }; + + +// Static Private Methods + /** + * Determine if XHR is supported, which is necessary for web audio. + * @method _isFileXHRSupported + * @return {Boolean} If XHR is supported. + * @since 0.4.2 + * @protected + * @static + */ + s._isFileXHRSupported = function() { + // it's much easier to detect when something goes wrong, so let's start optimistically + var supported = true; + + var xhr = new XMLHttpRequest(); + try { + xhr.open("GET", "WebAudioPluginTest.fail", false); // loading non-existant file triggers 404 only if it could load (synchronous call) + } catch (error) { + // catch errors in cases where the onerror is passed by + supported = false; + return supported; + } + xhr.onerror = function() { supported = false; }; // cause irrelevant + // with security turned off, we can get empty success results, which is actually a failed read (status code 0?) + xhr.onload = function() { supported = this.status == 404 || (this.status == 200 || (this.status == 0 && this.response != "")); }; + try { + xhr.send(); + } catch (error) { + // catch errors in cases where the onerror is passed by + supported = false; + } + + return supported; + }; + + /** + * Determine the capabilities of the plugin. Used internally. Please see the Sound API {{#crossLink "Sound/getCapabilities"}}{{/crossLink}} + * method for an overview of plugin capabilities. + * @method _generateCapabilities + * @static + * @protected + */ + s._generateCapabilities = function () { + if (s._capabilities != null) {return;} + // Web Audio can be in any formats supported by the audio element, from http://www.w3.org/TR/webaudio/#AudioContext-section + var t = document.createElement("audio"); + if (t.canPlayType == null) {return null;} + + if (s.context == null) { + if (window.AudioContext) { + s.context = new AudioContext(); + } else if (window.webkitAudioContext) { + s.context = new webkitAudioContext(); + } else { + return null; + } + } + + s._compatibilitySetUp(); + + // playing this inside of a touch event will enable audio on iOS, which starts muted + s.playEmptySound(); + + s._capabilities = { + panning:true, + volume:true, + tracks:-1 + }; + + // determine which extensions our browser supports for this plugin by iterating through Sound.SUPPORTED_EXTENSIONS + var supportedExtensions = createjs.Sound.SUPPORTED_EXTENSIONS; + var extensionMap = createjs.Sound.EXTENSION_MAP; + for (var i = 0, l = supportedExtensions.length; i < l; i++) { + var ext = supportedExtensions[i]; + var playType = extensionMap[ext] || ext; + s._capabilities[ext] = (t.canPlayType("audio/" + ext) != "no" && t.canPlayType("audio/" + ext) != "") || (t.canPlayType("audio/" + playType) != "no" && t.canPlayType("audio/" + playType) != ""); + } // OJR another way to do this might be canPlayType:"m4a", codex: mp4 + + // 0=no output, 1=mono, 2=stereo, 4=surround, 6=5.1 surround. + // See http://www.w3.org/TR/webaudio/#AudioChannelSplitter for more details on channels. + if (s.context.destination.numberOfChannels < 2) { + s._capabilities.panning = false; + } + }; + + /** + * Set up compatibility if only deprecated web audio calls are supported. + * See http://www.w3.org/TR/webaudio/#DeprecationNotes + * Needed so we can support new browsers that don't support deprecated calls (Firefox) as well as old browsers that + * don't support new calls. + * + * @method _compatibilitySetUp + * @static + * @protected + * @since 0.4.2 + */ + s._compatibilitySetUp = function() { + s._panningModel = "equalpower"; + //assume that if one new call is supported, they all are + if (s.context.createGain) { return; } + + // simple name change, functionality the same + s.context.createGain = s.context.createGainNode; + + // source node, add to prototype + var audioNode = s.context.createBufferSource(); + audioNode.__proto__.start = audioNode.__proto__.noteGrainOn; // note that noteGrainOn requires all 3 parameters + audioNode.__proto__.stop = audioNode.__proto__.noteOff; + + // panningModel + s._panningModel = 0; + }; + + +// Public Methods + p.toString = function () { + return "[WebAudioPlugin]"; + }; + + +// Private Methods + /** + * Set up needed properties on supported classes WebAudioSoundInstance and WebAudioLoader. + * @method _addPropsToClasses + * @static + * @protected + * @since 0.6.0 + */ + p._addPropsToClasses = function() { + var c = this._soundInstanceClass; + c.context = this.context; + c.destinationNode = this.gainNode; + c._panningModel = this._panningModel; + + this._loaderClass.context = this.context; + }; + + + /** + * Set the gain value for master audio. Should not be called externally. + * @method _updateVolume + * @protected + */ + p._updateVolume = function () { + var newVolume = createjs.Sound._masterMute ? 0 : this._volume; + if (newVolume != this.gainNode.gain.value) { + this.gainNode.gain.value = newVolume; + } + }; + + createjs.WebAudioPlugin = createjs.promote(WebAudioPlugin, "AbstractPlugin"); }()); //############################################################################## // HTMLAudioTagPool.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - - /** - * HTMLAudioTagPool is an object pool for HTMLAudio tag instances. - * @class HTMLAudioTagPool - * @param {String} src The source of the channel. - * @protected - */ - function HTMLAudioTagPool() { - throw "HTMLAudioTagPool cannot be instantiated"; - } - - var s = HTMLAudioTagPool; - -// Static Properties - /** - * A hash lookup of each base audio tag, indexed by the audio source. - * @property _tags - * @type {{}} - * @static - * @protected - */ - s._tags = {}; - - /** - * An object pool for html audio tags - * @property _tagPool - * @type {TagPool} - * @static - * @protected - */ - s._tagPool = new TagPool(); - - /** - * A hash lookup of if a base audio tag is available, indexed by the audio source - * @property _tagsUsed - * @type {{}} - * @protected - * @static - */ - s._tagUsed = {}; - -// Static Methods - /** - * Get an audio tag with the given source. - * @method get - * @param {String} src The source file used by the audio tag. - * @static - */ - s.get = function (src) { - var t = s._tags[src]; - if (t == null) { - // create new base tag - t = s._tags[src] = s._tagPool.get(); - t.src = src; - } else { - // get base or pool - if (s._tagUsed[src]) { - t = s._tagPool.get(); - t.src = src; - } else { - s._tagUsed[src] = true; - } - } - return t; - }; - - /** - * Return an audio tag to the pool. - * @method set - * @param {String} src The source file used by the audio tag. - * @param {HTMLElement} tag Audio tag to set. - * @static - */ - s.set = function (src, tag) { - // check if this is base, if yes set boolean if not return to pool - if(tag == s._tags[src]) { - s._tagUsed[src] = false; - } else { - s._tagPool.set(tag); - } - }; - - /** - * Delete stored tag reference and return them to pool. Note that if the tag reference does not exist, this will fail. - * @method remove - * @param {String} src The source for the tag - * @return {Boolean} If the TagPool was deleted. - * @static - */ - s.remove = function (src) { - var tag = s._tags[src]; - if (tag == null) {return false;} - s._tagPool.set(tag); - delete(s._tags[src]); - delete(s._tagUsed[src]); - return true; - }; - - /** - * Gets the duration of the src audio in milliseconds - * @method getDuration - * @param {String} src The source file used by the audio tag. - * @return {Number} Duration of src in milliseconds - * @static - */ - s.getDuration= function (src) { - var t = s._tags[src]; - if (t == null) {return 0;} - return t.duration * 1000; - }; - - createjs.HTMLAudioTagPool = HTMLAudioTagPool; - - -// ************************************************************************************************************ - /** - * The TagPool is an object pool for HTMLAudio tag instances. - * #class TagPool - * @param {String} src The source of the channel. - * @protected - */ - function TagPool(src) { - -// Public Properties - /** - * A list of all available tags in the pool. - * #property tags - * @type {Array} - * @protected - */ - this._tags = []; - }; - - var p = TagPool.prototype; - p.constructor = TagPool; - - -// Public Methods - /** - * Get an HTMLAudioElement for immediate playback. This takes it out of the pool. - * #method get - * @return {HTMLAudioElement} An HTML audio tag. - */ - p.get = function () { - var tag; - if (this._tags.length == 0) { - tag = this._createTag(); - } else { - tag = this._tags.pop(); - } - if (tag.parentNode == null) {document.body.appendChild(tag);} - return tag; - }; - - /** - * Put an HTMLAudioElement back in the pool for use. - * #method set - * @param {HTMLAudioElement} tag HTML audio tag - */ - p.set = function (tag) { - // OJR this first step seems unnecessary - var index = createjs.indexOf(this._tags, tag); - if (index == -1) { - this._tags.src = null; - this._tags.push(tag); - } - }; - - p.toString = function () { - return "[TagPool]"; - }; - - -// Private Methods - /** - * Create an HTML audio tag. - * #method _createTag - * @param {String} src The source file to set for the audio tag. - * @return {HTMLElement} Returns an HTML audio tag. - * @protected - */ - p._createTag = function () { - var tag = document.createElement("audio"); - tag.autoplay = false; - tag.preload = "none"; - //LM: Firefox fails when this the preload="none" for other tags, but it needs to be "none" to ensure PreloadJS works. - return tag; - }; - +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + + /** + * HTMLAudioTagPool is an object pool for HTMLAudio tag instances. + * @class HTMLAudioTagPool + * @param {String} src The source of the channel. + * @protected + */ + function HTMLAudioTagPool() { + throw "HTMLAudioTagPool cannot be instantiated"; + } + + var s = HTMLAudioTagPool; + +// Static Properties + /** + * A hash lookup of each base audio tag, indexed by the audio source. + * @property _tags + * @type {{}} + * @static + * @protected + */ + s._tags = {}; + + /** + * An object pool for html audio tags + * @property _tagPool + * @type {TagPool} + * @static + * @protected + */ + s._tagPool = new TagPool(); + + /** + * A hash lookup of if a base audio tag is available, indexed by the audio source + * @property _tagsUsed + * @type {{}} + * @protected + * @static + */ + s._tagUsed = {}; + +// Static Methods + /** + * Get an audio tag with the given source. + * @method get + * @param {String} src The source file used by the audio tag. + * @static + */ + s.get = function (src) { + var t = s._tags[src]; + if (t == null) { + // create new base tag + t = s._tags[src] = s._tagPool.get(); + t.src = src; + } else { + // get base or pool + if (s._tagUsed[src]) { + t = s._tagPool.get(); + t.src = src; + } else { + s._tagUsed[src] = true; + } + } + return t; + }; + + /** + * Return an audio tag to the pool. + * @method set + * @param {String} src The source file used by the audio tag. + * @param {HTMLElement} tag Audio tag to set. + * @static + */ + s.set = function (src, tag) { + // check if this is base, if yes set boolean if not return to pool + if(tag == s._tags[src]) { + s._tagUsed[src] = false; + } else { + s._tagPool.set(tag); + } + }; + + /** + * Delete stored tag reference and return them to pool. Note that if the tag reference does not exist, this will fail. + * @method remove + * @param {String} src The source for the tag + * @return {Boolean} If the TagPool was deleted. + * @static + */ + s.remove = function (src) { + var tag = s._tags[src]; + if (tag == null) {return false;} + s._tagPool.set(tag); + delete(s._tags[src]); + delete(s._tagUsed[src]); + return true; + }; + + /** + * Gets the duration of the src audio in milliseconds + * @method getDuration + * @param {String} src The source file used by the audio tag. + * @return {Number} Duration of src in milliseconds + * @static + */ + s.getDuration= function (src) { + var t = s._tags[src]; + if (t == null) {return 0;} + return t.duration * 1000; + }; + + createjs.HTMLAudioTagPool = HTMLAudioTagPool; + + +// ************************************************************************************************************ + /** + * The TagPool is an object pool for HTMLAudio tag instances. + * #class TagPool + * @param {String} src The source of the channel. + * @protected + */ + function TagPool(src) { + +// Public Properties + /** + * A list of all available tags in the pool. + * #property tags + * @type {Array} + * @protected + */ + this._tags = []; + }; + + var p = TagPool.prototype; + p.constructor = TagPool; + + +// Public Methods + /** + * Get an HTMLAudioElement for immediate playback. This takes it out of the pool. + * #method get + * @return {HTMLAudioElement} An HTML audio tag. + */ + p.get = function () { + var tag; + if (this._tags.length == 0) { + tag = this._createTag(); + } else { + tag = this._tags.pop(); + } + if (tag.parentNode == null) {document.body.appendChild(tag);} + return tag; + }; + + /** + * Put an HTMLAudioElement back in the pool for use. + * #method set + * @param {HTMLAudioElement} tag HTML audio tag + */ + p.set = function (tag) { + // OJR this first step seems unnecessary + var index = createjs.indexOf(this._tags, tag); + if (index == -1) { + this._tags.src = null; + this._tags.push(tag); + } + }; + + p.toString = function () { + return "[TagPool]"; + }; + + +// Private Methods + /** + * Create an HTML audio tag. + * #method _createTag + * @param {String} src The source file to set for the audio tag. + * @return {HTMLElement} Returns an HTML audio tag. + * @protected + */ + p._createTag = function () { + var tag = document.createElement("audio"); + tag.autoplay = false; + tag.preload = "none"; + //LM: Firefox fails when this the preload="none" for other tags, but it needs to be "none" to ensure PreloadJS works. + return tag; + }; + }()); //############################################################################## // HTMLAudioSoundInstance.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - "use strict"; - - /** - * HTMLAudioSoundInstance extends the base api of {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} and is used by - * {{#crossLink "HTMLAudioPlugin"}}{{/crossLink}}. - * - * @param {String} src The path to and file name of the sound. - * @param {Number} startTime Audio sprite property used to apply an offset, in milliseconds. - * @param {Number} duration Audio sprite property used to set the time the clip plays for, in milliseconds. - * @param {Object} playbackResource Any resource needed by plugin to support audio playback. - * @class HTMLAudioSoundInstance - * @extends AbstractSoundInstance - * @constructor - */ - function HTMLAudioSoundInstance(src, startTime, duration, playbackResource) { - this.AbstractSoundInstance_constructor(src, startTime, duration, playbackResource); - - -// Private Properties - this._audioSpriteStopTime = null; - this._delayTimeoutId = null; - - // Proxies, make removing listeners easier. - this._endedHandler = createjs.proxy(this._handleSoundComplete, this); - this._readyHandler = createjs.proxy(this._handleTagReady, this); - this._stalledHandler = createjs.proxy(this._playFailed, this); - this._audioSpriteEndHandler = createjs.proxy(this._handleAudioSpriteLoop, this); - this._loopHandler = createjs.proxy(this._handleSoundComplete, this); - - if (duration) { - this._audioSpriteStopTime = (startTime + duration) * 0.001; - } else { - this._duration = createjs.HTMLAudioTagPool.getDuration(this.src); - } - } - var p = createjs.extend(HTMLAudioSoundInstance, createjs.AbstractSoundInstance); - - // TODO: deprecated - // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. - - -// Public Methods - /** - * Called by {{#crossLink "Sound"}}{{/crossLink}} when plugin does not handle master volume. - * undoc'd because it is not meant to be used outside of Sound - * #method setMasterVolume - * @param value - */ - p.setMasterVolume = function (value) { - this._updateVolume(); - }; - - /** - * Called by {{#crossLink "Sound"}}{{/crossLink}} when plugin does not handle master mute. - * undoc'd because it is not meant to be used outside of Sound - * #method setMasterMute - * @param value - */ - p.setMasterMute = function (isMuted) { - this._updateVolume(); - }; - - p.toString = function () { - return "[HTMLAudioSoundInstance]"; - }; - -//Private Methods - p._removeLooping = function() { - if(this._playbackResource == null) {return;} - this._playbackResource.loop = false; - this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); - }; - - p._addLooping = function() { - if(this._playbackResource == null || this._audioSpriteStopTime) {return;} - this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); - this._playbackResource.loop = true; - }; - - p._handleCleanUp = function () { - var tag = this._playbackResource; - if (tag != null) { - tag.pause(); - tag.loop = false; - tag.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED, this._endedHandler, false); - tag.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_READY, this._readyHandler, false); - tag.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_STALLED, this._stalledHandler, false); - tag.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); - tag.removeEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE, this._audioSpriteEndHandler, false); - - try { - tag.currentTime = this._startTime; - } catch (e) { - } // Reset Position - createjs.HTMLAudioTagPool.set(this.src, tag); - this._playbackResource = null; - } - }; - - p._beginPlaying = function (playProps) { - this._playbackResource = createjs.HTMLAudioTagPool.get(this.src); - return this.AbstractSoundInstance__beginPlaying(playProps); - }; - - p._handleSoundReady = function (event) { - if (this._playbackResource.readyState !== 4) { - var tag = this._playbackResource; - tag.addEventListener(createjs.HTMLAudioPlugin._AUDIO_READY, this._readyHandler, false); - tag.addEventListener(createjs.HTMLAudioPlugin._AUDIO_STALLED, this._stalledHandler, false); - tag.preload = "auto"; // This is necessary for Firefox, as it won't ever "load" until this is set. - tag.load(); - return; - } - - this._updateVolume(); - this._playbackResource.currentTime = (this._startTime + this._position) * 0.001; - if (this._audioSpriteStopTime) { - this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE, this._audioSpriteEndHandler, false); - } else { - this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED, this._endedHandler, false); - if(this._loop != 0) { - this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); - this._playbackResource.loop = true; - } - } - - this._playbackResource.play(); - }; - - /** - * Used to handle when a tag is not ready for immediate playback when it is returned from the HTMLAudioTagPool. - * @method _handleTagReady - * @param event - * @protected - */ - p._handleTagReady = function (event) { - this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_READY, this._readyHandler, false); - this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_STALLED, this._stalledHandler, false); - - this._handleSoundReady(); - }; - - p._pause = function () { - this._playbackResource.pause(); - }; - - p._resume = function () { - this._playbackResource.play(); - }; - - p._updateVolume = function () { - if (this._playbackResource != null) { - var newVolume = (this._muted || createjs.Sound._masterMute) ? 0 : this._volume * createjs.Sound._masterVolume; - if (newVolume != this._playbackResource.volume) {this._playbackResource.volume = newVolume;} - } - }; - - p._calculateCurrentPosition = function() { - return (this._playbackResource.currentTime * 1000) - this._startTime; - }; - - p._updatePosition = function() { - this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); - this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._handleSetPositionSeek, false); - try { - this._playbackResource.currentTime = (this._position + this._startTime) * 0.001; - } catch (error) { // Out of range - this._handleSetPositionSeek(null); - } - }; - - /** - * Used to enable setting position, as we need to wait for that seek to be done before we add back our loop handling seek listener - * @method _handleSetPositionSeek - * @param event - * @protected - */ - p._handleSetPositionSeek = function(event) { - if (this._playbackResource == null) { return; } - this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._handleSetPositionSeek, false); - this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); - }; - - /** - * Timer used to loop audio sprites. - * NOTE because of the inaccuracies in the timeupdate event (15 - 250ms) and in setting the tag to the desired timed - * (up to 300ms), it is strongly recommended not to loop audio sprites with HTML Audio if smooth looping is desired - * - * @method _handleAudioSpriteLoop - * @param event - * @private - */ - p._handleAudioSpriteLoop = function (event) { - if(this._playbackResource.currentTime <= this._audioSpriteStopTime) {return;} - this._playbackResource.pause(); - if(this._loop == 0) { - this._handleSoundComplete(null); - } else { - this._position = 0; - this._loop--; - this._playbackResource.currentTime = this._startTime * 0.001; - if(!this._paused) {this._playbackResource.play();} - this._sendEvent("loop"); - } - }; - - // NOTE with this approach audio will loop as reliably as the browser allows - // but we could end up sending the loop event after next loop playback begins - p._handleLoop = function (event) { - if(this._loop == 0) { - this._playbackResource.loop = false; - this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); - } - }; - - p._updateStartTime = function () { - this._audioSpriteStopTime = (this._startTime + this._duration) * 0.001; - - if(this.playState == createjs.Sound.PLAY_SUCCEEDED) { - this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED, this._endedHandler, false); - this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE, this._audioSpriteEndHandler, false); - } - }; - - p._updateDuration = function () { - this._audioSpriteStopTime = (this._startTime + this._duration) * 0.001; - - if(this.playState == createjs.Sound.PLAY_SUCCEEDED) { - this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED, this._endedHandler, false); - this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE, this._audioSpriteEndHandler, false); - } - }; - - /* This should never change - p._setDurationFromSource = function () { - this._duration = createjs.HTMLAudioTagPool.getDuration(this.src); - }; - */ - - createjs.HTMLAudioSoundInstance = createjs.promote(HTMLAudioSoundInstance, "AbstractSoundInstance"); +this.createjs = this.createjs || {}; + +(function () { + "use strict"; + + /** + * HTMLAudioSoundInstance extends the base api of {{#crossLink "AbstractSoundInstance"}}{{/crossLink}} and is used by + * {{#crossLink "HTMLAudioPlugin"}}{{/crossLink}}. + * + * @param {String} src The path to and file name of the sound. + * @param {Number} startTime Audio sprite property used to apply an offset, in milliseconds. + * @param {Number} duration Audio sprite property used to set the time the clip plays for, in milliseconds. + * @param {Object} playbackResource Any resource needed by plugin to support audio playback. + * @class HTMLAudioSoundInstance + * @extends AbstractSoundInstance + * @constructor + */ + function HTMLAudioSoundInstance(src, startTime, duration, playbackResource) { + this.AbstractSoundInstance_constructor(src, startTime, duration, playbackResource); + + +// Private Properties + this._audioSpriteStopTime = null; + this._delayTimeoutId = null; + + // Proxies, make removing listeners easier. + this._endedHandler = createjs.proxy(this._handleSoundComplete, this); + this._readyHandler = createjs.proxy(this._handleTagReady, this); + this._stalledHandler = createjs.proxy(this._playFailed, this); + this._audioSpriteEndHandler = createjs.proxy(this._handleAudioSpriteLoop, this); + this._loopHandler = createjs.proxy(this._handleSoundComplete, this); + + if (duration) { + this._audioSpriteStopTime = (startTime + duration) * 0.001; + } else { + this._duration = createjs.HTMLAudioTagPool.getDuration(this.src); + } + } + var p = createjs.extend(HTMLAudioSoundInstance, createjs.AbstractSoundInstance); + + // TODO: deprecated + // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. + + +// Public Methods + /** + * Called by {{#crossLink "Sound"}}{{/crossLink}} when plugin does not handle master volume. + * undoc'd because it is not meant to be used outside of Sound + * #method setMasterVolume + * @param value + */ + p.setMasterVolume = function (value) { + this._updateVolume(); + }; + + /** + * Called by {{#crossLink "Sound"}}{{/crossLink}} when plugin does not handle master mute. + * undoc'd because it is not meant to be used outside of Sound + * #method setMasterMute + * @param value + */ + p.setMasterMute = function (isMuted) { + this._updateVolume(); + }; + + p.toString = function () { + return "[HTMLAudioSoundInstance]"; + }; + +//Private Methods + p._removeLooping = function() { + if(this._playbackResource == null) {return;} + this._playbackResource.loop = false; + this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); + }; + + p._addLooping = function() { + if(this._playbackResource == null || this._audioSpriteStopTime) {return;} + this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); + this._playbackResource.loop = true; + }; + + p._handleCleanUp = function () { + var tag = this._playbackResource; + if (tag != null) { + tag.pause(); + tag.loop = false; + tag.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED, this._endedHandler, false); + tag.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_READY, this._readyHandler, false); + tag.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_STALLED, this._stalledHandler, false); + tag.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); + tag.removeEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE, this._audioSpriteEndHandler, false); + + try { + tag.currentTime = this._startTime; + } catch (e) { + } // Reset Position + createjs.HTMLAudioTagPool.set(this.src, tag); + this._playbackResource = null; + } + }; + + p._beginPlaying = function (playProps) { + this._playbackResource = createjs.HTMLAudioTagPool.get(this.src); + return this.AbstractSoundInstance__beginPlaying(playProps); + }; + + p._handleSoundReady = function (event) { + if (this._playbackResource.readyState !== 4) { + var tag = this._playbackResource; + tag.addEventListener(createjs.HTMLAudioPlugin._AUDIO_READY, this._readyHandler, false); + tag.addEventListener(createjs.HTMLAudioPlugin._AUDIO_STALLED, this._stalledHandler, false); + tag.preload = "auto"; // This is necessary for Firefox, as it won't ever "load" until this is set. + tag.load(); + return; + } + + this._updateVolume(); + this._playbackResource.currentTime = (this._startTime + this._position) * 0.001; + if (this._audioSpriteStopTime) { + this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE, this._audioSpriteEndHandler, false); + } else { + this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED, this._endedHandler, false); + if(this._loop != 0) { + this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); + this._playbackResource.loop = true; + } + } + + this._playbackResource.play(); + }; + + /** + * Used to handle when a tag is not ready for immediate playback when it is returned from the HTMLAudioTagPool. + * @method _handleTagReady + * @param event + * @protected + */ + p._handleTagReady = function (event) { + this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_READY, this._readyHandler, false); + this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_STALLED, this._stalledHandler, false); + + this._handleSoundReady(); + }; + + p._pause = function () { + this._playbackResource.pause(); + }; + + p._resume = function () { + this._playbackResource.play(); + }; + + p._updateVolume = function () { + if (this._playbackResource != null) { + var newVolume = (this._muted || createjs.Sound._masterMute) ? 0 : this._volume * createjs.Sound._masterVolume; + if (newVolume != this._playbackResource.volume) {this._playbackResource.volume = newVolume;} + } + }; + + p._calculateCurrentPosition = function() { + return (this._playbackResource.currentTime * 1000) - this._startTime; + }; + + p._updatePosition = function() { + this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); + this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._handleSetPositionSeek, false); + try { + this._playbackResource.currentTime = (this._position + this._startTime) * 0.001; + } catch (error) { // Out of range + this._handleSetPositionSeek(null); + } + }; + + /** + * Used to enable setting position, as we need to wait for that seek to be done before we add back our loop handling seek listener + * @method _handleSetPositionSeek + * @param event + * @protected + */ + p._handleSetPositionSeek = function(event) { + if (this._playbackResource == null) { return; } + this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._handleSetPositionSeek, false); + this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); + }; + + /** + * Timer used to loop audio sprites. + * NOTE because of the inaccuracies in the timeupdate event (15 - 250ms) and in setting the tag to the desired timed + * (up to 300ms), it is strongly recommended not to loop audio sprites with HTML Audio if smooth looping is desired + * + * @method _handleAudioSpriteLoop + * @param event + * @private + */ + p._handleAudioSpriteLoop = function (event) { + if(this._playbackResource.currentTime <= this._audioSpriteStopTime) {return;} + this._playbackResource.pause(); + if(this._loop == 0) { + this._handleSoundComplete(null); + } else { + this._position = 0; + this._loop--; + this._playbackResource.currentTime = this._startTime * 0.001; + if(!this._paused) {this._playbackResource.play();} + this._sendEvent("loop"); + } + }; + + // NOTE with this approach audio will loop as reliably as the browser allows + // but we could end up sending the loop event after next loop playback begins + p._handleLoop = function (event) { + if(this._loop == 0) { + this._playbackResource.loop = false; + this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED, this._loopHandler, false); + } + }; + + p._updateStartTime = function () { + this._audioSpriteStopTime = (this._startTime + this._duration) * 0.001; + + if(this.playState == createjs.Sound.PLAY_SUCCEEDED) { + this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED, this._endedHandler, false); + this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE, this._audioSpriteEndHandler, false); + } + }; + + p._updateDuration = function () { + this._audioSpriteStopTime = (this._startTime + this._duration) * 0.001; + + if(this.playState == createjs.Sound.PLAY_SUCCEEDED) { + this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED, this._endedHandler, false); + this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE, this._audioSpriteEndHandler, false); + } + }; + + /* This should never change + p._setDurationFromSource = function () { + this._duration = createjs.HTMLAudioTagPool.getDuration(this.src); + }; + */ + + createjs.HTMLAudioSoundInstance = createjs.promote(HTMLAudioSoundInstance, "AbstractSoundInstance"); }()); //############################################################################## // HTMLAudioPlugin.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - - "use strict"; - - /** - * Play sounds using HTML <audio> tags in the browser. This plugin is the second priority plugin installed - * by default, after the {{#crossLink "WebAudioPlugin"}}{{/crossLink}}. For older browsers that do not support html - * audio, include and install the {{#crossLink "FlashAudioPlugin"}}{{/crossLink}}. - * - *

          Known Browser and OS issues for HTML Audio

          - * All browsers
          - * Testing has shown in all browsers there is a limit to how many audio tag instances you are allowed. If you exceed - * this limit, you can expect to see unpredictable results. Please use {{#crossLink "Sound.MAX_INSTANCES"}}{{/crossLink}} as - * a guide to how many total audio tags you can safely use in all browsers. This issue is primarily limited to IE9. - * - * IE html limitations
          - *
          • There is a delay in applying volume changes to tags that occurs once playback is started. So if you have - * muted all sounds, they will all play during this delay until the mute applies internally. This happens regardless of - * when or how you apply the volume change, as the tag seems to need to play to apply it.
          • - *
          • MP3 encoding will not always work for audio tags if it's not default. We've found default encoding with - * 64kbps works.
          • - *
          • Occasionally very short samples will get cut off.
          • - *
          • There is a limit to how many audio tags you can load or play at once, which appears to be determined by - * hardware and browser settings. See {{#crossLink "HTMLAudioPlugin.MAX_INSTANCES"}}{{/crossLink}} for a safe estimate. - * Note that audio sprites can be used as a solution to this issue.
          - * - * Safari limitations
          - *
          • Safari requires Quicktime to be installed for audio playback.
          - * - * iOS 6 limitations
          - *
          • can only have one <audio> tag
          • - *
          • can not preload or autoplay the audio
          • - *
          • can not cache the audio
          • - *
          • can not play the audio except inside a user initiated event.
          • - *
          • Note it is recommended to use {{#crossLink "WebAudioPlugin"}}{{/crossLink}} for iOS (6+)
          • - *
          • audio sprites can be used to mitigate some of these issues and are strongly recommended on iOS
          • - *
          - * - * Android Native Browser limitations
          - *
          • We have no control over audio volume. Only the user can set volume on their device.
          • - *
          • We can only play audio inside a user event (touch/click). This currently means you cannot loop sound or use a delay.
          - * Android Chrome 26.0.1410.58 specific limitations
          - *
          • Can only play 1 sound at a time.
          • - *
          • Sound is not cached.
          • - *
          • Sound can only be loaded in a user initiated touch/click event.
          • - *
          • There is a delay before a sound is played, presumably while the src is loaded.
          • - *
          - * - * See {{#crossLink "Sound"}}{{/crossLink}} for general notes on known issues. - * - * @class HTMLAudioPlugin - * @extends AbstractPlugin - * @constructor - */ - function HTMLAudioPlugin() { - this.AbstractPlugin_constructor(); - - - // Public Properties - /** - * This is no longer needed as we are now using object pooling for tags. - * - * NOTE this property only exists as a limitation of HTML audio. - * @property defaultNumChannels - * @type {Number} - * @default 2 - * @since 0.4.0 - * @deprecated - */ - this.defaultNumChannels = 2; - - this._capabilities = s._capabilities; - - this._loaderClass = createjs.SoundLoader; - this._soundInstanceClass = createjs.HTMLAudioSoundInstance; - } - - var p = createjs.extend(HTMLAudioPlugin, createjs.AbstractPlugin); - var s = HTMLAudioPlugin; - - // TODO: deprecated - // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. - - -// Static Properties - /** - * The maximum number of instances that can be loaded or played. This is a browser limitation, primarily limited to IE9. - * The actual number varies from browser to browser (and is largely hardware dependant), but this is a safe estimate. - * Audio sprites work around this limitation. - * @property MAX_INSTANCES - * @type {Number} - * @default 30 - * @static - */ - s.MAX_INSTANCES = 30; - - /** - * Event constant for the "canPlayThrough" event for cleaner code. - * @property _AUDIO_READY - * @type {String} - * @default canplaythrough - * @static - * @protected - */ - s._AUDIO_READY = "canplaythrough"; - - /** - * Event constant for the "ended" event for cleaner code. - * @property _AUDIO_ENDED - * @type {String} - * @default ended - * @static - * @protected - */ - s._AUDIO_ENDED = "ended"; - - /** - * Event constant for the "seeked" event for cleaner code. We utilize this event for maintaining loop events. - * @property _AUDIO_SEEKED - * @type {String} - * @default seeked - * @static - * @protected - */ - s._AUDIO_SEEKED = "seeked"; - - /** - * Event constant for the "stalled" event for cleaner code. - * @property _AUDIO_STALLED - * @type {String} - * @default stalled - * @static - * @protected - */ - s._AUDIO_STALLED = "stalled"; - - /** - * Event constant for the "timeupdate" event for cleaner code. Utilized for looping audio sprites. - * This event callsback ever 15 to 250ms and can be dropped by the browser for performance. - * @property _TIME_UPDATE - * @type {String} - * @default timeupdate - * @static - * @protected - */ - s._TIME_UPDATE = "timeupdate"; - - /** - * The capabilities of the plugin. This is generated via the {{#crossLink "HTMLAudioPlugin/_generateCapabilities"}}{{/crossLink}} - * method. Please see the Sound {{#crossLink "Sound/getCapabilities"}}{{/crossLink}} method for an overview of all - * of the available properties. - * @property _capabilities - * @type {Object} - * @protected - * @static - */ - s._capabilities = null; - - -// Static Methods - /** - * Determine if the plugin can be used in the current browser/OS. Note that HTML audio is available in most modern - * browsers, but is disabled in iOS because of its limitations. - * @method isSupported - * @return {Boolean} If the plugin can be initialized. - * @static - */ - s.isSupported = function () { - s._generateCapabilities(); - return (s._capabilities != null); - }; - - /** - * Determine the capabilities of the plugin. Used internally. Please see the Sound API {{#crossLink "Sound/getCapabilities"}}{{/crossLink}} - * method for an overview of plugin capabilities. - * @method _generateCapabilities - * @static - * @protected - */ - s._generateCapabilities = function () { - if (s._capabilities != null) {return;} - var t = document.createElement("audio"); - if (t.canPlayType == null) {return null;} - - s._capabilities = { - panning:false, - volume:true, - tracks:-1 - }; - - // determine which extensions our browser supports for this plugin by iterating through Sound.SUPPORTED_EXTENSIONS - var supportedExtensions = createjs.Sound.SUPPORTED_EXTENSIONS; - var extensionMap = createjs.Sound.EXTENSION_MAP; - for (var i = 0, l = supportedExtensions.length; i < l; i++) { - var ext = supportedExtensions[i]; - var playType = extensionMap[ext] || ext; - s._capabilities[ext] = (t.canPlayType("audio/" + ext) != "no" && t.canPlayType("audio/" + ext) != "") || (t.canPlayType("audio/" + playType) != "no" && t.canPlayType("audio/" + playType) != ""); - } // OJR another way to do this might be canPlayType:"m4a", codex: mp4 - }; - - -// public methods - p.register = function (loadItem) { - var tag = createjs.HTMLAudioTagPool.get(loadItem.src); - var loader = this.AbstractPlugin_register(loadItem); - loader.setTag(tag); - - return loader; - }; - - p.removeSound = function (src) { - this.AbstractPlugin_removeSound(src); - createjs.HTMLAudioTagPool.remove(src); - }; - - p.create = function (src, startTime, duration) { - var si = this.AbstractPlugin_create(src, startTime, duration); - si.setPlaybackResource(null); - return si; - }; - - p.toString = function () { - return "[HTMLAudioPlugin]"; - }; - - // plugin does not support these - p.setVolume = p.getVolume = p.setMute = null; - - - createjs.HTMLAudioPlugin = createjs.promote(HTMLAudioPlugin, "AbstractPlugin"); +this.createjs = this.createjs || {}; + +(function () { + + "use strict"; + + /** + * Play sounds using HTML <audio> tags in the browser. This plugin is the second priority plugin installed + * by default, after the {{#crossLink "WebAudioPlugin"}}{{/crossLink}}. For older browsers that do not support html + * audio, include and install the {{#crossLink "FlashAudioPlugin"}}{{/crossLink}}. + * + *

          Known Browser and OS issues for HTML Audio

          + * All browsers
          + * Testing has shown in all browsers there is a limit to how many audio tag instances you are allowed. If you exceed + * this limit, you can expect to see unpredictable results. Please use {{#crossLink "Sound.MAX_INSTANCES"}}{{/crossLink}} as + * a guide to how many total audio tags you can safely use in all browsers. This issue is primarily limited to IE9. + * + * IE html limitations
          + *
          • There is a delay in applying volume changes to tags that occurs once playback is started. So if you have + * muted all sounds, they will all play during this delay until the mute applies internally. This happens regardless of + * when or how you apply the volume change, as the tag seems to need to play to apply it.
          • + *
          • MP3 encoding will not always work for audio tags if it's not default. We've found default encoding with + * 64kbps works.
          • + *
          • Occasionally very short samples will get cut off.
          • + *
          • There is a limit to how many audio tags you can load or play at once, which appears to be determined by + * hardware and browser settings. See {{#crossLink "HTMLAudioPlugin.MAX_INSTANCES"}}{{/crossLink}} for a safe estimate. + * Note that audio sprites can be used as a solution to this issue.
          + * + * Safari limitations
          + *
          • Safari requires Quicktime to be installed for audio playback.
          + * + * iOS 6 limitations
          + *
          • can only have one <audio> tag
          • + *
          • can not preload or autoplay the audio
          • + *
          • can not cache the audio
          • + *
          • can not play the audio except inside a user initiated event.
          • + *
          • Note it is recommended to use {{#crossLink "WebAudioPlugin"}}{{/crossLink}} for iOS (6+)
          • + *
          • audio sprites can be used to mitigate some of these issues and are strongly recommended on iOS
          • + *
          + * + * Android Native Browser limitations
          + *
          • We have no control over audio volume. Only the user can set volume on their device.
          • + *
          • We can only play audio inside a user event (touch/click). This currently means you cannot loop sound or use a delay.
          + * Android Chrome 26.0.1410.58 specific limitations
          + *
          • Can only play 1 sound at a time.
          • + *
          • Sound is not cached.
          • + *
          • Sound can only be loaded in a user initiated touch/click event.
          • + *
          • There is a delay before a sound is played, presumably while the src is loaded.
          • + *
          + * + * See {{#crossLink "Sound"}}{{/crossLink}} for general notes on known issues. + * + * @class HTMLAudioPlugin + * @extends AbstractPlugin + * @constructor + */ + function HTMLAudioPlugin() { + this.AbstractPlugin_constructor(); + + + // Public Properties + /** + * This is no longer needed as we are now using object pooling for tags. + * + * NOTE this property only exists as a limitation of HTML audio. + * @property defaultNumChannels + * @type {Number} + * @default 2 + * @since 0.4.0 + * @deprecated + */ + this.defaultNumChannels = 2; + + this._capabilities = s._capabilities; + + this._loaderClass = createjs.SoundLoader; + this._soundInstanceClass = createjs.HTMLAudioSoundInstance; + } + + var p = createjs.extend(HTMLAudioPlugin, createjs.AbstractPlugin); + var s = HTMLAudioPlugin; + + // TODO: deprecated + // p.initialize = function() {}; // searchable for devs wondering where it is. REMOVED. See docs for details. + + +// Static Properties + /** + * The maximum number of instances that can be loaded or played. This is a browser limitation, primarily limited to IE9. + * The actual number varies from browser to browser (and is largely hardware dependant), but this is a safe estimate. + * Audio sprites work around this limitation. + * @property MAX_INSTANCES + * @type {Number} + * @default 30 + * @static + */ + s.MAX_INSTANCES = 30; + + /** + * Event constant for the "canPlayThrough" event for cleaner code. + * @property _AUDIO_READY + * @type {String} + * @default canplaythrough + * @static + * @protected + */ + s._AUDIO_READY = "canplaythrough"; + + /** + * Event constant for the "ended" event for cleaner code. + * @property _AUDIO_ENDED + * @type {String} + * @default ended + * @static + * @protected + */ + s._AUDIO_ENDED = "ended"; + + /** + * Event constant for the "seeked" event for cleaner code. We utilize this event for maintaining loop events. + * @property _AUDIO_SEEKED + * @type {String} + * @default seeked + * @static + * @protected + */ + s._AUDIO_SEEKED = "seeked"; + + /** + * Event constant for the "stalled" event for cleaner code. + * @property _AUDIO_STALLED + * @type {String} + * @default stalled + * @static + * @protected + */ + s._AUDIO_STALLED = "stalled"; + + /** + * Event constant for the "timeupdate" event for cleaner code. Utilized for looping audio sprites. + * This event callsback ever 15 to 250ms and can be dropped by the browser for performance. + * @property _TIME_UPDATE + * @type {String} + * @default timeupdate + * @static + * @protected + */ + s._TIME_UPDATE = "timeupdate"; + + /** + * The capabilities of the plugin. This is generated via the {{#crossLink "HTMLAudioPlugin/_generateCapabilities"}}{{/crossLink}} + * method. Please see the Sound {{#crossLink "Sound/getCapabilities"}}{{/crossLink}} method for an overview of all + * of the available properties. + * @property _capabilities + * @type {Object} + * @protected + * @static + */ + s._capabilities = null; + + +// Static Methods + /** + * Determine if the plugin can be used in the current browser/OS. Note that HTML audio is available in most modern + * browsers, but is disabled in iOS because of its limitations. + * @method isSupported + * @return {Boolean} If the plugin can be initialized. + * @static + */ + s.isSupported = function () { + s._generateCapabilities(); + return (s._capabilities != null); + }; + + /** + * Determine the capabilities of the plugin. Used internally. Please see the Sound API {{#crossLink "Sound/getCapabilities"}}{{/crossLink}} + * method for an overview of plugin capabilities. + * @method _generateCapabilities + * @static + * @protected + */ + s._generateCapabilities = function () { + if (s._capabilities != null) {return;} + var t = document.createElement("audio"); + if (t.canPlayType == null) {return null;} + + s._capabilities = { + panning:false, + volume:true, + tracks:-1 + }; + + // determine which extensions our browser supports for this plugin by iterating through Sound.SUPPORTED_EXTENSIONS + var supportedExtensions = createjs.Sound.SUPPORTED_EXTENSIONS; + var extensionMap = createjs.Sound.EXTENSION_MAP; + for (var i = 0, l = supportedExtensions.length; i < l; i++) { + var ext = supportedExtensions[i]; + var playType = extensionMap[ext] || ext; + s._capabilities[ext] = (t.canPlayType("audio/" + ext) != "no" && t.canPlayType("audio/" + ext) != "") || (t.canPlayType("audio/" + playType) != "no" && t.canPlayType("audio/" + playType) != ""); + } // OJR another way to do this might be canPlayType:"m4a", codex: mp4 + }; + + +// public methods + p.register = function (loadItem) { + var tag = createjs.HTMLAudioTagPool.get(loadItem.src); + var loader = this.AbstractPlugin_register(loadItem); + loader.setTag(tag); + + return loader; + }; + + p.removeSound = function (src) { + this.AbstractPlugin_removeSound(src); + createjs.HTMLAudioTagPool.remove(src); + }; + + p.create = function (src, startTime, duration) { + var si = this.AbstractPlugin_create(src, startTime, duration); + si.setPlaybackResource(null); + return si; + }; + + p.toString = function () { + return "[HTMLAudioPlugin]"; + }; + + // plugin does not support these + p.setVolume = p.getVolume = p.setMute = null; + + + createjs.HTMLAudioPlugin = createjs.promote(HTMLAudioPlugin, "AbstractPlugin"); }()); \ No newline at end of file diff --git a/lib/soundjs-NEXT.min.js b/lib/soundjs-NEXT.min.js index c1459dfa..e6fc6b04 100644 --- a/lib/soundjs-NEXT.min.js +++ b/lib/soundjs-NEXT.min.js @@ -2,7 +2,7 @@ * @license SoundJS * Visit http://createjs.com/ for documentation, updates and examples. * -* Copyright (c) 2011-2013 gskinner.com, inc. +* Copyright (c) 2011-2015 gskinner.com, inc. * * Distributed under the terms of the MIT license. * http://www.opensource.org/licenses/mit-license.html @@ -14,5 +14,5 @@ * SoundJS FlashAudioPlugin also includes swfobject (http://code.google.com/p/swfobject/) */ -this.createjs=this.createjs||{},function(){var a=createjs.SoundJS=createjs.SoundJS||{};a.version="NEXT",a.buildDate="Tue, 19 May 2015 17:26:59 GMT"}(),this.createjs=this.createjs||{},createjs.extend=function(a,b){"use strict";function c(){this.constructor=a}return c.prototype=b.prototype,a.prototype=new c},this.createjs=this.createjs||{},createjs.promote=function(a,b){"use strict";var c=a.prototype,d=Object.getPrototypeOf&&Object.getPrototypeOf(c)||c.__proto__;if(d){c[(b+="_")+"constructor"]=d.constructor;for(var e in d)c.hasOwnProperty(e)&&"function"==typeof d[e]&&(c[b+e]=d[e])}return a},this.createjs=this.createjs||{},createjs.indexOf=function(a,b){"use strict";for(var c=0,d=a.length;d>c;c++)if(b===a[c])return c;return-1},this.createjs=this.createjs||{},function(){"use strict";createjs.proxy=function(a,b){var c=Array.prototype.slice.call(arguments,2);return function(){return a.apply(b,Array.prototype.slice.call(arguments,0).concat(c))}}}(),this.createjs=this.createjs||{},function(){"use strict";function BrowserDetect(){throw"BrowserDetect cannot be instantiated"}var a=BrowserDetect.agent=window.navigator.userAgent;BrowserDetect.isWindowPhone=a.indexOf("IEMobile")>-1||a.indexOf("Windows Phone")>-1,BrowserDetect.isFirefox=a.indexOf("Firefox")>-1,BrowserDetect.isOpera=null!=window.opera,BrowserDetect.isChrome=a.indexOf("Chrome")>-1,BrowserDetect.isIOS=(a.indexOf("iPod")>-1||a.indexOf("iPhone")>-1||a.indexOf("iPad")>-1)&&!BrowserDetect.isWindowPhone,BrowserDetect.isAndroid=a.indexOf("Android")>-1&&!BrowserDetect.isWindowPhone,BrowserDetect.isBlackberry=a.indexOf("Blackberry")>-1,createjs.BrowserDetect=BrowserDetect}(),this.createjs=this.createjs||{},function(){"use strict";function EventDispatcher(){this._listeners=null,this._captureListeners=null}var a=EventDispatcher.prototype;EventDispatcher.initialize=function(b){b.addEventListener=a.addEventListener,b.on=a.on,b.removeEventListener=b.off=a.removeEventListener,b.removeAllEventListeners=a.removeAllEventListeners,b.hasEventListener=a.hasEventListener,b.dispatchEvent=a.dispatchEvent,b._dispatchEvent=a._dispatchEvent,b.willTrigger=a.willTrigger},a.addEventListener=function(a,b,c){var d;d=c?this._captureListeners=this._captureListeners||{}:this._listeners=this._listeners||{};var e=d[a];return e&&this.removeEventListener(a,b,c),e=d[a],e?e.push(b):d[a]=[b],b},a.on=function(a,b,c,d,e,f){return b.handleEvent&&(c=c||b,b=b.handleEvent),c=c||this,this.addEventListener(a,function(a){b.call(c,a,e),d&&a.remove()},f)},a.removeEventListener=function(a,b,c){var d=c?this._captureListeners:this._listeners;if(d){var e=d[a];if(e)for(var f=0,g=e.length;g>f;f++)if(e[f]==b){1==g?delete d[a]:e.splice(f,1);break}}},a.off=a.removeEventListener,a.removeAllEventListeners=function(a){a?(this._listeners&&delete this._listeners[a],this._captureListeners&&delete this._captureListeners[a]):this._listeners=this._captureListeners=null},a.dispatchEvent=function(a){if("string"==typeof a){var b=this._listeners;if(!b||!b[a])return!1;a=new createjs.Event(a)}else a.target&&a.clone&&(a=a.clone());try{a.target=this}catch(c){}if(a.bubbles&&this.parent){for(var d=this,e=[d];d.parent;)e.push(d=d.parent);var f,g=e.length;for(f=g-1;f>=0&&!a.propagationStopped;f--)e[f]._dispatchEvent(a,1+(0==f));for(f=1;g>f&&!a.propagationStopped;f++)e[f]._dispatchEvent(a,3)}else this._dispatchEvent(a,2);return a.defaultPrevented},a.hasEventListener=function(a){var b=this._listeners,c=this._captureListeners;return!!(b&&b[a]||c&&c[a])},a.willTrigger=function(a){for(var b=this;b;){if(b.hasEventListener(a))return!0;b=b.parent}return!1},a.toString=function(){return"[EventDispatcher]"},a._dispatchEvent=function(a,b){var c,d=1==b?this._captureListeners:this._listeners;if(a&&d){var e=d[a.type];if(!e||!(c=e.length))return;try{a.currentTarget=this}catch(f){}try{a.eventPhase=b}catch(f){}a.removed=!1,e=e.slice();for(var g=0;c>g&&!a.immediatePropagationStopped;g++){var h=e[g];h.handleEvent?h.handleEvent(a):h(a),a.removed&&(this.off(a.type,h,1==b),a.removed=!1)}}},createjs.EventDispatcher=EventDispatcher}(),this.createjs=this.createjs||{},function(){"use strict";function Event(a,b,c){this.type=a,this.target=null,this.currentTarget=null,this.eventPhase=0,this.bubbles=!!b,this.cancelable=!!c,this.timeStamp=(new Date).getTime(),this.defaultPrevented=!1,this.propagationStopped=!1,this.immediatePropagationStopped=!1,this.removed=!1}var a=Event.prototype;a.preventDefault=function(){this.defaultPrevented=this.cancelable&&!0},a.stopPropagation=function(){this.propagationStopped=!0},a.stopImmediatePropagation=function(){this.immediatePropagationStopped=this.propagationStopped=!0},a.remove=function(){this.removed=!0},a.clone=function(){return new Event(this.type,this.bubbles,this.cancelable)},a.set=function(a){for(var b in a)this[b]=a[b];return this},a.toString=function(){return"[Event (type="+this.type+")]"},createjs.Event=Event}(),this.createjs=this.createjs||{},function(){"use strict";function ErrorEvent(a,b,c){this.Event_constructor("error"),this.title=a,this.message=b,this.data=c}var a=createjs.extend(ErrorEvent,createjs.Event);a.clone=function(){return new createjs.ErrorEvent(this.title,this.message,this.data)},createjs.ErrorEvent=createjs.promote(ErrorEvent,"Event")}(),this.createjs=this.createjs||{},function(){"use strict";function ProgressEvent(a,b){this.Event_constructor("progress"),this.loaded=a,this.total=null==b?1:b,this.progress=0==b?0:this.loaded/this.total}var a=createjs.extend(ProgressEvent,createjs.Event);a.clone=function(){return new createjs.ProgressEvent(this.loaded,this.total)},createjs.ProgressEvent=createjs.promote(ProgressEvent,"Event")}(window),this.createjs=this.createjs||{},function(){"use strict";function LoadItem(){this.src=null,this.type=null,this.id=null,this.maintainOrder=!1,this.callback=null,this.data=null,this.method=createjs.LoadItem.GET,this.values=null,this.headers=null,this.withCredentials=!1,this.mimeType=null,this.crossOrigin=null,this.loadTimeout=b.LOAD_TIMEOUT_DEFAULT}var a=LoadItem.prototype={},b=LoadItem;b.LOAD_TIMEOUT_DEFAULT=8e3,b.create=function(a){if("string"==typeof a){var c=new LoadItem;return c.src=a,c}if(a instanceof b)return a;if(a instanceof Object&&a.src)return null==a.loadTimeout&&(a.loadTimeout=b.LOAD_TIMEOUT_DEFAULT),a;throw new Error("Type not recognized.")},a.set=function(a){for(var b in a)this[b]=a[b];return this},createjs.LoadItem=b}(),function(){var a={};a.ABSOLUTE_PATT=/^(?:\w+:)?\/{2}/i,a.RELATIVE_PATT=/^[./]*?\//i,a.EXTENSION_PATT=/\/?[^/]+\.(\w{1,5})$/i,a.parseURI=function(b){var c={absolute:!1,relative:!1};if(null==b)return c;var d=b.indexOf("?");d>-1&&(b=b.substr(0,d));var e;return a.ABSOLUTE_PATT.test(b)?c.absolute=!0:a.RELATIVE_PATT.test(b)&&(c.relative=!0),(e=b.match(a.EXTENSION_PATT))&&(c.extension=e[1].toLowerCase()),c},a.formatQueryString=function(a,b){if(null==a)throw new Error("You must specify data.");var c=[];for(var d in a)c.push(d+"="+escape(a[d]));return b&&(c=c.concat(b)),c.join("&")},a.buildPath=function(a,b){if(null==b)return a;var c=[],d=a.indexOf("?");if(-1!=d){var e=a.slice(d+1);c=c.concat(e.split("&"))}return-1!=d?a.slice(0,d)+"?"+this._formatQueryString(b,c):a+"?"+this._formatQueryString(b,c)},a.isCrossDomain=function(a){var b=document.createElement("a");b.href=a.src;var c=document.createElement("a");c.href=location.href;var d=""!=b.hostname&&(b.port!=c.port||b.protocol!=c.protocol||b.hostname!=c.hostname);return d},a.isLocal=function(a){var b=document.createElement("a");return b.href=a.src,""==b.hostname&&"file:"==b.protocol},a.isBinary=function(a){switch(a){case createjs.AbstractLoader.IMAGE:case createjs.AbstractLoader.BINARY:return!0;default:return!1}},a.isImageTag=function(a){return a instanceof HTMLImageElement},a.isAudioTag=function(a){return window.HTMLAudioElement?a instanceof HTMLAudioElement:!1},a.isVideoTag=function(a){return window.HTMLVideoElement?a instanceof HTMLVideoElement:!1},a.isText=function(a){switch(a){case createjs.AbstractLoader.TEXT:case createjs.AbstractLoader.JSON:case createjs.AbstractLoader.MANIFEST:case createjs.AbstractLoader.XML:case createjs.AbstractLoader.CSS:case createjs.AbstractLoader.SVG:case createjs.AbstractLoader.JAVASCRIPT:case createjs.AbstractLoader.SPRITESHEET:return!0;default:return!1}},a.getTypeByExtension=function(a){if(null==a)return createjs.AbstractLoader.TEXT;switch(a.toLowerCase()){case"jpeg":case"jpg":case"gif":case"png":case"webp":case"bmp":return createjs.AbstractLoader.IMAGE;case"ogg":case"mp3":case"webm":return createjs.AbstractLoader.SOUND;case"mp4":case"webm":case"ts":return createjs.AbstractLoader.VIDEO;case"json":return createjs.AbstractLoader.JSON;case"xml":return createjs.AbstractLoader.XML;case"css":return createjs.AbstractLoader.CSS;case"js":return createjs.AbstractLoader.JAVASCRIPT;case"svg":return createjs.AbstractLoader.SVG;default:return createjs.AbstractLoader.TEXT}},createjs.RequestUtils=a}(),this.createjs=this.createjs||{},function(){"use strict";function AbstractLoader(a,b,c){this.EventDispatcher_constructor(),this.loaded=!1,this.canceled=!1,this.progress=0,this.type=c,this.resultFormatter=null,this._item=a?createjs.LoadItem.create(a):null,this._preferXHR=b,this._result=null,this._rawResult=null,this._loadedItems=null,this._tagSrcAttribute=null,this._tag=null}var a=createjs.extend(AbstractLoader,createjs.EventDispatcher),b=AbstractLoader;b.POST="POST",b.GET="GET",b.BINARY="binary",b.CSS="css",b.IMAGE="image",b.JAVASCRIPT="javascript",b.JSON="json",b.JSONP="jsonp",b.MANIFEST="manifest",b.SOUND="sound",b.VIDEO="video",b.SPRITESHEET="spritesheet",b.SVG="svg",b.TEXT="text",b.XML="xml",a.getItem=function(){return this._item},a.getResult=function(a){return a?this._rawResult:this._result},a.getTag=function(){return this._tag},a.setTag=function(a){this._tag=a},a.load=function(){this._createRequest(),this._request.on("complete",this,this),this._request.on("progress",this,this),this._request.on("loadStart",this,this),this._request.on("abort",this,this),this._request.on("timeout",this,this),this._request.on("error",this,this);var a=new createjs.Event("initialize");a.loader=this._request,this.dispatchEvent(a),this._request.load()},a.cancel=function(){this.canceled=!0,this.destroy()},a.destroy=function(){this._request&&(this._request.removeAllEventListeners(),this._request.destroy()),this._request=null,this._item=null,this._rawResult=null,this._result=null,this._loadItems=null,this.removeAllEventListeners()},a.getLoadedItems=function(){return this._loadedItems},a._createRequest=function(){this._request=this._preferXHR?new createjs.XHRRequest(this._item):new createjs.TagRequest(this._item,this._tag||this._createTag(),this._tagSrcAttribute)},a._createTag=function(){return null},a._sendLoadStart=function(){this._isCanceled()||this.dispatchEvent("loadstart")},a._sendProgress=function(a){if(!this._isCanceled()){var b=null;"number"==typeof a?(this.progress=a,b=new createjs.ProgressEvent(this.progress)):(b=a,this.progress=a.loaded/a.total,b.progress=this.progress,(isNaN(this.progress)||1/0==this.progress)&&(this.progress=0)),this.hasEventListener("progress")&&this.dispatchEvent(b)}},a._sendComplete=function(){if(!this._isCanceled()){this.loaded=!0;var a=new createjs.Event("complete");a.rawResult=this._rawResult,null!=this._result&&(a.result=this._result),this.dispatchEvent(a)}},a._sendError=function(a){!this._isCanceled()&&this.hasEventListener("error")&&(null==a&&(a=new createjs.ErrorEvent("PRELOAD_ERROR_EMPTY")),this.dispatchEvent(a))},a._isCanceled=function(){return null==window.createjs||this.canceled?!0:!1},a.resultFormatter=null,a.handleEvent=function(a){switch(a.type){case"complete":this._rawResult=a.target._response;var b=this.resultFormatter&&this.resultFormatter(this),c=this;b instanceof Function?b(function(a){c._result=a,c._sendComplete()}):(this._result=b||this._rawResult,this._sendComplete());break;case"progress":this._sendProgress(a);break;case"error":this._sendError(a);break;case"loadstart":this._sendLoadStart();break;case"abort":case"timeout":this._isCanceled()||this.dispatchEvent(a.type)}},a.buildPath=function(a,b){return createjs.RequestUtils.buildPath(a,b)},a.toString=function(){return"[PreloadJS AbstractLoader]"},createjs.AbstractLoader=createjs.promote(AbstractLoader,"EventDispatcher")}(),this.createjs=this.createjs||{},function(){"use strict";function AbstractMediaLoader(a,b,c){this.AbstractLoader_constructor(a,b,c),this.resultFormatter=this._formatResult,this._tagSrcAttribute="src"}var a=createjs.extend(AbstractMediaLoader,createjs.AbstractLoader);a.load=function(){this._tag||(this._tag=this._createTag(this._item.src)),this._tag.preload="auto",this._tag.load(),this.AbstractLoader_load()},a._createTag=function(){},a._createRequest=function(){this._request=this._preferXHR?new createjs.XHRRequest(this._item):new createjs.MediaTagRequest(this._item,this._tag||this._createTag(),this._tagSrcAttribute)},a._formatResult=function(a){return this._tag.removeEventListener&&this._tag.removeEventListener("canplaythrough",this._loadedHandler),this._tag.onstalled=null,this._preferXHR&&(a.getTag().src=a.getResult(!0)),a.getTag()},createjs.AbstractMediaLoader=createjs.promote(AbstractMediaLoader,"AbstractLoader")}(),this.createjs=this.createjs||{},function(){"use strict";var AbstractRequest=function(a){this._item=a},a=createjs.extend(AbstractRequest,createjs.EventDispatcher);a.load=function(){},a.destroy=function(){},a.cancel=function(){},createjs.AbstractRequest=createjs.promote(AbstractRequest,"EventDispatcher")}(),this.createjs=this.createjs||{},function(){"use strict";function TagRequest(a,b,c){this.AbstractRequest_constructor(a),this._tag=b,this._tagSrcAttribute=c,this._loadedHandler=createjs.proxy(this._handleTagComplete,this),this._addedToDOM=!1,this._startTagVisibility=null}var a=createjs.extend(TagRequest,createjs.AbstractRequest);a.load=function(){this._tag.onload=createjs.proxy(this._handleTagComplete,this),this._tag.onreadystatechange=createjs.proxy(this._handleReadyStateChange,this),this._tag.onerror=createjs.proxy(this._handleError,this);var a=new createjs.Event("initialize");a.loader=this._tag,this.dispatchEvent(a),this._hideTag(),this._loadTimeout=setTimeout(createjs.proxy(this._handleTimeout,this),this._item.loadTimeout),this._tag[this._tagSrcAttribute]=this._item.src,null==this._tag.parentNode&&(window.document.body.appendChild(this._tag),this._addedToDOM=!0)},a.destroy=function(){this._clean(),this._tag=null,this.AbstractRequest_destroy()},a._handleReadyStateChange=function(){clearTimeout(this._loadTimeout);var a=this._tag;("loaded"==a.readyState||"complete"==a.readyState)&&this._handleTagComplete()},a._handleError=function(){this._clean(),this.dispatchEvent("error")},a._handleTagComplete=function(){this._rawResult=this._tag,this._result=this.resultFormatter&&this.resultFormatter(this)||this._rawResult,this._clean(),this._showTag(),this.dispatchEvent("complete")},a._handleTimeout=function(){this._clean(),this.dispatchEvent(new createjs.Event("timeout"))},a._clean=function(){this._tag.onload=null,this._tag.onreadystatechange=null,this._tag.onerror=null,this._addedToDOM&&null!=this._tag.parentNode&&this._tag.parentNode.removeChild(this._tag),clearTimeout(this._loadTimeout)},a._hideTag=function(){this._startTagVisibility=this._tag.style.visibility,this._tag.style.visibility="hidden"},a._showTag=function(){this._tag.style.visibility=this._startTagVisibility},a._handleStalled=function(){},createjs.TagRequest=createjs.promote(TagRequest,"AbstractRequest")}(),this.createjs=this.createjs||{},function(){"use strict";function MediaTagRequest(a,b,c){this.AbstractRequest_constructor(a),this._tag=b,this._tagSrcAttribute=c,this._loadedHandler=createjs.proxy(this._handleTagComplete,this)}var a=createjs.extend(MediaTagRequest,createjs.TagRequest);a.load=function(){var a=createjs.proxy(this._handleStalled,this);this._stalledCallback=a;var b=createjs.proxy(this._handleProgress,this);this._handleProgress=b,this._tag.addEventListener("stalled",a),this._tag.addEventListener("progress",b),this._tag.addEventListener&&this._tag.addEventListener("canplaythrough",this._loadedHandler,!1),this.TagRequest_load()},a._handleReadyStateChange=function(){clearTimeout(this._loadTimeout);var a=this._tag;("loaded"==a.readyState||"complete"==a.readyState)&&this._handleTagComplete()},a._handleStalled=function(){},a._handleProgress=function(a){if(a&&!(a.loaded>0&&0==a.total)){var b=new createjs.ProgressEvent(a.loaded,a.total);this.dispatchEvent(b)}},a._clean=function(){this._tag.removeEventListener&&this._tag.removeEventListener("canplaythrough",this._loadedHandler),this._tag.removeEventListener("stalled",this._stalledCallback),this._tag.removeEventListener("progress",this._progressCallback),this.TagRequest__clean()},createjs.MediaTagRequest=createjs.promote(MediaTagRequest,"TagRequest")}(),this.createjs=this.createjs||{},function(){"use strict";function XHRRequest(a){this.AbstractRequest_constructor(a),this._request=null,this._loadTimeout=null,this._xhrLevel=1,this._response=null,this._rawResponse=null,this._canceled=!1,this._handleLoadStartProxy=createjs.proxy(this._handleLoadStart,this),this._handleProgressProxy=createjs.proxy(this._handleProgress,this),this._handleAbortProxy=createjs.proxy(this._handleAbort,this),this._handleErrorProxy=createjs.proxy(this._handleError,this),this._handleTimeoutProxy=createjs.proxy(this._handleTimeout,this),this._handleLoadProxy=createjs.proxy(this._handleLoad,this),this._handleReadyStateChangeProxy=createjs.proxy(this._handleReadyStateChange,this),!this._createXHR(a)}var a=createjs.extend(XHRRequest,createjs.AbstractRequest);XHRRequest.ACTIVEX_VERSIONS=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],a.getResult=function(a){return a&&this._rawResponse?this._rawResponse:this._response},a.cancel=function(){this.canceled=!0,this._clean(),this._request.abort()},a.load=function(){if(null==this._request)return void this._handleError();this._request.addEventListener("loadstart",this._handleLoadStartProxy,!1),this._request.addEventListener("progress",this._handleProgressProxy,!1),this._request.addEventListener("abort",this._handleAbortProxy,!1),this._request.addEventListener("error",this._handleErrorProxy,!1),this._request.addEventListener("timeout",this._handleTimeoutProxy,!1),this._request.addEventListener("load",this._handleLoadProxy,!1),this._request.addEventListener("readystatechange",this._handleReadyStateChangeProxy,!1),1==this._xhrLevel&&(this._loadTimeout=setTimeout(createjs.proxy(this._handleTimeout,this),this._item.loadTimeout));try{this._item.values&&this._item.method!=createjs.AbstractLoader.GET?this._item.method==createjs.AbstractLoader.POST&&this._request.send(createjs.RequestUtils.formatQueryString(this._item.values)):this._request.send()}catch(a){this.dispatchEvent(new createjs.ErrorEvent("XHR_SEND",null,a))}},a.setResponseType=function(a){this._request.responseType=a},a.getAllResponseHeaders=function(){return this._request.getAllResponseHeaders instanceof Function?this._request.getAllResponseHeaders():null},a.getResponseHeader=function(a){return this._request.getResponseHeader instanceof Function?this._request.getResponseHeader(a):null},a._handleProgress=function(a){if(a&&!(a.loaded>0&&0==a.total)){var b=new createjs.ProgressEvent(a.loaded,a.total);this.dispatchEvent(b)}},a._handleLoadStart=function(){clearTimeout(this._loadTimeout),this.dispatchEvent("loadstart")},a._handleAbort=function(a){this._clean(),this.dispatchEvent(new createjs.ErrorEvent("XHR_ABORTED",null,a))},a._handleError=function(a){this._clean(),this.dispatchEvent(new createjs.ErrorEvent(a.message))},a._handleReadyStateChange=function(){4==this._request.readyState&&this._handleLoad()},a._handleLoad=function(){if(!this.loaded){this.loaded=!0;var a=this._checkError();if(a)return void this._handleError(a);this._response=this._getResponse(),this._clean(),this.dispatchEvent(new createjs.Event("complete"))}},a._handleTimeout=function(a){this._clean(),this.dispatchEvent(new createjs.ErrorEvent("PRELOAD_TIMEOUT",null,a))},a._checkError=function(){var a=parseInt(this._request.status);switch(a){case 404:case 0:return new Error(a)}return null},a._getResponse=function(){if(null!=this._response)return this._response;if(null!=this._request.response)return this._request.response;try{if(null!=this._request.responseText)return this._request.responseText}catch(a){}try{if(null!=this._request.responseXML)return this._request.responseXML}catch(a){}return null},a._createXHR=function(a){var b=createjs.RequestUtils.isCrossDomain(a),c={},d=null;if(window.XMLHttpRequest)d=new XMLHttpRequest,b&&void 0===d.withCredentials&&window.XDomainRequest&&(d=new XDomainRequest);else{for(var e=0,f=s.ACTIVEX_VERSIONS.length;f>e;e++){{s.ACTIVEX_VERSIONS[e]}try{d=new ActiveXObject(axVersions);break}catch(g){}}if(null==d)return!1}null==a.mimeType&&createjs.RequestUtils.isText(a.type)&&(a.mimeType="text/plain; charset=utf-8"),a.mimeType&&d.overrideMimeType&&d.overrideMimeType(a.mimeType),this._xhrLevel="string"==typeof d.responseType?2:1;var h=null;if(h=a.method==createjs.AbstractLoader.GET?createjs.RequestUtils.buildPath(a.src,a.values):a.src,d.open(a.method||createjs.AbstractLoader.GET,h,!0),b&&d instanceof XMLHttpRequest&&1==this._xhrLevel&&(c.Origin=location.origin),a.values&&a.method==createjs.AbstractLoader.POST&&(c["Content-Type"]="application/x-www-form-urlencoded"),b||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest"),a.headers)for(var i in a.headers)c[i]=a.headers[i];for(i in c)d.setRequestHeader(i,c[i]);return d instanceof XMLHttpRequest&&void 0!==a.withCredentials&&(d.withCredentials=a.withCredentials),this._request=d,!0},a._clean=function(){clearTimeout(this._loadTimeout),this._request.removeEventListener("loadstart",this._handleLoadStartProxy),this._request.removeEventListener("progress",this._handleProgressProxy),this._request.removeEventListener("abort",this._handleAbortProxy),this._request.removeEventListener("error",this._handleErrorProxy),this._request.removeEventListener("timeout",this._handleTimeoutProxy),this._request.removeEventListener("load",this._handleLoadProxy),this._request.removeEventListener("readystatechange",this._handleReadyStateChangeProxy)},a.toString=function(){return"[PreloadJS XHRRequest]"},createjs.XHRRequest=createjs.promote(XHRRequest,"AbstractRequest")}(),this.createjs=this.createjs||{},function(){"use strict";function SoundLoader(a,b){this.AbstractMediaLoader_constructor(a,b,createjs.AbstractLoader.SOUND),createjs.RequestUtils.isAudioTag(a)?this._tag=a:createjs.RequestUtils.isAudioTag(a.src)?this._tag=a:createjs.RequestUtils.isAudioTag(a.tag)&&(this._tag=createjs.RequestUtils.isAudioTag(a)?a:a.src),null!=this._tag&&(this._preferXHR=!1)}var a=createjs.extend(SoundLoader,createjs.AbstractMediaLoader),b=SoundLoader;b.canLoadItem=function(a){return a.type==createjs.AbstractLoader.SOUND},a._createTag=function(a){var b=document.createElement("audio");return b.autoplay=!1,b.preload="none",b.src=a,b},createjs.SoundLoader=createjs.promote(SoundLoader,"AbstractMediaLoader")}(),this.createjs=this.createjs||{},function(){"use strict";var PlayPropsConfig=function(){this.interrupt=null,this.delay=null,this.offset=null,this.loop=null,this.volume=null,this.pan=null,this.startTime=null,this.duration=null},a=PlayPropsConfig.prototype={},b=PlayPropsConfig;b.create=function(a){if(a instanceof b||a instanceof Object){var c=new createjs.PlayPropsConfig;return c.set(a),c}throw new Error("Type not recognized.")},a.set=function(a){for(var b in a)this[b]=a[b];return this},a.toString=function(){return"[PlayPropsConfig]"},createjs.PlayPropsConfig=b}(),this.createjs=this.createjs||{},function(){"use strict";function Sound(){throw"Sound cannot be instantiated"}function a(a,b){this.init(a,b)}var b=Sound;b.INTERRUPT_ANY="any",b.INTERRUPT_EARLY="early",b.INTERRUPT_LATE="late",b.INTERRUPT_NONE="none",b.PLAY_INITED="playInited",b.PLAY_SUCCEEDED="playSucceeded",b.PLAY_INTERRUPTED="playInterrupted",b.PLAY_FINISHED="playFinished",b.PLAY_FAILED="playFailed",b.SUPPORTED_EXTENSIONS=["mp3","ogg","opus","mpeg","wav","m4a","mp4","aiff","wma","mid"],b.EXTENSION_MAP={m4a:"mp4"},b.FILE_PATTERN=/^(?:(\w+:)\/{2}(\w+(?:\.\w+)*\/?))?([/.]*?(?:[^?]+)?\/)?((?:[^/?]+)\.(\w+))(?:\?(\S+)?)?$/,b.defaultInterruptBehavior=b.INTERRUPT_NONE,b.alternateExtensions=[],b.activePlugin=null,b._masterVolume=1,Object.defineProperty(b,"volume",{get:function(){return this._masterVolume},set:function(a){if(null==Number(a))return!1;if(a=Math.max(0,Math.min(1,a)),b._masterVolume=a,!this.activePlugin||!this.activePlugin.setVolume||!this.activePlugin.setVolume(a))for(var c=this._instances,d=0,e=c.length;e>d;d++)c[d].setMasterVolume(a)}}),b._masterMute=!1,Object.defineProperty(b,"muted",{get:function(){return this._masterMute},set:function(a){if(null==a)return!1;if(this._masterMute=a,!this.activePlugin||!this.activePlugin.setMute||!this.activePlugin.setMute(a))for(var b=this._instances,c=0,d=b.length;d>c;c++)b[c].setMasterMute(a);return!0}}),Object.defineProperty(b,"capabilities",{get:function(){return null==b.activePlugin?null:b.activePlugin._capabilities},set:function(){return!1}}),b._pluginsRegistered=!1,b._lastID=0,b._instances=[],b._idHash={},b._preloadHash={},b._defaultPlayPropsHash={},b.addEventListener=null,b.removeEventListener=null,b.removeAllEventListeners=null,b.dispatchEvent=null,b.hasEventListener=null,b._listeners=null,createjs.EventDispatcher.initialize(b),b.getPreloadHandlers=function(){return{callback:createjs.proxy(b.initLoad,b),types:["sound"],extensions:b.SUPPORTED_EXTENSIONS}},b._handleLoadComplete=function(a){var c=a.target.getItem().src;if(b._preloadHash[c])for(var d=0,e=b._preloadHash[c].length;e>d;d++){var f=b._preloadHash[c][d];if(b._preloadHash[c][d]=!0,b.hasEventListener("fileload")){var a=new createjs.Event("fileload");a.src=f.src,a.id=f.id,a.data=f.data,a.sprite=f.sprite,b.dispatchEvent(a)}}},b._handleLoadError=function(a){var c=a.target.getItem().src;if(b._preloadHash[c])for(var d=0,e=b._preloadHash[c].length;e>d;d++){var f=b._preloadHash[c][d];if(b._preloadHash[c][d]=!1,b.hasEventListener("fileerror")){var a=new createjs.Event("fileerror");a.src=f.src,a.id=f.id,a.data=f.data,a.sprite=f.sprite,b.dispatchEvent(a)}}},b._registerPlugin=function(a){return a.isSupported()?(b.activePlugin=new a,!0):!1},b.registerPlugins=function(a){b._pluginsRegistered=!0;for(var c=0,d=a.length;d>c;c++)if(b._registerPlugin(a[c]))return!0;return!1},b.initializeDefaultPlugins=function(){return null!=b.activePlugin?!0:b._pluginsRegistered?!1:b.registerPlugins([createjs.WebAudioPlugin,createjs.HTMLAudioPlugin])?!0:!1},b.isReady=function(){return null!=b.activePlugin},b.getCapabilities=function(){return null==b.activePlugin?null:b.activePlugin._capabilities},b.getCapability=function(a){return null==b.activePlugin?null:b.activePlugin._capabilities[a]},b.initLoad=function(a){return b._registerSound(a)},b._registerSound=function(c){if(!b.initializeDefaultPlugins())return!1;var d;if(c.src instanceof Object?(d=b._parseSrc(c.src),d.src=c.path+d.src):d=b._parsePath(c.src),null==d)return!1;c.src=d.src,c.type="sound";var e=c.data,f=null;if(null!=e&&(isNaN(e.channels)?isNaN(e)||(f=parseInt(e)):f=parseInt(e.channels),e.audioSprite))for(var g,h=e.audioSprite.length;h--;)g=e.audioSprite[h],b._idHash[g.id]={src:c.src,startTime:parseInt(g.startTime),duration:parseInt(g.duration)},g.defaultPlayProps&&(b._defaultPlayPropsHash[g.id]=createjs.PlayPropsConfig.create(g.defaultPlayProps));null!=c.id&&(b._idHash[c.id]={src:c.src});var i=b.activePlugin.register(c);return a.create(c.src,f),null!=e&&isNaN(e)?c.data.channels=f||a.maxPerChannel():c.data=f||a.maxPerChannel(),i.type&&(c.type=i.type),c.defaultPlayProps&&(b._defaultPlayPropsHash[c.src]=createjs.PlayPropsConfig.create(c.defaultPlayProps)),i},b.registerSound=function(a,c,d,e,f){var g={src:a,id:c,data:d,defaultPlayProps:f};a instanceof Object&&a.src&&(e=c,g=a),g=createjs.LoadItem.create(g),g.path=e,null==e||g.src instanceof Object||(g.src=e+a);var h=b._registerSound(g);if(!h)return!1;if(b._preloadHash[g.src]||(b._preloadHash[g.src]=[]),b._preloadHash[g.src].push(g),1==b._preloadHash[g.src].length)h.on("complete",createjs.proxy(this._handleLoadComplete,this)),h.on("error",createjs.proxy(this._handleLoadError,this)),b.activePlugin.preload(h);else if(1==b._preloadHash[g.src][0])return!0;return g},b.registerSounds=function(a,b){var c=[];a.path&&(b?b+=a.path:b=a.path,a=a.manifest);for(var d=0,e=a.length;e>d;d++)c[d]=createjs.Sound.registerSound(a[d].src,a[d].id,a[d].data,b,a[d].defaultPlayProps);return c},b.removeSound=function(c,d){if(null==b.activePlugin)return!1;c instanceof Object&&c.src&&(c=c.src);var e;if(c instanceof Object?e=b._parseSrc(c):(c=b._getSrcById(c).src,e=b._parsePath(c)),null==e)return!1;c=e.src,null!=d&&(c=d+c);for(var f in b._idHash)b._idHash[f].src==c&&delete b._idHash[f];return a.removeSrc(c),delete b._preloadHash[c],b.activePlugin.removeSound(c),!0},b.removeSounds=function(a,b){var c=[];a.path&&(b?b+=a.path:b=a.path,a=a.manifest);for(var d=0,e=a.length;e>d;d++)c[d]=createjs.Sound.removeSound(a[d].src,b);return c},b.removeAllSounds=function(){b._idHash={},b._preloadHash={},a.removeAll(),b.activePlugin&&b.activePlugin.removeAllSounds()},b.loadComplete=function(a){if(!b.isReady())return!1;var c=b._parsePath(a);return a=c?b._getSrcById(c.src).src:b._getSrcById(a).src,void 0==b._preloadHash[a]?!1:1==b._preloadHash[a][0]},b._parsePath=function(a){"string"!=typeof a&&(a=a.toString());var c=a.match(b.FILE_PATTERN);if(null==c)return!1;for(var d=c[4],e=c[5],f=b.capabilities,g=0;!f[e];)if(e=b.alternateExtensions[g++],g>b.alternateExtensions.length)return null;a=a.replace("."+c[5],"."+e);var h={name:d,src:a,extension:e};return h},b._parseSrc=function(a){var c={name:void 0,src:void 0,extension:void 0},d=b.capabilities;for(var e in a)if(a.hasOwnProperty(e)&&d[e]){c.src=a[e],c.extension=e;break}if(!c.src)return!1;var f=c.src.lastIndexOf("/");return c.name=-1!=f?c.src.slice(f+1):c.src,c},b.play=function(a,c,d,e,f,g,h,i,j){var k;k=createjs.PlayPropsConfig.create(c instanceof Object||c instanceof createjs.PlayPropsConfig?c:{interrupt:c,delay:d,offset:e,loop:f,volume:g,pan:h,startTime:i,duration:j});var l=b.createInstance(a,k.startTime,k.duration),m=b._playInstance(l,k);return m||l._playFailed(),l},b.createInstance=function(c,d,e){if(!b.initializeDefaultPlugins())return new createjs.DefaultSoundInstance(c,d,e);var f=b._defaultPlayPropsHash[c];c=b._getSrcById(c);var g=b._parsePath(c.src),h=null;return null!=g&&null!=g.src?(a.create(g.src),null==d&&(d=c.startTime),h=b.activePlugin.create(g.src,d,e||c.duration),f=f||b._defaultPlayPropsHash[g.src],f&&h.applyPlayProps(f)):h=new createjs.DefaultSoundInstance(c,d,e),h.uniqueId=b._lastID++,h},b.stop=function(){for(var a=this._instances,b=a.length;b--;)a[b].stop()},b.setVolume=function(a){if(null==Number(a))return!1;if(a=Math.max(0,Math.min(1,a)),b._masterVolume=a,!this.activePlugin||!this.activePlugin.setVolume||!this.activePlugin.setVolume(a))for(var c=this._instances,d=0,e=c.length;e>d;d++)c[d].setMasterVolume(a)},b.getVolume=function(){return this._masterVolume},b.setMute=function(a){if(null==a)return!1;if(this._masterMute=a,!this.activePlugin||!this.activePlugin.setMute||!this.activePlugin.setMute(a))for(var b=this._instances,c=0,d=b.length;d>c;c++)b[c].setMasterMute(a);return!0},b.getMute=function(){return this._masterMute},b.setDefaultPlayProps=function(a,c){a=b._getSrcById(a),b._defaultPlayPropsHash[b._parsePath(a.src).src]=createjs.PlayPropsConfig.create(c)},b.getDefaultPlayProps=function(a){return a=b._getSrcById(a),b._defaultPlayPropsHash[b._parsePath(a.src).src]},b._playInstance=function(a,c){var d=b._defaultPlayPropsHash[a.src]||{};if(null==c.interrupt&&(c.interrupt=d.interrupt||b.defaultInterruptBehavior),null==c.delay&&(c.delay=d.delay||0),null==c.offset&&(c.offset=a.getPosition()),null==c.loop&&(c.loop=a.loop),null==c.volume&&(c.volume=a.volume),null==c.pan&&(c.pan=a.pan),0==c.delay){var e=b._beginPlaying(a,c); +this.createjs=this.createjs||{},function(){var a=createjs.SoundJS=createjs.SoundJS||{};a.version="NEXT",a.buildDate="Wed, 27 May 2015 18:12:38 GMT"}(),this.createjs=this.createjs||{},createjs.extend=function(a,b){"use strict";function c(){this.constructor=a}return c.prototype=b.prototype,a.prototype=new c},this.createjs=this.createjs||{},createjs.promote=function(a,b){"use strict";var c=a.prototype,d=Object.getPrototypeOf&&Object.getPrototypeOf(c)||c.__proto__;if(d){c[(b+="_")+"constructor"]=d.constructor;for(var e in d)c.hasOwnProperty(e)&&"function"==typeof d[e]&&(c[b+e]=d[e])}return a},this.createjs=this.createjs||{},createjs.indexOf=function(a,b){"use strict";for(var c=0,d=a.length;d>c;c++)if(b===a[c])return c;return-1},this.createjs=this.createjs||{},function(){"use strict";createjs.proxy=function(a,b){var c=Array.prototype.slice.call(arguments,2);return function(){return a.apply(b,Array.prototype.slice.call(arguments,0).concat(c))}}}(),this.createjs=this.createjs||{},function(){"use strict";function BrowserDetect(){throw"BrowserDetect cannot be instantiated"}var a=BrowserDetect.agent=window.navigator.userAgent;BrowserDetect.isWindowPhone=a.indexOf("IEMobile")>-1||a.indexOf("Windows Phone")>-1,BrowserDetect.isFirefox=a.indexOf("Firefox")>-1,BrowserDetect.isOpera=null!=window.opera,BrowserDetect.isChrome=a.indexOf("Chrome")>-1,BrowserDetect.isIOS=(a.indexOf("iPod")>-1||a.indexOf("iPhone")>-1||a.indexOf("iPad")>-1)&&!BrowserDetect.isWindowPhone,BrowserDetect.isAndroid=a.indexOf("Android")>-1&&!BrowserDetect.isWindowPhone,BrowserDetect.isBlackberry=a.indexOf("Blackberry")>-1,createjs.BrowserDetect=BrowserDetect}(),this.createjs=this.createjs||{},function(){"use strict";function EventDispatcher(){this._listeners=null,this._captureListeners=null}var a=EventDispatcher.prototype;EventDispatcher.initialize=function(b){b.addEventListener=a.addEventListener,b.on=a.on,b.removeEventListener=b.off=a.removeEventListener,b.removeAllEventListeners=a.removeAllEventListeners,b.hasEventListener=a.hasEventListener,b.dispatchEvent=a.dispatchEvent,b._dispatchEvent=a._dispatchEvent,b.willTrigger=a.willTrigger},a.addEventListener=function(a,b,c){var d;d=c?this._captureListeners=this._captureListeners||{}:this._listeners=this._listeners||{};var e=d[a];return e&&this.removeEventListener(a,b,c),e=d[a],e?e.push(b):d[a]=[b],b},a.on=function(a,b,c,d,e,f){return b.handleEvent&&(c=c||b,b=b.handleEvent),c=c||this,this.addEventListener(a,function(a){b.call(c,a,e),d&&a.remove()},f)},a.removeEventListener=function(a,b,c){var d=c?this._captureListeners:this._listeners;if(d){var e=d[a];if(e)for(var f=0,g=e.length;g>f;f++)if(e[f]==b){1==g?delete d[a]:e.splice(f,1);break}}},a.off=a.removeEventListener,a.removeAllEventListeners=function(a){a?(this._listeners&&delete this._listeners[a],this._captureListeners&&delete this._captureListeners[a]):this._listeners=this._captureListeners=null},a.dispatchEvent=function(a){if("string"==typeof a){var b=this._listeners;if(!b||!b[a])return!1;a=new createjs.Event(a)}else a.target&&a.clone&&(a=a.clone());try{a.target=this}catch(c){}if(a.bubbles&&this.parent){for(var d=this,e=[d];d.parent;)e.push(d=d.parent);var f,g=e.length;for(f=g-1;f>=0&&!a.propagationStopped;f--)e[f]._dispatchEvent(a,1+(0==f));for(f=1;g>f&&!a.propagationStopped;f++)e[f]._dispatchEvent(a,3)}else this._dispatchEvent(a,2);return a.defaultPrevented},a.hasEventListener=function(a){var b=this._listeners,c=this._captureListeners;return!!(b&&b[a]||c&&c[a])},a.willTrigger=function(a){for(var b=this;b;){if(b.hasEventListener(a))return!0;b=b.parent}return!1},a.toString=function(){return"[EventDispatcher]"},a._dispatchEvent=function(a,b){var c,d=1==b?this._captureListeners:this._listeners;if(a&&d){var e=d[a.type];if(!e||!(c=e.length))return;try{a.currentTarget=this}catch(f){}try{a.eventPhase=b}catch(f){}a.removed=!1,e=e.slice();for(var g=0;c>g&&!a.immediatePropagationStopped;g++){var h=e[g];h.handleEvent?h.handleEvent(a):h(a),a.removed&&(this.off(a.type,h,1==b),a.removed=!1)}}},createjs.EventDispatcher=EventDispatcher}(),this.createjs=this.createjs||{},function(){"use strict";function Event(a,b,c){this.type=a,this.target=null,this.currentTarget=null,this.eventPhase=0,this.bubbles=!!b,this.cancelable=!!c,this.timeStamp=(new Date).getTime(),this.defaultPrevented=!1,this.propagationStopped=!1,this.immediatePropagationStopped=!1,this.removed=!1}var a=Event.prototype;a.preventDefault=function(){this.defaultPrevented=this.cancelable&&!0},a.stopPropagation=function(){this.propagationStopped=!0},a.stopImmediatePropagation=function(){this.immediatePropagationStopped=this.propagationStopped=!0},a.remove=function(){this.removed=!0},a.clone=function(){return new Event(this.type,this.bubbles,this.cancelable)},a.set=function(a){for(var b in a)this[b]=a[b];return this},a.toString=function(){return"[Event (type="+this.type+")]"},createjs.Event=Event}(),this.createjs=this.createjs||{},function(){"use strict";function ErrorEvent(a,b,c){this.Event_constructor("error"),this.title=a,this.message=b,this.data=c}var a=createjs.extend(ErrorEvent,createjs.Event);a.clone=function(){return new createjs.ErrorEvent(this.title,this.message,this.data)},createjs.ErrorEvent=createjs.promote(ErrorEvent,"Event")}(),this.createjs=this.createjs||{},function(){"use strict";function ProgressEvent(a,b){this.Event_constructor("progress"),this.loaded=a,this.total=null==b?1:b,this.progress=0==b?0:this.loaded/this.total}var a=createjs.extend(ProgressEvent,createjs.Event);a.clone=function(){return new createjs.ProgressEvent(this.loaded,this.total)},createjs.ProgressEvent=createjs.promote(ProgressEvent,"Event")}(window),this.createjs=this.createjs||{},function(){"use strict";function LoadItem(){this.src=null,this.type=null,this.id=null,this.maintainOrder=!1,this.callback=null,this.data=null,this.method=createjs.LoadItem.GET,this.values=null,this.headers=null,this.withCredentials=!1,this.mimeType=null,this.crossOrigin=null,this.loadTimeout=b.LOAD_TIMEOUT_DEFAULT}var a=LoadItem.prototype={},b=LoadItem;b.LOAD_TIMEOUT_DEFAULT=8e3,b.create=function(a){if("string"==typeof a){var c=new LoadItem;return c.src=a,c}if(a instanceof b)return a;if(a instanceof Object&&a.src)return null==a.loadTimeout&&(a.loadTimeout=b.LOAD_TIMEOUT_DEFAULT),a;throw new Error("Type not recognized.")},a.set=function(a){for(var b in a)this[b]=a[b];return this},createjs.LoadItem=b}(),function(){var a={};a.ABSOLUTE_PATT=/^(?:\w+:)?\/{2}/i,a.RELATIVE_PATT=/^[./]*?\//i,a.EXTENSION_PATT=/\/?[^/]+\.(\w{1,5})$/i,a.parseURI=function(b){var c={absolute:!1,relative:!1};if(null==b)return c;var d=b.indexOf("?");d>-1&&(b=b.substr(0,d));var e;return a.ABSOLUTE_PATT.test(b)?c.absolute=!0:a.RELATIVE_PATT.test(b)&&(c.relative=!0),(e=b.match(a.EXTENSION_PATT))&&(c.extension=e[1].toLowerCase()),c},a.formatQueryString=function(a,b){if(null==a)throw new Error("You must specify data.");var c=[];for(var d in a)c.push(d+"="+escape(a[d]));return b&&(c=c.concat(b)),c.join("&")},a.buildPath=function(a,b){if(null==b)return a;var c=[],d=a.indexOf("?");if(-1!=d){var e=a.slice(d+1);c=c.concat(e.split("&"))}return-1!=d?a.slice(0,d)+"?"+this._formatQueryString(b,c):a+"?"+this._formatQueryString(b,c)},a.isCrossDomain=function(a){var b=document.createElement("a");b.href=a.src;var c=document.createElement("a");c.href=location.href;var d=""!=b.hostname&&(b.port!=c.port||b.protocol!=c.protocol||b.hostname!=c.hostname);return d},a.isLocal=function(a){var b=document.createElement("a");return b.href=a.src,""==b.hostname&&"file:"==b.protocol},a.isBinary=function(a){switch(a){case createjs.AbstractLoader.IMAGE:case createjs.AbstractLoader.BINARY:return!0;default:return!1}},a.isImageTag=function(a){return a instanceof HTMLImageElement},a.isAudioTag=function(a){return window.HTMLAudioElement?a instanceof HTMLAudioElement:!1},a.isVideoTag=function(a){return window.HTMLVideoElement?a instanceof HTMLVideoElement:!1},a.isText=function(a){switch(a){case createjs.AbstractLoader.TEXT:case createjs.AbstractLoader.JSON:case createjs.AbstractLoader.MANIFEST:case createjs.AbstractLoader.XML:case createjs.AbstractLoader.CSS:case createjs.AbstractLoader.SVG:case createjs.AbstractLoader.JAVASCRIPT:case createjs.AbstractLoader.SPRITESHEET:return!0;default:return!1}},a.getTypeByExtension=function(a){if(null==a)return createjs.AbstractLoader.TEXT;switch(a.toLowerCase()){case"jpeg":case"jpg":case"gif":case"png":case"webp":case"bmp":return createjs.AbstractLoader.IMAGE;case"ogg":case"mp3":case"webm":return createjs.AbstractLoader.SOUND;case"mp4":case"webm":case"ts":return createjs.AbstractLoader.VIDEO;case"json":return createjs.AbstractLoader.JSON;case"xml":return createjs.AbstractLoader.XML;case"css":return createjs.AbstractLoader.CSS;case"js":return createjs.AbstractLoader.JAVASCRIPT;case"svg":return createjs.AbstractLoader.SVG;default:return createjs.AbstractLoader.TEXT}},createjs.RequestUtils=a}(),this.createjs=this.createjs||{},function(){"use strict";function AbstractLoader(a,b,c){this.EventDispatcher_constructor(),this.loaded=!1,this.canceled=!1,this.progress=0,this.type=c,this.resultFormatter=null,this._item=a?createjs.LoadItem.create(a):null,this._preferXHR=b,this._result=null,this._rawResult=null,this._loadedItems=null,this._tagSrcAttribute=null,this._tag=null}var a=createjs.extend(AbstractLoader,createjs.EventDispatcher),b=AbstractLoader;b.POST="POST",b.GET="GET",b.BINARY="binary",b.CSS="css",b.IMAGE="image",b.JAVASCRIPT="javascript",b.JSON="json",b.JSONP="jsonp",b.MANIFEST="manifest",b.SOUND="sound",b.VIDEO="video",b.SPRITESHEET="spritesheet",b.SVG="svg",b.TEXT="text",b.XML="xml",a.getItem=function(){return this._item},a.getResult=function(a){return a?this._rawResult:this._result},a.getTag=function(){return this._tag},a.setTag=function(a){this._tag=a},a.load=function(){this._createRequest(),this._request.on("complete",this,this),this._request.on("progress",this,this),this._request.on("loadStart",this,this),this._request.on("abort",this,this),this._request.on("timeout",this,this),this._request.on("error",this,this);var a=new createjs.Event("initialize");a.loader=this._request,this.dispatchEvent(a),this._request.load()},a.cancel=function(){this.canceled=!0,this.destroy()},a.destroy=function(){this._request&&(this._request.removeAllEventListeners(),this._request.destroy()),this._request=null,this._item=null,this._rawResult=null,this._result=null,this._loadItems=null,this.removeAllEventListeners()},a.getLoadedItems=function(){return this._loadedItems},a._createRequest=function(){this._request=this._preferXHR?new createjs.XHRRequest(this._item):new createjs.TagRequest(this._item,this._tag||this._createTag(),this._tagSrcAttribute)},a._createTag=function(){return null},a._sendLoadStart=function(){this._isCanceled()||this.dispatchEvent("loadstart")},a._sendProgress=function(a){if(!this._isCanceled()){var b=null;"number"==typeof a?(this.progress=a,b=new createjs.ProgressEvent(this.progress)):(b=a,this.progress=a.loaded/a.total,b.progress=this.progress,(isNaN(this.progress)||1/0==this.progress)&&(this.progress=0)),this.hasEventListener("progress")&&this.dispatchEvent(b)}},a._sendComplete=function(){if(!this._isCanceled()){this.loaded=!0;var a=new createjs.Event("complete");a.rawResult=this._rawResult,null!=this._result&&(a.result=this._result),this.dispatchEvent(a)}},a._sendError=function(a){!this._isCanceled()&&this.hasEventListener("error")&&(null==a&&(a=new createjs.ErrorEvent("PRELOAD_ERROR_EMPTY")),this.dispatchEvent(a))},a._isCanceled=function(){return null==window.createjs||this.canceled?!0:!1},a.resultFormatter=null,a.handleEvent=function(a){switch(a.type){case"complete":this._rawResult=a.target._response;var b=this.resultFormatter&&this.resultFormatter(this),c=this;b instanceof Function?b(function(a){c._result=a,c._sendComplete()}):(this._result=b||this._rawResult,this._sendComplete());break;case"progress":this._sendProgress(a);break;case"error":this._sendError(a);break;case"loadstart":this._sendLoadStart();break;case"abort":case"timeout":this._isCanceled()||this.dispatchEvent(a.type)}},a.buildPath=function(a,b){return createjs.RequestUtils.buildPath(a,b)},a.toString=function(){return"[PreloadJS AbstractLoader]"},createjs.AbstractLoader=createjs.promote(AbstractLoader,"EventDispatcher")}(),this.createjs=this.createjs||{},function(){"use strict";function AbstractMediaLoader(a,b,c){this.AbstractLoader_constructor(a,b,c),this.resultFormatter=this._formatResult,this._tagSrcAttribute="src"}var a=createjs.extend(AbstractMediaLoader,createjs.AbstractLoader);a.load=function(){this._tag||(this._tag=this._createTag(this._item.src)),this._tag.preload="auto",this._tag.load(),this.AbstractLoader_load()},a._createTag=function(){},a._createRequest=function(){this._request=this._preferXHR?new createjs.XHRRequest(this._item):new createjs.MediaTagRequest(this._item,this._tag||this._createTag(),this._tagSrcAttribute)},a._formatResult=function(a){return this._tag.removeEventListener&&this._tag.removeEventListener("canplaythrough",this._loadedHandler),this._tag.onstalled=null,this._preferXHR&&(a.getTag().src=a.getResult(!0)),a.getTag()},createjs.AbstractMediaLoader=createjs.promote(AbstractMediaLoader,"AbstractLoader")}(),this.createjs=this.createjs||{},function(){"use strict";var AbstractRequest=function(a){this._item=a},a=createjs.extend(AbstractRequest,createjs.EventDispatcher);a.load=function(){},a.destroy=function(){},a.cancel=function(){},createjs.AbstractRequest=createjs.promote(AbstractRequest,"EventDispatcher")}(),this.createjs=this.createjs||{},function(){"use strict";function TagRequest(a,b,c){this.AbstractRequest_constructor(a),this._tag=b,this._tagSrcAttribute=c,this._loadedHandler=createjs.proxy(this._handleTagComplete,this),this._addedToDOM=!1,this._startTagVisibility=null}var a=createjs.extend(TagRequest,createjs.AbstractRequest);a.load=function(){this._tag.onload=createjs.proxy(this._handleTagComplete,this),this._tag.onreadystatechange=createjs.proxy(this._handleReadyStateChange,this),this._tag.onerror=createjs.proxy(this._handleError,this);var a=new createjs.Event("initialize");a.loader=this._tag,this.dispatchEvent(a),this._hideTag(),this._loadTimeout=setTimeout(createjs.proxy(this._handleTimeout,this),this._item.loadTimeout),this._tag[this._tagSrcAttribute]=this._item.src,null==this._tag.parentNode&&(window.document.body.appendChild(this._tag),this._addedToDOM=!0)},a.destroy=function(){this._clean(),this._tag=null,this.AbstractRequest_destroy()},a._handleReadyStateChange=function(){clearTimeout(this._loadTimeout);var a=this._tag;("loaded"==a.readyState||"complete"==a.readyState)&&this._handleTagComplete()},a._handleError=function(){this._clean(),this.dispatchEvent("error")},a._handleTagComplete=function(){this._rawResult=this._tag,this._result=this.resultFormatter&&this.resultFormatter(this)||this._rawResult,this._clean(),this._showTag(),this.dispatchEvent("complete")},a._handleTimeout=function(){this._clean(),this.dispatchEvent(new createjs.Event("timeout"))},a._clean=function(){this._tag.onload=null,this._tag.onreadystatechange=null,this._tag.onerror=null,this._addedToDOM&&null!=this._tag.parentNode&&this._tag.parentNode.removeChild(this._tag),clearTimeout(this._loadTimeout)},a._hideTag=function(){this._startTagVisibility=this._tag.style.visibility,this._tag.style.visibility="hidden"},a._showTag=function(){this._tag.style.visibility=this._startTagVisibility},a._handleStalled=function(){},createjs.TagRequest=createjs.promote(TagRequest,"AbstractRequest")}(),this.createjs=this.createjs||{},function(){"use strict";function MediaTagRequest(a,b,c){this.AbstractRequest_constructor(a),this._tag=b,this._tagSrcAttribute=c,this._loadedHandler=createjs.proxy(this._handleTagComplete,this)}var a=createjs.extend(MediaTagRequest,createjs.TagRequest);a.load=function(){var a=createjs.proxy(this._handleStalled,this);this._stalledCallback=a;var b=createjs.proxy(this._handleProgress,this);this._handleProgress=b,this._tag.addEventListener("stalled",a),this._tag.addEventListener("progress",b),this._tag.addEventListener&&this._tag.addEventListener("canplaythrough",this._loadedHandler,!1),this.TagRequest_load()},a._handleReadyStateChange=function(){clearTimeout(this._loadTimeout);var a=this._tag;("loaded"==a.readyState||"complete"==a.readyState)&&this._handleTagComplete()},a._handleStalled=function(){},a._handleProgress=function(a){if(a&&!(a.loaded>0&&0==a.total)){var b=new createjs.ProgressEvent(a.loaded,a.total);this.dispatchEvent(b)}},a._clean=function(){this._tag.removeEventListener&&this._tag.removeEventListener("canplaythrough",this._loadedHandler),this._tag.removeEventListener("stalled",this._stalledCallback),this._tag.removeEventListener("progress",this._progressCallback),this.TagRequest__clean()},createjs.MediaTagRequest=createjs.promote(MediaTagRequest,"TagRequest")}(),this.createjs=this.createjs||{},function(){"use strict";function XHRRequest(a){this.AbstractRequest_constructor(a),this._request=null,this._loadTimeout=null,this._xhrLevel=1,this._response=null,this._rawResponse=null,this._canceled=!1,this._handleLoadStartProxy=createjs.proxy(this._handleLoadStart,this),this._handleProgressProxy=createjs.proxy(this._handleProgress,this),this._handleAbortProxy=createjs.proxy(this._handleAbort,this),this._handleErrorProxy=createjs.proxy(this._handleError,this),this._handleTimeoutProxy=createjs.proxy(this._handleTimeout,this),this._handleLoadProxy=createjs.proxy(this._handleLoad,this),this._handleReadyStateChangeProxy=createjs.proxy(this._handleReadyStateChange,this),!this._createXHR(a)}var a=createjs.extend(XHRRequest,createjs.AbstractRequest);XHRRequest.ACTIVEX_VERSIONS=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],a.getResult=function(a){return a&&this._rawResponse?this._rawResponse:this._response},a.cancel=function(){this.canceled=!0,this._clean(),this._request.abort()},a.load=function(){if(null==this._request)return void this._handleError();this._request.addEventListener("loadstart",this._handleLoadStartProxy,!1),this._request.addEventListener("progress",this._handleProgressProxy,!1),this._request.addEventListener("abort",this._handleAbortProxy,!1),this._request.addEventListener("error",this._handleErrorProxy,!1),this._request.addEventListener("timeout",this._handleTimeoutProxy,!1),this._request.addEventListener("load",this._handleLoadProxy,!1),this._request.addEventListener("readystatechange",this._handleReadyStateChangeProxy,!1),1==this._xhrLevel&&(this._loadTimeout=setTimeout(createjs.proxy(this._handleTimeout,this),this._item.loadTimeout));try{this._item.values&&this._item.method!=createjs.AbstractLoader.GET?this._item.method==createjs.AbstractLoader.POST&&this._request.send(createjs.RequestUtils.formatQueryString(this._item.values)):this._request.send()}catch(a){this.dispatchEvent(new createjs.ErrorEvent("XHR_SEND",null,a))}},a.setResponseType=function(a){this._request.responseType=a},a.getAllResponseHeaders=function(){return this._request.getAllResponseHeaders instanceof Function?this._request.getAllResponseHeaders():null},a.getResponseHeader=function(a){return this._request.getResponseHeader instanceof Function?this._request.getResponseHeader(a):null},a._handleProgress=function(a){if(a&&!(a.loaded>0&&0==a.total)){var b=new createjs.ProgressEvent(a.loaded,a.total);this.dispatchEvent(b)}},a._handleLoadStart=function(){clearTimeout(this._loadTimeout),this.dispatchEvent("loadstart")},a._handleAbort=function(a){this._clean(),this.dispatchEvent(new createjs.ErrorEvent("XHR_ABORTED",null,a))},a._handleError=function(a){this._clean(),this.dispatchEvent(new createjs.ErrorEvent(a.message))},a._handleReadyStateChange=function(){4==this._request.readyState&&this._handleLoad()},a._handleLoad=function(){if(!this.loaded){this.loaded=!0;var a=this._checkError();if(a)return void this._handleError(a);this._response=this._getResponse(),this._clean(),this.dispatchEvent(new createjs.Event("complete"))}},a._handleTimeout=function(a){this._clean(),this.dispatchEvent(new createjs.ErrorEvent("PRELOAD_TIMEOUT",null,a))},a._checkError=function(){var a=parseInt(this._request.status);switch(a){case 404:case 0:return new Error(a)}return null},a._getResponse=function(){if(null!=this._response)return this._response;if(null!=this._request.response)return this._request.response;try{if(null!=this._request.responseText)return this._request.responseText}catch(a){}try{if(null!=this._request.responseXML)return this._request.responseXML}catch(a){}return null},a._createXHR=function(a){var b=createjs.RequestUtils.isCrossDomain(a),c={},d=null;if(window.XMLHttpRequest)d=new XMLHttpRequest,b&&void 0===d.withCredentials&&window.XDomainRequest&&(d=new XDomainRequest);else{for(var e=0,f=s.ACTIVEX_VERSIONS.length;f>e;e++){{s.ACTIVEX_VERSIONS[e]}try{d=new ActiveXObject(axVersions);break}catch(g){}}if(null==d)return!1}null==a.mimeType&&createjs.RequestUtils.isText(a.type)&&(a.mimeType="text/plain; charset=utf-8"),a.mimeType&&d.overrideMimeType&&d.overrideMimeType(a.mimeType),this._xhrLevel="string"==typeof d.responseType?2:1;var h=null;if(h=a.method==createjs.AbstractLoader.GET?createjs.RequestUtils.buildPath(a.src,a.values):a.src,d.open(a.method||createjs.AbstractLoader.GET,h,!0),b&&d instanceof XMLHttpRequest&&1==this._xhrLevel&&(c.Origin=location.origin),a.values&&a.method==createjs.AbstractLoader.POST&&(c["Content-Type"]="application/x-www-form-urlencoded"),b||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest"),a.headers)for(var i in a.headers)c[i]=a.headers[i];for(i in c)d.setRequestHeader(i,c[i]);return d instanceof XMLHttpRequest&&void 0!==a.withCredentials&&(d.withCredentials=a.withCredentials),this._request=d,!0},a._clean=function(){clearTimeout(this._loadTimeout),this._request.removeEventListener("loadstart",this._handleLoadStartProxy),this._request.removeEventListener("progress",this._handleProgressProxy),this._request.removeEventListener("abort",this._handleAbortProxy),this._request.removeEventListener("error",this._handleErrorProxy),this._request.removeEventListener("timeout",this._handleTimeoutProxy),this._request.removeEventListener("load",this._handleLoadProxy),this._request.removeEventListener("readystatechange",this._handleReadyStateChangeProxy)},a.toString=function(){return"[PreloadJS XHRRequest]"},createjs.XHRRequest=createjs.promote(XHRRequest,"AbstractRequest")}(),this.createjs=this.createjs||{},function(){"use strict";function SoundLoader(a,b){this.AbstractMediaLoader_constructor(a,b,createjs.AbstractLoader.SOUND),createjs.RequestUtils.isAudioTag(a)?this._tag=a:createjs.RequestUtils.isAudioTag(a.src)?this._tag=a:createjs.RequestUtils.isAudioTag(a.tag)&&(this._tag=createjs.RequestUtils.isAudioTag(a)?a:a.src),null!=this._tag&&(this._preferXHR=!1)}var a=createjs.extend(SoundLoader,createjs.AbstractMediaLoader),b=SoundLoader;b.canLoadItem=function(a){return a.type==createjs.AbstractLoader.SOUND},a._createTag=function(a){var b=document.createElement("audio");return b.autoplay=!1,b.preload="none",b.src=a,b},createjs.SoundLoader=createjs.promote(SoundLoader,"AbstractMediaLoader")}(),this.createjs=this.createjs||{},function(){"use strict";var PlayPropsConfig=function(){this.interrupt=null,this.delay=null,this.offset=null,this.loop=null,this.volume=null,this.pan=null,this.startTime=null,this.duration=null},a=PlayPropsConfig.prototype={},b=PlayPropsConfig;b.create=function(a){if(a instanceof b||a instanceof Object){var c=new createjs.PlayPropsConfig;return c.set(a),c}throw new Error("Type not recognized.")},a.set=function(a){for(var b in a)this[b]=a[b];return this},a.toString=function(){return"[PlayPropsConfig]"},createjs.PlayPropsConfig=b}(),this.createjs=this.createjs||{},function(){"use strict";function Sound(){throw"Sound cannot be instantiated"}function a(a,b){this.init(a,b)}var b=Sound;b.INTERRUPT_ANY="any",b.INTERRUPT_EARLY="early",b.INTERRUPT_LATE="late",b.INTERRUPT_NONE="none",b.PLAY_INITED="playInited",b.PLAY_SUCCEEDED="playSucceeded",b.PLAY_INTERRUPTED="playInterrupted",b.PLAY_FINISHED="playFinished",b.PLAY_FAILED="playFailed",b.SUPPORTED_EXTENSIONS=["mp3","ogg","opus","mpeg","wav","m4a","mp4","aiff","wma","mid"],b.EXTENSION_MAP={m4a:"mp4"},b.FILE_PATTERN=/^(?:(\w+:)\/{2}(\w+(?:\.\w+)*\/?))?([/.]*?(?:[^?]+)?\/)?((?:[^/?]+)\.(\w+))(?:\?(\S+)?)?$/,b.defaultInterruptBehavior=b.INTERRUPT_NONE,b.alternateExtensions=[],b.activePlugin=null,b._masterVolume=1,Object.defineProperty(b,"volume",{get:function(){return this._masterVolume},set:function(a){if(null==Number(a))return!1;if(a=Math.max(0,Math.min(1,a)),b._masterVolume=a,!this.activePlugin||!this.activePlugin.setVolume||!this.activePlugin.setVolume(a))for(var c=this._instances,d=0,e=c.length;e>d;d++)c[d].setMasterVolume(a)}}),b._masterMute=!1,Object.defineProperty(b,"muted",{get:function(){return this._masterMute},set:function(a){if(null==a)return!1;if(this._masterMute=a,!this.activePlugin||!this.activePlugin.setMute||!this.activePlugin.setMute(a))for(var b=this._instances,c=0,d=b.length;d>c;c++)b[c].setMasterMute(a);return!0}}),Object.defineProperty(b,"capabilities",{get:function(){return null==b.activePlugin?null:b.activePlugin._capabilities},set:function(){return!1}}),b._pluginsRegistered=!1,b._lastID=0,b._instances=[],b._idHash={},b._preloadHash={},b._defaultPlayPropsHash={},b.addEventListener=null,b.removeEventListener=null,b.removeAllEventListeners=null,b.dispatchEvent=null,b.hasEventListener=null,b._listeners=null,createjs.EventDispatcher.initialize(b),b.getPreloadHandlers=function(){return{callback:createjs.proxy(b.initLoad,b),types:["sound"],extensions:b.SUPPORTED_EXTENSIONS}},b._handleLoadComplete=function(a){var c=a.target.getItem().src;if(b._preloadHash[c])for(var d=0,e=b._preloadHash[c].length;e>d;d++){var f=b._preloadHash[c][d];if(b._preloadHash[c][d]=!0,b.hasEventListener("fileload")){var a=new createjs.Event("fileload");a.src=f.src,a.id=f.id,a.data=f.data,a.sprite=f.sprite,b.dispatchEvent(a)}}},b._handleLoadError=function(a){var c=a.target.getItem().src;if(b._preloadHash[c])for(var d=0,e=b._preloadHash[c].length;e>d;d++){var f=b._preloadHash[c][d];if(b._preloadHash[c][d]=!1,b.hasEventListener("fileerror")){var a=new createjs.Event("fileerror");a.src=f.src,a.id=f.id,a.data=f.data,a.sprite=f.sprite,b.dispatchEvent(a)}}},b._registerPlugin=function(a){return a.isSupported()?(b.activePlugin=new a,!0):!1},b.registerPlugins=function(a){b._pluginsRegistered=!0;for(var c=0,d=a.length;d>c;c++)if(b._registerPlugin(a[c]))return!0;return!1},b.initializeDefaultPlugins=function(){return null!=b.activePlugin?!0:b._pluginsRegistered?!1:b.registerPlugins([createjs.WebAudioPlugin,createjs.HTMLAudioPlugin])?!0:!1},b.isReady=function(){return null!=b.activePlugin},b.getCapabilities=function(){return null==b.activePlugin?null:b.activePlugin._capabilities},b.getCapability=function(a){return null==b.activePlugin?null:b.activePlugin._capabilities[a]},b.initLoad=function(a){return b._registerSound(a)},b._registerSound=function(c){if(!b.initializeDefaultPlugins())return!1;var d;if(c.src instanceof Object?(d=b._parseSrc(c.src),d.src=c.path+d.src):d=b._parsePath(c.src),null==d)return!1;c.src=d.src,c.type="sound";var e=c.data,f=null;if(null!=e&&(isNaN(e.channels)?isNaN(e)||(f=parseInt(e)):f=parseInt(e.channels),e.audioSprite))for(var g,h=e.audioSprite.length;h--;)g=e.audioSprite[h],b._idHash[g.id]={src:c.src,startTime:parseInt(g.startTime),duration:parseInt(g.duration)},g.defaultPlayProps&&(b._defaultPlayPropsHash[g.id]=createjs.PlayPropsConfig.create(g.defaultPlayProps));null!=c.id&&(b._idHash[c.id]={src:c.src});var i=b.activePlugin.register(c);return a.create(c.src,f),null!=e&&isNaN(e)?c.data.channels=f||a.maxPerChannel():c.data=f||a.maxPerChannel(),i.type&&(c.type=i.type),c.defaultPlayProps&&(b._defaultPlayPropsHash[c.src]=createjs.PlayPropsConfig.create(c.defaultPlayProps)),i},b.registerSound=function(a,c,d,e,f){var g={src:a,id:c,data:d,defaultPlayProps:f};a instanceof Object&&a.src&&(e=c,g=a),g=createjs.LoadItem.create(g),g.path=e,null==e||g.src instanceof Object||(g.src=e+a);var h=b._registerSound(g);if(!h)return!1;if(b._preloadHash[g.src]||(b._preloadHash[g.src]=[]),b._preloadHash[g.src].push(g),1==b._preloadHash[g.src].length)h.on("complete",createjs.proxy(this._handleLoadComplete,this)),h.on("error",createjs.proxy(this._handleLoadError,this)),b.activePlugin.preload(h);else if(1==b._preloadHash[g.src][0])return!0;return g},b.registerSounds=function(a,b){var c=[];a.path&&(b?b+=a.path:b=a.path,a=a.manifest);for(var d=0,e=a.length;e>d;d++)c[d]=createjs.Sound.registerSound(a[d].src,a[d].id,a[d].data,b,a[d].defaultPlayProps);return c},b.removeSound=function(c,d){if(null==b.activePlugin)return!1;c instanceof Object&&c.src&&(c=c.src);var e;if(c instanceof Object?e=b._parseSrc(c):(c=b._getSrcById(c).src,e=b._parsePath(c)),null==e)return!1;c=e.src,null!=d&&(c=d+c);for(var f in b._idHash)b._idHash[f].src==c&&delete b._idHash[f];return a.removeSrc(c),delete b._preloadHash[c],b.activePlugin.removeSound(c),!0},b.removeSounds=function(a,b){var c=[];a.path&&(b?b+=a.path:b=a.path,a=a.manifest);for(var d=0,e=a.length;e>d;d++)c[d]=createjs.Sound.removeSound(a[d].src,b);return c},b.removeAllSounds=function(){b._idHash={},b._preloadHash={},a.removeAll(),b.activePlugin&&b.activePlugin.removeAllSounds()},b.loadComplete=function(a){if(!b.isReady())return!1;var c=b._parsePath(a);return a=c?b._getSrcById(c.src).src:b._getSrcById(a).src,void 0==b._preloadHash[a]?!1:1==b._preloadHash[a][0]},b._parsePath=function(a){"string"!=typeof a&&(a=a.toString());var c=a.match(b.FILE_PATTERN);if(null==c)return!1;for(var d=c[4],e=c[5],f=b.capabilities,g=0;!f[e];)if(e=b.alternateExtensions[g++],g>b.alternateExtensions.length)return null;a=a.replace("."+c[5],"."+e);var h={name:d,src:a,extension:e};return h},b._parseSrc=function(a){var c={name:void 0,src:void 0,extension:void 0},d=b.capabilities;for(var e in a)if(a.hasOwnProperty(e)&&d[e]){c.src=a[e],c.extension=e;break}if(!c.src)return!1;var f=c.src.lastIndexOf("/");return c.name=-1!=f?c.src.slice(f+1):c.src,c},b.play=function(a,c,d,e,f,g,h,i,j){var k;k=createjs.PlayPropsConfig.create(c instanceof Object||c instanceof createjs.PlayPropsConfig?c:{interrupt:c,delay:d,offset:e,loop:f,volume:g,pan:h,startTime:i,duration:j});var l=b.createInstance(a,k.startTime,k.duration),m=b._playInstance(l,k);return m||l._playFailed(),l},b.createInstance=function(c,d,e){if(!b.initializeDefaultPlugins())return new createjs.DefaultSoundInstance(c,d,e);var f=b._defaultPlayPropsHash[c];c=b._getSrcById(c);var g=b._parsePath(c.src),h=null;return null!=g&&null!=g.src?(a.create(g.src),null==d&&(d=c.startTime),h=b.activePlugin.create(g.src,d,e||c.duration),f=f||b._defaultPlayPropsHash[g.src],f&&h.applyPlayProps(f)):h=new createjs.DefaultSoundInstance(c,d,e),h.uniqueId=b._lastID++,h},b.stop=function(){for(var a=this._instances,b=a.length;b--;)a[b].stop()},b.setVolume=function(a){if(null==Number(a))return!1;if(a=Math.max(0,Math.min(1,a)),b._masterVolume=a,!this.activePlugin||!this.activePlugin.setVolume||!this.activePlugin.setVolume(a))for(var c=this._instances,d=0,e=c.length;e>d;d++)c[d].setMasterVolume(a)},b.getVolume=function(){return this._masterVolume},b.setMute=function(a){if(null==a)return!1;if(this._masterMute=a,!this.activePlugin||!this.activePlugin.setMute||!this.activePlugin.setMute(a))for(var b=this._instances,c=0,d=b.length;d>c;c++)b[c].setMasterMute(a);return!0},b.getMute=function(){return this._masterMute},b.setDefaultPlayProps=function(a,c){a=b._getSrcById(a),b._defaultPlayPropsHash[b._parsePath(a.src).src]=createjs.PlayPropsConfig.create(c)},b.getDefaultPlayProps=function(a){return a=b._getSrcById(a),b._defaultPlayPropsHash[b._parsePath(a.src).src]},b._playInstance=function(a,c){var d=b._defaultPlayPropsHash[a.src]||{};if(null==c.interrupt&&(c.interrupt=d.interrupt||b.defaultInterruptBehavior),null==c.delay&&(c.delay=d.delay||0),null==c.offset&&(c.offset=a.getPosition()),null==c.loop&&(c.loop=a.loop),null==c.volume&&(c.volume=a.volume),null==c.pan&&(c.pan=a.pan),0==c.delay){var e=b._beginPlaying(a,c); if(!e)return!1}else{var f=setTimeout(function(){b._beginPlaying(a,c)},c.delay);a.delayTimeoutId=f}return this._instances.push(a),!0},b._beginPlaying=function(b,c){if(!a.add(b,c.interrupt))return!1;var d=b._beginPlaying(c);if(!d){var e=createjs.indexOf(this._instances,b);return e>-1&&this._instances.splice(e,1),!1}return!0},b._getSrcById=function(a){return b._idHash[a]||{src:a}},b._playFinished=function(b){a.remove(b);var c=createjs.indexOf(this._instances,b);c>-1&&this._instances.splice(c,1)},createjs.Sound=Sound,a.channels={},a.create=function(b,c){var d=a.get(b);return null==d?(a.channels[b]=new a(b,c),!0):!1},a.removeSrc=function(b){var c=a.get(b);return null==c?!1:(c._removeAll(),delete a.channels[b],!0)},a.removeAll=function(){for(var b in a.channels)a.channels[b]._removeAll();a.channels={}},a.add=function(b,c){var d=a.get(b.src);return null==d?!1:d._add(b,c)},a.remove=function(b){var c=a.get(b.src);return null==c?!1:(c._remove(b),!0)},a.maxPerChannel=function(){return c.maxDefault},a.get=function(b){return a.channels[b]};var c=a.prototype;c.constructor=a,c.src=null,c.max=null,c.maxDefault=100,c.length=0,c.init=function(a,b){this.src=a,this.max=b||this.maxDefault,-1==this.max&&(this.max=this.maxDefault),this._instances=[]},c._get=function(a){return this._instances[a]},c._add=function(a,b){return this._getSlot(b,a)?(this._instances.push(a),this.length++,!0):!1},c._remove=function(a){var b=createjs.indexOf(this._instances,a);return-1==b?!1:(this._instances.splice(b,1),this.length--,!0)},c._removeAll=function(){for(var a=this.length-1;a>=0;a--)this._instances[a].stop()},c._getSlot=function(a){var b,c;if(a!=Sound.INTERRUPT_NONE&&(c=this._get(0),null==c))return!0;for(var d=0,e=this.max;e>d;d++){if(b=this._get(d),null==b)return!0;if(b.playState==Sound.PLAY_FINISHED||b.playState==Sound.PLAY_INTERRUPTED||b.playState==Sound.PLAY_FAILED){c=b;break}a!=Sound.INTERRUPT_NONE&&(a==Sound.INTERRUPT_EARLY&&b.getPosition()c.getPosition())&&(c=b)}return null!=c?(c._interrupt(),this._remove(c),!0):!1},c.toString=function(){return"[Sound SoundChannel]"}}(),this.createjs=this.createjs||{},function(){"use strict";var AbstractSoundInstance=function(a,b,c,d){this.EventDispatcher_constructor(),this.src=a,this.uniqueId=-1,this.playState=null,this.delayTimeoutId=null,this._volume=1,Object.defineProperty(this,"volume",{get:this.getVolume,set:this.setVolume}),this._pan=0,Object.defineProperty(this,"pan",{get:this.getPan,set:this.setPan}),this._startTime=Math.max(0,b||0),Object.defineProperty(this,"startTime",{get:this.getStartTime,set:this.setStartTime}),this._duration=Math.max(0,c||0),Object.defineProperty(this,"duration",{get:this.getDuration,set:this.setDuration}),this._playbackResource=null,Object.defineProperty(this,"playbackResource",{get:this.getPlaybackResource,set:this.setPlaybackResource}),d!==!1&&d!==!0&&this.setPlaybackResource(d),this._position=0,Object.defineProperty(this,"position",{get:this.getPosition,set:this.setPosition}),this._loop=0,Object.defineProperty(this,"loop",{get:this.getLoop,set:this.setLoop}),this._muted=!1,Object.defineProperty(this,"muted",{get:this.getMuted,set:this.setMuted}),this._paused=!1,Object.defineProperty(this,"paused",{get:this.getPaused,set:this.setPaused})},a=createjs.extend(AbstractSoundInstance,createjs.EventDispatcher);a.play=function(a,b,c,d,e,f){var g;return g=createjs.PlayPropsConfig.create(a instanceof Object||a instanceof createjs.PlayPropsConfig?a:{interrupt:a,delay:b,offset:c,loop:d,volume:e,pan:f}),this.playState==createjs.Sound.PLAY_SUCCEEDED?(this.applyPlayProps(g),void(this._paused&&this.setPaused(!1))):(this._cleanUp(),createjs.Sound._playInstance(this,g),this)},a.stop=function(){return this._position=0,this._paused=!1,this._handleStop(),this._cleanUp(),this.playState=createjs.Sound.PLAY_FINISHED,this},a.destroy=function(){this._cleanUp(),this.src=null,this.playbackResource=null,this.removeAllEventListeners()},a.applyPlayProps=function(a){return null!=a.offset&&this.setPosition(a.offset),null!=a.loop&&this.setLoop(a.loop),null!=a.volume&&this.setVolume(a.volume),null!=a.pan&&this.setPan(a.pan),null!=a.startTime&&(this.setStartTime(a.startTime),this.setDuration(a.duration)),this},a.toString=function(){return"[AbstractSoundInstance]"},a.getPaused=function(){return this._paused},a.setPaused=function(a){return a!==!0&&a!==!1||this._paused==a||1==a&&this.playState!=createjs.Sound.PLAY_SUCCEEDED?void 0:(this._paused=a,a?this._pause():this._resume(),clearTimeout(this.delayTimeoutId),this)},a.setVolume=function(a){return a==this._volume?this:(this._volume=Math.max(0,Math.min(1,a)),this._muted||this._updateVolume(),this)},a.getVolume=function(){return this._volume},a.setMuted=function(a){return a===!0||a===!1?(this._muted=a,this._updateVolume(),this):void 0},a.getMuted=function(){return this._muted},a.setPan=function(a){return a==this._pan?this:(this._pan=Math.max(-1,Math.min(1,a)),this._updatePan(),this)},a.getPan=function(){return this._pan},a.getPosition=function(){return this._paused||this.playState!=createjs.Sound.PLAY_SUCCEEDED||(this._position=this._calculateCurrentPosition()),this._position},a.setPosition=function(a){return this._position=Math.max(0,a),this.playState==createjs.Sound.PLAY_SUCCEEDED&&this._updatePosition(),this},a.getStartTime=function(){return this._startTime},a.setStartTime=function(a){return a==this._startTime?this:(this._startTime=Math.max(0,a||0),this._updateStartTime(),this)},a.getDuration=function(){return this._duration},a.setDuration=function(a){return a==this._duration?this:(this._duration=Math.max(0,a||0),this._updateDuration(),this)},a.setPlaybackResource=function(a){return this._playbackResource=a,0==this._duration&&this._setDurationFromSource(),this},a.getPlaybackResource=function(){return this._playbackResource},a.getLoop=function(){return this._loop},a.setLoop=function(a){null!=this._playbackResource&&(0!=this._loop&&0==a?this._removeLooping(a):0==this._loop&&0!=a&&this._addLooping(a)),this._loop=a},a._sendEvent=function(a){var b=new createjs.Event(a);this.dispatchEvent(b)},a._cleanUp=function(){clearTimeout(this.delayTimeoutId),this._handleCleanUp(),this._paused=!1,createjs.Sound._playFinished(this)},a._interrupt=function(){this._cleanUp(),this.playState=createjs.Sound.PLAY_INTERRUPTED,this._sendEvent("interrupted")},a._beginPlaying=function(a){return this.setPosition(a.offset),this.setLoop(a.loop),this.setVolume(a.volume),this.setPan(a.pan),null!=a.startTime&&(this.setStartTime(a.startTime),this.setDuration(a.duration)),null!=this._playbackResource&&this._positionc;c++){var e=this._soundInstances[b][c];e.setPlaybackResource(this._audioSources[b])}},a._handlePreloadError=function(){},a._updateVolume=function(){},createjs.AbstractPlugin=AbstractPlugin}(),this.createjs=this.createjs||{},function(){"use strict";function a(a){this.AbstractLoader_constructor(a,!0,createjs.AbstractLoader.SOUND)}var b=createjs.extend(a,createjs.AbstractLoader);a.context=null,b.toString=function(){return"[WebAudioLoader]"},b._createRequest=function(){this._request=new createjs.XHRRequest(this._item,!1),this._request.setResponseType("arraybuffer")},b._sendComplete=function(){a.context.decodeAudioData(this._rawResult,createjs.proxy(this._handleAudioDecoded,this),createjs.proxy(this._sendError,this))},b._handleAudioDecoded=function(a){this._result=a,this.AbstractLoader__sendComplete()},createjs.WebAudioLoader=createjs.promote(a,"AbstractLoader")}(),this.createjs=this.createjs||{},function(){"use strict";function WebAudioSoundInstance(a,c,d,e){this.AbstractSoundInstance_constructor(a,c,d,e),this.gainNode=b.context.createGain(),this.panNode=b.context.createPanner(),this.panNode.panningModel=b._panningModel,this.panNode.connect(this.gainNode),this.sourceNode=null,this._soundCompleteTimeout=null,this._sourceNodeNext=null,this._playbackStartTime=0,this._endedHandler=createjs.proxy(this._handleSoundComplete,this)}var a=createjs.extend(WebAudioSoundInstance,createjs.AbstractSoundInstance),b=WebAudioSoundInstance;b.context=null,b.destinationNode=null,b._panningModel="equalpower",a.destroy=function(){this.AbstractSoundInstance_destroy(),this.panNode.disconnect(0),this.panNode=null,this.gainNode.disconnect(0),this.gainNode=null},a.toString=function(){return"[WebAudioSoundInstance]"},a._updatePan=function(){this.panNode.setPosition(this._pan,0,-.5)},a._removeLooping=function(){this._sourceNodeNext=this._cleanUpAudioNode(this._sourceNodeNext)},a._addLooping=function(){this.playState==createjs.Sound.PLAY_SUCCEEDED&&(this._sourceNodeNext=this._createAndPlayAudioNode(this._playbackStartTime,0))},a._setDurationFromSource=function(){this._duration=1e3*this.playbackResource.duration},a._handleCleanUp=function(){this.sourceNode&&this.playState==createjs.Sound.PLAY_SUCCEEDED&&(this.sourceNode=this._cleanUpAudioNode(this.sourceNode),this._sourceNodeNext=this._cleanUpAudioNode(this._sourceNodeNext)),0!=this.gainNode.numberOfOutputs&&this.gainNode.disconnect(0),clearTimeout(this._soundCompleteTimeout),this._playbackStartTime=0},a._cleanUpAudioNode=function(a){return a&&(a.stop(0),a.disconnect(0),a=null),a},a._handleSoundReady=function(){this.gainNode.connect(b.destinationNode);var a=.001*this._duration,c=.001*this._position;c>a&&(c=a),this.sourceNode=this._createAndPlayAudioNode(b.context.currentTime-a,c),this._playbackStartTime=this.sourceNode.startTime-c,this._soundCompleteTimeout=setTimeout(this._endedHandler,1e3*(a-c)),0!=this._loop&&(this._sourceNodeNext=this._createAndPlayAudioNode(this._playbackStartTime,0))},a._createAndPlayAudioNode=function(a,c){var d=b.context.createBufferSource();d.buffer=this.playbackResource,d.connect(this.panNode);var e=.001*this._duration;return d.startTime=a+e,d.start(d.startTime,c+.001*this._startTime,e-c),d},a._pause=function(){this._position=1e3*(b.context.currentTime-this._playbackStartTime),this.sourceNode=this._cleanUpAudioNode(this.sourceNode),this._sourceNodeNext=this._cleanUpAudioNode(this._sourceNodeNext),0!=this.gainNode.numberOfOutputs&&this.gainNode.disconnect(0),clearTimeout(this._soundCompleteTimeout)},a._resume=function(){this._handleSoundReady()},a._updateVolume=function(){var a=this._muted?0:this._volume;a!=this.gainNode.gain.value&&(this.gainNode.gain.value=a)},a._calculateCurrentPosition=function(){return 1e3*(b.context.currentTime-this._playbackStartTime)},a._updatePosition=function(){this.sourceNode=this._cleanUpAudioNode(this.sourceNode),this._sourceNodeNext=this._cleanUpAudioNode(this._sourceNodeNext),clearTimeout(this._soundCompleteTimeout),this._paused||this._handleSoundReady()},a._handleLoop=function(){this._cleanUpAudioNode(this.sourceNode),this.sourceNode=this._sourceNodeNext,this._playbackStartTime=this.sourceNode.startTime,this._sourceNodeNext=this._createAndPlayAudioNode(this._playbackStartTime,0),this._soundCompleteTimeout=setTimeout(this._endedHandler,this._duration)},a._updateDuration=function(){this.playState==createjs.Sound.PLAY_SUCCEEDED&&(this._pause(),this._resume())},createjs.WebAudioSoundInstance=createjs.promote(WebAudioSoundInstance,"AbstractSoundInstance")}(),this.createjs=this.createjs||{},function(){"use strict";function WebAudioPlugin(){this.AbstractPlugin_constructor(),this._panningModel=b._panningModel,this.context=b.context,this.dynamicsCompressorNode=this.context.createDynamicsCompressor(),this.dynamicsCompressorNode.connect(this.context.destination),this.gainNode=this.context.createGain(),this.gainNode.connect(this.dynamicsCompressorNode),createjs.WebAudioSoundInstance.destinationNode=this.gainNode,this._capabilities=b._capabilities,this._loaderClass=createjs.WebAudioLoader,this._soundInstanceClass=createjs.WebAudioSoundInstance,this._addPropsToClasses()}var a=createjs.extend(WebAudioPlugin,createjs.AbstractPlugin),b=WebAudioPlugin;b._capabilities=null,b._panningModel="equalpower",b.context=null,b.isSupported=function(){var a=createjs.BrowserDetect.isIOS||createjs.BrowserDetect.isAndroid||createjs.BrowserDetect.isBlackberry;return"file:"!=location.protocol||a||this._isFileXHRSupported()?(b._generateCapabilities(),null==b.context?!1:!0):!1},b.playEmptySound=function(){if(null!=b.context){var a=b.context.createBufferSource();a.buffer=b.context.createBuffer(1,1,22050),a.connect(b.context.destination),a.start(0,0,0)}},b._isFileXHRSupported=function(){var a=!0,b=new XMLHttpRequest;try{b.open("GET","WebAudioPluginTest.fail",!1)}catch(c){return a=!1}b.onerror=function(){a=!1},b.onload=function(){a=404==this.status||200==this.status||0==this.status&&""!=this.response};try{b.send()}catch(c){a=!1}return a},b._generateCapabilities=function(){if(null==b._capabilities){var a=document.createElement("audio");if(null==a.canPlayType)return null;if(null==b.context)if(window.AudioContext)b.context=new AudioContext;else{if(!window.webkitAudioContext)return null;b.context=new webkitAudioContext}b._compatibilitySetUp(),b.playEmptySound(),b._capabilities={panning:!0,volume:!0,tracks:-1};for(var c=createjs.Sound.SUPPORTED_EXTENSIONS,d=createjs.Sound.EXTENSION_MAP,e=0,f=c.length;f>e;e++){var g=c[e],h=d[g]||g;b._capabilities[g]="no"!=a.canPlayType("audio/"+g)&&""!=a.canPlayType("audio/"+g)||"no"!=a.canPlayType("audio/"+h)&&""!=a.canPlayType("audio/"+h)}b.context.destination.numberOfChannels<2&&(b._capabilities.panning=!1)}},b._compatibilitySetUp=function(){if(b._panningModel="equalpower",!b.context.createGain){b.context.createGain=b.context.createGainNode;var a=b.context.createBufferSource();a.__proto__.start=a.__proto__.noteGrainOn,a.__proto__.stop=a.__proto__.noteOff,b._panningModel=0}},a.toString=function(){return"[WebAudioPlugin]"},a._addPropsToClasses=function(){var a=this._soundInstanceClass;a.context=this.context,a.destinationNode=this.gainNode,a._panningModel=this._panningModel,this._loaderClass.context=this.context},a._updateVolume=function(){var a=createjs.Sound._masterMute?0:this._volume;a!=this.gainNode.gain.value&&(this.gainNode.gain.value=a)},createjs.WebAudioPlugin=createjs.promote(WebAudioPlugin,"AbstractPlugin")}(),this.createjs=this.createjs||{},function(){"use strict";function HTMLAudioTagPool(){throw"HTMLAudioTagPool cannot be instantiated"}function a(){this._tags=[]}var b=HTMLAudioTagPool;b._tags={},b._tagPool=new a,b._tagUsed={},b.get=function(a){var c=b._tags[a];return null==c?(c=b._tags[a]=b._tagPool.get(),c.src=a):b._tagUsed[a]?(c=b._tagPool.get(),c.src=a):b._tagUsed[a]=!0,c},b.set=function(a,c){c==b._tags[a]?b._tagUsed[a]=!1:b._tagPool.set(c)},b.remove=function(a){var c=b._tags[a];return null==c?!1:(b._tagPool.set(c),delete b._tags[a],delete b._tagUsed[a],!0)},b.getDuration=function(a){var c=b._tags[a];return null==c?0:1e3*c.duration},createjs.HTMLAudioTagPool=HTMLAudioTagPool;var c=a.prototype;c.constructor=a,c.get=function(){var a;return a=0==this._tags.length?this._createTag():this._tags.pop(),null==a.parentNode&&document.body.appendChild(a),a},c.set=function(a){var b=createjs.indexOf(this._tags,a);-1==b&&(this._tags.src=null,this._tags.push(a))},c.toString=function(){return"[TagPool]"},c._createTag=function(){var a=document.createElement("audio");return a.autoplay=!1,a.preload="none",a}}(),this.createjs=this.createjs||{},function(){"use strict";function HTMLAudioSoundInstance(a,b,c,d){this.AbstractSoundInstance_constructor(a,b,c,d),this._audioSpriteStopTime=null,this._delayTimeoutId=null,this._endedHandler=createjs.proxy(this._handleSoundComplete,this),this._readyHandler=createjs.proxy(this._handleTagReady,this),this._stalledHandler=createjs.proxy(this._playFailed,this),this._audioSpriteEndHandler=createjs.proxy(this._handleAudioSpriteLoop,this),this._loopHandler=createjs.proxy(this._handleSoundComplete,this),c?this._audioSpriteStopTime=.001*(b+c):this._duration=createjs.HTMLAudioTagPool.getDuration(this.src)}var a=createjs.extend(HTMLAudioSoundInstance,createjs.AbstractSoundInstance);a.setMasterVolume=function(){this._updateVolume()},a.setMasterMute=function(){this._updateVolume()},a.toString=function(){return"[HTMLAudioSoundInstance]"},a._removeLooping=function(){null!=this._playbackResource&&(this._playbackResource.loop=!1,this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED,this._loopHandler,!1))},a._addLooping=function(){null==this._playbackResource||this._audioSpriteStopTime||(this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED,this._loopHandler,!1),this._playbackResource.loop=!0)},a._handleCleanUp=function(){var a=this._playbackResource;if(null!=a){a.pause(),a.loop=!1,a.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED,this._endedHandler,!1),a.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_READY,this._readyHandler,!1),a.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_STALLED,this._stalledHandler,!1),a.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED,this._loopHandler,!1),a.removeEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE,this._audioSpriteEndHandler,!1);try{a.currentTime=this._startTime}catch(b){}createjs.HTMLAudioTagPool.set(this.src,a),this._playbackResource=null}},a._beginPlaying=function(a){return this._playbackResource=createjs.HTMLAudioTagPool.get(this.src),this.AbstractSoundInstance__beginPlaying(a)},a._handleSoundReady=function(){if(4!==this._playbackResource.readyState){var a=this._playbackResource;return a.addEventListener(createjs.HTMLAudioPlugin._AUDIO_READY,this._readyHandler,!1),a.addEventListener(createjs.HTMLAudioPlugin._AUDIO_STALLED,this._stalledHandler,!1),a.preload="auto",void a.load()}this._updateVolume(),this._playbackResource.currentTime=.001*(this._startTime+this._position),this._audioSpriteStopTime?this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE,this._audioSpriteEndHandler,!1):(this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED,this._endedHandler,!1),0!=this._loop&&(this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED,this._loopHandler,!1),this._playbackResource.loop=!0)),this._playbackResource.play()},a._handleTagReady=function(){this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_READY,this._readyHandler,!1),this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_STALLED,this._stalledHandler,!1),this._handleSoundReady()},a._pause=function(){this._playbackResource.pause()},a._resume=function(){this._playbackResource.play()},a._updateVolume=function(){if(null!=this._playbackResource){var a=this._muted||createjs.Sound._masterMute?0:this._volume*createjs.Sound._masterVolume;a!=this._playbackResource.volume&&(this._playbackResource.volume=a)}},a._calculateCurrentPosition=function(){return 1e3*this._playbackResource.currentTime-this._startTime},a._updatePosition=function(){this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED,this._loopHandler,!1),this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED,this._handleSetPositionSeek,!1);try{this._playbackResource.currentTime=.001*(this._position+this._startTime)}catch(a){this._handleSetPositionSeek(null)}},a._handleSetPositionSeek=function(){null!=this._playbackResource&&(this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED,this._handleSetPositionSeek,!1),this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED,this._loopHandler,!1))},a._handleAudioSpriteLoop=function(){this._playbackResource.currentTime<=this._audioSpriteStopTime||(this._playbackResource.pause(),0==this._loop?this._handleSoundComplete(null):(this._position=0,this._loop--,this._playbackResource.currentTime=.001*this._startTime,this._paused||this._playbackResource.play(),this._sendEvent("loop")))},a._handleLoop=function(){0==this._loop&&(this._playbackResource.loop=!1,this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_SEEKED,this._loopHandler,!1))},a._updateStartTime=function(){this._audioSpriteStopTime=.001*(this._startTime+this._duration),this.playState==createjs.Sound.PLAY_SUCCEEDED&&(this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED,this._endedHandler,!1),this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE,this._audioSpriteEndHandler,!1))},a._updateDuration=function(){this._audioSpriteStopTime=.001*(this._startTime+this._duration),this.playState==createjs.Sound.PLAY_SUCCEEDED&&(this._playbackResource.removeEventListener(createjs.HTMLAudioPlugin._AUDIO_ENDED,this._endedHandler,!1),this._playbackResource.addEventListener(createjs.HTMLAudioPlugin._TIME_UPDATE,this._audioSpriteEndHandler,!1))},createjs.HTMLAudioSoundInstance=createjs.promote(HTMLAudioSoundInstance,"AbstractSoundInstance")}(),this.createjs=this.createjs||{},function(){"use strict";function HTMLAudioPlugin(){this.AbstractPlugin_constructor(),this.defaultNumChannels=2,this._capabilities=b._capabilities,this._loaderClass=createjs.SoundLoader,this._soundInstanceClass=createjs.HTMLAudioSoundInstance}var a=createjs.extend(HTMLAudioPlugin,createjs.AbstractPlugin),b=HTMLAudioPlugin;b.MAX_INSTANCES=30,b._AUDIO_READY="canplaythrough",b._AUDIO_ENDED="ended",b._AUDIO_SEEKED="seeked",b._AUDIO_STALLED="stalled",b._TIME_UPDATE="timeupdate",b._capabilities=null,b.isSupported=function(){return b._generateCapabilities(),null!=b._capabilities},b._generateCapabilities=function(){if(null==b._capabilities){var a=document.createElement("audio");if(null==a.canPlayType)return null;b._capabilities={panning:!1,volume:!0,tracks:-1};for(var c=createjs.Sound.SUPPORTED_EXTENSIONS,d=createjs.Sound.EXTENSION_MAP,e=0,f=c.length;f>e;e++){var g=c[e],h=d[g]||g;b._capabilities[g]="no"!=a.canPlayType("audio/"+g)&&""!=a.canPlayType("audio/"+g)||"no"!=a.canPlayType("audio/"+h)&&""!=a.canPlayType("audio/"+h)}}},a.register=function(a){var b=createjs.HTMLAudioTagPool.get(a.src),c=this.AbstractPlugin_register(a);return c.setTag(b),c},a.removeSound=function(a){this.AbstractPlugin_removeSound(a),createjs.HTMLAudioTagPool.remove(a)},a.create=function(a,b,c){var d=this.AbstractPlugin_create(a,b,c);return d.setPlaybackResource(null),d},a.toString=function(){return"[HTMLAudioPlugin]"},a.setVolume=a.getVolume=a.setMute=null,createjs.HTMLAudioPlugin=createjs.promote(HTMLAudioPlugin,"AbstractPlugin")}(); \ No newline at end of file

b^U7C~Af;9P#c-Dn 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 z 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 E2TkWCe*gdg diff --git a/lib/cordovaaudioplugin-NEXT.combined.js b/lib/cordovaaudioplugin-NEXT.combined.js index efdf8e9c..99d6f87f 100644 --- a/lib/cordovaaudioplugin-NEXT.combined.js +++ b/lib/cordovaaudioplugin-NEXT.combined.js @@ -1,3 +1,30 @@ +/*! +* SoundJS +* Visit http://createjs.com/ for documentation, updates and examples. +* +* Copyright (c) 2010 gskinner.com, inc. +* +* Permission is hereby granted, free of charge, to any person +* obtaining a copy of this software and associated documentation +* files (the "Software"), to deal in the Software without +* restriction, including without limitation the rights to use, +* copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following +* conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +*/ //############################################################################## @@ -538,6 +565,6 @@ this.createjs = this.createjs || {}; * @type String * @static **/ - s.buildDate = /*=date*/"Tue, 19 May 2015 17:26:59 GMT"; // injected by build process + s.buildDate = /*=date*/"Wed, 27 May 2015 18:12:38 GMT"; // injected by build process })(); \ No newline at end of file diff --git a/lib/cordovaaudioplugin-NEXT.min.js b/lib/cordovaaudioplugin-NEXT.min.js index fdb9fb49..0cb6d230 100644 --- a/lib/cordovaaudioplugin-NEXT.min.js +++ b/lib/cordovaaudioplugin-NEXT.min.js @@ -2,7 +2,7 @@ * @license SoundJS * Visit http://createjs.com/ for documentation, updates and examples. * -* Copyright (c) 2011-2013 gskinner.com, inc. +* Copyright (c) 2011-2015 gskinner.com, inc. * * Distributed under the terms of the MIT license. * http://www.opensource.org/licenses/mit-license.html @@ -14,4 +14,4 @@ * SoundJS FlashAudioPlugin also includes swfobject (http://code.google.com/p/swfobject/) */ -this.createjs=this.createjs||{},function(){"use strict";function a(a){this.AbstractLoader_constructor(a,!0,createjs.AbstractLoader.SOUND),this._media=null,this._loadTime=0,this._TIMER_FREQUENCY=100}var b=createjs.extend(a,createjs.AbstractLoader);b.load=function(){this._media=new Media(this._item.src,null,createjs.proxy(this._mediaErrorHandler,this)),this._media.seekTo(0),this._getMediaDuration()},b.toString=function(){return"[CordovaAudioLoader]"},b._mediaErrorHandler=function(){this._media.release(),this._sendError()},b._getMediaDuration=function(){this._result=1e3*this._media.getDuration(),this._result<0?(this._loadTime+=this._TIMER_FREQUENCY,this._loadTime>this._item.loadTimeout?this.handleEvent({type:"timeout"}):setTimeout(createjs.proxy(this._getMediaDuration,this),this._TIMER_FREQUENCY)):(this._media.release(),this._sendComplete())},createjs.CordovaAudioLoader=createjs.promote(a,"AbstractLoader")}(),this.createjs=this.createjs||{},function(){"use strict";function CordovaAudioSoundInstance(a,b,c,d){this.AbstractSoundInstance_constructor(a,b,c,d),this.playWhenScreenLocked=null,this._playStartTime=null,this._audioSpriteTimeout=null,this._audioSprite=!1,this._audioSpriteEndHandler=createjs.proxy(this._handleAudioSpriteComplete,this),this._mediaPlayFinishedHandler=createjs.proxy(this._handleSoundComplete,this),this._mediaErrorHandler=createjs.proxy(this._handleMediaError,this),this._mediaProgressHandler=createjs.proxy(this._handleMediaProgress,this),this._playbackResource=new Media(a,this._mediaPlayFinishedHandler,this._mediaErrorHandler,this._mediaProgressHandler),c?this._audioSprite=!0:this._setDurationFromSource()}var a=createjs.extend(CordovaAudioSoundInstance,createjs.AbstractSoundInstance);a.setMasterVolume=function(){this._updateVolume()},a.setMasterMute=function(){this._updateVolume()},a.destroy=function(){this.AbstractSoundInstance_destroy(),this._playbackResource.release()},a.getCurrentPosition=function(a,b){this._playbackResource.getCurrentPosition(a,b)},a.toString=function(){return"[CordovaAudioSoundInstance]"},a._handleMediaError=function(){clearTimeout(this.delayTimeoutId),this.playState=createjs.Sound.PLAY_FAILED,this._sendEvent("failed")},a._handleMediaProgress=function(){},a._handleAudioSpriteComplete=function(){this._playbackResource.pause(),this._handleSoundComplete()},a._handleCleanUp=function(){clearTimeout(this._audioSpriteTimeout),this._playbackResource.pause()},a._handleSoundReady=function(){this._playbackResource.seekTo(this._startTime+this._position),this._audioSprite&&(this._audioSpriteTimeout=setTimeout(this._audioSpriteEndHandler,this._duration-this._position)),this._playbackResource.play({playAudioWhenScreenIsLocked:this.playWhenScreenLocked}),this._playStartTime=Date.now()},a._pause=function(){clearTimeout(this._audioSpriteTimeout),this._playbackResource.pause(),this._playStartTime&&(this._position=Date.now()-this._playStartTime,this._playStartTime=null),this._playbackResource.getCurrentPosition(createjs.proxy(this._updatePausePos,this))},a._updatePausePos=function(a){this._position=1e3*a-this._startTime,this._playStartTime&&(this._playStartTime=Date.now())},a._resume=function(){this._audioSprite&&(this._audioSpriteTimeout=setTimeout(this._audioSpriteEndHandler,this._duration-this._position)),this._playbackResource.play({playAudioWhenScreenIsLocked:this.playWhenScreenLocked}),this._playStartTime=Date.now()},a._handleStop=function(){clearTimeout(this._audioSpriteTimeout),this._playbackResource.pause(),this._playbackResource.seekTo(this._startTime),this._playStartTime&&(this._position=0,this._playStartTime=null)},a._updateVolume=function(){var a=this._muted||createjs.Sound._masterMute?0:this._volume*createjs.Sound._masterVolume;this._playbackResource.setVolume(a)},a._calculateCurrentPosition=function(){return this._playStartTime&&(this._position=Date.now()-this._playStartTime+this._position,this._playStartTime=Date.now()),this._position},a._updatePosition=function(){this._playbackResource.seekTo(this._startTime+this._position),this._playStartTime=Date.now(),this._audioSprite&&(clearTimeout(this._audioSpriteTimeout),this._audioSpriteTimeout=setTimeout(this._audioSpriteEndHandler,this._duration-this._position))},a._handleLoop=function(){this._handleSoundReady()},a._updateStartTime=function(){this._audioSprite=!0,this.playState==createjs.Sound.PLAY_SUCCEEDED},a._updateDuration=function(){this._audioSprite,this.playState==createjs.Sound.PLAY_SUCCEEDED&&(clearTimeout(this._audioSpriteTimeout),this._audioSpriteTimeout=setTimeout(this._audioSpriteEndHandler,this._duration-this.position))},a._setDurationFromSource=function(){this._duration=createjs.Sound.activePlugin.getSrcDuration(this.src)},createjs.CordovaAudioSoundInstance=createjs.promote(CordovaAudioSoundInstance,"AbstractSoundInstance")}(),this.createjs=this.createjs||{},function(){"use strict";function CordovaAudioPlugin(){this.AbstractPlugin_constructor(),this._capabilities=b._capabilities,this._loaderClass=createjs.CordovaAudioLoader,this._soundInstanceClass=createjs.CordovaAudioSoundInstance,this._srcDurationHash={}}var a=createjs.extend(CordovaAudioPlugin,createjs.AbstractPlugin),b=CordovaAudioPlugin;b.playWhenScreenLocked=!1,b._capabilities=null,b.isSupported=function(){return b._generateCapabilities(),null!=b._capabilities},b._generateCapabilities=function(){if(null==b._capabilities&&(window.cordova||window.PhoneGap||window.phonegap)&&window.Media){var a=document.createElement("audio");if(null==a.canPlayType)return null;b._capabilities={panning:!1,volume:!0,tracks:-1};for(var c=createjs.Sound.SUPPORTED_EXTENSIONS,d=createjs.Sound.EXTENSION_MAP,e=0,f=c.length;f>e;e++){var g=c[e],h=d[g]||g;b._capabilities[g]="no"!=a.canPlayType("audio/"+g)&&""!=a.canPlayType("audio/"+g)||"no"!=a.canPlayType("audio/"+h)&&""!=a.canPlayType("audio/"+h)}}},a.create=function(a,b,c){var d=this.AbstractPlugin_create(a,b,c);return d.playWhenScreenLocked=this.playWhenScreenLocked,d},a.toString=function(){return"[CordovaAudioPlugin]"},a.setVolume=a.getVolume=a.setMute=null,a.getSrcDuration=function(a){return this._srcDurationHash[a]},a._handlePreloadComplete=function(a){var b=a.target.getItem().src;this._srcDurationHash[b]=a.result,this._audioSources[b]=a.result},a.removeSound=function(a){delete this._srcDurationHash[a],this.AbstractPlugin_removeSound(a)},createjs.CordovaAudioPlugin=createjs.promote(CordovaAudioPlugin,"AbstractPlugin")}(),this.createjs=this.createjs||{},function(){var a=createjs.CordovaAudioPlugin=createjs.CordovaAudioPlugin||{};a.version="NEXT",a.buildDate="Tue, 19 May 2015 17:26:59 GMT"}(); \ No newline at end of file +this.createjs=this.createjs||{},function(){"use strict";function a(a){this.AbstractLoader_constructor(a,!0,createjs.AbstractLoader.SOUND),this._media=null,this._loadTime=0,this._TIMER_FREQUENCY=100}var b=createjs.extend(a,createjs.AbstractLoader);b.load=function(){this._media=new Media(this._item.src,null,createjs.proxy(this._mediaErrorHandler,this)),this._media.seekTo(0),this._getMediaDuration()},b.toString=function(){return"[CordovaAudioLoader]"},b._mediaErrorHandler=function(){this._media.release(),this._sendError()},b._getMediaDuration=function(){this._result=1e3*this._media.getDuration(),this._result<0?(this._loadTime+=this._TIMER_FREQUENCY,this._loadTime>this._item.loadTimeout?this.handleEvent({type:"timeout"}):setTimeout(createjs.proxy(this._getMediaDuration,this),this._TIMER_FREQUENCY)):(this._media.release(),this._sendComplete())},createjs.CordovaAudioLoader=createjs.promote(a,"AbstractLoader")}(),this.createjs=this.createjs||{},function(){"use strict";function CordovaAudioSoundInstance(a,b,c,d){this.AbstractSoundInstance_constructor(a,b,c,d),this.playWhenScreenLocked=null,this._playStartTime=null,this._audioSpriteTimeout=null,this._audioSprite=!1,this._audioSpriteEndHandler=createjs.proxy(this._handleAudioSpriteComplete,this),this._mediaPlayFinishedHandler=createjs.proxy(this._handleSoundComplete,this),this._mediaErrorHandler=createjs.proxy(this._handleMediaError,this),this._mediaProgressHandler=createjs.proxy(this._handleMediaProgress,this),this._playbackResource=new Media(a,this._mediaPlayFinishedHandler,this._mediaErrorHandler,this._mediaProgressHandler),c?this._audioSprite=!0:this._setDurationFromSource()}var a=createjs.extend(CordovaAudioSoundInstance,createjs.AbstractSoundInstance);a.setMasterVolume=function(){this._updateVolume()},a.setMasterMute=function(){this._updateVolume()},a.destroy=function(){this.AbstractSoundInstance_destroy(),this._playbackResource.release()},a.getCurrentPosition=function(a,b){this._playbackResource.getCurrentPosition(a,b)},a.toString=function(){return"[CordovaAudioSoundInstance]"},a._handleMediaError=function(){clearTimeout(this.delayTimeoutId),this.playState=createjs.Sound.PLAY_FAILED,this._sendEvent("failed")},a._handleMediaProgress=function(){},a._handleAudioSpriteComplete=function(){this._playbackResource.pause(),this._handleSoundComplete()},a._handleCleanUp=function(){clearTimeout(this._audioSpriteTimeout),this._playbackResource.pause()},a._handleSoundReady=function(){this._playbackResource.seekTo(this._startTime+this._position),this._audioSprite&&(this._audioSpriteTimeout=setTimeout(this._audioSpriteEndHandler,this._duration-this._position)),this._playbackResource.play({playAudioWhenScreenIsLocked:this.playWhenScreenLocked}),this._playStartTime=Date.now()},a._pause=function(){clearTimeout(this._audioSpriteTimeout),this._playbackResource.pause(),this._playStartTime&&(this._position=Date.now()-this._playStartTime,this._playStartTime=null),this._playbackResource.getCurrentPosition(createjs.proxy(this._updatePausePos,this))},a._updatePausePos=function(a){this._position=1e3*a-this._startTime,this._playStartTime&&(this._playStartTime=Date.now())},a._resume=function(){this._audioSprite&&(this._audioSpriteTimeout=setTimeout(this._audioSpriteEndHandler,this._duration-this._position)),this._playbackResource.play({playAudioWhenScreenIsLocked:this.playWhenScreenLocked}),this._playStartTime=Date.now()},a._handleStop=function(){clearTimeout(this._audioSpriteTimeout),this._playbackResource.pause(),this._playbackResource.seekTo(this._startTime),this._playStartTime&&(this._position=0,this._playStartTime=null)},a._updateVolume=function(){var a=this._muted||createjs.Sound._masterMute?0:this._volume*createjs.Sound._masterVolume;this._playbackResource.setVolume(a)},a._calculateCurrentPosition=function(){return this._playStartTime&&(this._position=Date.now()-this._playStartTime+this._position,this._playStartTime=Date.now()),this._position},a._updatePosition=function(){this._playbackResource.seekTo(this._startTime+this._position),this._playStartTime=Date.now(),this._audioSprite&&(clearTimeout(this._audioSpriteTimeout),this._audioSpriteTimeout=setTimeout(this._audioSpriteEndHandler,this._duration-this._position))},a._handleLoop=function(){this._handleSoundReady()},a._updateStartTime=function(){this._audioSprite=!0,this.playState==createjs.Sound.PLAY_SUCCEEDED},a._updateDuration=function(){this._audioSprite,this.playState==createjs.Sound.PLAY_SUCCEEDED&&(clearTimeout(this._audioSpriteTimeout),this._audioSpriteTimeout=setTimeout(this._audioSpriteEndHandler,this._duration-this.position))},a._setDurationFromSource=function(){this._duration=createjs.Sound.activePlugin.getSrcDuration(this.src)},createjs.CordovaAudioSoundInstance=createjs.promote(CordovaAudioSoundInstance,"AbstractSoundInstance")}(),this.createjs=this.createjs||{},function(){"use strict";function CordovaAudioPlugin(){this.AbstractPlugin_constructor(),this._capabilities=b._capabilities,this._loaderClass=createjs.CordovaAudioLoader,this._soundInstanceClass=createjs.CordovaAudioSoundInstance,this._srcDurationHash={}}var a=createjs.extend(CordovaAudioPlugin,createjs.AbstractPlugin),b=CordovaAudioPlugin;b.playWhenScreenLocked=!1,b._capabilities=null,b.isSupported=function(){return b._generateCapabilities(),null!=b._capabilities},b._generateCapabilities=function(){if(null==b._capabilities&&(window.cordova||window.PhoneGap||window.phonegap)&&window.Media){var a=document.createElement("audio");if(null==a.canPlayType)return null;b._capabilities={panning:!1,volume:!0,tracks:-1};for(var c=createjs.Sound.SUPPORTED_EXTENSIONS,d=createjs.Sound.EXTENSION_MAP,e=0,f=c.length;f>e;e++){var g=c[e],h=d[g]||g;b._capabilities[g]="no"!=a.canPlayType("audio/"+g)&&""!=a.canPlayType("audio/"+g)||"no"!=a.canPlayType("audio/"+h)&&""!=a.canPlayType("audio/"+h)}}},a.create=function(a,b,c){var d=this.AbstractPlugin_create(a,b,c);return d.playWhenScreenLocked=this.playWhenScreenLocked,d},a.toString=function(){return"[CordovaAudioPlugin]"},a.setVolume=a.getVolume=a.setMute=null,a.getSrcDuration=function(a){return this._srcDurationHash[a]},a._handlePreloadComplete=function(a){var b=a.target.getItem().src;this._srcDurationHash[b]=a.result,this._audioSources[b]=a.result},a.removeSound=function(a){delete this._srcDurationHash[a],this.AbstractPlugin_removeSound(a)},createjs.CordovaAudioPlugin=createjs.promote(CordovaAudioPlugin,"AbstractPlugin")}(),this.createjs=this.createjs||{},function(){var a=createjs.CordovaAudioPlugin=createjs.CordovaAudioPlugin||{};a.version="NEXT",a.buildDate="Wed, 27 May 2015 18:12:38 GMT"}(); \ No newline at end of file diff --git a/lib/flashaudioplugin-NEXT.combined.js b/lib/flashaudioplugin-NEXT.combined.js index 48bd7ada..34dbf1e3 100644 --- a/lib/flashaudioplugin-NEXT.combined.js +++ b/lib/flashaudioplugin-NEXT.combined.js @@ -1,3 +1,30 @@ +/*! +* SoundJS +* Visit http://createjs.com/ for documentation, updates and examples. +* +* Copyright (c) 2010 gskinner.com, inc. +* +* Permission is hereby granted, free of charge, to any person +* obtaining a copy of this software and associated documentation +* files (the "Software"), to deal in the Software without +* restriction, including without limitation the rights to use, +* copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following +* conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +*/ //############################################################################## @@ -1572,6 +1599,6 @@ this.createjs = this.createjs || {}; * @type String * @static **/ - s.buildDate = /*=date*/"Tue, 19 May 2015 17:26:59 GMT"; // injected by build process + s.buildDate = /*=date*/"Wed, 27 May 2015 18:12:38 GMT"; // injected by build process })(); \ No newline at end of file diff --git a/lib/flashaudioplugin-NEXT.min.js b/lib/flashaudioplugin-NEXT.min.js index ae130998..2817f596 100644 --- a/lib/flashaudioplugin-NEXT.min.js +++ b/lib/flashaudioplugin-NEXT.min.js @@ -2,7 +2,7 @@ * @license SoundJS * Visit http://createjs.com/ for documentation, updates and examples. * -* Copyright (c) 2011-2013 gskinner.com, inc. +* Copyright (c) 2011-2015 gskinner.com, inc. * * Distributed under the terms of the MIT license. * http://www.opensource.org/licenses/mit-license.html @@ -17,4 +17,4 @@ /*! SWFObject v2.2 is released under the MIT License */ -var swfobject=function(){function a(){if(!R){try{var a=K.getElementsByTagName("body")[0].appendChild(q("span"));a.parentNode.removeChild(a)}catch(b){return}R=!0;for(var c=N.length,d=0;c>d;d++)N[d]()}}function b(a){R?a():N[N.length]=a}function c(a){if(typeof J.addEventListener!=C)J.addEventListener("load",a,!1);else if(typeof K.addEventListener!=C)K.addEventListener("load",a,!1);else if(typeof J.attachEvent!=C)r(J,"onload",a);else if("function"==typeof J.onload){var b=J.onload;J.onload=function(){b(),a()}}else J.onload=a}function d(){M?e():f()}function e(){var a=K.getElementsByTagName("body")[0],b=q(D);b.setAttribute("type",G);var c=a.appendChild(b);if(c){var d=0;!function(){if(typeof c.GetVariable!=C){var e=c.GetVariable("$version");e&&(e=e.split(" ")[1].split(","),U.pv=[parseInt(e[0],10),parseInt(e[1],10),parseInt(e[2],10)])}else if(10>d)return d++,void setTimeout(arguments.callee,10);a.removeChild(b),c=null,f()}()}else f()}function f(){var a=O.length;if(a>0)for(var b=0;a>b;b++){var c=O[b].id,d=O[b].callbackFn,e={success:!1,id:c};if(U.pv[0]>0){var f=p(c);if(f)if(!s(O[b].swfVersion)||U.wk&&U.wk<312)if(O[b].expressInstall&&h()){var k={};k.data=O[b].expressInstall,k.width=f.getAttribute("width")||"0",k.height=f.getAttribute("height")||"0",f.getAttribute("class")&&(k.styleclass=f.getAttribute("class")),f.getAttribute("align")&&(k.align=f.getAttribute("align"));for(var l={},m=f.getElementsByTagName("param"),n=m.length,o=0;n>o;o++)"movie"!=m[o].getAttribute("name").toLowerCase()&&(l[m[o].getAttribute("name")]=m[o].getAttribute("value"));i(k,l,c,d)}else j(f),d&&d(e);else u(c,!0),d&&(e.success=!0,e.ref=g(c),d(e))}else if(u(c,!0),d){var q=g(c);q&&typeof q.SetVariable!=C&&(e.success=!0,e.ref=q),d(e)}}}function g(a){var b=null,c=p(a);if(c&&"OBJECT"==c.nodeName)if(typeof c.SetVariable!=C)b=c;else{var d=c.getElementsByTagName(D)[0];d&&(b=d)}return b}function h(){return!S&&s("6.0.65")&&(U.win||U.mac)&&!(U.wk&&U.wk<312)}function i(a,b,c,d){S=!0,y=d||null,z={success:!1,id:c};var e=p(c);if(e){"OBJECT"==e.nodeName?(w=k(e),x=null):(w=e,x=c),a.id=H,(typeof a.width==C||!/%$/.test(a.width)&&parseInt(a.width,10)<310)&&(a.width="310"),(typeof a.height==C||!/%$/.test(a.height)&&parseInt(a.height,10)<137)&&(a.height="137"),K.title=K.title.slice(0,47)+" - Flash Player Installation";var f=U.ie&&U.win?"ActiveX":"PlugIn",g="MMredirectURL="+encodeURI(window.location).toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+K.title;if(typeof b.flashvars!=C?b.flashvars+="&"+g:b.flashvars=g,U.ie&&U.win&&4!=e.readyState){var h=q("div");c+="SWFObjectNew",h.setAttribute("id",c),e.parentNode.insertBefore(h,e),e.style.display="none",function(){4==e.readyState?e.parentNode.removeChild(e):setTimeout(arguments.callee,10)}()}l(a,b,c)}}function j(a){if(U.ie&&U.win&&4!=a.readyState){var b=q("div");a.parentNode.insertBefore(b,a),b.parentNode.replaceChild(k(a),b),a.style.display="none",function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)}()}else a.parentNode.replaceChild(k(a),a)}function k(a){var b=q("div");if(U.win&&U.ie)b.innerHTML=a.innerHTML;else{var c=a.getElementsByTagName(D)[0];if(c){var d=c.childNodes;if(d)for(var e=d.length,f=0;e>f;f++)1==d[f].nodeType&&"PARAM"==d[f].nodeName||8==d[f].nodeType||b.appendChild(d[f].cloneNode(!0))}}return b}function l(a,b,c){var d,e=p(c);if(U.wk&&U.wk<312)return d;if(e)if(typeof a.id==C&&(a.id=c),U.ie&&U.win){var f="";for(var g in a)a[g]!=Object.prototype[g]&&("data"==g.toLowerCase()?b.movie=a[g]:"styleclass"==g.toLowerCase()?f+=' class="'+a[g]+'"':"classid"!=g.toLowerCase()&&(f+=" "+g+'="'+a[g]+'"'));var h="";for(var i in b)b[i]!=Object.prototype[i]&&(h+='');e.outerHTML='"+h+"",P[P.length]=a.id,d=p(a.id)}else{var j=q(D);j.setAttribute("type",G);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(var l in b)b[l]!=Object.prototype[l]&&"movie"!=l.toLowerCase()&&m(j,l,b[l]);e.parentNode.replaceChild(j,e),d=j}return d}function m(a,b,c){var d=q("param");d.setAttribute("name",b),d.setAttribute("value",c),a.appendChild(d)}function n(a){var b=p(a);b&&"OBJECT"==b.nodeName&&(U.ie&&U.win?(b.style.display="none",function(){4==b.readyState?o(a):setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function o(a){var b=p(a);if(b){for(var c in b)"function"==typeof b[c]&&(b[c]=null);b.parentNode.removeChild(b)}}function p(a){var b=null;try{b=K.getElementById(a)}catch(c){}return b}function q(a){return K.createElement(a)}function r(a,b,c){a.attachEvent(b,c),Q[Q.length]=[a,b,c]}function s(a){var b=U.pv,c=a.split(".");return c[0]=parseInt(c[0],10),c[1]=parseInt(c[1],10)||0,c[2]=parseInt(c[2],10)||0,b[0]>c[0]||b[0]==c[0]&&b[1]>c[1]||b[0]==c[0]&&b[1]==c[1]&&b[2]>=c[2]?!0:!1}function t(a,b,c,d){if(!U.ie||!U.mac){var e=K.getElementsByTagName("head")[0];if(e){var f=c&&"string"==typeof c?c:"screen";if(d&&(A=null,B=null),!A||B!=f){var g=q("style");g.setAttribute("type","text/css"),g.setAttribute("media",f),A=e.appendChild(g),U.ie&&U.win&&typeof K.styleSheets!=C&&K.styleSheets.length>0&&(A=K.styleSheets[K.styleSheets.length-1]),B=f}U.ie&&U.win?A&&typeof A.addRule==D&&A.addRule(a,b):A&&typeof K.createTextNode!=C&&A.appendChild(K.createTextNode(a+" {"+b+"}"))}}}function u(a,b){if(T){var c=b?"visible":"hidden";R&&p(a)?p(a).style.visibility=c:t("#"+a,"visibility:"+c)}}function v(a){var b=/[\\\"<>\.;]/,c=null!=b.exec(a);return c&&typeof encodeURIComponent!=C?encodeURIComponent(a):a}{var w,x,y,z,A,B,C="undefined",D="object",E="Shockwave Flash",F="ShockwaveFlash.ShockwaveFlash",G="application/x-shockwave-flash",H="SWFObjectExprInst",I="onreadystatechange",J=window,K=document,L=navigator,M=!1,N=[d],O=[],P=[],Q=[],R=!1,S=!1,T=!0,U=function(){var a=typeof K.getElementById!=C&&typeof K.getElementsByTagName!=C&&typeof K.createElement!=C,b=L.userAgent.toLowerCase(),c=L.platform.toLowerCase(),d=/win/.test(c?c:b),e=/mac/.test(c?c:b),f=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!1,h=[0,0,0],i=null;if(typeof L.plugins!=C&&typeof L.plugins[E]==D)i=L.plugins[E].description,!i||typeof L.mimeTypes!=C&&L.mimeTypes[G]&&!L.mimeTypes[G].enabledPlugin||(M=!0,g=!1,i=i.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),h[0]=parseInt(i.replace(/^(.*)\..*$/,"$1"),10),h[1]=parseInt(i.replace(/^.*\.(.*)\s.*$/,"$1"),10),h[2]=/[a-zA-Z]/.test(i)?parseInt(i.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0);else if(typeof J.ActiveXObject!=C)try{var j=new ActiveXObject(F);j&&(i=j.GetVariable("$version"),i&&(g=!0,i=i.split(" ")[1].split(","),h=[parseInt(i[0],10),parseInt(i[1],10),parseInt(i[2],10)]))}catch(k){}return{w3:a,pv:h,wk:f,ie:g,win:d,mac:e}}();!function(){U.w3&&((typeof K.readyState!=C&&"complete"==K.readyState||typeof K.readyState==C&&(K.getElementsByTagName("body")[0]||K.body))&&a(),R||(typeof K.addEventListener!=C&&K.addEventListener("DOMContentLoaded",a,!1),U.ie&&U.win&&(K.attachEvent(I,function(){"complete"==K.readyState&&(K.detachEvent(I,arguments.callee),a())}),J==top&&!function(){if(!R){try{K.documentElement.doScroll("left")}catch(b){return void setTimeout(arguments.callee,0)}a()}}()),U.wk&&!function(){return R?void 0:/loaded|complete/.test(K.readyState)?void a():void setTimeout(arguments.callee,0)}(),c(a)))}(),function(){U.ie&&U.win&&window.attachEvent("onunload",function(){for(var a=Q.length,b=0;a>b;b++)Q[b][0].detachEvent(Q[b][1],Q[b][2]);for(var c=P.length,d=0;c>d;d++)n(P[d]);for(var e in U)U[e]=null;U=null;for(var f in swfobject)swfobject[f]=null;swfobject=null})}()}return{registerObject:function(a,b,c,d){if(U.w3&&a&&b){var e={};e.id=a,e.swfVersion=b,e.expressInstall=c,e.callbackFn=d,O[O.length]=e,u(a,!1)}else d&&d({success:!1,id:a})},getObjectById:function(a){return U.w3?g(a):void 0},embedSWF:function(a,c,d,e,f,g,j,k,m,n){var o={success:!1,id:c};U.w3&&!(U.wk&&U.wk<312)&&a&&c&&d&&e&&f?(u(c,!1),b(function(){d+="",e+="";var b={};if(m&&typeof m===D)for(var p in m)b[p]=m[p];b.data=a,b.width=d,b.height=e;var q={};if(k&&typeof k===D)for(var r in k)q[r]=k[r];if(j&&typeof j===D)for(var t in j)typeof q.flashvars!=C?q.flashvars+="&"+t+"="+j[t]:q.flashvars=t+"="+j[t];if(s(f)){var v=l(b,q,c);b.id==c&&u(c,!0),o.success=!0,o.ref=v}else{if(g&&h())return b.data=g,void i(b,q,c,n);u(c,!0)}n&&n(o)})):n&&n(o)},switchOffAutoHideShow:function(){T=!1},ua:U,getFlashPlayerVersion:function(){return{major:U.pv[0],minor:U.pv[1],release:U.pv[2]}},hasFlashPlayerVersion:s,createSWF:function(a,b,c){return U.w3?l(a,b,c):void 0},showExpressInstall:function(a,b,c,d){U.w3&&h()&&i(a,b,c,d)},removeSWF:function(a){U.w3&&n(a)},createCSS:function(a,b,c,d){U.w3&&t(a,b,c,d)},addDomLoadEvent:b,addLoadEvent:c,getQueryParamValue:function(a){var b=K.location.search||K.location.hash;if(b){if(/\?/.test(b)&&(b=b.split("?")[1]),null==a)return v(b);for(var c=b.split("&"),d=0;de;e++)d.push(arguments[e]);try{0==d.length?c[b]():c[b].apply(c,d)}catch(g){}}},a.handlePreloadEvent=function(a,b){var c=this._flashPreloadInstances[a];if(null!=c){for(var d=[],e=2,f=arguments.length;f>e;e++)d.push(arguments[e]);try{0==d.length?c[b]():c[b].apply(c,d)}catch(g){}}},a.handleEvent=function(a){switch(a){case"ready":this._handleFlashReady()}},a.handleErrorEvent=function(){},createjs.FlashAudioPlugin=createjs.promote(FlashAudioPlugin,"AbstractPlugin")}(),this.createjs=this.createjs||{},function(){var a=createjs.FlashAudioPlugin=createjs.FlashAudioPlugin||{};a.version="NEXT",a.buildDate="Tue, 19 May 2015 17:26:59 GMT"}(); \ No newline at end of file +var swfobject=function(){function a(){if(!R){try{var a=K.getElementsByTagName("body")[0].appendChild(q("span"));a.parentNode.removeChild(a)}catch(b){return}R=!0;for(var c=N.length,d=0;c>d;d++)N[d]()}}function b(a){R?a():N[N.length]=a}function c(a){if(typeof J.addEventListener!=C)J.addEventListener("load",a,!1);else if(typeof K.addEventListener!=C)K.addEventListener("load",a,!1);else if(typeof J.attachEvent!=C)r(J,"onload",a);else if("function"==typeof J.onload){var b=J.onload;J.onload=function(){b(),a()}}else J.onload=a}function d(){M?e():f()}function e(){var a=K.getElementsByTagName("body")[0],b=q(D);b.setAttribute("type",G);var c=a.appendChild(b);if(c){var d=0;!function(){if(typeof c.GetVariable!=C){var e=c.GetVariable("$version");e&&(e=e.split(" ")[1].split(","),U.pv=[parseInt(e[0],10),parseInt(e[1],10),parseInt(e[2],10)])}else if(10>d)return d++,void setTimeout(arguments.callee,10);a.removeChild(b),c=null,f()}()}else f()}function f(){var a=O.length;if(a>0)for(var b=0;a>b;b++){var c=O[b].id,d=O[b].callbackFn,e={success:!1,id:c};if(U.pv[0]>0){var f=p(c);if(f)if(!s(O[b].swfVersion)||U.wk&&U.wk<312)if(O[b].expressInstall&&h()){var k={};k.data=O[b].expressInstall,k.width=f.getAttribute("width")||"0",k.height=f.getAttribute("height")||"0",f.getAttribute("class")&&(k.styleclass=f.getAttribute("class")),f.getAttribute("align")&&(k.align=f.getAttribute("align"));for(var l={},m=f.getElementsByTagName("param"),n=m.length,o=0;n>o;o++)"movie"!=m[o].getAttribute("name").toLowerCase()&&(l[m[o].getAttribute("name")]=m[o].getAttribute("value"));i(k,l,c,d)}else j(f),d&&d(e);else u(c,!0),d&&(e.success=!0,e.ref=g(c),d(e))}else if(u(c,!0),d){var q=g(c);q&&typeof q.SetVariable!=C&&(e.success=!0,e.ref=q),d(e)}}}function g(a){var b=null,c=p(a);if(c&&"OBJECT"==c.nodeName)if(typeof c.SetVariable!=C)b=c;else{var d=c.getElementsByTagName(D)[0];d&&(b=d)}return b}function h(){return!S&&s("6.0.65")&&(U.win||U.mac)&&!(U.wk&&U.wk<312)}function i(a,b,c,d){S=!0,y=d||null,z={success:!1,id:c};var e=p(c);if(e){"OBJECT"==e.nodeName?(w=k(e),x=null):(w=e,x=c),a.id=H,(typeof a.width==C||!/%$/.test(a.width)&&parseInt(a.width,10)<310)&&(a.width="310"),(typeof a.height==C||!/%$/.test(a.height)&&parseInt(a.height,10)<137)&&(a.height="137"),K.title=K.title.slice(0,47)+" - Flash Player Installation";var f=U.ie&&U.win?"ActiveX":"PlugIn",g="MMredirectURL="+encodeURI(window.location).toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+K.title;if(typeof b.flashvars!=C?b.flashvars+="&"+g:b.flashvars=g,U.ie&&U.win&&4!=e.readyState){var h=q("div");c+="SWFObjectNew",h.setAttribute("id",c),e.parentNode.insertBefore(h,e),e.style.display="none",function(){4==e.readyState?e.parentNode.removeChild(e):setTimeout(arguments.callee,10)}()}l(a,b,c)}}function j(a){if(U.ie&&U.win&&4!=a.readyState){var b=q("div");a.parentNode.insertBefore(b,a),b.parentNode.replaceChild(k(a),b),a.style.display="none",function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)}()}else a.parentNode.replaceChild(k(a),a)}function k(a){var b=q("div");if(U.win&&U.ie)b.innerHTML=a.innerHTML;else{var c=a.getElementsByTagName(D)[0];if(c){var d=c.childNodes;if(d)for(var e=d.length,f=0;e>f;f++)1==d[f].nodeType&&"PARAM"==d[f].nodeName||8==d[f].nodeType||b.appendChild(d[f].cloneNode(!0))}}return b}function l(a,b,c){var d,e=p(c);if(U.wk&&U.wk<312)return d;if(e)if(typeof a.id==C&&(a.id=c),U.ie&&U.win){var f="";for(var g in a)a[g]!=Object.prototype[g]&&("data"==g.toLowerCase()?b.movie=a[g]:"styleclass"==g.toLowerCase()?f+=' class="'+a[g]+'"':"classid"!=g.toLowerCase()&&(f+=" "+g+'="'+a[g]+'"'));var h="";for(var i in b)b[i]!=Object.prototype[i]&&(h+='');e.outerHTML='"+h+"",P[P.length]=a.id,d=p(a.id)}else{var j=q(D);j.setAttribute("type",G);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(var l in b)b[l]!=Object.prototype[l]&&"movie"!=l.toLowerCase()&&m(j,l,b[l]);e.parentNode.replaceChild(j,e),d=j}return d}function m(a,b,c){var d=q("param");d.setAttribute("name",b),d.setAttribute("value",c),a.appendChild(d)}function n(a){var b=p(a);b&&"OBJECT"==b.nodeName&&(U.ie&&U.win?(b.style.display="none",function(){4==b.readyState?o(a):setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function o(a){var b=p(a);if(b){for(var c in b)"function"==typeof b[c]&&(b[c]=null);b.parentNode.removeChild(b)}}function p(a){var b=null;try{b=K.getElementById(a)}catch(c){}return b}function q(a){return K.createElement(a)}function r(a,b,c){a.attachEvent(b,c),Q[Q.length]=[a,b,c]}function s(a){var b=U.pv,c=a.split(".");return c[0]=parseInt(c[0],10),c[1]=parseInt(c[1],10)||0,c[2]=parseInt(c[2],10)||0,b[0]>c[0]||b[0]==c[0]&&b[1]>c[1]||b[0]==c[0]&&b[1]==c[1]&&b[2]>=c[2]?!0:!1}function t(a,b,c,d){if(!U.ie||!U.mac){var e=K.getElementsByTagName("head")[0];if(e){var f=c&&"string"==typeof c?c:"screen";if(d&&(A=null,B=null),!A||B!=f){var g=q("style");g.setAttribute("type","text/css"),g.setAttribute("media",f),A=e.appendChild(g),U.ie&&U.win&&typeof K.styleSheets!=C&&K.styleSheets.length>0&&(A=K.styleSheets[K.styleSheets.length-1]),B=f}U.ie&&U.win?A&&typeof A.addRule==D&&A.addRule(a,b):A&&typeof K.createTextNode!=C&&A.appendChild(K.createTextNode(a+" {"+b+"}"))}}}function u(a,b){if(T){var c=b?"visible":"hidden";R&&p(a)?p(a).style.visibility=c:t("#"+a,"visibility:"+c)}}function v(a){var b=/[\\\"<>\.;]/,c=null!=b.exec(a);return c&&typeof encodeURIComponent!=C?encodeURIComponent(a):a}{var w,x,y,z,A,B,C="undefined",D="object",E="Shockwave Flash",F="ShockwaveFlash.ShockwaveFlash",G="application/x-shockwave-flash",H="SWFObjectExprInst",I="onreadystatechange",J=window,K=document,L=navigator,M=!1,N=[d],O=[],P=[],Q=[],R=!1,S=!1,T=!0,U=function(){var a=typeof K.getElementById!=C&&typeof K.getElementsByTagName!=C&&typeof K.createElement!=C,b=L.userAgent.toLowerCase(),c=L.platform.toLowerCase(),d=/win/.test(c?c:b),e=/mac/.test(c?c:b),f=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!1,h=[0,0,0],i=null;if(typeof L.plugins!=C&&typeof L.plugins[E]==D)i=L.plugins[E].description,!i||typeof L.mimeTypes!=C&&L.mimeTypes[G]&&!L.mimeTypes[G].enabledPlugin||(M=!0,g=!1,i=i.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),h[0]=parseInt(i.replace(/^(.*)\..*$/,"$1"),10),h[1]=parseInt(i.replace(/^.*\.(.*)\s.*$/,"$1"),10),h[2]=/[a-zA-Z]/.test(i)?parseInt(i.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0);else if(typeof J.ActiveXObject!=C)try{var j=new ActiveXObject(F);j&&(i=j.GetVariable("$version"),i&&(g=!0,i=i.split(" ")[1].split(","),h=[parseInt(i[0],10),parseInt(i[1],10),parseInt(i[2],10)]))}catch(k){}return{w3:a,pv:h,wk:f,ie:g,win:d,mac:e}}();!function(){U.w3&&((typeof K.readyState!=C&&"complete"==K.readyState||typeof K.readyState==C&&(K.getElementsByTagName("body")[0]||K.body))&&a(),R||(typeof K.addEventListener!=C&&K.addEventListener("DOMContentLoaded",a,!1),U.ie&&U.win&&(K.attachEvent(I,function(){"complete"==K.readyState&&(K.detachEvent(I,arguments.callee),a())}),J==top&&!function(){if(!R){try{K.documentElement.doScroll("left")}catch(b){return void setTimeout(arguments.callee,0)}a()}}()),U.wk&&!function(){return R?void 0:/loaded|complete/.test(K.readyState)?void a():void setTimeout(arguments.callee,0)}(),c(a)))}(),function(){U.ie&&U.win&&window.attachEvent("onunload",function(){for(var a=Q.length,b=0;a>b;b++)Q[b][0].detachEvent(Q[b][1],Q[b][2]);for(var c=P.length,d=0;c>d;d++)n(P[d]);for(var e in U)U[e]=null;U=null;for(var f in swfobject)swfobject[f]=null;swfobject=null})}()}return{registerObject:function(a,b,c,d){if(U.w3&&a&&b){var e={};e.id=a,e.swfVersion=b,e.expressInstall=c,e.callbackFn=d,O[O.length]=e,u(a,!1)}else d&&d({success:!1,id:a})},getObjectById:function(a){return U.w3?g(a):void 0},embedSWF:function(a,c,d,e,f,g,j,k,m,n){var o={success:!1,id:c};U.w3&&!(U.wk&&U.wk<312)&&a&&c&&d&&e&&f?(u(c,!1),b(function(){d+="",e+="";var b={};if(m&&typeof m===D)for(var p in m)b[p]=m[p];b.data=a,b.width=d,b.height=e;var q={};if(k&&typeof k===D)for(var r in k)q[r]=k[r];if(j&&typeof j===D)for(var t in j)typeof q.flashvars!=C?q.flashvars+="&"+t+"="+j[t]:q.flashvars=t+"="+j[t];if(s(f)){var v=l(b,q,c);b.id==c&&u(c,!0),o.success=!0,o.ref=v}else{if(g&&h())return b.data=g,void i(b,q,c,n);u(c,!0)}n&&n(o)})):n&&n(o)},switchOffAutoHideShow:function(){T=!1},ua:U,getFlashPlayerVersion:function(){return{major:U.pv[0],minor:U.pv[1],release:U.pv[2]}},hasFlashPlayerVersion:s,createSWF:function(a,b,c){return U.w3?l(a,b,c):void 0},showExpressInstall:function(a,b,c,d){U.w3&&h()&&i(a,b,c,d)},removeSWF:function(a){U.w3&&n(a)},createCSS:function(a,b,c,d){U.w3&&t(a,b,c,d)},addDomLoadEvent:b,addLoadEvent:c,getQueryParamValue:function(a){var b=K.location.search||K.location.hash;if(b){if(/\?/.test(b)&&(b=b.split("?")[1]),null==a)return v(b);for(var c=b.split("&"),d=0;de;e++)d.push(arguments[e]);try{0==d.length?c[b]():c[b].apply(c,d)}catch(g){}}},a.handlePreloadEvent=function(a,b){var c=this._flashPreloadInstances[a];if(null!=c){for(var d=[],e=2,f=arguments.length;f>e;e++)d.push(arguments[e]);try{0==d.length?c[b]():c[b].apply(c,d)}catch(g){}}},a.handleEvent=function(a){switch(a){case"ready":this._handleFlashReady()}},a.handleErrorEvent=function(){},createjs.FlashAudioPlugin=createjs.promote(FlashAudioPlugin,"AbstractPlugin")}(),this.createjs=this.createjs||{},function(){var a=createjs.FlashAudioPlugin=createjs.FlashAudioPlugin||{};a.version="NEXT",a.buildDate="Wed, 27 May 2015 18:12:38 GMT"}(); \ No newline at end of file diff --git a/lib/soundjs-NEXT.combined.js b/lib/soundjs-NEXT.combined.js index df5d171b..40d36302 100644 --- a/lib/soundjs-NEXT.combined.js +++ b/lib/soundjs-NEXT.combined.js @@ -1,268 +1,295 @@ +/*! +* SoundJS +* Visit http://createjs.com/ for documentation, updates and examples. +* +* Copyright (c) 2010 gskinner.com, inc. +* +* Permission is hereby granted, free of charge, to any person +* obtaining a copy of this software and associated documentation +* files (the "Software"), to deal in the Software without +* restriction, including without limitation the rights to use, +* copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following +* conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +*/ //############################################################################## // version.js //############################################################################## -this.createjs = this.createjs || {}; - -(function () { - - /** - * Static class holding library specific information such as the version and buildDate of the library. - * The SoundJS class has been renamed {{#crossLink "Sound"}}{{/crossLink}}. Please see {{#crossLink "Sound"}}{{/crossLink}} - * for information on using sound. - * @class SoundJS - **/ - var s = createjs.SoundJS = createjs.SoundJS || {}; - - /** - * The version string for this release. - * @property version - * @type String - * @static - **/ - s.version = /*=version*/"NEXT"; // injected by build process - - /** - * The build date for this release in UTC format. - * @property buildDate - * @type String - * @static - **/ - s.buildDate = /*=date*/"Tue, 19 May 2015 17:26:59 GMT"; // injected by build process - +this.createjs = this.createjs || {}; + +(function () { + + /** + * Static class holding library specific information such as the version and buildDate of the library. + * The SoundJS class has been renamed {{#crossLink "Sound"}}{{/crossLink}}. Please see {{#crossLink "Sound"}}{{/crossLink}} + * for information on using sound. + * @class SoundJS + **/ + var s = createjs.SoundJS = createjs.SoundJS || {}; + + /** + * The version string for this release. + * @property version + * @type String + * @static + **/ + s.version = /*=version*/"NEXT"; // injected by build process + + /** + * The build date for this release in UTC format. + * @property buildDate + * @type String + * @static + **/ + s.buildDate = /*=date*/"Wed, 27 May 2015 18:12:38 GMT"; // injected by build process + })(); //############################################################################## // extend.js //############################################################################## -this.createjs = this.createjs||{}; - -/** - * @class Utility Methods - */ - -/** - * Sets up the prototype chain and constructor property for a new class. - * - * This should be called right after creating the class constructor. - * - * function MySubClass() {} - * createjs.extend(MySubClass, MySuperClass); - * ClassB.prototype.doSomething = function() { } - * - * var foo = new MySubClass(); - * console.log(foo instanceof MySuperClass); // true - * console.log(foo.prototype.constructor === MySubClass); // true - * - * @method extend - * @param {Function} subclass The subclass. - * @param {Function} superclass The superclass to extend. - * @return {Function} Returns the subclass's new prototype. - */ -createjs.extend = function(subclass, superclass) { - "use strict"; - - function o() { this.constructor = subclass; } - o.prototype = superclass.prototype; - return (subclass.prototype = new o()); +this.createjs = this.createjs||{}; + +/** + * @class Utility Methods + */ + +/** + * Sets up the prototype chain and constructor property for a new class. + * + * This should be called right after creating the class constructor. + * + * function MySubClass() {} + * createjs.extend(MySubClass, MySuperClass); + * ClassB.prototype.doSomething = function() { } + * + * var foo = new MySubClass(); + * console.log(foo instanceof MySuperClass); // true + * console.log(foo.prototype.constructor === MySubClass); // true + * + * @method extend + * @param {Function} subclass The subclass. + * @param {Function} superclass The superclass to extend. + * @return {Function} Returns the subclass's new prototype. + */ +createjs.extend = function(subclass, superclass) { + "use strict"; + + function o() { this.constructor = subclass; } + o.prototype = superclass.prototype; + return (subclass.prototype = new o()); }; //############################################################################## // promote.js //############################################################################## -this.createjs = this.createjs||{}; - -/** - * @class Utility Methods - */ - -/** - * Promotes any methods on the super class that were overridden, by creating an alias in the format `prefix_methodName`. - * It is recommended to use the super class's name as the prefix. - * An alias to the super class's constructor is always added in the format `prefix_constructor`. - * This allows the subclass to call super class methods without using `function.call`, providing better performance. - * - * For example, if `MySubClass` extends `MySuperClass`, and both define a `draw` method, then calling `promote(MySubClass, "MySuperClass")` - * would add a `MySuperClass_constructor` method to MySubClass and promote the `draw` method on `MySuperClass` to the - * prototype of `MySubClass` as `MySuperClass_draw`. - * - * This should be called after the class's prototype is fully defined. - * - * function ClassA(name) { - * this.name = name; - * } - * ClassA.prototype.greet = function() { - * return "Hello "+this.name; - * } - * - * function ClassB(name, punctuation) { - * this.ClassA_constructor(name); - * this.punctuation = punctuation; - * } - * createjs.extend(ClassB, ClassA); - * ClassB.prototype.greet = function() { - * return this.ClassA_greet()+this.punctuation; - * } - * createjs.promote(ClassB, "ClassA"); - * - * var foo = new ClassB("World", "!?!"); - * console.log(foo.greet()); // Hello World!?! - * - * @method promote - * @param {Function} subclass The class to promote super class methods on. - * @param {String} prefix The prefix to add to the promoted method names. Usually the name of the superclass. - * @return {Function} Returns the subclass. - */ -createjs.promote = function(subclass, prefix) { - "use strict"; - - var subP = subclass.prototype, supP = (Object.getPrototypeOf&&Object.getPrototypeOf(subP))||subP.__proto__; - if (supP) { - subP[(prefix+="_") + "constructor"] = supP.constructor; // constructor is not always innumerable - for (var n in supP) { - if (subP.hasOwnProperty(n) && (typeof supP[n] == "function")) { subP[prefix + n] = supP[n]; } - } - } - return subclass; +this.createjs = this.createjs||{}; + +/** + * @class Utility Methods + */ + +/** + * Promotes any methods on the super class that were overridden, by creating an alias in the format `prefix_methodName`. + * It is recommended to use the super class's name as the prefix. + * An alias to the super class's constructor is always added in the format `prefix_constructor`. + * This allows the subclass to call super class methods without using `function.call`, providing better performance. + * + * For example, if `MySubClass` extends `MySuperClass`, and both define a `draw` method, then calling `promote(MySubClass, "MySuperClass")` + * would add a `MySuperClass_constructor` method to MySubClass and promote the `draw` method on `MySuperClass` to the + * prototype of `MySubClass` as `MySuperClass_draw`. + * + * This should be called after the class's prototype is fully defined. + * + * function ClassA(name) { + * this.name = name; + * } + * ClassA.prototype.greet = function() { + * return "Hello "+this.name; + * } + * + * function ClassB(name, punctuation) { + * this.ClassA_constructor(name); + * this.punctuation = punctuation; + * } + * createjs.extend(ClassB, ClassA); + * ClassB.prototype.greet = function() { + * return this.ClassA_greet()+this.punctuation; + * } + * createjs.promote(ClassB, "ClassA"); + * + * var foo = new ClassB("World", "!?!"); + * console.log(foo.greet()); // Hello World!?! + * + * @method promote + * @param {Function} subclass The class to promote super class methods on. + * @param {String} prefix The prefix to add to the promoted method names. Usually the name of the superclass. + * @return {Function} Returns the subclass. + */ +createjs.promote = function(subclass, prefix) { + "use strict"; + + var subP = subclass.prototype, supP = (Object.getPrototypeOf&&Object.getPrototypeOf(subP))||subP.__proto__; + if (supP) { + subP[(prefix+="_") + "constructor"] = supP.constructor; // constructor is not always innumerable + for (var n in supP) { + if (subP.hasOwnProperty(n) && (typeof supP[n] == "function")) { subP[prefix + n] = supP[n]; } + } + } + return subclass; }; //############################################################################## // IndexOf.js //############################################################################## -this.createjs = this.createjs||{}; - -/** - * @class Utility Methods - */ - -/** - * Finds the first occurrence of a specified value searchElement in the passed in array, and returns the index of - * that value. Returns -1 if value is not found. - * - * var i = createjs.indexOf(myArray, myElementToFind); - * - * @method indexOf - * @param {Array} array Array to search for searchElement - * @param searchElement Element to find in array. - * @return {Number} The first index of searchElement in array. - */ -createjs.indexOf = function (array, searchElement){ - "use strict"; - - for (var i = 0,l=array.length; i < l; i++) { - if (searchElement === array[i]) { - return i; - } - } - return -1; +this.createjs = this.createjs||{}; + +/** + * @class Utility Methods + */ + +/** + * Finds the first occurrence of a specified value searchElement in the passed in array, and returns the index of + * that value. Returns -1 if value is not found. + * + * var i = createjs.indexOf(myArray, myElementToFind); + * + * @method indexOf + * @param {Array} array Array to search for searchElement + * @param searchElement Element to find in array. + * @return {Number} The first index of searchElement in array. + */ +createjs.indexOf = function (array, searchElement){ + "use strict"; + + for (var i = 0,l=array.length; i < l; i++) { + if (searchElement === array[i]) { + return i; + } + } + return -1; }; //############################################################################## // Proxy.js //############################################################################## -this.createjs = this.createjs||{}; - -/** - * Various utilities that the CreateJS Suite uses. Utilities are created as separate files, and will be available on the - * createjs namespace directly. - * - *