code: function gotStream(stream) {
      console.log("AudioInputCaptureProxy: gotStream");
  
      inputPoint = audioContext.createGain();
  
      // Create an AudioNode from the stream.
      audioStream = stream;
      realAudioInput = audioContext.createMediaStreamSource(stream);
      if (channels = 1) {
          audioInput = convertToMono(realAudioInput);
      }
      else {
          audioInput = realAudioInput;
      }
  
      // we will end up downsampling, but recorderWorker.js does this by simply dropping samples
      // so we use a low pass filter to prevent aliasing of higher frequencies
      if (sampleRate < audioContext.sampleRate) {
          var lowPassFilter = audioContext.createBiquadFilter();
          audioInput.connect(lowPassFilter);
          lowPassFilter.connect(inputPoint);
          lowPassFilter.type = lowPassFilter.LOWPASS || "lowpass";
          lowPassFilter.frequency.value = sampleRate / 2;
          lowPassFilter.connect(inputPoint);
      }
      else {
          audioInput.connect(inputPoint);
      }
  
      console.log("AudioInputCaptureProxy: creating audioRecorder");
      audioRecorder = new Recorder(inputPoint, {sampleRate: sampleRate});
  
      // pump through zero gain so that the microphone input doesn't play out the speakers causing feedback
      zeroGain = audioContext.createGain();
      zeroGain.gain.value = 0.0;
      inputPoint.connect(zeroGain);
      zeroGain.connect(audioContext.destination);
  
      microphonePermission = true;
      onSuccessGotStream(microphonePermission);
  }
docs: initiAudio callback by web audio when access to the microphone is gained (browser platform)