iOS 音频指南:如何称职的管理自己的音频系统

谈到这个点的时候,我首先想到的是苹果公司是如何从濒临破产到重新起步直至现在这个状况的。进入我脑海的是这么一些名字:iMAC,iPod,iPod,以及 iPod

当然,说苹果靠做 MP3 播放器打了一个翻身仗未免太过于 TROLL,事实上更关键的原因在于乔布斯很早就预见了网络销售的可行性,促使他打造了 AppStore 这个平台。不过这些细节大可不必在意,关键点在于:苹果确实做的一手好 MP3. 所以顺理成章的,iPod 优越的音频特性,在很大程度上转接到了 iPhone 身上。理论上我们可以认真的说:iPhone 是当前手机平台上音频出色表现最出色的一款,没有之一。

那么,iPhone 的音频系统究竟出色在哪里?从硬件上来说,再好的手机你也不可能驱动一个功率30瓦的音响吧(阻抗原因),没有30瓦的音响怎么听音乐?咯咯咯咯咯。而就算是耳机,大家也清楚的明白,苹果的耳机质量那必然不是市面上最好的。毕竟前有漫步者后有索尼。从硬件的角度上讲,iPhone 没有可能,也没有这个资格领先其他手机一个世纪。我们说 iPhone 的音频系统很出色的真正原因是因为它的软件系统。我们今天要谈到的就是其中一个。

首先,想像一个场景:用户起床,打开自己的 iPhone 音乐,泡上咖啡,然后打开一个有声读物。这个时候他设定的起床铃响了,他把它关掉。于此同时,来了一个电话。以上这个场景的过程可能不过十秒钟。在这十秒钟内,用户期待的是一个光滑的音频衔接。比如在有声读物播放的时候,背景音乐不要停。闹铃按掉或者电话接完之后,所有的声音都要回复正常。对于程序来说(就比如这个有声读物程序),这是一种吹毛求疵的体验,然而乔布斯(作为一个嬉皮士)正是给苹果设计了这样一个东西:我们要做的,就是满足用户这些需求。

iPhone 的音频系统都统一的处于操作系统的管理之下。在程序中我们能够调用的接口是一个单例 AVAudioSession 或者一系列 AudioSession 的 C 函数。以 AVAudioSession 为例,通过这个单例我们可以配置自己的音频播放能力,调控其余音频的混流,以及应对音频中断。程序可以通过几行代码向操作系统发送请求,然后让操作系统来做出选择,进行最终的调控。大体上,我们的程序需要应对的事情,就是以下几种。如果能设置好的话,那么这个程序在音频系统上来说,就是一个负责任的程序。

1. 设置你的音频能力

- (BOOL)setCategory:(NSString *)category error:(NSError **)outError;

根据设置的 category 的不同,你的程序会有不同的音频优先级以及音频能力。默认的情况下,你的程序只有播放能力没有输入能力,并且你的程序不会允许其他程序播放声音,同时,静音开关会把你的程序静音掉。而通过 category 的设置,你的程序可以对这三个行为特征都做出改变。比如一个录音程序就会把自己配置为 AVAudioSessionCategoryRecord 这样就可以避免在录音过程中遭受锁屏,系统警告声的音响。

还有值得一提的就是,只有 AVAudioSessionPlayAndRecord 才允许修改默认音频播放设备:听筒还是外放。所以,通过音频设备来做音频导向的同学们请注意:你们完全找错了方向。

2.打开/关闭你的音频系统

当你执行任何音频操作的时候,比如播放一段音乐,或者停止播放一段音乐。你都有责任把这个行为告知系统,这样才能够确保系统能够正确的根据你的音频能力设置以及其他你正在运行的程序的音频能力设置,正确的做出混音,消音等操作。

- (BOOL)setActive:(BOOL)active error:(NSError **)outError;

当你把自己的音频置为 On 的时候,系统就会对其他正在播放音频的程序发送中断。特别的是,如果你关闭了自己的音频的系统。任何有责任感的程序都会获取到这个消息,从而重新开始自己的任务。这点对于保持用户延续性的音乐播放至关重要。

3.处理音频中断

手机上最常见的中断就是电话。或者也有用户切到程序外面打开音乐播放器的情况。特别是在电话的过程中,用户必然会丧失自己对音频系统的控制。也就是说被赶下了主干道。在之前的系统上我们可以使用 AVAudioSessionDelegate 来监听这个时间,在 6.0 上我们有 AVAudioSessionInterruptionNotification 这么一个东西(当然我说不清楚为什么苹果要做这样一个改动,可能他们真的把音频这一块儿看的特别的重)。通过回调函数我们可以在中断来临的时候做出正确的反应。最好的例子就是在拒绝接听电话的时候:此时程序没有进入后台,最好的办法就是让自己的
AVAudioSession 重启,然后继续自己的音乐播放。

当然,要注意了:如果通过 C 的函数来写的话,中断的回调只能在初始化也就是 AudioSessoinInitialize 里面设置!(我想这也就是苹果在 6.0 的系统里提供新方法的原因之一吧?)

当然,最后还有一点。千万别忘记在自己的 info.plist 里面加上 App plays audio 这一项,否则说了那么多都是白搭!

时间: 2024-11-30 20:09:29

iOS 音频指南:如何称职的管理自己的音频系统的相关文章

《iOS开发指南》第二版 iOS7版-源码-样章-目录,感谢大家一直以来的支持

<iOS开发指南-从0基础到AppStore上线>第二版 iOS7版正式出版了 感谢大家一直以来的支持! 改版后采用全新的ios 7 api,详细介绍了最新的ios 7 开发相关的知识点,全部案例以iOS7版本SDK重新编译. 新增:iOS 7中文字排版和渲染引擎--Text Kit:      iOS6升级到iOS7遇到的问题与解决方法:      着重讲解iOS分层架构设计: 更新无处不在,更多新增内容请详细阅读本书 京东销售地址:http://item.jd.com/11419483.h

《iOS开发指南》正式出版-源码-样章-目录,欢迎大家提出宝贵意见

我的最新作品:<iOS开发指南-从0基础到AppStore上线>正式出版了 iOS架构设计.iOS性能优化.iOS测试驱动.iOS调试.iOS团队协作版本控制......应有尽有 京东销售地址:http://item.jd.com/11288969.html 当当销售地址:http://product.dangdang.com/product.aspx?product_id=23290237 亚马逊销售:地址太长了,直接连接了 图灵社区在线阅读,购买地址:http://www.ituring.

《iOS编程指南》——2.5节准备你的iOS设备

2.5 准备你的iOS设备 iOS编程指南 在设备上部署应用之前,你需要按照图2-5所示的步骤来做相关配置. 如果你已经加入了iOS开发者计划的标准版或者企业版,你现在就可以生成相应的证书和描述文件(Provisioning Profile)了,通过这个证书和描述文件,你才能把下一章中的测试程序安装到你的iOS设备上. 证书和描述文件 Xcode构建工程的时候需要使用开发证书来对二进制文件进行签名,这个开发证书同时也是你作为iOS开发者的唯一标识.Xcode会从Mac OS X的Keychain

《iOS编程指南》——2.1节注册成为iOS开发者

2.1 注册成为iOS开发者 iOS编程指南 在不久之前,获取Xcode需要先注册为苹果开发者.现在不必了,你从Mac App Store直接就可以下载最新本的Xcode和iOS SDK. 如果你还在使用OS X 10.6(Snow Leopard),那么你需要先注册为苹果开发者,成为iOS开发者计划的一员,然后从iOS Dev Center下载Xcode 4和iOS SDK,因为Mac App Store上提供的Xcode的版本只兼容OS X 10.7(Lion)和10.8(Mountain

聊聊IOS人机界面指南中的三个关键词

  翻了下这几年的iOS人机界面指南,开篇始终是遵从(Deference),清晰(Clarity),深度(Depth)这三个关键字,从iOS7到iOS9从未变过.在iOS>中UI作为内容的支撑,始终服务于内容,就像乔帮主说的"设计不只是看上去的样子和感觉,设计的关键在于它如何发挥作用." 一.遵从 (Deference) 设计为内容服务,UI作为内容的支撑,可以帮助用户更好地理解内容并与之交互,且不会分散用户对内容本身的注意力.以内容为中心被反复强调,而平时设计师却常常会因为过度

《iOS开发指南》要改iOS8版本了,听听您的意见?

<iOS开发指南>要改iOS8版本了,听听您的意见?参加问卷同学均可获得智捷课堂50元代金卡一张,同时抽取一名同学赠送即将出版的基于iOS8的<iOS开发指南>一本,欢迎大家填写问卷http://www.diaochapai.com/survey/17a0cd7b-ef61-40ec-b51f-4e85acdd9fb5 

苹果iOS人机界面指南

苹果iOS人机界面指南用户界面原则 好的人机界面规范遵从于用户思考和行动的方式,而不屈从于设备的性能.一个缺乏吸引力,复杂的,或违悖逻辑的用户界面,却会让原本优秀的应用变得索然无味.反过来, 一个漂亮的,直觉感知的,引人入胜的界面能强化应用程序的功能,并且能在用户心中激发出正面的情绪. 整体之美 整体之美,并不是简单地指应用界面有多漂亮,而是指应用的外观和功能是否完美地结合.例如,用来处理实际工作的应用通常会简化装饰性的UI元素,并置于背景中,而将重要的地位让给任务本身,因而会仅提供标准的控件和

《iOS编程指南》——1.1节优点和缺点

1.1 优点和缺点 iOS编程指南 对于苹果发布的SDK,也不是所有人都买账,在有些人看来这简直是技术的退步,他们认为Web应用已经足够好了.因为用Objective-C专门针对iPhone开发的应用很难移植到其他平台,而Web应用只需要开发一套新的CSS模板就可以了. 但用户并不同意这样的观点,他们才不管开发起来难度有多大,他们只关心好不好用.不过说起来Web应用移植起来也没有想象中那样容易.各个平台的应用外观不尽相同,在做到平台兼容的同时还要实现外观的本地化,其实是一件非常困难的事.如果把W

《iOS编程指南》——1.2节发行周期

1.2 发行周期 iOS编程指南 Paul Graham是我最喜欢的布道师之一,他认为基于Web的软件开发技术的到来不仅极大改变了软件的用户体验,也改变了软件的开发体验: 新的开发技术颠覆了传统的软件发行方式.回想一下桌面软件的发行过程简直就像做了一场噩梦,整个公司上上下下都精神高度紧张,前途取决于这一堆繁杂的代码,不敢出一点错.不论是软件的发布过程还是软件产品本身,这一切都改变了,这一点不证自明. --摘自"The Other Road Ahead",作者:Paul Graham 他