function startMediaRecorderRecording()

in client/src/util/audio.ts [65:110]


function startMediaRecorderRecording(stream: MediaStream, mimeTypes?: string[]): Promise<RecordingStream> {
  const options: MediaRecorderOptions = {audioBitsPerSecond: 8096};
  if (mimeTypes) {
    const type = getSupportedMimeType(mimeTypes);
    if (type) {
      options.mimeType = type;
    } else {
      logger.warn('No supported mime type found - using default type');
    }
  }
  const recorder = new MediaRecorder(stream, options);
  const recordingStream: RecordingStream = {
    onended: null,
    stop: () => {
      recorder.stop();
    }
  };
  const chunks: Blob[] = [];
  recorder.ondataavailable = (dataEvent: BlobEvent) => {
    logger.log('Recording data available');
    if(dataEvent.data.size > 0) {
      chunks.push(dataEvent.data);
    }
  };
  recorder.onstop = () => {
    logger.log('Recording stopped');
    for(const track of stream.getAudioTracks()) {
      track.stop();
    }
    if (recordingStream.onended) {
      const data = chunks.length === 1 ? chunks[0] : new Blob(chunks);
      recordingStream.onended(data);
    }
  };
  return new Promise<RecordingStream>((resolve, reject) => {
    recorder.onstart = () => {
      logger.log('Recording started');
      resolve(recordingStream);
    };
    recorder.onerror = (ev) => {
      logger.warn('Recording error', ev.error);
      reject(ev.error);
    };
    recorder.start();
  });
}