我创建了一个简单的文字转语音网络应用,它使用了window.speechSynthesis,并且效果很好。我想添加在女性中设置某些文本的功能,以及用男性声音设置其他文本的功能。
似乎如果我使用来自网络语音API的getVoices(),则该列表因浏览器而异。它似乎不是"性别"的财产。一些镀铬名称有男性'男性'在他们中间,有些人不愿意。有些人有女性名字和男性名字。 Google Chrome似乎没有列出男性美国演讲者。我错过了什么吗?
如果我知道所有名字可能是什么,那么我可以存储列表,然后直到我找到一个有效的列表。 有没有办法知道该设备上是否启用了语音?
或者,有没有办法下载(使用我的应用)男声和女声可以在所有浏览器中使用?
我需要这个才能在所有设备上运行。
答案 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)'
。