首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能在Mac Catalyst上创建AVAudioFile?(错误-54)

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

Stack Overflow用户
提问于 2021-07-24 03:19:24
回答 1查看 41关注 0票数 0

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

代码语言:javascript
复制
let recordingURL = mediaItem?.value(forProperty: MPMediaItemPropertyAssetURL) as? URL

通过这个网址,我创建了一个可以提供给AVAudioPlayerNode进行回放的AVAudioFile

代码语言:javascript
复制
do {
    let audioUnitFile = try AVAudioFile(forReading: recordingURL)
} catch let error {
    NSLog("error loading AVAudioFile: " + error.localizedDescription)
}

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

代码语言:javascript
复制
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设置应用程序中的隐私设置,我的应用程序有权访问音乐库。我还可以检查什么?error -54是什么意思?Mac Catalyst应用程序是否支持此功能?

我在macOS 11.4上使用Xcode12.5.1。

EN

回答 1

Stack Overflow用户

发布于 2021-07-24 03:29:18

哦,我刚找到问题所在。我需要做的是:

代码语言:javascript
复制
recordingURL?.startAccessingSecurityScopedResource()
let audioUnitFile = try AVAudioFile(forReading: recordingURL)
recordingURL?.stopAccessingSecurityScopedResource()

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68504169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档