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

Is it possible to play a Song from iOS Music Library with AVAudioEngine?

我已经成功创建了 AVAudioEngine。它播放项目目录中的本地声音文件。但是我怎样才能访问 phone 上的音乐库?

有什么方法可以将 AVAudioEngineMPMediaPickerController 结合起来吗?

谢谢

是:)

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

如您所见,方法 mediaPicker(_:didPickMediaItems:) which is called when the user has picked a song to play. That gives you a (MPMediaItemCollection) items 包含用户选择的歌曲。

您可以遍历该集合并查看类型为 MPMediaItem 的个体 items

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

所以...类似于:

在哪里创建 MPMediaPickerController

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 :)
     }
  }
}

记住 dismiss 完成后 MPMediaPickerController(并且记得在取消时也这样做(也有一个委托方法))。

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