我们如何解决 iOS 上的 AXSpeechAssetDownloader 错误?

Posted

技术标签:

【中文标题】我们如何解决 iOS 上的 AXSpeechAssetDownloader 错误?【英文标题】:How do we solve an AXSpeechAssetDownloader error on iOS? 【发布时间】:2015-06-12 01:40:23 【问题描述】:

我们有一个使用 AVSpeechSynthesizer 说话的 ios 应用。它适用于 iPad 和其他设备 - 但我们注意到它不适用于我们的 iPhone 6 Plus。

在检查控制台输出时,我们会看到以下错误:

|AXSpeechAssetDownloader|错误| ASAssetQuery 获取结果时出错 错误域=ASError Code=21“操作无法完成。 (ASError 错误 21 - 无法复制资产信息)" UserInfo=0x174a7e100 NSDescription=无法复制资产信息

运行应用的设备确实有网络连接。

任何想法如何开始解决这个问题?

【问题讨论】:

我们遇到了完全相同的问题,但对我们来说,它发生在运行 iOS 9 的设备上。 迁移到 iOS8 后看到同样的问题:|AXSpeechAssetDownloader|error| ASAssetQuery 错误获取结果 Error Domain=ASError Code=21“操作无法完成。(ASError 错误 21 - 无法复制资产信息)”UserInfo=0x174473e00 NSDescription=无法复制资产信息 2015-07-09 10 :56:33.371 xxxxxxxx[6275:1073856] 为资产构建 MacinTalk 语音:(null) 这是在 iOS8.4 的 iPadAir 上 在 iPod Touch 上的 iOS 8.4 上看到完全相同的问题。在下面尝试了@softwarenerd 的建议,但没有帮助。 今天看到这个问题,昨天 exact 相同的项目运行良好。完全一样,事实上,与我只是关闭笔记本电脑然后cmd-R'd今天继续测试相同的项目本身。昨天没有错误,今天失败了。奇怪的是,实际说话效果很好,因为我在代码中调用的声音是我喜欢的声音,所以我认为它是默认的。 【参考方案1】:

我遇到了同样的问题。我找不到任何帮助,所以我不得不尝试各种方法来调试它。

我发现,如果您访问设置 -> 常规 -> 语音,并启用“语音选择”并使用英语语音,它就会开始为您工作。

如果这有帮助,请告诉我。

【讨论】:

它对我有用,你知道为什么会这样吗?我有一个 iPod touch 5G 和一个 iPhone 5S 并且在没有该配置的情况下工作。但随着六加开始崩溃 Settings\General iOS10.1.1 中没有 Speech 它在 Accessibility 中并且仍然显示错误【参考方案2】:

这意味着说所需语言所需的资源尚未下载,并且该应用未能自动下载。正如@softwarenerd 所提到的,您可以转到设置-> 常规-> 语音,然后转到语音并下载您需要的任何语音。

但是,如果您正在为应用商店开发应用,这并不是一个很好的解决方案。必须有一种方法可以按需自动处理下载。

【讨论】:

这不是答案,至少对我来说。我已明确地将我的代码与设备的首选语音匹配,并且没有任何变化,仍然看到:“|AXSpeechAssetDownloader|error| ASAssetQuery 错误获取结果(对于 com.apple.MobileAsset.MacinTalkVoiceAssets)错误域=ASError Code=21“无法复制资产信息" UserInfo=NSDescription=无法复制资产信息"【参考方案3】:

我在 iOS9 上看到了完全相同的问题。这是我的解决方法,虽然并不完美,但至少可以避免崩溃。

let voices = AVSpeechSynthesisVoice.speechVoices()
for voice in voices 
    if lang == voice.language 
        utterance.voice = voice
        break;
    

【讨论】:

我假设lang变量实现let lang = AVSpeechSynthesisVoice(language: "en-US")`【参考方案4】:

如果您使用语言 A 将字符串传递给 AVSpeechUtterance 构造函数,但要求使用语言 B 进行语音,您也可能会看到此错误。

例子:

let utterance = AVSpeechUtterance(string: "Hello")
utterance.voice = AVSpeechSynthesisVoice(language: "pl-PL")

在这种情况下,“Hello”不是波兰语 (pl-PL)。 应用程序显示此类错误,并且可能(在某些情况下)语音文本。

【讨论】:

这正是我的情况。【参考方案5】:

对我来说,我可以通过在 话语字符串之后设置 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

【讨论】:

以上是关于我们如何解决 iOS 上的 AXSpeechAssetDownloader 错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Unity3D iOS 版本上的 AOT 和代码剥离

如何从终端访问 iOS 8 设备上的应用程序数据?

iOS 和 AirPlay 上的 Widevine 视频流

iframe在IOS上的布局错乱怎么解决

iOS开发:UILabel字号根据屏幕缩放

iOS 移动设备上的字体渲染问题