Chrome中的语音合成for android无法加载语音

时间:2015-11-24 08:50:22

标签: android google-chrome speech-synthesis

我有一个正确运行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

1 个答案:

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

}