26

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

检查控制台输出时,我们看到此错误:

|AXSpeechAssetDownloader|错误| ASAssetQuery 错误获取结果 Error Domain=ASError Code=21 “操作无法完成。(ASError 错误 21 - 无法复制资产信息)” UserInfo=0x174a7e100 {NSDescription=无法复制资产信息}

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

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

4

5 回答 5

5

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

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

让我知道这是否有帮助。

于 2015-07-01T20:12:56.223 回答
3

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

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

于 2015-09-07T02:26:13.143 回答
2

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

例子:

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

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

于 2016-06-19T10:31:20.657 回答
2

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

let voices = AVSpeechSynthesisVoice.speechVoices()
for voice in voices {
    if lang == voice.language {
        utterance.voice = voice
        break;
    }
}
于 2015-10-15T16:42:04.167 回答
2

对我来说,我可以通过在 utterance 字符串之后设置 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 的资产信息}

于 2018-05-09T11:13:34.673 回答