HTML5 Speech Synthesis API - способен использовать только "родной" голос

У меня есть веб-приложение, которое использует API синтеза речи HTML5, и оно работает - но только с собственным голосом. Вот мой код:

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);
}

voices [10] - единственный голос, который работает, и когда я записываю его на консоль, я вижу, что это собственный голос, который, по-видимому, предполагает, что другие голоса загружаются неправильно, но они все еще появляются в массиве голосов когда он вошел в консоль, как вы можете увидеть здесь:

Скриншот консоли

У кого-нибудь есть идеи? Я уверен, что, возможно, я упускаю что-то относительно простое, но я боролся с этим немного сейчас! Я использую Google Chrome версии 42.0.2311.90, который, насколько я могу судить, должен поддерживать API синтеза речи.

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);

Надеюсь, что это поможет вам или другим людям, которые ищут это.

Другие вопросы по тегам