我正在尝试使用webkitSpeechRecognition转录文本。我发现这个例子:
https://developers.google.com/web/updates/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API?hl=en
并已将其纳入我自己的网站。在某些条件下,这很好用。但是,我基本上只是想在人们进行讨论时将抄录“开”。
为了我的目的,我简化了代码,如下所示:
//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解决方案。但是我不知道如何实现所描述的内容。
任何帮助表示赞赏。谢谢!
最佳答案
我知道这有点晚了,但是我也遇到了语音输入会随机停止工作的问题。希望您解决了问题,但是将来可能会对其他人有所帮助。
我正在用它来填写语音输入表格。由Obj3ctiv3_C_88提供的链接解决方案可以解决该问题-您基本上可以将他的代码剪切并粘贴到现有js中。 setInterval
每10000调用一次resetVoiceRecog
函数。该函数强制停止识别。然后在.onend
函数中可以调用.start
。在我的应用程序中,除非用户单击了暂停按钮,否则我将调用start
:
if ($("#pauseClicked").html() !=1) {
recognition.start();
}
我最初是在等待
onend
事件,然后再执行.start
,但是即使它“说”了它重新启动,也偶尔会不接受语音输入。谁知道这在onend
/ start
的背面上发生,但是将间隔计时器设置为强制停止/启动似乎已经解决了我的问题。