AVSpeechSynthesisVoice.voiceWithLanguage 已在 iOS SDK 7.0 中引入。那时,每种语言/地区只有一种声音。
自 iOS SDK 9.0 起,为每种语言/地区添加了更多语音。因此 Apple 引入了一个新的 API voiceWithIdentifier,这样你就可以获得你想要的特定语音。
我的问题是,如果我们仍然在 iOS 9 或更高版本中使用 voiceWithLanguage 怎么办?这个 API 究竟返回了什么?更重要的是,返回的语音是否在 iOS 版本之间甚至在不同设备之间发生变化?
我注意到,voiceWithLanguage 返回的内容有点依赖于 iOS 语音设置“设置 -> 常规 -> 辅助功能 -> 语音 -> 语音 -> 英语”。但不是完全匹配。也就是说,例如英语美国,如果您设置语音“Fred”,voiceWithLanguage 将返回“Fred”,这很酷。但是,如果您将语音设置为“Nicky”,则 voiceWithLanguage 会返回“Nicky”以外的其他内容。
我问这是因为我的应用程序正在使用 voiceWithLanguage。当用户将 iOS 升级到 iOS 12 时,他们报告说他们听到了不同的声音。我相信 voiceWithLanguage 在升级到 iOS 12 后会返回不同的声音。虽然我无法在相同类型的设备上重现它。
当然,我可以开始改用 voiceWithIdentifier。但是就是对这个voiceWithLanguage很好奇。
最佳答案
[还没有解决方案]我也遇到了同样的问题。
首先,通过设置不同的声音
Accessibility -> Speech -> Voices
or
Accessibility -> VoiceOver -> Speech -> Voices
然后
AVSpeechSynthesisVoice(language: language)
它不会影响 iOS 12.0.1 中的 AVSpeechSynthesizer(它适用于 iOS 11.x 和 iOS 12.0.0)
我还在 iOS 12.0.1 上发现了另外两件事
首先,Siri语音在使用时不再可用
AVSpeechSynthesisVoice(identifier: "com.apple.ttsbundle.siri_male_ja-JP_compact")
其次,如果我不设置语音标识符,该地区的女性 Siri 会说出文本。它也不受偏好的语音设置影响。顺便说一句,我仍然找不到让 Male Siri 说话的方法,但是...哈哈
关于iOS 文字转语音 : What decides the default voice returned by [AVSpeechSynthesisVoice voiceWithLanguage]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52727301/