【IOS】Audio Session Programming Guide 翻译 by kk(一)

简介

IOS 通过 <em>音频会话(Audio Session)</em> 和 <code>AVAudioSession</code> 中的 <strong>API</strong> 来实现对于不同 App 之间、同一 App 内及硬件层面的各种音频行为。

kk说:为了语句的通顺,Audio一词在本系列文章中可能会被翻译为音频或声音,特此说明。

图片来自官方文档

<code>AVAudioSession</code> 中的 API 可以处理类似这样的问题:

  • 手机在从铃声切换到静音模式时,App 中的音频是否需要静音?举例来说,旨在帮助用户在会议中做笔记的 App 应当在手机处于静音模式时静音,以免打扰他人;而具有发音功能的词典类 App,则应保证不被手机的模式影响,在用户需要的时候播放声音。
  • 当 App 开始播放声音的时候,系统已经在播放的其他声音是否需要关闭?用于让用户跟着背景音乐利用 App 中的功能来进行合奏的 App 中,背景音乐当然要继续;但如果 App 的功能是网络电台,那么就应该让其他的声音都停止。

IOS 设备中的音频使用场景十分复杂:用户随时可能插拔耳机、接打电话,系统的闹钟也可能在使用其他音频的过程中响起。开发者只需要编写少量调用音频会话 API 的代码,就可以配置音频会话的属性,从而优雅的对系统请求作出回应。


概览

使用 <code>AVAudioSession</code> 可以:

  • 选择合适的音频输入输出源(route)
  • 决定如何从其他 App 中集成音频
  • 处理来自其他 App 的“骚扰”
  • 为某一类型的 App 自动配置音频属性?(automatically configure audio for the type of app you are creating)

一次音频会话中包含了一系列的音频行为

音频会话是 App 和 IOS 之间的媒介,用来为 App 配置相关的音频属性和行为。在加载过程中,App 会自动创建一个音频会话的单例。

用类别(categories)来描述音频 role

<i>音频会话类别</i>是用来描述音频行为的主要机制。通过设置类别可以表明:App是否使用音频输入输出源,在播放音频时是否支持其他背景音乐的播放,以及一些其他的属性。开发者设计的音频行为应当符合用户的期望。
开发者可以通过七个类别和一些override and modifier switches,结合 App 的身份来定制音频 role。不同的类别分别支持后台播放(playback)、录音和后台录音等功能。当系统了解 App 的音频 role 后,会为其提供合适的硬件资源,令其免于受到设备上的其他音频事件的干扰。

kk说:想不出合适的词来表达 role 的含义,用“身份”或“角色”都显得有些模糊,因此不做翻译

音频类别的套路(Modes Customize Categories)

用户对于特定种类的 App 中(声音的)处理方式会有特定的期待。某一类别的行为会表现为一种套路。举例来说,系统可能会为使用默认模式和录像模式的 App 选择不同的麦克风作为音频输入,或者为用于录像场景的 App 启用麦克风信号处理。

kk说:这一段翻译不好,原文如下:
Users expect certain behaviors from certain categories of apps. Modes specialize the behavior of a given category. For example, when an app uses the Video Recording mode, the system may choose a different built-in microphone than it would if it was using the default mode. The system may also engage microphone signal processing that is tuned for video recording use cases.

基于通知(Notifications)的中断处理机制(interruption handling)

<i>音频中断(audio interruption)</i>指的是音频会话被关闭的行为,会导致 App 中的音频立即停止。当一个未被系统归类为可以和自己混合的其他音频会话启用时,就会中断当前的 App。当中断发生时,系统会向 App 发出一个“你被中断”信号,App可以在接到这个信号的时候完成保存状态、更新UI等操作。
开发者可以通过向 <code>AVAudioSession </code> 中的 <code>AVAudioSessionInterruptionNotification </code> 注册来处理中断。开发者应该重写 <code>beginInterruption</code> 和 <code>endInterruption</code> 方法,来减小对用户造成的中断,并提供最优雅的中断恢复方案。

基于通知的音频源切换处理

用户在插拔外接音频设备或插拔耳机的时候,会期待系统能够按自己的想法进行输入输出源的切换。IOS Human Interface Guidelines 中关于声音的章节描述了这些用户期待,并提供了一些关于如何满足这个期待的指导。通过向 <code>AVAudioSessionRouteChangeNotification </code> 中注册来处理音频源的切换。

对类别的特性进行调整

开发者可以用不同的方式来对音频会话类别进行调整,来改变类别的属性,包括:

  • 允许(缺省条件下不能与其他音频混合的)类别与其他(来自QQ音乐等 App 的)音频混合。
  • 将音频的输出源从输入源改为扩音器。
  • 允许蓝牙音频输入源。
  • 在播放 App 的音频时,要求降低其他的 App 音频的音量。
  • 在运行时为 App 选择最优的硬件设备。在 App 运行时,开发者的代码可以根据当前的设备环境及用户插拔设备引发的变化,进行动态的调整和适应。

前置知识

在学习这些内容前,开发者需要对 Cocoa Touch 开发有一定的了解(App Programming Guide for IOS 中关于Core Audio和Core Audio Overview中的章节)。同时,由于音频会话通常会基于终端用户实际的使用场景,因此也需要对IOS设备,和 IOS Human Interface Guidelines有所了解。

其他

参见以下资料:

kk说:以上内容翻译自苹果官方文档,仅供学习,请勿用于商业用途,侵删。转载注明出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容