语音合成无法让移动 Safari 浏览器更改语音



我有一个 speech.synthesis Web 应用程序,效果很好,但我想将一些文本更改为男性声音,反之亦然。它在Chrome和Mac台式机中完美运行,但对于我的生活,我无法让它在移动ios(iPhone 11.3.1),iPhone和iPad上运行。 这是相关的位(反应):

createSpeech(text) {
let speech = new SpeechSynthesisUtterance(text);
let gender = this.state.gender;
speech.volume = 1; 
speech.rate =  1;  
speech.pitch = 1;  
speech.lang = 'en-US';
speech.voice = voices[gender];
speech.voiceURI = voices[gender].voiceURI;
return speech;
}

语音被加载(一个男性和一个女性)到称为声音的变量中。 这是有效的。 然后在每个句子上运行上面的位。

同样,这在我测试的Chrome和Mac台式机中完美运行。 但是,在我的iPhone上,我总是得到手机本身设置的默认语音。

奇怪的是,我可以切换到英语以外的其他语言,比如意大利语或西班牙语,并获得正确的声音,但英语总是只作为内部设置的默认语音播放。

有人知道为什么会这样吗? 这是一个错误吗? 我错过了什么吗? 有没有人让iPhone获得不同的英语声音,

而不是一套?

>SpeechSynthesisUtterance需要浏览器支持来提供不同的声音。换句话说,浏览器决定合成哪个声音。

因此,在不同的系统和浏览器中看到声音不同是正常的,因为基本支持也各不相同。

如果您希望在不同的平台上拥有固定的声音,您更喜欢使用在线API。

这家伙也有一些相关的研究:http://ejb.github.io/2015/06/07/html5-speech-synthesis-api.html

在iOS上,似乎有一个长期存在的错误,即您从getVoices()返回的声音并非全部可供选择。 具体来说,每个区域设置只能选择一个语音。 系统知道其他声音在那里,如果您尝试选择其中一个"禁止"声音,您将获得可用于该区域设置的声音。 因此,对于en-US,"Samantha"有效,但是如果您尝试选择"Alex",则只会得到"Samantha"。 如果你想要一个英语男声,你需要选择"Daniel"(en-GB)。 尝试使用女性en-GB声音"Serena"也会让你得到"Daniel"。 请注意,每个区域设置有一个语音,而不是每个语言一个语音。 因此,对于英语,您可以选择Samantha(en-US),Daniel(en-GB),Karen(en-AU),Moira(en-IR),Tessa(en-SA),Rishi(en-IN)。 有关完整列表,请查看 https://talkrapp.com/speechSynthesis.html

某些语言似乎有效,因为该区域设置中只有一个语音。但是,任何具有多个语音(zh-CN、ru-RU、es-ES、es-MX、it-IT、fr-FR、fr-CA 等)的区域设置都会受到影响。

这纯粹是猜想,但奇怪的巧合是,早在iOS 8和iOS 9中,返回的声音的名称是"区域设置"。 因此,从历史上看,每个区域设置仅支持一种语音是有充分理由的。 当他们更新系统以使用实际的语音名称时,他们没有以允许您选择所有语音的方式进行操作,但getVoices()确实可以访问它们。

相关内容

  • 没有找到相关文章

最新更新