2014-10-10 87 views
2

我的web应用程序使用语音合成API。我的问题很简单:我设置了话语和语言环境。在(我的)MAC电脑上,它工作,即。与请求的语言环境进行交谈。在Windows电脑上(我尝试过的),它总是使用英语。不支持PC计算机中的语言环境的HTML5语音合成

var mUtterance=new SpeechSynthesisUtterance(), 
mUtterance.text="<text in spanish for example>"; 
mUtterance.lang="es"; 
window.speechSynthesis && window.speechSynthesis.speak(mUtterance); 

为什么会发生这种情况?

我在两个平台中都使用最新的chrome版本(刚刚更新)。

回答

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从或什么语音列表。