本地音樂播放器的開發(fā)歷程(一)

一、簡介

   1. 因?yàn)閰⒖嫉氖荙Q音樂的樣子搭建界面颅夺,
      而目前QQ音樂的底部是一個(gè)進(jìn)行音樂播放管理的自定義UITabBar忘衍,
      所以我們就不用Storyboard,而是使用純代碼來搭建界面

   2. 我首先要做的是播放本地音樂的播放功能铺纽,
      而我們播放的音樂來源是來自iPhone自帶的APP--“音樂”中的音樂柬帕。。狡门。
      不知道這么說大家懂不懂陷寝,但是跟著我一起做一做就知道我在這里想表達(dá)什么了。
      O(∩_∩)O哈哈~

二其馏、獲取本地音樂庫中的音樂

   1.首先還是簡單一點(diǎn)凤跑,
     先在Storyboard里拖一個(gè)TableViewController作為根視圖,
     用來顯示我們從音樂庫中獲取到的音樂名,不需要任何的布局      

   2.創(chuàng)建一個(gè)繼承自UITableViewController的類叛复,并在該類中import媒體播放框架-MediaPlayer

"#import <MediaPlayer/MediaPlayer.h>"

   3.下面我們就來探究一下MPMusicPlayerController

參考鏈接:http://www.cnblogs.com/kenshincui/p/4186022.html

  首先MPMusicPlayerController是一個(gè)蘋果官方源生的用于播放本地音樂庫音樂的控制器仔引,
  它一共有兩種類型:       
  (1)applicationMusicPlayer,
     官方文檔注釋的意思是:通過applicationMusicPlayer播放的音樂在應(yīng)用退出后將還原用戶的播放狀態(tài)       
     實(shí)際效果是:用戶退出應(yīng)用界面后,音樂無法后臺(tái)播放褐奥。 
  (2)systemMusicPlayer咖耘,
     官方文檔注釋的意思是:通過systemMusicPlayer播放的音樂將替換用戶當(dāng)前播放音樂的狀態(tài)。       
     實(shí)際效果是:用戶退出應(yīng)用界面后撬码,音樂可以后臺(tái)播放
     并且可以通過蘋果自帶的功能儿倒,在鎖屏模式下切換音樂并控制音樂的播放和暫停。

  OK呜笑,下面我們先申明一個(gè)MPMusicPlayerController夫否,命名為musicPlayer

@property (strong,nonatomic) MPMusicPlayerController *musicPlayer;

  在這里要說的是,MPMusicPlayerController是一個(gè)單例類叫胁,
  我們在viewDidLoad中可以直接通過下面的代碼對(duì)musicPlayer進(jìn)行初始化慷吊,設(shè)置我們需要的播放形式,
  在這里我就直接用systemMusicPlayer了

self.musicPlayer = [MPMusicPlayerController systemMusicPlayer];

   然后我們開始寫一個(gè)獲取音樂庫中的音樂信息的方法,并返回一個(gè)播放隊(duì)列

"-(MPMediaItemCollection *)getMusicListFromMusicLibrary { }"

   在開始之前曹抬,我們還需要知道"音樂"這個(gè)實(shí)體的類名是什么溉瓶,
   我們能夠從蘋果開放的API中獲得什么屬性。
   在MPMusicPlayerController.h文件中谤民,我們看見了這個(gè)類還關(guān)聯(lián)了三個(gè)類堰酿,

@class MPMediaItem,MPMediaQuery,MPMusicPlayerControllerInternal;

   然后我在后面的內(nèi)容中,看到了三個(gè)方法:

/*
這三個(gè)方法都是設(shè)置播放隊(duì)列的函數(shù)张足,只有設(shè)置了触创,我們的播放器才能播放音樂,并可以使用蘋果提供的上一首为牍、下一首等接口 */

// 第一個(gè)方法是播放一首哼绑,參數(shù)就是要播放的音樂對(duì)象;
"- (void)setQueueWithQuery:(MPMediaQuery ***)query;"

// 第二個(gè)方法就是播放獲取到的音樂集(或者數(shù)組的意思);
"-(void)setQueueWithItemCollection:(MPMediaItemCollection ***)itemCollection;"

// 第三個(gè)方法是根據(jù)音樂在商店的ID數(shù)組播放...這個(gè)不是很懂岩馍,暫時(shí)跳過
"- (void)setQueueWithStoreIDs:(NSArray ***)storeIDs;"

    因此,我猜測抖韩,要獲取到音樂信息蛀恩,就需要用到MPMediaQuery類,
    然后我進(jìn)入到了MPMediaQuery.h文件茂浮,查看是否有接口可供我獲取音樂信息双谆,
    然后我看到了一堆實(shí)例方法
  這些方式是蘋果向開發(fā)者提供的一些預(yù)先設(shè)置的一個(gè)或多個(gè)查詢條件,
  讓開發(fā)者用來獲取到滿足這些條件的音樂信息席揽。
  所以不管三七二十一顽馋,我選了songsQuery,
  因?yàn)閺淖置嫔侠斫饣闲撸ㄟ^該方法寸谜,我能獲取到?jīng)]有經(jīng)過查詢條件篩選的音樂信息

   那么MPMediaItem又是干什么的呢?其實(shí)代碼寫多了,
   從字面意思上的了解就是"媒體實(shí)體"的意思属桦,
   在該類的頭文件中程帕,有著許許多多的屬性,其中包括了這個(gè)實(shí)體的標(biāo)題地啰,專輯名愁拭,作者等屬性。

了解了這么多亏吝,我們試著寫一下代碼岭埠,如下:
- (MPMediaItemCollection *)getMusicListFromMusicLibrary{
// 申明一個(gè)Collection便于下面給MusicPlayer賦值
MPMediaQuery *mediaQueue = [MPMediaQuery songsQuery];
MPMediaItemCollection *mediaItemCollection;

   if (mediaQueue.items.count == 0) {            
       return 0;      
   } else {
       // 獲取本地音樂庫文件            
       self.musicArray= [NSMutableArray array]; 
       for(MPMediaItem *item in mediaQueue.items) { 
            [self.musicArray addObject:item];
            // 打印一下,看看能不能顯示音樂名 
            NSLog(@"%@",item.title);            
       }                      
     
       // 將音樂信息賦值給musicPlayer
       mediaItemCollection = [[MPMediaItemCollection alloc] initWithItems: [self.musicArray copy]];
       [self.musicPlayer setQueueWithItemCollection:mediaItemCollection];      
   }      
      return mediaItemCollection;
}

  這里需要申明一個(gè)可供全局調(diào)用的可變數(shù)組蔚鸥,名為musicArray惜论,用來存放獲取到的一個(gè)個(gè)音樂信息實(shí)體 
  其中MPMediaItemCollection也就是我們通過刷選后獲得的實(shí)體集,
  這是因?yàn)镸PMusicPlayerController加載音樂需要一個(gè)播放隊(duì)列止喷,
  所以才支持開發(fā)者使用上一首馆类,下一首的函數(shù)調(diào)用。

#注意:只有當(dāng)“音樂”里有音樂時(shí)弹谁,我們才能獲取到音樂信息乾巧,所以得使用真機(jī)測試才能看到打印出來的信息。     
而我們的音樂信息需要通過鍵值對(duì)進(jìn)行訪問预愤,比如獲歌手名:
MPMediaItem *item;
NSString*musicSinger = [item valueForKey:MPMediaItemPropertyAlbumArtist];
// 具體的Key值請參考MPMediaItem.h中的內(nèi)容

---iPhone自帶的APP---



---APP里的音樂列表---



---打印出來的內(nèi)容---
   (SOS:誰能告訴我這些圖片怎么弄小點(diǎn)沟于,讓它們可以并排顯示啊V部怠?跆!~~~)

   然后我們就可以將相關(guān)的音樂信息顯示到tableview里了,代碼會(huì)上傳到我的GitHub上供璧,
   歡迎大家與我一起探索學(xué)習(xí)存崖,共同成長!

GitHub傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末睡毒,一起剝皮案震驚了整個(gè)濱河市来惧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吕嘀,老刑警劉巖违寞,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贞瞒,死亡現(xiàn)場離奇詭異偶房,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)军浆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門棕洋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乒融,你說我怎么就攤上這事掰盘。” “怎么了赞季?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵愧捕,是天一觀的道長。 經(jīng)常有香客問我申钩,道長次绘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任撒遣,我火速辦了婚禮邮偎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘义黎。我一直安慰自己禾进,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布廉涕。 她就那樣靜靜地躺著泻云,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狐蜕。 梳的紋絲不亂的頭發(fā)上壶愤,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音馏鹤,去河邊找鬼征椒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛湃累,可吹牛的內(nèi)容都是我干的勃救。 我是一名探鬼主播碍讨,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒙秒!你這毒婦竟也來了勃黍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤晕讲,失蹤者是張志新(化名)和其女友劉穎覆获,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓢省,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弄息,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勤婚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摹量。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖馒胆,靈堂內(nèi)的尸體忽然破棺而出缨称,到底是詐尸還是另有隱情,我是刑警寧澤祝迂,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布睦尽,位于F島的核電站,受9級(jí)特大地震影響型雳,放射性物質(zhì)發(fā)生泄漏当凡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一四啰、第九天 我趴在偏房一處隱蔽的房頂上張望宁玫。 院中可真熱鬧,春花似錦柑晒、人聲如沸欧瘪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佛掖。三九已至,卻和暖如春涌庭,著一層夾襖步出監(jiān)牢的瞬間芥被,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工坐榆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拴魄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像匹中,于是被迫代替她去往敵國和親夏漱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容