export async function playWithAudioElement()

in client/src/util/audio.ts [204:241]


export async function playWithAudioElement(buffer: Blob): Promise<PlaybackStream> {
  logger.log('Playing with audio element');
  const audio = new Audio();
  const stream: PlaybackStream = {
    onended: null,
    getCurrentTime: () => {
      return audio.currentTime;
    },
    getDuration: () => {
      return audio.duration;
    },
    stop: () => {
      audio.pause();
      if (stream.onended) {
        stream.onended();
      }
    }};
  return new Promise<any>((resolve, reject) => {
    audio.addEventListener('error', () => {
      reject(new Error('Error playing audio'));
      URL.revokeObjectURL(audio.src);
      if (stream.onended) {
        stream.onended();
      }
    });
    audio.addEventListener('ended', () => {
      URL.revokeObjectURL(audio.src);
      if (stream.onended) {
        stream.onended();
      }
    });
    audio.src = URL.createObjectURL(buffer);
    audio.play().then(
      () => resolve(stream),
      reject
    );
  });
}