我正在尝试录制语音消息并将它们作为 CKAssets 存储在 CloudKit 上。我将它们转换为 AVAudioFile 并将它们作为 Post 记录上的几个属性之一保存到 CloudKit。
var recordedMessage: AVAudioFile?
var recordedMessageURL: URL? {
didSet {
if let recordedMessageURL = recordedMessageURL {
recordedMessage = try? AVAudioFile(forReading: recordedMessageURL)
}
}
}
尽管通过 CloudKit 仪表板访问文件时无法播放音频,但该过程的这一部分似乎有效。(双击它会打开 iTunes,但它不会播放)
我创建了一个 fetchPosts 函数,该函数成功地关闭了与记录相关的图像,但是当我尝试播放音频时,它给了我以下错误:
ExtAudioFile.cpp:192:Open: 即将抛出 -43: 打开音频文件
我相信这与我无法将资产正确转换为 AVAudioFile 有关。它似乎不像转换图像资产那样干净利落。
var foundAudio: AVAudioFile?
if let audioAsset = ckRecord[PostStrings.audioAssetKey] as? CKAsset {
do {
let audioData = try Data(contentsOf: audioAsset.fileURL!)
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
guard let destinationPath = NSURL(fileURLWithPath: documentsPath).appendingPathComponent("filename.m4a", isDirectory: false) else {return nil}
FileManager.default.createFile(atPath: destinationPath.path, contents: audioData, attributes: nil)
foundAudio = try AVAudioFile(forReading: destinationPath)
} catch {
print("Could not transform asset into data")
}
}
谁能告诉我哪里出错了?