Android-Chrome中的SpeechSynthesis:无法从美国英语更改英语语音

时间:2018-10-24 17:42:34

标签: javascript text-to-speech speech-synthesis android-chrome

我正在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使用的语音?

1 个答案:

答案 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上,因此如果 此问题已在以后的更新中修复,请告诉我。)