以下代码在过去的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
答案 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);
}