Android音频开发之音频采集的实现示例音频开发之音频采集的实现示例
在 Android 系统中,一般使用 AudioRecord 或者 MediaRecord 来采集音频。
AudioRecord 是一个比较偏底层的API,它可以获取到一帧帧 PCM 数据,之后可以对这些数据进行处理。
而 MediaRecorder 是基于 AudioRecorder 的 API(最终还是会创建AudioRecord用来与AudioFlinger进行交互) ,它可以直接将
采集到的音频数据转化为执行的编码格式,并保存。
直播技术采用的就是 AudioRecorder 采集音频数据。
本文主要介绍例如 AudioRecord 进行音频的采集。
基本基本API
获取最小的缓冲区大小,用于存放 AudioRecord 采集到的音频数据。
代码如下:static public int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat)
AudioRecord构造方法
根据具体的参数配置,请求硬件资源创建一个可以用于采集音频的 AudioRecord 对象。
参数描述:
音频采集基本概念音频采集基本概念
音频采集一般使用 AudioRecod或者 MediaRecord
音频采集的来源是什么?
MediaRecorder.AudioSource.MIC 一般是麦克风
采样率(单位:赫兹)
每秒钟音频采样点个数(8000/44100Hz)
声道
AudioFormat.CHANNEL_IN_MONO 单声道,一个声道进行采样
AudioFormat.CHANNEL_IN_STEREO 双声道,两个声道进行采样
音频采样精度
指定采样的数据的格式和每次采样的大小。
数据返回格式为 PCM 格式
每次采样的位宽为 16bit
一般都采用这个 AudioFormat.ENCODING_PCM_16BIT(官方文档表示,该采样精度保证所有设备都支持)
比特率
每秒传送的比特(bit)数。单位为 bps(Bit Per Second),比特率越高,传送数据速度越快。
采样率x采样大小x声道数
每秒钟采样的大小=16bit(位宽) 2(双通道) 44100(每次采样的次数hz) = 1411200b=1411.2kbps
比特率越大表示单位时间内采样的数据越多,传输的数据量越大。
audioResource
音频采集的来源
audioSampleRate
音频采样率
channelConfig
声道
audioFormat