2017-01-12 7 views
2

Я пытаюсь реализовать синтез речи в браузере для проекта домашней автоматизации для людей с ослабленным зрением. На моей тестовой странице я заметил, что между вызовом speak() и прослушиванием происходит примерно 1 секунда.Задержка интерфейса Web Speech API. Является ли мой код плохим или это можно ожидать?

Просто интересно, нормальное поведение или если я что-то делаю неправильно. Если кто-нибудь может посоветовать о том, как ускорить его (даже на полсекунды или около того), я был бы очень благодарен :)

[EDIT 1]
Хорошо, поэтому я пробовал свою тестовую страницу в MS Edge (использовался только Chrome), и отставание исчезает. Я также попробовал Web Speech Synthesis Demo в Chrome, с «голосом», установленным на «native», и не было никакого отставания. Оба этих теста отображали текст с английским английским голосом.
В 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 ») звук генерируется на сервере Google, а затем отправляется в браузер, что вызывает задержку. На самом деле это не загрузка голоса в ваш браузер, каждый раз, когда вы пытаетесь использовать TTS, он отправляет его на сервер для генерации звука. Таким образом, к сожалению, сетевая задержка всегда будет присутствовать при использовании чего-либо, кроме собственных голосов, доступных на вашем компьютере. Помимо задержки, существует также проблема конфиденциальности всей речи, которую вы создаете, отправляемой в Google (и, возможно, NSA или кто-либо другой, кто следит за их серверами). Edge и Firefox используют собственные голоса по умолчанию и не позволяют вам выбирать фирменные продукты Google, поэтому они всегда не имеют задержки.