ios音频焦点

news2024/10/7 20:35:44

音频焦点

两个或者两个以上的app可以同时向同一输出流播放音频。系统会将所有音频流混合在一起,但这样会给用户带来很大的困扰。为了避免所有音乐app同时播放,ios引入了“音频焦点”的概念。在ios中,音频焦点是操作系统为了管理音频硬件而引入的概念,是指app对音频硬件在时间维度上的使用控制(不是使用权限,使用权限需要app单独申请)。app可以独占使用,也可以共享使用音频焦点,即独占或者共享音频硬件。
独占音频焦点,指的是只能有一个app使用音频硬件,而共享音频焦点,指的是多个app可以同时使用音频硬件,共享音频焦点通常会导致多个app播放的音频被混音(即手机会同时发出多个音频的声音)。
当你的app需要输出音频时,你的app就需要得到音频焦点,获得音频焦点之后,就可以播放声音了。不过,在app获得音频焦点之后,也不一定能一直持有音频焦点,因为其它app也可能抢占音频焦点。如果你的app的音频焦点被其它app抢占了,那么你的app应该暂停播放视频或者音频。

我们先来看一个录屏(如下所示,注意录屏里面所播放的声音),当酷狗音乐在播放的时候,我们启动一个demo,然后点击如下图的黑色框的按钮(按钮文案是"AVAudioSessionCategorySoloAmbient(系统默认)“),会发现酷狗音乐不再播放了,此时我们再点击如下图的红色框中的按钮(按钮文案是"释放音频焦点,以便回复酷狗音乐的播放”),然后酷狗音乐就继续播放音乐了。

音频焦点demo

上面录屏的demo的实现代码如下面第1张图所示,黑色框的代码表示demo app要抢占ios系统的音频焦点。抢占音频焦点只需要分别调用AVAudioSession类的两个方法:

  • setCategory:error:方法
  • setActive:error:方法

setCategory:error:方法的作用如下面第2张图所示,该方法用于告诉系统说本app要怎么使用音频。该方法的第1个参数的取值一共有7个,其中一个是AVAudioSessionCategorySoloAmbient,该值表示打断其他不支持混音的APP的音频播放
而setActive:error:方法表示申请获取或者释放ios系统的音频焦点,该方法的返回值表示是否已经成功获取或者释放音频焦点。该方法的第1个参数为YES表示app要申请ios系统的音频焦点,而为NO表示app要释放ios系统的音频焦点。如下图所示,红色框的代码表示释放系统的音频焦点,AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation表示app释放音频焦点的时候,会给其它app发送“音频焦点已经释放了”的通知,而酷狗音乐app会接收该通知,并在收到该通知后恢复音乐的播放。
在这里插入图片描述
在这里插入图片描述

AVAudioSession

AVAudioSession是一个类,如下图所示,每个运行中的app都有一个AVAudioSession类的单例,系统通过协调每个运行中的app的AVAudioSession的单例来管理音频的行为。
在这里插入图片描述
在ios中,app的AVAudioSession实例对象的默认功能配置(app冷起的时候就默认会有的能力)有:

  • 支持音频播放,但不支持录音;
  • 把手机调到静音模式会把app“静音”。比如当app正在播放音乐或者视频时,把手机调到静音模式,此时手机就不会发出音乐或者视频的声音;
  • 锁屏也会把手机调到静音模式会把app“静音”;
  • 当app播放音频或者视频时,后台正在播放的音频会被“静音”,因为后台正在播放音频的那个app的音频焦点被“抢”了。

AVAudioSession实例对象提供的默认功能往往不足以满足视频类的app的需求,此时你可以通过配置AVAudioSession的category、mode和option来操作音频以便满足需求:

  • 调用AVAudioSession的setActive:error:方法来申请获取或者释放ios系统的音频焦点;
  • 通过调用AVAudioSession的setCategory:mode:options:error:方法来改变音频的行为,该方法需要和setActive:error:方法结合使用才能真正的改变音频的行为
  • 监听音频相关的通知,比如监听音频播放过程中被打断、耳机插入或者拔出的通知
  • 使用音频硬件的一些高级功能,比如设置采样率、I/O缓存时长

AVAudioSession支持的category配置一共有7种类型,如下两张图所示。
在这里插入图片描述
在这里插入图片描述
以上7种category已经能满足大部分的场景了,但如果还需要满足要求更加细致的场景,那就需要在category的基础上结合option和mode来使用。每种category都有自己的option和mode类型,所以option和mode是对category的补充(细化对category的配置)。比如,如果你的app使用了Playback类型的category,该类型有两种option可以配置(即是否支持混音,对应上图的第4行第3列的位置),其中一种option能让你的音频和后台播放的音频(比如后台上正在播放酷狗音乐)同时播放(具体的option是AVAudioSessionCategoryOptionMixWithOthers),而另一种option能让后台播放的音频停止“出声音”(默认就是这种,即默认不支持混音)。
注意:如果你想要实现音频的后台播功能(具体是手机进入锁屏状态或者把app退到后台),就不仅需要把AudioSession的category设置为AVAudioSessionCategoryMultiRoute或者AVAudioSessionCategoryPlayAndRecord或者AVAudioSessionCategoryPlayback,还需要在info.list文件里面添加“Required background modes”这个选项,具体如下图的红框所示。否则的话当手机进入锁屏状态或者把app退到后台时,音频就会被“暂停”,此时你就听不到音频的声音了。
在这里插入图片描述

音频相关的通知

音频常见的通知如下:

  • AVAudioSessionInterruptionNotification:当你app的音频被打断时,系统就会发出该通知。比如,当你app在播放非静音状态的视频时,此时突然有电话打进来,视频的声音会消失,而电话的铃声会出现,并且系统会发送该通知。
  • AVAudioSessionRouteChangeNotification:当手机的音频相关的输入输出设备发生变化时,系统就会发出该通知。比如耳机的插入和拔出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/554079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uvc驱动ioctl分析上

uvc驱动ioctl分析上 文章目录 uvc驱动ioctl分析上uvc_ioctl_querycap查询设备的能力uvc_ioctl_enum_fmt处理V4L2设备的枚举格式(enum_fmt)的ioctl操作uvc_ioctl_enum_fmt_vid_out枚举视频输出格式uvc_ioctl_enum_fmt_vid_cap枚举视频捕获格式 uvc_v4l2_g…

低代码到底有多爽?解放双手,推荐一款C端的低代码产品

前言引入 低代码(LowCode)就是一种可视化搭建系统,从字面意思来讲,一是可视化;二是少写代码。由此可见,低代码的出现是为了减轻和降低开发者的负担,让开发者减少重复劳动,避免资源和…

基于Angular+Nginx+Java+Spring开发的医院信息系统(HIS)源码

基于云计算技术的SaaS服务的医院信息系统源码 云HIS系统有效实现医疗数据共享与交换,解决数据重复采集及信息孤岛等问题。重构管理服务流程,重建统一的信息架构体系,重造病人服务环境,向不同类型的医疗机构提供SaaS化HIS服务解决…

如何在不损失质量的情况下压缩优化图像大小

您是否知道在将图像上传到 WordPress 之前对其进行优化会对您的网站速度产生巨大影响? 在开始时,许多初学者只是简单地上传图片,而没有针对网络对其进行优化。这些大图像文件会使您的网站变慢。 您可以通过将图像优化最佳实践作为常规博客程…

如何对高压功率放大器进行初步故障排查?

在使用测试仪器仪表进行实验检测的过程中,可能多少都遇到过这种情况:仪器开不了机无法点亮、设备幅值与理论值有较大差距、输出电压波形失真、设备异常过载、设备异响异味等等.... 作为测试仪器仪表的一种,功率放大器也可能会出现这种情况&a…

基于Java+SpringMvc+vue+element实现高效学生社团平台管理

基于JavaSpringMvcvueelement实现高效学生社团平台管理 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…

基于Java+Springmvc+vue+element实现高校心理健康系统详细设计和实现

基于JavaSpringmvcvueelement实现高校心理健康系统详细设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源…

将java项目导出jar包,转成在windows上的可执行文件(没有java运行环境的电脑也可以)

前言 提示:直接将java运行环境一起打包没有java运行环境的电脑也可以: 近期在做一个java串口项目,需要将完整的项目导出.exe文件在没有java环境的电脑上运行,下面是详细的操作步骤以及遇到各种问题的解决办法.。 说明&#xff1…

HTTPS加密的简单介绍

前言 假设客户端给服务器发送HTTP请求,此时的数据都是明文的,如果黑客在这个过程中截取到了数据,进行篡改是非常容易的,这样就会造成严重后果. HTTPS和HTTP一样,都是应用层协议.只不过HTTPS在HTTP的基础上又加了一个加密层,保证传输数据的安全性. 下面我们就来探讨一下HTTPS是…

档案八防设备之新型产品多合一恒湿净化一体机

档案馆档案库房用加湿除湿除尘除酸净化一体机【囊括加湿机、除湿机、消毒机、净化机功能】 集成:加湿、除湿、消毒、净化四合一的智能一体机 一、简介 北京盛世宏博科技有限公司档案库房系列加湿除湿除尘除酸净化一体机是档案库房恒湿、和净化式,HB-670…

Oracle数据库中了locked1勒索病毒,用友nchome配置文件损坏该如何解除

随着互联网技术的不断发展,网络安全问题也越来越受到人们的关注。其中,勒索病毒是一种比较常见的网络安全威胁。最近很多集团企业在使用Oracle数据库的过程中,遭遇到了locked1勒索病毒的攻击,导致企业的用友nchome配置文件损坏&am…

Word控件Aspose.Words教程:在 PowerPoint 中使用变形过渡

Aspose.Words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理,并…

现代 CMake 模块化项目管理指南

文章目录 一、基于CMake,对文件/目录组织规范1.推荐的目录组织方式2.划分子项目3.根项目的 CMakeLists.txt 配置4.子项目的 CMakeLists.txt 配置5.子项目的头文件6.子项目的源文件补充:GLOB 和 GLOB_RECRUSE 的区别7.头文件和源文件的一一对应关系8.只有…

揭秘神秘的JS混淆加密技术

在编程的世界里,沉香舞动着一种强大的力量,就像母亲为了救子不惜一切的决心。而在JavaScript的领域中,我们也有一种神秘的技术,它能够将代码变得晦涩难懂,宛如沉香救母一般,守护着程序的安全。今天&#xf…

Anaconda 安装并使用 PyTorch(PyCharm)

文章目录 Anaconda 安装并使用 PyTorch(PyCharm)1. Anaconda 安装1.1 下载安装包1.2 安装1.3 测试1.4 更改镜像源 2. PyTorch 安装2.1 创建虚拟环境2.3 激活/关闭环境2.4 CUDA2.5 conda 安装 PyTorch 3. PyCharm 使用3.1 安装 PyCharm3.2 登录3.3 使用虚…

Lookup-包含查找

lookup函数有个特性: LOOKUP(lookup_value, lookup_vector, [result_vector]) 如果 LOOKUP 函数找不到 lookup_value,则该函数会与 lookup_vector 中小于或等于 lookup_value 的最大值进行匹配。 这个特性,我这里简称:包含查找…

高丰度铈磁体

随着烧结钕铁硼应用领域的不断拓展和产量的快速增长,相应的稀土资源也被大量开采。稀土矿中各种稀土元素是共生的,但在钕铁硼的制备过程中,利用的主要是在轻稀土中质量分数为25%的镨Pr和钕Nd元素,这样对轻稀土中占比为质量分数49%…

档案馆档案管理的八防指的是哪些?

档案库房档案安全保护的“八防”:即防高温、防潮湿、防盗、防火、防霉菌、防光、防尘、防虫等要求。 “八防”实现了档案库房安全保护由被动人工管理向现代化、智能化、科学化、人性化管理的历史性跨越。该系统采用模块化设计,系统功能强大,…

夏天已至,放手一搏—V6.0.6版本发布

夏日莺啼,新品绽放。轻盈而来,清凉沁心。 香气四溢,舒缓暑气。一份清爽,满足您的期待。 预订新品,共享仲夏芬芳。 本次更新:经过一个月的细节打磨, V6.0.6版本发布,APP构建能力强…

Knowledge-Based Systems latex论文模板

Knowledge-Based Systems 杂志官网https://www.sciencedirect.com/journal/knowledge-based-systems Knowledge-Based Systems 期刊投稿网址 Editorial Manager LetPub 投稿经验和评论: KNOWLEDGE-BASED SYSTEMS 影响因子8.139分,是几区,20…