синтез речи - Как изменить пол? - PullRequest
0 голосов
/ 15 мая 2018

Я создал простое текстовое веб-приложение, которое использует window.speechSynthesis, и оно работает хорошо.Я хотел бы добавить возможность устанавливать определенный текст женским, а другой текст мужским голосом.

  1. Кажется, что если я использую getVoices () из API веб-речи, списокварьируется от браузера к браузеру.Кажется, что нет свойства для «пола».Некоторые из хромированных имен имеют «мужской», некоторые нет.У некоторых есть женские имена и мужские имена.Похоже, в Google Chrome нет мужчины, говорящего по-американски.Я что-то упустил?

  2. Если бы я знал, какими могут быть все имена, я мог бы сохранить список и просто просматривать список, пока не найду работающее. Есть ли способ узнать, включен ли голос на этом устройстве?

  3. Или есть ли способ загрузить (с моим приложением) мужчину иженский голос, который будет работать во всех браузерах?

Мне нужно, чтобы это работало на всех устройствах.

1 Ответ

0 голосов
/ 15 мая 2018

На вашем месте я бы создал массив желаемых имен голоса (мужской и женский), а затем перебрал массив 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)'.

...