AVAudioPlayer 的使用

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
{
   
}

 

你可能感兴趣的:(AVAudioPlayer 的使用)