概述
一个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