ArcherMind Inc. Confidential
Audio音效的设置和控制
学习总结
History
V1 完成文档 12年04月23日
ArcherMind Inc. Proprietary – For Internal Use Only
CONFIDENTIAL Date
Page 1 of 33
Author 王京阳
目录
1.0 Audio系统综述 ............................................................................................................ 2 1.1 Audio系统结构 ........................................................ 3 1.2 Audio系统代码位置 .................................................... 4 1.3 Audio系统和上层接口 .................................................. 5 1.3.1 Audio系统的各个层次 ............................................ 5 1.3.2 media库中的Audio框架部分 ...................................... 6 1.3.3 AudioFlinger本地代码 ........................................... 8 1.3.4 Audio系统的JNI代码 ............................................ 9 1.3.5 Audio系统的Java代码 ........................................... 9 2.0 音效设置及控制 ........................................................................................................... 11 2.1 不同类型声音资源的设置 ............................................... 11 2.2 拍照/录音时候的声音文件 .............................................. 12 2.3 默认铃声的设置 ....................................................... 14 2.4 拨号界面专属拨号按键音设置 ........................................... 17
ArcherMind Inc. Proprietary – For Internal Use Only
CONFIDENTIAL Date
Page 2 of 33
2.5 添加音频效果的设置项 ................................................. 19 2.6 音量控制 ............................................................. 24 2.7 音频系统 ............................................................. 27 2.7.1 音频类型 ...................................................... 28 2.7.2 输入输出设备 .................................................. 28 2.7.3 音频策略管理 .................................................. 30 2.8 RingerMode ........................................................... 31 2.8.1利用AudioManager使用RingerMode ............................... 31 2.8.2 RingerMode在AudioService中内部实现 ........................... 31 2.8.3 配置RingerMode对特定AudioStream的影响 ....................... 32
1.0 Audio系统综述
Audio系统在Android中负责音频方面输入/输出层次〃一般负责播放PCM声音输出和从外部获取PCM声音〃以及管理声音设备和设置。
1.1 Audio系统结构
主要分成如下几个层次:
(1)media库提供的Audio系统本地部分接口; (2)AudioFlinger作为Audio系统的中间层; (3)Audio的硬件抽象层提供底层支持;
(4)Audio接口通过JNI和Java框架提供给上层。
Audio系统的各个层次接口主要提供了两方面功能:放音(Track)和录音
ArcherMind Inc. Proprietary – For Internal Use Only
CONFIDENTIAL Date
Page 3 of 33
(Recorder)。
Android的Audio系统结构如图1-1所示。
图1.1Android的audio系统结构
1.2 Audio系统代码位置
Android系统的代码分布情况如下所示: (1)Audio的Java部分
代码路径:frameworks/base/media/java/android/media
ArcherMind Inc. Proprietary – For Internal Use Only
CONFIDENTIAL Date
Page 4 of 33
与Audio相关的Java包是android.media〃主要包含AudioManager和Audio系统的几个类。
(2)Audio的JNI部分
代码路径:frameworks/base/core/jni
生成库libandroid_runtime.so〃Audio的JNI是其中的一个部分。 (3)Audio的框架部分
头文件路径:frameworks/base/include/media/ 源代码路径:frameworks/base/media/libmedia/
Audio本地框架是media库的一部分〃本部分内容被编译成库libmedia.so〃提供Audio部分的接口(包括基于Binder的IPC机制)。
(4)Audio Flinger
代码路径:frameworks/base/services/audioflinger(注:android2.3) 这部分内容被编译成库libaudioflinger.so〃它是Audio系统的本地服务部分。 (5)Audio的硬件抽象层接口
头文件路径:hardware/libhardware_legacy/include/hardware/
Audio硬件抽象层的实现在各个系统中可能是不同的〃需要使用代码去继承相应的类并实现它们〃作为Android系统本地框架层和驱动程序接口。
ArcherMind Inc. Proprietary – For Internal Use Only
CONFIDENTIAL Date
Page 5 of 33