4

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

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

4

2 回答 2

4

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

语音default属性

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

默认的话语语言由 HTMLlang属性决定:

话语lang属性

此属性使用有效的 BCP 47 语言标签指定话语的语音合成语言。[ BCP47 ] 如果未设置,它将保持未设置以进入脚本,但默认使用 html 文档根元素和相关层次结构的语言。当输入请求打开与识别服务的连接时,会计算并使用此默认值。

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

<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,它在我的语言列表中,但不是我的默认语言)。

于 2015-11-11T22:24:24.870 回答
1

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>
于 2015-12-12T02:23:27.287 回答