ios中AVAudioPlayer音频播放器

  IOS中有三种播放音频的方式:AVAudioPlayer、音频服务、音频队列。


AVAudioPlayer在AVFoundation框架下,所以我们要导入AVFoundation.framework。

AVAudioPlayer类封装了播放单个声音的能力。播放器可以用NSURL或者NSData来初始化,要注意的是NSURL并不可以是网络url而必须是本地文件URL,因为       AVAudioPlayer不具备播放网络音频的能力,不过我们可以用过一点小手段使其具备这个能力,留待稍后讲解。

        一个AVAudioPlayer只能播放一个音频,如果你想混音你可以创建多个AVAudioPlayer实例,每个相当于混音板上的一个轨道。


iOS多媒体播放音乐AVAudioPlayerAVPlayer

 1 iOS系统的音频播放方式

 AVAudioPlayer AVPlayer 系统声音音频排列

 AVAudioPlayer

 使用简单方便,但只能播放本地音频,不支持流媒体播放

 AVPlayer

 iOS4.0以后,可以使用AVPlayer播放本地音频和支持流媒体播放,但是提供接口较少,处理音频不够灵活

 音频队列

 音频队列主要处理流媒体播放,提供了强大且灵活的API接口(C行数的接口),但是处理起来较为复杂。

 2 AVAudioPlayer的使用

 使用AVAudioPlayerAVPlayer需要引用AVFoundation类库

 

ViewController.h

#import <UIKit/UIKit.h>

#import <AVFoundation/AVFoundation.h>

@interface ViewController :UIViewController

{

    AVAudioPlayer *audioplayer;

}

@end



ViewController.m

 .m文件中的loadview方法中添加以下方法

#import "ViewController.h"


@interfaceViewController ()

@end


@implementation ViewController

@synthesize label;

@synthesize textField;

- (void)viewDidLoad

{

    [superview   DidLoad];

      //方法一:

    //NSURL  *url = [NSURL fileURLWithPath:[NSString

                                         //stringWithFormat:@"%@/想你的夜.mp3",  [[NSBundle mainBundle]  resourcePath]]];

   //方法二

    NSBundle *bundle = [NSBundlemainBundle];

    NSString *urlString = [bundlepathForResource:@"想你的夜" ofType:@"mp3"];

    NSURL *url = [NSURLfileURLWithPath:urlString];

    NSError *error;

    audioplayer = [[AVAudioPlayeralloc]initWithContentsOfURL:urlerror:&error];

   //音量的控制

    audioplayer.volume=0.8;//0.0~1.0之间

    //循环次数,只要将AVAudioPlayer的numberOfLoops属性设为负数,音频文件就会一直循环播放直到调用stop方法

    audioplayer.numberOfLoops = 3;//默认只播放一次

    //播放位置

    audioplayer.currentTime = 15.0;//可以指定从任意位置开始播放

    //声道数

    NSInteger channals =  audioplayer.numberOfChannels;//只读属性

    //持续时间

    NSTimeInterval duration = audioplayer.duration;//获取采取的持续时间

    if (audioplayer==nil) {

        NSLog([error  description]);

    }

    else{

        [audioplayer  play];

    }

}

@end

播放声音

  1. [ player prepareToPlay];//分配播放所需的资源,并将其加入内部播放队列  
  2. [player play];//播放  
  3. [player stop];/


代理方法

          加入播放出现异常,或者被更高级别的系统任务打断,我们的程序还没来得及收场就挂了,怎么办?不急,我们可以通过几个委托方法很好地处理所有的情形。

         首先给player设置委托是必须的:

  1. player.delegate = self;  
  1. - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag{  
  2.     //播放结束时执行的动作  
  3. }  
  4. - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer*)player error:(NSError *)error{  
  5.     //解码错误执行的动作  
  6. }  
  7. - (void)audioPlayerBeginInteruption:(AVAudioPlayer*)player{  
  8.     //处理中断的代码  
  9. }  
  10. - (void)audioPlayerEndInteruption:(AVAudioPlayer*)player{  
  11.     //处理中断结束的代码  
  12. }  

你可能感兴趣的:(iPhone开发,AVAudioPlayer,AVPla)