Skip to content

Instantly share code, notes, and snippets.

@codemile
Created July 20, 2021 12:26
Show Gist options
  • Save codemile/3aecc8de1a6064d17aa65ceae1869333 to your computer and use it in GitHub Desktop.
Save codemile/3aecc8de1a6064d17aa65ceae1869333 to your computer and use it in GitHub Desktop.
Hook that plays an audio file from a source URL.
import {useEffect, useMemo} from 'react';
export const useAudio = (
src: string,
play: boolean,
volume: number,
loop: boolean,
onDone?: () => void
) => {
const audio = useMemo(() => {
const audio = new Audio(src);
audio.loop = loop;
audio.volume = volume / 100;
return audio;
}, [src, volume, loop]);
useEffect(() => {
const ended = () => onDone && onDone();
if (play) {
audio.play().then();
audio.addEventListener('ended', ended);
}
return () => {
audio.pause();
audio.removeEventListener('ended', ended);
};
}, [audio, play, onDone]);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment