我注意到一个问题,在IOS 10.0或更高版本上,IOS似乎没有(通过AVSpeechSynthesizer)将表情符号的读取本地化,但在IOS 9.3或更低版本上,它似乎做得很好。
如果你告诉一个设置为英语的AVSpeechSynthesizer说一个表情符号,发送给它的字符串"",它会说“笑脸正常的眼睛。”
当您将合成器的语音语言改为英语以外的任何语言,例如法语,并发送相同的表情符号,它应该是"Visage souriant avec des yeux normaux“,在IOS 9.3或更低的版本上这样做,但在IOS 10.0和更高的版本上,它只读取法语口音的英文文本(”普通眼睛的笑脸“)。
我想到了下面的“游乐场”,说明了我是如何得出这个结论的.虽然我希望我错过了什么或者做错了什么。
要重现此问题,请在XCode中创建新项目,并将一个按钮附加到speakNext()函数中。
在运行IOS 9.3或更低版本的模拟器上运行,然后在IOS 10.0或更高版本上运行。
你能解释一下扎特吗?
import UIKit
import AVKit
class ViewController: UIViewController {
var counter = 0
let langArray = ["en","fr","de","ru","zh-Hans"]
let synth = AVSpeechSynthesizer()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func speakNext(_ sender: Any) {
print("testing \(langArray[counter])")
let utterance = AVSpeechUtterance(string: "")
utterance.voice = AVSpeechSynthesisVoice(language: langArray[counter])
counter += 1
if (counter > 4) { counter = 0 }
synth.speak(utterance)
}
}发布于 2019-08-27 22:36:39
更新: iOS 13.2中的问题似乎已经解决了!耶!
更新:在正式发布iOS 13之后,这个问题已经被一个更糟糕的问题(iOS 13 Text To Speech (TTS - AVSpeechSynthesisVoice) crashes for some users after update)所掩盖/取代。
//原员额:
在通过反馈助理通知苹果之后,这似乎是IOS 10中引入的一个错误,连续三个版本的IOS都没有被注意到。
经过IOS 13 beta 5 (17A5547d)的测试,问题不会出现。
他们声称,从这一点开始,这一问题已得到明确解决。
发布于 2019-07-06 22:18:15
看起来,无论好坏,表情符号现在都是根据用户喜欢的语言读取的。如果你在设备上运行,然后切换到法语,那么表情符号就会用法语读出,即使合成声音的声音是英语。值得注意的是,有些语言似乎没有读出表情符号。令人惊讶的是,日本人似乎也是如此。
你能换一下吗?
嗯,算是吧,但我不确定这是苹果公司批准的。您可以在AppleLanguages中设置“UserDefaults.standard”键。这个数组中的第一种语言,当UIApplicationMain被称为时,将是用来读取表情符号的语言。这意味着,如果您更改您的应用程序中的值,它将不会生效,直到下一次应用程序启动。
目前还不清楚这是否是一个bug或有意的行为,听起来肯定会令人不快。这可能值得向苹果公司提交一份雷达或反馈信息,或者任何他们现在称之为它们的东西。
https://stackoverflow.com/questions/55961638
复制相似问题