diff --git a/src/renderer/settings/TestSpeakersButton.tsx b/src/renderer/settings/TestSpeakersButton.tsx index 7f6c36a4..73146c00 100644 --- a/src/renderer/settings/TestSpeakersButton.tsx +++ b/src/renderer/settings/TestSpeakersButton.tsx @@ -16,22 +16,29 @@ const useStyles = makeStyles(() => ({ }, })); +const audio = new Audio() as ExtendedAudioElement; +audio.src = chime; + const TestSpeakersButton: React.FC = ({ speaker, }: TestSpeakersProps) => { const classes = useStyles(); const [playing, setPlaying] = useState(false); - const testSpeakers = () => { - const audio = new Audio() as ExtendedAudioElement; - audio.src = chime; - - if (speaker.toLowerCase() !== 'default') audio.setSinkId(speaker); + if (speaker.toLowerCase() !== 'default') audio.setSinkId(speaker); - audio.play(); - setPlaying(true); - audio.addEventListener('pause', () => { + const testSpeakers = () => { + if (playing) { + audio.pause(); + audio.currentTime = 0; setPlaying(false); - }); + } else { + audio.play(); + setPlaying(true); + } + + audio.onended = () => { + setPlaying(false); + }; }; return ( @@ -41,9 +48,8 @@ const TestSpeakersButton: React.FC = ({ size="small" className={classes.button} onClick={testSpeakers} - disabled={playing} > - Test Speaker + {playing ? 'Stop Test Speaker' : 'Test speaker'} ); };