iOS 开发之音频播放
前段时间做项目用到音频播放功能,在网上也查了好多资料,最后终于搞懂他们的原理.
本文是借鉴别人的,网址是:http://www.jb51.net/article/74666.htm
小子之所以还要写这篇博客,是为了自己以后能方便查询,也方便大家查阅,如果原作者认为小子有不妥的地方,请留言联系我,我会删博的....~_~
a,音频播放我们使用的AVAudioPlayer ,AVAudioPlayer是属于AVFoudation.framework框架之中的,所以在我们使用的时候需要把AVFoudation.framework框架添加到项目中.
b,音频播放又分为2中:
(1),较短的音频播放,一般播放时间在1~2秒;
(2),相对比较长的音频播放;
一,这里先写较短音频的播放
1,首先添加项目需要的依赖库AVFoudation.framework (同时记得导入头文件 #import <AVFoundation/AVFoundation.h>)
2,获取音频的路径
1 //获取音频路径 2 NSString * musicPath = [[NSBundle mainBundle]pathForResource:@"aaa" ofType:@"m4a"];
3,创建音频的url路径
1 //创建音频的url路径 2 NSURL * musicUrl = [[NSURL alloc]initFileURLWithPath:musicPath];
4,加载音效文件,同时创建音效ID
1 //加载音效文件 ,创建音效id 一个id 对应一个音效文件 2 SystemSoundID soundID = 0; 3 AudioServicesCreateSystemSoundID((__bridge CFURLRef)musicUrl, &soundID);
5,播放音效文件
1 //播放音效文件 2 // AudioServicesPlayAlertSound(soundID); //伴随有震动效果 3 AudioServicesPlaySystemSound(soundID);
二,这里写较长时间的音频播放 (这个我就照搬原作者的了)
较长时间的播放用到一个叫做AVAudioPlayer的类,这个类可以用于播放手机本地的音乐文件。
注意:
(1)该类(AVAudioPlayer)只能用于播放本地音频。
(2)时间比较短的音频使用AudioServicesCreateSystemSoundID来创建,而本地时间较长的音频使用AVAudioPlayer类。
同样需要导入AVFoundation框架,导入头文件(#import <AVFoundation/AVFoundation.h>)
1 // 2 // YYViewController.m 3 // 15-播放音乐 4 // 5 #import "YYViewController.h" 6 #import <AVFoundation/AVFoundation.h> 7 @interface YYViewController () 8 @end
1 @implementation YYViewController 2 - (void)viewDidLoad 3 { 4 [super viewDidLoad]; 5 6 } 7 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 8 { 9 10 //1.音频文件的url路径 11 NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil]; 12 13 //2.创建播放器(注意:一个AVAudioPlayer只能播放一个url) 14 AVAudioPlayer *audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil]; 15 16 //3.缓冲 17 [audioPlayer prepareToPlay]; 18 19 //4.播放 20 [audioPlayer play]; 21 } 22 @end
代码说明:运行程序,点击模拟器界面,却并没有能够播放音频文件,原因是代码中创建的AVAudioPlayer播放器是一个局部变量,应该调整为全局属性。
可将代码调整如下,即可播放音频:
1 #import "YYViewController.h" 2 #import <AVFoundation/AVFoundation.h> 3 @interface YYViewController () 4 @property(nonatomic,strong)AVAudioPlayer *audioplayer; 5 @end
1 @implementation YYViewController 2 - (void)viewDidLoad 3 { 4 [super viewDidLoad]; 5 6 } 7 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 8 { 9 10 //1.音频文件的url路径 11 NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil]; 12 13 //2.创建播放器(注意:一个AVAudioPlayer只能播放一个url) 14 self.audioplayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil]; 15 16 //3.缓冲 17 [self.audioplayer prepareToPlay]; 18 19 //4.播放 20 [self.audioplayer play]; 21 } 22 @end
注意:一个AVAudioPlayer只能播放一个url,如果想要播放多个文件,那么就得创建多个播放器。