最近产品爸爸又增加一个新的功能,获取本地音乐。如果iTunes里面没有音乐的话,可以电脑上下载一首拉进手机里,方法请自行百度(一堆)。
在iOS中,获取本地音乐主要用到MPMediaQuery,如果对音乐进行条件筛选的话就用到MPMediaPropertyPredicate。废话不多说,直接上代码:
首先要在TARGETS的info里添加权限:Privacy - Media Library Usage Description
然后import MediaPlayer
1、获取全部音乐
//从ipod库中读出音乐文件
let everything = MPMediaQuery()
let itemsFromGenericQuery = everything.items
for song in itemsFromGenericQuery! {
//获取音乐名称
let songTitle = song.value(forProperty: MPMediaItemPropertyTitle)
print("songTitle==\(songTitle!)")
//获取作者名称
let songArt = song.value(forProperty: MPMediaItemPropertyArtist)
print("songArt=\(songArt!)")
//获取音乐路径
let songUrl = song.value(forProperty: MPMediaItemPropertyAssetURL)
print("songUrl==\(songUrl!)")
}
在[MPMediaItem]中还可以获取很多音乐的信息,比如封面、专辑名称等
2、有条件获取音乐
1、一个条件查找 查找名称为xxxx的歌曲
let everything = MPMediaQuery()
let songTitle = MPMediaPropertyPredicate.init(value: "xxxx", forProperty: MPMediaItemPropertyTitle)
everything.addFilterPredicate(songTitle)
let itemsFromGenericQuery = everything.items
for song in itemsFromGenericQuery! {
let songtitle = song.value(forProperty: MPMediaItemPropertyTitle)
print("songtitle==\(String(describing: songtitle))")
}
2、多个条件查找 查找名为xxxx的艺术家的yyyy专辑
let everything = MPMediaQuery()
let songArt = MPMediaPropertyPredicate.init(value: "xxxx", forProperty: MPMediaItemPropertyArtist)
let songAlbumTitle = MPMediaPropertyPredicate.init(value: "yyyy", forProperty: MPMediaItemPropertyAlbumTitle)
everything.addFilterPredicate(songArt)
everything.addFilterPredicate(songAlbumTitle)
let itemsFromGenericQuery = everything.items
for song in itemsFromGenericQuery! {
let songtitle = song.value(forProperty: MPMediaItemPropertyTitle)
print("songtitle==\(String(describing: songtitle))")
}
当然了,MPMediaPropertyPredicate还能查找很多东西以及指定类型,看文档就知道了,这里不一一列举。
PS:
有时候觉得自己写的东西很简单,内容很少,不够丰富,可是又觉得我只要把基本用法写出来就好了。回想起当年自学swift的时候也是从最基本的开始,看别人的代码一知半解,查资料问别人。我可以把[MPMediaItem]里面的类型都写出来,可是又怎样呢?这种看一下文档就知道的东西,就不用来凑字数了。MPMediaPropertyPredicate的方法也能写出几十行,但是大同小异。仁者见仁.......