AudioRecord音频采集

Android手机音频采集2种方式

  1. 使用MediaRecorder进行音频采集
  • MediaRecorder 是基于 AudioRecorder 的 API(最终还是会创建AudioRecord用来与AudioFlinger进行交互) ,它可以直接将采集到的音频数据转化为执行的编码格式,并保存,而且系统封装的很好,便于使用,唯一的缺点是使用它录下来的音频是经过编码的,没有办法的得到原始的音频。同时MediaRecorder即可用于音频的捕获也可以用于视频的捕获相当的强大。实际开发中没有特殊需求的话,用的是比较多的!
  1. 使用AudioRecord进行音频采集(在实际开发中,它也是最常用来采集音频的手段)
  • AudioRecord 是一个比较偏底层的API,它可以获取到一帧帧PCM数据,之后可以对这些数据进行处理。AudioRecord这种方式采集最为灵活,使开发者最大限度的处理采集的音频,同时它捕获到的音频是原始音频PCM格式的!像做变声处理的需要就必须要用它收集音频.

接下来捋一下录制流程

  1. 软件中,一般长按View进行录制,第一步当然是申请Manifest.permission.RECORD_AUDIO录音权限,这里推荐com.github.hotchemi:permissionsdispatcher权限库
  1. 有了录音权限,当然就是开启一个子线程(第一个线程),初始化AudioRecord开始录制,初始化的一些关键参数如下:
    // 构造Recorder最小Size
    public int mMinSize;
    
    // 音频采样率
    public static final int frequency = 8000;
    
    // 音频编码格式
    public static final int mEncoding = AudioFormat.ENCODING_PCM_16BIT;
    
    // 单声道模式
    public static final int channelConfig = AudioFormat.CHANNEL_IN_MONO;
    
    mMinSize = AudioRecord.getMinBufferSize(frequency, channelConfig,
                mEncoding);
                
    // 第一个参数:音频源:从麦克风采集音频(MIC)
    // 第二个参数:采样率:音频的采样频率,每秒钟能够采样的次数,采样率越高,音质越高。给出的实例是44100、22050、11025但不限于这几个参数。例如要采集低质量的音频就可以使用4000、8000等低采样率。
    // 第三个参数:声道设置:android支持双声道立体声和单声道。MONO单声道,STEREO立体声
    // 第四个参数:
    // 编码制式和采样大小:采集来的数据当然使用PCM编码(脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。)
    // android支持的采样大小16bit或者8bit。当然采样大小越大,那么信息量越多,音质也越高,现在主流的采样大小都是16bit,在低质量的语音传输的时候8bit
    // 足够了。
    // 第五个参数:采集数据需要的缓冲区的大小,如果不知道最小需要的大小可以在getMinBufferSize()查看。
    // 采集到的数据保存在一个byteBuffer中,可以使用流将其读出。亦可保存成为文件的形式
    try {
        mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency,
                    channelConfig, mEncoding, mMinSize);
    } catch (Exception e) {
            
    }
        
  1. 在录制音频过程中,常见做法需要同时开启第二个线程进行时间记录,开启第三个线程进行音量记录(常见应用需要实时展示音量大小)。当然,录音生成的文件是.pcm格式的
  1. 当录制完毕后,我们需要将录制生成的.pcm编码成mp3格式文件,这里可能有人会说,Android中AudioTrack不是可以播放PCM格式音频数据么?是可以,但是为了常见平台都可以播放,我们常见的做法还是编码成.mp3格式,这样经过处理的音频文件(音质基本上不会损坏)也会小的多。传输也会快一些

猜你喜欢

转载自blog.csdn.net/weixin_34161029/article/details/87443283