从 iOS 上的音乐库中获取所有歌曲

Posted

技术标签:

【中文标题】从 iOS 上的音乐库中获取所有歌曲【英文标题】:Get all songs from music library on iOS 【发布时间】:2015-03-18 06:25:05 【问题描述】:

我正在编写可以播放音乐的小应用程序。要获取我使用以下代码的所有歌曲

 var songsArray: [MPMediaItem] = [MPMediaItem]()
 var mediaQuery = MPMediaQuery()
 songsArray = MPMediaQuery.songsQuery().items as [MPMediaItem]

 for songItem in songsArray             
     var song: myMusicItem? = myMusicItem(songTitle: songItem.title, songAlbum: songItem.albumTitle, songArtist: songItem.albumArtist, songGenre: songItem.genre)

     retArray.append(song!)
 

 println(String(format:"Number of songs:\t%i", retArray.count))

问题是retArray 的项目比我图书馆的实际项目多。有谁知道为什么会发生这种情况?

【问题讨论】:

更多项目是什么意思?该数组是否包含重复项?您如何调用此方法以及从何处调用? 更多项目意味着如果我的音乐库有 900 首歌曲,MPMediaQuery.songsQuery().items as [MPMediaItem] 返回超过 1000 个项目。我没有重复的项目。使用此代码的方法在按钮触摸时调用。并且数组不包含重复项。 可能是视频? “媒体项目代表 iPod 库中的单个媒体(例如一首歌曲或一个视频播客)。” developer.apple.com/library/ios/documentation/MediaPlayer/… 嗯...但我正在使用 MPMediaQuery.songsQuery() 所以我认为应该只拍摄歌曲,而不是视频或播客。我还有一个想法 - 云中的歌曲怎么样?在设置中,我将选项设置为不显示仅在云中的项目。可以这样吗? 【参考方案1】:

正如您在 cmets 中所建议的那样,默认情况下包含的 iCloud 媒体项目可能会有所不同。

尝试将此过滤谓词添加到您的查询中以不包括 iCloud 项目:

query.addFilterPredicate(MPMediaPropertyPredicate(value: false, forProperty: MPMediaItemPropertyIsCloudItem))

【讨论】:

以上是关于从 iOS 上的音乐库中获取所有歌曲的主要内容,如果未能解决你的问题,请参考以下文章

ios 7.1 将歌曲添加到音乐库

确定歌曲在 iOS 中是不是有专辑封面

从电脑上下载歌曲至iphone手机上,如何把此歌曲设置为铃声?

怎样导出qq音乐里的本地音乐?

使用webcollector爬虫技术获取网易云音乐全部歌曲

Android Studio 音乐播放器无法从 sdcard 读取,只能读取内存