网络语音 API 在一段时间没有输入后停止收听

Web speech API stops listening after some time passes without input

我正在使用网络语音 API 但是一旦过了一段时间(一两分钟)而没有任何语音输入,它就会完全停止收听。我知道这一点,因为我将其解析的文本记录到控制台,但是,当我一两分钟不说话时,它就会停止执行此操作。

有什么办法可以解决这个问题吗?

可以监听end事件,然后在SpeechRecognition对象上重新开始识别。

您应该使用布尔标志来决定(在 onend 事件处理程序中)何时重新启动识别(以及何时不重新启动)。

您可以为此使用其他与识别相关的事件。

例如Chrome 识别开始时触发以下事件处理程序:

1. onstart
2. onaudiostart

   (only if sound / speech is detected)
3. onsoundstart
4. onspeechstart

如果没有检测到声音语音,只会触发前 2 个,然后在超时后触发相应的 end 个事件(倒序)。

一个简单的解决方案可能是监听结束事件并重新启动识别

recognition.addEventListener('end', recognition.start);

recognition.addEventListener('end', () => recognition.start()) 有效,但 Chrome 浏览器似乎通过生成 弹出窗口 Allow[=17= 来阻碍连续性] 或 每 5-7 秒阻止 麦克风。