我在Windows 10上使用Chrome版本55.0.2883.87 m(64位)。
下面这个简单的html文件重现了这个问题,它是从我的更复杂的应用程序中提取出来的。它应该在页面加载时说三个字。它可以在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>
7条答案
按热度按时间aor9mmx11#
我可能永远不会知道,因为这个问题是间歇性的,但它似乎消失后,我开始取消前发言。
我不认为取消一定要在话语对象的创造和使用之间发生。只是在每次发言之前。我可能有一个不同的问题,因为我只创建了一个话语对象,而不是一堆。我只在Chrome 78上看到过。使用Windows 7,64位。我从来没有在Firefox或Edge上看到过这个问题。
两周后编辑。试了几十次都没有复发。.cancel()解决了我的问题。我的症状是:在Chrome中调用speechSynthesis.speak()有时不会启动语音。在代码中没有直接的问题指示,
speechSynthesis.speaking
将为true,.pending
将为false。将不存在来自话语对象的事件。通常,当speech可以工作时,我会在调用.speak()后大约0.1秒获得一个'start'
事件。xa9qqrwz2#
自2018年以来,在Google的Chrome Web浏览器中,如果没有用户激活,则不再允许使用speechSynthesis.speak()。违反Google Chrome的自动播放政策。因此,谷歌Chrome已经设法撤销了它的自动播放功能,但你可以通过添加一个按钮来使用它进行自定义调用。
您可以访问这里检查Chrome本身提供的状态,下面是所附的图像,其中清楚地表明,speechSynthesis.speak()调用未经用户许可是禁止的。
Link to image
Link to article by Google Chrome
p5cysglq3#
除此之外,对我来说,问题是
SpeechSynthesisUtterance
示例上的播放速率超过2。我发现在Chrome中它必须设置为2或更少(尽管它在Safari等其他浏览器中的使用率更高)。在Chrome中,如果发声速率高于2,则会导致
window.speechSynthesis
卡住,并且需要window.speechSynthesis.cancel()
才能通过.speak()
再次播放音频(以低于2的有效速率)。wa7juj8i4#
你的文本到语音试用只工作了一次吗?原因如下。
在Chrome中,你必须取消语音合成,否则它不符合谷歌的自动播放政策。所以你应该开始你的脚本:
取消之前的语音合成。
tnkciper5#
尝试
我在LiveWeave上做了一个Weave。
mepcadol6#
在调用new时,您可以尝试分别指定速率、音量和文本对象,然后将其转换为语音,而不是指定文本。
avwztpqn7#
你不能在Chrome中自动播放。你必须把它添加到一个事件示例中