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) .

Другие вопросы по тегам