当用户从iPod库中选择音频时,我会引用MPMediaItem。我使用
获取该项目的资产网址 let url = item.valueForProperty(MPMediaItemPropertyAssetURL)
但是这并没有给我文件的确切物理位置,而是给了我一个url w.r.t iPod库。
ipod-library://item/item.mp3?id=1840064795502796074
有没有办法从iPod库中获取歌曲的物理网址?
编辑 - 实际上我想从物理文件中提取NSData并将其发送到我的后端服务器,所以我需要物理文件URL而不是相对URL
答案 0 :(得分:1)
音乐文件由MPMediaItem实例表示。您可以使用通过MPMediaQuery检索它们,例如:
// All
let mediaItems = MPMediaQuery.songsQuery().items
// Or you can filter on various property
// Like the Genre for example here
var query = MPMediaQuery.songsQuery()
let predicateByGenre = MPMediaPropertyPredicate(value: "Rock", forProperty: MPMediaItemPropertyGenre)
query.filterPredicates = NSSet(object: predicateByGenre)
此时,您拥有音乐应用程序库中包含的所有(或部分过滤器)歌曲,因此您可以在设置播放列表队列后使用MPMusicPlayerController
进行播放:
let mediaCollection = MPMediaItemCollection(items: mediaItems)
let player = MPMusicPlayerController.systemMusicPlayer()
player.setQueueWithItemCollection(mediaCollection)
player.play()
可能有可能从歌曲中以某种方式访问元数据(标题,流派,艺术家......)。
这可能不适用于模拟器。