概述

一个AVAudioPlayer对象实例,被称作音频播放器,用于播放文件或内存中的音频数据。

Apple推荐你使用这个类播放音频文件,除了你要播放的音频获取自网络流或者是需要非常低的I/O延迟。为了总体了解音频技术,阅读 Audio & Video Starting Point"和 “Using Audio” 在多媒体编程指南中。

使用音频播放器,你可以:

播放任何持续时间的音频

播放的音频可以来自文件或者内存

循环播放

可以同时播放多个音频,每个音频对应一个音频播放器,具有精确的同步。

控制你所播放音频的播放标准,立体声相位,和播放速率

可以跳转到音频文件的某个特点位置,应用可以通过这实现快进与快退。

获取你用来控制播放标准的数据

AVAudioPlayer类可以让你播放iOS支持的任意格式的音乐。你可以通过实现代理去处理中断或者在音乐播放结束后,更新用户界面。
这个类使用objective-c公开的属性特点去编辑音频的信息,例如音频时间线上的播放点,访问播放的选择,例如音量和循环。你也可以使用playing方法测试音频是否播放。
要配置播放一个音频会话,参照AVAudioSession和AVAudioSessionDelegate。要了解你所选择的文件格式是否影响多个音频的播放,请参阅“iPhone Hardware and Software Audio Codecs” in Multimedia Programming Guide。


函数

初始化函数

- (id)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError

初始化并返回一个播放器,播放指定的音乐文件

- (id)initWithData:(NSData *)data error:(NSError **)outError

初始化并返回一个播放器,播放内存中的指定数据

播放控制与配置

- (BOOL)play

异步播放音乐(在调用这个函数时,如果音频还没有做好播放准备,会暗中调用prepareToPlay函数)

-

- (void)pause


暂停播放,音频将从暂停点重新播放


调用pause取消音频的播放准备状态,但并不释放音频播放和准备播放音频时所需要的音频硬件


- (void)stop


停止播放,解除播放所需要的设备



- (BOOL)prepareToPlay


通过预加载视频数据,为视频播放做准备


调用这个函数去预加载数据和获取音频播放所需要的硬件,来使调用play函数和音频开始输出之间的间隔最小。可以调用stop函数或等待音频播放完,来取消这个函数的设置。



@property(readonly, getter=isPlaying) BOOL playing


一个bool值,用于指示一个音频播放器是否在进行播放。


提示:要想看一个视频是否播放完,可以用代理里的方法;(不必去循环检测这个属性。)



@property float volume


音频播放器音量0-1.0之间



@property float pan


立体声的音道,通过设置这个属性,你可以设置声道,值-1.0全是左声道,0是左右平衡,1.0是全部右声道。



@property float rate


音频播放速度,这个属性默认值是1.0,提供一个正常的播放速度,可用值是从0.5既一半播放速度,到2.0两倍播放速度之间


要设置音频的播放速度,你还要看数度调节属性enableRate属性。



@property BOOL enableRate


一个bool值,指定一个音频播放器的播放速度调节是否可用。


要想能够调节一个音频的播放速度,设置这个属性为YES,调用时机在初始化音频后和调用prepareToPlay函数前。



@property NSInteger numberOfLoops


设置音频循环次数


0是默认值,意味着音频播放一次。设置一个正整数去指定返回到音频开头重新播放的次数。例如,指定值为1,结果总共播放了两次音频。要是设置一个负值,则无限循环播放,直到你调用stop函数。



@property(assign) id<AVAudioPlayerDelegate> delegate


音频播放代理


你所指定为音频播放器代理的对象,成为AvAudioPlayerDelegate中所描述通知的目标对象。这些通知允许你对解码错误,音频中断,播放完成进行响应。



@property(readonly) NSDictionary *settings


音频播放器的设置字典,包括音频和所联系的播放器的信息。


一个音频播放器设置字典,包含的信息有:


    •    Channel layout (AVChannelLayoutKey)


声道设置


    •    Encoder bit rate (AVEncoderBitRateKey)


编码率


    •    Audio data format (AVFormatIDKey)


音频数据类型


    •    Channel count (AVNumberOfChannelsKey)


声道数


    •    Sample rate (AVSampleRateKey)


音频播放速度



音频的管理信息



@property(readonly) NSUInteger numberOfChannels


音频播放器所对应音频的声道数量



@property(readonly) NSTimeInterval duration


音频播放器所对应音频的总持续时间,单位秒



@property NSTimeInterval currentTime


音频播放器所对应音频在时间线上的当前播放点


如果音频正在播放,currentTime被设置为当前播放位置到音频开始处的秒数。如果音频没有播放,currentTime被设置,play函数被调用是音频播放处,到音频开始处的秒数。


通过设置这个属性,你可以指定音频的特定点,或实现音频的快进或到回;



@property(readonly) NSTimeInterval deviceCurrentTime


音频输出设备的时间值,单位秒


这个属性的值在音频播放或停止时都会单调递增。如果多个音频播放器连接到音频播放设备,设备时间会一直增加,只要有一个音频播放器处在播放或暂停状态。否则,设备时间归0.


使用这个属性去象征now,当调用playAtTime:函数时。通过配置多个音频播放器去播放在指定deviceCurrentTime的指定点,你可以实现精确的同步性。



@property(readonly) NSURL *url


音频播放器所对应音频的url


如果音频不是用url初始化的,则返回nil



@property(readonly) NSData *data


音频播放器所对应音频的Data


如果音频不是用data初始化的,则返回nil


Using Audio Level Metering 

 @property(getter=isMeteringEnabled) BOOL meteringEnabled 

 - (float)averagePowerForChannel:(NSUInteger)channelNumber 

 - (float)peakPowerForChannel:(NSUInteger)channelNumber 

 - (void)updateMeters