Ric*_*der 5 javascript api webkit speech-to-text webspeech-api
尝试使用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;
};
}
Run Code Online (Sandbox Code Playgroud)
例如,如果我要说"Hello world",我设置的<div>显示结果将不会显示"Hello world",直到我说出其他内容或发出声音.但是,如果我说了别的话,直到我再说了别的东西才会显示出来.
变量"final_transcript"保持PREVIOUS结果,而不是我刚刚说的.它仅仅是1.
为了给你一个更好的主意......
我:"你好世界"
final_transcript ='';
[等待...]
我:"测试"
final_transcript ='Hello world'
而这只是继续.正如我所说的那样,代码无法转录我所说的内容.很奇怪.
有任何关于为什么会这样的想法?
有某种内置的超时,在此之后即使没有更多输入,您也将获得结果(似乎在5到10秒左右)。
在这种情况下,您将获得最终onresult事件以及onend事件。recognition.start()如果您希望继续接受输入,则必须再次致电。
另外,如果您设置
recognition.interimResults = true;
Run Code Online (Sandbox Code Playgroud)
您将获得onresult带有非最终结果的事件,并且可以在获得最终结果之前决定是否要显示它们。
另一个选择是连续关闭
recognition.continuous = false;
Run Code Online (Sandbox Code Playgroud)
输入(音频)停止后不久,您将获得结果。您还将获得该onend事件。
如果您想继续获得认可,则必须再次致电
recognition.start();
Run Code Online (Sandbox Code Playgroud)
在onend事件处理程序中。
在非HTTPS页面上,这将导致权限栏再次弹出。
看例子
| 归档时间: |
|
| 查看次数: |
5570 次 |
| 最近记录: |