本文转自: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. Windows下IPython安装

    1:安装Python, 下载后安装即可:https://www.python.org/downloads/windows/,(选择Python2或Python3) 添加Path环境变量 2:安装ez_ ...

  2. Oracle 查询表信息(字段+备注) .

    var t=   CardService.GetInstance().test("900000000233");          foreach (DataRow row in ...

  3. 【BZOJ5071】[Lydsy十月月赛]小A的数字 发现性质

    [BZOJ5071][Lydsy十月月赛]小A的数字 题解:一般遇到这种奇奇怪怪的操作,常用的套路是将原序列差分一下,或者求个前缀和什么的.本题就是直接对原序列求前缀和,然后发现一次操作相当于交换两个 ...

  4. iOS 引导页面启动一次

    #import "AppDelegate.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)a ...

  5. Go语言 基本类型

    在内存中的形式 首先看一下在go中,一些基础类型在内存中是以什么形态存在的,如下图所示: 变量j的类型是int32, 而变量i的类型是int,两者不是同一个类型,所以赋值操作i=j是一种类型错误can ...

  6. 读取properties文件------servletcontext及dao层读取

    用servletcontext读取properties文件-------1) 重点在于:InputStream in=this.getServletContext().getResourceAsStr ...

  7. Codeforces Round #118 (Div. 1) A. Plant

    A. Plant 题目链接:http://codeforces.com/problemset/problem/185/A 题意:一个植物会长,一开始是一个正三角形,每过一年,一个向上的正三角形会变成三 ...

  8. 解决Bat脚本中包含中文,运行乱码

    bat文件右键用“编辑” 打开, 另存为时,UTF-8保存为ANSI 格式.即可解决运行时乱码问题.

  9. 转!!mybatis xml 传值 if test判断

    当mapper方法传参数 为 String时,且xml中药进行参数比较 比如 是不是等于1 或者等于2 方式1. 方式2. 转自:https://blog.csdn.net/chenaini119/a ...

  10. CDH部署日志

    CDH部署时出现如图所示的错误 可去服务器查看:/opt/cm-5.5.0/run/cloudera-scm-agent/process/ccdeploy_hbase-conf_etchbasecon ...