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

Speech Synthesis no longer reads Chinese text

本文关键字:中文 文本 不再 语音合成      更新时间:2023-09-26

以下代码在过去 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

这似乎与网络语音 API 有关 - 语音合成 .lang 属性在"pt-BR"(葡萄牙语)不再工作的情况下不起作用。

那里的答案引用了Chromium Issue 582455:SpeechSynthesisUtterance不会更改语言,并建议直接设置.voice属性的解决方案。

我想

我解决了问题,我希望它也能解决你的问题。在下面的代码中,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);
}