一、 AVAudioSession 概述
AVAudioSession 是用来管理多个App 对音频硬件设备(麦克风、扬声器)的资源的使用。
AVAudioSession可以做:
1.设置自己的App和其他的App音频是否同时存在, 或者中断其他app的音频。
2.手机静音模式下,自己App的音频是否播放出声音。
3.电话或者其他App中断自己App的音频,如何处理。
4.指定音频输入和输出的设备(比如输出声音的设备是用听筒,还是扬声器。)
5.是否支持录音和音频播放同时进行。
二、AVAudioSession Category
AVAudioSession 的接口比较简单, 在App启动时自动帮助激活AVAudioSession, 也可以手动激活AVAudioSession并做一些偏好设置, 代码如下:
/**
激活AVAudioSession
*/
-(void)activeAVAudioSession{
// AVAudioSession 是一个单例
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
// AVAudioSessionCategorySoloAmbient 是系统默认的category
[audioSession setCategory:AVAudioSessionCategorySoloAmbient error:nil];
// 激活AVAudioSession
[audioSession setActive:YES error:nil];
}
// 你可以先通过 这个属性来查看当前设备支持的Category 这样可以保证设备的兼容性
// NSArray *categorys = [[AVAudioSession sharedInstance] availableCategories];
// NSLog(@"categorys : %@",categorys);
AVAudioSessionCategory 是用来告诉 iOS,我们将会采用怎样的方式在系统中使用音频信号, 目前有7种,具体含义如下:**
//1
//此类别适合于“玩”风格的应用程序,例如用户在iPod音频上播放的虚拟钢琴。
//当您使用此类别时,来自其他应用程序的音频与音频混合。
//屏幕锁定和静音开关会打断(关闭)当前音频
AVF_EXPORT NSString *const AVAudioSessionCategoryAmbient;
//2
//当您使用此类别时,来自其他应用程序的音频会被打断(关闭)。
//屏幕锁定和静音开关会打断(关闭)当前音频
AVF_EXPORT NSString *const AVAudioSessionCategorySoloAmbient;
//3
// 当使用该类别时应用程序音频不会因为静音键开关或锁幕而打断。
// 这个类别的设计就是为了防止其他app的音频与当前的app的音频发生混合
AVF_EXPORT NSString *const AVAudioSessionCategoryPlayback;
//4
// 当开始录音时就其它的音频会停止播放音频,当锁屏时会继续录音
AVF_EXPORT NSString *const AVAudioSessionCategoryRecord;
//5
//此类别不会因为锁屏和静音键而中断。
//这个类别适用于同时播放和录音,也适用于录音和回放。
// 如果希望确保应用程序正在录制时不播放诸如Messages警报之类的声音,请使用AVAudioSessionCategoryRecord类别。
AVF_EXPORT NSString *const AVAudioSessionCategoryPlayAndRecord;
//6
// 这个类别会停止掉其它正在播放的音频和正在录制的音频
// 当程序退到后台时正在处理的音频会被停止掉,你需要申请额外的后台处理时间
AVF_EXPORT NSString *const AVAudioSessionCategoryAudioProcessing
//7
//支持音频播放和录制。允许多条音频流的同步输入和输出。
//(比如USB连接外部扬声器输出音频,蓝牙耳机同时播放另一路音频这种特殊需求)
AVF_EXPORT NSString *const AVAudioSessionCategoryMultiRoute