欢迎访问 水平网    今天是:2018年06月22日 注册 | 登录 | 订阅 | 收藏
>> 苹果【Apple】 >> 编程应用 >> IOS开发初级之AVAudioPlayer的使用
推荐文章
热点文章

IOS开发初级之AVAudioPlayer的使用

作者:未知,  来源:网络,  阅读:731,  发布时间:2014-05-19  【放入收藏夹
AVAudioPlayer是AVFoundation.framework里面最基本的一个音频播放器的类。它与MPMediaPlayerController在一些基本操作功能上是类同的,比如play,pause,volume等等。

不一样的地方在于AVAudioPlayer没有队列这个东西,也就是说它只能播放一个指定路径的音频。要播放多个音频,可以通过创建多个AVAudioPlayer来实现。在AVFoundation里面,有另外一个功能强大的类AVQueuePlayer,基本上要做音乐播放器要靠它,什么QQ音乐,酷狗应该都是使用AVQueuePlayer。关于AVQueuePlayer的使用,将在之后的博文中讲述。

那么AVAudioPlayer有什么用呢?

AVAudioPlayer能实现的功能类似于System Audio Services,播放单一音频,但它不同的地方在于它可以控制播放的次数,播放的时间。比如用它可以很方便的实现重复播放。另外,它还有一个很强大的功能,就是可以很方便的调节左右声道的音量,从而实现很酷的立体声效果。从这个角度看,AVAudioPlayer很适用于游戏中的音频播放。比如纸牌游戏中洗牌时就可以重复播放洗牌时的音频直到洗牌结束。

下面开始介绍AVAudioPlayer的具体使用。




STEP 1:设置Audio Session

要记住,使用AVFoundation的东西播放音频,肯定要先对Audio Session进行设置,除非你使用默认的设置。关于Audio Session的设置,详见之前的博文。

下面是示例:


[plain]
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
STEP 2:初始化AVAudioPlayer

示例代码:


[plain]
NSURL *musicOneURL = [[NSBundle mainBundle] URLForResource:@"十年" withExtension:@"mp3"];
self.audioPlayerOne = [[AVAudioPlayer alloc] initWithContentsOfURL:musicOneURL error:nil];

NSURL *musicOneURL = [[NSBundle mainBundle] URLForResource:@"十年" withExtension:@"mp3"];
self.audioPlayerOne = [[AVAudioPlayer alloc] initWithContentsOfURL:musicOneURL error:nil];

STEP 3:设置AVAudioPlayer

AVAudioPlayer有一个重要的property就是pan,用它可以来调节音频播放时左右声道的大小,如果值是-1.0为完全左声道发生,如果是1.0则为完全右声道发音。

另外,还有一个很强大的功能,就是可以测量音频播放时实时声道的功率大小,这个功能可以用于辅助显示声音的波浪,很多电脑上的播放器都有的。当然,如果用它来进行声波的分析,我想也是可以的。

示例代码:


[plain]
// audioPlayerOne 为一个AVAudioPlayer的对象
self.audioPlayerOne.meteringEnabled = YES; // 允许测量
[self.audioPlayerOne updateMeters]; // 更新数据
[self.averagePowerChannelOne setValue:[self.audioPlayerOne averagePowerForChannel:0] animated:YES]; // 将获取的数据赋予相关的控件

[self.averagePowerChannelTwo setValue:[self.audioPlayerOne averagePowerForChannel:1] animated:YES];

// audioPlayerOne 为一个AVAudioPlayer的对象
self.audioPlayerOne.meteringEnabled = YES; // 允许测量
[self.audioPlayerOne updateMeters]; // 更新数据
[self.averagePowerChannelOne setValue:[self.audioPlayerOne averagePowerForChannel:0] animated:YES]; // 将获取的数据赋予相关的控件

[self.averagePowerChannelTwo setValue:[self.audioPlayerOne averagePowerForChannel:1] animated:YES];
STEP 4:控制

示例代码:


[plain]
[self.audioPlayerOne prepareToPlay]; // 准备数据,播放前必须设置
[self.audioPlayerOne setNumberOfLoops:-1]; // 设置为-1可以实现无限循环播放
[self.audioPlayerOne setRate:1.5f]; // 设置播放速度
[self.audioPlayerOne setPan:1.0f]; // 设置左右声道
[self.audioPlayerOne setCurrentTime:20.0f]; // 设置播放时间

[self.audioPlayerOne play]; // 播放

[self.audioPlayerOne pause]; // 暂停
[self.audioPlayerOne stop]; // 停止

[self.audioPlayerOne prepareToPlay]; // 准备数据,播放前必须设置
[self.audioPlayerOne setNumberOfLoops:-1]; // 设置为-1可以实现无限循环播放
[self.audioPlayerOne setRate:1.5f]; // 设置播放速度
[self.audioPlayerOne setPan:1.0f]; // 设置左右声道
[self.audioPlayerOne setCurrentTime:20.0f]; // 设置播放时间

[self.audioPlayerOne play]; // 播放

[self.audioPlayerOne pause]; // 暂停
[self.audioPlayerOne stop]; // 停止

STEP 5: Delegate

有时根据需要可以设置AVAudioPlayer的delegate,这样在播放结束时可以进行一些相关的操作

示例代码:


[plain]
// 完成播放
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
if (flag) {
NSLog(@"play succeed");
}
}

// 播放中断结束后,比如突然来的电话造成的中断

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags
{

}

// 完成播放
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
if (flag) {
NSLog(@"play succeed");
}
}

// 播放中断结束后,比如突然来的电话造成的中断

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags
{
}
TGAS:IOSAVAudioPlayer
评论【共有0条评论】查看所有评论
昵称:(*)   邮箱:   QQ:   验证码: 看不清楚?点击刷新验证码