音频会话: AVAudioSession

2016-11-04  本文已影响306人  伯wen

音频会话在引用程序和操作系统之间扮演者中间人的角色, 他提供了一种简单实用的方法使OS得知应用程序应该如何与iOS音频环境进行交互

音频会话的分类

// 游戏、效率应用程序
AVF_EXPORT NSString *const AVAudioSessionCategoryAmbient;
// 游戏、效率应用程序(默认)
AVF_EXPORT NSString *const AVAudioSessionCategorySoloAmbient;
// 音频和视频播放器
AVF_EXPORT NSString *const AVAudioSessionCategoryPlayback;
// 录音机、音频捕捉
AVF_EXPORT NSString *const AVAudioSessionCategoryRecord;
// Voip、语音聊天
AVF_EXPORT NSString *const AVAudioSessionCategoryPlayAndRecord;
// 离线会话和处理
AVF_EXPORT NSString *const AVAudioSessionCategoryAudioProcessing;
// 使用外部硬件的高级A/V应用程序
AVF_EXPORT NSString *const AVAudioSessionCategoryMultiRoute

使用AVAudioPlayer播放音频

// 初始化方法
- (nullable instancetype)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError;
- (nullable instancetype)initWithData:(NSData *)data error:(NSError **)outError;
- (nullable instancetype)initWithContentsOfURL:(NSURL *)url fileTypeHint:(NSString * __nullable)utiString error:(NSError **)outError;
- (nullable instancetype)initWithData:(NSData *)data fileTypeHint:(NSString * __nullable)utiString error:(NSError **)outError;
// 预加载, 当播放器调用play时会自动调动本方法, 如果不调用play先调用prepareToPlay, 那么会减少点击play后到听到声音这段所需时间
- (BOOL)prepareToPlay;  
// 播放, 会自动调用prepareToPlay方法
- (BOOL)play;           
// 在哪个时间开始播放, time的值必须大于deviceCurrentTime的时间
- (BOOL)playAtTime:(NSTimeInterval)time;
// 暂停, 不撤销底层prepareToPlay配置
- (void)pause;      
// 停止, 撤销底层prepareToPlay配置
- (void)stop;           
// 只读属性, 是否正在播放
@property(readonly, getter=isPlaying) BOOL playing; 
// 只读属性
@property(readonly) NSUInteger numberOfChannels;
// 只读属性, 当前播放音乐的时间总长度
@property(readonly) NSTimeInterval duration; 
// 代理
@property(assign, nullable) id<AVAudioPlayerDelegate> delegate;
// 当前播放的音频的url
@property(readonly, nullable) NSURL *url;
// 当前播放的音频的data
@property(readonly, nullable) NSData *data;
// 立体声 取值 -1.0(极左) ~ 1.0(极右), 默认0.0(中间)
@property float pan;
// 声音大小
@property float volume;

- (void)setVolume:(float)volume fadeDuration:(NSTimeInterval)duration;
// 如果想要设置rate属性并生效, 必须设置enableRate = YES, 并且enableRate属性必须在prepareToPlay方法调用之前设置
@property BOOL enableRate; 
// 播放速度, 取值0.5(半速) ~ 2.0(二倍速度), 默认1.0(正常)
@property float rate; 
// 播放音频的当前时间, 可以改变这个值来改变当前音频播放的进度
@property NSTimeInterval currentTime;
// 音频相对于设备的当前时间, 可以通过[player playAtTime:[AVAudioPlayer deviceCurrentTime] + 0.01]设置在0.01秒后播放音频
@property(readonly) NSTimeInterval deviceCurrentTime;
// 播放次数, -1为无限循环
@property NSInteger numberOfLoops;

@property(readonly) NSDictionary<NSString *, id> *settings; 
// 音频格式
@property(readonly) AVAudioFormat *format NS_AVAILABLE(10_12, 10_0);

@property(getter=isMeteringEnabled) BOOL meteringEnabled; 

- (void)updateMeters; 
// 获取指定通道的峰值功率
- (float)peakPowerForChannel:(NSUInteger)channelNumber; 
// 获取指定通道的平均功率
- (float)averagePowerForChannel:(NSUInteger)channelNumber; 

@property(nonatomic, copy, nullable) NSArray<AVAudioSessionChannelDescription *> *channelAssignments; 

上一篇下一篇

猜你喜欢

热点阅读