Android上的resample处理
默认的情况下,Android放音的采样 率固定为44.1khz,录音的采样率固定为8khz,因此底层的音频设备驱动只需设置好这两个固定的采样率。如果上层传过来的采样率与其不符的话,则 Android Framework层会对音频流做resample(重采样)处理。
Resample的大致流程如下:
图片1
AudioResample作为最基本的类,回放和录音resample最终都会调用到这个类;有兴趣可以研究下resample的算法和实现,这里不阐述。
AudioMixer仅仅提供给回放使用的,这个类功能不仅仅是resample了,混音、音量设置都由这个类实现的。
录音:
1、AudioFlinger::RecordThread是录音线程类,每当有录音请求时,进入AudioFlinger::openInput创建这个线程;
2、在创建这个线程的同时,调用readInputParameters,检查上层传过来的录音采样率是否与底层音频接口固定的录音采样率一致;如果不一致,则调用AudioResampler::create创建一个resampler;
3、关于 AudioFlinger::RecordThread::ThreadLoop,当录音工作线程启动后,会不断循环该ThreadLoop方法,主要 是:1)读取底层音频设备获取录音数据mBytesRead = mInput->read(mRsmpInBuffer, mInputBytes); 2)对录音数据做重采样 mResamp