我正在使用Web Speech API在我的网页上捕获语音命令,但识别器会在一段时间后结束(它会停止侦听并触发其中一个事件)。
为什么会这样?我能预防吗?
以下是拥有语音识别页面(40行)并重现错误所需的所有代码。当识别器停止收听时,它会发出“结束”警告。
<h1>Voice Recognizer</h1>
<script>
if (!('webkitSpeechRecognition' in window)) {
alert('Your browser does not support speech recognition.');
} else {
var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;
recognition.onstart = function() {
console.log('started');
}
recognition.onresult = function() {
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;
}
}
console.log('interim result:', interim_transcript);
console.log('final reuslt:', final_transcript);
}
recognition.onerror = function() { alert('error'); }
recognition.onend = function() { alert('end'); }
function startListening(e){
final_transcript = '';
recognition.start();
}
startListening();
}
</script>
答案 0 :(得分:1)
Google会尝试限制已处理数据的数量,因为它会加载其服务器。完成后重新启动语音识别或使用Pocketsphinx.JS
等离线处理答案 1 :(得分:0)
首先谷歌已经提供了60秒的录音时间,而且听起来非常有效,所以我建议你提高你的说话速度。如果你的语音超过60秒,那么webkit将触发onspeechend()函数,导致代码停止。无论哪种方式,如果你可以为onspeechend()编写自己的触发器并再次从内部调用你的函数,那么它应该适合你,因为它会启动一个新实例并继续你的文本,除非你清除它。