Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WebkitSpeechRecognition停止、不';不要随便开枪_Javascript_Webkit_Speech Recognition_Speech To Text_Webkitspeechrecognition - Fatal编程技术网

Javascript WebkitSpeechRecognition停止、不';不要随便开枪

Javascript WebkitSpeechRecognition停止、不';不要随便开枪,javascript,webkit,speech-recognition,speech-to-text,webkitspeechrecognition,Javascript,Webkit,Speech Recognition,Speech To Text,Webkitspeechrecognition,我正在尝试使用webkitSpeechRecognition转录文本。我发现这个例子: 并将其应用到我自己的网站中。这在某些条件下非常有效。然而,我基本上只想在人们进行讨论时让抄本“开着” 出于我的目的,我将代码简化如下: //Speech Transcription var recognition = new webkitSpeechRecognition(); recognition.continuous = true; recognition.interimResults = true;

我正在尝试使用webkitSpeechRecognition转录文本。我发现这个例子:

并将其应用到我自己的网站中。这在某些条件下非常有效。然而,我基本上只想在人们进行讨论时让抄本“开着”

出于我的目的,我将代码简化如下:

//Speech Transcription
var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;

// initiated text recognition
recognition.onstart = function() {
    recognizing = true;
    ignore_onend = false;

}

//
recognition.onresult = function(event) {
    var interim_transcript = '';


    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;
        }
    }

    final_transcript = capitalize(final_transcript);

    // update final transcript
    enter.innerHTML = linebreak(final_transcript);

    // update temp transcript
    interim_enter.innerHTML = linebreak(interim_transcript);


}

recognition.onerror = function(event) { }

recognition.onend = function() {
    recognizing = false;
    if (ignore_onend) {
        return;
    }
}


// formatting the text
var two_line = /\n\n/g;
var one_line = /\n/g;
function linebreak(s) {
  return s.replace(two_line, '<p></p>').replace(one_line, '<br>');
}

var first_char = /\S/;
function capitalize(s) {
  return s.replace(first_char, function(m) { return m.toUpperCase(); });
}

// trigger the transcription
function startButton(event) {
    final_transcript = '';
    recognition.start();    
}
//语音转录
var recognition=new-webkitSpeechRecognition();
识别。连续=正确;
recognition.interimResults=true;
//启动文本识别
recognition.onstart=函数(){
识别=正确;
忽略_onend=false;
}
//
recognition.onresult=函数(事件){
var临时_转录本=“”;
对于(var i=event.resultIndex;i”);
}
var first_char=/\S/;
功能资本化{
返回s.replace(第一个字符,函数(m){return m.toUpperCase();});
}
//触发转录
功能启动按钮(事件){
最终成绩单=“”;
识别。开始();
}
它可以在2秒到5分钟的时间内正常工作,但不可避免地会出现随机停止的情况。我在这里看到了对这个问题的评论:

这意味着找到了解决方案。然而,我不知道如何实现所描述的内容


感谢您的帮助。谢谢

我知道这有点晚了,但我也遇到了语音输入会随机停止工作的问题。希望你的问题解决了,但这可能会在将来帮助其他人

我用这个来填写语音输入表格。由Obj3ctiv3_C_88提供的您链接的解决方案可以处理这个问题——您基本上可以将他的代码剪切并粘贴到您现有的js中。
setInterval
每隔10000次调用
resetVoiceRecog
函数。该函数强制停止识别。然后在
.onend
函数中,您可以调用
.start
。在我的应用程序中,我调用
开始
,除非用户单击了暂停按钮:

if ($("#pauseClicked").html() !=1) {
  recognition.start();
}

我最初是在等待一个
oned
事件,然后执行一个
.start
,但即使它“说”它重新启动,它也会偶尔不接受语音输入。谁知道这是在
oned
/
start
的背面发生的,但是设置间隔计时器来执行强制停止/启动似乎已经解决了这个问题

我知道这有点晚了,但我也遇到了语音输入会随机停止工作的问题。希望你的问题解决了,但这可能会在将来帮助其他人

我用这个来填写语音输入表格。由Obj3ctiv3_C_88提供的您链接的解决方案可以处理这个问题——您基本上可以将他的代码剪切并粘贴到您现有的js中。
setInterval
每隔10000次调用
resetVoiceRecog
函数。该函数强制停止识别。然后在
.onend
函数中,您可以调用
.start
。在我的应用程序中,我调用
开始
,除非用户单击了暂停按钮:

if ($("#pauseClicked").html() !=1) {
  recognition.start();
}

我最初是在等待一个
oned
事件,然后执行一个
.start
,但即使它“说”它重新启动,它也会偶尔不接受语音输入。谁知道这是在
oned
/
start
的背面发生的,但是设置间隔计时器来执行强制停止/启动似乎已经解决了这个问题

我也注意到了上面提到的行为。这似乎是语音识别引擎中的某种纠结,也许是为了减少流量


然而,我的解决方案,可能是一个更优雅的方式来处理这个麻烦;在识别开始方法中将名为
noReason
的变量设置为
true
,在
error
result
方法中,我将其设置为
false
,因为有原因(错误或结果)。然后在
onEnd
方法中,我只需检查
if(noReason)
,如果是,则调用
recognition.start()

我也注意到了上面提到的行为。这似乎是语音识别引擎中的某种纠结,也许是为了减少流量

然而,我的解决方案,可能是一个更优雅的方式来处理这个麻烦;在识别开始方法中将名为
noReason
的变量设置为
true
,在
error
result
方法中,我将其设置为
false
,因为有原因(错误或结果)。然后在
onEnd
方法中,我只需检查
if(noReason)
,如果是,则调用
recognition.start()