You can try it in my workout page Untitled-1export function useTimerEndSound() { let audioContext: AudioContext | null = null; let oscillator: OscillatorNode | null = null; const playTimerEndSound = () => { if (!audioContext) { audioContext = new AudioContext(); // Check if the AudioContext is suspended if (audioContext.state === 'suspended') { // Attempt to resume the AudioContext audioContext.resume().catch((error) => { console.error('Error resuming AudioContext:', error); }); } oscillator = audioContext.createOscillator(); oscillator.type = 'sine'; oscillator.frequency.value = 440; // Hz oscillator.connect(audioContext.destination); oscillator.start(); } if (oscillator) { oscillator.stop(audioContext.currentTime + 0.2); // Play for 200ms } }; return {playTimerEndSound}; } Back to Snippets