Android的Audio框架分析

   

  AudioTrack:

 Android Framework的音频子系统中,每一个音频流对应着一个AudioTrack类的一个实例,每个AudioTrack会在创建时注册到AudioFlinger中,由AudioFlinger把所有的AudioTrack进行混合(Mixer),然后输送到AudioHardware中进行播放,目前Mixer最多会同时处理32个AudioTrack的数据流。

AudioRecord:

AndioRecord类的主要功能是让各种JAVA应用能够管理音频资源,以便它们通过此类能够录制平台的声音输入硬件所收集的声音。此功能的实现就是通过”pulling同步”(reading读取)AudioRecord对象的声音数据来完成的。在录音过程中,应用所需要做的就是通过后面三个类方法中的一个去及时地获取AudioRecord对象的录音数据. AudioRecord类提供的三个获取声音数据的方法分别是read(byte[], int, int),read(short[], int, int), read(ByteBuffer, int).无论选择使用那一个方法都必须事先设定方便用户的声音数据的存储格式。

开始录音的时候,一个AudioRecord需要初始化一个相关联的声音buffer,这个buffer主要是用来保存新的声音数据。这个buffer的大小,我们可以在对象构造期间去指定。它表明一个AudioRecord对象还没有被读取(同步)声音数据前能录多长的音(即一次可以录制的声音容量)。声音数据从音频硬件中被读出,数据大小不超过整个录音数据的大小(可以分多次读出),即每次读取初始化buffer容量的数据。

AudioFlinger:

AudioFlinger本身的实现通过调用下层的Audio硬件抽象层的接口来实现具体的功能,各个接口之间具有对应关系。AudioFlinger是Audio系统的中间层,在系统中起到服务作用,它主要作为libmedia提供的Audio部分接口的实现,AudioFlinger.h和AudioFlinger.cpp,提供了类AudioFlinger,这个类是一个IAudioFlinger的实现.

AudioPolicyService:

AudioPolicyService主要完成以下任务:
JAVA应用层通过JNI,经由IAudioPolicyService接口,访问AudioPolicyService提供的服务

输入输出设备的连接状态
系统的音频策略(strategy)的切换
音量/音频参数的设置
AudioPolicyManager:

这个类是作为AudioPolicyService的一个成员变量,完成重要的管理工作。包括:音量管理,音频策略管理,输入输出设备管理。

 

 

 

你可能感兴趣的:(Android的Audio框架分析)