最近產(chǎn)品爸爸又增加一個(gè)新的功能龟劲,獲取本地音樂梢薪。如果iTunes里面沒有音樂的話,可以電腦上下載一首拉進(jìn)手機(jī)里,方法請自行百度(一堆)匈庭。
在iOS中夫凸,獲取本地音樂主要用到MPMediaQuery,如果對音樂進(jìn)行條件篩選的話就用到MPMediaPropertyPredicate阱持。廢話不多說夭拌,直接上代碼:
首先要在TARGETS的info里添加權(quán)限: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兵罢、一個(gè)條件查找 查找名稱為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献烦、多個(gè)條件查找 查找名為xxxx的藝術(shù)家的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))")
}
當(dāng)然了,MPMediaPropertyPredicate還能查找很多東西以及指定類型卖词,看文檔就知道了巩那,這里不一一列舉。
PS:
有時(shí)候覺得自己寫的東西很簡單此蜈,內(nèi)容很少即横,不夠豐富,可是又覺得我只要把基本用法寫出來就好了裆赵《簦回想起當(dāng)年自學(xué)swift的時(shí)候也是從最基本的開始,看別人的代碼一知半解战授,查資料問別人页藻。我可以把[MPMediaItem]里面的類型都寫出來,可是又怎樣呢植兰?這種看一下文檔就知道的東西份帐,就不用來湊字?jǐn)?shù)了。MPMediaPropertyPredicate的方法也能寫出幾十行楣导,但是大同小異废境。仁者見仁.......