Web-Speech API преобразования текста в речь не работает на мобильных устройствах
Ниже работает на Desktop Chrome/Safari/Firefox, но не на мобильном телефоне.
Хотя на мобильном Chrome у меня 1) SpeechRecognition
работает отлично; 2) SpeechSynthesisUtterance
загружается правильно, я могу проверить все атрибуты, загрузить голоса (удаленная отладка через DevTools) - только телефон не будет говорить (проверено iPhone Safari и Android Chrome).
Кроме того, когда я пробую это демо на мобильном устройстве, в нем говорится, что мой браузер поддерживает синтез речи, я могу выбирать из доступных голосов, но браузер не говорит.
Есть идеи, что может быть не так?
<script>
var u = new SpeechSynthesisUtterance();
u.text = "hello world";
speechSynthesis.speak(u);
</script>
4 ответа
Андроид Хром:
Я открыл свою "такую красивую, замечательную и фантастическую HTML-страницу с java-скриптом" и обнаружил, что на моем мобильном телефоне ничего не работает... (Android)
1.) Я погуглил и нашел https://support.google.com/accessibility/android/answer/6006983?hl=en
Преобразование текста в речь Чтобы указать параметры преобразования текста в речь для вашего устройства: Откройте приложение «Настройки» вашего устройства. Выберите «Специальные возможности», затем «Преобразование текста в речь». Выберите предпочитаемый движок, язык, скорость речи и высоту тона. Примечание. Выбор механизма преобразования текста в речь по умолчанию зависит от устройства. Варианты могут включать в себя механизм преобразования текста в речь Google, механизм производителя устройства и любые сторонние механизмы преобразования текста в речь, которые вы загрузили из Google Play Store. Необязательно: чтобы прослушать короткую демонстрацию синтеза речи, нажмите «Воспроизвести». Необязательно: чтобы установить голосовые данные для другого языка, выберите «Настройки» , затем «Установить голосовые данные». Выберите язык, который вы хотите установить.
Примечание. (Выберите «Универсальный доступ», затем «Преобразование текста в речь».)
Я активировал «прикоснись, чтобы услышать», так как мои варианты были заполнены чем угодно, но не вышеперечисленным. Вместо этого «TalkBack» был слишком тяжелым, поэтому я оставил его «неиспользованным/не выбранным»…
2.) speechSynthesis.resume() и speechSynthesis.pause(); не работают, на данный момент нет другого решения, кроме их исключения при обнаружении мобильного браузера/сенсорного устройства.
Похоже, это может быть связано с: SpeechSynthesisUtterance не работает в мобильном браузере. Похоже, что в мобильных браузерах речь должна быть инициирована взаимодействием с пользователем хотя бы один раз, чтобы впоследствии быть инициирована программно из JavaScript.
В связанной с этим проблеме следующий код говорит в Chrome Android, но слушатель событий, похоже, не вызывает функцию NextWord, хотя он отлично работает в Chrome и Safari в macOS:
speechTextString = "Hello World"
speechText = new SpeechSynthesisUtterance( speechTextString );
speechText.onboundary = function (event) {
if ( event.name == "word" ) { NextWord( event.charIndex ) }
};
Вы пробовали добавить окно перед синтезом речи? Код является window.speechSynthesis.speak(u) .