function(node) {
      var self = this;
      var isIOS = Howler._navigator && Howler._navigator.vendor.indexOf('Apple') >= 0;

      if (Howler._scratchBuffer && node.bufferSource) {
        node.bufferSource.onended = null;
        node.bufferSource.disconnect(0);
        if (isIOS) {
          try { node.bufferSource.buffer = Howler._scratchBuffer; } catch(e) {}
        }
      }
      node.bufferSource = null;

      return self;
    }
function(node) {
      var self = this;
      var isIOS = Howler._navigator && Howler._navigator.vendor.indexOf('Apple') >= 0;

      if (Howler._scratchBuffer && node.bufferSource) {
        node.bufferSource.onended = null;
        node.bufferSource.disconnect(0);
        if (isIOS) {
          try { node.bufferSource.buffer = Howler._scratchBuffer; } catch(e) {}
        }
      }
      node.bufferSource = null;

      return self;
    }
function ( node ) { var self = this ; var isIOS = Howler . _navigator && Howler . _navigator . vendor . indexOf ( 'Apple' ) >= 0 ; if ( Howler . _scratchBuffer && node . bufferSource ) { node . bufferSource . onended = null ; node . bufferSource . disconnect ( 0 ) ; if ( isIOS ) { try { node . bufferSource . buffer = Howler . _scratchBuffer ; } catch ( e ) { } } } node . bufferSource = null ; return self ; }
Prevent memory leaks by cleaning up the buffer source after playback.
@param  {Object} node Sound's audio node containing the buffer source.
@return {Howl}
Prevent memory leaks by cleaning up the buffer source after playback .
This function is called by the bufferSource constructor when the buffer is ready