HTML5语音合成API - 只能使用“本机”语音

时间:2015-04-28 13:01:00

标签: javascript jquery html5 speech-synthesis webspeech-api

我有一个使用HTML5语音合成API的Web应用程序,它可以工作 - 但只能使用本机语音。这是我的代码:

var msg = new SpeechSynthesisUtterance();
var voices;

window.speechSynthesis.onvoiceschanged = function() {
    voices = window.speechSynthesis.getVoices();
};

$("#btnRead").click(function() {
        speak();
});

function speak(){
    msg = new SpeechSynthesisUtterance();
    msg.rate = 0.8;
    msg.text = $("#contentView").html();
    msg.voice = voices[10];
    msg.lang = 'en-GB';
    window.speechSynthesis.speak(msg);
}

声音[10]是唯一有效的声音,当我将它录制到控制台时,我可以看到它是原生声音 - 这似乎暗示其他声音没有正确加载,但它们仍然出现在当你在这里看到它时,声音数组被记录到控制台:

Screenshot of console

有人有什么想法吗?我敢肯定我可能错过了一些相对简单的东西,但我现在已经和它搏斗了一下!我正在使用谷歌Chrome版本42.0.2311.90,据我所知,它应该支持语音合成API。

1 个答案:

答案 0 :(得分:1)

刚开始玩speechSynthesis,所以没有花太多时间在上面。我偶然发现了你的问题,我相信答案是你选择的语音不支持你提供的语言而且你会得到一个后备。

如果你阅读文档并检查你如何选择它的工作方式(至少在我的电脑上) https://developers.google.com/web/updates/2014/01/Web-apps-that-talk-Introduction-to-the-Speech-Synthesis-API?hl=en

var msg = new SpeechSynthesisUtterance('Awesome!');
msg.voice = speechSynthesis.getVoices().filter(function(voice) { 
      return voice.name == 'Google UK English Male'; 
})[0];

// now say it like you mean it:
speechSynthesis.speak(msg);

希望这可以帮助您或其他人搜索它。