您的位置:首页 > 移动开发 > IOS开发

iOS 开发 初级:AVAudioPlayer 的使用

2013-05-09 11:46 411 查看
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的设置,详见之前的博文。

下面是示例:

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


STEP 2:初始化AVAudioPlayer

示例代码:

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则为完全右声道发音。

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

示例代码:

// 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:控制

示例代码:

[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,这样在播放结束时可以进行一些相关的操作

示例代码:

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

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

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

}


以上就是关于AVAudioPlayer的使用。

[本文为原创文章,版权所有,如需转载,请注明出处,谢谢合作!]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  audio IOS Multimedia