function() {
          self._playLock = false;
          setParams();
          self._refreshBuffer(sound);

          // Setup the playback params.
          var vol = (sound._muted || self._muted) ? 0 : sound._volume;
          node.gain.setValueAtTime(vol, Howler.ctx.currentTime);
          sound._playStart = Howler.ctx.currentTime;

          // Play the sound using the supported method.
          if (typeof node.bufferSource.start === 'undefined') {
            sound._loop ? node.bufferSource.noteGrainOn(0, seek, 86400) : node.bufferSource.noteGrainOn(0, seek, duration);
          } else {
            sound._loop ? node.bufferSource.start(0, seek, 86400) : node.bufferSource.start(0, seek, duration);
          }

          // Start a new timer if none is present.
          if (timeout !== Infinity) {
            self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);
          }

          if (!internal) {
            setTimeout(function() {
              self._emit('play', sound._id);
              self._loadQueue();
            }, 0);
          }
        }
function() {
          self._playLock = false;
          setParams();
          self._refreshBuffer(sound);

          // Setup the playback params.
          var vol = (sound._muted || self._muted) ? 0 : sound._volume;
          node.gain.setValueAtTime(vol, Howler.ctx.currentTime);
          sound._playStart = Howler.ctx.currentTime;

          // Play the sound using the supported method.
          if (typeof node.bufferSource.start === 'undefined') {
            sound._loop ? node.bufferSource.noteGrainOn(0, seek, 86400) : node.bufferSource.noteGrainOn(0, seek, duration);
          } else {
            sound._loop ? node.bufferSource.start(0, seek, 86400) : node.bufferSource.start(0, seek, duration);
          }

          // Start a new timer if none is present.
          if (timeout !== Infinity) {
            self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);
          }

          if (!internal) {
            setTimeout(function() {
              self._emit('play', sound._id);
              self._loadQueue();
            }, 0);
          }
        }
function ( ) { self . _playLock = false ; setParams ( ) ; self . _refreshBuffer ( sound ) ; // Setup the playback params. var vol = ( sound . _muted || self . _muted ) ? 0 : sound . _volume ; node . gain . setValueAtTime ( vol , Howler . ctx . currentTime ) ; sound . _playStart = Howler . ctx . currentTime ; // Play the sound using the supported method. if ( typeof node . bufferSource . start === 'undefined' ) { sound . _loop ? node . bufferSource . noteGrainOn ( 0 , seek , 86400 ) : node . bufferSource . noteGrainOn ( 0 , seek , duration ) ; } else { sound . _loop ? node . bufferSource . start ( 0 , seek , 86400 ) : node . bufferSource . start ( 0 , seek , duration ) ; } // Start a new timer if none is present. if ( timeout !== Infinity ) { self . _endTimers [ sound . _id ] = setTimeout ( self . _ended . bind ( self , sound ) , timeout ) ; } if ( ! internal ) { setTimeout ( function ( ) { self . _emit ( 'play' , sound . _id ) ; self . _loadQueue ( ) ; } , 0 ) ; } }
Fire this when the sound is ready to play to begin Web Audio playback.
Fire this when the sound is ready to play to begin Web Audio playback .
Play the sound.