daily-examples/custom/shared/hooks/useSound.js

39 lines
821 B
JavaScript

import { useCallback, useEffect, useRef } from 'react';
export const useSound = (src) => {
const audio = useRef(null);
useEffect(() => {
const tag = document.querySelector(`audio[src="${src}"]`);
if (tag) {
audio.current = tag;
} else {
const t = document.createElement('audio');
t.src = src;
t.setAttribute('playsinline', '');
document.body.appendChild(t);
audio.current = t;
}
}, [src]);
const load = useCallback(() => {
if (!audio.current) return;
audio.current.load();
}, [audio]);
const play = useCallback(() => {
if (!audio.current) return;
try {
audio.current.currentTime = 0;
audio.current.play();
} catch (e) {
console.error(e);
}
}, [audio]);
return { load, play };
};
export default useSound;