如何在Google Chrome中设置SpeechSynthesisUtterance的默认语音
How do I set the default voice for SpeechSynthesisUtterance in Google Chrome?
我有一个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>