音樂播放

  • AVAudioPlayer :播放音樂于游, 只能播放本地
  • AVPlayer :播放音樂 雷厂,本地滞欠、遠程通吃, 并且還可以播放視頻
  • MPMoviePlayerController: 播放音樂梨撞,本地、遠程通吃, 并且還可以播放視頻
  • MPMoviePlayerViewController:播放音樂渐北,本地阿逃、遠程通吃, 并且還可以播放視頻

一、AVAudioPlayer

1.導入頭文件
#import <AVFoundation/AVFoundation.h>

2.播放音樂

- (IBAction)play {
   if (![self.player isPlaying]) {  
        [self.player play];
    }

    // 創(chuàng)建播放器
    NSURL*url = [[NSBundle mainBundle] URLForResource:@"一東.mp3"withExtension:nil];

    AVAudioPlayer*player = [[AVAudioPlayeralloc] initWithContentsOfURL:url error:nil];

    // 是否允許快進
    player.enableRate = YES;

    // 快進速度
    player.rate = 3;
    self.player = player;

    // 準備播放
   if ([player prepareToPlay]) {
    // 播放音樂    
      [player play];
    }
}

- (IBAction)pause {
    [self.player pause];
}

- (IBAction)stop {
    [self.player stop];

    // 停止播放后從內(nèi)存清空
    self.player =nil;
}

二赃蛛、AVPlayer(本地音樂/在線音樂)

  1. 本地音樂
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
/**
 *  播放器
 */
@property (nonatomic, strong) AVPlayer *player;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    // 初始化播放器
    NSURL*url = [[NSBundlemainBundle] URLForResource:@"Background.caf"withExtension:nil];

    self.player = [AVPlayer playerWithURL:url];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.player play];
}
@end

2.在線音樂:

#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
/**
*  播放器
*/
@property (nonatomic, strong) AVPlayer *player;
@end

@implementation ViewController
- (void)viewDidLoad {
   [super viewDidLoad];

   // 初始化播放器
   NSURL*url = [NSURLURLWithString:@"http://y1.eoews.com/assets/ringtones/2012/5/18/34049/oiuxsvnbtxks7a0tg6xpdo66exdhi8h0bplp7twp.mp3"];

   self.player = [AVPlayer playerWithURL:url];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   [self.player play];
}
@end

注意:
AVPlayer不能獲得播放進度恃锉,想要獲取在線音樂下載進度等信息,需要第三方框架呕臂。

三破托、第三方框架播放流媒體(在線)音樂(DOUAudioStreamer)

蘋果自帶的AVPlayer和MPMoviePlayerController能播放流媒體音頻, 但是提供的功能接口較少, 無法實現(xiàn)過于復雜和個性化的功能。如果想實現(xiàn)一些個性化\復雜的操作, 可以借助一些第三方框架輕易實現(xiàn)诵闭。

下面介紹DOUAudioStreamer的使用

  1. 導入src文件夾下面的所有源代碼

  2. 導入依賴的框架

  3. 包含主頭文件

    #import "DOUAudioStreamer.h"
    

4.新建一個遵守協(xié)議的模型類,用于提供音頻文件的遠程路徑

#import "DOUAudioStreamer.h"
@interface CJAudioFile : NSObject<DOUAudioFile>
/**
 *  音頻文件路徑
 */
@property(strong, nonatomic) NSURL*audioFileURL;
@end

5.DOUAudioStreamer類常見屬性

// 文件的總大小
@property (nonatomic, readonly) NSUIntegerexpectedLength;

// 目前已下載的文件大小
@property (nonatomic, readonly) NSUIntegerreceivedLength;

// 下載速度
@property (nonatomic, readonly) NSUIntegerdownloadSpeed;

// 緩沖比例
@property (nonatomic, assign, readonly) doublebufferingRatio;

// 音量
@property (nonatomic, assign) doublevolume;

// 緩存路徑(在沙盒的tmp目錄, 隨時會被刪除)
@property (nonatomic, readonly) NSString*cachedPath;

// 歌曲的總時長
@property (nonatomic, assign, readonly) NSTimeIntervalduration;

// 歌曲的當前播放時長
@property (nonatomic, assign) NSTimeIntervalcurrentTime;

// 播放器狀態(tài)
@property (assign, readonly) DOUAudioStreamerStatusstatus;

7.播放器狀態(tài)

typedefNS_ENUM(NSUInteger, DOUAudioStreamerStatus) {

 DOUAudioStreamerPlaying, // 正在播放

 DOUAudioStreamerPaused,  // 暫停

 DOUAudioStreamerIdle, // 停止播放

 DOUAudioStreamerFinished, // 播放完畢

 DOUAudioStreamerBuffering, // 正在緩沖

 DOUAudioStreamerError // 播放錯誤
};

8.傳入模型,開始播放音樂

self.audioStreamer=[DOUAudioStreamerstreamerWithAudioFile:file];

[self.audioStreamer play];
 

9.可以通過KVO監(jiān)聽播放器的狀態(tài)

[self.audioStreamer addObserver:self forKeyPath:CJStatusProp options:NSKeyValueObservingOptionNewcontext:nil];

[self.audioStreamer addObserver:self forKeyPath:CJDurationProp options:NSKeyValueObservingOptionNewcontext:nil];

[self.audioStreamer addObserver:self forKeyPath:CJBufferingRatioProp options:NSKeyValueObservingOptionNewcontext:nil];
 

10.暫停\停止播放

[self.audioStreamer pause];

[self.audioStreamer stop];

11.移除KVO監(jiān)聽

[self.audioStreamer removeObserver:self forKeyPath:CJStatusProp];

[self.audioStreamer removeObserver:self forKeyPath:CJDurationProp];

[self.audioStreamer removeObserver:self forKeyPath:CJBufferingRatioProp];

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炼团,一起剝皮案震驚了整個濱河市澎嚣,隨后出現(xiàn)的幾起案子疏尿,更是在濱河造成了極大的恐慌,老刑警劉巖易桃,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褥琐,死亡現(xiàn)場離奇詭異,居然都是意外死亡晤郑,警方通過查閱死者的電腦和手機敌呈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來造寝,“玉大人磕洪,你說我怎么就攤上這事〗肓” “怎么了析显?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長签赃。 經(jīng)常有香客問我谷异,道長,這世上最難降的妖魔是什么锦聊? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任歹嘹,我火速辦了婚禮,結果婚禮上孔庭,老公的妹妹穿的比我還像新娘尺上。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布怎抛。 她就那樣靜靜地躺著仰税,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抽诉。 梳的紋絲不亂的頭發(fā)上陨簇,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音迹淌,去河邊找鬼河绽。 笑死,一個胖子當著我的面吹牛唉窃,可吹牛的內(nèi)容都是我干的耙饰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼纹份,長吁一口氣:“原來是場噩夢啊……” “哼苟跪!你這毒婦竟也來了?” 一聲冷哼從身側響起蔓涧,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤件已,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后元暴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篷扩,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年茉盏,在試婚紗的時候發(fā)現(xiàn)自己被綠了鉴未。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸠姨,死狀恐怖铜秆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情讶迁,我是刑警寧澤连茧,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站添瓷,受9級特大地震影響梅屉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鳞贷,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一坯汤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搀愧,春花似錦惰聂、人聲如沸疆偿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杆故。三九已至,卻和暖如春溉愁,著一層夾襖步出監(jiān)牢的瞬間处铛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工拐揭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撤蟆,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓堂污,卻偏偏與公主長得像家肯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盟猖,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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