diff --git a/src/ProChat/demos/control.tsx b/src/ProChat/demos/control.tsx index 96df0b7..cb6dcda 100644 --- a/src/ProChat/demos/control.tsx +++ b/src/ProChat/demos/control.tsx @@ -4,11 +4,74 @@ import { ChatMessage, ProChat } from '@ant-design/pro-chat'; import { useTheme } from 'antd-style'; -import { useState } from 'react'; - import { example } from '../mocks/basic'; import { MockResponse } from '../mocks/streamResponse'; +import { Button } from 'antd'; +import { useEffect, useState } from 'react'; + +const SpeechToText = () => { + const [isListening, setIsListening] = useState(false); + const [transcript, setTranscript] = useState(''); + + useEffect(() => { + const speechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; + if (!speechRecognition) { + alert('Sorry, your browser does not support Speech Recognition.'); + return; + } + + const recognition = new speechRecognition(); + recognition.continuous = true; // Keep listening even after voice stops + recognition.interimResults = true; // Show interim results + recognition.lang = 'zh-CN'; // Set the language of the recognizer + + recognition.onstart = () => { + console.log('Voice recognition started'); + }; + + recognition.onresult = (event) => { + console.log('event', event); + + for (let i = event.resultIndex; i < event.results.length; ++i) { + if (event.results[i].isFinal) { + setTranscript((transcript) => transcript + event.results[i][0].transcript + ' '); + } + } + }; + + recognition.onerror = (event) => { + console.error('Voice recognition error', event.error); + }; + + recognition.onend = () => { + console.log('Voice recognition ended'); + setIsListening(false); + }; + + if (isListening) { + recognition.start(); + } else { + recognition.stop(); + } + + // Clean up function + return () => { + recognition.stop(); + }; + }, [isListening]); + + return ( +
+

Speech to Text Conversion

+ +

{transcript}

+
+ ); +}; + export default () => { const theme = useTheme(); @@ -16,6 +79,7 @@ export default () => { return (
+ {