微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我不能在 Mac Catalyst 上创建 AVAudioFile? 错误 -54

如何解决为什么我不能在 Mac Catalyst 上创建 AVAudioFile? 错误 -54

我的应用允许用户从他们的 iTunes 媒体库中选择一个录音,然后保存媒体 ID 以供以后播放。从媒体 ID 中,我可以使用 MPMediaQuery 获取 MPMediaItem,然后获取录制 URL:

let recordingURL = mediaItem?.value(forProperty: MPMediaItemPropertyAssetURL) as? URL

根据 URL,我创建了一个 AVAudioFile,我可以将其提供给 AVAudioPlayerNode 进行播放:

do {
    let audioUnitFile = try AVAudioFile(forReading: recordingURL)
} catch let error {
    NSLog("error loading AVAudioFile: " + error.localizedDescription)
}

这在 iOS 上一切正常。在 Mac Catalyst 上,我可以获得一个有效的 URL(在调试器中检查它时我可以看到它是正确的),但是 AVAudioFile:forReading 函数抛出了这个错误

ExtAudioFile.cpp:193:Open: about to throw -54: open audio file
[avae]            AVAEInternal.h:109   [AVAudioFile.mm:134:AVAudioFileImpl: (ExtAudioFileOpenURL((CFURLRef)fileURL,&_extAudioFile)): error -54
error loading AVAudioFile: The operation Couldn’t be completed. (com.apple.coreaudio.avfaudio error -54.)

我在 Mac 设置应用中检查了隐私设置,我的应用有权访问音乐库。我还能检查什么?错误 -54 是什么意思? Mac Catalyst 应用是否支持功能

我在 macOS 11.4 上使用 Xcode 12.5.1。

解决方法

哦,我刚发现问题。我需要做的:

recordingURL?.startAccessingSecurityScopedResource()
let audioUnitFile = try AVAudioFile(forReading: recordingURL)
recordingURL?.stopAccessingSecurityScopedResource()

我正在对其他文件执行此操作,但出于某种原因,我没想过要对媒体库文件执行此操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。