所以我有一个 Electron 应用程序,它使用网络语音 API(SpeechRecognition)来获取用户的语音,但是它不起作用。代码:
if ("webkitSpeechRecognition" in window) {
let SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
let recognition = new SpeechRecognition();
recognition.onstart = () => {
console.log("We are listening. Try speaking into the microphone.");
};
recognition.onspeechend = () => {
recognition.stop();
};
recognition.onresult = (event) => {
let transcript = event.results[0][0].transcript;
console.log(transcript);
};
recognition.start();
} else {
alert("Browser not supported.")
}
它在控制台中显示
We are listening...
,但无论你说什么,它都不会给出输出。另一方面,在 Google Chrome 中运行完全相同的东西是可行的,无论我说什么,控制台都会通过 console.log(transcript);
部分注销。我做了一些更多的研究,结果发现 Google 最近停止了对基于 shell 的 Chromium Windows 中的 Web Speech API 的支持(Tmk,除了 Google Chrome 或 MS Edge 之外的所有内容),所以这似乎就是它不支持的原因正在开发我的 Electron 应用程序。
参见:电子语音库的结束 Artyom.js 问题 关于此的另一个 stackOverflow 问题
有什么办法可以让它在 Electron 中工作吗?
我最终完成了一个实现,使用媒体设备 API 通过麦克风获取用户的语音,然后使用
WebSockets
将其发送到 Python 服务器,该服务器使用带有 SpeechRecognition
pip 包的音频流并返回转录的文本到客户端(Electron 应用程序)。
这就是我实现的,对于这么简单的事情来说太长了,但是如果有人有更好的建议,请写下答案让我知道。