是否可以使用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 :)
}
}
}