我的网络应用使用Speech Synthesis API。我的问题很简单:我设置了话语及其语言环境。在(我的)MAC计算机上,它可以工作,即。说出所请求的语言环境。在Windows计算机(我试过的)上,它总是使用英语。
var mUtterance=new SpeechSynthesisUtterance(),
mUtterance.text="<text in spanish for example>";
mUtterance.lang="es";
window.speechSynthesis && window.speechSynthesis.speak(mUtterance);
为什么会发生这种情况?
我在两个平台上都使用最新的chrome版本(刚更新)。
答案 0 :(得分:1)
我找到了原因......
如果我将区域设置指定为完整代码 es-ES ,则可以使用。
看起来Chrome / MAC版本可以为所请求的区域设置选择默认变体,而在Chrome / PC版本中,您始终必须指定完整的区域设置代码(语言+变体)。这让我的生活更加困难,因为例如西班牙语有几十种变体,如果有人只安装了其中一种,你必须明确地选择它,否则引擎将默认为英语:(
我写了一个小函数来查找给定语言的任何语言环境变体(第一个找到):
findLocaleCode=function(lang) {
var voices=window.speechSynthesis.getVoices();
for (var i=0, len=voices.length; i<len; i++) try {
var voice=voices[i];
if (voice.lang.indexOf(lang)==0) return voice.lang;
} catch (e) {}
return null;
};
所以我可以这样做:
mUtterance.lang=findLocaleCode("es");
它将从语音列表中获得es-ES,es-AR或其他内容。