我正在Android-Chrome上使用语音合成API。问题是,尽管有4种英语语音可用,但无论代码指定什么,浏览器始终使用美国英语。我可以使用其他语言,例如法语,而不是其他英语声音,例如en-AU,GB或IN。
此代码从getVoices数组中过滤英式英语语音对象,并使用第一个语音词“番茄”。问题在于,该词始终发音为“ to-may-lo”,而不是“ to-mar-to”,这意味着我的文字并没有押韵。
显示使用的语音对象,并且(在我尝试过的电话上)为GB。
html ...
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Let's not call the whole thing off</title>
<script src="tomato.js" defer></script>
</head>
<body>
<div id="tomato" lang="en-GB">Tomato</div>
<div id="platform"></div>
</body>
</html>
还有脚本...
var platform = document.getElementById("platform");
var tomato = document.getElementById("tomato");
var voices = [];
var voicesGB = [];
voices = speechSynthesis.getVoices();
speechSynthesis.onvoiceschanged = function() {
voices = speechSynthesis.getVoices();
voicesGB = voices.filter(voice => /en(-|_)GB/.test(voice.lang));
};
function speak(word) {
var msg = new SpeechSynthesisUtterance();
msg.default = false;
msg.text = word;
msg.voice = voicesGB[0];
msg.lang = voicesGB[0].lang;
window.speechSynthesis.speak(msg);
for (var p in msg.voice) {
platform.innerHTML += p + ': ' + msg.voice[p] + '<br>\n';
}
}
tomato.addEventListener("click",() => {speak('tomato');});
还有一个jsbin:https://jsbin.com/xefukemuga/edit?html,js,output 在Android Chrome中运行此程序,然后点击“西红柿”一词。
我到处搜索并尝试了各种修复程序。您如何控制Android-Chrome使用的语音?
答案 0 :(得分:1)
在Android版本5.0.2上解决此问题的唯一方法是更改Android设置中的默认声音,然后重新启动设备。这样您就可以使用想要的声音,但是其他英语则无法使用。 Here更为详细:
SpeechSynthesis.getVoices()将返回几种英语选项 (美国,澳大利亚,尼日利亚,印度和英国),但 一次只能使用一个。您可以通过选择 设置应用程序,然后依次选择控件->语言和输入->文字转语音 选项。选择Google文字转语音引擎旁边的齿轮图标, 然后在“语言”下,您可以更新要使用的确切语言环境。 如果您选择“安装语音数据”,甚至可以从样本中选择 在某些地区使用不同的声音。您需要重启设备 更改此设置使其生效后。
您在播放设备时在Android设备上使用的语音 SpeechSynthesisUtterance将取决于您在 Android设置。您可以选择要播放的语言 javascript(有关详情,请参见下文),但是您无法控制 语言环境或使用的确切语音。
此问题在Chrome和Firefox上发生,因此可能是一个问题 与Android平台对SpeechSynthesis API的实现。 浏览器更新不太可能解决此问题,但有所不同 Android版本。 (我的测试设备位于Android 5.0.2上,因此如果 此问题已在以后的更新中修复,请告诉我。)