SpeechSynthesis не работает, чтобы говорить на португальском языке (pt-BR)

Я пишу код javascript, который хочу приветствовать пользователей, когда они нажимают кнопку «Пуск». Это работает на английском языке, но дело в том, что я хочу, чтобы он говорил на бразильском португальском (pt-BR). Я пробовал много решений, но, похоже, это не сработает. Кто-нибудь может мне помочь, пожалуйста!

Код:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
<script>

startTalking = function(line){
    var text  = new SpeechSynthesisUtterance();
    text.lang = "pt-BR";
    text.text = line;
    speechSynthesis.speak(text);
  }

</script>
</head>
<body>

<button id="startButton" onclick = "startTalking("Bem vindo!")"></button>

</body>
</html>

Когда я нажимаю кнопку, скрипт работает, но текст, полученный в параметре, произносится голосом на английском языке (США).

Кто-нибудь знает, как это исправить?

Спасибо!!


person ulissesBR    schedule 07.04.2016    source источник


Ответы (2)


Спасибо за ответ Бруно. Я решил эту ситуацию на следующий день. Я разместил вопрос, но не смог опубликовать решение здесь. Я решил эту ситуацию, используя это:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
<script>

var text;
var voices;

window.speechSynthesis.onvoiceschanged = function() {
  text = new SpeechSynthesisUtterance();
  voices = window.speechSynthesis.getVoices();
  text.voiceURI = 'Google português do Brasil'; //discovered after dumping getVoices()
  text.lang = "pt-BR";
  text.localService = true;
  text.voice = voices[15]; //index to the voiceURI. This index number is not static.
}

startSpeaking = function(line){
  text.text = line;
  speechSynthesis.speak(text);
}

</script>
</head>
<body>

<button id="startButton" onclick = "startTalking("Bem vindo!")"></button>

</body>
</html>

Как только onvoiceschanged стал асинхронным, теперь все работает нормально!

Даже я уже решил это, я очень благодарен за ваш ответ. Большое спасибо.

С уважением,

Улисс

person ulissesBR    schedule 12.04.2016
comment
У меня похожая проблема, так как мое приложение должно говорить сразу после загрузки страницы, а голоса не всегда загружаются вовремя. - person Douglas De Rizzo Meneghetti; 24.05.2016
comment
@DouglasDeRizzoMeneghetti Попробуйте решение, которое я опубликовал, оно хорошо сработало для меня. В любом случае, чтобы убедиться, что ваш документ полностью загружен и готов к обработке вашего кода, вы можете использовать оператор jQuery: $(document).ready(function());, где function — это имя функции, которую вы хотите вызвать после полной загрузки страницы. Надеюсь это поможет! - person ulissesBR; 25.05.2016
comment
Спасибо. Я не знаком с jQuery (судите меня), но я сделал что-то подобное с addEventListener('load'), и это сработало нормально. - person Douglas De Rizzo Meneghetti; 25.05.2016
comment
@DouglasDeRizzoMeneghetti, никто не может осудить вас за такие вещи, знания — это всегда то, что мы завоевываем, никто не может учиться за вас ;)! Рад, что у вас получилось! :) - person ulissesBR; 27.05.2016

Смотри:

API веб-речи - свойство синтеза речи .lang не работает

и это:

https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis/onvoiceschanged

По какой-то причине теперь вам нужно заполнить список голосов, и только после этого вы можете выбрать нужный язык/версию.

person Bruno    schedule 11.04.2016