На вашем месте я бы создал массив желаемых имен голоса (мужской и женский), а затем перебрал массив getVoices
, чтобы найти совпадение.Например:
window.speechSynthesis.onvoiceschanged = () => {
const maleVoices = [
'Google US English Male',
'Microsoft David Desktop - English (United States)',
];
const foundVoice = speechSynthesis.getVoices()
.find(({ name }) => maleVoices.includes(name));
console.log('speaking');
speechSynthesis.cancel(); // sometimes needed due to Chrome's buggy implementation
const utter = new SpeechSynthesisUtterance('foo bar');
if (foundVoice) utter.voice = foundVoice;
else console.log('no voice found, using default');
speechSynthesis.speak(utter);
};
Доступные голоса определяются браузером и компьютером пользователя;невозможно загрузить дополнительные голоса через Javascript, если у пользователя нет нужных.
В моем Google Chrome 66 есть и 'Google US English Male'
, и 'Microsoft David Desktop - English (United States)'
.