一、概述
安卓系统支持MediaRecorder和AudioRecord录音,2者区别如下:
MediaRecorder:
MediaRecorder 是基于 AudioRecorder 的 API(最终还是会创建AudioRecord用来与AudioFlinger进行交互) ,它可以直接将采集到的音频数据转化为执行的编码格式,并保存。这种方案相较于调用系统内置的用用程序,便于开发者在UI界面上布局,而且系统封装的很好,便于使用,唯一的缺点是使用它录下来的音频是经过编码的,没有办法的得到原始的音频。同时MediaRecorder即可用于音频的捕获也可以用于视频的捕获相当的强大。实际开发中没有特殊需求的话,用的是比较多的!
AudioRecord:
AudioRecord 是一个比较偏底层的API,它可以获取到一帧帧PCM数据,之后可以对这些数据进行处理。AudioRecord这种方式采集最为灵活,使开发者最大限度的处理采集的音频,同时它捕获到的音频是原始音频PCM格式的!像做变声处理的需要就必须要用它收集音频。
由于本人工作原因,用到的录音api都是AudioRecord,故对AudioRecorder api进行了接单封装,希望对有些孩童有帮助。
二、封装主要接口如下:
1,启动录音机
public int start(int sampleRate, int channel, int buf_time) {
bufferTime = buf_time;
// int channel=AudioFormat.CHANNEL_IN_MONO;
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
int bytes = 2;
int size;
q = new ArrayBlockingQueue<byte[]>(1024*300);
audioBufSize = AudioRecord.getMinBufferSize(sampleRate, channel, audioEncoding);
size = sampleRate * channel * bytes * buf_time / 1000;