2015-11-24 221 views
1

我有一个脚本正确运行在windows上的chrome,但是当我在我的android chrome上尝试它时,它不起作用。 这似乎是声音的问题,因为:在chrome中的语音合成为android不加载声音

if ('speechSynthesis' in window) 

返回true。 我尝试了一些在线示例(例如http://codepen.io/matt-west/pen/wGzuJ),并且“声音”选择列表为空。

我需要安装一些东西来完成这项工作吗?

这个代码在Chrome浏览器窗口,但不会在Android版Chrome:

function playSentence(text) {  
    var msg = new SpeechSynthesisUtterance();  
    msg.text = text; 
    window.speechSynthesis.speak(msg); 
} 

$(function() { 
    playSentence("Hello world"); 
}); 

版本:Android的5.0.0 - 铬46.0.2490.76

回答

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)该演示也断:\但也有您需要照顾的两个关键部分。

i。 getVoices是asynchronus(在Spec勘误中提到),你需要听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; 

} 
+0

感谢您抽出时间回复。问题是在该设备中没有安装声音(我不知道为什么,我不知道它是否是一个常见问题)。我在android中安装了一个TTS程序,之后问题解决了。 无论如何,正如你所说的显然是话语的“声音”属性没有效果,我不得不改变“郎”属性。我认为解决了这个问题。我会进一步测试,然后编辑我的原始问题。 谢谢! – user3192301