{"version":3,"file":"scripts.a468cbc4406f171a.js","mappings":"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","names":["HowlerGlobal","this","init","prototype","self","Howler","_counter","_html5AudioPool","html5PoolSize","_codecs","_howls","_muted","_volume","_canPlayEvent","_navigator","window","navigator","masterGain","noAudio","usingWebAudio","autoSuspend","ctx","autoUnlock","_setup","volume","vol","parseFloat","setupAudioContext","gain","setValueAtTime","currentTime","i","length","_webAudio","ids","_getSoundIds","j","sound","_soundById","_node","mute","muted","stop","unload","close","codecs","ext","replace","state","_autoSuspend","Audio","oncanplaythrough","_setupCodecs","audioTest","canPlayType","mpegTest","ua","userAgent","checkOpera","match","isOldOpera","parseInt","split","checkSafari","indexOf","safariVersion","isOldSafari","mp3","mpeg","opus","ogg","oga","wav","aac","caf","m4a","m4b","mp4","weba","webm","dolby","flac","_unlockAudio","_audioUnlocked","_mobileUnloaded","sampleRate","_scratchBuffer","createBuffer","unlock","e","audioNode","_unlocked","_releaseHtml5Audio","load","_autoResume","source","createBufferSource","buffer","connect","destination","start","noteOn","resume","onended","disconnect","document","removeEventListener","_emit","addEventListener","_obtainHtml5Audio","pop","testPlay","play","Promise","then","catch","console","warn","audio","push","suspend","_sounds","_paused","_suspendTimer","clearTimeout","setTimeout","handleSuspension","_resumeAfterSuspend","Howl","o","src","error","_autoplay","autoplay","_format","format","_html5","html5","_loop","loop","_pool","pool","_preload","preload","_rate","rate","_sprite","sprite","_src","_xhr","method","xhr","headers","withCredentials","_duration","_state","_endTimers","_queue","_playLock","_onend","onend","fn","_onfade","onfade","_onload","onload","_onloaderror","onloaderror","_onplayerror","onplayerror","_onpause","onpause","_onplay","onplay","_onstop","onstop","_onmute","onmute","_onvolume","onvolume","_onrate","onrate","_onseek","onseek","_onunlock","onunlock","_onresume","event","action","url","str","exec","toLowerCase","location","protocol","slice","Sound","loadBuffer","internal","id","num","_ended","_id","_inactiveSound","soundId","_loadQueue","seek","Math","max","_seek","duration","timeout","abs","setParams","_start","_stop","node","playWebAudio","_refreshBuffer","_playStart","bufferSource","noteGrainOn","bind","once","_clearTimer","playHtml5","playbackRate","paused","err","loadedNoReadyState","ejecta","readyState","isCocoonJS","listener","pause","_rateSeek","_stopFade","noteOff","_cleanBuffer","isNaN","arguments","_clearSound","_interval","args","apply","fade","from","to","len","min","end","linearRampToValueAtTime","_startFadeInterval","isGroup","diff","steps","stepLen","lastTick","Date","now","_fadeTo","setInterval","tick","round","clearInterval","cancelScheduledValues","loopStart","loopEnd","playing","realTime","seekAndEmit","emitSeek","sounds","_errorFn","_loadFn","_endFn","index","splice","remCache","cache","on","off","events","isId","keys","Object","Array","isArray","msg","call","task","shift","ended","_drain","reset","limit","cnt","_panner","isIOS","vendor","test","howl","_parent","parent","create","createGain","createGainNode","_errorListener","_loadListener","_endListener","code","ceil","__default","loadSound","data","atob","dataView","Uint8Array","charCodeAt","decodeAudioData","XMLHttpRequest","open","responseType","forEach","key","setRequestHeader","status","response","onerror","safeXhrSend","send","arraybuffer","success","AudioContext","webkitAudioContext","iOS","platform","appVersion","version","safari","define","amd","exports","global","_pos","_orientation","stereo","pan","pos","x","y","z","positionX","setTargetAtTime","positionY","positionZ","setPosition","orientation","xUp","yUp","zUp","or","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","_super","_stereo","_pannerAttr","coneInnerAngle","coneOuterAngle","coneOuterGain","distanceModel","maxDistance","panningModel","refDistance","rolloffFactor","_onstereo","onstereo","_onpos","onpos","_onorientation","onorientation","pannerType","createStereoPanner","setupPanner","orientationX","orientationY","orientationZ","pannerAttr","_coneInnerAngle","_coneOuterAngle","_coneOuterGain","_distanceModel","_maxDistance","_refDistance","_rolloffFactor","_panningModel","pa","panner","type","createPanner"],"sourceRoot":"webpack:///","sources":["node_modules\\howler\\dist\\howler.js"],"sourcesContent":["/*!\n * howler.js v2.2.4\n * howlerjs.com\n *\n * (c) 2013-2020, James Simpson of GoldFire Studios\n * goldfirestudios.com\n *\n * MIT License\n */\n\n(function() {\n\n 'use strict';\n\n /** Global Methods **/\n /***************************************************************************/\n\n /**\n * Create the global controller. All contained methods and properties apply\n * to all sounds that are currently playing or will be in the future.\n */\n var HowlerGlobal = function() {\n this.init();\n };\n HowlerGlobal.prototype = {\n /**\n * Initialize the global Howler object.\n * @return {Howler}\n */\n init: function() {\n var self = this || Howler;\n\n // Create a global ID counter.\n self._counter = 1000;\n\n // Pool of unlocked HTML5 Audio objects.\n self._html5AudioPool = [];\n self.html5PoolSize = 10;\n\n // Internal properties.\n self._codecs = {};\n self._howls = [];\n self._muted = false;\n self._volume = 1;\n self._canPlayEvent = 'canplaythrough';\n self._navigator = (typeof window !== 'undefined' && window.navigator) ? window.navigator : null;\n\n // Public properties.\n self.masterGain = null;\n self.noAudio = false;\n self.usingWebAudio = true;\n self.autoSuspend = true;\n self.ctx = null;\n\n // Set to false to disable the auto audio unlocker.\n self.autoUnlock = true;\n\n // Setup the various state values for global tracking.\n self._setup();\n\n return self;\n },\n\n /**\n * Get/set the global volume for all sounds.\n * @param {Float} vol Volume from 0.0 to 1.0.\n * @return {Howler/Float} Returns self or current volume.\n */\n volume: function(vol) {\n var self = this || Howler;\n vol = parseFloat(vol);\n\n // If we don't have an AudioContext created yet, run the setup.\n if (!self.ctx) {\n setupAudioContext();\n }\n\n if (typeof vol !== 'undefined' && vol >= 0 && vol <= 1) {\n self._volume = vol;\n\n // Don't update any of the nodes if we are muted.\n if (self._muted) {\n return self;\n }\n\n // When using Web Audio, we just need to adjust the master gain.\n if (self.usingWebAudio) {\n self.masterGain.gain.setValueAtTime(vol, Howler.ctx.currentTime);\n }\n\n // Loop through and change volume for all HTML5 audio nodes.\n for (var i=0; i=0; i--) {\n self._howls[i].unload();\n }\n\n // Create a new AudioContext to make sure it is fully reset.\n if (self.usingWebAudio && self.ctx && typeof self.ctx.close !== 'undefined') {\n self.ctx.close();\n self.ctx = null;\n setupAudioContext();\n }\n\n return self;\n },\n\n /**\n * Check for codec support of specific extension.\n * @param {String} ext Audio file extention.\n * @return {Boolean}\n */\n codecs: function(ext) {\n return (this || Howler)._codecs[ext.replace(/^x-/, '')];\n },\n\n /**\n * Setup various state values for global tracking.\n * @return {Howler}\n */\n _setup: function() {\n var self = this || Howler;\n\n // Keeps track of the suspend/resume state of the AudioContext.\n self.state = self.ctx ? self.ctx.state || 'suspended' : 'suspended';\n\n // Automatically begin the 30-second suspend process\n self._autoSuspend();\n\n // Check if audio is available.\n if (!self.usingWebAudio) {\n // No audio is available on this system if noAudio is set to true.\n if (typeof Audio !== 'undefined') {\n try {\n var test = new Audio();\n\n // Check if the canplaythrough event is available.\n if (typeof test.oncanplaythrough === 'undefined') {\n self._canPlayEvent = 'canplay';\n }\n } catch(e) {\n self.noAudio = true;\n }\n } else {\n self.noAudio = true;\n }\n }\n\n // Test to make sure audio isn't disabled in Internet Explorer.\n try {\n var test = new Audio();\n if (test.muted) {\n self.noAudio = true;\n }\n } catch (e) {}\n\n // Check for supported codecs.\n if (!self.noAudio) {\n self._setupCodecs();\n }\n\n return self;\n },\n\n /**\n * Check for browser support for various codecs and cache the results.\n * @return {Howler}\n */\n _setupCodecs: function() {\n var self = this || Howler;\n var audioTest = null;\n\n // Must wrap in a try/catch because IE11 in server mode throws an error.\n try {\n audioTest = (typeof Audio !== 'undefined') ? new Audio() : null;\n } catch (err) {\n return self;\n }\n\n if (!audioTest || typeof audioTest.canPlayType !== 'function') {\n return self;\n }\n\n var mpegTest = audioTest.canPlayType('audio/mpeg;').replace(/^no$/, '');\n\n // Opera version <33 has mixed MP3 support, so we need to check for and block it.\n var ua = self._navigator ? self._navigator.userAgent : '';\n var checkOpera = ua.match(/OPR\\/(\\d+)/g);\n var isOldOpera = (checkOpera && parseInt(checkOpera[0].split('/')[1], 10) < 33);\n var checkSafari = ua.indexOf('Safari') !== -1 && ua.indexOf('Chrome') === -1;\n var safariVersion = ua.match(/Version\\/(.*?) /);\n var isOldSafari = (checkSafari && safariVersion && parseInt(safariVersion[1], 10) < 15);\n\n self._codecs = {\n mp3: !!(!isOldOpera && (mpegTest || audioTest.canPlayType('audio/mp3;').replace(/^no$/, ''))),\n mpeg: !!mpegTest,\n opus: !!audioTest.canPlayType('audio/ogg; codecs=\"opus\"').replace(/^no$/, ''),\n ogg: !!audioTest.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/, ''),\n oga: !!audioTest.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/, ''),\n wav: !!(audioTest.canPlayType('audio/wav; codecs=\"1\"') || audioTest.canPlayType('audio/wav')).replace(/^no$/, ''),\n aac: !!audioTest.canPlayType('audio/aac;').replace(/^no$/, ''),\n caf: !!audioTest.canPlayType('audio/x-caf;').replace(/^no$/, ''),\n m4a: !!(audioTest.canPlayType('audio/x-m4a;') || audioTest.canPlayType('audio/m4a;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n m4b: !!(audioTest.canPlayType('audio/x-m4b;') || audioTest.canPlayType('audio/m4b;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n mp4: !!(audioTest.canPlayType('audio/x-mp4;') || audioTest.canPlayType('audio/mp4;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n weba: !!(!isOldSafari && audioTest.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/, '')),\n webm: !!(!isOldSafari && audioTest.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/, '')),\n dolby: !!audioTest.canPlayType('audio/mp4; codecs=\"ec-3\"').replace(/^no$/, ''),\n flac: !!(audioTest.canPlayType('audio/x-flac;') || audioTest.canPlayType('audio/flac;')).replace(/^no$/, '')\n };\n\n return self;\n },\n\n /**\n * Some browsers/devices will only allow audio to be played after a user interaction.\n * Attempt to automatically unlock audio on the first user interaction.\n * Concept from: http://paulbakaus.com/tutorials/html5/web-audio-on-ios/\n * @return {Howler}\n */\n _unlockAudio: function() {\n var self = this || Howler;\n\n // Only run this if Web Audio is supported and it hasn't already been unlocked.\n if (self._audioUnlocked || !self.ctx) {\n return;\n }\n\n self._audioUnlocked = false;\n self.autoUnlock = false;\n\n // Some mobile devices/platforms have distortion issues when opening/closing tabs and/or web views.\n // Bugs in the browser (especially Mobile Safari) can cause the sampleRate to change from 44100 to 48000.\n // By calling Howler.unload(), we create a new AudioContext with the correct sampleRate.\n if (!self._mobileUnloaded && self.ctx.sampleRate !== 44100) {\n self._mobileUnloaded = true;\n self.unload();\n }\n\n // Scratch buffer for enabling iOS to dispose of web audio buffers correctly, as per:\n // http://stackoverflow.com/questions/24119684\n self._scratchBuffer = self.ctx.createBuffer(1, 1, 22050);\n\n // Call this method on touch start to create and play a buffer,\n // then check if the audio actually played to determine if\n // audio has now been unlocked on iOS, Android, etc.\n var unlock = function(e) {\n // Create a pool of unlocked HTML5 Audio objects that can\n // be used for playing sounds without user interaction. HTML5\n // Audio objects must be individually unlocked, as opposed\n // to the WebAudio API which only needs a single activation.\n // This must occur before WebAudio setup or the source.onended\n // event will not fire.\n while (self._html5AudioPool.length < self.html5PoolSize) {\n try {\n var audioNode = new Audio();\n\n // Mark this Audio object as unlocked to ensure it can get returned\n // to the unlocked pool when released.\n audioNode._unlocked = true;\n\n // Add the audio node to the pool.\n self._releaseHtml5Audio(audioNode);\n } catch (e) {\n self.noAudio = true;\n break;\n }\n }\n\n // Loop through any assigned audio nodes and unlock them.\n for (var i=0; i= 55.\n if (typeof self.ctx.resume === 'function') {\n self.ctx.resume();\n }\n\n // Setup a timeout to check that we are unlocked on the next event loop.\n source.onended = function() {\n source.disconnect(0);\n\n // Update the unlocked state and prevent this check from happening again.\n self._audioUnlocked = true;\n\n // Remove the touch start listener.\n document.removeEventListener('touchstart', unlock, true);\n document.removeEventListener('touchend', unlock, true);\n document.removeEventListener('click', unlock, true);\n document.removeEventListener('keydown', unlock, true);\n\n // Let all sounds know that audio has been unlocked.\n for (var i=0; i 0 ? sound._seek : self._sprite[sprite][0] / 1000);\n var duration = Math.max(0, ((self._sprite[sprite][0] + self._sprite[sprite][1]) / 1000) - seek);\n var timeout = (duration * 1000) / Math.abs(sound._rate);\n var start = self._sprite[sprite][0] / 1000;\n var stop = (self._sprite[sprite][0] + self._sprite[sprite][1]) / 1000;\n sound._sprite = sprite;\n\n // Mark the sound as ended instantly so that this async playback\n // doesn't get grabbed by another call to play while this one waits to start.\n sound._ended = false;\n\n // Update the parameters of the sound.\n var setParams = function() {\n sound._paused = false;\n sound._seek = seek;\n sound._start = start;\n sound._stop = stop;\n sound._loop = !!(sound._loop || self._sprite[sprite][2]);\n };\n\n // End the sound instantly if seek is at the end.\n if (seek >= stop) {\n self._ended(sound);\n return;\n }\n\n // Begin the actual playback.\n var node = sound._node;\n if (self._webAudio) {\n // Fire this when the sound is ready to play to begin Web Audio playback.\n var playWebAudio = function() {\n self._playLock = false;\n setParams();\n self._refreshBuffer(sound);\n\n // Setup the playback params.\n var vol = (sound._muted || self._muted) ? 0 : sound._volume;\n node.gain.setValueAtTime(vol, Howler.ctx.currentTime);\n sound._playStart = Howler.ctx.currentTime;\n\n // Play the sound using the supported method.\n if (typeof node.bufferSource.start === 'undefined') {\n sound._loop ? node.bufferSource.noteGrainOn(0, seek, 86400) : node.bufferSource.noteGrainOn(0, seek, duration);\n } else {\n sound._loop ? node.bufferSource.start(0, seek, 86400) : node.bufferSource.start(0, seek, duration);\n }\n\n // Start a new timer if none is present.\n if (timeout !== Infinity) {\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n }\n\n if (!internal) {\n setTimeout(function() {\n self._emit('play', sound._id);\n self._loadQueue();\n }, 0);\n }\n };\n\n if (Howler.state === 'running' && Howler.ctx.state !== 'interrupted') {\n playWebAudio();\n } else {\n self._playLock = true;\n\n // Wait for the audio context to resume before playing.\n self.once('resume', playWebAudio);\n\n // Cancel the end timer.\n self._clearTimer(sound._id);\n }\n } else {\n // Fire this when the sound is ready to play to begin HTML5 Audio playback.\n var playHtml5 = function() {\n node.currentTime = seek;\n node.muted = sound._muted || self._muted || Howler._muted || node.muted;\n node.volume = sound._volume * Howler.volume();\n node.playbackRate = sound._rate;\n\n // Some browsers will throw an error if this is called without user interaction.\n try {\n var play = node.play();\n\n // Support older browsers that don't support promises, and thus don't have this issue.\n if (play && typeof Promise !== 'undefined' && (play instanceof Promise || typeof play.then === 'function')) {\n // Implements a lock to prevent DOMException: The play() request was interrupted by a call to pause().\n self._playLock = true;\n\n // Set param values immediately.\n setParams();\n\n // Releases the lock and executes queued actions.\n play\n .then(function() {\n self._playLock = false;\n node._unlocked = true;\n if (!internal) {\n self._emit('play', sound._id);\n } else {\n self._loadQueue();\n }\n })\n .catch(function() {\n self._playLock = false;\n self._emit('playerror', sound._id, 'Playback was unable to start. This is most commonly an issue ' +\n 'on mobile devices and Chrome where playback was not within a user interaction.');\n\n // Reset the ended and paused values.\n sound._ended = true;\n sound._paused = true;\n });\n } else if (!internal) {\n self._playLock = false;\n setParams();\n self._emit('play', sound._id);\n }\n\n // Setting rate before playing won't work in IE, so we set it again here.\n node.playbackRate = sound._rate;\n\n // If the node is still paused, then we can assume there was a playback issue.\n if (node.paused) {\n self._emit('playerror', sound._id, 'Playback was unable to start. This is most commonly an issue ' +\n 'on mobile devices and Chrome where playback was not within a user interaction.');\n return;\n }\n\n // Setup the end timer on sprites or listen for the ended event.\n if (sprite !== '__default' || sound._loop) {\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n } else {\n self._endTimers[sound._id] = function() {\n // Fire ended on this audio node.\n self._ended(sound);\n\n // Clear this listener.\n node.removeEventListener('ended', self._endTimers[sound._id], false);\n };\n node.addEventListener('ended', self._endTimers[sound._id], false);\n }\n } catch (err) {\n self._emit('playerror', sound._id, err);\n }\n };\n\n // If this is streaming audio, make sure the src is set and load again.\n if (node.src === 'data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA') {\n node.src = self._src;\n node.load();\n }\n\n // Play immediately if ready, or wait for the 'canplaythrough'e vent.\n var loadedNoReadyState = (window && window.ejecta) || (!node.readyState && Howler._navigator.isCocoonJS);\n if (node.readyState >= 3 || loadedNoReadyState) {\n playHtml5();\n } else {\n self._playLock = true;\n self._state = 'loading';\n\n var listener = function() {\n self._state = 'loaded';\n \n // Begin playback.\n playHtml5();\n\n // Clear this listener.\n node.removeEventListener(Howler._canPlayEvent, listener, false);\n };\n node.addEventListener(Howler._canPlayEvent, listener, false);\n\n // Cancel the end timer.\n self._clearTimer(sound._id);\n }\n }\n\n return sound._id;\n },\n\n /**\n * Pause playback and save current position.\n * @param {Number} id The sound ID (empty to pause all in group).\n * @return {Howl}\n */\n pause: function(id) {\n var self = this;\n\n // If the sound hasn't loaded or a play() promise is pending, add it to the load queue to pause when capable.\n if (self._state !== 'loaded' || self._playLock) {\n self._queue.push({\n event: 'pause',\n action: function() {\n self.pause(id);\n }\n });\n\n return self;\n }\n\n // If no id is passed, get all ID's to be paused.\n var ids = self._getSoundIds(id);\n\n for (var i=0; i Returns the group's volume value.\n * volume(id) -> Returns the sound id's current volume.\n * volume(vol) -> Sets the volume of all sounds in this Howl group.\n * volume(vol, id) -> Sets the volume of passed sound id.\n * @return {Howl/Number} Returns self or current volume.\n */\n volume: function() {\n var self = this;\n var args = arguments;\n var vol, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // Return the value of the groups' volume.\n return self._volume;\n } else if (args.length === 1 || args.length === 2 && typeof args[1] === 'undefined') {\n // First check if this is an ID, and if not, assume it is a new volume.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else {\n vol = parseFloat(args[0]);\n }\n } else if (args.length >= 2) {\n vol = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // Update the volume or return the current volume.\n var sound;\n if (typeof vol !== 'undefined' && vol >= 0 && vol <= 1) {\n // If the sound hasn't loaded, add it to the load queue to change volume when capable.\n if (self._state !== 'loaded'|| self._playLock) {\n self._queue.push({\n event: 'volume',\n action: function() {\n self.volume.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Set the group volume.\n if (typeof id === 'undefined') {\n self._volume = vol;\n }\n\n // Update one or all volumes.\n id = self._getSoundIds(id);\n for (var i=0; i 0) ? len / steps : len);\n var lastTick = Date.now();\n\n // Store the value being faded to.\n sound._fadeTo = to;\n\n // Update the volume value on each interval tick.\n sound._interval = setInterval(function() {\n // Update the volume based on the time since the last tick.\n var tick = (Date.now() - lastTick) / len;\n lastTick = Date.now();\n vol += diff * tick;\n\n // Round to within 2 decimal points.\n vol = Math.round(vol * 100) / 100;\n\n // Make sure the volume is in the right bounds.\n if (diff < 0) {\n vol = Math.max(to, vol);\n } else {\n vol = Math.min(to, vol);\n }\n\n // Change the volume.\n if (self._webAudio) {\n sound._volume = vol;\n } else {\n self.volume(vol, sound._id, true);\n }\n\n // Set the group's volume.\n if (isGroup) {\n self._volume = vol;\n }\n\n // When the fade is complete, stop it and fire event.\n if ((to < from && vol <= to) || (to > from && vol >= to)) {\n clearInterval(sound._interval);\n sound._interval = null;\n sound._fadeTo = null;\n self.volume(to, sound._id);\n self._emit('fade', sound._id);\n }\n }, stepLen);\n },\n\n /**\n * Internal method that stops the currently playing fade when\n * a new fade starts, volume is changed or the sound is stopped.\n * @param {Number} id The sound id.\n * @return {Howl}\n */\n _stopFade: function(id) {\n var self = this;\n var sound = self._soundById(id);\n\n if (sound && sound._interval) {\n if (self._webAudio) {\n sound._node.gain.cancelScheduledValues(Howler.ctx.currentTime);\n }\n\n clearInterval(sound._interval);\n sound._interval = null;\n self.volume(sound._fadeTo, id);\n sound._fadeTo = null;\n self._emit('fade', id);\n }\n\n return self;\n },\n\n /**\n * Get/set the loop parameter on a sound. This method can optionally take 0, 1 or 2 arguments.\n * loop() -> Returns the group's loop value.\n * loop(id) -> Returns the sound id's loop value.\n * loop(loop) -> Sets the loop value for all sounds in this Howl group.\n * loop(loop, id) -> Sets the loop value of passed sound id.\n * @return {Howl/Boolean} Returns self or current loop value.\n */\n loop: function() {\n var self = this;\n var args = arguments;\n var loop, id, sound;\n\n // Determine the values for loop and id.\n if (args.length === 0) {\n // Return the grou's loop value.\n return self._loop;\n } else if (args.length === 1) {\n if (typeof args[0] === 'boolean') {\n loop = args[0];\n self._loop = loop;\n } else {\n // Return this sound's loop value.\n sound = self._soundById(parseInt(args[0], 10));\n return sound ? sound._loop : false;\n }\n } else if (args.length === 2) {\n loop = args[0];\n id = parseInt(args[1], 10);\n }\n\n // If no id is passed, get all ID's to be looped.\n var ids = self._getSoundIds(id);\n for (var i=0; i Returns the first sound node's current playback rate.\n * rate(id) -> Returns the sound id's current playback rate.\n * rate(rate) -> Sets the playback rate of all sounds in this Howl group.\n * rate(rate, id) -> Sets the playback rate of passed sound id.\n * @return {Howl/Number} Returns self or the current playback rate.\n */\n rate: function() {\n var self = this;\n var args = arguments;\n var rate, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // We will simply return the current rate of the first node.\n id = self._sounds[0]._id;\n } else if (args.length === 1) {\n // First check if this is an ID, and if not, assume it is a new rate value.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else {\n rate = parseFloat(args[0]);\n }\n } else if (args.length === 2) {\n rate = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // Update the playback rate or return the current value.\n var sound;\n if (typeof rate === 'number') {\n // If the sound hasn't loaded, add it to the load queue to change playback rate when capable.\n if (self._state !== 'loaded' || self._playLock) {\n self._queue.push({\n event: 'rate',\n action: function() {\n self.rate.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Set the group rate.\n if (typeof id === 'undefined') {\n self._rate = rate;\n }\n\n // Update one or all volumes.\n id = self._getSoundIds(id);\n for (var i=0; i Returns the first sound node's current seek position.\n * seek(id) -> Returns the sound id's current seek position.\n * seek(seek) -> Sets the seek position of the first sound node.\n * seek(seek, id) -> Sets the seek position of passed sound id.\n * @return {Howl/Number} Returns self or the current seek position.\n */\n seek: function() {\n var self = this;\n var args = arguments;\n var seek, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // We will simply return the current position of the first node.\n if (self._sounds.length) {\n id = self._sounds[0]._id;\n }\n } else if (args.length === 1) {\n // First check if this is an ID, and if not, assume it is a new seek position.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else if (self._sounds.length) {\n id = self._sounds[0]._id;\n seek = parseFloat(args[0]);\n }\n } else if (args.length === 2) {\n seek = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // If there is no ID, bail out.\n if (typeof id === 'undefined') {\n return 0;\n }\n\n // If the sound hasn't loaded, add it to the load queue to seek when capable.\n if (typeof seek === 'number' && (self._state !== 'loaded' || self._playLock)) {\n self._queue.push({\n event: 'seek',\n action: function() {\n self.seek.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Get the sound.\n var sound = self._soundById(id);\n\n if (sound) {\n if (typeof seek === 'number' && seek >= 0) {\n // Pause the sound and update position for restarting playback.\n var playing = self.playing(id);\n if (playing) {\n self.pause(id, true);\n }\n\n // Move the position of the track and cancel timer.\n sound._seek = seek;\n sound._ended = false;\n self._clearTimer(id);\n\n // Update the seek position for HTML5 Audio.\n if (!self._webAudio && sound._node && !isNaN(sound._node.duration)) {\n sound._node.currentTime = seek;\n }\n\n // Seek and emit when ready.\n var seekAndEmit = function() {\n // Restart the playback if the sound was playing.\n if (playing) {\n self.play(id, true);\n }\n\n self._emit('seek', id);\n };\n\n // Wait for the play lock to be unset before emitting (HTML5 Audio).\n if (playing && !self._webAudio) {\n var emitSeek = function() {\n if (!self._playLock) {\n seekAndEmit();\n } else {\n setTimeout(emitSeek, 0);\n }\n };\n setTimeout(emitSeek, 0);\n } else {\n seekAndEmit();\n }\n } else {\n if (self._webAudio) {\n var realTime = self.playing(id) ? Howler.ctx.currentTime - sound._playStart : 0;\n var rateSeek = sound._rateSeek ? sound._rateSeek - sound._seek : 0;\n return sound._seek + (rateSeek + realTime * Math.abs(sound._rate));\n } else {\n return sound._node.currentTime;\n }\n }\n }\n\n return self;\n },\n\n /**\n * Check if a specific sound is currently playing or not (if id is provided), or check if at least one of the sounds in the group is playing or not.\n * @param {Number} id The sound id to check. If none is passed, the whole sound group is checked.\n * @return {Boolean} True if playing and false if not.\n */\n playing: function(id) {\n var self = this;\n\n // Check the passed sound ID (if any).\n if (typeof id === 'number') {\n var sound = self._soundById(id);\n return sound ? !sound._paused : false;\n }\n\n // Otherwise, loop through all sounds and check if any are playing.\n for (var i=0; i= 0) {\n Howler._howls.splice(index, 1);\n }\n\n // Delete this sound from the cache (if no other Howl is using it).\n var remCache = true;\n for (i=0; i= 0) {\n remCache = false;\n break;\n }\n }\n\n if (cache && remCache) {\n delete cache[self._src];\n }\n\n // Clear global errors.\n Howler.noAudio = false;\n\n // Clear out `self`.\n self._state = 'unloaded';\n self._sounds = [];\n self = null;\n\n return null;\n },\n\n /**\n * Listen to a custom event.\n * @param {String} event Event name.\n * @param {Function} fn Listener to call.\n * @param {Number} id (optional) Only listen to events for this sound.\n * @param {Number} once (INTERNAL) Marks event to fire only once.\n * @return {Howl}\n */\n on: function(event, fn, id, once) {\n var self = this;\n var events = self['_on' + event];\n\n if (typeof fn === 'function') {\n events.push(once ? {id: id, fn: fn, once: once} : {id: id, fn: fn});\n }\n\n return self;\n },\n\n /**\n * Remove a custom event. Call without parameters to remove all events.\n * @param {String} event Event name.\n * @param {Function} fn Listener to remove. Leave empty to remove all.\n * @param {Number} id (optional) Only remove events for this sound.\n * @return {Howl}\n */\n off: function(event, fn, id) {\n var self = this;\n var events = self['_on' + event];\n var i = 0;\n\n // Allow passing just an event and ID.\n if (typeof fn === 'number') {\n id = fn;\n fn = null;\n }\n\n if (fn || id) {\n // Loop through event store and remove the passed function.\n for (i=0; i=0; i--) {\n // Only fire the listener if the correct ID is used.\n if (!events[i].id || events[i].id === id || event === 'load') {\n setTimeout(function(fn) {\n fn.call(this, id, msg);\n }.bind(self, events[i].fn), 0);\n\n // If this event was setup with `once`, remove it.\n if (events[i].once) {\n self.off(event, events[i].fn, events[i].id);\n }\n }\n }\n\n // Pass the event type into load queue so that it can continue stepping.\n self._loadQueue(event);\n\n return self;\n },\n\n /**\n * Queue of actions initiated before the sound has loaded.\n * These will be called in sequence, with the next only firing\n * after the previous has finished executing (even if async like play).\n * @return {Howl}\n */\n _loadQueue: function(event) {\n var self = this;\n\n if (self._queue.length > 0) {\n var task = self._queue[0];\n\n // Remove this task if a matching event was passed.\n if (task.event === event) {\n self._queue.shift();\n self._loadQueue();\n }\n\n // Run the task if no event type is passed.\n if (!event) {\n task.action();\n }\n }\n\n return self;\n },\n\n /**\n * Fired when playback ends at the end of the duration.\n * @param {Sound} sound The sound object to work with.\n * @return {Howl}\n */\n _ended: function(sound) {\n var self = this;\n var sprite = sound._sprite;\n\n // If we are using IE and there was network latency we may be clipping\n // audio before it completes playing. Lets check the node to make sure it\n // believes it has completed, before ending the playback.\n if (!self._webAudio && sound._node && !sound._node.paused && !sound._node.ended && sound._node.currentTime < sound._stop) {\n setTimeout(self._ended.bind(self, sound), 100);\n return self;\n }\n\n // Should this sound loop?\n var loop = !!(sound._loop || self._sprite[sprite][2]);\n\n // Fire the ended event.\n self._emit('end', sound._id);\n\n // Restart the playback for HTML5 Audio loop.\n if (!self._webAudio && loop) {\n self.stop(sound._id, true).play(sound._id);\n }\n\n // Restart this timer if on a Web Audio loop.\n if (self._webAudio && loop) {\n self._emit('play', sound._id);\n sound._seek = sound._start || 0;\n sound._rateSeek = 0;\n sound._playStart = Howler.ctx.currentTime;\n\n var timeout = ((sound._stop - sound._start) * 1000) / Math.abs(sound._rate);\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n }\n\n // Mark the node as paused.\n if (self._webAudio && !loop) {\n sound._paused = true;\n sound._ended = true;\n sound._seek = sound._start || 0;\n sound._rateSeek = 0;\n self._clearTimer(sound._id);\n\n // Clean up the buffer source.\n self._cleanBuffer(sound._node);\n\n // Attempt to auto-suspend AudioContext if no sounds are still playing.\n Howler._autoSuspend();\n }\n\n // When using a sprite, end the track.\n if (!self._webAudio && !loop) {\n self.stop(sound._id, true);\n }\n\n return self;\n },\n\n /**\n * Clear the end timer for a sound playback.\n * @param {Number} id The sound ID.\n * @return {Howl}\n */\n _clearTimer: function(id) {\n var self = this;\n\n if (self._endTimers[id]) {\n // Clear the timeout or remove the ended listener.\n if (typeof self._endTimers[id] !== 'function') {\n clearTimeout(self._endTimers[id]);\n } else {\n var sound = self._soundById(id);\n if (sound && sound._node) {\n sound._node.removeEventListener('ended', self._endTimers[id], false);\n }\n }\n\n delete self._endTimers[id];\n }\n\n return self;\n },\n\n /**\n * Return the sound identified by this ID, or return null.\n * @param {Number} id Sound ID\n * @return {Object} Sound object or null.\n */\n _soundById: function(id) {\n var self = this;\n\n // Loop through all sounds and find the one with this ID.\n for (var i=0; i=0; i--) {\n if (cnt <= limit) {\n return;\n }\n\n if (self._sounds[i]._ended) {\n // Disconnect the audio source when using Web Audio.\n if (self._webAudio && self._sounds[i]._node) {\n self._sounds[i]._node.disconnect(0);\n }\n\n // Remove sounds until we have the pool size.\n self._sounds.splice(i, 1);\n cnt--;\n }\n }\n },\n\n /**\n * Get all ID's from the sounds pool.\n * @param {Number} id Only return one ID if one is passed.\n * @return {Array} Array of IDs.\n */\n _getSoundIds: function(id) {\n var self = this;\n\n if (typeof id === 'undefined') {\n var ids = [];\n for (var i=0; i= 0;\n\n if (!node.bufferSource) {\n return self;\n }\n\n if (Howler._scratchBuffer && node.bufferSource) {\n node.bufferSource.onended = null;\n node.bufferSource.disconnect(0);\n if (isIOS) {\n try { node.bufferSource.buffer = Howler._scratchBuffer; } catch(e) {}\n }\n }\n node.bufferSource = null;\n\n return self;\n },\n\n /**\n * Set the source to a 0-second silence to stop any downloading (except in IE).\n * @param {Object} node Audio node to clear.\n */\n _clearSound: function(node) {\n var checkIE = /MSIE |Trident\\//.test(Howler._navigator && Howler._navigator.userAgent);\n if (!checkIE) {\n node.src = 'data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA';\n }\n }\n };\n\n /** Single Sound Methods **/\n /***************************************************************************/\n\n /**\n * Setup the sound object, which each node attached to a Howl group is contained in.\n * @param {Object} howl The Howl parent group.\n */\n var Sound = function(howl) {\n this._parent = howl;\n this.init();\n };\n Sound.prototype = {\n /**\n * Initialize a new Sound object.\n * @return {Sound}\n */\n init: function() {\n var self = this;\n var parent = self._parent;\n\n // Setup the default parameters.\n self._muted = parent._muted;\n self._loop = parent._loop;\n self._volume = parent._volume;\n self._rate = parent._rate;\n self._seek = 0;\n self._paused = true;\n self._ended = true;\n self._sprite = '__default';\n\n // Generate a unique ID for this sound.\n self._id = ++Howler._counter;\n\n // Add itself to the parent's pool.\n parent._sounds.push(self);\n\n // Create the new node.\n self.create();\n\n return self;\n },\n\n /**\n * Create and setup a new sound object, whether HTML5 Audio or Web Audio.\n * @return {Sound}\n */\n create: function() {\n var self = this;\n var parent = self._parent;\n var volume = (Howler._muted || self._muted || self._parent._muted) ? 0 : self._volume;\n\n if (parent._webAudio) {\n // Create the gain node for controlling volume (the source will connect to this).\n self._node = (typeof Howler.ctx.createGain === 'undefined') ? Howler.ctx.createGainNode() : Howler.ctx.createGain();\n self._node.gain.setValueAtTime(volume, Howler.ctx.currentTime);\n self._node.paused = true;\n self._node.connect(Howler.masterGain);\n } else if (!Howler.noAudio) {\n // Get an unlocked Audio object from the pool.\n self._node = Howler._obtainHtml5Audio();\n\n // Listen for errors (http://dev.w3.org/html5/spec-author-view/spec.html#mediaerror).\n self._errorFn = self._errorListener.bind(self);\n self._node.addEventListener('error', self._errorFn, false);\n\n // Listen for 'canplaythrough' event to let us know the sound is ready.\n self._loadFn = self._loadListener.bind(self);\n self._node.addEventListener(Howler._canPlayEvent, self._loadFn, false);\n\n // Listen for the 'ended' event on the sound to account for edge-case where\n // a finite sound has a duration of Infinity.\n self._endFn = self._endListener.bind(self);\n self._node.addEventListener('ended', self._endFn, false);\n\n // Setup the new audio node.\n self._node.src = parent._src;\n self._node.preload = parent._preload === true ? 'auto' : parent._preload;\n self._node.volume = volume * Howler.volume();\n\n // Begin loading the source.\n self._node.load();\n }\n\n return self;\n },\n\n /**\n * Reset the parameters of this sound to the original state (for recycle).\n * @return {Sound}\n */\n reset: function() {\n var self = this;\n var parent = self._parent;\n\n // Reset all of the parameters of this sound.\n self._muted = parent._muted;\n self._loop = parent._loop;\n self._volume = parent._volume;\n self._rate = parent._rate;\n self._seek = 0;\n self._rateSeek = 0;\n self._paused = true;\n self._ended = true;\n self._sprite = '__default';\n\n // Generate a new ID so that it isn't confused with the previous sound.\n self._id = ++Howler._counter;\n\n return self;\n },\n\n /**\n * HTML5 Audio error listener callback.\n */\n _errorListener: function() {\n var self = this;\n\n // Fire an error event and pass back the code.\n self._parent._emit('loaderror', self._id, self._node.error ? self._node.error.code : 0);\n\n // Clear the event listener.\n self._node.removeEventListener('error', self._errorFn, false);\n },\n\n /**\n * HTML5 Audio canplaythrough listener callback.\n */\n _loadListener: function() {\n var self = this;\n var parent = self._parent;\n\n // Round up the duration to account for the lower precision in HTML5 Audio.\n parent._duration = Math.ceil(self._node.duration * 10) / 10;\n\n // Setup a sprite if none is defined.\n if (Object.keys(parent._sprite).length === 0) {\n parent._sprite = {__default: [0, parent._duration * 1000]};\n }\n\n if (parent._state !== 'loaded') {\n parent._state = 'loaded';\n parent._emit('load');\n parent._loadQueue();\n }\n\n // Clear the event listener.\n self._node.removeEventListener(Howler._canPlayEvent, self._loadFn, false);\n },\n\n /**\n * HTML5 Audio ended listener callback.\n */\n _endListener: function() {\n var self = this;\n var parent = self._parent;\n\n // Only handle the `ended`` event if the duration is Infinity.\n if (parent._duration === Infinity) {\n // Update the parent duration to match the real audio duration.\n // Round up the duration to account for the lower precision in HTML5 Audio.\n parent._duration = Math.ceil(self._node.duration * 10) / 10;\n\n // Update the sprite that corresponds to the real duration.\n if (parent._sprite.__default[1] === Infinity) {\n parent._sprite.__default[1] = parent._duration * 1000;\n }\n\n // Run the regular ended method.\n parent._ended(self);\n }\n\n // Clear the event listener since the duration is now correct.\n self._node.removeEventListener('ended', self._endFn, false);\n }\n };\n\n /** Helper Methods **/\n /***************************************************************************/\n\n var cache = {};\n\n /**\n * Buffer a sound from URL, Data URI or cache and decode to audio source (Web Audio API).\n * @param {Howl} self\n */\n var loadBuffer = function(self) {\n var url = self._src;\n\n // Check if the buffer has already been cached and use it instead.\n if (cache[url]) {\n // Set the duration from the cache.\n self._duration = cache[url].duration;\n\n // Load the sound into this Howl.\n loadSound(self);\n\n return;\n }\n\n if (/^data:[^;]+;base64,/.test(url)) {\n // Decode the base64 data URI without XHR, since some browsers don't support it.\n var data = atob(url.split(',')[1]);\n var dataView = new Uint8Array(data.length);\n for (var i=0; i 0) {\n cache[self._src] = buffer;\n loadSound(self, buffer);\n } else {\n error();\n }\n };\n\n // Decode the buffer into an audio source.\n if (typeof Promise !== 'undefined' && Howler.ctx.decodeAudioData.length === 1) {\n Howler.ctx.decodeAudioData(arraybuffer).then(success).catch(error);\n } else {\n Howler.ctx.decodeAudioData(arraybuffer, success, error);\n }\n }\n\n /**\n * Sound is now loaded, so finish setting everything up and fire the loaded event.\n * @param {Howl} self\n * @param {Object} buffer The decoded buffer sound source.\n */\n var loadSound = function(self, buffer) {\n // Set the duration.\n if (buffer && !self._duration) {\n self._duration = buffer.duration;\n }\n\n // Setup a sprite if none is defined.\n if (Object.keys(self._sprite).length === 0) {\n self._sprite = {__default: [0, self._duration * 1000]};\n }\n\n // Fire the loaded event.\n if (self._state !== 'loaded') {\n self._state = 'loaded';\n self._emit('load');\n self._loadQueue();\n }\n };\n\n /**\n * Setup the audio context when available, or switch to HTML5 Audio mode.\n */\n var setupAudioContext = function() {\n // If we have already detected that Web Audio isn't supported, don't run this step again.\n if (!Howler.usingWebAudio) {\n return;\n }\n\n // Check if we are using Web Audio and setup the AudioContext if we are.\n try {\n if (typeof AudioContext !== 'undefined') {\n Howler.ctx = new AudioContext();\n } else if (typeof webkitAudioContext !== 'undefined') {\n Howler.ctx = new webkitAudioContext();\n } else {\n Howler.usingWebAudio = false;\n }\n } catch(e) {\n Howler.usingWebAudio = false;\n }\n\n // If the audio context creation still failed, set using web audio to false.\n if (!Howler.ctx) {\n Howler.usingWebAudio = false;\n }\n\n // Check if a webview is being used on iOS8 or earlier (rather than the browser).\n // If it is, disable Web Audio as it causes crashing.\n var iOS = (/iP(hone|od|ad)/.test(Howler._navigator && Howler._navigator.platform));\n var appVersion = Howler._navigator && Howler._navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n var version = appVersion ? parseInt(appVersion[1], 10) : null;\n if (iOS && version && version < 9) {\n var safari = /safari/.test(Howler._navigator && Howler._navigator.userAgent.toLowerCase());\n if (Howler._navigator && !safari) {\n Howler.usingWebAudio = false;\n }\n }\n\n // Create and expose the master GainNode when using Web Audio (useful for plugins or advanced usage).\n if (Howler.usingWebAudio) {\n Howler.masterGain = (typeof Howler.ctx.createGain === 'undefined') ? Howler.ctx.createGainNode() : Howler.ctx.createGain();\n Howler.masterGain.gain.setValueAtTime(Howler._muted ? 0 : Howler._volume, Howler.ctx.currentTime);\n Howler.masterGain.connect(Howler.ctx.destination);\n }\n\n // Re-run the setup on Howler.\n Howler._setup();\n };\n\n // Add support for AMD (Asynchronous Module Definition) libraries such as require.js.\n if (typeof define === 'function' && define.amd) {\n define([], function() {\n return {\n Howler: Howler,\n Howl: Howl\n };\n });\n }\n\n // Add support for CommonJS libraries such as browserify.\n if (typeof exports !== 'undefined') {\n exports.Howler = Howler;\n exports.Howl = Howl;\n }\n\n // Add to global in Node.js (for testing, etc).\n if (typeof global !== 'undefined') {\n global.HowlerGlobal = HowlerGlobal;\n global.Howler = Howler;\n global.Howl = Howl;\n global.Sound = Sound;\n } else if (typeof window !== 'undefined') { // Define globally in case AMD is not available or unused.\n window.HowlerGlobal = HowlerGlobal;\n window.Howler = Howler;\n window.Howl = Howl;\n window.Sound = Sound;\n }\n})();\n\n\n/*!\n * Spatial Plugin - Adds support for stereo and 3D audio where Web Audio is supported.\n * \n * howler.js v2.2.4\n * howlerjs.com\n *\n * (c) 2013-2020, James Simpson of GoldFire Studios\n * goldfirestudios.com\n *\n * MIT License\n */\n\n(function() {\n\n 'use strict';\n\n // Setup default properties.\n HowlerGlobal.prototype._pos = [0, 0, 0];\n HowlerGlobal.prototype._orientation = [0, 0, -1, 0, 1, 0];\n\n /** Global Methods **/\n /***************************************************************************/\n\n /**\n * Helper method to update the stereo panning position of all current Howls.\n * Future Howls will not use this value unless explicitly set.\n * @param {Number} pan A value of -1.0 is all the way left and 1.0 is all the way right.\n * @return {Howler/Number} Self or current stereo panning value.\n */\n HowlerGlobal.prototype.stereo = function(pan) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Loop through all Howls and update their stereo panning.\n for (var i=self._howls.length-1; i>=0; i--) {\n self._howls[i].stereo(pan);\n }\n\n return self;\n };\n\n /**\n * Get/set the position of the listener in 3D cartesian space. Sounds using\n * 3D position will be relative to the listener's position.\n * @param {Number} x The x-position of the listener.\n * @param {Number} y The y-position of the listener.\n * @param {Number} z The z-position of the listener.\n * @return {Howler/Array} Self or current listener position.\n */\n HowlerGlobal.prototype.pos = function(x, y, z) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Set the defaults for optional 'y' & 'z'.\n y = (typeof y !== 'number') ? self._pos[1] : y;\n z = (typeof z !== 'number') ? self._pos[2] : z;\n\n if (typeof x === 'number') {\n self._pos = [x, y, z];\n\n if (typeof self.ctx.listener.positionX !== 'undefined') {\n self.ctx.listener.positionX.setTargetAtTime(self._pos[0], Howler.ctx.currentTime, 0.1);\n self.ctx.listener.positionY.setTargetAtTime(self._pos[1], Howler.ctx.currentTime, 0.1);\n self.ctx.listener.positionZ.setTargetAtTime(self._pos[2], Howler.ctx.currentTime, 0.1);\n } else {\n self.ctx.listener.setPosition(self._pos[0], self._pos[1], self._pos[2]);\n }\n } else {\n return self._pos;\n }\n\n return self;\n };\n\n /**\n * Get/set the direction the listener is pointing in the 3D cartesian space.\n * A front and up vector must be provided. The front is the direction the\n * face of the listener is pointing, and up is the direction the top of the\n * listener is pointing. Thus, these values are expected to be at right angles\n * from each other.\n * @param {Number} x The x-orientation of the listener.\n * @param {Number} y The y-orientation of the listener.\n * @param {Number} z The z-orientation of the listener.\n * @param {Number} xUp The x-orientation of the top of the listener.\n * @param {Number} yUp The y-orientation of the top of the listener.\n * @param {Number} zUp The z-orientation of the top of the listener.\n * @return {Howler/Array} Returns self or the current orientation vectors.\n */\n HowlerGlobal.prototype.orientation = function(x, y, z, xUp, yUp, zUp) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Set the defaults for optional 'y' & 'z'.\n var or = self._orientation;\n y = (typeof y !== 'number') ? or[1] : y;\n z = (typeof z !== 'number') ? or[2] : z;\n xUp = (typeof xUp !== 'number') ? or[3] : xUp;\n yUp = (typeof yUp !== 'number') ? or[4] : yUp;\n zUp = (typeof zUp !== 'number') ? or[5] : zUp;\n\n if (typeof x === 'number') {\n self._orientation = [x, y, z, xUp, yUp, zUp];\n\n if (typeof self.ctx.listener.forwardX !== 'undefined') {\n self.ctx.listener.forwardX.setTargetAtTime(x, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.forwardY.setTargetAtTime(y, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.forwardZ.setTargetAtTime(z, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upX.setTargetAtTime(xUp, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upY.setTargetAtTime(yUp, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upZ.setTargetAtTime(zUp, Howler.ctx.currentTime, 0.1);\n } else {\n self.ctx.listener.setOrientation(x, y, z, xUp, yUp, zUp);\n }\n } else {\n return or;\n }\n\n return self;\n };\n\n /** Group Methods **/\n /***************************************************************************/\n\n /**\n * Add new properties to the core init.\n * @param {Function} _super Core init method.\n * @return {Howl}\n */\n Howl.prototype.init = (function(_super) {\n return function(o) {\n var self = this;\n\n // Setup user-defined default properties.\n self._orientation = o.orientation || [1, 0, 0];\n self._stereo = o.stereo || null;\n self._pos = o.pos || null;\n self._pannerAttr = {\n coneInnerAngle: typeof o.coneInnerAngle !== 'undefined' ? o.coneInnerAngle : 360,\n coneOuterAngle: typeof o.coneOuterAngle !== 'undefined' ? o.coneOuterAngle : 360,\n coneOuterGain: typeof o.coneOuterGain !== 'undefined' ? o.coneOuterGain : 0,\n distanceModel: typeof o.distanceModel !== 'undefined' ? o.distanceModel : 'inverse',\n maxDistance: typeof o.maxDistance !== 'undefined' ? o.maxDistance : 10000,\n panningModel: typeof o.panningModel !== 'undefined' ? o.panningModel : 'HRTF',\n refDistance: typeof o.refDistance !== 'undefined' ? o.refDistance : 1,\n rolloffFactor: typeof o.rolloffFactor !== 'undefined' ? o.rolloffFactor : 1\n };\n\n // Setup event listeners.\n self._onstereo = o.onstereo ? [{fn: o.onstereo}] : [];\n self._onpos = o.onpos ? [{fn: o.onpos}] : [];\n self._onorientation = o.onorientation ? [{fn: o.onorientation}] : [];\n\n // Complete initilization with howler.js core's init function.\n return _super.call(this, o);\n };\n })(Howl.prototype.init);\n\n /**\n * Get/set the stereo panning of the audio source for this sound or all in the group.\n * @param {Number} pan A value of -1.0 is all the way left and 1.0 is all the way right.\n * @param {Number} id (optional) The sound ID. If none is passed, all in group will be updated.\n * @return {Howl/Number} Returns self or the current stereo panning value.\n */\n Howl.prototype.stereo = function(pan, id) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self._webAudio) {\n return self;\n }\n\n // If the sound hasn't loaded, add it to the load queue to change stereo pan when capable.\n if (self._state !== 'loaded') {\n self._queue.push({\n event: 'stereo',\n action: function() {\n self.stereo(pan, id);\n }\n });\n\n return self;\n }\n\n // Check for PannerStereoNode support and fallback to PannerNode if it doesn't exist.\n var pannerType = (typeof Howler.ctx.createStereoPanner === 'undefined') ? 'spatial' : 'stereo';\n\n // Setup the group's stereo panning if no ID is passed.\n if (typeof id === 'undefined') {\n // Return the group's stereo panning if no parameters are passed.\n if (typeof pan === 'number') {\n self._stereo = pan;\n self._pos = [pan, 0, 0];\n } else {\n return self._stereo;\n }\n }\n\n // Change the streo panning of one or all sounds in group.\n var ids = self._getSoundIds(id);\n for (var i=0; i Returns the group's values.\n * pannerAttr(id) -> Returns the sound id's values.\n * pannerAttr(o) -> Set's the values of all sounds in this Howl group.\n * pannerAttr(o, id) -> Set's the values of passed sound id.\n *\n * Attributes:\n * coneInnerAngle - (360 by default) A parameter for directional audio sources, this is an angle, in degrees,\n * inside of which there will be no volume reduction.\n * coneOuterAngle - (360 by default) A parameter for directional audio sources, this is an angle, in degrees,\n * outside of which the volume will be reduced to a constant value of `coneOuterGain`.\n * coneOuterGain - (0 by default) A parameter for directional audio sources, this is the gain outside of the\n * `coneOuterAngle`. It is a linear value in the range `[0, 1]`.\n * distanceModel - ('inverse' by default) Determines algorithm used to reduce volume as audio moves away from\n * listener. Can be `linear`, `inverse` or `exponential.\n * maxDistance - (10000 by default) The maximum distance between source and listener, after which the volume\n * will not be reduced any further.\n * refDistance - (1 by default) A reference distance for reducing volume as source moves further from the listener.\n * This is simply a variable of the distance model and has a different effect depending on which model\n * is used and the scale of your coordinates. Generally, volume will be equal to 1 at this distance.\n * rolloffFactor - (1 by default) How quickly the volume reduces as source moves from listener. This is simply a\n * variable of the distance model and can be in the range of `[0, 1]` with `linear` and `[0, ∞]`\n * with `inverse` and `exponential`.\n * panningModel - ('HRTF' by default) Determines which spatialization algorithm is used to position audio.\n * Can be `HRTF` or `equalpower`.\n *\n * @return {Howl/Object} Returns self or current panner attributes.\n */\n Howl.prototype.pannerAttr = function() {\n var self = this;\n var args = arguments;\n var o, id, sound;\n\n // Stop right here if not using Web Audio.\n if (!self._webAudio) {\n return self;\n }\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // Return the group's panner attribute values.\n return self._pannerAttr;\n } else if (args.length === 1) {\n if (typeof args[0] === 'object') {\n o = args[0];\n\n // Set the grou's panner attribute values.\n if (typeof id === 'undefined') {\n if (!o.pannerAttr) {\n o.pannerAttr = {\n coneInnerAngle: o.coneInnerAngle,\n coneOuterAngle: o.coneOuterAngle,\n coneOuterGain: o.coneOuterGain,\n distanceModel: o.distanceModel,\n maxDistance: o.maxDistance,\n refDistance: o.refDistance,\n rolloffFactor: o.rolloffFactor,\n panningModel: o.panningModel\n };\n }\n\n self._pannerAttr = {\n coneInnerAngle: typeof o.pannerAttr.coneInnerAngle !== 'undefined' ? o.pannerAttr.coneInnerAngle : self._coneInnerAngle,\n coneOuterAngle: typeof o.pannerAttr.coneOuterAngle !== 'undefined' ? o.pannerAttr.coneOuterAngle : self._coneOuterAngle,\n coneOuterGain: typeof o.pannerAttr.coneOuterGain !== 'undefined' ? o.pannerAttr.coneOuterGain : self._coneOuterGain,\n distanceModel: typeof o.pannerAttr.distanceModel !== 'undefined' ? o.pannerAttr.distanceModel : self._distanceModel,\n maxDistance: typeof o.pannerAttr.maxDistance !== 'undefined' ? o.pannerAttr.maxDistance : self._maxDistance,\n refDistance: typeof o.pannerAttr.refDistance !== 'undefined' ? o.pannerAttr.refDistance : self._refDistance,\n rolloffFactor: typeof o.pannerAttr.rolloffFactor !== 'undefined' ? o.pannerAttr.rolloffFactor : self._rolloffFactor,\n panningModel: typeof o.pannerAttr.panningModel !== 'undefined' ? o.pannerAttr.panningModel : self._panningModel\n };\n }\n } else {\n // Return this sound's panner attribute values.\n sound = self._soundById(parseInt(args[0], 10));\n return sound ? sound._pannerAttr : self._pannerAttr;\n }\n } else if (args.length === 2) {\n o = args[0];\n id = parseInt(args[1], 10);\n }\n\n // Update the values of the specified sounds.\n var ids = self._getSoundIds(id);\n for (var i=0; i