音频播放

楚丰羽
2023-12-01

 今天闲来无事,花了点时间解读AVAudioPlayer头文件。如有解释不到位地方,望请大家指出。


属性:

1.@property(readonlygetter=isPlaying) BOOL playing;

  判断音频文件是否在播放。

2.@property(readonly) NSUInteger numberOfChannels;

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

3.@property(readonlyNSTimeInterval duration; 

   获取采样持续时间。

4.@property(assignid<<span style="color: rgb(69, 149, 174); font-family: Menlo; line-height: normal; ">AVAudioPlayerDelegate> delegate; 

  代理委托

5.@property(readonlyNSURL *url;

  获取创建的数据为本地url,如果不是通过本地url创建,取到值为nil

6.@property(readonlyNSData *data;

  获取创建的数据源为data,如果不是通过data穿件,取到值为nil

7.@property float pan NS_AVAILABLE(10_7, 4_0);

  立体声的音道,声道值-1.0全是左声道,0是左右平衡,1.0全是右声道。

8.@property float volume;

  音频播放音量0-1.0之间

9.@property BOOL enableRate NS_AVAILABLE(10_8, 5_0);

  指定一个音频播放器速度调节是否可用。要想调节一个音频播放速度,设置这个属性为YES。调用时机在初始化音频后和条用prepareToPlay函数前。

10.@property float rate NS_AVAILABLE(10_8, 5_0);

  音频播放速度,这个属性默认值是1.0,提供正常播放速速。如果设置值为0.5即一半播放速度,设置为2.0播放速度为两倍。该值区域为0.5~2.0之间。该值起不起作用,受到enableRate影响。

11.@property NSTimeInterval currentTime;

   音频播放所对应音频在时间线上的当前播放点。如果音频正在播放,currentTime被设置为当前播放位置到音频开始处的秒数。如果音频没有播放,currentTime被设置,play函数被调用是音频播放处到音频开始处的秒数。通过设置这个属性,你可以指定音频的特定点,后实现音频的快进后快回。

12.@property(readonlyNSTimeInterval deviceCurrentTime NS_AVAILABLE(10_7, 4_0);

   音频输出设备的时间值,单位秒。这个属性的值在音频播放或停止时都会单调递增。如果多个音频播放器连接到音频播放设置,设备时间会一直增加,只要有一个音频播放器处在播放或暂停状态。否则设备时间归0。使用这个属性去象征now,当调用playAtTime:函数时。通过配置多个音频播放器去播放在指定deviceCurrentTime的指定点,你可以实现精确的同步性。

13.@property NSInteger numberOfLoops;

   设置音频循环次数。0是默认值,音频播放一次。设置一个正整数,指定播放次数正整数+1,设置一个负数,则无限循环播放,直到调用stop函数停止播放。

14.@property(readonly) NSDictionary *settings NS_AVAILABLE(10_7, 4_0);

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

15.@property(getter=isMeteringEnabled) BOOL meteringEnabled; 

  设置计量器是否可用,默认是关闭的。


方法:

1.初始化

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

初始化返回一个播放器,播放数据源为url

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

初始化返回一个播放器,播放数据源为data

2.- (BOOL)prepareToPlay;

判断是否准备好音频文件,用音频播放器进行播放。

3.- (BOOL)play;

打开音频播放器。

4.- (BOOL)playAtTime:(NSTimeInterval)time NS_AVAILABLE(10_7, 4_0);

在过多少时间将要打开音频播放器。

5.- (void)pause;

暂停音频播放器。

6.- (void)stop;

停止音频播放器,必须把currentTime设置为0,音频播放器才会恢复到起始状态。

7.- (void)updateMeters; 

更新仪表读数

8.- (float)peakPowerForChannel:(NSUInteger)channelNumber; 

  - (float)averagePowerForChannel:(NSUInteger)channelNumber; 

读取每个声道平均电平和峰值电平,代表每个声道的分贝数,范围在-100~0之间。


委托:

1.- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;

当音频播放完回调。

2.- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError*)error;

解码错误回调。

3.- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player;

处理中断回调。

出现例子:当用户在音频回放期间受到电话时,音频会消失,出现这种情况时AVAudioPlayer委托接受audioPlayerBeginInterruption:回调,音频会话暂时无效,并且暂停播放器。如果用户接听电话,那么应用程序中止,而应用程序委托接受一个applicationWillResignActive:回调。当通话结束,应用程序重新启动(利用applicationDidBecomeActive:回调)。如果用户拒绝接听电话那么将向委托发送audioPlayerBeginInterruption:回调。可以从此方法回复回放。

4.- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags NS_AVAILABLE_IOS(6_0);

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags NS_DEPRECATED_IOS(4_0, 6_0);

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)playerNS_DEPRECATED_IOS(2_2, 6_0);

处理中断结束回调。这里随着iOS系统更新,调用方法不同。


 类似资料: