import React, { useEffect } from 'react' import { useSetAtom } from 'jotai' import { useBing } from '@/lib/hooks/use-bing' import Image from 'next/image' import VoiceIcon from '@/assets/images/voice.svg' import VoiceButton from './ui/voice' import { SR } from '@/lib/bots/bing/sr' import { voiceListenAtom } from '@/state' const sr = new SR(['发送', '清空', '退出']) const Voice = ({ setInput, input, sendMessage, isSpeaking }: Pick, 'setInput' | 'sendMessage' | 'input' | 'isSpeaking'>) => { const setListen = useSetAtom(voiceListenAtom) useEffect(() => { if (sr.listening) return sr.transcript = !isSpeaking }, [isSpeaking]) useEffect(() => { sr.onchange = (msg: string, command?: string) => { switch (command) { case '退出': sr.stop() break; case '发送': sendMessage(input) case '清空': setInput('') break; default: setInput(input + msg) } } }, [input, setInput, sendMessage]) const switchSR = (enable: boolean = false) => { setListen(enable) if (enable) { sr.start() } else { sr.stop() } } return sr.listening ? ( switchSR(false)} /> ) : ( start voice switchSR(true)} /> ) }; export default Voice;