语音合成 - 如何改变性别?

时间:2018-05-15 03:09:57

标签: javascript speech-synthesis

我创建了一个简单的文字转语音网络应用,它使用了window.speechSynthesis,并且效果很好。我想添加在女性中设置某些文本的功能,以及用男性声音设置其他文本的功能。

  1. 似乎如果我使用来自网络语音API的getVoices(),则该列表因浏览器而异。它似乎不是"性别"的财产。一些镀铬名称有男性'男性'在他们中间,有些人不愿意。有些人有女性名字和男性名字。 Google Chrome似乎没有列出男性美国演讲者。我错过了什么吗?

  2. 如果我知道所有名字可能是什么,那么我可以存储列表,然后直到我找到一个有效的列表。 有没有办法知道该设备上是否启用了语音?

  3. 或者,有没有办法下载(使用我的应用)男声和女声可以在所有浏览器中使用?

  4. 我需要这个才能在所有设备上运行。

1 个答案:

答案 0 :(得分:0)

如果我是你,我会创建一个所需语音名称(男性和女性)的数组,然后遍历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)'