Как заставить speechSynthesis заговорить по-русски?

Всем привет.
С недавних пор, данный код:
<script>
if (window.speechSynthesis){	
if (window.speechSynthesis != 'undefined') {
var msg = new SpeechSynthesisUtterance();
var voices = window.speechSynthesis.getVoices();
msg.voice = voices[17]; // Note: some voices don't support altering params
msg.voiceURI = '16';
msg.volume = 1; // 0 to 1
msg.rate = 1; // 0.1 to 10
msg.pitch = 2; //0 to 2
msg.text = t;
msg.lang = 'ru-RU';
msg.onend = function(e) {
console.log('Finished in ' + event.elapsedTime + ' seconds.');
};
speechSynthesis.speak(msg);
};
};
</script>

- разговаривает только если указан текст латинскими буквами, русский не воспринимает.
А раньше в хроме нормально говорил на русском.

Может кто-нибудь знает, что изменилось и как он теперь работает?

К примеру, тут (если открыть в хроме и выбрать Google-русский) все работает нормально: codepen.io/matt-west/full/wGzuJ
  • Вопрос задан
  • 4024 просмотра
Решения вопроса 1
@vsvladimir
Возможно проблема с voices[17], лучше вычислять индекс на основе реального массива:

var voices = window.speechSynthesis.getVoices();
    setTimeout(function() { voices = window.speechSynthesis.getVoices(); }, 1000);

    function findVoice(lang) {        
        for (var i = 0; i < voices.length; i++) {
            if (voices[i].lang === lang) { return voices[i]; }
        }
        return null;
    }

    this.speak = function(s) {
        if (!window.speechSynthesis) { return; }
        var utterance = new SpeechSynthesisUtterance(s);        
        utterance.lang = "ru-RU";
        utterance.voice = findVoice(utterance.lang);
        window.speechSynthesis.speak(utterance);
    };
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы