AVAudioSession 学习笔记

一、 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

猜你喜欢

转载自blog.csdn.net/yin__ba/article/details/106079580