是否可以使用 AVAudioEngine 播放 iOS 音乐库中的歌曲?
Is it possible to play a Song from iOS Music Library with AVAudioEngine?
我已经成功创建了 AVAudioEngine
。它播放项目目录中的本地声音文件。但是我怎样才能访问 phone 上的音乐库?
有什么方法可以将 AVAudioEngine
与 MPMediaPickerController
结合起来吗?
谢谢
是:)
您需要在 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
(并且记得在取消时也这样做(也有一个委托方法))。
希望这能为您指明正确的方向。
我已经成功创建了 AVAudioEngine
。它播放项目目录中的本地声音文件。但是我怎样才能访问 phone 上的音乐库?
有什么方法可以将 AVAudioEngine
与 MPMediaPickerController
结合起来吗?
谢谢
是:)
您需要在 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
(并且记得在取消时也这样做(也有一个委托方法))。
希望这能为您指明正确的方向。