如何让成绩单出现在屏幕上
How do I make the transcript appear on screen
我希望我的网站从对着麦克风说话的用户那里获取音频输入,然后将他们所说的话输出到屏幕上。我已经在我的 React 网站中实现了语音识别,但是当我对着我的麦克风说话时,我看不到文字记录。
这是我的语音识别相关代码
这是我的主要 App.js 文件,位于一个名为 App 的 class 中,这是正在呈现的内容的一部分:
<p>Microphone: {Dictaphone.listening ? 'on' : 'off'}</p>
<button onClick={SpeechRecognition.startListening}>Start</button>
<button onClick={SpeechRecognition.stopListening}>Stop</button>
<button onClick={Dictaphone.resetTranscript}>Reset</button>
<p>{Dictaphone.transcript}</p>
这是在一个名为 Dictaphone.jsx 的单独文件中,我不得不制作一个单独的文件,因为我无法在应用程序中使用挂钩 class:
import { useSpeechRecognition } from 'react-speech-recognition';
const Dictaphone = () => {
const {
transcript,
listening,
resetTranscript,
browserSupportsSpeechRecognition
} = useSpeechRecognition();
return null;
};
export default Dictaphone
有谁知道为什么屏幕上没有显示对着麦克风讲话的文字记录?
此外,当我单击网站上的“开始”按钮时,我的麦克风会打开(我的电脑上会弹出一个麦克风图标),但“关闭”不会从这段代码变为“打开”:<p>Microphone: {Dictaphone.listening ? 'on' : 'off'}</p>
。有谁知道为什么没有?
有两个问题:
1.) Dictaphone 实际上不是一个 React 组件(简单来说,如果你在 App 的 render 或 App 的子组件中调用它们,一个函数就变成了 React 组件)Es:
const App = () => {
return <>
<Dictaphone />
</>
} // <- NOW, React understand that Dictaphone is a component
2.) 即使它是一个组件,你也不能从另一个访问私有属性。
那么,你可以试试这个代码:
const YourParent = () => {
const dictaphone = {...useSpeechRecognition()};
return <>
<p>Microphone: {dictaphone.listening ? 'on' : 'off'}</p>
<button onClick={SpeechRecognition.startListening}>Start</button>
<button onClick={SpeechRecognition.stopListening}>Stop</button>
<button onClick={Dictaphone.resetTranscript}>Reset</button>
<p>{dictaphone.transcript}</p>
</>
}
编辑:
好的,如果您需要使用两个不同的文件,我认为唯一的方法是使用 context.
在录音机文件中:
import { useSpeechRecognition } from 'react-speech-recognition';
const DictaphoneContext = React.createContext();
export const Dictaphone = ({children}) => {
const dictaphone = {...useSpeechRecognition()};
return <DictaphoneContext.Provider value={dictaphone}>
{children}
</DictaphoneContext.Provider>
};
export const DictaphoneListening = ({}) => {
const dictaphone = React.useContext(DictaphoneContext);
return <><dictaphone.listening ? 'on' : 'off'}</>
};
export const DictaphoneTranscript = ({}) => {
const dictaphone = React.useContext(DictaphoneContext);
return <>{dictaphone.transcript}</>
};
在主文件中:
return <>
<Dictaphone>
<p>Microphone: <DictaphoneListening /></p>
<button onClick={SpeechRecognition.startListening}>Start</button>
<button onClick={SpeechRecognition.stopListening}>Stop</button>
<button onClick={Dictaphone.resetTranscript}>Reset</button>
<p><DictaphoneTranscript /></p>
</Dictaphone>
</>
我希望我的网站从对着麦克风说话的用户那里获取音频输入,然后将他们所说的话输出到屏幕上。我已经在我的 React 网站中实现了语音识别,但是当我对着我的麦克风说话时,我看不到文字记录。
这是我的语音识别相关代码
这是我的主要 App.js 文件,位于一个名为 App 的 class 中,这是正在呈现的内容的一部分:
<p>Microphone: {Dictaphone.listening ? 'on' : 'off'}</p>
<button onClick={SpeechRecognition.startListening}>Start</button>
<button onClick={SpeechRecognition.stopListening}>Stop</button>
<button onClick={Dictaphone.resetTranscript}>Reset</button>
<p>{Dictaphone.transcript}</p>
这是在一个名为 Dictaphone.jsx 的单独文件中,我不得不制作一个单独的文件,因为我无法在应用程序中使用挂钩 class:
import { useSpeechRecognition } from 'react-speech-recognition';
const Dictaphone = () => {
const {
transcript,
listening,
resetTranscript,
browserSupportsSpeechRecognition
} = useSpeechRecognition();
return null;
};
export default Dictaphone
有谁知道为什么屏幕上没有显示对着麦克风讲话的文字记录?
此外,当我单击网站上的“开始”按钮时,我的麦克风会打开(我的电脑上会弹出一个麦克风图标),但“关闭”不会从这段代码变为“打开”:<p>Microphone: {Dictaphone.listening ? 'on' : 'off'}</p>
。有谁知道为什么没有?
有两个问题:
1.) Dictaphone 实际上不是一个 React 组件(简单来说,如果你在 App 的 render 或 App 的子组件中调用它们,一个函数就变成了 React 组件)Es:
const App = () => {
return <>
<Dictaphone />
</>
} // <- NOW, React understand that Dictaphone is a component
2.) 即使它是一个组件,你也不能从另一个访问私有属性。
那么,你可以试试这个代码:
const YourParent = () => {
const dictaphone = {...useSpeechRecognition()};
return <>
<p>Microphone: {dictaphone.listening ? 'on' : 'off'}</p>
<button onClick={SpeechRecognition.startListening}>Start</button>
<button onClick={SpeechRecognition.stopListening}>Stop</button>
<button onClick={Dictaphone.resetTranscript}>Reset</button>
<p>{dictaphone.transcript}</p>
</>
}
编辑: 好的,如果您需要使用两个不同的文件,我认为唯一的方法是使用 context.
在录音机文件中:
import { useSpeechRecognition } from 'react-speech-recognition';
const DictaphoneContext = React.createContext();
export const Dictaphone = ({children}) => {
const dictaphone = {...useSpeechRecognition()};
return <DictaphoneContext.Provider value={dictaphone}>
{children}
</DictaphoneContext.Provider>
};
export const DictaphoneListening = ({}) => {
const dictaphone = React.useContext(DictaphoneContext);
return <><dictaphone.listening ? 'on' : 'off'}</>
};
export const DictaphoneTranscript = ({}) => {
const dictaphone = React.useContext(DictaphoneContext);
return <>{dictaphone.transcript}</>
};
在主文件中:
return <>
<Dictaphone>
<p>Microphone: <DictaphoneListening /></p>
<button onClick={SpeechRecognition.startListening}>Start</button>
<button onClick={SpeechRecognition.stopListening}>Stop</button>
<button onClick={Dictaphone.resetTranscript}>Reset</button>
<p><DictaphoneTranscript /></p>
</Dictaphone>
</>