语音合成不再阅读中文文本

时间:2016-01-30 14:50:50

标签: javascript google-chrome speech-synthesis

以下代码在过去的2个月里运作良好,直到昨天它停止阅读中文文本,但它阅读英文文本,尽管lang是zh-CN。显然它现在只读英文。搜索了互联网并进行了大量更改并尝试了大约一天(加载和添加语音,添加Chrome扩展程序'Chrome Speak'等),我仍然无法解决问题。 (Chrome Speak读得很好,但我无法弄清楚如何通过javaScript发送文本)

var repete = 0;
function simpleSpeak(text, callback) {
    var u = new SpeechSynthesisUtterance();
    u.text = text;
    u.lang = 'zh-CN';
    u.rate = (repete % 2 == 0) ? 1 : 0.8;
    repete++;

    u.onerror = function (e) {
        alert('error!')
        if (callback) {
            callback(e);
    }
    window.speechSynthesis.speak(u);
};
你能帮帮我吗? 操作系统:Windows Vista,Chrome版本48.0.2564.97 m

2 个答案:

答案 0 :(得分:0)

这似乎与web speech api - speech synthesis .lang property not working有关,其中'pt-BR'(葡萄牙语)不再有效。

答案中引用了Chromium Issue 582455: SpeechSynthesisUtterance does not change language并提出了直接设置.voice属性的解决方案。

答案 1 :(得分:0)

我想我解决了这个问题,我希望它能解决你的问题。在下面的代码中,17表示'zh-CN',表示'pt-BR',15。

var voiceSelected;
function loadVoices() {
    var voices = speechSynthesis.getVoices();
    voices.forEach(function (voice, i) {
        if (i == 17) voiceSelected = voice.name;
    });
}

loadVoices();
window.speechSynthesis.onvoiceschanged = function (e) {
    loadVoices();
};

function speakTTS(text) {
    var laf = new SpeechSynthesisUtterance();
    laf.text = text;
    laf.volume = 1;
    laf.rate = 1;
    laf.pitch = 1;
    laf.voice = speechSynthesis.getVoices().filter(function (voice) {
        return voice.name == voiceSelected;
    })[0];
    window.speechSynthesis.speak(laf);
}