我们有一个使用AVSpeechSynthesizer发言的iOS应用程序。它适用于iPad和其他设备 - 但我们注意到它不适用于我们的iPhone 6 Plus。
检查控制台输出时,我们看到此错误:
| AXSpeechAssetDownloader |误差| ASAssetQuery错误获取结果 错误域= ASError代码= 21“无法完成操作。 (ASError错误21 - 无法复制资产信息)“ UserInfo = 0x174a7e100 {NSDescription =无法复制资产信息}
运行应用程序的设备确实有网络连接。
任何想法如何开始解决这个问题?
答案 0 :(得分:5)
我遇到了同样的问题。我找不到任何帮助,所以,我不得不通过尝试各种方法进行调试。
我发现如果你访问设置 - >一般 - >演讲,并启用“说出选择”并用英语发声,它将开始为你工作。
如果有帮助,请告诉我。
答案 1 :(得分:3)
这意味着尚未下载说出所需语言所需的资源,并且应用程序无法自动执行此操作。正如@softwarenerd所提到的,你可以去设置 - >一般 - >演讲,然后转到声音并下载您需要的任何声音。
但是,如果您正在为应用商店开发应用,那么这不是一个很好的解决方案。必须有一种方法可以自动和按需处理下载。
答案 2 :(得分:2)
我在iOS9上看到完全相同的问题。这是我的解决方案,这不是完美的,但至少可以避免崩溃。
let voices = AVSpeechSynthesisVoice.speechVoices()
for voice in voices {
if lang == voice.language {
utterance.voice = voice
break;
}
}
答案 3 :(得分:2)
如果您将字符串传递给语言A中的AVSpeechUtterance构造函数,但是要求使用语言B对其进行语音处理,则可能也会看到此错误。
示例:
let utterance = AVSpeechUtterance(string: "Hello")
utterance.voice = AVSpeechSynthesisVoice(language: "pl-PL")
在这种情况下"你好"不是波兰语(pl-PL)。 应用程序显示此类错误,并且可能(在某些情况下)演讲文本。
答案 4 :(得分:2)
对我来说,我能够通过在话语字符串之后设置utterance.voice 来解决这个问题。
speechUtterL1 = AVSpeechUtterance(string: ("أتمنى لك نهارا سعيد"))
speechUtterL1.voice = AVSpeechSynthesisVoice(language: "ar-SA")
相反,我只设置一次声音会导致错误:
[TTS]运行自定义语音查询时出错Error Domain = ASError Code = 15 “无法从https://mesu.apple.com/assets/复制资产信息 资产类型com.apple.MobileAsset.VoiceServices.GryphonVoice“ UserInfo = {NSDescription =无法复制资产信息 资产类型https://mesu.apple.com/assets/ com.apple.MobileAsset.VoiceServices.GryphonVoice}