收集结果时,webkitSpeechRecognition“落后”

时间:2014-08-10 03:00:32

标签: 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;
    };

}

例如,如果我要说&#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;

这只是继续。正如我所说的那样,代码无法转录我所说的内容。非常奇怪。

有关为何会这样做的任何想法?

1 个答案:

答案 0 :(得分:4)

存在某种内置超时,之后即使没有更多输入(似乎是大约5-10秒),您也会得到结果。

在这种情况下,您将获得最终的onresult事件以及onend事件。如果您希望继续接受输入,则必须再次致电recognition.start()

另外,如果你设置

recognition.interimResults = true;

您将获得包含非最终结果的onresult个事件,并且您可以在获得最终结果之前决定是否要显示它们。

另一种选择是用

关闭连续
recognition.continuous = false;

在输入(音频)停止后不久您将得到一个结果。 您还将获得onend活动 如果您希望继续获得认可,则必须再次致电

recognition.start();

onend事件处理程序中 在非HTTPS页面上,这将导致权限栏再次弹出。

请参阅example