android音频浅析
http://blog.csdn.net/reiliu/article/details/8774749
Android Framework的音频子系统中,每一个音频流对应着一个AudioTrack类的一个实例,每个AudioTrack会在创建时注册到AudioFlinger中,由AudioFlinger把所有的AudioTrack进行混合(Mixer),然后输送到AudioHardware中进行播放。AudioTrack和AudioFlinger的通信机制通常,AudioTrack和AudioFlinger并不在同一个进程中,它们通过android中的binder机制建立联系。
Android音频处理的基本接口
在Android开发中,根据不同的场景,出于冲突处理策略的考虑,开发者需要利用不同的接口来进行音频资源的播放。
AudioManager为上层应用提供了声音设置管理接口.
AudioService为所有的音频相关的设置提供服务。他定义了了一个AudioSystemThread 的类,用来监控音频控制相关的信号,当有请求时,它会通过调用AudioSystem 的接口实现音频的控制,这里的消息处理是异步的。此外在AudioService还抽象出了一套发送音频控制信号的接口为AudioManager提供支持。AudioManager通过音频服务,为上层提供了音量和铃声模式控制的接口,铃声模式控制包括扬声器、耳机、蓝牙等是否打开,麦克风是否静音等。在开发多媒体应用时会经常用到AudioManager,关于Android AudioManager音量控制流程。
AudioSystem提供了音频系统的基本类型定义,以及基本操作的接口。
对于音调,可以通过ToneGenerator来播放;ToneGenerator提供了对DTMF音(ITU-T Q.23),以及呼叫监督音(3GPP TS 22.001)、专用音(3GPP TS 31.111)中规定的音频的支持,根据呼叫状态和漫游状态,该文件产生的音频路径为下行音频或者传输给扬声器或耳机。