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

时间:2015-11-11 21:57:08

标签: javascript google-chrome text-to-speech webspeech-api

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

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

2 个答案:

答案 0 :(得分:3)

speech API spec表示浏览器可以决定默认使用哪种语音,并且每种话语可能有不同的默认语音。

voice default attribute

  

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

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

utterance lang attribute

  

此属性指定语音的语言   使用有效的BCP 47语言标签合成话语。   [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作为默认话语语言,但根据this answer,它不是浏览器设置的可靠指标(对我而言,它评估为{{1}在我的语言列表中,但不是我的默认值。)

答案 1 :(得分:0)

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>