我试图使用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();
}
适用于2秒到5分钟的任何地方,但不可避免地,随机似乎停止了。我在这里看到了对这个问题的评论:
WebkitSpeechRecognition stops recording randomly
这意味着找到了解决方案Obj3ctiv3_C_88。但是,我无法弄清楚如何实现所描述的内容。
感谢任何帮助。谢谢!
答案 0 :(得分:0)
我知道这有点晚了但我也遇到了这个问题,语音输入会随机停止工作。希望你的问题得到解决,但这可能有助于将来的其他人。
我用它来填写语音输入表格。您通过Obj3ctiv3_C_88提供的链接解决方案 - 您可以基本上将其代码剪切并粘贴到现有的js中。 setInterval
每10000调用resetVoiceRecog
函数。该函数强制识别停止。然后在.onend
功能中,您可以拨打.start
。在我的应用程序中,我调用start
,除非用户单击了暂停按钮:
if ($("#pauseClicked").html() !=1) {
recognition.start();
}
我原本等待onend
事件然后做.start
,但即使它&#34;说&#34;它重新启动,零星地不接受语音输入。谁知道onend
/ start
的背面正在进行,但是将间隔计时器设置为强制停止/启动似乎已经解决了我的问题。
答案 1 :(得分:0)
我也注意到了上面提到的行为。似乎是语音识别引擎中的某种扭结,也许是为了减少流量?
但是,我的解决方案可能是处理这种麻烦的更优雅的方法;是在识别开始方法中将名为noReason
的变量设置为true
,在error
和result
方法中将变量设置为false
是一个原因(错误或结果)。然后,在onEnd
方法中,我只检查if(noReason)
,如果是,则调用recognition.start();