javascript - 语音合成无法让手机safari变声

标签 javascript iphone mobile-safari speech-synthesis

我有一个运行良好的 speech.synthesis 网络应用程序,但我想将一些文本更改为男声,反之亦然。 它在 Chrome 和 Mac 桌面上完美运行但是对于我来说,我无法让它在移动 ios (iPhone 11.3.1) 上运行,包括 iphone 和 ipad。 这是相关的位( react ):

 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;
  }

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

同样,这在我测试过的 Chrome 和 Mac 桌面上完美运行。然而,在我的 iPhone 上,我总是听到手机本身设置的默认语音。

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

有人知道为什么会这样吗?这是一个错误吗?我错过了什么吗?除了一套以外,还有人用 iphone 获得不同的英语语音吗?

最佳答案

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

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

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

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

关于javascript - 语音合成无法让手机safari变声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50386487/

相关文章:

iphone - 有什么办法可以在iOS6下开发针对iOS 3.1.2的iPhone应用程序?

iphone - 如何在 SDWebImage 中显示事件指示器

javascript - Google 地点自动完成功能在 IE 和 Safari 中不起作用

javascript - 为什么 "event.offsetX"事件时 "touchstart"未定义?

ios - 使用 iOS 9 的启动图像未出现在主屏幕 Web 应用程序上

javascript - 如何在JS中使用Event Loop构建debounce函数?

javascript - 两个单独的表单,具有相同名称和 ID 的输入

javascript - 回调和模块导出有什么区别?

Javascript 调试 Visual Studio 2008

iphone - 将 iPhone 应用程序转换为通用应用程序 : Grouped UITableView