// implement a voice component by speech synthesis to read the text with the voice of the user's choice import * as React from "react"; import { useEffect, useState } from "react"; import { IconButton } from "./button"; import VoiceIcon from "../icons/voice.svg"; const speak = ({ text, voice, }: { text: string; voice: SpeechSynthesisVoice; }) => { if (!window || !text) return; const utterance = new SpeechSynthesisUtterance(text); utterance.voice = voice; window.speechSynthesis.speak(utterance); }; export function Voice(props: { text: string }) { const [voices, setVoices] = useState([]); const [voice, setVoice] = useState(null); useEffect(() => { const voices = window.speechSynthesis.getVoices(); setVoices(voices); setVoice(voices[0]); }, []); return props.text ? (
{ if (voice) { speak({ text: props.text, voice }); } }} icon={} title="Read" />
) : ( <> ); }