當iOS播放音樂時,它使用一個名為AvodioPope的類,它被用來在手機上播放本地音樂文件,那么iOS開發中對音效和音樂播放的實例演示大家了解嗎?下面就讓武林技術頻道小編帶你一起來了解一下吧!
音效的播放
一、簡單介紹
簡單來說,音頻可以分為2種
(1)音效
又稱“短音頻”,通常在程序中的播放時長為1~2秒
在應用程序中起到點綴效果,提升整體用戶體驗
(2)音樂
比如游戲中的“背景音樂”,一般播放時間較長
框架:播放音頻需要用到AVFoundation.framework框架
二、音效的播放
1.獲得音效文件的路徑
?
2.加載音效文件,得到對應的音效ID
?
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID);
?
3.播放音效
?
?
注意:音效文件只需要加載1次
4.音效播放常見函數總結
加載音效文件
釋放音效資源
?
?
播放音效
?
?
播放音效帶點震動
?
?
?
?
三、程序示例
先導入需要依賴的框架

導入需要播放的音效文件素材

說明:AVFoundation.framework框架中的東西轉換為CF需要使用橋接。
代碼示例:
?
#import "YYViewController.h"
#import
@interface YYViewController ()
@end
?
?
?
- (void)viewDidLoad
{
??? [super viewDidLoad];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
??? //1.獲得音效文件的全路徑
???
??? NSURL *url=[[NSBundle mainBundle]URLForResource:@"buyao.wav" withExtension:nil];
???
??? //2.加載音效文件,創建音效ID(SoundID,一個ID對應一個音效文件)
??? SystemSoundID soundID=0;
??? AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);
???
??? //把需要銷毀的音效文件的ID傳遞給它既可銷毀
??? //AudioServicesDisposeSystemSoundID(soundID);
???
??? //3.播放音效文件
??? //下面的兩個函數都可以用來播放音效文件,第一個函數伴隨有震動效果
??? AudioServicesPlayAlertSound(soundID);
??? //AudioServicesPlaySystemSound()
}
@end
說明:點擊屏幕可以播放音效文件。
?
?
?
音樂的播放
一、簡單說明
音樂播放用到一個叫做AVAudioPlayer的類,這個類可以用于播放手機本地的音樂文件。
注意:
(1)該類(AVAudioPlayer)只能用于播放本地音頻。
(2)時間比較短的(稱之為音效)使用AudioServicesCreateSystemSoundID來創建,而本地時間較長(稱之為音樂)使用AVAudioPlayer類。
二、代碼示例
AVAudioPlayer類依賴于AVFoundation框架,因此使用該類必須先導入AVFoundation框架,并包含其頭文件(包含主頭文件即可)。


導入必要的,需要播放的音頻文件到項目中。
代碼示例:
?
#import "YYViewController.h"
#import
@interface YYViewController ()
@end
?
?
?
- (void)viewDidLoad
{
??? [super viewDidLoad];
???
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
???
??? //1.音頻文件的url路徑
??? NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
???
??? //2.創建播放器(注意:一個AVAudioPlayer只能播放一個url)
??? AVAudioPlayer *audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
???
??? //3.緩沖
??? [audioPlayer prepareToPlay];
???
??? //4.播放
??? [audioPlayer play];
}
@end
代碼說明:運行程序,點擊模擬器界面,卻并沒有能夠播放音頻文件,原因是代碼中創建的AVAudioPlayer播放器是一個局部變量,應該調整為全局屬性。
?
可將代碼調整如下,即可播放音頻:
?
@interface YYViewController ()
@property(nonatomic,strong)AVAudioPlayer *audioplayer;
@end
?
?
?
- (void)viewDidLoad
{
??? [super viewDidLoad];
???
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
???
??? //1.音頻文件的url路徑
??? NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
???
??? //2.創建播放器(注意:一個AVAudioPlayer只能播放一個url)
??? self.audioplayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
???
??? //3.緩沖
??? [self.audioplayer prepareToPlay];
???
??? //4.播放
??? [self.audioplayer play];
}
@end
注意:一個AVAudioPlayer只能播放一個url,如果想要播放多個文件,那么就得創建多個播放器。
?
三、相關說明
新建一個項目,在storyboard中放三個按鈕,分別用來控制音樂的播放、暫停和停止。

程序代碼如下:
?
@interface YYViewController ()
@property(nonatomic,strong)AVAudioPlayer *player;
- (IBAction)play;
- (IBAction)pause;
- (IBAction)stop;
@end
@implementation YYViewController
- (void)viewDidLoad
{
??? [super viewDidLoad];
???
??? //1.音頻文件的url路徑
??? NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
???
??? //2.創建播放器(注意:一個AVAudioPlayer只能播放一個url)
??? self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
???
??? //3.緩沖
??? [self.player prepareToPlay];
}
- (IBAction)play {
??? //開始播放/繼續播放
??? [self.player play];
}
- (IBAction)pause {
??? //暫停
??? [self.player pause];
}
- (IBAction)stop {
??? //停止
??? //注意:如果點擊了stop,那么一定要讓播放器重新創建,否則會出現一些莫名其面的問題
??? [self.player stop];
}
@end
注意:如果點了“停止”,那么一定要播放器重新創建,不然的話會出現莫名其妙的問題。
?
點擊了stop之后,播放器實際上就不能再繼續使用了,如果還繼續使用,那么后續的一些東西會無法控制。
推薦代碼:
?
@interface YYViewController ()
@property(nonatomic,strong)AVAudioPlayer *player;
- (IBAction)play;
- (IBAction)pause;
- (IBAction)stop;
@end
?
?
?
#pragma mark-懶加載
-(AVAudioPlayer *)player
{
??? if (_player==Nil) {
???????
??????? //1.音頻文件的url路徑
??????? NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
???????
??????? //2.創建播放器(注意:一個AVAudioPlayer只能播放一個url)
??????? self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
???????
??????? //3.緩沖
??????? [self.player prepareToPlay];
??? }
??? return _player;
}
- (void)viewDidLoad
{
??? [super viewDidLoad];
}
- (IBAction)play {
??? //開始播放/繼續播放
??? [self.player play];
}
- (IBAction)pause {
??? //暫停
??? [self.player pause];
}
- (IBAction)stop {
??? //停止
??? //注意:如果點擊了stop,那么一定要讓播放器重新創建,否則會出現一些莫名其面的問題
??? [self.player stop];
??? self.player=Nil;
}
@end
四、播放多個文件
點擊,url,按住common建查看。
?
?
?

可以發現,這個url是只讀的,因此只能通過initWithContentsOfUrl的方式進行設置,也就意味著一個播放器對象只能播放一個音頻文件。
上文是iOS開發中對音效和音樂播放的實例演示的介紹,想要了解更多IOS內容,請繼續關注武林技術頻道吧!
新聞熱點
疑難解答