為什麼我無法在 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()

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

相关内容

  • 没有找到相关文章

最新更新