Почему SpeechSynthesis.getVoices () в Google Chrome возвращает пустой список? - PullRequest
0 голосов
/ 14 июля 2020

Я хочу получить доступ к списку голосов, которые являются частью SpeechSynthesis API на рабочем столе Chrome, Safari и Firefox. Если я открываю новую вкладку в каждом браузере и через консоль запускаю:

speechSynthesis.getVoices()

... я ожидаю, что будет возвращен массив, содержащий объекты SpeechSynthesisVoice (т.е. доступные голоса). Firefox и Safari ведут себя так, как ожидалось, но в Chrome первый вызов getVoices () возвращает пустой массив. Мне нужно снова вызвать метод, чтобы получить ожидаемый заполненный массив.

Почему Chrome ведет себя так? Выполняет ли он какую-то ленивую загрузку определенных веб-API? Пожалуйста, помогите мне понять.

1 Ответ

0 голосов
/ 14 июля 2020

Это происходит потому, что SpeechSynthesis API позволяет использовать удаленные серверы для синтеза речи, а Chrome запрашивает список голосов с серверов Google. Чтобы исправить это, вам нужно подождать, когда голоса будут загружены, а затем запросить их снова.

Для этого вы должны прослушать voicechanged событие , а затем инициализировать логику вашей программы c:

speechSynthesis.addEventListener("voiceschanged", () => {
  const voices = speechSynthesis.getVoices()
})
...