我在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>
答案 0 :(得分:2)
我可能永远不确定,因为这个问题是间歇性的,但是在我开始取消发言之前取消之后,它似乎消失了。
utter = new window.SpeechSynthesisUtterance("cat");
window.speechSynthesis.cancel();
window.speechSynthesis.speak(utter);
我认为取消不一定非要在发声对象的创建和使用之间进行。只是在每个演讲之前就出现了。我可能遇到了另一个问题,因为我只创建了一个语音对象,而不是一个对象。我只在Chrome 78上看到它。使用Windows 7(64位)。从未在Firefox或Edge上看到问题。
编辑2周后。数十次尝试后无复发。似乎.cancel()解决了我的问题。我的症状是:在Chrome中调用SpeechSynthesis.speak()有时无法启动语音。代码中没有立即表明有问题的信息,speechSynthesis.speaking
为真,.pending
为假。话语对象不会有任何事件。通常,当语音能够正常工作时,我会在调用.speak()约0.1秒后收到'start'
事件。
答案 1 :(得分:0)
.resultsDisplay {width: 100%; height: 90%;}
#stopbtn {display: none;}
&#13;
<div class="resultsDisplay" id="rd"></div>
<br/>
<center>
<button onclick="start()" id="startbtn">Start</button>
<button onclick="stop()" id="stopbtn">Stop</button>
</center>
&#13;
utterance = new SpeechSynthesisUtterance("cat, dog, bark");
speechSynthesis.speak(utterance);
&#13;
尝试
{{1}}
答案 2 :(得分:0)
speechSynthesis.speak()在用户未激活Google Chrome浏览器的情况下不再允许。它违反了Google Chrome浏览器的自动播放政策。因此,谷歌浏览器设法撤消了它的自动播放功能,但是您可以通过添加一个按钮来进行自定义呼叫来使用它。
您可以访问这里以检查chrome本身提供的状态,以下是所附图片,该图片清楚地表明,未经用户许可,禁止了SpeechSynthesis.speak()调用。
答案 3 :(得分:0)
您可以尝试分别指定具有速率、音量和文本的对象,而不是在调用 new 时指定文本,然后将其转换为语音。
答案 4 :(得分:0)
此外,对我而言,问题是 SpeechSynthesisUtterance
实例的播放速率高于 2。我发现它必须在 chrome 中设置为 2 或更少(尽管它在其他safari 等浏览器)。
在chrome中,如果发声率高于2,会导致window.speechSynthesis
卡住,需要window.speechSynthesis.cancel()
才能通过{{}再次播放音频(有效率低于2) 1}}。