如何在Google Chrome中设置SpeechSynthesisUtterance的默认语音

How do I set the default voice for SpeechSynthesisUtterance in Google Chrome?

本文关键字:SpeechSynthesisUtterance 默认 语音 设置 Google Chrome      更新时间:2023-09-26

我有一个Javascript应用程序,它使用SpeechSynthesisUtterance进行文本到语音转换。在某些浏览器上,它使用了错误的语音(语言)。例如,在一个语言设置为英语的浏览器上,TTS最终使用德语语音。

是否有设置所用语音的配置选项?

语音API规范规定浏览器可以决定默认使用哪种语音,并且每个话语语言可能有不同的默认语音。

语音default属性:

对于每种语言最多一个语音,此属性是正确的。每种语言可能有不同的默认值。它是用户代理取决于如何确定默认语音。

默认话语语言由HTML lang属性决定:

话语lang属性:

此属性指定语音的语言使用有效的BCP47语言标签对话语进行合成。[BCP47]如果未设置,它将保持未设置状态以进入脚本,但将默认使用html文档根元素的lang相关的等级制度。当输入请求打开与识别服务的连接。

这意味着,默认使用英国语音:

<html lang="en-GB">
<body>
  <script>
  var utterance = new SpeechSynthesisUtterance('Toodle pip');
  window.speechSynthesis.speak(utterance);
  </script>
</body>
</html>

然而,这并没有改变Chrome 46中我的默认语音(我的默认语言是en-GB;默认情况下我也会使用德语语音)。

可以使用navigator.language作为默认话语语言,但根据这个答案,它不是浏览器设置的可靠指标(对我来说,它的评估结果为en-US,它在我的语言列表中,但不是我的默认语言)。

Chrome似乎忽略了HTML lang属性。解决方案是设置话语的属性:

<script>
    var utterance = new SpeechSynthesisUtterance('Toodle pip');
    utterance.lang='en-US'; // for US english, en-GR for british
    window.speechSynthesis.speak(utterance);
</script>