Я пытаюсь реализовать синтез речи в браузере для проекта домашней автоматизации для людей с ослабленным зрением. На моей тестовой странице я заметил, что между вызовом 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>