本文转自:AVAudioSession(1):iOS Audio Session 概览 | www.samirchen.com

本文内容主要来源于 Audio Session Programming Guide。

Audio Session 概览

在 iOS 系统中,开发者可以通过 AVAudioSession 相关的 API 来处理 App 内部、App 之间以及设备级别的音频行为。比如:你的 App 的声音是否应该受到手机的静音键的控制;当你的 App 的音频开始播放时,其他音乐播放器的声音是否应停止;用户拔掉耳麦、电话来了、带声音播放的系统通知响起等情况下,你的 App 的声音应该怎么处理等等。

总的来说,使用 AVAudioSession 你可以做到:

  • 选择合适的音频输入或输出路径。
  • 决定你的 App 的音频如何与其他 App 的音频共存。
  • 处理来自其他 App 的中断。
  • 根据你的 App 的类别自动做音频相关配置。

在 AVAudioSession 中如何支持你做到上述这些呢?

  • 用 Category 来描述音频使用者的角色。最主要的用来表述音频相关行为的机制即 Audio Session Category。Category 反映了诸如「你的 App 使不使用音频输入或输出」、「其他音乐能否和你的 Audio 共存播放」等等角色能力。不同的 Category 可以支持播放、录制、边播放边录制等不同的行为模式,系统通过 Audio Session Category 知道你的角色,从而赋予你与角色匹配的硬件访问权限。同时,系统保障还其他 App 的音频行为与你的角色相匹配。比如,你希望 Music 应用会被你的音频播放打断。

  • 用 Mode 来定制 Category 的具体行为。比如,你的 App 使用 Video Recording Mode 模式时,系统可能会选择一个与 Default Mode 模式不同的内置麦克风来采集音频。

  • 用 Notification 来支持中断消息通知。产生中断通常是因为另一个和你的 App 存在竞争性音频行为的 App 此时被激活,而这个 App 设置的 Category 不支持 mix 你的音频。这时你的 App 的音频可能就直接被停掉了。如果要做到合乎逻辑的处理,这时候则需要你监听中断通知 AVAudioSessionInterruptionNotification:当你的 Audio Session 被中断而失效时,系统会发送给你一个通知信息,这时候你可以做一些状态信息存储、更新用户界面之类的动作。

  • 用 Notification 来支持 Audio Route 切换消息通知。当手机被锁屏或解锁、插上或拔出了耳麦时,音频的输入或输出路径是会发生改变的,这时候你需要监听 AVAudioSessionRouteChangeNotification 通知,来做相应的处理以符合用户的期望。

  • 用 Category 来支持更高级的功能。你可以通过各种方式调优 Category,从而做到这些:
    • 允许其他 App 的音频与你的音频 mix 在一起播放。
    • 将音频输出路径从听筒改到扬声器。
    • 允许通过蓝牙做音频输入。
    • 当你的音频播放时,指定其他的音频降低音量。
    • 在运行状态下根据硬件行为和用户行为优化你的 App 音频行为。比如,用户插上耳机时将音量降低以免吵到用户。

AVAudioSession(1):iOS Audio Session 概览的更多相关文章

  1. IOS Audio session

    iOS实现长时间后台的两种方法:Audio session和VOIP socket 十二月 04 我们知道 iOS 开启后台任务后可以获得最多 600 秒的执行时间,而一些需要在后台下载或者与服务器保 ...

  2. AVAudioSession(2):定义一个 Audio Session

    本文转自:AVAudioSession(2):定义一个 Audio Session | www.samirchen.com 本文内容主要来源于 Defining an Audio Session. A ...

  3. AVAudioSession(3):定制 Audio Session 的 Category

    本文转自:AVAudioSession(3):定制 Audio Session 的 Category | www.samirchen.com 本文内容主要来源于 Working with Catego ...

  4. audio session config

    #pragma mark - #pragma mark - audio session config - (void)setAudioSessionConfig { NSError *error; A ...

  5. iOS开发系列--IOS程序开发概览

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...

  6. Audio Session Interruption

    近期处理了一个挂断电话后,莫名手机开始播放音乐的Bug. 所以顺便在这总结一下,对于IOS的AudioSession中断的几种处理情况. 一.通过C语言的init方法配置interruptionl回调 ...

  7. ios audio不能自动播放

    今天做了一个简单的落地页项目,就是类似于手机微信上经常看到的滑动效果.因为公司要求需要自己开发,所以我就用swiper+swiper.animate开发,开发速度很快,只不过最后音乐哪里出现了一点小b ...

  8. ios audio不能够正常播放

    ios中audio不能直接通过audio.play()播放,需要用户在click事件或者touch事件中执行audio.play()才能播放. ajax回调中audio.play()音乐不能正常播放. ...

  9. iOS audio不支持循环播放

    解决办法:监听播放完成事件(注意点,audio标签不能设置循环播放,去除标签 loop="loop"或者 loop="false",不然不走播放完成事件) $( ...

随机推荐

  1. open() 函数以 w+ 模式打开文件

    这种模式打开文件时,会先清空文件,然后才执行读写操作,当我们要执行读操作时,需要通过 seek() 方法将读取指针移到前面,才能读取内容 [root@localhost ~]$ cat 1.txt # ...

  2. UE4与Visual Studio版本对应关系

    首先,要注意,Visual Studio 2015(VS2015)默认安装时并不包含 C++ 的工具.在安装 VS2015 时,需选择 自定义 安装并勾选 C++ 组件,这对之后的工作时必须的.如果已 ...

  3. ios 将图片做成圆形

    UIImageView * imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"oiuyfdsa.png ...

  4. Java使用Apache POI进行Excel导入和导出

    Manve依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> ...

  5. 小程序用scroll-view的scroll-to-view属性实现锚链接跳转

    小程序没有锚链接,通过scroll-view可以实现类似锚链接的功能,点击锚链接,滚动条滚动到相应的位置 wxml <view class="wrap"> <!- ...

  6. 关于如何将Eclipse中@author进行修改的解决方法

    问题:Eclipse和 MyEclipse上的文档注释"/**"里面的"@author Administrator"是自动生成的姓名,有时我们需要将自己的代码进 ...

  7. Django--20170905--笔记

    一.django的安装 1.先安装python 2.再安装django:pip install django 3.使用虚拟环境:pip install virtualenv 二.项目的创建 1.可以先 ...

  8. poj3666 Making the grade【线性dp】

    Making the Grade Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:10187   Accepted: 4724 ...

  9. cpuspeed和irqbalance服务器的两大性能杀手

    启用 irqbalance 服务,既可以提升性能,又可以降低能耗. irqbalance 用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于 Performance ...

  10. lsof,fuser,xargs,print0,cut,paste,cat,tac,rev,exec,{},双引号,单引号,‘(字符串中执行命令)

    cut用来从文本文件或标准输出中抽取数据列或者域,然后再用paste可以将这些数据粘贴起来形成相关文件. 粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同.paste将按行将不同文件行 ...