是否可以使用AVAudioEngine播放iOS音乐库中的歌曲?

是否可以使用AVAudioEngine播放iOS音乐库中的歌曲?,ios,objective-c,swift,avaudioengine,mpmediapickercontroller,Ios,Objective C,Swift,Avaudioengine,Mpmediapickercontroller,我已经成功地创建了一个AVAudioEngine。它播放项目目录中的本地声音文件。但是我怎样才能通过电话访问音乐库呢 有没有办法将AVAudioEngine与MPMediaPickerController结合使用 谢谢是的:) 您需要在MPMediaPickerController上设置MPMediaPickerControllerDelegate,这样当用户在MPMediaPickerController中执行操作时,您将收到通知。您可以在MPMediaPickerControllerDele

我已经成功地创建了一个
AVAudioEngine
。它播放项目目录中的本地声音文件。但是我怎样才能通过电话访问音乐库呢

有没有办法将
AVAudioEngine
MPMediaPickerController
结合使用

谢谢

是的:)

您需要在
MPMediaPickerController
上设置
MPMediaPickerControllerDelegate
,这样当用户在
MPMediaPickerController
中执行操作时,您将收到通知。您可以在
MPMediaPickerControllerDelegate
上使用这些方法

如您所见,当用户选择播放歌曲时,会调用该方法。这将为您提供一个()文件,其中包含
,其中包含用户选择的歌曲

您可以循环浏览该集合并查看类型为的单个

最后,每个
MPMediaItem
都有一个
assetURL
,您可以在
AVAudioEngine
中创建各个节点

所以…大致如下:

创建MPMediaPickerController的位置 委托方法 请记住在使用
MPMediaPickerController时关闭它(取消时也要记得这样做(也有一个委托方法))


希望这能为您指明正确的方向。

现在的问题是,如何将资产投入AVAudioEngine?AVAudioFile*文件=[[AVAudioFile alloc]initForReading:\u item.assetURL错误:nil];->这不起作用。好吧,有趣:)你得到任何错误作为回报吗?如果您向它传递一个错误对象而不是
nil
,只是为了查看它是否向您返回任何错误,该怎么办。您在哪里声明您的
AVAudioEngine
实例?它应该作为类的属性(只是为了确保)。是的,我将其作为属性:)在我的mediapicker委托方法中,找不到具有assetURL的项。也许音乐图书馆里的歌曲没有资产?啊……我现在有一个理论:)。可能您正在尝试拾取/播放一首未存储在设备本地的歌曲
MPMediaPickerController
有一个名为
showCloudItems
的属性,您是否可以将其设置为false/NO,以便只看到设备上实际存在的项目。这应该保证您有一个
资产
。就是这样!我忘了在这个测试设备上下载一些歌曲!昨天我使用了另一台设备,在那里我下载了一些歌曲;)showCloudItems=NO是避免这种情况的好方法。谢谢你+1
let mediaPicker = MPMediaPickerController(mediaTypes: .anyAudio)
mediaPicker.delegate = self
present(mediaPicker, animated: true, completion: nil)
public func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {
  for item in mediaItemCollection.items {
     if let assetURL = item.assetURL {
        //There you go :)
     }
  }
}