Ответ 1
У меня есть проблема, когда в Firefox речь отключается, если страница автоматически обновляется, но в Google Chrome она заканчивает произносить речь, даже если страница автоматически обновляется.
Описанное поведение для Firefox является разумной ожидаемой реализацией.
Просматривая исходный код Firefox и Chromium, реализация speechSynthesis.speak()
основана на speechSynthesis.speak()
соединении с локальным речевым сервером. Этот сервер в * nix обычно является speech-dispatcher
или speechd
( speech-dispatcher
). См. Как программно отправить команду сокета unix на системный сервер, автоматически созданный браузером, или преобразовать JavaScript в C++ исходный код для Chromium? за описание попытки реализовать SSML-разбор в Chromium.
В конце концов решили написать собственный код для выполнения этого требования, используя JavaScript в соответствии со спецификацией W3C SpeechSynthesisSSMLParser, задав несколько вопросов на сайтах SE, регистрируя проблемы и ошибки и публикуя их в списках рассылки W3C без каких-либо доказательств того, что синтаксический анализ SSML когда-либо будет включен как часть. API веб-речи.
Как только это соединение инициировано, создается очередь для вызовов .speak()
. Даже когда соединение закрыто, Task Manager
может показывать активный процесс, зарегистрированный службой.
Процесс в Chromium/Chrome не без ошибок, наиболее близким к тому, что описано в вопросе, является
-
Почему не решен вопрос № 88072 и номер 795371? Internals> SpeechSynthesis and Blink> Речь мертва? (по возможной причине, почему "но в Google Chrome он заканчивает произносить речь, даже если страница автоматически обновляется." в Chrome все еще возможно)
.volume
собственности .volume
-
Проблема 797512: настройка SpeechSynthesisUtterance.volume не изменяет громкость аудиовыхода speechSynthesis.speak() (Chromium/Chrome)
Наиболее вопиющей проблемой является реализация Chromium/Chrome webkitSpeechReconition
которая записывает аудио пользователя и webkitSpeechReconition
эти аудиоданные в удаленную службу, где транскрипт возвращается в браузер - без явного уведомления пользователя, имеющего место, помеченного как WONT FIX
Соответствующие проблемы W3C Speech API на GitHub
-
UA должен иметь возможность запретить говорить() от автоигры # 27
-
Точно определите, когда говорить() не удастся из-за правил автозапуска # 35 (по иронии судьбы, относящихся к сообщаемому поведению в Chromium/Chrome и выходным данным, описанным в этом вопросе, см. Изменения в веб-аудио, политике автозапуска и играх и политике автозапуска)
-
Намерение устареть: speechSynthesis.speak без активации пользователя
Резюме
API-интерфейс SpeechSynthesis активно используется в Интернете. У нас нет точных данных о злоупотреблениях, но, поскольку другие возможности автозапуска начинают закрываться, злоупотребления постепенно переходят к API веб-речи, который не следует правилам автозапуска.
После устаревания планируется, что speechSynthesis.speak немедленно вызовет ошибку, если определенные правила автозапуска не будут выполнены. Это выровняет его с другими аудио API в Chrome.
-
-
Сроки изменения состояния SpeechSynthesis не определены # 39
-
Время запуска событий SpeechSynthesisUtterance не определено # 40
-
Уточнить, что происходит, если два окна пытаются говорить # 47
Таким образом, не будет описывать поведение в Firefox как "проблему", но поведение в Chrome как потенциальную "проблему".
Погружение в реализацию W3C Web Speech API в браузерах не является тривиальной задачей. По нескольким причинам. Включая очевидную направленность или доступный вариант коммерческих услуг TTS/SST и проприетарных реализаций синтеза и распознавания речи с закрытым исходным кодом в "смартфонах"; вместо исправления различных проблем с фактическим развертыванием W3C Web Speech API в современных браузерах.
speechd
речи (речевой диспетчер) очень полезны в отношении серверной части (локальный сокет speech-dispatcher
).
Не могу говорить за сопровождающих Firefox. Предполагается, что маловероятно, что если сообщение об ошибке, относящееся к запросу функции продолжения выполнения вывода звука с помощью .speak()
из перезагруженного window
, согласуется с недавними политиками автоматического воспроизведения, реализованными браузерами. Хотя вы все равно можете отправить сообщение об ошибке в Firefox, чтобы спросить, ожидается ли продолжение вывода звука (из любого API или интерфейса) во время перезагрузки текущего window
; и если есть какие-либо предпочтения или политики, которые можно установить для переопределения описанного поведения, как предложено в ответе @zip. И получите ответ от самих разработчиков.
Есть отдельные люди и группы, которые составляют код FOSS, которые активны в домене и готовы помочь в разработке SST/TTS, многие из которых активны в GitHub, что является еще одним вариантом, чтобы задавать вопросы о том, как реализовать то, что вы пытаетесь достичь конкретно в браузере Firefox.
Помимо того, что вы запрашиваете у разработчиков запрос функции, вы можете прочитать исходный код и попытаться создать один или несколько обходных путей. Альтернативы включают в себя использование meSpeak.js
, хотя это не обязательно meSpeak.js
, что Firefox намеренно блокирует вывод звука во время перезагрузки window
.