SpeakSynthesis.speak не работает в Chrome

Я использую версию Chrome 55.0.2883.87 m (64-разрядную) в Windows 10.

Следующий простой html-файл воспроизводит проблему и извлечен из моего более сложного приложения. При загрузке страницы предполагается произносить 3 слова. Он работает в MS Edge и Firefox, но не работает в Chrome. Этот код работал у меня в Chrome без проблем пару недель назад.

<html>
<head>
    <script lang="javascript">
        window.speechSynthesis.speak(new SpeechSynthesisUtterance("cat"));
        window.speechSynthesis.speak(new SpeechSynthesisUtterance("dog"));
        window.speechSynthesis.speak(new SpeechSynthesisUtterance("bark"));
    </script>
</head>
<body></body>
</html>

person Zach Fewtrell    schedule 09.01.2017    source источник


Ответы (5)


Я, возможно, никогда не узнаю наверняка, потому что эта проблема была периодической, но, похоже, она исчезла после того, как я начал отменять прямо перед выступлением.

utter = new window.SpeechSynthesisUtterance("cat");

window.speechSynthesis.cancel();
window.speechSynthesis.speak(utter);

Я не думаю, что отмена обязательно должна происходить между созданием и использованием объекта высказывания. Просто перед каждым выступлением. У меня могла быть другая проблема, так как я создавал только один объект высказывания, а не группу. Я видел это только в Chrome 78. На Windows 7, 64-бит. Никогда не видел проблемы в Firefox или Edge.

ИЗМЕНИТЬ 2 недели спустя. Никаких повторений после нескольких десятков попыток. Кажется .cancel () решил мою проблему. У меня были следующие симптомы: вызов SpeakSynthesis.speak () в Chrome иногда не запускал речь. В коде не было непосредственных указаний на проблему, speechSynthesis.speaking было бы истинным, а .pending было бы ложным. Не было бы событий от объекта высказывания. Обычно, когда речь работает, я получаю событие 'start' примерно через 0,1 секунды после вызова .speak ().

person Bob Stein    schedule 09.11.2019

SpeakSynthesis.speak () больше не разрешен без активации пользователем в веб-браузере Google Chrome с 2018 года. Это нарушает политику автозапуска Google Chrome. Таким образом, Google Chrome удалось отозвать функцию автозапуска, но вы можете использовать ее, добавив кнопку для выполнения пользовательского вызова.

Вы можете посетить здесь, чтобы проверить статус, предоставляемый самим Chrome, также ниже прилагается изображение, которое ясно показывает, что вызов SpeakSynthesis.speak () запрещен без разрешения пользователя.

Ссылка на изображение

Ссылка на статью в Google Chrome

person Aditya Pramanik    schedule 13.09.2020

resultsDisplay = document.getElementById("rd");
startButton = document.getElementById("startbtn");
stopButton = document.getElementById("stopbtn");

recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition || window.mozSpeechRecognition || window.msSpeechRecognition)();
recognition.lang = "en-US";
recognition.interimResults = false;
recognition.maxAlternatives = 5;

recognition.onresult = function(event) {
  resultsDisplay.innerHTML = "You Said:" + event.results[0][0].transcript;
};

function start() {
  recognition.start();
  startButton.style.display = "none";
  stopButton.style.display = "block";
}

function stop() {
  recognition.stop();
  startButton.style.display = "block";
  stopButton.style.display = "none";
}
.resultsDisplay {width: 100%; height: 90%;}
#stopbtn {display: none;}
<div class="resultsDisplay" id="rd"></div>
<br/>

<center>
  <button onclick="start()" id="startbtn">Start</button>
  <button onclick="stop()" id="stopbtn">Stop</button>
</center>

Пытаться

utterance = new SpeechSynthesisUtterance("cat, dog, bark");
speechSynthesis.speak(utterance);

Я сделал Weave на LiveWeave.

person Community    schedule 21.11.2017

Вместо того, чтобы указывать текст при вызове new, вы можете попробовать указать объект с частотой, громкостью и текстом отдельно, а затем преобразовать его в голос.

person just_another_beginner    schedule 02.07.2021

В дополнение к этому, проблема для меня заключалась в том, что скорость воспроизведения в экземпляре SpeechSynthesisUtterance была выше 2. Я обнаружил, что в Chrome она должна быть установлена ​​на 2 или меньше (хотя в других браузерах, таких как Safari, она работает с более высокой скоростью).

В Chrome, если частота произнесения выше 2, это приводит к зависанию window.speechSynthesis и требует window.speechSynthesis.cancel(), прежде чем он снова воспроизведет звук (с допустимой частотой ниже 2) через .speak().

person miir    schedule 16.07.2021