Как установить английский язык speech.Synthesis
У меня есть следующий код:
const getVoices = () => {
return new Promise(resolve => {
let voices = speechSynthesis.getVoices()
if (voices.length) {
resolve(voices)
return
}
speechSynthesis.onvoiceschanged = () => {
voices = speechSynthesis.getVoices()
resolve(voices)
}
})
}
const printVoicesList = async () => {
;(await getVoices()).forEach(voice => {
console.log(voice.name, voice.lang)
})
}
printVoicesList();
Он выводит список всех голосов, которые доступны в текущем браузере. В хроме все работает отлично. Но вот на андроиде в браузерах или в опере(на компе) выводится только 2 языка

Но мне нужен только англ. язык для озвучки, как мне установить для всех платформ и браузеров стандартный язык - английский. Неужели опера поддерживает только рус. язык, этого же не может быть.
Ответы (1 шт):
Автор решения: andrey
→ Ссылка
Сам столкнулась с тем, что не все браузеры поддерживают голоса. У оперы всего 2 шт. и оба русские. Привожу пример кода как можно получить голоса в select или посмотреть в консоли. У разных браузеров по разному у Microsoft Edge их больше всего.
<body>
<form class="row">
<div class="col-3 text-primary h5">
Выберите голос
</div>
<div class="col-9">
<select name="sel" id="voices" class="form-select"></select>
</div>
</form>
<script>
const speechSynthesis = window.speechSynthesis;
const voiceSelect = document.getElementById('voices');
// голоса
const LANG_EN = 'en-GB';
const LANG_RU = 'ru-RU';
let voices = [];
const populateVoiceList = () => {
voices = speechSynthesis.getVoices();
// тут только английские
const voiceList = voices
.map((voice, index) => voice.lang === LANG_EN && `<option value=${index}>${voice.name} (${voice.lang})</option>`)
.join('');
// тут все голоса
// const voiceList = voices
// .map((voice, index) => `<option value=${index}>${voice.name} (${voice.lang})</option>`)
// .join('');
// В консоли можем посмотреть все наши голоса
console.log(voices);
voiceSelect.innerHTML = voiceList;
};
// Строчки отображаем наши голоса
populateVoiceList();
speechSynthesis.addEventListener('voiceschanged', populateVoiceList);
</script>
</body>