我正在使用Android-Chrome上的语音合成API。问题是,尽管有4种英语声音可用,但浏览器总是使用美国英语,无论代码指定了什么。我可以使用其他语言,如法语,但不是其他英语语音,例如-AU,GB,或IN。
该代码从getVoices数组中过滤英国英语语音对象,并使用第一个单词“番茄”。问题是这个单词总是发音为“to-可能-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上运行这个程序,然后点击“番茄”这个词。
我搜遍了所有的地方,尝试了各种修复方法。你如何控制Android-Chrome的声音?
发布于 2020-04-22 13:22:49
在AndroidVersion5.0.2上解决此问题的唯一方法是更改Android设置中的默认声音,然后重新启动设备。这将允许您使用您想要的声音,但其他的英语将是不可用的。这里是一些更详细的内容:
SpeechSynthesis.getVoices()将返回几个英文选项(美国、澳大利亚、尼日利亚、印度和英国),但一次只提供一个选项。你可以选择哪一个通过进入设置应用程序,然后控制->语言和输入->文本到语音选项。在Google文本到语音引擎旁边选择齿轮图标,然后在语言下你可以更新你想要使用的确切区域。如果选择“安装语音数据”,甚至可以从一些地区的不同声音样本中进行选择。更改此设置后,需要重新启动设备才能生效。 当您播放SpeechSynthesisUtterance时,安卓设备上使用的声音将取决于您在Android设置中选择了什么。您可以从javascript中选择要播放的语言(请参阅下面的详细信息),但您无法控制所使用的语言环境或准确的声音。 这个问题发生在Chrome和火狐上,所以这很可能是安卓平台实现speechSynthesis API的一个问题。浏览器更新不太可能解决这个问题,但是不同版本的Android可能会解决这个问题。(我的测试设备是在Android5.0.2上,所以如果这是在以后的更新中修复的,请告诉我。)
https://stackoverflow.com/questions/52975068
复制相似问题