早期某知名公司的应用有这么一个问题,如果我在听音乐时打开该应用,播放一段小视频,视频播放完成之后,音乐没有继续播放。这个问题被很多用户吐槽,很久以后,该公司终于修复了这个问题。

无论声音是应用体验的重要部分,还是作为润色,你都应该知道用户期待声音有怎样的行为。

用户可以通过音量键、静音开关、耳机,以及音量滑条来控制声音,一些第三方的附件也可以控制声音。音频可以通过内部或外接的扬声器、耳机来输出,甚至是无线的 AirPlay 设备或 蓝牙设备。

  • 静音(Silence)。静音的情况下,用户希望不被意外的声音打扰,比如来电铃声、信息铃声、以及各种不重要的声音,比如,按键声、游戏配音、其他的听觉反馈等。用户只期待明确开始的声音,比如多媒体播放、闹钟、音频或视频信息。
  • 音量(Volume)。当用户使用手机上的物理按键或屏幕上的音量滑条来调节声音时,用户期待这个调整可以在系统层面影响所有的声音,包括音乐播放、应用内声音。唯一的例外是铃音音量(ringer volume),铃音音量总是在没有音频播放的时候单独调节。
  • 耳机(Headphone)。当用户插入耳机的时候,希望声音能自动切换线路(route)。当拔掉耳机的时候,期待播放暂停。

必要时可自动调节音量(不是总体的音量)。应用可以调节相对独立的音量来实现想要的效果。然而,最终的输出应该总是受系统音量控制。

合适的时候重新选择线路。比如,你家的客厅有立体声系统,又有 Apple TV。那你应该支持在这些中间切换,除非是特殊原因。

使用系统提供的音量视图来允许音量调节。调节音量时,提供一个界面控件无疑是很好的。iOS 系统为我们提供了MPVolumeView(点击查看详情)。

为短声和震动,使用系统声音服务。这个指的是AudioToolbox(System Sound Services)。

如果你的应用必须使用声音,那么给音频归类。实际上指的是AVAudioSession的 category,当其值不同,表现也不同。具体看下表:

category 含义 表现
Solo ambient 声音不是必须的(essential),但是它会静默其他音频。比如,带有配乐的游戏。 1.受静音开关控制。2.不和其他声音混合(mix)。3.应用在后台时不播放。
Ambient 声音不是必须的,并且不会静默其他音频。比如,一个游戏应用可以让用户在玩游戏时播放另一个应用中的音乐,来替代游戏的配乐。 1.受静音开关控制。2.和其他声音混合。3.应用在后台时不播放。
Playback 声音是必须的,并且跟其他声音混合。比如,语音电子书应用,用户可能想在离开应用后,仍然可以听。 1.不受静音开关控制。2.可能混合,也可能不混合其他声音。3.可以在后台播放。
Record 录音。比如,语音备忘录这类应用。 不受静音开关控制。2.不和其他声音混合。3.可以在后台录音。
Play and Record 声音可能同时被录制和播放。例如,一个语音信息应用。 1.不受静音开关控制。2.可能混合,也可能不混合其他声音。3.可以在后台录制或播放。

被打断以后,在合适的时间继续播放。有时候,当前播放的音频可能被另一个应用打断。临时打断可以重新开始,比如打进来的电话。永久打断不能重新开始,比如由 Siri 开始的音乐播放列表。

在你的应用结束一段临时的语音播放时,让其他应用知道。如果你的应用可能会临时打断其他应用的音频,你应该在合适的时候让其他应用可以安全的重新开始时得到通知。实现细节可以看这里:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation。

不要重新调整音频附件。人们希望在所有的应用中,音频附件的行为一致。一定不要重新定义一个语音附件的意义。如果你的应用不支持某种附件,不响应它就好了。

iOS 用户体验之音频的更多相关文章

  1. (转)iOS Wow体验 - 第二章 - iOS用户体验解析(2)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第二部分,其余章节将陆续放出.上一 ...

  2. (转)iOS Wow体验 - 第二章 - iOS用户体验解析(1)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第一部分,其余章节将陆续放出.上一 ...

  3. ios用户体验

    如果转载此文,请注明出处:http://blog.csdn.net/paulery2012/article/details/25157347,谢谢! 前言: 本文是在阅读<ios用户体验> ...

  4. iOS用户体验之-导航之道

    iOS用户体验之-导航之道 用户不会意识到有导航指向的存在除非他遇到非预期的效果. 能够说导航时逻辑跳转的节点.所以导航对用户体验是至关重要的. iOS中有三种类型的导航.每一种适合不同类型的app. ...

  5. 《iOS用户体验》总结与思考-改动版

    假设转载此文.请注明出处:http://blog.csdn.net/paulery2012/article/details/25157347,谢谢. 前言: 本文是在阅读<ios用户体验> ...

  6. iOS用户体验之-modal上下文

    iOS用户体验之-modal上下文 何为模态视图,它的作用时聚焦当前.获得用户的注意,用户仅仅有完毕模态的任务才 退出模态视图.否则你将不能运行app的任务,比如,alert view,model v ...

  7. (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...

  8. iOS开发——浅谈构架与用户体验

    工作不是千篇一律的重复,从中寻找乐趣才是我们应该做的. 作为一名码农,做过几个项目,每次做项目的时候都会自己构思,如果完全是我自己设计,会怎么去设计?心里一直没有满意的答案,不管怎么布局,好像都感觉差 ...

  9. 必应词典手机版(IOS版)与有道词典(IOS版)之软件分析【功能篇】【用户体验篇】

    1.序言: 随着手机功能的不断更新和推广,手机应用市场的竞争变得愈发激烈.这次我们选择必应词典和有道词典的苹果客户端作对比,进一步分析这两款词典的客户端在功能和用户体验方面的利弊.这次测评的主要评测人 ...

随机推荐

  1. HDU - 2147 kiki's game 巴什博弈

    思路:以终点(n, m)作为P态,倒推各个坐标的状态,最终得到结论:行数或列数是偶数就能赢,否则输.        AC代码 #include <cstdio> #include < ...

  2. scrapy的学习总结(1)

    1.xpath和css的节点的共同结合使用是一个挺好的使用过程,还有就是配合正则表达式的使用,这个也是很重要的.解决任何一个问题都会有不同方法.学会思考的解决问题. 2.item的数据抽取,pipel ...

  3. hadoop性能调优

    1.平衡磁盘利用率 hadoop balancer -Threshold 20 或者 sh $HADOOP_HOME/bin/start-balancer.sh –t 20% 参数20是比例参数,表示 ...

  4. js中reduce()用法

    reduce()方法 定义:reduce()接收一个函数作为累加器,数组中每个值(从左到右)开始缩减,最终计算为一个值 对于空数组不执行回调函数 语法:array.reduce(function(to ...

  5. 修改windows7中文件的权限

    1.修改ntkrnlpa.exe的权限 2.鼠标右键,选择"属性" 3.单击"安全"选项,选择"高级" 4.在高级安全设置中,选择" ...

  6. JDBC异常之数据库表不存在

    JDBC异常之数据库表不存在 1.具体错误如下: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Table 'YHD.t_yhd_ ...

  7. weblogic部署web项目出现错误

    1.错误描述 <2015-3-15 下午02时13分01秒 CST> <Info> <Security> <BEA-090905> <Disabl ...

  8. Flex中的DataGrid报错(一)

    1.错误描述    此行的多个标记:    -holeNum    -1105: 赋值的目标必须是引用值. 2.错误原因    detailWindow.holeNum.toString() = &q ...

  9. RHEL64 缺少ISO 9660图像 安装程序试图挂载映像#1,在硬盘上无法找到该映像

    用光盘安装Linux,很容易,按照提示一步一步就好.如果没有光驱,只好想办法用硬盘或者U盘安装了. 首先说说怎样用U盘启动Linux的安装程序:1.将ISO镜像文件拷贝到U盘中,并解压到U盘根目录.将 ...

  10. TypeError: Error #1034: 强制转换类型失败:无法将 flash.events::MouseEvent@73b7cc1 转换为 mx.events.ItemClickEvent。

    1.错误描述 TypeError: Error #1034: 强制转换类型失败:无法将 flash.events::MouseEvent@73b7cc1 转换为 mx.events.ItemClick ...