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

简介: <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:'lucida Grande',Tahoma,Arial,Helvetica,宋体,sans-serif; line-height:26px"> 谈到这个点的时候,我首先想到的是苹果公司是如何从濒临破产

谈到这个点的时候,我首先想到的是苹果公司是如何从濒临破产到重新起步直至现在这个状况的。进入我脑海的是这么一些名字: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 这一项,否则说了那么多都是白搭!

目录
相关文章
|
4月前
|
安全 Android开发 数据安全/隐私保护
深入探索Android与iOS系统安全性的对比分析
在当今数字化时代,移动操作系统的安全已成为用户和开发者共同关注的重点。本文旨在通过比较Android与iOS两大主流操作系统在安全性方面的差异,揭示两者在设计理念、权限管理、应用审核机制等方面的不同之处。我们将探讨这些差异如何影响用户的安全体验以及可能带来的风险。
141 21
|
4月前
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。
|
4月前
|
传感器 iOS开发 UED
探索iOS生态系统:从App Store优化到用户体验提升
本文旨在深入探讨iOS生态系统的多个方面,特别是如何通过App Store优化(ASO)和改进用户体验来提升应用的市场表现。不同于常规摘要仅概述文章内容的方式,我们将直接进入主题,首先介绍ASO的重要性及其对开发者的意义;接着分析当前iOS平台上用户行为的变化趋势以及这些变化如何影响应用程序的设计思路;最后提出几点实用建议帮助开发者更好地适应市场环境,增强自身竞争力。
|
4月前
|
存储 安全 算法
深入探索iOS系统安全机制:保护用户隐私的前沿技术
本文旨在探讨苹果公司在其广受欢迎的iOS操作系统中实施的先进安全措施,这些措施如何共同作用以保护用户的隐私和数据安全。我们将深入了解iOS的安全架构,包括其硬件和软件层面的创新,以及苹果如何通过持续的软件更新来应对新兴的安全威胁。此外,我们还将讨论iOS系统中的一些关键安全功能,如Face ID、加密技术和沙箱环境,以及它们如何帮助防止未经授权的访问和数据泄露。
|
4月前
|
安全 数据安全/隐私保护 Android开发
深入探索iOS系统安全机制:从基础到高级
本文旨在全面解析iOS操作系统的安全特性,从基础的权限管理到高级的加密技术,揭示苹果如何构建一个既开放又安全的移动平台。我们将通过实例和分析,探讨iOS系统如何保护用户数据免受恶意软件、网络攻击的威胁,并对比Android系统在安全性方面的差异。
|
4月前
|
安全 Android开发 数据安全/隐私保护
深入探讨iOS与Android系统安全性对比分析
在移动操作系统领域,iOS和Android无疑是两大巨头。本文从技术角度出发,对这两个系统的架构、安全机制以及用户隐私保护等方面进行了详细的比较分析。通过深入探讨,我们旨在揭示两个系统在安全性方面的差异,并为用户提供一些实用的安全建议。
|
4月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统的差异性及优化策略
在当今数字化时代,移动操作系统的竞争尤为激烈,其中iOS和Android作为市场上的两大巨头,各自拥有庞大的用户基础和独特的技术特点。本文旨在通过对比分析iOS与Android的核心差异,探讨各自的优势与局限,并提出针对性的优化策略,以期为用户提供更优质的使用体验和为开发者提供有价值的参考。
|
4月前
|
安全 搜索推荐 Android开发
揭秘安卓与iOS系统的差异:技术深度对比
【10月更文挑战第27天】 本文深入探讨了安卓(Android)与iOS两大移动操作系统的技术特点和用户体验差异。通过对比两者的系统架构、应用生态、用户界面、安全性等方面,揭示了为何这两种系统能够在市场中各占一席之地,并为用户提供不同的选择。文章旨在为读者提供一个全面的视角,理解两种系统的优势与局限,从而更好地根据自己的需求做出选择。
275 2
|
4月前
|
安全 Android开发 iOS开发
安卓系统与iOS系统的比较####
【10月更文挑战第26天】 本文将深入探讨安卓(Android)和iOS这两大主流移动操作系统的各自特点、优势与不足。通过对比分析,帮助读者更好地理解两者在用户体验、应用生态、系统安全等方面的差异,从而为消费者在选择智能手机时提供参考依据。无论你是技术爱好者还是普通用户,这篇文章都将为你揭示两大系统背后的故事和技术细节。 ####
122 0
|
5月前
|
安全 搜索推荐 Android开发
揭秘iOS与Android系统的差异:一场技术与哲学的较量
在当今数字化时代,智能手机操作系统的选择成为了用户个性化表达和技术偏好的重要标志。iOS和Android,作为市场上两大主流操作系统,它们之间的竞争不仅仅是技术的比拼,更是设计理念、用户体验和生态系统构建的全面较量。本文将深入探讨iOS与Android在系统架构、应用生态、用户界面及安全性等方面的本质区别,揭示这两种系统背后的哲学思想和市场策略,帮助读者更全面地理解两者的优劣,从而做出更适合自己的选择。

热门文章

最新文章

  • 1
    uniapp云打包ios应用证书的获取方法,生成指南
    27
  • 2
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    117
  • 3
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    20
  • 4
    iOS各个证书生成细节
    36
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    161
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    55
  • 7
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    73
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    54
  • 9
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    65
  • 10
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    172