尝试Web Speech API时有点痒痒。 我完全从文章中复制了代码,我在你说话的时候遇到了问题,但是直到你再说一遍才会发生任何事情。
[小提琴:http://jsfiddle.net/w75v2tm5/]
JS:
if (!('webkitSpeechRecognition' in window)) {
//handle error stuff here...
} else {
var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = false;
recognition.start();
var final_transcript = '';
recognition.onresult = function (event) {
var interim_transcript = '';
if (typeof (event.results) == 'undefined') {
recognition.onend = null;
recognition.stop();
upgrade();
return;
}
for (var i = event.resultIndex; i < event.results.length; ++i) {
if (event.results[i].isFinal) {
final_transcript += event.results[i][0].transcript;
} else {
interim_transcript += event.results[i][0].transcript;
}
}
document.getElementsByTagName('div')[0].innerText = final_transcript;
};
}
例如,如果我要说&#34; Hello world&#34;,&lt; div&gt;我已经设置显示结果不会显示&#34; Hello world&#34;直到我说了别的话,或发出声音。但是,如果我说了别的话,那么直到我再说一些其他内容才会显示出来。
变量&#34; final_transcript&#34;持有上一个结果,而不是我刚才所说的。它仅仅是1。
为了给你一个更好的主意...
我:&#34; Hello world&#34;
final_transcript =&#39;&#39;;
[等待...]
我:&#34;测试&#34;
final_transcript =&#39; Hello world&#39;
这只是继续。正如我所说的那样,代码无法转录我所说的内容。非常奇怪。
有关为何会这样做的任何想法?
答案 0 :(得分:4)
存在某种内置超时,之后即使没有更多输入(似乎是大约5-10秒),您也会得到结果。
在这种情况下,您将获得最终的onresult
事件以及onend
事件。如果您希望继续接受输入,则必须再次致电recognition.start()
。
另外,如果你设置
recognition.interimResults = true;
您将获得包含非最终结果的onresult
个事件,并且您可以在获得最终结果之前决定是否要显示它们。
另一种选择是用
关闭连续recognition.continuous = false;
在输入(音频)停止后不久您将得到一个结果。
您还将获得onend
活动
如果您希望继续获得认可,则必须再次致电
recognition.start();
在onend
事件处理程序中
在非HTTPS页面上,这将导致权限栏再次弹出。
请参阅example