{"version":3,"sources":["webpack:///../node_modules/howler/dist/howler.js"],"names":["global","__WEBPACK_AMD_DEFINE_RESULT__","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","unload","close","codecs","ext","replace","state","_autoSuspend","Audio","oncanplaythrough","e","_setupCodecs","audioTest","err","canPlayType","mpegTest","checkOpera","userAgent","match","isOldOpera","parseInt","split","mp3","mpeg","opus","ogg","oga","wav","aac","caf","m4a","mp4","weba","webm","dolby","flac","_unlockAudio","_audioUnlocked","_mobileUnloaded","sampleRate","_scratchBuffer","createBuffer","unlock","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","_resumeAfterSuspend","Howl","o","src","error","_autoplay","autoplay","_format","format","_html5","html5","_loop","loop","_pool","pool","_preload","preload","_rate","rate","_sprite","sprite","_src","undefined","_xhrWithCredentials","xhrWithCredentials","_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","stop","setParams","_start","_stop","node","playWebAudio","_refreshBuffer","_playStart","bufferSource","noteGrainOn","Infinity","bind","once","_clearTimer","playHtml5","playbackRate","paused","loadedNoReadyState","ejecta","readyState","isCocoonJS","listener","pause","_rateSeek","_stopFade","noteOff","_cleanBuffer","isNaN","arguments","_clearSound","_interval","args","indexOf","apply","fade","from","to","len","end","linearRampToValueAtTime","_startFadeInterval","isGroup","diff","steps","stepLen","lastTick","Date","now","_fadeTo","setInterval","tick","min","round","clearInterval","cancelScheduledValues","loopStart","loopEnd","playing","realTime","rateSeek","seekAndEmit","emitSeek","sounds","_errorFn","_loadFn","index","splice","remCache","cache","on","events","off","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","code","ceil","__default","loadSound","data","atob","dataView","Uint8Array","charCodeAt","decodeAudioData","xhr","XMLHttpRequest","open","withCredentials","responseType","status","response","onerror","safeXhrSend","send","arraybuffer","success","AudioContext","webkitAudioContext","iOS","platform","appVersion","version","safari","standalone","exports","module","_super","_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","_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"],"mappings":"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","file":"js/vendors~adaptorInner~gameContainer~main~soundFlashies-ceae51c61d5d.js","sourcesContent":["/*!\n * howler.js v2.1.2\n * howlerjs.com\n *\n * (c) 2013-2019, 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 checkOpera = self._navigator && self._navigator.userAgent.match(/OPR\\/([0-6].)/g);\n var isOldOpera = (checkOpera && parseInt(checkOpera[0].split('/')[1], 10) < 33);\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\"').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 mp4: !!(audioTest.canPlayType('audio/x-mp4;') || audioTest.canPlayType('audio/mp4;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n weba: !!audioTest.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/, ''),\n webm: !!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 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\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 var loop = !!(sound._loop || self._sprite[sprite][2]);\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 = loop;\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') {\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 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 self._loadQueue();\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\n var listener = function() {\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 // Make sure the volume is in the right bounds.\n vol = Math.max(0, vol);\n vol = Math.min(1, vol);\n\n // Round to within 2 decimal points.\n vol = Math.round(vol * 100) / 100;\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 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 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 self;\n }\n\n // If the sound hasn't loaded, add it to the load queue to seek when capable.\n if (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 self._emit('seek', id);\n\n // Restart the playback if the sound was playing.\n if (playing) {\n self.play(id, true);\n }\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 (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 {\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 // Setup the new audio node.\n self._node.src = parent._src;\n self._node.preload = 'auto';\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 /** 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 && Howler._navigator.standalone && !safari || Howler._navigator && !Howler._navigator.standalone && !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 : 1, 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 // Define globally in case AMD is not available or unused.\n if (typeof window !== 'undefined') {\n window.HowlerGlobal = HowlerGlobal;\n window.Howler = Howler;\n window.Howl = Howl;\n window.Sound = Sound;\n } else if (typeof global !== 'undefined') { // Add to global in Node.js (for testing, etc).\n global.HowlerGlobal = HowlerGlobal;\n global.Howler = Howler;\n global.Howl = Howl;\n global.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.1.2\n * howlerjs.com\n *\n * (c) 2013-2019, 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(x, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upY.setTargetAtTime(y, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upZ.setTargetAtTime(z, 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