Managing Audio Focus[管理音频焦点]
- 很多App都可以播放音频,因此在播放前如何获取到音频焦点就显得很重要了,这样可以避免同时出现多个声音,Android使用audio focus来节制音频的播放,仅仅是获取到audio focus的App才能够播放音频。
- 在App开始播放音频之前,它需要经过发出请求[request]->接受请求[receive]->音频焦点锁定[Audio Focus]的过程。同样,它需要知道如何监听失去音频焦点[lose of audio focus]的事件并进行合适的响应。
Request the Audio Focus [请求获取音频焦点]
- 通过call
requestAudioFocus() 方法来获取你想要获取到的音频流焦点。如果请求成功这个方法会返回
AUDIOFOCUS_REQUEST_GRANTED
。
- 我们必须指定正在使用哪个音频流,而且是否想请求短暂还是永久的audio focus。
- 短暂的焦点锁定:当期待播放一个短暂的音频的时候(比如播放导航指示)
- 永久的焦点锁定:当计划播放可预期到的较长的音频的时候(比如播放音乐)
- 下面是一个在播放音乐的时候请求永久的音频焦点的例子,我们必须在开始播放之前立即请求音频焦点,比如在用户点击播放或者游戏程序中下一关开始的片头音乐。
- 当请求短暂音频焦点的时候,我们可以选择是否开启“ducking”。
-
Ducking是一个特殊的机制使得允许音频间歇性的短暂播放。
- 通常情况下,一个好的App在失去音频焦点的时候它会立即保持安静。如果我们选择在请求短暂音频焦点的时候开启了ducking,那意味着其它App可以继续播放,仅仅是在这一刻降低自己的音量,在短暂重新获取到音频焦点后恢复正常音量[也就是说:不用理会这个请求短暂焦点的请求,这并不会导致目前在播放的音频受到牵制,比如在播放音乐的时候突然出现一个短暂的短信提示声音,这个时候仅仅是把播放歌曲的音量暂时调低,好让短信声能够让用户听到,之后立马恢复正常播放]。
Handle the Loss of Audio Focus[处理失去音频焦点]
- 如果A程序可以请求获取音频焦点,那么在B程序请求获取的时候,A获取到的焦点就会失去。显然我们需要处理失去焦点的事件。
-
在音频焦点的监听器里面,当接受到描述焦点改变的事件时会触发
onAudioFocusChange()
回调方法。对应于获取焦点的三种类型,我们同样会有三种失去焦点的类型。
- 失去短暂焦点:通常在失去这种焦点的情况下,我们会暂停当前音频的播放或者降低音量,同时需要准备恢复播放在重新获取到焦点之后。
- 失去永久焦点:假设另外一个程序开始播放音乐等,那么我们的程序就应该有效的结束自己。实用的做法是停止播放,移除button监听,允许新的音频播放器独占监听那些按钮事件,并且放弃自己的音频焦点。
- 在重新播放器自己的音频之前,我们需要确保用户重新点击自己App的播放按钮等。
在上面失去短暂焦点的例子中,如果允许ducking,那么我们可以选择“duck”的行为而不是暂停当前的播放。
Duck! [闪避]
Ducking是一个特殊的机制使得允许音频间歇性的短暂播放。在Ducking的情况下,正常播放的歌曲会降低音量来凸显这个短暂的音频声音,这样既让这个短暂的声音比较突出,又不至于打断正常的声音。
请看例子:
分享到:
相关推荐
vuforia-samples-advanced-android-ios-unity-4-2-3.zip官网下载太慢了,放在网盘方便大家下载
DOLBY ADVANCED AUDIO--杜比音质增强--正版软件
vuforia-samples-advanced-android-7-1-34 方便安卓的高通AR的unity示例包
advanced-spark-training.pdf
Qt-Advanced-Docking-System-master
Advanced Android App Architecture pdf + epub + source code
第2章介绍Android系统启动过程,为下面的章节做好铺垫。 第3章介绍应用程序进程启动过程。 第4章介绍四大组件的工作过程,包括根Activity的启动过程,Service的启动和绑定过程,广播的注册、发送和接收过程,Content...
yii-advanced-app-2.0.4 下载
Advanced Bash-Scripting Guide
谷歌浏览器的api接口测试工具Advanced-REST-client
Footnoted_advanced_bash-scripting_guide_2014-03-10_v.10_abs-guide Footnoted_advanced_bash-scripting_guide_2014-03-10_v.10_abs-guide Footnoted_advanced_bash-scripting_guide_2014-03-10_v.10_abs-guide ...
Advanced Bash-Scripting Guide 3.9.1 (包括中译本) 作者:thegrendel 主页:http://personal.riverusers.com/~thegrendel 中译本:杨春敏(chunmin.yang at gmail.com) 黄毅 (linuxprogram at gmail.com)...
STM32F100xx advanced ARM-based 32-bit MCUs 手册 最新版
yii2高级多应用脚手架,下载yii-advanced-app-2.0.36.tgz直接使用开发,下载不了的朋友可以方便下载使用
网上的别人的android例子,可以跟着看下,入门的 FragmentExample_start LocaleText3_start LocaleText_start MemoryOverload RecyclerView_start Scorekeeper_start SimpleAccessibility_start...
谷歌插件Advanced-REST-client 谷歌插件Advanced-REST-client 谷歌插件Advanced-REST-client 谷歌插件Advanced-REST-client
关于Android开发的电子书。本书从不同视角介绍了Android内在特点和结构,适合Android的初学者阅读。
phoneme_advanced-mr2交叉编译,CVM移植ARM交叉编译
fluent的附加模块,包含燃料电池、磁流体、PBM等模块的理论和使用方法;PBM是population balance,可以用来计算多相流中,气泡的生成、发展、溃灭等过程。
Bash脚本高级指南(Advanced Bash-Scripting Guide)是学习shell的经典指南,其中内容详细,实例丰富,且根据Bash的发展不断更新,此资源是Advanced Bash-Scripting Guide的最新版本6.6,更新于2012.11.27,是本人...