AVAudioSession
在上一遍学习中提到了AudioSession和AVAudioSession两个类,在苹果文档中可以看到,在iOS 7以后苹果建议使用的是AVAudioSession,所以AudioSession就等以后有时间再进行学习。
AVAudioSession是AVFoundation框架中的类,用来设置app的音频上下文,主要的功能有:
- 激活或者取消app的audio session
- 设置系统使用音频的方式
- 配置如采样率,I/O缓存时长和信道数等音频设置
- 处理Route Change(如拔出耳机后音频停止播放)
- 应对其他事件
系统只允许一个session来控制audio routin。如果当前有多个sessions在运行的话,系统会根据当前的重要性来选择一个最重要的session并且判断该session是否允许混合。
获取AVAudioSession单例
[AVAudioSession shareInstance];
录音时请求用户允许
- (void)requestRecordPermission:(PermissionBlock)response // 参数response表示用户允许或拒绝时的回调函数
录音需要获取用户的允许,系统会自动跳出提示的。
typedef void (^PermissionBlock)(BOOL granted)
PermissionBlock,返回YES允许录音,NO则不允许
- (AVAudioSessionRecordPermission)recordPermission
返回当前录音的许可状态
有三个返回参数:AVAudioSessionPermissionGranted/AVAudioSessionPermissionDenied/AVAudioSessionPermissionUndetermined
管理Audio Session
@property(readonly) NSString *category
当前Audio session的类别,默认是AVAudioSessionCategorySoloAmbinet
NSString *const AVAudioSessionCategoryAmbient ; // 该播放不是主要的。使用此类时,音频会与其他app的进行混合。锁屏或者静音模式下无法播放声音
NSString *const AVAudioSessionCategorySoloAmbient ; // 锁屏或者静音模式下无法播放声音。音频不会与其他app混合
NSString *const AVAudioSessionCategoryPlayback ; //
NSString *const AVAudioSessionCategoryRecord ;
NSString *const AVAudioSessionCategoryPlayAndRecord ;
NSString *const AVAudioSessionCategoryAudioProcessing ;
NSString *const AVAudioSessionCategoryMultiRoute;
Audio Session的Category
@property(readonly) AVAudioSessionCategoryOptions categoryOptions
当前Category相关的选项
enum {
AVAudioSessionCategoryOptionMixWithOthers = 1, // 混合其他已激活的Session的音频。使用这个选项激活Session的话,会打断其他app正在播放的声音。如果不使用的话,则会打断其他不允许混合的session
AVAudioSessionCategoryOptionDuckOthers = 2, // 在本Session播放时