async setupMicrophone()

in src/js/client/microphone.ts [59:106]


  async setupMicrophone() {
    let me = this;
    me.audioContext = new AudioContext();

    me.setupButtons();

    this.audioElement =
    <HTMLAudioElement>document.querySelector(SELECTORS.AUDIO_ELEMENT);

    me.meta.sampleHerz = me.audioContext.sampleRate;
    me.meta.channels = me.audioContext.destination.numberOfInputs;

    await navigator.mediaDevices.getUserMedia({ audio: {
      deviceId: 'mic',
    } })
        .then(function(s: MediaStream) {
          me.mediaStream = s;
          me.mediaRecorder = new MediaRecorder(me.mediaStream);
          me.getMicStream();

          me.mediaRecorder.addEventListener('start', (e:any) => {
            me.outputChunks = [];
            let event = new CustomEvent('start', {
              detail: 'start'
            });
            window.dispatchEvent(event);

            me.source = me.audioContext.createMediaStreamSource(me.mediaStream);
            me.source.connect(me.scriptProcessor);
            me.scriptProcessor.connect(me.audioContext.destination);
          });

          me.mediaRecorder.addEventListener('stop', (e:any) => {
            // TODO problem in IOS
            // after you disconnect the audionode and script processor
            // the buffer will be nulled out.
            me.source.disconnect(me.scriptProcessor);
            me.scriptProcessor.disconnect(me.audioContext.destination);
          });
    }).catch(function(e){
      console.log(e);
    });

    /*return new Promise(resolve => {
      resolve(me.meta);
    });*/
    return me.meta;
  }