我有一个使用SpeechSynthesisUtterance
进行文字转换的Javascript应用。在某些浏览器上,它使用错误的语音(语言)。例如,在一个语言设置为英语的浏览器上,TTS最终使用德语语音。
是否有配置选项来设置使用的语音?
答案 0 :(得分:3)
speech API spec表示浏览器可以决定默认使用哪种语音,并且每种话语可能有不同的默认语音。
default
attribute 此属性适用于每种语言最多一个语音。每种语言可能有不同的默认值。它是用户代理 依赖于如何确定默认语音。
默认的utterence语言由HTML lang
属性决定:
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>