code: function looper() {
          if (!recording || typeof config.ondataavailable !== 'function' || typeof config.timeSlice === 'undefined') {
              return;
          }
  
          if (intervalsBasedBuffers.left.length) {
              mergeLeftRightBuffers({
                  desiredSampRate: desiredSampRate,
                  sampleRate: sampleRate,
                  numberOfAudioChannels: numberOfAudioChannels,
                  internalInterleavedLength: intervalsBasedBuffers.recordingLength,
                  leftBuffers: intervalsBasedBuffers.left,
                  rightBuffers: numberOfAudioChannels === 1 ? [] : intervalsBasedBuffers.right
              }, function(buffer, view) {
                  var blob = new Blob([view], {
                      type: 'audio/wav'
                  });
                  config.ondataavailable(blob);
  
                  setTimeout(looper, config.timeSlice);
              });
  
              intervalsBasedBuffers = {
                  left: [],
                  right: [],
                  recordingLength: 0
              };
          } else {
              setTimeout(looper, config.timeSlice);
          }
      }
docs: this looper is used to support intervals based blobs (via timeSlice+ondataavailable)