Bläddra i källkod

added missing files

tags/v0.1.11
Big Bad Waffle 6 år sedan
förälder
incheckning
e9764d0bc6
6 ändrade filer med 1084 tillägg och 0 borttagningar
  1. Binär
     
  2. Binär
     
  3. Binär
     
  4. +72
    -0
      src/client/js/sound/sound.js
  5. +852
    -0
      src/client/plugins/howler.min.js
  6. +160
    -0
      src/client/plugins/howler.spatial.min.js

Binär
Visa fil


Binär
Visa fil


Binär
Visa fil


+ 72
- 0
src/client/js/sound/sound.js Visa fil

@@ -0,0 +1,72 @@
define([
'howler'
], function (
howler
) {
return {
sounds: [],

init: function (zone) {
this.unload();

if (zone != 'fjolarok')
return;

this.addSound('fire.ogg', 123, 123);
this.addSound('stream.ogg', 107, 69);
this.addSound('wind.ogg', 176, 104);
},

unload: function () {
this.sounds.forEach(function (s) {
if (!s.sound)
s.sound.unload();
});

this.sounds = [];
},

update: function (x, y) {
this.sounds.forEach(function (s) {
var dx = Math.abs(s.x - x);
if (dx > 10) {
if (s.sound)
s.sound.volume(0);
return;
}
var dy = Math.abs(s.y - y);
if (dy > 10) {
if (s.sound)
s.sound.volume(0);
return;
}

var dist = 10 - Math.max(dx, dy);
dist = (dist * dist) / 100;
var volume = 0.3 * dist;

if (!s.sound) {
s.sound = new Howl({
src: ['audio/' + s.file],
autoplay: true,
loop: true,
volume: 0
});
}

s.sound.volume(volume);
});
},

addSound: function (file, x, y) {
var sound = {
file: file,
x: x,
y: y,
sound: null
};

this.sounds.push(sound);
}
};
});

+ 852
- 0
src/client/plugins/howler.min.js Visa fil

@@ -0,0 +1,852 @@
/*! howler.js v2.0.9 | (c) 2013-2018, 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 t = this || n;
if (e = parseFloat(e), t.ctx || _(), void 0 !== e && e >= 0 && e <= 1) {
if (t._volume = e, t._muted) return t;
t.usingWebAudio && t.masterGain.gain.setValueAtTime(e, n.ctx.currentTime);
for (var o = 0; o < t._howls.length; o++)
if (!t._howls[o]._webAudio)
for (var r = t._howls[o]._getSoundIds(), a = 0; a < r.length; a++) {
var u = t._howls[o]._soundById(r[a]);
u && u._node && (u._node.volume = u._volume * e)
}
return t
}
return t._volume
},
mute: function (e) {
var t = this || n;
t.ctx || _(), t._muted = e, t.usingWebAudio && t.masterGain.gain.setValueAtTime(e ? 0 : t._volume, n.ctx.currentTime);
for (var o = 0; o < t._howls.length; o++)
if (!t._howls[o]._webAudio)
for (var r = t._howls[o]._getSoundIds(), a = 0; a < r.length; a++) {
var u = t._howls[o]._soundById(r[a]);
u && u._node && (u._node.muted = !!e || u._muted)
}
return t
},
unload: function () {
for (var e = this || n, t = e._howls.length - 1; t >= 0; t--) e._howls[t].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 t = new Audio;
void 0 === t.oncanplaythrough && (e._canPlayEvent = "canplay")
} catch (n) {
e.noAudio = !0
} else e.noAudio = !0;
try {
var t = new Audio;
t.muted && (e.noAudio = !0)
} catch (e) {}
return e.noAudio || e._setupCodecs(), e
},
_setupCodecs: function () {
var e = this || n,
t = null;
try {
t = "undefined" != typeof Audio ? new Audio : null
} catch (n) {
return e
}
if (!t || "function" != typeof t.canPlayType) return e;
var o = t.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 || !o && !t.canPlayType("audio/mp3;").replace(/^no$/, "")),
mpeg: !!o,
opus: !!t.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, ""),
ogg: !!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""),
oga: !!t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""),
wav: !!t.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""),
aac: !!t.canPlayType("audio/aac;").replace(/^no$/, ""),
caf: !!t.canPlayType("audio/x-caf;").replace(/^no$/, ""),
m4a: !!(t.canPlayType("audio/x-m4a;") || t.canPlayType("audio/m4a;") || t.canPlayType("audio/aac;")).replace(/^no$/, ""),
mp4: !!(t.canPlayType("audio/x-mp4;") || t.canPlayType("audio/mp4;") || t.canPlayType("audio/aac;")).replace(/^no$/, ""),
weba: !!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, ""),
webm: !!t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, ""),
dolby: !!t.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/, ""),
flac: !!(t.canPlayType("audio/x-flac;") || t.canPlayType("audio/flac;")).replace(/^no$/, "")
}, e
},
_enableMobileAudio: function () {
var e = this || n,
t = /iPhone|iPad|iPod|Android|BlackBerry|BB10|Silk|Mobi/i.test(e._navigator && e._navigator.userAgent),
o = !!("ontouchend" in window || e._navigator && e._navigator.maxTouchPoints > 0 || e._navigator && e._navigator.msMaxTouchPoints > 0);
if (!e._mobileEnabled && e.ctx && (t || o)) {
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 t = e.ctx.createBufferSource();
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 () {
t.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 t = 0; t < e._howls.length; t++)
if (e._howls[t]._webAudio)
for (var o = 0; o < e._howls[t]._sounds.length; o++)
if (!e._howls[t]._sounds[o]._paused) return e;
return e._suspendTimer && clearTimeout(e._suspendTimer), e._suspendTimer = setTimeout(function () {
e.autoSuspend && (e._suspendTimer = null, e.state = "suspending", e.ctx.suspend().then(function () {
e.state = "suspended", e._resumeAfterSuspend && (delete e._resumeAfterSuspend, e._autoResume())
}))
}, 3e4), e
}
},
_autoResume: function () {
var e = this;
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 () {
e.state = "running";
for (var n = 0; n < e._howls.length; n++) e._howls[n]._emit("resume")
}), e._suspendTimer && (clearTimeout(e._suspendTimer), e._suspendTimer = null)) : "suspending" === e.state && (e._resumeAfterSuspend = !0), e
}
};
var n = new e,
t = function (e) {
var n = this;
if (!e.src || 0 === e.src.length) return void console.error("An array of source files must be passed with any new Howl.");
n.init(e)
};
t.prototype = {
init: function (e) {
var t = this;
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 ? [{
fn: e.onend
}] : [], t._onfade = e.onfade ? [{
fn: e.onfade
}] : [], t._onload = e.onload ? [{
fn: e.onload
}] : [], t._onloaderror = e.onloaderror ? [{
fn: e.onloaderror
}] : [], t._onplayerror = e.onplayerror ? [{
fn: e.onplayerror
}] : [], t._onpause = e.onpause ? [{
fn: e.onpause
}] : [], t._onplay = e.onplay ? [{
fn: e.onplay
}] : [], t._onstop = e.onstop ? [{
fn: e.onstop
}] : [], t._onmute = e.onmute ? [{
fn: e.onmute
}] : [], t._onvolume = e.onvolume ? [{
fn: e.onvolume
}] : [], t._onrate = e.onrate ? [{
fn: e.onrate
}] : [], t._onseek = e.onseek ? [{
fn: e.onseek
}] : [], 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({
event: "play",
action: function () {
t.play()
}
}), t._preload && t.load(), t
},
load: function () {
var e = this,
t = null;
if (n.noAudio) return void e._emit("loaderror", null, "No audio support.");
"string" == typeof e._src && (e._src = [e._src]);
for (var r = 0; r < e._src.length; r++) {
var u, i;
if (e._format && e._format[r]) u = e._format[r];
else {
if ("string" != typeof (i = e._src[r])) {
e._emit("loaderror", null, "Non-string found in selected audio sources - ignoring.");
continue
}
u = /^data:audio\/([^;,]+);/i.exec(i), u || (u = /\.([^.]+)$/.exec(i.split("?", 1)[0])), u && (u = u[1].toLowerCase())
}
if (u || console.warn('No file extension was found. Consider using the "format" property or specify an extension.'), u && n.codecs(u)) {
t = e._src[r];
break
}
}
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.")
},
play: function (e, t) {
var o = this,
r = null;
if ("number" == typeof e) r = e, e = null;
else {
if ("string" == typeof e && "loaded" === o._state && !o._sprite[e]) return null;
if (void 0 === e) {
e = "__default";
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);
1 === a ? e = null : r = null
}
}
var i = r ? o._soundById(r) : o._inactiveSound();
if (!i) return null;
if (r && !e && (e = i._sprite || "__default"), "loaded" !== o._state) {
i._sprite = e, i._ended = !1;
var d = i._id;
return o._queue.push({
event: "play",
action: function () {
o.play(d)
}
}), d
}
if (r && !i._paused) return t || o._loadQueue("play"), i._id;
o._webAudio && n._autoResume();
var _ = Math.max(0, i._seek > 0 ? i._seek : o._sprite[e][0] / 1e3),
s = Math.max(0, (o._sprite[e][0] + o._sprite[e][1]) / 1e3 - _),
l = 1e3 * s / Math.abs(i._rate);
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]);
var c = i._node;
if (o._webAudio) {
var f = function () {
o._refreshBuffer(i);
var e = i._muted || o._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 && (o._endTimers[i._id] = setTimeout(o._ended.bind(o, i), l)), t || setTimeout(function () {
o._emit("play", i._id)
}, 0)
};
"running" === n.state ? f() : (o.once("resume", f), o._clearTimer(i._id))
} else {
var p = function () {
c.currentTime = _, c.muted = i._muted || o._muted || n._muted || c.muted, c.volume = i._volume * n.volume(), c.playbackRate = i._rate;
try {
var r = c.play();
if ("undefined" != typeof Promise && r instanceof Promise) {
o._playLock = !0;
var a = function () {
o._playLock = !1, t || o._emit("play", i._id)
};
r.then(a, a)
} else t || o._emit("play", i._id);
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.");
"__default" !== e ? o._endTimers[i._id] = setTimeout(o._ended.bind(o, i), l) : (o._endTimers[i._id] = function () {
o._ended(i), c.removeEventListener("ended", o._endTimers[i._id], !1)
}, c.addEventListener("ended", o._endTimers[i._id], !1))
} catch (e) {
o._emit("playerror", i._id, e)
}
},
m = window && window.ejecta || !c.readyState && n._navigator.isCocoonJS;
if (c.readyState >= 3 || m) p();
else {
var v = function () {
p(), c.removeEventListener(n._canPlayEvent, v, !1)
};
c.addEventListener(n._canPlayEvent, v, !1), o._clearTimer(i._id)
}
}
return i._id
},
pause: function (e) {
var n = this;
if ("loaded" !== n._state || n._playLock) return n._queue.push({
event: "pause",
action: function () {
n.pause(e)
}
}), n;
for (var t = n._getSoundIds(e), o = 0; o < t.length; o++) {
n._clearTimer(t[o]);
var r = n._soundById(t[o]);
if (r && !r._paused && (r._seek = n.seek(t[o]), r._rateSeek = 0, r._paused = !0, n._stopFade(t[o]), r._node))
if (n._webAudio) {
if (!r._node.bufferSource) continue;
void 0 === r._node.bufferSource.stop ? r._node.bufferSource.noteOff(0) : r._node.bufferSource.stop(0), n._cleanBuffer(r._node)
} else isNaN(r._node.duration) && r._node.duration !== 1 / 0 || r._node.pause();
arguments[1] || n._emit("pause", r ? r._id : null)
}
return n
},
stop: function (e, n) {
var t = this;
if ("loaded" !== t._state) return t._queue.push({
event: "stop",
action: function () {
t.stop(e)
}
}), t;
for (var o = t._getSoundIds(e), r = 0; r < o.length; r++) {
t._clearTimer(o[r]);
var a = t._soundById(o[r]);
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))
}
return t
},
mute: function (e, t) {
var o = this;
if ("loaded" !== o._state) return o._queue.push({
event: "mute",
action: function () {
o.mute(e, t)
}
}), o;
if (void 0 === t) {
if ("boolean" != typeof e) return o._muted;
o._muted = e
}
for (var r = o._getSoundIds(t), a = 0; a < r.length; a++) {
var u = o._soundById(r[a]);
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))
}
return o
},
volume: function () {
var e, t, o = this,
r = arguments;
if (0 === r.length) return o._volume;
if (1 === r.length || 2 === r.length && void 0 === r[1]) {
o._getSoundIds().indexOf(r[0]) >= 0 ? t = parseInt(r[0], 10) : e = parseFloat(r[0])
} else r.length >= 2 && (e = parseFloat(r[0]), t = parseInt(r[1], 10));
var a;
if (!(void 0 !== e && e >= 0 && e <= 1)) return a = t ? o._soundById(t) : o._sounds[0], a ? a._volume : 0;
if ("loaded" !== o._state) return o._queue.push({
event: "volume",
action: function () {
o.volume.apply(o, r)
}
}), o;
void 0 === t && (o._volume = e), t = o._getSoundIds(t);
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));
return o
},
fade: function (e, t, o, r) {
var a = this;
if ("loaded" !== a._state) return a._queue.push({
event: "fade",
action: function () {
a.fade(e, t, o, r)
}
}), a;
a.volume(e, r);
for (var u = a._getSoundIds(r), i = 0; i < u.length; i++) {
var d = a._soundById(u[i]);
if (d) {
if (r || a._stopFade(u[i]), a._webAudio && !d._muted) {
var _ = n.ctx.currentTime,
s = _ + o / 1e3;
d._volume = e, d._node.gain.setValueAtTime(e, _), d._node.gain.linearRampToValueAtTime(t, s)
}
a._startFadeInterval(d, e, t, o, u[i], void 0 === r)
}
}
return a
},
_startFadeInterval: function (e, n, t, o, r, a) {
var u = this,
i = n,
d = t - n,
_ = Math.abs(d / .01),
s = Math.max(4, _ > 0 ? o / _ : o),
l = Date.now();
e._fadeTo = t, e._interval = setInterval(function () {
var r = (Date.now() - l) / o;
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))
}, s)
},
_stopFade: function (e) {
var t = this,
o = t._soundById(e);
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
},
loop: function () {
var e, n, t, o = this,
r = arguments;
if (0 === r.length) return o._loop;
if (1 === r.length) {
if ("boolean" != typeof r[0]) return !!(t = o._soundById(parseInt(r[0], 10))) && t._loop;
e = r[0], o._loop = e
} else 2 === r.length && (e = r[0], n = parseInt(r[1], 10));
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)));
return o
},
rate: function () {
var e, t, o = this,
r = arguments;
if (0 === r.length) t = o._sounds[0]._id;
else if (1 === r.length) {
var a = o._getSoundIds(),
u = a.indexOf(r[0]);
u >= 0 ? t = parseInt(r[0], 10) : e = parseFloat(r[0])
} else 2 === r.length && (e = parseFloat(r[0]), t = parseInt(r[1], 10));
var i;
if ("number" != typeof e) return i = o._soundById(t), i ? i._rate : o._rate;
if ("loaded" !== o._state) return o._queue.push({
event: "rate",
action: function () {
o.rate.apply(o, r)
}
}), o;
void 0 === t && (o._rate = e), t = o._getSoundIds(t);
for (var d = 0; d < t.length; d++)
if (i = o._soundById(t[d])) {
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);
var _ = o.seek(t[d]),
s = (o._sprite[i._sprite][0] + o._sprite[i._sprite][1]) / 1e3 - _,
l = 1e3 * s / Math.abs(i._rate);
!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)
}
return o
},
seek: function () {
var e, t, o = this,
r = arguments;
if (0 === r.length) t = o._sounds[0]._id;
else if (1 === r.length) {
var a = o._getSoundIds(),
u = a.indexOf(r[0]);
u >= 0 ? t = parseInt(r[0], 10) : o._sounds.length && (t = o._sounds[0]._id, e = parseFloat(r[0]))
} else 2 === r.length && (e = parseFloat(r[0]), t = parseInt(r[1], 10));
if (void 0 === t) return o;
if ("loaded" !== o._state) return o._queue.push({
event: "seek",
action: function () {
o.seek.apply(o, r)
}
}), o;
var i = o._soundById(t);
if (i) {
if (!("number" == typeof e && e >= 0)) {
if (o._webAudio) {
var d = o.playing(t) ? 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 = o.playing(t);
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) {
var l = function () {
o._playLock ? setTimeout(l, 0) : o._emit("seek", t)
};
setTimeout(l, 0)
} else o._emit("seek", t)
}
return o
},
playing: function (e) {
var n = this;
if ("number" == typeof e) {
var t = n._soundById(e);
return !!t && !t._paused
}
for (var o = 0; o < n._sounds.length; o++)
if (!n._sounds[o]._paused) return !0;
return !1
},
duration: function (e) {
var n = this,
t = n._duration,
o = n._soundById(e);
return o && (t = n._sprite[o._sprite][1] / 1e3), t
},
state: function () {
return this._state
},
unload: function () {
for (var e = this, t = e._sounds, o = 0; o < t.length; o++) {
if (t[o]._paused || e.stop(t[o]._id), !e._webAudio) {
/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)
}
delete t[o]._node, e._clearTimer(t[o]._id);
var a = n._howls.indexOf(e);
a >= 0 && n._howls.splice(a, 1)
}
var u = !0;
for (o = 0; o < n._howls.length; o++)
if (n._howls[o]._src === e._src) {
u = !1;
break
}
return r && u && delete r[e._src], n.noAudio = !1, e._state = "unloaded", e._sounds = [], e = null, null
},
on: function (e, n, t, o) {
var r = this,
a = r["_on" + e];
return "function" == typeof n && a.push(o ? {
id: t,
fn: n,
once: o
} : {
id: t,
fn: n
}), r
},
off: function (e, n, t) {
var o = this,
r = o["_on" + e],
a = 0;
if ("number" == typeof n && (t = n, n = null), n || t)
for (a = 0; a < r.length; a++) {
var u = t === r[a].id;
if (n === r[a].fn && u || !n && u) {
r.splice(a, 1);
break
}
} else if (e) o["_on" + e] = [];
else {
var i = Object.keys(o);
for (a = 0; a < i.length; a++) 0 === i[a].indexOf("_on") && Array.isArray(o[i[a]]) && (o[i[a]] = [])
}
return o
},
once: function (e, n, t) {
var o = this;
return o.on(e, n, t, 1), o
},
_emit: function (e, n, t) {
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) {
e.call(this, n, t)
}.bind(o, r[a].fn), 0), r[a].once && o.off(e, r[a].fn, r[a].id));
return o._loadQueue(e), o
},
_loadQueue: function (e) {
var n = this;
if (n._queue.length > 0) {
var t = n._queue[0];
t.event === e && (n._queue.shift(), n._loadQueue()), e || t.action()
}
return n
},
_ended: function (e) {
var t = this,
o = e._sprite;
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;
var r = !(!e._loop && !t._sprite[o][2]);
if (t._emit("end", e._id), !t._webAudio && r && t.stop(e._id, !0).play(e._id), t._webAudio && r) {
t._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);
t._endTimers[e._id] = setTimeout(t._ended.bind(t, e), a)
}
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
},
_clearTimer: function (e) {
var n = this;
if (n._endTimers[e]) {
if ("function" != typeof n._endTimers[e]) clearTimeout(n._endTimers[e]);
else {
var t = n._soundById(e);
t && t._node && t._node.removeEventListener("ended", n._endTimers[e], !1)
}
delete n._endTimers[e]
}
return n
},
_soundById: function (e) {
for (var n = this, t = 0; t < n._sounds.length; t++)
if (e === n._sounds[t]._id) return n._sounds[t];
return null
},
_inactiveSound: function () {
var e = this;
e._drain();
for (var n = 0; n < e._sounds.length; n++)
if (e._sounds[n]._ended) return e._sounds[n].reset();
return new o(e)
},
_drain: function () {
var e = this,
n = e._pool,
t = 0,
o = 0;
if (!(e._sounds.length < n)) {
for (o = 0; o < e._sounds.length; o++) e._sounds[o]._ended && t++;
for (o = e._sounds.length - 1; o >= 0; o--) {
if (t <= n) return;
e._sounds[o]._ended && (e._webAudio && e._sounds[o]._node && e._sounds[o]._node.disconnect(0), e._sounds.splice(o, 1), t--)
}
}
},
_getSoundIds: function (e) {
var n = this;
if (void 0 === e) {
for (var t = [], o = 0; o < n._sounds.length; o++) t.push(n._sounds[o]._id);
return t
}
return [e]
},
_refreshBuffer: function (e) {
var t = this;
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
},
_cleanBuffer: function (e) {
var t = this;
if (n._scratchBuffer) {
e.bufferSource.onended = null, e.bufferSource.disconnect(0);
try {
e.bufferSource.buffer = n._scratchBuffer
} catch (e) {}
}
return e.bufferSource = null, t
}
};
var o = function (e) {
this._parent = e, this.init()
};
o.prototype = {
init: function () {
var e = this,
t = e._parent;
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
},
create: function () {
var e = this,
t = e._parent,
o = n._muted || e._muted || e._parent._muted ? 0 : e._volume;
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
},
reset: function () {
var e = this,
t = e._parent;
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
},
_errorListener: function () {
var e = this;
e._parent._emit("loaderror", e._id, e._node.error ? e._node.error.code : 0), e._node.removeEventListener("error", e._errorFn, !1)
},
_loadListener: function () {
var e = this,
t = e._parent;
t._duration = Math.ceil(10 * e._node.duration) / 10, 0 === Object.keys(t._sprite).length && (t._sprite = {
__default: [0, 1e3 * t._duration]
}), "loaded" !== t._state && (t._state = "loaded", t._emit("load"), t._loadQueue()), e._node.removeEventListener(n._canPlayEvent, e._loadFn, !1)
}
};
var r = {},
a = function (e) {
var n = e._src;
if (r[n]) return e._duration = r[n].duration, void d(e);
if (/^data:[^;]+;base64,/.test(n)) {
for (var t = atob(n.split(",")[1]), o = new Uint8Array(t.length), a = 0; a < t.length; ++a) o[a] = t.charCodeAt(a);
i(o.buffer, e)
} else {
var _ = new XMLHttpRequest;
_.open("GET", n, !0), _.withCredentials = e._xhrWithCredentials, _.responseType = "arraybuffer", _.onload = function () {
var n = (_.status + "")[0];
if ("0" !== n && "2" !== n && "3" !== n) return void e._emit("loaderror", null, "Failed loading audio file with status: " + _.status + ".");
i(_.response, e)
}, _.onerror = function () {
e._webAudio && (e._html5 = !0, e._webAudio = !1, e._sounds = [], delete r[n], e.load())
}, u(_)
}
},
u = function (e) {
try {
e.send()
} catch (n) {
e.onerror()
}
},
i = function (e, t) {
n.ctx.decodeAudioData(e, function (e) {
e && t._sounds.length > 0 && (r[t._src] = e, d(t, e))
}, function () {
t._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),
t = n._navigator && n._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),
o = t ? parseInt(t[1], 10) : null;
if (e && o && o < 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.setValueAtTime(n._muted ? 0 : 1, n.ctx.currentTime), n.masterGain.connect(n.ctx.destination)), n._setup()
};
"function" == typeof define && define.amd && define([], function () {
return {
Howler: n,
Howl: t
}
}), "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)
}();
/*! 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 < a.length; i++) {
var p = o._soundById(a[i]);
if (p) {
if ("number" != typeof e) return p._stereo;
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)
}
}
return o
}, Howl.prototype.pos = function (e, t, o, r) {
var a = this;
if (!a._webAudio) return a;
if ("loaded" !== a._state) return a._queue.push({
event: "pos",
action: function () {
a.pos(e, t, o, r)
}
}), a;
if (t = "number" != typeof t ? 0 : t, o = "number" != typeof o ? -.5 : o, void 0 === r) {
if ("number" != typeof e) return a._pos;
a._pos = [e, t, o]
}
for (var i = a._getSoundIds(r), p = 0; p < i.length; p++) {
var s = a._soundById(i[p]);
if (s) {
if ("number" != typeof e) return s._pos;
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)
}
}
return a
}, Howl.prototype.orientation = function (e, t, o, r) {
var a = this;
if (!a._webAudio) return a;
if ("loaded" !== a._state) return a._queue.push({
event: "orientation",
action: function () {
a.orientation(e, t, o, r)
}
}), a;
if (t = "number" != typeof t ? a._orientation[1] : t, o = "number" != typeof o ? a._orientation[2] : o, void 0 === r) {
if ("number" != typeof e) return a._orientation;
a._orientation = [e, t, o]
}
for (var i = a._getSoundIds(r), p = 0; p < i.length; p++) {
var s = a._soundById(i[p]);
if (s) {
if ("number" != typeof e) return s._orientation;
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)
}
}
return a
}, Howl.prototype.pannerAttr = function () {
var e, t, o, r = this,
a = arguments;
if (!r._webAudio) return r;
if (0 === a.length) return r._pannerAttr;
if (1 === a.length) {
if ("object" != typeof a[0]) return o = r._soundById(parseInt(a[0], 10)), o ? o._pannerAttr : r._pannerAttr;
e = a[0], void 0 === t && (e.pannerAttr || (e.pannerAttr = {
coneInnerAngle: e.coneInnerAngle,
coneOuterAngle: e.coneOuterAngle,
coneOuterGain: e.coneOuterGain,
distanceModel: e.distanceModel,
maxDistance: e.maxDistance,
refDistance: e.refDistance,
rolloffFactor: e.rolloffFactor,
panningModel: e.panningModel
}), r._pannerAttr = {
coneInnerAngle: void 0 !== e.pannerAttr.coneInnerAngle ? e.pannerAttr.coneInnerAngle : r._coneInnerAngle,
coneOuterAngle: void 0 !== e.pannerAttr.coneOuterAngle ? e.pannerAttr.coneOuterAngle : r._coneOuterAngle,
coneOuterGain: void 0 !== e.pannerAttr.coneOuterGain ? e.pannerAttr.coneOuterGain : r._coneOuterGain,
distanceModel: void 0 !== e.pannerAttr.distanceModel ? e.pannerAttr.distanceModel : r._distanceModel,
maxDistance: void 0 !== e.pannerAttr.maxDistance ? e.pannerAttr.maxDistance : r._maxDistance,
refDistance: void 0 !== e.pannerAttr.refDistance ? e.pannerAttr.refDistance : r._refDistance,
rolloffFactor: void 0 !== e.pannerAttr.rolloffFactor ? e.pannerAttr.rolloffFactor : r._rolloffFactor,
panningModel: void 0 !== e.pannerAttr.panningModel ? e.pannerAttr.panningModel : r._panningModel
})
} else 2 === a.length && (e = a[0], t = parseInt(a[1], 10));
for (var i = r._getSoundIds(t), p = 0; p < i.length; p++)
if (o = r._soundById(i[p])) {
var s = o._pannerAttr;
s = {
coneInnerAngle: void 0 !== e.coneInnerAngle ? e.coneInnerAngle : s.coneInnerAngle,
coneOuterAngle: void 0 !== e.coneOuterAngle ? e.coneOuterAngle : s.coneOuterAngle,
coneOuterGain: void 0 !== e.coneOuterGain ? e.coneOuterGain : s.coneOuterGain,
distanceModel: void 0 !== e.distanceModel ? e.distanceModel : s.distanceModel,
maxDistance: void 0 !== e.maxDistance ? e.maxDistance : s.maxDistance,
refDistance: void 0 !== e.refDistance ? e.refDistance : s.refDistance,
rolloffFactor: void 0 !== e.rolloffFactor ? e.rolloffFactor : s.rolloffFactor,
panningModel: void 0 !== e.panningModel ? e.panningModel : s.panningModel
};
var l = o._panner;
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"))
}
return r
}, Sound.prototype.init = function (n) {
return function () {
var e = this,
t = e._parent;
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)
}
}(Sound.prototype.init), Sound.prototype.reset = function (n) {
return function () {
var e = this,
t = e._parent;
return e._orientation = t._orientation, e._pos = t._pos, e._pannerAttr = t._pannerAttr, n.call(this)
}
}(Sound.prototype.reset);
var n = function (n, e) {
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)
}
}();

+ 160
- 0
src/client/plugins/howler.spatial.min.js Visa fil

@@ -0,0 +1,160 @@
/*! howler.js v2.0.9 | Spatial Plugin | (c) 2013-2018, James Simpson of GoldFire Studios | MIT License | howlerjs.com */ ! 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 < a.length; i++) {
var p = o._soundById(a[i]);
if (p) {
if ("number" != typeof e) return p._stereo;
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)
}
}
return o
}, Howl.prototype.pos = function (e, t, o, r) {
var a = this;
if (!a._webAudio) return a;
if ("loaded" !== a._state) return a._queue.push({
event: "pos",
action: function () {
a.pos(e, t, o, r)
}
}), a;
if (t = "number" != typeof t ? 0 : t, o = "number" != typeof o ? -.5 : o, void 0 === r) {
if ("number" != typeof e) return a._pos;
a._pos = [e, t, o]
}
for (var i = a._getSoundIds(r), p = 0; p < i.length; p++) {
var s = a._soundById(i[p]);
if (s) {
if ("number" != typeof e) return s._pos;
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)
}
}
return a
}, Howl.prototype.orientation = function (e, t, o, r) {
var a = this;
if (!a._webAudio) return a;
if ("loaded" !== a._state) return a._queue.push({
event: "orientation",
action: function () {
a.orientation(e, t, o, r)
}
}), a;
if (t = "number" != typeof t ? a._orientation[1] : t, o = "number" != typeof o ? a._orientation[2] : o, void 0 === r) {
if ("number" != typeof e) return a._orientation;
a._orientation = [e, t, o]
}
for (var i = a._getSoundIds(r), p = 0; p < i.length; p++) {
var s = a._soundById(i[p]);
if (s) {
if ("number" != typeof e) return s._orientation;
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)
}
}
return a
}, Howl.prototype.pannerAttr = function () {
var e, t, o, r = this,
a = arguments;
if (!r._webAudio) return r;
if (0 === a.length) return r._pannerAttr;
if (1 === a.length) {
if ("object" != typeof a[0]) return o = r._soundById(parseInt(a[0], 10)), o ? o._pannerAttr : r._pannerAttr;
e = a[0], void 0 === t && (e.pannerAttr || (e.pannerAttr = {
coneInnerAngle: e.coneInnerAngle,
coneOuterAngle: e.coneOuterAngle,
coneOuterGain: e.coneOuterGain,
distanceModel: e.distanceModel,
maxDistance: e.maxDistance,
refDistance: e.refDistance,
rolloffFactor: e.rolloffFactor,
panningModel: e.panningModel
}), r._pannerAttr = {
coneInnerAngle: void 0 !== e.pannerAttr.coneInnerAngle ? e.pannerAttr.coneInnerAngle : r._coneInnerAngle,
coneOuterAngle: void 0 !== e.pannerAttr.coneOuterAngle ? e.pannerAttr.coneOuterAngle : r._coneOuterAngle,
coneOuterGain: void 0 !== e.pannerAttr.coneOuterGain ? e.pannerAttr.coneOuterGain : r._coneOuterGain,
distanceModel: void 0 !== e.pannerAttr.distanceModel ? e.pannerAttr.distanceModel : r._distanceModel,
maxDistance: void 0 !== e.pannerAttr.maxDistance ? e.pannerAttr.maxDistance : r._maxDistance,
refDistance: void 0 !== e.pannerAttr.refDistance ? e.pannerAttr.refDistance : r._refDistance,
rolloffFactor: void 0 !== e.pannerAttr.rolloffFactor ? e.pannerAttr.rolloffFactor : r._rolloffFactor,
panningModel: void 0 !== e.pannerAttr.panningModel ? e.pannerAttr.panningModel : r._panningModel
})
} else 2 === a.length && (e = a[0], t = parseInt(a[1], 10));
for (var i = r._getSoundIds(t), p = 0; p < i.length; p++)
if (o = r._soundById(i[p])) {
var s = o._pannerAttr;
s = {
coneInnerAngle: void 0 !== e.coneInnerAngle ? e.coneInnerAngle : s.coneInnerAngle,
coneOuterAngle: void 0 !== e.coneOuterAngle ? e.coneOuterAngle : s.coneOuterAngle,
coneOuterGain: void 0 !== e.coneOuterGain ? e.coneOuterGain : s.coneOuterGain,
distanceModel: void 0 !== e.distanceModel ? e.distanceModel : s.distanceModel,
maxDistance: void 0 !== e.maxDistance ? e.maxDistance : s.maxDistance,
refDistance: void 0 !== e.refDistance ? e.refDistance : s.refDistance,
rolloffFactor: void 0 !== e.rolloffFactor ? e.rolloffFactor : s.rolloffFactor,
panningModel: void 0 !== e.panningModel ? e.panningModel : s.panningModel
};
var l = o._panner;
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"))
}
return r
}, Sound.prototype.init = function (n) {
return function () {
var e = this,
t = e._parent;
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)
}
}(Sound.prototype.init), Sound.prototype.reset = function (n) {
return function () {
var e = this,
t = e._parent;
return e._orientation = t._orientation, e._pos = t._pos, e._pannerAttr = t._pannerAttr, n.call(this)
}
}(Sound.prototype.reset);
var n = function (n, e) {
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)
}
}();

Laddar…
Avbryt
Spara