2016-07-05 49 views
1

我使用Web Speech API在我的网页上捕获语音命令,但识别器在一段时间后结束(它会停止侦听并触发最后一个事件)。Chrome的webkitSpeechRecognition随机结束

为什么会发生这种情况?我可以预防它吗?

这是所有需要声音识别页面(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> 

回答

1

Google试图限制处理的数据量,因为它加载了他们的服务器。重新启动语音识别,一旦它结束或使用一些离线处理,如Pocketsphinx.JS

0

首先谷歌已经给了60秒的录音时间截至目前,它是非常有效的聆听,所以我建议你增加你的发言速度。如果您的演讲时间超过60秒,那么webkit将触发导致停止代码的onspeechend()函数。无论哪种方式,如果你可以为onspeechend()编写自己的触发器,并再次从内部调用你的函数,那么它应该为你工作,因为它会启动一个新的实例,并会继续你的文本,除非你清除它。