iOS文字语音转换:由什么决定[AVSpeechSynthesisVoice voiceWithLanguage]返回的默认语音?

Kai*_*Kai 5 text-to-speech ios avspeechsynthesizer

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感到好奇。

jos*_*ori 1

[尚未解决] 我也遇到了同样的问题。

首先,通过设置不同的声音

Accessibility -> Speech -> Voices
or 
Accessibility -> VoiceOver -> Speech -> Voices
Run Code Online (Sandbox Code Playgroud)

然后

AVSpeechSynthesisVoice(language: language)
Run Code Online (Sandbox Code Playgroud)

它不会影响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")
Run Code Online (Sandbox Code Playgroud)

其次,如果我不设置语音标识符,该区域中的女性 Siri会说出文本。它也不受偏好的语音设置影响。顺便说一句,我还是找不到让Male Siri说话的方法,但是……哈哈