2017-01-12 41 views
2

我正試圖在視覺障礙人士的家庭自動化項目中實現瀏覽器中的語音合成。在我的測試頁面中,我注意到在調用speak()方法和實際聽到它之間大約有1秒的時滯。。我的代碼是壞的還是這是可以預料的?

只是想知道這是正常行爲還是我做錯了什麼。如果任何人都可以提供如何加快它的建議(甚至半秒左右),我真的很感激它:)

[編輯1]
好吧,所以我試過我的測試頁在MS邊緣(只使用Chrome),滯後消失。我也嘗試了Chrome中的Web Speech Synthesis Demo,「語音」設置爲「本地」,並且沒有延遲。這些測試都以英國英語的聲音呈現了文字。
在Chrome中,我的測試頁使用澳大利亞 - 英語語音(我在AU)呈現文本,並在播放前有滯後。
我的直覺告訴我,Chrome瀏覽器正在從某個遠程位置加載語音,而不是使用本地系統語音,並且僅用於此特定頁面(即codepen.io上的演示在同一瀏覽器中正常工作)。但是我不知道的是爲什麼

如果它只加載一次聲音,而不是每次調用聲音時(這只是假設發生了什麼),這並不是什麼大問題。
[/ EDIT 1]

這裏是我的代碼:

<body> 
    <div class='col col-xs-6'> 
     <div style='width:100%;'> 
     <button type='button' class='btn' onmouseover='speak("mouse over");' onmouseout="cancel();"> 
      Test button. 
     </button> 
     </div> 
    </div> 


    <p id="msg"></p> 
    <script type="text/javascript"> 
     var globalVolume = 0.8; 
     var globalRate = 1; 
     var globalPitch = 0.9; 
     var enterMsg = "Mouse over"; 


     function speak(text) { 
      var msg = new SpeechSynthesisUtterance(); 
      msg.text = text; 
      msg.volume = globalVolume; 
      msg.rate = globalRate; 
      msg.pitch = globalPitch; 
      //msg.voice = "native"; 
      window.speechSynthesis.speak(msg); 
     } 

     function cancel() { 
     window.speechSynthesis.cancel(); 
     } 

     //speak("Hello, world!"); 
    </script> 
</body> 

回答

1

正如你在你的更新理論化,如果你選擇的任何非本地的聲音(任何與「谷歌開始的那些的「)聲音在Google服務器上生成,然後發送到瀏覽器,從而導致延遲。它實際上並沒有將語音加載到瀏覽器中,每次您嘗試使用TTS時,都會將它發送到服務器以生成聲音。所以,不幸的是網絡延遲將永遠存在於使用除計算機上可用的本地語音之外的任何內容。除了延遲之外,您發送給Google的所有語音(可能還有NSA或其他監視他們服務器的其他人)的隱私問題也是存在的。 Edge和Firefox默認使用原生聲音,不允許您選擇Google專有的聲音,這就是爲什麼他們總是缺乏延遲。

相關問題