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
);
});
}