You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

853 rivejä
38 KiB

  1. /*! howler.js v2.0.9 | (c) 2013-2018, James Simpson of GoldFire Studios | MIT License | howlerjs.com */ ! function () {
  2. "use strict";
  3. var e = function () {
  4. this.init()
  5. };
  6. e.prototype = {
  7. init: function () {
  8. var e = this || n;
  9. 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
  10. },
  11. volume: function (e) {
  12. var t = this || n;
  13. if (e = parseFloat(e), t.ctx || _(), void 0 !== e && e >= 0 && e <= 1) {
  14. if (t._volume = e, t._muted) return t;
  15. t.usingWebAudio && t.masterGain.gain.setValueAtTime(e, n.ctx.currentTime);
  16. for (var o = 0; o < t._howls.length; o++)
  17. if (!t._howls[o]._webAudio)
  18. for (var r = t._howls[o]._getSoundIds(), a = 0; a < r.length; a++) {
  19. var u = t._howls[o]._soundById(r[a]);
  20. u && u._node && (u._node.volume = u._volume * e)
  21. }
  22. return t
  23. }
  24. return t._volume
  25. },
  26. mute: function (e) {
  27. var t = this || n;
  28. t.ctx || _(), t._muted = e, t.usingWebAudio && t.masterGain.gain.setValueAtTime(e ? 0 : t._volume, n.ctx.currentTime);
  29. for (var o = 0; o < t._howls.length; o++)
  30. if (!t._howls[o]._webAudio)
  31. for (var r = t._howls[o]._getSoundIds(), a = 0; a < r.length; a++) {
  32. var u = t._howls[o]._soundById(r[a]);
  33. u && u._node && (u._node.muted = !!e || u._muted)
  34. }
  35. return t
  36. },
  37. unload: function () {
  38. for (var e = this || n, t = e._howls.length - 1; t >= 0; t--) e._howls[t].unload();
  39. return e.usingWebAudio && e.ctx && void 0 !== e.ctx.close && (e.ctx.close(), e.ctx = null, _()), e
  40. },
  41. codecs: function (e) {
  42. return (this || n)._codecs[e.replace(/^x-/, "")]
  43. },
  44. _setup: function () {
  45. var e = this || n;
  46. if (e.state = e.ctx ? e.ctx.state || "running" : "running", e._autoSuspend(), !e.usingWebAudio)
  47. if ("undefined" != typeof Audio) try {
  48. var t = new Audio;
  49. void 0 === t.oncanplaythrough && (e._canPlayEvent = "canplay")
  50. } catch (n) {
  51. e.noAudio = !0
  52. } else e.noAudio = !0;
  53. try {
  54. var t = new Audio;
  55. t.muted && (e.noAudio = !0)
  56. } catch (e) {}
  57. return e.noAudio || e._setupCodecs(), e
  58. },
  59. _setupCodecs: function () {
  60. var e = this || n,
  61. t = null;
  62. try {
  63. t = "undefined" != typeof Audio ? new Audio : null
  64. } catch (n) {
  65. return e
  66. }
  67. if (!t || "function" != typeof t.canPlayType) return e;
  68. var o = t.canPlayType("audio/mpeg;").replace(/^no$/, ""),
  69. r = e._navigator && e._navigator.userAgent.match(/OPR\/([0-6].)/g),
  70. a = r && parseInt(r[0].split("/")[1], 10) < 33;
  71. return e._codecs = {
  72. mp3: !(a || !o && !t.canPlayType("audio/mp3;").replace(/^no$/, "")),
  73. mpeg: !!o,
  74. opus: !!t.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, ""),
  75. ogg: !!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""),
  76. oga: !!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""),
  77. wav: !!t.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""),
  78. aac: !!t.canPlayType("audio/aac;").replace(/^no$/, ""),
  79. caf: !!t.canPlayType("audio/x-caf;").replace(/^no$/, ""),
  80. m4a: !!(t.canPlayType("audio/x-m4a;") || t.canPlayType("audio/m4a;") || t.canPlayType("audio/aac;")).replace(/^no$/, ""),
  81. mp4: !!(t.canPlayType("audio/x-mp4;") || t.canPlayType("audio/mp4;") || t.canPlayType("audio/aac;")).replace(/^no$/, ""),
  82. weba: !!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, ""),
  83. webm: !!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, ""),
  84. dolby: !!t.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/, ""),
  85. flac: !!(t.canPlayType("audio/x-flac;") || t.canPlayType("audio/flac;")).replace(/^no$/, "")
  86. }, e
  87. },
  88. _enableMobileAudio: function () {
  89. var e = this || n,
  90. t = /iPhone|iPad|iPod|Android|BlackBerry|BB10|Silk|Mobi/i.test(e._navigator && e._navigator.userAgent),
  91. o = !!("ontouchend" in window || e._navigator && e._navigator.maxTouchPoints > 0 || e._navigator && e._navigator.msMaxTouchPoints > 0);
  92. if (!e._mobileEnabled && e.ctx && (t || o)) {
  93. e._mobileEnabled = !1, e._mobileUnloaded || 44100 === e.ctx.sampleRate || (e._mobileUnloaded = !0, e.unload()), e._scratchBuffer = e.ctx.createBuffer(1, 1, 22050);
  94. var r = function () {
  95. n._autoResume();
  96. var t = e.ctx.createBufferSource();
  97. t.buffer = e._scratchBuffer, t.connect(e.ctx.destination), void 0 === t.start ? t.noteOn(0) : t.start(0), "function" == typeof e.ctx.resume && e.ctx.resume(), t.onended = function () {
  98. t.disconnect(0), e._mobileEnabled = !0, e.mobileAutoEnable = !1, document.removeEventListener("touchstart", r, !0), document.removeEventListener("touchend", r, !0)
  99. }
  100. };
  101. return document.addEventListener("touchstart", r, !0), document.addEventListener("touchend", r, !0), e
  102. }
  103. },
  104. _autoSuspend: function () {
  105. var e = this;
  106. if (e.autoSuspend && e.ctx && void 0 !== e.ctx.suspend && n.usingWebAudio) {
  107. for (var t = 0; t < e._howls.length; t++)
  108. if (e._howls[t]._webAudio)
  109. for (var o = 0; o < e._howls[t]._sounds.length; o++)
  110. if (!e._howls[t]._sounds[o]._paused) return e;
  111. return e._suspendTimer && clearTimeout(e._suspendTimer), e._suspendTimer = setTimeout(function () {
  112. e.autoSuspend && (e._suspendTimer = null, e.state = "suspending", e.ctx.suspend().then(function () {
  113. e.state = "suspended", e._resumeAfterSuspend && (delete e._resumeAfterSuspend, e._autoResume())
  114. }))
  115. }, 3e4), e
  116. }
  117. },
  118. _autoResume: function () {
  119. var e = this;
  120. if (e.ctx && void 0 !== e.ctx.resume && n.usingWebAudio) return "running" === e.state && e._suspendTimer ? (clearTimeout(e._suspendTimer), e._suspendTimer = null) : "suspended" === e.state ? (e.ctx.resume().then(function () {
  121. e.state = "running";
  122. for (var n = 0; n < e._howls.length; n++) e._howls[n]._emit("resume")
  123. }), e._suspendTimer && (clearTimeout(e._suspendTimer), e._suspendTimer = null)) : "suspending" === e.state && (e._resumeAfterSuspend = !0), e
  124. }
  125. };
  126. var n = new e,
  127. t = function (e) {
  128. var n = this;
  129. if (!e.src || 0 === e.src.length) return void console.error("An array of source files must be passed with any new Howl.");
  130. n.init(e)
  131. };
  132. t.prototype = {
  133. init: function (e) {
  134. var t = this;
  135. return n.ctx || _(), t._autoplay = e.autoplay || !1, t._format = "string" != typeof e.format ? e.format : [e.format], t._html5 = e.html5 || !1, t._muted = e.mute || !1, t._loop = e.loop || !1, t._pool = e.pool || 5, t._preload = "boolean" != typeof e.preload || e.preload, t._rate = e.rate || 1, t._sprite = e.sprite || {}, t._src = "string" != typeof e.src ? e.src : [e.src], t._volume = void 0 !== e.volume ? e.volume : 1, t._xhrWithCredentials = e.xhrWithCredentials || !1, t._duration = 0, t._state = "unloaded", t._sounds = [], t._endTimers = {}, t._queue = [], t._playLock = !1, t._onend = e.onend ? [{
  136. fn: e.onend
  137. }] : [], t._onfade = e.onfade ? [{
  138. fn: e.onfade
  139. }] : [], t._onload = e.onload ? [{
  140. fn: e.onload
  141. }] : [], t._onloaderror = e.onloaderror ? [{
  142. fn: e.onloaderror
  143. }] : [], t._onplayerror = e.onplayerror ? [{
  144. fn: e.onplayerror
  145. }] : [], t._onpause = e.onpause ? [{
  146. fn: e.onpause
  147. }] : [], t._onplay = e.onplay ? [{
  148. fn: e.onplay
  149. }] : [], t._onstop = e.onstop ? [{
  150. fn: e.onstop
  151. }] : [], t._onmute = e.onmute ? [{
  152. fn: e.onmute
  153. }] : [], t._onvolume = e.onvolume ? [{
  154. fn: e.onvolume
  155. }] : [], t._onrate = e.onrate ? [{
  156. fn: e.onrate
  157. }] : [], t._onseek = e.onseek ? [{
  158. fn: e.onseek
  159. }] : [], t._onresume = [], t._webAudio = n.usingWebAudio && !t._html5, void 0 !== n.ctx && n.ctx && n.mobileAutoEnable && n._enableMobileAudio(), n._howls.push(t), t._autoplay && t._queue.push({
  160. event: "play",
  161. action: function () {
  162. t.play()
  163. }
  164. }), t._preload && t.load(), t
  165. },
  166. load: function () {
  167. var e = this,
  168. t = null;
  169. if (n.noAudio) return void e._emit("loaderror", null, "No audio support.");
  170. "string" == typeof e._src && (e._src = [e._src]);
  171. for (var r = 0; r < e._src.length; r++) {
  172. var u, i;
  173. if (e._format && e._format[r]) u = e._format[r];
  174. else {
  175. if ("string" != typeof (i = e._src[r])) {
  176. e._emit("loaderror", null, "Non-string found in selected audio sources - ignoring.");
  177. continue
  178. }
  179. u = /^data:audio\/([^;,]+);/i.exec(i), u || (u = /\.([^.]+)$/.exec(i.split("?", 1)[0])), u && (u = u[1].toLowerCase())
  180. }
  181. if (u || console.warn('No file extension was found. Consider using the "format" property or specify an extension.'), u && n.codecs(u)) {
  182. t = e._src[r];
  183. break
  184. }
  185. }
  186. return t ? (e._src = t, e._state = "loading", "https:" === window.location.protocol && "http:" === t.slice(0, 5) && (e._html5 = !0, e._webAudio = !1), new o(e), e._webAudio && a(e), e) : void e._emit("loaderror", null, "No codec support for selected audio sources.")
  187. },
  188. play: function (e, t) {
  189. var o = this,
  190. r = null;
  191. if ("number" == typeof e) r = e, e = null;
  192. else {
  193. if ("string" == typeof e && "loaded" === o._state && !o._sprite[e]) return null;
  194. if (void 0 === e) {
  195. e = "__default";
  196. for (var a = 0, u = 0; u < o._sounds.length; u++) o._sounds[u]._paused && !o._sounds[u]._ended && (a++, r = o._sounds[u]._id);
  197. 1 === a ? e = null : r = null
  198. }
  199. }
  200. var i = r ? o._soundById(r) : o._inactiveSound();
  201. if (!i) return null;
  202. if (r && !e && (e = i._sprite || "__default"), "loaded" !== o._state) {
  203. i._sprite = e, i._ended = !1;
  204. var d = i._id;
  205. return o._queue.push({
  206. event: "play",
  207. action: function () {
  208. o.play(d)
  209. }
  210. }), d
  211. }
  212. if (r && !i._paused) return t || o._loadQueue("play"), i._id;
  213. o._webAudio && n._autoResume();
  214. var _ = Math.max(0, i._seek > 0 ? i._seek : o._sprite[e][0] / 1e3),
  215. s = Math.max(0, (o._sprite[e][0] + o._sprite[e][1]) / 1e3 - _),
  216. l = 1e3 * s / Math.abs(i._rate);
  217. i._paused = !1, i._ended = !1, i._sprite = e, i._seek = _, i._start = o._sprite[e][0] / 1e3, i._stop = (o._sprite[e][0] + o._sprite[e][1]) / 1e3, i._loop = !(!i._loop && !o._sprite[e][2]);
  218. var c = i._node;
  219. if (o._webAudio) {
  220. var f = function () {
  221. o._refreshBuffer(i);
  222. var e = i._muted || o._muted ? 0 : i._volume;
  223. 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 && (o._endTimers[i._id] = setTimeout(o._ended.bind(o, i), l)), t || setTimeout(function () {
  224. o._emit("play", i._id)
  225. }, 0)
  226. };
  227. "running" === n.state ? f() : (o.once("resume", f), o._clearTimer(i._id))
  228. } else {
  229. var p = function () {
  230. c.currentTime = _, c.muted = i._muted || o._muted || n._muted || c.muted, c.volume = i._volume * n.volume(), c.playbackRate = i._rate;
  231. try {
  232. var r = c.play();
  233. if ("undefined" != typeof Promise && r instanceof Promise) {
  234. o._playLock = !0;
  235. var a = function () {
  236. o._playLock = !1, t || o._emit("play", i._id)
  237. };
  238. r.then(a, a)
  239. } else t || o._emit("play", i._id);
  240. if (c.paused) return void o._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.");
  241. "__default" !== e ? o._endTimers[i._id] = setTimeout(o._ended.bind(o, i), l) : (o._endTimers[i._id] = function () {
  242. o._ended(i), c.removeEventListener("ended", o._endTimers[i._id], !1)
  243. }, c.addEventListener("ended", o._endTimers[i._id], !1))
  244. } catch (e) {
  245. o._emit("playerror", i._id, e)
  246. }
  247. },
  248. m = window && window.ejecta || !c.readyState && n._navigator.isCocoonJS;
  249. if (c.readyState >= 3 || m) p();
  250. else {
  251. var v = function () {
  252. p(), c.removeEventListener(n._canPlayEvent, v, !1)
  253. };
  254. c.addEventListener(n._canPlayEvent, v, !1), o._clearTimer(i._id)
  255. }
  256. }
  257. return i._id
  258. },
  259. pause: function (e) {
  260. var n = this;
  261. if ("loaded" !== n._state || n._playLock) return n._queue.push({
  262. event: "pause",
  263. action: function () {
  264. n.pause(e)
  265. }
  266. }), n;
  267. for (var t = n._getSoundIds(e), o = 0; o < t.length; o++) {
  268. n._clearTimer(t[o]);
  269. var r = n._soundById(t[o]);
  270. if (r && !r._paused && (r._seek = n.seek(t[o]), r._rateSeek = 0, r._paused = !0, n._stopFade(t[o]), r._node))
  271. if (n._webAudio) {
  272. if (!r._node.bufferSource) continue;
  273. void 0 === r._node.bufferSource.stop ? r._node.bufferSource.noteOff(0) : r._node.bufferSource.stop(0), n._cleanBuffer(r._node)
  274. } else isNaN(r._node.duration) && r._node.duration !== 1 / 0 || r._node.pause();
  275. arguments[1] || n._emit("pause", r ? r._id : null)
  276. }
  277. return n
  278. },
  279. stop: function (e, n) {
  280. var t = this;
  281. if ("loaded" !== t._state) return t._queue.push({
  282. event: "stop",
  283. action: function () {
  284. t.stop(e)
  285. }
  286. }), t;
  287. for (var o = t._getSoundIds(e), r = 0; r < o.length; r++) {
  288. t._clearTimer(o[r]);
  289. var a = t._soundById(o[r]);
  290. a && (a._seek = a._start || 0, a._rateSeek = 0, a._paused = !0, a._ended = !0, t._stopFade(o[r]), a._node && (t._webAudio ? a._node.bufferSource && (void 0 === a._node.bufferSource.stop ? a._node.bufferSource.noteOff(0) : a._node.bufferSource.stop(0), t._cleanBuffer(a._node)) : isNaN(a._node.duration) && a._node.duration !== 1 / 0 || (a._node.currentTime = a._start || 0, a._node.pause())), n || t._emit("stop", a._id))
  291. }
  292. return t
  293. },
  294. mute: function (e, t) {
  295. var o = this;
  296. if ("loaded" !== o._state) return o._queue.push({
  297. event: "mute",
  298. action: function () {
  299. o.mute(e, t)
  300. }
  301. }), o;
  302. if (void 0 === t) {
  303. if ("boolean" != typeof e) return o._muted;
  304. o._muted = e
  305. }
  306. for (var r = o._getSoundIds(t), a = 0; a < r.length; a++) {
  307. var u = o._soundById(r[a]);
  308. u && (u._muted = e, u._interval && o._stopFade(u._id), o._webAudio && u._node ? u._node.gain.setValueAtTime(e ? 0 : u._volume, n.ctx.currentTime) : u._node && (u._node.muted = !!n._muted || e), o._emit("mute", u._id))
  309. }
  310. return o
  311. },
  312. volume: function () {
  313. var e, t, o = this,
  314. r = arguments;
  315. if (0 === r.length) return o._volume;
  316. if (1 === r.length || 2 === r.length && void 0 === r[1]) {
  317. o._getSoundIds().indexOf(r[0]) >= 0 ? t = parseInt(r[0], 10) : e = parseFloat(r[0])
  318. } else r.length >= 2 && (e = parseFloat(r[0]), t = parseInt(r[1], 10));
  319. var a;
  320. if (!(void 0 !== e && e >= 0 && e <= 1)) return a = t ? o._soundById(t) : o._sounds[0], a ? a._volume : 0;
  321. if ("loaded" !== o._state) return o._queue.push({
  322. event: "volume",
  323. action: function () {
  324. o.volume.apply(o, r)
  325. }
  326. }), o;
  327. void 0 === t && (o._volume = e), t = o._getSoundIds(t);
  328. for (var u = 0; u < t.length; u++)(a = o._soundById(t[u])) && (a._volume = e, r[2] || o._stopFade(t[u]), o._webAudio && a._node && !a._muted ? a._node.gain.setValueAtTime(e, n.ctx.currentTime) : a._node && !a._muted && (a._node.volume = e * n.volume()), o._emit("volume", a._id));
  329. return o
  330. },
  331. fade: function (e, t, o, r) {
  332. var a = this;
  333. if ("loaded" !== a._state) return a._queue.push({
  334. event: "fade",
  335. action: function () {
  336. a.fade(e, t, o, r)
  337. }
  338. }), a;
  339. a.volume(e, r);
  340. for (var u = a._getSoundIds(r), i = 0; i < u.length; i++) {
  341. var d = a._soundById(u[i]);
  342. if (d) {
  343. if (r || a._stopFade(u[i]), a._webAudio && !d._muted) {
  344. var _ = n.ctx.currentTime,
  345. s = _ + o / 1e3;
  346. d._volume = e, d._node.gain.setValueAtTime(e, _), d._node.gain.linearRampToValueAtTime(t, s)
  347. }
  348. a._startFadeInterval(d, e, t, o, u[i], void 0 === r)
  349. }
  350. }
  351. return a
  352. },
  353. _startFadeInterval: function (e, n, t, o, r, a) {
  354. var u = this,
  355. i = n,
  356. d = t - n,
  357. _ = Math.abs(d / .01),
  358. s = Math.max(4, _ > 0 ? o / _ : o),
  359. l = Date.now();
  360. e._fadeTo = t, e._interval = setInterval(function () {
  361. var r = (Date.now() - l) / o;
  362. l = Date.now(), i += d * r, i = Math.max(0, i), i = Math.min(1, i), i = Math.round(100 * i) / 100, u._webAudio ? e._volume = i : u.volume(i, e._id, !0), a && (u._volume = i), (t < n && i <= t || t > n && i >= t) && (clearInterval(e._interval), e._interval = null, e._fadeTo = null, u.volume(t, e._id), u._emit("fade", e._id))
  363. }, s)
  364. },
  365. _stopFade: function (e) {
  366. var t = this,
  367. o = t._soundById(e);
  368. return o && o._interval && (t._webAudio && o._node.gain.cancelScheduledValues(n.ctx.currentTime), clearInterval(o._interval), o._interval = null, t.volume(o._fadeTo, e), o._fadeTo = null, t._emit("fade", e)), t
  369. },
  370. loop: function () {
  371. var e, n, t, o = this,
  372. r = arguments;
  373. if (0 === r.length) return o._loop;
  374. if (1 === r.length) {
  375. if ("boolean" != typeof r[0]) return !!(t = o._soundById(parseInt(r[0], 10))) && t._loop;
  376. e = r[0], o._loop = e
  377. } else 2 === r.length && (e = r[0], n = parseInt(r[1], 10));
  378. for (var a = o._getSoundIds(n), u = 0; u < a.length; u++)(t = o._soundById(a[u])) && (t._loop = e, o._webAudio && t._node && t._node.bufferSource && (t._node.bufferSource.loop = e, e && (t._node.bufferSource.loopStart = t._start || 0, t._node.bufferSource.loopEnd = t._stop)));
  379. return o
  380. },
  381. rate: function () {
  382. var e, t, o = this,
  383. r = arguments;
  384. if (0 === r.length) t = o._sounds[0]._id;
  385. else if (1 === r.length) {
  386. var a = o._getSoundIds(),
  387. u = a.indexOf(r[0]);
  388. u >= 0 ? t = parseInt(r[0], 10) : e = parseFloat(r[0])
  389. } else 2 === r.length && (e = parseFloat(r[0]), t = parseInt(r[1], 10));
  390. var i;
  391. if ("number" != typeof e) return i = o._soundById(t), i ? i._rate : o._rate;
  392. if ("loaded" !== o._state) return o._queue.push({
  393. event: "rate",
  394. action: function () {
  395. o.rate.apply(o, r)
  396. }
  397. }), o;
  398. void 0 === t && (o._rate = e), t = o._getSoundIds(t);
  399. for (var d = 0; d < t.length; d++)
  400. if (i = o._soundById(t[d])) {
  401. i._rateSeek = o.seek(t[d]), i._playStart = o._webAudio ? n.ctx.currentTime : i._playStart, i._rate = e, o._webAudio && i._node && i._node.bufferSource ? i._node.bufferSource.playbackRate.setValueAtTime(e, n.ctx.currentTime) : i._node && (i._node.playbackRate = e);
  402. var _ = o.seek(t[d]),
  403. s = (o._sprite[i._sprite][0] + o._sprite[i._sprite][1]) / 1e3 - _,
  404. l = 1e3 * s / Math.abs(i._rate);
  405. !o._endTimers[t[d]] && i._paused || (o._clearTimer(t[d]), o._endTimers[t[d]] = setTimeout(o._ended.bind(o, i), l)), o._emit("rate", i._id)
  406. }
  407. return o
  408. },
  409. seek: function () {
  410. var e, t, o = this,
  411. r = arguments;
  412. if (0 === r.length) t = o._sounds[0]._id;
  413. else if (1 === r.length) {
  414. var a = o._getSoundIds(),
  415. u = a.indexOf(r[0]);
  416. u >= 0 ? t = parseInt(r[0], 10) : o._sounds.length && (t = o._sounds[0]._id, e = parseFloat(r[0]))
  417. } else 2 === r.length && (e = parseFloat(r[0]), t = parseInt(r[1], 10));
  418. if (void 0 === t) return o;
  419. if ("loaded" !== o._state) return o._queue.push({
  420. event: "seek",
  421. action: function () {
  422. o.seek.apply(o, r)
  423. }
  424. }), o;
  425. var i = o._soundById(t);
  426. if (i) {
  427. if (!("number" == typeof e && e >= 0)) {
  428. if (o._webAudio) {
  429. var d = o.playing(t) ? n.ctx.currentTime - i._playStart : 0,
  430. _ = i._rateSeek ? i._rateSeek - i._seek : 0;
  431. return i._seek + (_ + d * Math.abs(i._rate))
  432. }
  433. return i._node.currentTime
  434. }
  435. var s = o.playing(t);
  436. if (s && o.pause(t, !0), i._seek = e, i._ended = !1, o._clearTimer(t), s && o.play(t, !0), !o._webAudio && i._node && (i._node.currentTime = e), s && !o._webAudio) {
  437. var l = function () {
  438. o._playLock ? setTimeout(l, 0) : o._emit("seek", t)
  439. };
  440. setTimeout(l, 0)
  441. } else o._emit("seek", t)
  442. }
  443. return o
  444. },
  445. playing: function (e) {
  446. var n = this;
  447. if ("number" == typeof e) {
  448. var t = n._soundById(e);
  449. return !!t && !t._paused
  450. }
  451. for (var o = 0; o < n._sounds.length; o++)
  452. if (!n._sounds[o]._paused) return !0;
  453. return !1
  454. },
  455. duration: function (e) {
  456. var n = this,
  457. t = n._duration,
  458. o = n._soundById(e);
  459. return o && (t = n._sprite[o._sprite][1] / 1e3), t
  460. },
  461. state: function () {
  462. return this._state
  463. },
  464. unload: function () {
  465. for (var e = this, t = e._sounds, o = 0; o < t.length; o++) {
  466. if (t[o]._paused || e.stop(t[o]._id), !e._webAudio) {
  467. /MSIE |Trident\//.test(n._navigator && n._navigator.userAgent) || (t[o]._node.src = "data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"), t[o]._node.removeEventListener("error", t[o]._errorFn, !1), t[o]._node.removeEventListener(n._canPlayEvent, t[o]._loadFn, !1)
  468. }
  469. delete t[o]._node, e._clearTimer(t[o]._id);
  470. var a = n._howls.indexOf(e);
  471. a >= 0 && n._howls.splice(a, 1)
  472. }
  473. var u = !0;
  474. for (o = 0; o < n._howls.length; o++)
  475. if (n._howls[o]._src === e._src) {
  476. u = !1;
  477. break
  478. }
  479. return r && u && delete r[e._src], n.noAudio = !1, e._state = "unloaded", e._sounds = [], e = null, null
  480. },
  481. on: function (e, n, t, o) {
  482. var r = this,
  483. a = r["_on" + e];
  484. return "function" == typeof n && a.push(o ? {
  485. id: t,
  486. fn: n,
  487. once: o
  488. } : {
  489. id: t,
  490. fn: n
  491. }), r
  492. },
  493. off: function (e, n, t) {
  494. var o = this,
  495. r = o["_on" + e],
  496. a = 0;
  497. if ("number" == typeof n && (t = n, n = null), n || t)
  498. for (a = 0; a < r.length; a++) {
  499. var u = t === r[a].id;
  500. if (n === r[a].fn && u || !n && u) {
  501. r.splice(a, 1);
  502. break
  503. }
  504. } else if (e) o["_on" + e] = [];
  505. else {
  506. var i = Object.keys(o);
  507. for (a = 0; a < i.length; a++) 0 === i[a].indexOf("_on") && Array.isArray(o[i[a]]) && (o[i[a]] = [])
  508. }
  509. return o
  510. },
  511. once: function (e, n, t) {
  512. var o = this;
  513. return o.on(e, n, t, 1), o
  514. },
  515. _emit: function (e, n, t) {
  516. for (var o = this, r = o["_on" + e], a = r.length - 1; a >= 0; a--) r[a].id && r[a].id !== n && "load" !== e || (setTimeout(function (e) {
  517. e.call(this, n, t)
  518. }.bind(o, r[a].fn), 0), r[a].once && o.off(e, r[a].fn, r[a].id));
  519. return o._loadQueue(e), o
  520. },
  521. _loadQueue: function (e) {
  522. var n = this;
  523. if (n._queue.length > 0) {
  524. var t = n._queue[0];
  525. t.event === e && (n._queue.shift(), n._loadQueue()), e || t.action()
  526. }
  527. return n
  528. },
  529. _ended: function (e) {
  530. var t = this,
  531. o = e._sprite;
  532. if (!t._webAudio && e._node && !e._node.paused && !e._node.ended && e._node.currentTime < e._stop) return setTimeout(t._ended.bind(t, e), 100), t;
  533. var r = !(!e._loop && !t._sprite[o][2]);
  534. if (t._emit("end", e._id), !t._webAudio && r && t.stop(e._id, !0).play(e._id), t._webAudio && r) {
  535. t._emit("play", e._id), e._seek = e._start || 0, e._rateSeek = 0, e._playStart = n.ctx.currentTime;
  536. var a = 1e3 * (e._stop - e._start) / Math.abs(e._rate);
  537. t._endTimers[e._id] = setTimeout(t._ended.bind(t, e), a)
  538. }
  539. return t._webAudio && !r && (e._paused = !0, e._ended = !0, e._seek = e._start || 0, e._rateSeek = 0, t._clearTimer(e._id), t._cleanBuffer(e._node), n._autoSuspend()), t._webAudio || r || t.stop(e._id), t
  540. },
  541. _clearTimer: function (e) {
  542. var n = this;
  543. if (n._endTimers[e]) {
  544. if ("function" != typeof n._endTimers[e]) clearTimeout(n._endTimers[e]);
  545. else {
  546. var t = n._soundById(e);
  547. t && t._node && t._node.removeEventListener("ended", n._endTimers[e], !1)
  548. }
  549. delete n._endTimers[e]
  550. }
  551. return n
  552. },
  553. _soundById: function (e) {
  554. for (var n = this, t = 0; t < n._sounds.length; t++)
  555. if (e === n._sounds[t]._id) return n._sounds[t];
  556. return null
  557. },
  558. _inactiveSound: function () {
  559. var e = this;
  560. e._drain();
  561. for (var n = 0; n < e._sounds.length; n++)
  562. if (e._sounds[n]._ended) return e._sounds[n].reset();
  563. return new o(e)
  564. },
  565. _drain: function () {
  566. var e = this,
  567. n = e._pool,
  568. t = 0,
  569. o = 0;
  570. if (!(e._sounds.length < n)) {
  571. for (o = 0; o < e._sounds.length; o++) e._sounds[o]._ended && t++;
  572. for (o = e._sounds.length - 1; o >= 0; o--) {
  573. if (t <= n) return;
  574. e._sounds[o]._ended && (e._webAudio && e._sounds[o]._node && e._sounds[o]._node.disconnect(0), e._sounds.splice(o, 1), t--)
  575. }
  576. }
  577. },
  578. _getSoundIds: function (e) {
  579. var n = this;
  580. if (void 0 === e) {
  581. for (var t = [], o = 0; o < n._sounds.length; o++) t.push(n._sounds[o]._id);
  582. return t
  583. }
  584. return [e]
  585. },
  586. _refreshBuffer: function (e) {
  587. var t = this;
  588. return e._node.bufferSource = n.ctx.createBufferSource(), e._node.bufferSource.buffer = r[t._src], e._panner ? e._node.bufferSource.connect(e._panner) : e._node.bufferSource.connect(e._node), e._node.bufferSource.loop = e._loop, e._loop && (e._node.bufferSource.loopStart = e._start || 0, e._node.bufferSource.loopEnd = e._stop), e._node.bufferSource.playbackRate.setValueAtTime(e._rate, n.ctx.currentTime), t
  589. },
  590. _cleanBuffer: function (e) {
  591. var t = this;
  592. if (n._scratchBuffer) {
  593. e.bufferSource.onended = null, e.bufferSource.disconnect(0);
  594. try {
  595. e.bufferSource.buffer = n._scratchBuffer
  596. } catch (e) {}
  597. }
  598. return e.bufferSource = null, t
  599. }
  600. };
  601. var o = function (e) {
  602. this._parent = e, this.init()
  603. };
  604. o.prototype = {
  605. init: function () {
  606. var e = this,
  607. t = e._parent;
  608. return e._muted = t._muted, e._loop = t._loop, e._volume = t._volume, e._rate = t._rate, e._seek = 0, e._paused = !0, e._ended = !0, e._sprite = "__default", e._id = ++n._counter, t._sounds.push(e), e.create(), e
  609. },
  610. create: function () {
  611. var e = this,
  612. t = e._parent,
  613. o = n._muted || e._muted || e._parent._muted ? 0 : e._volume;
  614. return t._webAudio ? (e._node = void 0 === n.ctx.createGain ? n.ctx.createGainNode() : n.ctx.createGain(), e._node.gain.setValueAtTime(o, n.ctx.currentTime), e._node.paused = !0, e._node.connect(n.masterGain)) : (e._node = new Audio, e._errorFn = e._errorListener.bind(e), e._node.addEventListener("error", e._errorFn, !1), e._loadFn = e._loadListener.bind(e), e._node.addEventListener(n._canPlayEvent, e._loadFn, !1), e._node.src = t._src, e._node.preload = "auto", e._node.volume = o * n.volume(), e._node.load()), e
  615. },
  616. reset: function () {
  617. var e = this,
  618. t = e._parent;
  619. return e._muted = t._muted, e._loop = t._loop, e._volume = t._volume, e._rate = t._rate, e._seek = 0, e._rateSeek = 0, e._paused = !0, e._ended = !0, e._sprite = "__default", e._id = ++n._counter, e
  620. },
  621. _errorListener: function () {
  622. var e = this;
  623. e._parent._emit("loaderror", e._id, e._node.error ? e._node.error.code : 0), e._node.removeEventListener("error", e._errorFn, !1)
  624. },
  625. _loadListener: function () {
  626. var e = this,
  627. t = e._parent;
  628. t._duration = Math.ceil(10 * e._node.duration) / 10, 0 === Object.keys(t._sprite).length && (t._sprite = {
  629. __default: [0, 1e3 * t._duration]
  630. }), "loaded" !== t._state && (t._state = "loaded", t._emit("load"), t._loadQueue()), e._node.removeEventListener(n._canPlayEvent, e._loadFn, !1)
  631. }
  632. };
  633. var r = {},
  634. a = function (e) {
  635. var n = e._src;
  636. if (r[n]) return e._duration = r[n].duration, void d(e);
  637. if (/^data:[^;]+;base64,/.test(n)) {
  638. for (var t = atob(n.split(",")[1]), o = new Uint8Array(t.length), a = 0; a < t.length; ++a) o[a] = t.charCodeAt(a);
  639. i(o.buffer, e)
  640. } else {
  641. var _ = new XMLHttpRequest;
  642. _.open("GET", n, !0), _.withCredentials = e._xhrWithCredentials, _.responseType = "arraybuffer", _.onload = function () {
  643. var n = (_.status + "")[0];
  644. if ("0" !== n && "2" !== n && "3" !== n) return void e._emit("loaderror", null, "Failed loading audio file with status: " + _.status + ".");
  645. i(_.response, e)
  646. }, _.onerror = function () {
  647. e._webAudio && (e._html5 = !0, e._webAudio = !1, e._sounds = [], delete r[n], e.load())
  648. }, u(_)
  649. }
  650. },
  651. u = function (e) {
  652. try {
  653. e.send()
  654. } catch (n) {
  655. e.onerror()
  656. }
  657. },
  658. i = function (e, t) {
  659. n.ctx.decodeAudioData(e, function (e) {
  660. e && t._sounds.length > 0 && (r[t._src] = e, d(t, e))
  661. }, function () {
  662. t._emit("loaderror", null, "Decoding audio data failed.")
  663. })
  664. },
  665. d = function (e, n) {
  666. n && !e._duration && (e._duration = n.duration), 0 === Object.keys(e._sprite).length && (e._sprite = {
  667. __default: [0, 1e3 * e._duration]
  668. }), "loaded" !== e._state && (e._state = "loaded", e._emit("load"), e._loadQueue())
  669. },
  670. _ = function () {
  671. try {
  672. "undefined" != typeof AudioContext ? n.ctx = new AudioContext : "undefined" != typeof webkitAudioContext ? n.ctx = new webkitAudioContext : n.usingWebAudio = !1
  673. } catch (e) {
  674. n.usingWebAudio = !1
  675. }
  676. var e = /iP(hone|od|ad)/.test(n._navigator && n._navigator.platform),
  677. t = n._navigator && n._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),
  678. o = t ? parseInt(t[1], 10) : null;
  679. if (e && o && o < 9) {
  680. var r = /safari/.test(n._navigator && n._navigator.userAgent.toLowerCase());
  681. (n._navigator && n._navigator.standalone && !r || n._navigator && !n._navigator.standalone && !r) && (n.usingWebAudio = !1)
  682. }
  683. n.usingWebAudio && (n.masterGain = void 0 === n.ctx.createGain ? n.ctx.createGainNode() : n.ctx.createGain(), n.masterGain.gain.setValueAtTime(n._muted ? 0 : 1, n.ctx.currentTime), n.masterGain.connect(n.ctx.destination)), n._setup()
  684. };
  685. "function" == typeof define && define.amd && define([], function () {
  686. return {
  687. Howler: n,
  688. Howl: t
  689. }
  690. }), "undefined" != typeof exports && (exports.Howler = n, exports.Howl = t), "undefined" != typeof window ? (window.HowlerGlobal = e, window.Howler = n, window.Howl = t, window.Sound = o) : "undefined" != typeof global && (global.HowlerGlobal = e, global.Howler = n, global.Howl = t, global.Sound = o)
  691. }();
  692. /*! Spatial Plugin */
  693. ! function () {
  694. "use strict";
  695. HowlerGlobal.prototype._pos = [0, 0, 0], HowlerGlobal.prototype._orientation = [0, 0, -1, 0, 1, 0], HowlerGlobal.prototype.stereo = function (n) {
  696. var e = this;
  697. if (!e.ctx || !e.ctx.listener) return e;
  698. for (var t = e._howls.length - 1; t >= 0; t--) e._howls[t].stereo(n);
  699. return e
  700. }, HowlerGlobal.prototype.pos = function (n, e, t) {
  701. var o = this;
  702. 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
  703. }, HowlerGlobal.prototype.orientation = function (n, e, t, o, r, a) {
  704. var i = this;
  705. if (!i.ctx || !i.ctx.listener) return i;
  706. var p = i._orientation;
  707. 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)
  708. }, Howl.prototype.init = function (n) {
  709. return function (e) {
  710. var t = this;
  711. return t._orientation = e.orientation || [1, 0, 0], t._stereo = e.stereo || null, t._pos = e.pos || null, t._pannerAttr = {
  712. coneInnerAngle: void 0 !== e.coneInnerAngle ? e.coneInnerAngle : 360,
  713. coneOuterAngle: void 0 !== e.coneOuterAngle ? e.coneOuterAngle : 360,
  714. coneOuterGain: void 0 !== e.coneOuterGain ? e.coneOuterGain : 0,
  715. distanceModel: void 0 !== e.distanceModel ? e.distanceModel : "inverse",
  716. maxDistance: void 0 !== e.maxDistance ? e.maxDistance : 1e4,
  717. panningModel: void 0 !== e.panningModel ? e.panningModel : "HRTF",
  718. refDistance: void 0 !== e.refDistance ? e.refDistance : 1,
  719. rolloffFactor: void 0 !== e.rolloffFactor ? e.rolloffFactor : 1
  720. }, t._onstereo = e.onstereo ? [{
  721. fn: e.onstereo
  722. }] : [], t._onpos = e.onpos ? [{
  723. fn: e.onpos
  724. }] : [], t._onorientation = e.onorientation ? [{
  725. fn: e.onorientation
  726. }] : [], n.call(this, e)
  727. }
  728. }(Howl.prototype.init), Howl.prototype.stereo = function (e, t) {
  729. var o = this;
  730. if (!o._webAudio) return o;
  731. if ("loaded" !== o._state) return o._queue.push({
  732. event: "stereo",
  733. action: function () {
  734. o.stereo(e, t)
  735. }
  736. }), o;
  737. var r = void 0 === Howler.ctx.createStereoPanner ? "spatial" : "stereo";
  738. if (void 0 === t) {
  739. if ("number" != typeof e) return o._stereo;
  740. o._stereo = e, o._pos = [e, 0, 0]
  741. }
  742. for (var a = o._getSoundIds(t), i = 0; i < a.length; i++) {
  743. var p = o._soundById(a[i]);
  744. if (p) {
  745. if ("number" != typeof e) return p._stereo;
  746. p._stereo = e, p._pos = [e, 0, 0], p._node && (p._pannerAttr.panningModel = "equalpower", p._panner && p._panner.pan || n(p, r), "spatial" === r ? p._panner.setPosition(e, 0, 0) : p._panner.pan.setValueAtTime(e, Howler.ctx.currentTime)), o._emit("stereo", p._id)
  747. }
  748. }
  749. return o
  750. }, Howl.prototype.pos = function (e, t, o, r) {
  751. var a = this;
  752. if (!a._webAudio) return a;
  753. if ("loaded" !== a._state) return a._queue.push({
  754. event: "pos",
  755. action: function () {
  756. a.pos(e, t, o, r)
  757. }
  758. }), a;
  759. if (t = "number" != typeof t ? 0 : t, o = "number" != typeof o ? -.5 : o, void 0 === r) {
  760. if ("number" != typeof e) return a._pos;
  761. a._pos = [e, t, o]
  762. }
  763. for (var i = a._getSoundIds(r), p = 0; p < i.length; p++) {
  764. var s = a._soundById(i[p]);
  765. if (s) {
  766. if ("number" != typeof e) return s._pos;
  767. s._pos = [e, t, o], s._node && (s._panner && !s._panner.pan || n(s, "spatial"), s._panner.setPosition(e, t, o)), a._emit("pos", s._id)
  768. }
  769. }
  770. return a
  771. }, Howl.prototype.orientation = function (e, t, o, r) {
  772. var a = this;
  773. if (!a._webAudio) return a;
  774. if ("loaded" !== a._state) return a._queue.push({
  775. event: "orientation",
  776. action: function () {
  777. a.orientation(e, t, o, r)
  778. }
  779. }), a;
  780. if (t = "number" != typeof t ? a._orientation[1] : t, o = "number" != typeof o ? a._orientation[2] : o, void 0 === r) {
  781. if ("number" != typeof e) return a._orientation;
  782. a._orientation = [e, t, o]
  783. }
  784. for (var i = a._getSoundIds(r), p = 0; p < i.length; p++) {
  785. var s = a._soundById(i[p]);
  786. if (s) {
  787. if ("number" != typeof e) return s._orientation;
  788. s._orientation = [e, t, o], s._node && (s._panner || (s._pos || (s._pos = a._pos || [0, 0, -.5]), n(s, "spatial")), s._panner.setOrientation(e, t, o)), a._emit("orientation", s._id)
  789. }
  790. }
  791. return a
  792. }, Howl.prototype.pannerAttr = function () {
  793. var e, t, o, r = this,
  794. a = arguments;
  795. if (!r._webAudio) return r;
  796. if (0 === a.length) return r._pannerAttr;
  797. if (1 === a.length) {
  798. if ("object" != typeof a[0]) return o = r._soundById(parseInt(a[0], 10)), o ? o._pannerAttr : r._pannerAttr;
  799. e = a[0], void 0 === t && (e.pannerAttr || (e.pannerAttr = {
  800. coneInnerAngle: e.coneInnerAngle,
  801. coneOuterAngle: e.coneOuterAngle,
  802. coneOuterGain: e.coneOuterGain,
  803. distanceModel: e.distanceModel,
  804. maxDistance: e.maxDistance,
  805. refDistance: e.refDistance,
  806. rolloffFactor: e.rolloffFactor,
  807. panningModel: e.panningModel
  808. }), r._pannerAttr = {
  809. coneInnerAngle: void 0 !== e.pannerAttr.coneInnerAngle ? e.pannerAttr.coneInnerAngle : r._coneInnerAngle,
  810. coneOuterAngle: void 0 !== e.pannerAttr.coneOuterAngle ? e.pannerAttr.coneOuterAngle : r._coneOuterAngle,
  811. coneOuterGain: void 0 !== e.pannerAttr.coneOuterGain ? e.pannerAttr.coneOuterGain : r._coneOuterGain,
  812. distanceModel: void 0 !== e.pannerAttr.distanceModel ? e.pannerAttr.distanceModel : r._distanceModel,
  813. maxDistance: void 0 !== e.pannerAttr.maxDistance ? e.pannerAttr.maxDistance : r._maxDistance,
  814. refDistance: void 0 !== e.pannerAttr.refDistance ? e.pannerAttr.refDistance : r._refDistance,
  815. rolloffFactor: void 0 !== e.pannerAttr.rolloffFactor ? e.pannerAttr.rolloffFactor : r._rolloffFactor,
  816. panningModel: void 0 !== e.pannerAttr.panningModel ? e.pannerAttr.panningModel : r._panningModel
  817. })
  818. } else 2 === a.length && (e = a[0], t = parseInt(a[1], 10));
  819. for (var i = r._getSoundIds(t), p = 0; p < i.length; p++)
  820. if (o = r._soundById(i[p])) {
  821. var s = o._pannerAttr;
  822. s = {
  823. coneInnerAngle: void 0 !== e.coneInnerAngle ? e.coneInnerAngle : s.coneInnerAngle,
  824. coneOuterAngle: void 0 !== e.coneOuterAngle ? e.coneOuterAngle : s.coneOuterAngle,
  825. coneOuterGain: void 0 !== e.coneOuterGain ? e.coneOuterGain : s.coneOuterGain,
  826. distanceModel: void 0 !== e.distanceModel ? e.distanceModel : s.distanceModel,
  827. maxDistance: void 0 !== e.maxDistance ? e.maxDistance : s.maxDistance,
  828. refDistance: void 0 !== e.refDistance ? e.refDistance : s.refDistance,
  829. rolloffFactor: void 0 !== e.rolloffFactor ? e.rolloffFactor : s.rolloffFactor,
  830. panningModel: void 0 !== e.panningModel ? e.panningModel : s.panningModel
  831. };
  832. var l = o._panner;
  833. l ? (l.coneInnerAngle = s.coneInnerAngle, l.coneOuterAngle = s.coneOuterAngle, l.coneOuterGain = s.coneOuterGain, l.distanceModel = s.distanceModel, l.maxDistance = s.maxDistance, l.refDistance = s.refDistance, l.rolloffFactor = s.rolloffFactor, l.panningModel = s.panningModel) : (o._pos || (o._pos = r._pos || [0, 0, -.5]), n(o, "spatial"))
  834. }
  835. return r
  836. }, Sound.prototype.init = function (n) {
  837. return function () {
  838. var e = this,
  839. t = e._parent;
  840. e._orientation = t._orientation, e._stereo = t._stereo, e._pos = t._pos, e._pannerAttr = t._pannerAttr, n.call(this), e._stereo ? t.stereo(e._stereo) : e._pos && t.pos(e._pos[0], e._pos[1], e._pos[2], e._id)
  841. }
  842. }(Sound.prototype.init), Sound.prototype.reset = function (n) {
  843. return function () {
  844. var e = this,
  845. t = e._parent;
  846. return e._orientation = t._orientation, e._pos = t._pos, e._pannerAttr = t._pannerAttr, n.call(this)
  847. }
  848. }(Sound.prototype.reset);
  849. var n = function (n, e) {
  850. e = e || "spatial", "spatial" === e ? (n._panner = Howler.ctx.createPanner(), n._panner.coneInnerAngle = n._pannerAttr.coneInnerAngle, n._panner.coneOuterAngle = n._pannerAttr.coneOuterAngle, n._panner.coneOuterGain = n._pannerAttr.coneOuterGain, n._panner.distanceModel = n._pannerAttr.distanceModel, n._panner.maxDistance = n._pannerAttr.maxDistance, n._panner.refDistance = n._pannerAttr.refDistance, n._panner.rolloffFactor = n._pannerAttr.rolloffFactor, n._panner.panningModel = n._pannerAttr.panningModel, n._panner.setPosition(n._pos[0], n._pos[1], n._pos[2]), n._panner.setOrientation(n._orientation[0], n._orientation[1], n._orientation[2])) : (n._panner = Howler.ctx.createStereoPanner(), n._panner.pan.setValueAtTime(n._stereo, Howler.ctx.currentTime)), n._panner.connect(n._node), n._paused || n._parent.pause(n._id, !0).play(n._id, !0)
  851. }
  852. }();