iOS音頻開(kāi)發(fā)(OC)-仿寫(xiě)簡(jiǎn)易QQ音樂(lè)播放器

摘要:本文將介紹筆者仿寫(xiě)QQ音樂(lè)播放器的主體思路.筆者在該項(xiàng)目中實(shí)現(xiàn)的主要功能有:橫豎屏適配,本地音頻播放,lrc類型歌詞解析.展示及播放時(shí)變色處理,上下曲切換,后臺(tái)運(yùn)行模式設(shè)置,鎖屏視圖設(shè)置,播放打斷處理等基本功能.接下來(lái),也將在以上幾個(gè)板塊中選擇一些音頻開(kāi)發(fā)中實(shí)用性強(qiáng)的功能做簡(jiǎn)要介紹.

一.播放功能的效果展示


二.本地音頻播放的主體實(shí)現(xiàn)思路(思維導(dǎo)圖展示)

三.歌詞解析及展示

? ? ? 筆者用到的歌詞文件類型為lrc(github上托管的項(xiàng)目中sources文件下,github托管地址:https://github.com/moonCai/SimpleMusicPlayer),將每句歌詞作為一個(gè)模型(CYLyricModel),并將整首歌的歌詞解析為模型數(shù)組.

? ? ? ? 第一張效果圖和第二張效果圖中每一句歌詞的展示控件都是label,為了實(shí)現(xiàn)歌詞的變色效果,自定義了UIColorLabel這個(gè)類,繼承自UILabel.它的實(shí)現(xiàn)原理非常簡(jiǎn)單:設(shè)置一個(gè)progress屬性,根據(jù)progress的值來(lái)設(shè)定填充區(qū)域.設(shè)定一個(gè)填充色(即當(dāng)前正播放的歌詞中已經(jīng)播放過(guò)的部分的顏色),在指定的填充區(qū)域采用混合模式渲染.并在progress的setter方法中進(jìn)行重繪,就能達(dá)到動(dòng)態(tài)渲染的效果.代碼如下:

- (void)drawRect:(CGRect)rect {

? ? [super drawRect:rect];

? ? ?//設(shè)置填充色

? ? ?[[UIColor colorWithRed:45/255.0 green:185/255.0 blue:105/255.0 alpha:1.0] setFill];

? ? ?//設(shè)置填充區(qū)域

? ? ?rect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width * self.progress, rect.size.height);

? ? ?//渲染,在填充區(qū)域使用混個(gè)模式進(jìn)行填充

? ? ?UIRectFillUsingBlendMode(rect, kCGBlendModeSourceIn);

}

-(void)setProgress:(CGFloat)progress {

? ? ? _progress = progress;

? ? ?[self setNeedsDisplay];

}

? ? ? ? 第二張效果圖的歌詞展示控件是UIScrollView,展示每一句歌詞的label也是UIColorLabel.根據(jù)當(dāng)前播放歌詞的索引來(lái)動(dòng)態(tài)改變contentOffset,以實(shí)現(xiàn)播放中不斷滾動(dòng)的效果.

四.后臺(tái)運(yùn)行模式

? ? ? 僅僅打開(kāi)后臺(tái)運(yùn)行模式的話,在真機(jī)上進(jìn)行后臺(tái)播放時(shí),只會(huì)持續(xù)幾秒鐘就會(huì)掛起,如果想要持續(xù)在后臺(tái)運(yùn)行模式下播放,還需要在音頻管理單例的初始化方法中開(kāi)啟音頻會(huì)話,代碼如下:

? ? ? ? AVAudioSession *session = [AVAudioSession sharedInstance];

? ? ? ? [session setCategory:AVAudioSessionCategoryPlayback error:nil];

五.設(shè)置鎖屏視圖

? ? ? ? 如果手機(jī)鎖屏了,音頻還在進(jìn)行播放.再次點(diǎn)開(kāi)屏幕時(shí)的視圖即為鎖屏視圖.以上代碼為筆者在項(xiàng)目中的實(shí)現(xiàn)代碼.在設(shè)置封面圖片時(shí),為了能顯示歌詞,采取了繪制的方式(項(xiàng)目中的方法名:drawImageWithArtWorkAndLyric):先繪制指定大小的封面圖片,再在指定rect下繪制歌詞文字.如果鎖屏視圖中沒(méi)有顯示歌詞的需求,可采用以下方式設(shè)置封面圖片:

MPMediaItemArtwork *artWork = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:music.image]];

六.應(yīng)用開(kāi)啟遠(yuǎn)程控制,實(shí)現(xiàn)播放/暫停及自動(dòng)切歌,音頻打斷的處理

? ? ? 以上為筆者仿寫(xiě)QQ音樂(lè)播放器的主體思路,項(xiàng)目在github上的開(kāi)源地址:github.com/moonCai/SimpleMusicPlayer.歡迎交流探討.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哨苛,更是在濱河造成了極大的恐慌堕扶,老刑警劉巖世落,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潭辈,死亡現(xiàn)場(chǎng)離奇詭異线罕,居然都是意外死亡父泳,警方通過(guò)查閱死者的電腦和手機(jī)般哼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惠窄,“玉大人蒸眠,你說(shuō)我怎么就攤上這事「巳冢” “怎么了楞卡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)脾歇。 經(jīng)常有香客問(wèn)我臀晃,道長(zhǎng),這世上最難降的妖魔是什么介劫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任徽惋,我火速辦了婚禮,結(jié)果婚禮上座韵,老公的妹妹穿的比我還像新娘险绘。我一直安慰自己,他們只是感情好誉碴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布宦棺。 她就那樣靜靜地躺著,像睡著了一般黔帕。 火紅的嫁衣襯著肌膚如雪代咸。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天成黄,我揣著相機(jī)與錄音呐芥,去河邊找鬼。 笑死奋岁,一個(gè)胖子當(dāng)著我的面吹牛思瘟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闻伶,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼滨攻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起光绕,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤女嘲,失蹤者是張志新(化名)和其女友劉穎筛欢,沒(méi)想到半個(gè)月后秦爆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摸屠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年景埃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顶别。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谷徙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驯绎,到底是詐尸還是另有隱情完慧,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布剩失,位于F島的核電站屈尼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拴孤。R本人自食惡果不足惜脾歧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望演熟。 院中可真熱鬧鞭执,春花似錦、人聲如沸芒粹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)化漆。三九已至估脆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間座云,已是汗流浹背疙赠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朦拖,地道東北人棺聊。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像贞谓,于是被迫代替她去往敵國(guó)和親限佩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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