forked from goldfire/howler.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhowler.min.js
More file actions
30 lines (30 loc) · 10.6 KB
/
howler.min.js
File metadata and controls
30 lines (30 loc) · 10.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*!
* howler.js v1.1.18
* howlerjs.com
*
* (c) 2013-2014, James Simpson of GoldFire Studios
* goldfirestudios.com
*
* MIT License
*/
(function(){var m={},g=null,k=!0,p=!1;try{"undefined"!==typeof AudioContext?g=new AudioContext:"undefined"!==typeof webkitAudioContext?g=new webkitAudioContext:k=!1}catch(w){k=!1}if(!k)if("undefined"!==typeof Audio)try{new Audio}catch(x){p=!0}else p=!0;if(k){var n="undefined"===typeof g.createGain?g.createGainNode():g.createGain();n.gain.value=1;n.connect(g.destination)}var r=function(){this._volume=1;this._muted=!1;this.usingWebAudio=k;this.noAudio=p;this._howls=[]};r.prototype={volume:function(a){a=
parseFloat(a);if(0<=a&&1>=a){this._volume=a;k&&(n.gain.value=a);for(var c in this._howls)if(this._howls.hasOwnProperty(c)&&!1===this._howls[c]._webAudio)for(a=0;a<this._howls[c]._audioNode.length;a++)this._howls[c]._audioNode[a].volume=this._howls[c]._volume*this._volume;return this}return k?n.gain.value:this._volume},mute:function(){this._setMuted(!0);return this},unmute:function(){this._setMuted(!1);return this},_setMuted:function(a){this._muted=a;k&&(n.gain.value=a?0:this._volume);for(var c in this._howls)if(this._howls.hasOwnProperty(c)&&
!1===this._howls[c]._webAudio)for(var b=0;b<this._howls[c]._audioNode.length;b++)this._howls[c]._audioNode[b].muted=a}};var l=new r,h=null;if(!p)var h=new Audio,t={mp3:!!h.canPlayType("audio/mpeg;").replace(/^no$/,""),opus:!!h.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!h.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!h.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),m4a:!!(h.canPlayType("audio/x-m4a;")||h.canPlayType("audio/aac;")).replace(/^no$/,
""),mp4:!!(h.canPlayType("audio/x-mp4;")||h.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!!h.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")};var q=function(a){this._autoplay=a.autoplay||!1;this._buffer=a.buffer||!1;this._duration=a.duration||0;this._format=a.format||null;this._loop=a.loop||!1;this._loaded=!1;this._sprite=a.sprite||{};this._src=a.src||"";this._pos3d=a.pos3d||[0,0,-0.5];this._volume=void 0!==a.volume?a.volume:1;this._urls=a.urls||[];this._rate=a.rate||1;this._onload=
[a.onload||function(){}];this._onloaderror=[a.onloaderror||function(){}];this._onend=[a.onend||function(){}];this._onpause=[a.onpause||function(){}];this._onplay=[a.onplay||function(){}];this._onendTimer=[];this._webAudio=k&&!this._buffer;this._audioNode=[];this._webAudio&&this._setupAudioNode();l._howls.push(this);this.load()};q.prototype={load:function(){var a=this,c=null;if(!p){for(var b=0;b<a._urls.length;b++){var d,e;if(a._format)d=a._format;else if(e=a._urls[b].toLowerCase().split("?")[0],d=
(d=e.match(/.+\.([^?]+)(\?|$)/))&&2<=d.length?d:e.match(/data\:audio\/([^?]+);/))d=d[1];else{a.on("loaderror");return}if(t[d]){c=a._urls[b];break}}if(c){a._src=c;if(a._webAudio)u(a,c);else{var f=new Audio;f.addEventListener("error",function(){f.error&&4===f.error.code&&(r.noAudio=!0);a.on("loaderror",{type:f.error.code})},!1);a._audioNode.push(f);f.src=c;f._pos=0;f.preload="auto";f.volume=l._muted?0:a._volume*l.volume();m[c]=a;var g=function(){a._duration=Math.ceil(10*f.duration)/10;0===Object.getOwnPropertyNames(a._sprite).length&&
(a._sprite={_default:[0,1E3*a._duration]});a._loaded||(a._loaded=!0,a.on("load"));a._autoplay&&a.play();f.removeEventListener("canplaythrough",g,!1)};f.addEventListener("canplaythrough",g,!1);f.load()}return a}}a.on("loaderror")},urls:function(a){return a?(this.stop(),this._urls="string"===typeof a?[a]:a,this._loaded=!1,this.load(),this):this._urls},play:function(a,c){var b=this;"function"===typeof a&&(c=a);a&&"function"!==typeof a||(a="_default");if(!b._loaded)return b.on("load",function(){b.play(a,
c)}),b;if(!b._sprite[a])return"function"===typeof c&&c(),b;b._inactiveNode(function(d){d._sprite=a;var e=0<d._pos?d._pos:b._sprite[a][0]/1E3,f=b._sprite[a][1]/1E3-d._pos,k=!(!b._loop&&!b._sprite[a][2]),h="string"===typeof c?c:Math.round(Date.now()*Math.random())+"",m;(function(){var c={id:h,sprite:a,loop:k};m=setTimeout(function(){!b._webAudio&&k&&b.stop(c.id,c.timer).play(a,c.id);b._webAudio&&!k&&(b._nodeById(c.id).paused=!0,b._nodeById(c.id)._pos=0);b._webAudio||k||b.stop(c.id,c.timer);b.on("end",
h)},1E3*f);b._onendTimer.push(m);c.timer=b._onendTimer[b._onendTimer.length-1]})();if(b._webAudio){var n=b._sprite[a][0]/1E3,p=b._sprite[a][1]/1E3;d.id=h;d.paused=!1;v(b,[k,n,p],h);b._playStart=g.currentTime;d.gain.value=b._volume;"undefined"===typeof d.bufferSource.start?d.bufferSource.noteGrainOn(0,e,f):d.bufferSource.start(0,e,f)}else if(4===d.readyState)d.id=h,d.currentTime=e,d.muted=l._muted||d.muted,d.volume=b._volume*l.volume(),setTimeout(function(){d.play()},0);else return b._clearEndTimer(m),
function(){var e=a,f=c,g=function(){b.play(e,f);d.removeEventListener("canplaythrough",g,!1)};d.addEventListener("canplaythrough",g,!1)}(),b;b.on("play");"function"===typeof c&&c(h);return b});return b},pause:function(a,c){var b=this;if(!b._loaded)return b.on("play",function(){b.pause(a)}),b;b._clearEndTimer(c||0);var d=a?b._nodeById(a):b._activeNode();if(d)if(d._pos=b.pos(null,a),b._webAudio){if(!d.bufferSource||d.paused)return b;d.paused=!0;"undefined"===typeof d.bufferSource.stop?d.bufferSource.noteOff(0):
d.bufferSource.stop(0)}else d.pause();b.on("pause");return b},stop:function(a,c){var b=this;if(!b._loaded)return b.on("play",function(){b.stop(a)}),b;b._clearEndTimer(c||0);var d=a?b._nodeById(a):b._activeNode();if(d)if(d._pos=0,b._webAudio){if(!d.bufferSource||d.paused)return b;d.paused=!0;"undefined"===typeof d.bufferSource.stop?d.bufferSource.noteOff(0):d.bufferSource.stop(0)}else d.pause(),d.currentTime=0;return b},mute:function(a){var c=this;if(!c._loaded)return c.on("play",function(){c.mute(a)}),
c;var b=a?c._nodeById(a):c._activeNode();b&&(c._webAudio?b.gain.value=0:b.muted=!0);return c},unmute:function(a){var c=this;if(!c._loaded)return c.on("play",function(){c.unmute(a)}),c;var b=a?c._nodeById(a):c._activeNode();b&&(c._webAudio?b.gain.value=c._volume:b.muted=!1);return c},volume:function(a,c){var b=this;a=parseFloat(a);if(0<=a&&1>=a){b._volume=a;if(!b._loaded)return b.on("play",function(){b.volume(a,c)}),b;var d=c?b._nodeById(c):b._activeNode();d&&(b._webAudio?d.gain.value=a:d.volume=a*
l.volume());return b}return b._volume},loop:function(a){return"boolean"===typeof a?(this._loop=a,this):this._loop},sprite:function(a){return"object"===typeof a?(this._sprite=a,this):this._sprite},pos:function(a,c){var b=this;if(!b._loaded)return b.on("load",function(){b.pos(a)}),"number"===typeof a?b:b._pos||0;a=parseFloat(a);var d=c?b._nodeById(c):b._activeNode();if(d)return 0<=a?(b.pause(c),d._pos=a,b.play(d._sprite,c),b):b._webAudio?d._pos+(g.currentTime-b._playStart):d.currentTime;if(0<=a)return b;
for(d=0;d<b._audioNode.length;d++)if(b._audioNode[d].paused&&4===b._audioNode[d].readyState)return b._webAudio?b._audioNode[d]._pos:b._audioNode[d].currentTime},pos3d:function(a,c,b,d){var e=this;c="undefined"!==typeof c&&c?c:0;b="undefined"!==typeof b&&b?b:-0.5;if(!e._loaded)return e.on("play",function(){e.pos3d(a,c,b,d)}),e;if(0<=a||0>a){if(e._webAudio){var f=d?e._nodeById(d):e._activeNode();f&&(e._pos3d=[a,c,b],f.panner.setPosition(a,c,b))}}else return e._pos3d;return e},fade:function(a,c,b,d,
e){var f=this,g=Math.abs(a-c),h=a>c?"down":"up",g=g/0.01,k=b/g;if(!f._loaded)return f.on("load",function(){f.fade(a,c,b,d,e)}),f;f.volume(a,e);for(var l=1;l<=g;l++)(function(){var a=Math.round(1E3*(f._volume+("up"===h?0.01:-0.01)*l))/1E3;setTimeout(function(){f.volume(a,e);a===c&&d&&d()},k*l)})()},fadeIn:function(a,c,b){return this.volume(0).play().fade(0,a,c,b)},fadeOut:function(a,c,b,d){var e=this;return e.fade(e._volume,a,c,function(){b&&b();e.pause(d);e.on("end")},d)},_nodeById:function(a){for(var c=
this._audioNode[0],b=0;b<this._audioNode.length;b++)if(this._audioNode[b].id===a){c=this._audioNode[b];break}return c},_activeNode:function(){for(var a=null,c=0;c<this._audioNode.length;c++)if(!this._audioNode[c].paused){a=this._audioNode[c];break}this._drainPool();return a},_inactiveNode:function(a){for(var c=null,b=0;b<this._audioNode.length;b++)if(this._audioNode[b].paused&&4===this._audioNode[b].readyState){a(this._audioNode[b]);c=!0;break}this._drainPool();if(!c){var d;this._webAudio?(d=this._setupAudioNode(),
a(d)):(this.load(),d=this._audioNode[this._audioNode.length-1],d.addEventListener("loadedmetadata",function(){a(d)}))}},_drainPool:function(){var a=0,c;for(c=0;c<this._audioNode.length;c++)this._audioNode[c].paused&&a++;for(c=this._audioNode.length-1;0<=c&&!(5>=a);c--)this._audioNode[c].paused&&(this._webAudio&&this._audioNode[c].disconnect(0),a--,this._audioNode.splice(c,1))},_clearEndTimer:function(a){a=this._onendTimer.indexOf(a);a=0<=a?a:0;this._onendTimer[a]&&(clearTimeout(this._onendTimer[a]),
this._onendTimer.splice(a,1))},_setupAudioNode:function(){var a=this._audioNode,c=this._audioNode.length;a[c]="undefined"===typeof g.createGain?g.createGainNode():g.createGain();a[c].gain.value=this._volume;a[c].paused=!0;a[c]._pos=0;a[c].readyState=4;a[c].connect(n);a[c].panner=g.createPanner();a[c].panner.panningModel="equalpower";a[c].panner.setPosition(this._pos3d[0],this._pos3d[1],this._pos3d[2]);a[c].panner.connect(a[c]);return a[c]},on:function(a,c){var b=this["_on"+a];if("function"===typeof c)b.push(c);
else for(var d=0;d<b.length;d++)c?b[d].call(this,c):b[d].call(this);return this},off:function(a,c){for(var b=this["_on"+a],d=c.toString(),e=0;e<b.length;e++)if(d===b[e].toString()){b.splice(e,1);break}return this},unload:function(){for(var a=this._audioNode,c=0;c<this._audioNode.length;c++)a[c].paused||this.stop(a[c].id),this._webAudio?a[c].disconnect(0):a[c].src="";a=l._howls.indexOf(this);null!==a&&0<=a&&l._howls.splice(a,1);delete m[this._src]}};if(k)var u=function(a,c){if(c in m)a._duration=m[c].duration,
s(a);else{var b=new XMLHttpRequest;b.open("GET",c,!0);b.responseType="arraybuffer";b.onload=function(){g.decodeAudioData(b.response,function(b){b&&(m[c]=b,s(a,b))},function(b){a.on("loaderror")})};b.onerror=function(){a._webAudio&&(a._buffer=!0,a._webAudio=!1,a._audioNode=[],delete a._gainNode,a.load())};try{b.send()}catch(d){b.onerror()}}},s=function(a,c){a._duration=c?c.duration:a._duration;0===Object.getOwnPropertyNames(a._sprite).length&&(a._sprite={_default:[0,1E3*a._duration]});a._loaded||(a._loaded=
!0,a.on("load"));a._autoplay&&a.play()},v=function(a,c,b){b=a._nodeById(b);b.bufferSource=g.createBufferSource();b.bufferSource.buffer=m[a._src];b.bufferSource.connect(b.panner);b.bufferSource.loop=c[0];c[0]&&(b.bufferSource.loopStart=c[1],b.bufferSource.loopEnd=c[1]+c[2]);b.bufferSource.playbackRate.value=a._rate};"function"===typeof define&&define.amd&&define(function(){return{Howler:l,Howl:q}});"undefined"!==typeof exports&&(exports.Howler=l,exports.Howl=q);window.Howler=l;window.Howl=q})();