收集结果时,webkitSpeechRecognition"落后"

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'

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

有任何关于为什么会这样的想法?

Ron*_*lev 5

有某种内置的超时,在此之后即使没有更多输入,您也将获得结果(似乎在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页面上,这将导致权限栏再次弹出。

例子