android chrome 中的语音合成不加载语音

use*_*301 6 android google-chrome speech-synthesis

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

if ('speechSynthesis' in window)
Run Code Online (Sandbox Code Playgroud)

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

我需要安装一些东西才能使其工作吗?

此代码适用于 Windows 的 chrome,但不适用于 Android 的 chrome:

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

 $(function () {
     playSentence("Hello world");
 });
Run Code Online (Sandbox Code Playgroud)

版本:Android 5.0.0 - Chrome 46.0.2490.76

Kin*_*lan 3

有两个问题

1)在移动设备上,您需要用户手势才能开始播放文本。将其添加到 onclick 处理程序中,请参阅以下演示

<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>
Run Code Online (Sandbox Code Playgroud)

2) 演示也被破坏了:\ 但有两个关键部分你需要注意。

我。getVoices 是异步的(在规范勘误表中提到),您需要监听voiceschanged 事件,推理有点令人沮丧,但有道理,语音系统是延迟加载的,第一次调用 getVoices 会阻塞主线程,所以第一个android 上的 call 返回 0 结果,然后onvoiceschanged在语音可用时 触发。

二. 链接的演示错误地设置了voice话语的属性。这不存在,相反,您需要更改 lang 和(可选)voiceURI 来更改默认使用的语音,如下所示和新演示中。

if (voiceSelect.value) {
  var selectedVoice = speechSynthesis.getVoices().filter(function(voice) { return voice.voiceURI == voiceSelect.value; })[0];

  msg.voiceURI = selectedVoice.voiceURI;
  msg.lang = selectedVoice.lang;

}
Run Code Online (Sandbox Code Playgroud)