语音合成无法通过移动游戏来改变声音

时间:2018-05-17 08:13:46

标签: javascript iphone mobile-safari speech-synthesis

我有一个演讲。合成网络应用程序运行良好,但我想将一些文本更改为男性语音,反之亦然。 它在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以获得与英语不同的英语发音?

2 个答案:

答案 0 :(得分:0)

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

因此,不同系统和浏览器的声音会有所不同,这是正常的,因为基本支持也会有所不同。

如果您希望在不同平台上拥有固定语音,则您更愿意使用在线API。

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

答案 1 :(得分:0)

在iOS上,似乎存在一个长期存在的错误,即您无法完全选择从getVoices()返回的声音。具体来说,您只能在每个语言环境中选择一种语音。系统知道那里还有其他语音,如果您尝试选择“禁止”语音之一,则将获得该区域可用的语音。因此,对于美国用户,“ Samantha”有效,但如果您选择“ Alex”,则只会得到“ Samantha”。如果要使用英语男声,则需要选择“ Daniel”(zh-CN)。尝试使用女性en-GB语音“ Serena”也会使您“ Daniel”。请注意,每种语言环境只有一种声音,而不是每种语言一种声音。因此,对于英语,您可以选择Samantha(zh-CN),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()确实可以访问它们。