From 265b960813e797e8550f1e486d5c573289177213 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Fri, 17 Nov 2017 14:05:48 -0800 Subject: [PATCH] Fix howler.js issue on Firefox --- dependencies/howler.min.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/dependencies/howler.min.js b/dependencies/howler.min.js index 5c76fbe5c..933ab9b5e 100644 --- a/dependencies/howler.min.js +++ b/dependencies/howler.min.js @@ -1,4 +1 @@ -/*! howler.js v2.0.5 | (c) 2013-2017, James Simpson of GoldFire Studios | MIT License | howlerjs.com */ -!function(){"use strict";var e=function(){this.init()};e.prototype={init:function(){var e=this||n;return e._counter=1e3,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent="canplaythrough",e._navigator="undefined"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.mobileAutoEnable=!0,e._setup(),e},volume:function(e){var o=this||n;if(e=parseFloat(e),o.ctx||_(),void 0!==e&&e>=0&&e<=1){if(o._volume=e,o._muted)return o;o.usingWebAudio&&(o.masterGain.gain.value=e);for(var t=0;t=0;o--)e._howls[o].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,_()),e},codecs:function(e){return(this||n)._codecs[e.replace(/^x-/,"")]},_setup:function(){var e=this||n;if(e.state=e.ctx?e.ctx.state||"running":"running",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{var o=new Audio;void 0===o.oncanplaythrough&&(e._canPlayEvent="canplay")}catch(n){e.noAudio=!0}else e.noAudio=!0;try{var o=new Audio;o.muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs:function(){var e=this||n,o=null;try{o="undefined"!=typeof Audio?new Audio:null}catch(n){return e}if(!o||"function"!=typeof o.canPlayType)return e;var t=o.canPlayType("audio/mpeg;").replace(/^no$/,""),r=e._navigator&&e._navigator.userAgent.match(/OPR\/([0-6].)/g),a=r&&parseInt(r[0].split("/")[1],10)<33;return e._codecs={mp3:!(a||!t&&!o.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!t,opus:!!o.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!o.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!o.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!o.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),aac:!!o.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!o.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(o.canPlayType("audio/x-m4a;")||o.canPlayType("audio/m4a;")||o.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(o.canPlayType("audio/x-mp4;")||o.canPlayType("audio/mp4;")||o.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!!o.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,""),webm:!!o.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,""),dolby:!!o.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(o.canPlayType("audio/x-flac;")||o.canPlayType("audio/flac;")).replace(/^no$/,"")},e},_enableMobileAudio:function(){var e=this||n,o=/iPhone|iPad|iPod|Android|BlackBerry|BB10|Silk|Mobi/i.test(e._navigator&&e._navigator.userAgent),t=!!("ontouchend"in window||e._navigator&&e._navigator.maxTouchPoints>0||e._navigator&&e._navigator.msMaxTouchPoints>0);if(!e._mobileEnabled&&e.ctx&&(o||t)){e._mobileEnabled=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var r=function(){n._autoResume();var o=e.ctx.createBufferSource();o.buffer=e._scratchBuffer,o.connect(e.ctx.destination),void 0===o.start?o.noteOn(0):o.start(0),"function"==typeof e.ctx.resume&&e.ctx.resume(),o.onended=function(){o.disconnect(0),e._mobileEnabled=!0,e.mobileAutoEnable=!1,document.removeEventListener("touchstart",r,!0),document.removeEventListener("touchend",r,!0)}};return document.addEventListener("touchstart",r,!0),document.addEventListener("touchend",r,!0),e}},_autoSuspend:function(){var e=this;if(e.autoSuspend&&e.ctx&&void 0!==e.ctx.suspend&&n.usingWebAudio){for(var o=0;o0?i._seek:t._sprite[e][0]/1e3),s=Math.max(0,(t._sprite[e][0]+t._sprite[e][1])/1e3-_),l=1e3*s/Math.abs(i._rate);i._paused=!1,i._ended=!1,i._sprite=e,i._seek=_,i._start=t._sprite[e][0]/1e3,i._stop=(t._sprite[e][0]+t._sprite[e][1])/1e3,i._loop=!(!i._loop&&!t._sprite[e][2]);var c=i._node;if(t._webAudio){var f=function(){t._refreshBuffer(i);var e=i._muted||t._muted?0:i._volume;c.gain.setValueAtTime(e,n.ctx.currentTime),i._playStart=n.ctx.currentTime,void 0===c.bufferSource.start?i._loop?c.bufferSource.noteGrainOn(0,_,86400):c.bufferSource.noteGrainOn(0,_,s):i._loop?c.bufferSource.start(0,_,86400):c.bufferSource.start(0,_,s),l!==1/0&&(t._endTimers[i._id]=setTimeout(t._ended.bind(t,i),l)),o||setTimeout(function(){t._emit("play",i._id)},0)};"running"===n.state?f():(t.once("resume",f),t._clearTimer(i._id))}else{var p=function(){c.currentTime=_,c.muted=i._muted||t._muted||n._muted||c.muted,c.volume=i._volume*n.volume(),c.playbackRate=i._rate;try{if(c.play(),c.paused)return void t._emit("playerror",i._id,"Playback was unable to start. This is most commonly an issue on mobile devices where playback was not within a user interaction.");l!==1/0&&(t._endTimers[i._id]=setTimeout(t._ended.bind(t,i),l)),o||t._emit("play",i._id)}catch(e){t._emit("playerror",i._id,e)}},v=window&&window.ejecta||!c.readyState&&n._navigator.isCocoonJS;if(4===c.readyState||v)p();else{var m=function(){p(),c.removeEventListener(n._canPlayEvent,m,!1)};c.addEventListener(n._canPlayEvent,m,!1),t._clearTimer(i._id)}}return i._id},pause:function(e){var n=this;if("loaded"!==n._state)return n._queue.push({event:"pause",action:function(){n.pause(e)}}),n;for(var o=n._getSoundIds(e),t=0;t=0?o=parseInt(r[0],10):e=parseFloat(r[0])}else r.length>=2&&(e=parseFloat(r[0]),o=parseInt(r[1],10));var a;if(!(void 0!==e&&e>=0&&e<=1))return a=o?t._soundById(o):t._sounds[0],a?a._volume:0;if("loaded"!==t._state)return t._queue.push({event:"volume",action:function(){t.volume.apply(t,r)}}),t;void 0===o&&(t._volume=e),o=t._getSoundIds(o);for(var u=0;uo?"out":"in",d=Math.abs(n-o),_=d/.01,s=_>0?t/_:t;s<4&&(_=Math.ceil(_/(4/s)),s=4),e._interval=setInterval(function(){_>0&&(u+="in"===i?.01:-.01),u=Math.max(0,u),u=Math.min(1,u),u=Math.round(100*u)/100,a._webAudio?(void 0===r&&(a._volume=u),e._volume=u):a.volume(u,e._id,!0),(on&&u>=o)&&(clearInterval(e._interval),e._interval=null,a.volume(o,e._id),a._emit("fade",e._id))},s)},_stopFade:function(e){var o=this,t=o._soundById(e);return t&&t._interval&&(o._webAudio&&t._node.gain.cancelScheduledValues(n.ctx.currentTime),clearInterval(t._interval),t._interval=null,o._emit("fade",e)),o},loop:function(){var e,n,o,t=this,r=arguments;if(0===r.length)return t._loop;if(1===r.length){if("boolean"!=typeof r[0])return!!(o=t._soundById(parseInt(r[0],10)))&&o._loop;e=r[0],t._loop=e}else 2===r.length&&(e=r[0],n=parseInt(r[1],10));for(var a=t._getSoundIds(n),u=0;u=0?o=parseInt(r[0],10):e=parseFloat(r[0])}else 2===r.length&&(e=parseFloat(r[0]),o=parseInt(r[1],10));var i;if("number"!=typeof e)return i=t._soundById(o),i?i._rate:t._rate;if("loaded"!==t._state)return t._queue.push({event:"rate",action:function(){t.rate.apply(t,r)}}),t;void 0===o&&(t._rate=e),o=t._getSoundIds(o);for(var d=0;d=0?o=parseInt(r[0],10):t._sounds.length&&(o=t._sounds[0]._id,e=parseFloat(r[0]))}else 2===r.length&&(e=parseFloat(r[0]),o=parseInt(r[1],10));if(void 0===o)return t;if("loaded"!==t._state)return t._queue.push({event:"seek",action:function(){t.seek.apply(t,r)}}),t;var i=t._soundById(o);if(i){if(!("number"==typeof e&&e>=0)){if(t._webAudio){var d=t.playing(o)?n.ctx.currentTime-i._playStart:0,_=i._rateSeek?i._rateSeek-i._seek:0;return i._seek+(_+d*Math.abs(i._rate))}return i._node.currentTime}var s=t.playing(o);s&&t.pause(o,!0),i._seek=e,i._ended=!1,t._clearTimer(o),s&&t.play(o,!0),!t._webAudio&&i._node&&(i._node.currentTime=e),t._emit("seek",o)}return t},playing:function(e){var n=this;if("number"==typeof e){var o=n._soundById(e);return!!o&&!o._paused}for(var t=0;t=0&&n._howls.splice(a,1)}var u=!0;for(t=0;t=0;a--)r[a].id&&r[a].id!==n&&"load"!==e||(setTimeout(function(e){e.call(this,n,o)}.bind(t,r[a].fn),0),r[a].once&&t.off(e,r[a].fn,r[a].id));return t},_loadQueue:function(){var e=this;if(e._queue.length>0){var n=e._queue[0];e.once(n.event,function(){e._queue.shift(),e._loadQueue()}),n.action()}return e},_ended:function(e){var o=this,t=e._sprite;if(!o._webAudio&&e._node&&!e._node.paused)return setTimeout(o._ended.bind(o,e),100),o;var r=!(!e._loop&&!o._sprite[t][2]);if(o._emit("end",e._id),!o._webAudio&&r&&o.stop(e._id,!0).play(e._id),o._webAudio&&r){o._emit("play",e._id),e._seek=e._start||0,e._rateSeek=0,e._playStart=n.ctx.currentTime;var a=1e3*(e._stop-e._start)/Math.abs(e._rate);o._endTimers[e._id]=setTimeout(o._ended.bind(o,e),a)}return o._webAudio&&!r&&(e._paused=!0,e._ended=!0,e._seek=e._start||0,e._rateSeek=0,o._clearTimer(e._id),o._cleanBuffer(e._node),n._autoSuspend()),o._webAudio||r||o.stop(e._id),o},_clearTimer:function(e){var n=this;return n._endTimers[e]&&(clearTimeout(n._endTimers[e]),delete n._endTimers[e]),n},_soundById:function(e){for(var n=this,o=0;o=0;t--){if(o<=n)return;e._sounds[t]._ended&&(e._webAudio&&e._sounds[t]._node&&e._sounds[t]._node.disconnect(0),e._sounds.splice(t,1),o--)}}},_getSoundIds:function(e){var n=this;if(void 0===e){for(var o=[],t=0;t0&&(r[o._src]=e,d(o,e))},function(){o._emit("loaderror",null,"Decoding audio data failed.")})},d=function(e,n){n&&!e._duration&&(e._duration=n.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),"loaded"!==e._state&&(e._state="loaded",e._emit("load"),e._loadQueue())},_=function(){try{"undefined"!=typeof AudioContext?n.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?n.ctx=new webkitAudioContext:n.usingWebAudio=!1}catch(e){n.usingWebAudio=!1}var e=/iP(hone|od|ad)/.test(n._navigator&&n._navigator.platform),o=n._navigator&&n._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),t=o?parseInt(o[1],10):null;if(e&&t&&t<9){var r=/safari/.test(n._navigator&&n._navigator.userAgent.toLowerCase());(n._navigator&&n._navigator.standalone&&!r||n._navigator&&!n._navigator.standalone&&!r)&&(n.usingWebAudio=!1)}n.usingWebAudio&&(n.masterGain=void 0===n.ctx.createGain?n.ctx.createGainNode():n.ctx.createGain(),n.masterGain.gain.value=n._muted?0:1,n.masterGain.connect(n.ctx.destination)),n._setup()};"function"==typeof define&&define.amd&&define([],function(){return{Howler:n,Howl:o}}),"undefined"!=typeof exports&&(exports.Howler=n,exports.Howl=o),"undefined"!=typeof window?(window.HowlerGlobal=e,window.Howler=n,window.Howl=o,window.Sound=t):"undefined"!=typeof global&&(global.HowlerGlobal=e,global.Howler=n,global.Howl=o,global.Sound=t)}(); -/*! Spatial Plugin */ -!function(){"use strict";HowlerGlobal.prototype._pos=[0,0,0],HowlerGlobal.prototype._orientation=[0,0,-1,0,1,0],HowlerGlobal.prototype.stereo=function(n){var e=this;if(!e.ctx||!e.ctx.listener)return e;for(var t=e._howls.length-1;t>=0;t--)e._howls[t].stereo(n);return e},HowlerGlobal.prototype.pos=function(n,e,t){var o=this;return o.ctx&&o.ctx.listener?(e="number"!=typeof e?o._pos[1]:e,t="number"!=typeof t?o._pos[2]:t,"number"!=typeof n?o._pos:(o._pos=[n,e,t],o.ctx.listener.setPosition(o._pos[0],o._pos[1],o._pos[2]),o)):o},HowlerGlobal.prototype.orientation=function(n,e,t,o,r,a){var i=this;if(!i.ctx||!i.ctx.listener)return i;var p=i._orientation;return e="number"!=typeof e?p[1]:e,t="number"!=typeof t?p[2]:t,o="number"!=typeof o?p[3]:o,r="number"!=typeof r?p[4]:r,a="number"!=typeof a?p[5]:a,"number"!=typeof n?p:(i._orientation=[n,e,t,o,r,a],i.ctx.listener.setOrientation(n,e,t,o,r,a),i)},Howl.prototype.init=function(n){return function(e){var t=this;return t._orientation=e.orientation||[1,0,0],t._stereo=e.stereo||null,t._pos=e.pos||null,t._pannerAttr={coneInnerAngle:void 0!==e.coneInnerAngle?e.coneInnerAngle:360,coneOuterAngle:void 0!==e.coneOuterAngle?e.coneOuterAngle:360,coneOuterGain:void 0!==e.coneOuterGain?e.coneOuterGain:0,distanceModel:void 0!==e.distanceModel?e.distanceModel:"inverse",maxDistance:void 0!==e.maxDistance?e.maxDistance:1e4,panningModel:void 0!==e.panningModel?e.panningModel:"HRTF",refDistance:void 0!==e.refDistance?e.refDistance:1,rolloffFactor:void 0!==e.rolloffFactor?e.rolloffFactor:1},t._onstereo=e.onstereo?[{fn:e.onstereo}]:[],t._onpos=e.onpos?[{fn:e.onpos}]:[],t._onorientation=e.onorientation?[{fn:e.onorientation}]:[],n.call(this,e)}}(Howl.prototype.init),Howl.prototype.stereo=function(e,t){var o=this;if(!o._webAudio)return o;if("loaded"!==o._state)return o._queue.push({event:"stereo",action:function(){o.stereo(e,t)}}),o;var r=void 0===Howler.ctx.createStereoPanner?"spatial":"stereo";if(void 0===t){if("number"!=typeof e)return o._stereo;o._stereo=e,o._pos=[e,0,0]}for(var a=o._getSoundIds(t),i=0;i=0&&vol<=1){self._volume=vol;if(self._muted){return self}if(self.usingWebAudio){self.masterGain.gain.value=vol}for(var i=0;i=0;i--){self._howls[i].unload()}if(self.usingWebAudio&&self.ctx&&typeof self.ctx.close!=="undefined"){self.ctx.close();self.ctx=null;setupAudioContext()}return self},codecs:function(ext){return(this||Howler)._codecs[ext.replace(/^x-/,"")]},_setup:function(){var self=this||Howler;if(self._initSuspended&&self.ctx&&self.ctx!="suspended"){self._initSuspended=false}self.state=self.ctx&&!self._initSuspended?self.ctx.state||"running":"running";self._autoSuspend();if(!self.usingWebAudio){if(typeof Audio!=="undefined"){try{var test=new Audio;if(typeof test.oncanplaythrough==="undefined"){self._canPlayEvent="canplay"}}catch(e){self.noAudio=true}}else{self.noAudio=true}}try{var test=new Audio;if(test.muted){self.noAudio=true}}catch(e){}if(!self.noAudio){self._setupCodecs()}return self},_setupCodecs:function(){var self=this||Howler;var audioTest=null;try{audioTest=typeof Audio!=="undefined"?new Audio:null}catch(err){return self}if(!audioTest||typeof audioTest.canPlayType!=="function"){return self}var mpegTest=audioTest.canPlayType("audio/mpeg;").replace(/^no$/,"");var checkOpera=self._navigator&&self._navigator.userAgent.match(/OPR\/([0-6].)/g);var isOldOpera=checkOpera&&parseInt(checkOpera[0].split("/")[1],10)<33;self._codecs={mp3:!!(!isOldOpera&&(mpegTest||audioTest.canPlayType("audio/mp3;").replace(/^no$/,""))),mpeg:!!mpegTest,opus:!!audioTest.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!audioTest.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!audioTest.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!audioTest.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),aac:!!audioTest.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!audioTest.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(audioTest.canPlayType("audio/x-m4a;")||audioTest.canPlayType("audio/m4a;")||audioTest.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(audioTest.canPlayType("audio/x-mp4;")||audioTest.canPlayType("audio/mp4;")||audioTest.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!!audioTest.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,""),webm:!!audioTest.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,""),dolby:!!audioTest.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(audioTest.canPlayType("audio/x-flac;")||audioTest.canPlayType("audio/flac;")).replace(/^no$/,"")};return self},_enableMobileAudio:function(){var self=this||Howler;var isMobile=/iPhone|iPad|iPod|Android|BlackBerry|BB10|Silk|Mobi/i.test(self._navigator&&self._navigator.userAgent);var isTouch=!!("ontouchend"in window||self._navigator&&self._navigator.maxTouchPoints>0||self._navigator&&self._navigator.msMaxTouchPoints>0);if(self._mobileEnabled||!self.ctx||!isMobile&&!isTouch){return}self._mobileEnabled=false;if(!self._mobileUnloaded&&self.ctx.sampleRate!==44100){self._mobileUnloaded=true;self.unload()}self._scratchBuffer=self.ctx.createBuffer(1,1,22050);var unlock=function(){Howler._autoResume();var source=self.ctx.createBufferSource();source.buffer=self._scratchBuffer;source.connect(self.ctx.destination);if(typeof source.start==="undefined"){source.noteOn(0)}else{source.start(0)}if(typeof self.ctx.resume==="function"){self.ctx.resume()}source.onended=function(){source.disconnect(0);self._mobileEnabled=true;self.mobileAutoEnable=false;document.removeEventListener("touchstart",unlock,true);document.removeEventListener("touchend",unlock,true)}};document.addEventListener("touchstart",unlock,true);document.addEventListener("touchend",unlock,true);return self},_autoSuspend:function(){var self=this;if(!self.autoSuspend||!self.ctx||typeof self.ctx.suspend==="undefined"||!Howler.usingWebAudio){return}for(var i=0;i0?sound._seek:self._sprite[sprite][0]/1e3);var duration=Math.max(0,(self._sprite[sprite][0]+self._sprite[sprite][1])/1e3-seek);var timeout=duration*1e3/Math.abs(sound._rate);sound._paused=false;sound._ended=false;sound._sprite=sprite;sound._seek=seek;sound._start=self._sprite[sprite][0]/1e3;sound._stop=(self._sprite[sprite][0]+self._sprite[sprite][1])/1e3;sound._loop=!!(sound._loop||self._sprite[sprite][2]);var node=sound._node;if(self._webAudio){var playWebAudio=function(){self._refreshBuffer(sound);var vol=sound._muted||self._muted?0:sound._volume;node.gain.setValueAtTime(vol,Howler.ctx.currentTime);sound._playStart=Howler.ctx.currentTime;if(typeof node.bufferSource.start==="undefined"){sound._loop?node.bufferSource.noteGrainOn(0,seek,86400):node.bufferSource.noteGrainOn(0,seek,duration)}else{sound._loop?node.bufferSource.start(0,seek,86400):node.bufferSource.start(0,seek,duration)}if(timeout!==Infinity){self._endTimers[sound._id]=setTimeout(self._ended.bind(self,sound),timeout)}if(!internal){setTimeout(function(){self._emit("play",sound._id)},0)}};if(Howler.state==="running"){playWebAudio()}else{self.once("resume",playWebAudio);self._clearTimer(sound._id)}}else{var playHtml5=function(){node.currentTime=seek;node.muted=sound._muted||self._muted||Howler._muted||node.muted;node.volume=sound._volume*Howler.volume();node.playbackRate=sound._rate;try{node.play();if(node.paused){self._emit("playerror",sound._id,"Playback was unable to start. This is most commonly an issue "+"on mobile devices where playback was not within a user interaction.");return}if(timeout!==Infinity){self._endTimers[sound._id]=setTimeout(self._ended.bind(self,sound),timeout)}if(!internal){self._emit("play",sound._id)}}catch(err){self._emit("playerror",sound._id,err)}};var loadedNoReadyState=window&&window.ejecta||!node.readyState&&Howler._navigator.isCocoonJS;if(node.readyState===4||loadedNoReadyState){playHtml5()}else{var listener=function(){playHtml5();node.removeEventListener(Howler._canPlayEvent,listener,false)};node.addEventListener(Howler._canPlayEvent,listener,false);self._clearTimer(sound._id)}}return sound._id},pause:function(id){var self=this;if(self._state!=="loaded"){self._queue.push({event:"pause",action:function(){self.pause(id)}});return self}var ids=self._getSoundIds(id);for(var i=0;i=0){id=parseInt(args[0],10)}else{vol=parseFloat(args[0])}}else if(args.length>=2){vol=parseFloat(args[0]);id=parseInt(args[1],10)}var sound;if(typeof vol!=="undefined"&&vol>=0&&vol<=1){if(self._state!=="loaded"){self._queue.push({event:"volume",action:function(){self.volume.apply(self,args)}});return self}if(typeof id==="undefined"){self._volume=vol}id=self._getSoundIds(id);for(var i=0;ito?"out":"in";var diff=Math.abs(from-to);var steps=diff/.01;var stepLen=steps>0?len/steps:len;if(stepLen<4){steps=Math.ceil(steps/(4/stepLen));stepLen=4}sound._interval=setInterval(function(){if(steps>0){vol+=dir==="in"?.01:-.01}vol=Math.max(0,vol);vol=Math.min(1,vol);vol=Math.round(vol*100)/100;if(self._webAudio){sound._volume=vol}else{self.volume(vol,sound._id,true)}if(isGroup){self._volume=vol}if(tofrom&&vol>=to){clearInterval(sound._interval);sound._interval=null;self.volume(to,sound._id);self._emit("fade",sound._id)}},stepLen)},_stopFade:function(id){var self=this;var sound=self._soundById(id);if(sound&&sound._interval){if(self._webAudio){sound._node.gain.cancelScheduledValues(Howler.ctx.currentTime)}clearInterval(sound._interval);sound._interval=null;self._emit("fade",id)}return self},loop:function(){var self=this;var args=arguments;var loop,id,sound;if(args.length===0){return self._loop}else if(args.length===1){if(typeof args[0]==="boolean"){loop=args[0];self._loop=loop}else{sound=self._soundById(parseInt(args[0],10));return sound?sound._loop:false}}else if(args.length===2){loop=args[0];id=parseInt(args[1],10)}var ids=self._getSoundIds(id);for(var i=0;i=0){id=parseInt(args[0],10)}else{rate=parseFloat(args[0])}}else if(args.length===2){rate=parseFloat(args[0]);id=parseInt(args[1],10)}var sound;if(typeof rate==="number"){if(self._state!=="loaded"){self._queue.push({event:"rate",action:function(){self.rate.apply(self,args)}});return self}if(typeof id==="undefined"){self._rate=rate}id=self._getSoundIds(id);for(var i=0;i=0){id=parseInt(args[0],10)}else if(self._sounds.length){id=self._sounds[0]._id;seek=parseFloat(args[0])}}else if(args.length===2){seek=parseFloat(args[0]);id=parseInt(args[1],10)}if(typeof id==="undefined"){return self}if(self._state!=="loaded"){self._queue.push({event:"seek",action:function(){self.seek.apply(self,args)}});return self}var sound=self._soundById(id);if(sound){if(typeof seek==="number"&&seek>=0){var playing=self.playing(id);if(playing){self.pause(id,true)}sound._seek=seek;sound._ended=false;self._clearTimer(id);if(playing){self.play(id,true)}if(!self._webAudio&&sound._node){sound._node.currentTime=seek}self._emit("seek",id)}else{if(self._webAudio){var realTime=self.playing(id)?Howler.ctx.currentTime-sound._playStart:0;var rateSeek=sound._rateSeek?sound._rateSeek-sound._seek:0;return sound._seek+(rateSeek+realTime*Math.abs(sound._rate))}else{return sound._node.currentTime}}}return self},playing:function(id){var self=this;if(typeof id==="number"){var sound=self._soundById(id);return sound?!sound._paused:false}for(var i=0;i=0){Howler._howls.splice(index,1)}}var remCache=true;for(i=0;i=0;i--){if(!events[i].id||events[i].id===id||event==="load"){setTimeout(function(fn){fn.call(this,id,msg)}.bind(self,events[i].fn),0);if(events[i].once){self.off(event,events[i].fn,events[i].id)}}}return self},_loadQueue:function(){var self=this;if(self._queue.length>0){var task=self._queue[0];self.once(task.event,function(){self._queue.shift();self._loadQueue()});task.action()}return self},_ended:function(sound){var self=this;var sprite=sound._sprite;if(!self._webAudio&&sound._node&&!sound._node.paused&&!sound._node.ended){setTimeout(self._ended.bind(self,sound),100);return self}var loop=!!(sound._loop||self._sprite[sprite][2]);self._emit("end",sound._id);if(!self._webAudio&&loop){self.stop(sound._id,true).play(sound._id)}if(self._webAudio&&loop){self._emit("play",sound._id);sound._seek=sound._start||0;sound._rateSeek=0;sound._playStart=Howler.ctx.currentTime;var timeout=(sound._stop-sound._start)*1e3/Math.abs(sound._rate);self._endTimers[sound._id]=setTimeout(self._ended.bind(self,sound),timeout)}if(self._webAudio&&!loop){sound._paused=true;sound._ended=true;sound._seek=sound._start||0;sound._rateSeek=0;self._clearTimer(sound._id);self._cleanBuffer(sound._node);Howler._autoSuspend()}if(!self._webAudio&&!loop){self.stop(sound._id)}return self},_clearTimer:function(id){var self=this;if(self._endTimers[id]){clearTimeout(self._endTimers[id]);delete self._endTimers[id]}return self},_soundById:function(id){var self=this;for(var i=0;i=0;i--){if(cnt<=limit){return}if(self._sounds[i]._ended){if(self._webAudio&&self._sounds[i]._node){self._sounds[i]._node.disconnect(0)}self._sounds.splice(i,1);cnt--}}},_getSoundIds:function(id){var self=this;if(typeof id==="undefined"){var ids=[];for(var i=0;i0){cache[self._src]=buffer;loadSound(self,buffer)}},function(){self._emit("loaderror",null,"Decoding audio data failed.")})};var loadSound=function(self,buffer){if(buffer&&!self._duration){self._duration=buffer.duration}if(Object.keys(self._sprite).length===0){self._sprite={__default:[0,self._duration*1e3]}}if(self._state!=="loaded"){self._state="loaded";self._emit("load");self._loadQueue()}};var setupAudioContext=function(){try{if(typeof AudioContext!=="undefined"){Howler.ctx=new AudioContext}else if(typeof webkitAudioContext!=="undefined"){Howler.ctx=new webkitAudioContext}else{Howler.usingWebAudio=false}}catch(e){Howler.usingWebAudio=false}Howler._initSuspended=Howler.ctx.state!=null&&Howler.ctx.state==="suspended";var iOS=/iP(hone|od|ad)/.test(Howler._navigator&&Howler._navigator.platform);var appVersion=Howler._navigator&&Howler._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);var version=appVersion?parseInt(appVersion[1],10):null;if(iOS&&version&&version<9){var safari=/safari/.test(Howler._navigator&&Howler._navigator.userAgent.toLowerCase());if(Howler._navigator&&Howler._navigator.standalone&&!safari||Howler._navigator&&!Howler._navigator.standalone&&!safari){Howler.usingWebAudio=false}}if(Howler.usingWebAudio){Howler.masterGain=typeof Howler.ctx.createGain==="undefined"?Howler.ctx.createGainNode():Howler.ctx.createGain();Howler.masterGain.gain.value=Howler._muted?0:1;Howler.masterGain.connect(Howler.ctx.destination)}Howler._setup()};if(typeof define==="function"&&define.amd){define([],function(){return{Howler:Howler,Howl:Howl}})}if(typeof exports!=="undefined"){exports.Howler=Howler;exports.Howl=Howl}if(typeof window!=="undefined"){window.HowlerGlobal=HowlerGlobal;window.Howler=Howler;window.Howl=Howl;window.Sound=Sound}else if(typeof global!=="undefined"){global.HowlerGlobal=HowlerGlobal;global.Howler=Howler;global.Howl=Howl;global.Sound=Sound}})();