在iOS SDK 7.0中引入了AVSpeechSynthesisVoice.voiceWithLanguage。那时,每种语言/地区只有一种声音。
自iOS SDK 9.0起,为每种语言/地区添加了更多声音。因此,Apple引入了新的API voiceWithIdentifier,以便您可以获取所需的特定语音。
我的问题是,如果我们仍在iOS 9或更高版本中使用voiceWithLanguage,该怎么办?该API究竟返回什么?更重要的是,返回的语音是否在iOS版本之间甚至在不同设备之间发生了变化?
我注意到,voiceWithLanguage返回的内容取决于iOS语音设置“设置->常规->辅助功能->语音->语音->英语”。但并不是完全匹配。也就是说,例如,英语US,如果将语音设置为“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 会说出文本。它也不受语音设置的影响。顺便说一句,我仍然找不到使男性Siri 说话的方法,但是...哈哈
关于iOS文字转语音: What decides the default voice returned by [AVSpeechSynthesisVoice voiceWithLanguage]?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52727301/