2016-07-05 77 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()編寫自己的觸發器,並再次從內部調用你的函數,那麼它應該爲你工作,因爲它會啓動一個新的實例,並會繼續你的文本,除非你清除它。