speechSynthesis.speak在chrome中不起作用

Zac*_*ell 8 google-chrome webspeech-api

我在Windows 10上使用Chrome版本55.0.2883.87 m(64位).

以下简单的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>
Run Code Online (Sandbox Code Playgroud)

Bob*_*ein 22

我可能永远不会确定,因为这个问题是间歇性的,但在我在说话之前开始取消之后它似乎消失了。

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

window.speechSynthesis.cancel();
window.speechSynthesis.speak(utter);
Run Code Online (Sandbox Code Playgroud)

我不认为取消必须介于话语对象的创建和使用之间。只是它在每次说话之前出现。我可能遇到了不同的问题,因为我只创建了一个话语对象,而不是一堆。我只在 Chrome 78 上看到它。使用 Windows 7,64 位。从未在 Firefox 或 Edge 上看到过这个问题。

2 周后编辑。试了几十次都没有复发。似乎 .cancel() 解决了我的问题。我的症状是:在 Chrome 中调用 SpeechSynthesis.speak() 有时不会开始演讲。代码中没有立即出现问题的迹象,speechSynthesis.speaking可能为真,.pending也可能为假。不会有来自话语对象的事件。通常,当语音起作用时,我会'start'在调用 .speak() 后大约 0.1 秒收到一个事件。


小智 10

自 2018 年以来,如果没有用户激活, speechSynthesis.speak() 将不再被允许在 Google Chrome 网络浏览器中使用。它违反了 Google Chrome 的自动播放政策。因此,谷歌浏览器已经成功地撤销了它的自动播放功能,但您可以通过添加一个按钮来进行自定义调用来使用它。

您可以访问此处检查 chrome 本身提供的状态,下面是所附的图像,它清楚地表明未经用户许可禁止调用 voiceSynthesis.speak() 。

链接到图像

链接至 Google Chrome 的文章


小智 0

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";
}
Run Code Online (Sandbox Code Playgroud)
.resultsDisplay {width: 100%; height: 90%;}
#stopbtn {display: none;}
Run Code Online (Sandbox Code Playgroud)
<div class="resultsDisplay" id="rd"></div>
<br/>

<center>
  <button onclick="start()" id="startbtn">Start</button>
  <button onclick="stop()" id="stopbtn">Stop</button>
</center>
Run Code Online (Sandbox Code Playgroud)

尝试

utterance = new SpeechSynthesisUtterance("cat, dog, bark");
speechSynthesis.speak(utterance);
Run Code Online (Sandbox Code Playgroud)

我在LiveWeave做了一个Weave