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,如果想要播放多个文件,那么就得创建多个播放器。

原文地址:https://www.cnblogs.com/JustForHappy/p/5765370.html