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
有两个问题
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)
| 归档时间: |
|
| 查看次数: |
4492 次 |
| 最近记录: |