AVAudioSession初探
根据文档,AudioSession规定了app和系统音频行为交互的规范,一个app只有一个AudioSession的单例。
app通过设置自己AudioSession的单例的属性来告诉系统自身想达到的效果,系统会根据app的申请,并综合考虑其他app的AudioSession的属性来决定最后硬件的音频输入和输出。
AVAudioSession的category
AVAudioSession可以通过设置category的类型类配置AVAudioSession的一些属性,如
- 在静音开关打开或锁屏的情况下是否可以继续播放
- 是否可以和其他APP的声音混合播放
- 是否允许输入输出
下表是文档中给出的可以设置的category及其对应的表现。

在程序中切换category
在程序的运行过程中,有时需要切换AVAudiosession的Category。通过调用- (BOOL)setCategory:(NSString *)category error:(NSError **)outError;这个方法可以达到效果。
然而,不是所有的category的切换都是即时发生的。由于涉及到硬件,有些category的切换需要时间,有些category的切换不需要时间或需要的时间很短。
下面的结论是在AVAudioSessionCategoryPlayAndRecord、AVAudioSessionCategoryPlayback、AVAudioSessionCategorySoloAmbient之间的切换所需时间。
| from | to | 时间(s) |
|---|---|---|
| PlayAndRecord | Playback | 0.3-0.4 |
| PlayAndRecord | SoloAmbient | 0.3-0.4 |
| Playback | SoloAmbient | 0.01 |
| Playback | PlayAndRecord | 0.3-0.4 |
| SoloAmbient | PlayAndRecord | 0.3-0.4 |
| SoloAmbient | Playback | 0.01 |
可见,涉及到input和output改变的category切换的花费的时间较多。可以猜想改变input和output的行为设计到硬件,切换需要时间。
测试环境
iOS10,iPhone6, 真机,且测试时有音频在播放
代码如下
- (void)changeCategory:(NSString*)category
{
NSError *error = nil;
NSString *currentCategory = [[AVAudioSession sharedInstance] category];
NSLog(@"before set category, category is %@",currentCategory);
[[AVAudioSession sharedInstance] setCategory:category error:&error];
NSLog(@"after set category");
currentCategory = [[AVAudioSession sharedInstance] category];
NSLog(@"category is %@",currentCategory);
if (error != nil)
{
NSLog(@"category error %@",error);
}
}
AVAudioSession初探的更多相关文章
- 初探领域驱动设计(2)Repository在DDD中的应用
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
- 从273二手车的M站点初探js模块化编程
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
- JavaScript学习(一) —— 环境搭建与JavaScript初探
1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...
- .NET文件并发与RabbitMQ(初探RabbitMQ)
本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...
- React Native初探
前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...
- 【手把手教你全文检索】Apache Lucene初探
PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也 ...
- Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...
- NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...
随机推荐
- SQLServer学习笔记系列2
一.写在前面的话 继上一次SQLServer学习笔记系列1http://www.cnblogs.com/liupeng61624/p/4354983.html以后,继续学习Sqlserver,一步一步 ...
- javaccript学习3
JavaScript - 捕获错误 当我们在网上冲浪时,总会看到带有 runtime 错误的 Javascript 警告框,同时会询问我们“是否进行 debug?”.像这样的错误信息或许对开发人员有用 ...
- 基于HT for Web 快速搭建3D机房设备面板
以真实设备为模型,搭建出设备面板,并实时获取设备运行参数,显示在设备面板上,这相比于纯数值的设备监控系统显得更加生动直观.今天我们就在HT for Web的3D技术上完成设备面板的搭建. 我们今天模拟 ...
- C# 通过反射来动态创建泛型类型
C# 通过反射来动态创建泛型类型与创建普通类型的区别在于:泛型参数的处理 创建泛型类型存在三种情况: 第一种:知道泛型类型,但需要动态指定泛型参数: 第二种:知道泛型参数,但需要动态创建指定参数的泛型 ...
- JS魔法堂: Native Promise Only源码剖析
一, 前言 深入学习Promise的朋友应该都看过<深入理解Promise五部曲>这一系列的文章, 以解除回调地狱之外的观点来剖析Promise更多的内涵,确实十分精彩. Part 1: ...
- 使用Spark分析拉勾网招聘信息(四): 几个常用的脚本与图片分析结果
概述 前一篇文章,已经介绍了BMR的基础用法,再结合Spark和Scala的文档,我想应该是可以开始你的数据分析之路的.这一篇文章,着重进行一些简单的思路上的引导和分析.如果你分析招聘数据时,卡在了某 ...
- Oracle创建用户、表空间并设置权限
代码: //dba账户登录 sqlplus 请输入用户名:dpp_data as sysdba 请输入口令:dpp_data //创建账号 create user techrpt_data ident ...
- Web API应用架构设计分析(1)
Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端(包括浏览器,手机和平板电脑等移动设备)的框架, ASP.NET Web API 是一种用于在 .NET Framewor ...
- TCP - 流量控制 and 拥塞控制
1. 流量控制 - Flow Control 序言:数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制以免数据丢失.利用滑动窗口机制可以很方便的在TCP连接上实现对发 ...
- 使用attrs.xml自定义属性
控件有很多属性,如android:id.android:layout_width.android:layout_height等,但是这些属性都是系统自带的属性.使用attrs.xml文件,可以自己定义 ...