快速查找 iPod 库中歌曲的位置?
Posted
技术标签:
【中文标题】快速查找 iPod 库中歌曲的位置?【英文标题】:Find the location of an song in iPod library in swift? 【发布时间】:2016-11-16 12:21:15 【问题描述】:当用户从 iPod 库中选择音频时,我有 MPMediaItem 的引用。我正在使用
获取该项目的资产网址let url = item.valueForProperty(MPMediaItemPropertyAssetURL)
但这并没有给我文件的确切物理位置,而是给我一个 url w.r.t iPod 库。
ipod-library://item/item.mp3?id=1840064795502796074
有没有办法从 iPod 库中获取歌曲的物理 url?
编辑 - 实际上我想从物理文件中提取 NSData 并将其发送到我的后端服务器,所以我需要物理文件 URL 而不是相对 URL
【问题讨论】:
你不能那样做。该文件位于您应用的沙箱之外,因此您无法直接访问它。您只能让 MPMediaPlayer 为您播放。 嗨易卜拉欣,我已经试过了。我需要物理文件 URL 而不是相对 URL。 嗨 pailw,我看到了我的同类应用。我下载了应用程序。它运行良好。如果我单击歌曲并完成按钮...歌曲将显示在我们的应用程序中并播放。我也可以在该应用程序中修剪和合并歌曲..这是链接:@ 987654321@ 【参考方案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()
可能有可能以某种方式访问歌曲中的元数据(标题、流派、艺术家……)。
这可能不适用于模拟器。
【讨论】:
以上是关于快速查找 iPod 库中歌曲的位置?的主要内容,如果未能解决你的问题,请参考以下文章