目录
Android Audio的主要内容
Android Audio主要包括三方面内容
- AudioRecorder和AudioTrack:这两个是Audio系统对外提供的API类,完成音频数据的采集和输入任务。其中AudioTrack用于播放声音,AudioRecord用于录音。
- AudioFlinger:Audio系统的工作引擎,管理系统中音频的输入输出流,并承担音频数据的混音。读写Audio硬件以实现音频数据的输入和输出,其中还包括信号处理和硬件交流。
- AudioPolicyService:Audio系统的策略控制中心,对设备操作,设备选择以及音量提供接口和服务。但是具体的实现在AudioPolicyManager中。
Audio播放流程
Framework中的AudioTrack,也就是Android APP开发中使用的SDK暴露出来的接口,向下控制Native层的AudioTrack,然后将传递下来的数据写到AudioFlinger,最终AudioFlinger再将数据写到Audio Hardware。
Audio录音流程
Audio录音流程数据流方向和播放流程相反,先从Audio Hardware拿到数据,然后将音频数据给到AudioFlinger,AudioFlinger再把数据通过Native的AudioRecord传递到最上层。
音频采样
将声波波形信号通过ADC(数模转换器)转换成二进制的过程叫做音频采样(Audio Sample)。采样的核心是把连续的模拟信号转换成连续的数字信号。
声道数 channel
由于音频的采集和播放是可以叠加的,因此可以同时从多个音频源采集声音,并分别输出到不同的扬声器,所以声道数一般情况表示声音录制时的音源数量,或者播放时的扬声器数量。最常见的时单声道(Mono)和双声道(Stereo)。
音频帧
音频数据是流式的,没有一个明确的单位概念,所以为了实际使用时方便,一般约定取2.5ms~60ms为单位数据量为一帧,这个时间被称为采样时间,时间长度没有固定的标准,具体值根据编解码器和具体应用而定。
例:假设某音频信号采样率为8k Hz,双声道,位宽为16bit,20ms为一帧,则一帧的数据大小为:
8000 * 2 * 16 bit * 0.02 s = 5120 bit = 640 byte
MediaPlayer和AudioTrack
MediaPlayer可以播放多种格式的音频数据,如mp3,flac,wav等等。而AudioTrack只能播放解码后的PCM数据。
MediaPlayer再Native层会创建对应的解码器和一个AudioTrack,将解码后的数据给到AudioTrack。