SpeechSynthesisUtterance
我有一个用于文本到语音的 Javascript 应用程序。在某些浏览器上,它使用错误的语音(语言)。例如,在一个语言设置为英语的浏览器上,TTS 最终使用德语语音。
是否有配置选项来设置使用的语音?
SpeechSynthesisUtterance
我有一个用于文本到语音的 Javascript 应用程序。在某些浏览器上,它使用错误的语音(语言)。例如,在一个语言设置为英语的浏览器上,TTS 最终使用德语语音。
是否有配置选项来设置使用的语音?
语音 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
,它在我的语言列表中,但不是我的默认语言)。
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>