在最近的一个项目中,我一直在尝试使用SpeechRecognition应用编程接口(https://wicg.github.io/speech-api/#examples-recognition)。我目前使用的是微软的edge浏览器,根据https://caniuse.com/#feat=speech-recognition的说法,它只在那里得到了部分支持。从外观上看,边缘似乎支持“文本到语音”功能(SpeechSynthesis),但不支持语音识别功能。因为无论我在EDGE中为SpeechRecognition (Speech to text) API使用什么前缀,它总是无法识别它,并显示它“未定义”。
有没有人清楚这种情况,或者知道如何让语音识别在JavaScript中使用edge?
干杯
发布于 2020-06-05 07:17:38
截至2020年6月4日,Edge Chromium并不真正支持Web Speech API的语音识别部分。Microsoft似乎正在为Edge Chromium解决这个问题。它可能永远不会在Edge Legacy (非铬)上工作。
developer.microsoft.com错误地说它是“受支持的”,但也说“工作草案或等效的”。(更新:截至2021年2月18日,它现在说:“不支持”)
developer.mozilla.org compatibility table还错误地说它在边缘中受支持。
caniuse正确地显示了它在Edge Chromium中不受支持,即使它的行为像它一样,但是正确的事件没有被激发。
除了Chrome和Chromium之外,我见过Web Speech API的语音识别部分使用的唯一其他浏览器是Brave和Yandex。Yandex可能连接到俄罗斯的服务器来处理语音识别。它做得并不好。至少在英语里是这样。目前,Brave返回了一个"Network“错误。根据github Brave discussion的说法,勇敢必须向谷歌付费,才能获得语音到文本的服务。
以下是一些快速代码,可用于测试语音识别在浏览器中是否正常工作,并显示正文中的所有错误和事件。仅适用于https协议。它似乎不能与codepen或jsfiddle一起工作。
var msg = document.body;
var cr = "<br />";
var event_list = ["onaudioend", "onaudiostart", "onend", "onerror", "onnomatch", "onresult", "onsoundend", "onsoundstart", "onspeechend", "onspeechstart", "onstart"];
var sr = window.SpeechRecognition || window.webkitSpeechRecognition || false;
if (sr) {
var recognition = new sr();
event_list.forEach(function(e) {
recognition[e] = function() {
console.log(event);
var txt = event.type + ": ";
if (event.results) txt += event.results[0][0].transcript;
if (event.error) txt += event.error; // "not-allowed" usually is because of not using secure https protocol
if (event.type == "end")
recognition.start(); // Start Recognition again
msg.innerHTML += txt + cr;
};
});
recognition.start();
}
else {
msg.innerHTML += "This browser does not support SpeechRecognition or webkitSpeechRecognition." + cr;
}
https://stackoverflow.com/questions/60561704
复制相似问题