2015-05-01 65 views
7

我正在嘗試使用語音識別API創建基於HTML5的語音控制編輯器。目前,問題在於當你開始錄製時,它只會持續一段時間(基本上直到用戶停止說話)。語音識別 - 連續運行

我可以將continuousinterimResults設置爲true,但這並不會永久記錄下來。它仍然結束。

我也可以告訴它在結束事件期間再次啓動,但每次都要求獲得許可,這是非常具有破壞性的。

有沒有辦法讓它持續下去而只需要詢問用戶一次?

回答

8

無論您選擇哪種設置,谷歌瀏覽器會在一段時間後停止語音識別引擎......這是無法解決的。

我發現連續語音識別的唯一可靠解決方案是,按照您的建議,通過綁定到onend()事件再次啓動它。

如果你嘗試了類似的技術,要注意以下事項:

  1. 如果你不使用HTTPS,用戶將被提示一遍又一遍地在每次重啓再次給予許可。爲此以及其他許多原因,在使用語音識別時不要在HTTP上妥協。

  2. 請確保您沒有立即重新啓動語音識別onend()沒有一些保護措施,以確保您沒有將瀏覽器置於無限循環(例如,兩個打開的標籤onend(function() {restart()})可以使瀏覽器崩潰,詳細的在這個錯誤報告:https://code.google.com/p/chromium/issues/detail?id=296690) 請參閱https://github.com/TalAter/annyang/blob/master/annyang.js#L152我如何處理這個。

  3. 如果它結束的原因是一樣的東西service-not-allowednot-allowedhttps://github.com/TalAter/annyang/blob/master/annyang.js#L132

你可以看到我是如何處理這個在我的代碼不AUTORESTART - https://github.com/TalAter/annyang/blob/master/annyang.js

+0

@samanime如果您認爲這是最準確的答案,請將答案標記爲正確答案。 –

-2

請試試這個代碼,我認爲它你需要什麼:

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
     <title>Speech recognition</title> 
 
     <style> 
 
      #result{ 
 
       border: 2px solid black; 
 
       height: 200px; 
 
       border-radius: 3px; 
 
       font-size: 14px; 
 
      } 
 
      button{ 
 
       position: absolute; 
 
       top: 240px; 
 
       left: 50%; 
 
      } 
 
     </style> 
 
     <script type="application/javascript"> 
 
      function start(){ 
 
       var r = document.getElementById("result"); 
 
      if("webkitSpeechRecognition" in window){ 
 
       var speechRecognizer = new webkitSpeechRecognition(); 
 
       speechRecognizer.continuous = true; 
 
       speechRecognizer.interimResults = true; 
 
       speechRecognizer.lang = "en-US"; 
 
       speechRecognizer.start(); 
 
       
 
       var finalTranscripts = ""; 
 
       speechRecognizer.onresult = function(event){ 
 
        var interimTranscripts = ""; 
 
        for(var i=event.resultIndex; i<event.results.length; i++){ 
 
         var transcript = event.results[i][0].transcript; 
 
         transcript.replace("\n", "<br>"); 
 
         if(event.results[i].isFinal){ 
 
          finalTranscripts += transcript; 
 
         } 
 
         else{ 
 
          interimTranscripts += transcript; 
 
         } 
 
         r.innerHTML = finalTranscripts + '<span style="color: #999;">' + interimTranscripts + '</span>'; 
 
        } 
 
       }; 
 
       speechRecognizer.onerror = function(event){ 
 
       }; 
 
      } 
 
      else{ 
 
       r.innerHTML = "Your browser does not support that."; 
 
      } 
 
      } 
 
     </script> 
 
    </head> 
 
    <body> 
 
     <div id="result"></div> 
 
     <button onclick="start()">Listen</button> 
 
    </body> 
 
</html>