speechSynthesis.speak在chrome中不起作用

时间:2017-01-09 01:13:46

标签: 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>

5 个答案:

答案 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)

&#13;
&#13;
.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;
&#13;
&#13;

尝试

{{1}}

我在Weave做了LiveWeave

答案 2 :(得分:0)

自2018年以来,

speechSynthesis.speak()在用户未激活Google Chrome浏览器的情况下不再允许它违反了Google Chrome浏览器的自动播放政策。因此,谷歌浏览器设法撤消了它的自动播放功能,但是您可以通过添加一个按钮来进行自定义呼叫来使用它。

您可以访问这里以检查chrome本身提供的状态,以下是所附图片,该图片清楚地表明,未经用户许可,禁止了SpeechSynthesis.speak()调用。

Link to image

Link to article by Google Chrome

答案 3 :(得分:0)

您可以尝试分别指定具有速率、音量和文本的对象,而不是在调用 new 时指定文本,然后将其转换为语音。

答案 4 :(得分:0)

此外,对我而言,问题是 SpeechSynthesisUtterance 实例的播放速率高于 2。我发现它必须在 chrome 中设置为 2 或更少(尽管它在其他safari 等浏览器)。

在chrome中,如果发声率高于2,会导致window.speechSynthesis卡住,需要window.speechSynthesis.cancel()才能通过{{}再次播放音频(有效率低于2) 1}}。