一、簡單說明
音樂播放用到一個叫做AVAudioPlayer的類,這個類可以用於播放手機本地的音樂文件。 注意: (1)該類(AVAudioPlayer)只能用於播放本地音頻。 (2)時間比較短的(稱之為音效)使用AudioServicesCreateSystemSoundID來創建,而本地時間較長(稱之為音樂)使用AVAudioPlayer類。 二、代碼示例 AVAudioPlayer類依賴於AVFoundation框架,因此使用該類必須先導入AVFoundation框架,並包含其頭文件(包含主頭文件即可)。 導入必要的,需要播放的音頻文件到項目中。 代碼示例: 復制代碼 1 // 2 // YYViewController.m 3 // 15-播放音樂 4 // 5 6 #import "YYViewController.h" 7 #import <AVFoundation/AVFoundation.h> 8 9 @interface YYViewController () 10 11 @end 12 13 @implementation YYViewController 14 15 - (void)viewDidLoad 16 { 17 [super viewDidLoad]; 18 19 } 20 21 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 22 { 23 24 //1.音頻文件的url路徑 25 NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil]; 26 27 //2.創建播放器(注意:一個AVAudioPlayer只能播放一個url) 28 AVAudioPlayer *audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil]; 29 30 //3.緩沖 31 [audioPlayer prepareToPlay]; 32 33 //4.播放 34 [audioPlayer play]; 35 } 36 37 @end 復制代碼 代碼說明:運行程序,點擊模擬器界面,卻並沒有能夠播放音頻文件,原因是代碼中創建的AVAudioPlayer播放器是一個局部變量,應該調整為全局屬性。 可將代碼調整如下,即可播放音頻: 復制代碼 1 #import "YYViewController.h" 2 #import <AVFoundation/AVFoundation.h> 3 4 @interface YYViewController () 5 @property(nonatomic,strong)AVAudioPlayer *audioplayer; 6 @end 7 8 @implementation YYViewController 9 10 - (void)viewDidLoad 11 { 12 [super viewDidLoad]; 13 14 } 15 16 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 17 { 18 19 //1.音頻文件的url路徑 20 NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil]; 21 22 //2.創建播放器(注意:一個AVAudioPlayer只能播放一個url) 23 self.audioplayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil]; 24 25 //3.緩沖 26 [self.audioplayer prepareToPlay]; 27 28 //4.播放 29 [self.audioplayer play]; 30 } 31 32 @end 復制代碼 注意:一個AVAudioPlayer只能播放一個url,如果想要播放多個文件,那麼就得創建多個播放器。 三、相關說明 新建一個項目,在storyboard中放三個按鈕,分別用來控制音樂的播放、暫停和停止。 程序代碼如下: 復制代碼 1 #import "YYViewController.h" 2 #import <AVFoundation/AVFoundation.h> 3 4 @interface YYViewController () 5 @property(nonatomic,strong)AVAudioPlayer *player; 6 - (IBAction)play; 7 - (IBAction)pause; 8 - (IBAction)stop; 9 @end 10 11 @implementation YYViewController 12 13 - (void)viewDidLoad 14 { 15 [super viewDidLoad]; 16 17 //1.音頻文件的url路徑 18 NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil]; 19 20 //2.創建播放器(注意:一個AVAudioPlayer只能播放一個url) 21 self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil]; 22 23 //3.緩沖 24 [self.player prepareToPlay]; 25 26 } 27 28 - (IBAction)play { 29 //開始播放/繼續播放 30 [self.player play]; 31 } 32 33 - (IBAction)pause { 34 //暫停 35 [self.player pause]; 36 } 37 38 - (IBAction)stop { 39 //停止 40 //注意:如果點擊了stop,那麼一定要讓播放器重新創建,否則會出現一些莫名其面的問題 41 [self.player stop]; 42 } 43 @end 復制代碼 注意:如果點了“停止”,那麼一定要播放器重新創建,不然的話會出現莫名其妙的問題。 點擊了stop之後,播放器實際上就不能再繼續使用了,如果還繼續使用,那麼後續的一些東西會無法控制。 推薦代碼: 復制代碼 1 #import "YYViewController.h" 2 #import <AVFoundation/AVFoundation.h> 3 4 @interface YYViewController () 5 @property(nonatomic,strong)AVAudioPlayer *player; 6 - (IBAction)play; 7 - (IBAction)pause; 8 - (IBAction)stop; 9 @end 10 11 @implementation YYViewController 12 13 #pragma mark-懶加載 14 -(AVAudioPlayer *)player 15 { 16 if (_player==Nil) { 17 18 //1.音頻文件的url路徑 19 NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil]; 20 21 //2.創建播放器(注意:一個AVAudioPlayer只能播放一個url) 22 self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil]; 23 24 //3.緩沖 25 [self.player prepareToPlay]; 26 } 27 return _player; 28 } 29 30 - (void)viewDidLoad 31 { 32 [super viewDidLoad]; 33 } 34 35 - (IBAction)play { 36 //開始播放/繼續播放 37 [self.player play]; 38 } 39 40 - (IBAction)pause { 41 //暫停 42 [self.player pause]; 43 } 44 45 - (IBAction)stop { 46 //停止 47 //注意:如果點擊了stop,那麼一定要讓播放器重新創建,否則會出現一些莫名其面的問題 48 [self.player stop]; 49 self.player=Nil; 50 } 51 @end 復制代碼 如果點擊了停止按鈕,那麼音樂會從頭開始播放。