本文转自: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. IOS 预览word文档的集中方式

    在iPhone中可以很方便的预览文档文件,如:pdf.word等等,这篇文章将以PDF为例.介绍三种预览PDF的方式,又分别从本地pdf文档和网络上的pdf文档进行对比. 预览本地PDF文档: 1.使 ...

  2. 如何使用iOS 开发证书 和 Profile 文件

    如果你想在 iOS 设备(iPhone/iPad/iTouch)上调试, 需要有 iOS 开发证书和 Profile 文件. 在你拿到这两个文件之后,该如何使用呢? 证书使用说明: 1.  iOS 开 ...

  3. ie8兼容:对象不支持“trim”属性或方法

    trim() 方法是原生js中去空格的方法,高版本浏览器已经默认支持trim() 方法,但ie8以下不支持,会报错:对象不支持“trim”属性或方法 解决这个的兼容,只需要扩展String原型属性 在 ...

  4. requests和bs4

    requests模块,仿造浏览器发送Http请求bs4主要对html或xml格式字符串解析成对象,使用find/find_all查找 text/attrs 爬取汽车之家 爬取汽车之家的资讯信息,它没有 ...

  5. Spring Boot 编写入门程序

    1. SpringBoot 入门 快速创建独立运行的Spring项目以及与主流框架集成; 使用嵌入式的Servlet容器,应用无需打成WAR包; starters自动依赖与版本控制; 大量的自动配置, ...

  6. 剑指Offer——删除链表中重复的结点

    题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理 ...

  7. Storm简介及使用

    一.Storm概述 网址:http://storm.apache.org/ Apache Storm是一个免费的开源分布式实时计算系统.Storm可以轻松可靠地处理无限数据流,实现Hadoop对批处理 ...

  8. RESTful API 设计最佳实践【转】

    背景 目前互联网上充斥着大量的关于RESTful API(为了方便,后面API和RESTful API 一个意思)如何设计的文章,然而却没有一个“万能”的设计标准:如何鉴权?API格式如何?你的API ...

  9. Python高级特性(2):Closures、Decorators和functools(转)

    原文:Python高级特性(2):Closures.Decorators和functools 装饰器(Decorators) 装饰器是这样一种设计模式:如果一个类希望添加其他类的一些功能,而不希望通过 ...

  10. 阿里云部署 Flask + uWSGI + Nginx

    一.引言 今天入手了一台阿里云服务器,是centeros 7.5版本.本文解决的是 Flask 的部署问题.假设你的Flask的应用已经完成,现在只是部署的问题,本文以部署我的二次开发微信订阅号的项目 ...