快速查找 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 库中歌曲的位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AVAssetExportSession 覆盖 iPhone/iPod 库中的歌曲?

如何在 iOS 的 iPod 库中获取歌曲的文件位置

如何在 iOS 的 iPod 库中获取歌曲的物理文件位置

播放 iPod 库中的歌曲,只有标题

如何获取 ipod 库中歌曲的大小?

我如何允许用户从他们的 iPod 库中挑选歌曲?