我有一个正确运行chrome for windows的脚本,但是当我在我的android chrome上试用它时,它不起作用。 这似乎是声音的问题,因为:
if ('speechSynthesis' in window)
返回true。 我尝试了一些在线示例(例如http://codepen.io/matt-west/pen/wGzuJ)和"声音"选择清单是空的。
我是否需要安装一些东西才能使其正常工作?
此代码适用于chrome for windows但不适用于chrome for android:
function playSentence(text) {
var msg = new SpeechSynthesisUtterance();
msg.text = text;
window.speechSynthesis.speak(msg);
}
$(function () {
playSentence("Hello world");
});
版本:Android 5.0.0 - Chrome 46.0.2490.76
答案 0 :(得分:0)
有两个问题
1)在移动设备上,您需要用户手势才能开始播放文本。将其添加到onclick处理程序中,请参阅以下demo:
<body>
<button id="btnPlay">Play</button>
<script>
function playSentence(text) {
var msg = new SpeechSynthesisUtterance();
msg.text = text;
window.speechSynthesis.speak(msg);
}
$("#btnPlay").click(function() {
playSentence("Hello world");
});
</script>
</body>
2)演示也被破坏了:\但是你需要注意两个关键部分。
我。 getVoices是asynchronus(在规范勘误表中提到),你需要听voiceschanged event,推理有点令人沮丧但有意义,语音系统是懒惰加载的,第一次调用getVoices会阻塞主线程所以对android的第一次调用返回0结果,然后当声音可用时触发onvoiceschanged
。
II。 linked demo错误地在话语上设置了voice
属性。这不存在,而是您需要更改lang和可选的voiceURI以更改默认使用的语音,如下面和new demo中所示。
if (voiceSelect.value) {
var selectedVoice = speechSynthesis.getVoices().filter(function(voice) { return voice.voiceURI == voiceSelect.value; })[0];
msg.voiceURI = selectedVoice.voiceURI;
msg.lang = selectedVoice.lang;
}