android AudioRecord 录音功能

之前工作内容涉及音视频录制,这里做些记录。

如果实现一个录音功能,包含如下要求

  • 可以暂停,继续
  • 每次暂停为一段
  • 可以删除上一段
  • 最后输出Mp3
接下去讲如何实现如上的需求
AudioRecord:是android提供的录音API,主要功能是录音,输出的结果是PCM数据
PCM: 脉冲编码调制是Pulse Code Modulation的缩写,模拟信号的数字化
1:初始化
public class AudioPart{
  public AudioRecord audioRecord; 
  //采样率
  public static final int SAMPLE_RATE = 44100;
  //单声道
  public static final int ChannelConfig = AudioFormat.CHANNEL_IN_MONO;
  //采样位数 16 bit
  public static final int PCM_BIT = AudioFormat.ENCODING_PCM_16BIT;
  //声道数1
  public static final int ChannelCount = 1;
  public AudioPart() throws IOException {
        ...
        //最小缓存大小
        bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, ChannelConfig, PCM_BIT);
        mBuffer = new byte[bufferSize];
        audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE, ChannelConfig, PCM_BIT, bufferSize);
        ...
    }
}
开始录制
audioRecord.startRecording();
读取数据
RandomAccessFile  file
        while{
             int readSize = mAudioRecord.read(mBuffer, 0, mBuffer.length);
             //mBuffer[0-readSize]的PCM数据,存入文件
             for (int i = 0; i < readSize; i++) {
                file.writeShort(mBuffer[i]);
            }
            }
        }
停止录制
audioRecord.stop();
上面提到
可以暂停,继续
每次暂停为一段
可以删除上一段
主要是在数据上做处理
第一段 第二段 第三段
PCM PCM PCM
每次录制后向文件追加PCM数据,并记录这段的开始位置和结束位置
比如追加第三段PCM,开始位置为第二段末尾,结束位置为第三段末尾
删除上一段:即删除最后一段(第三段)的pcm数据

删除

第一段 第二段 第三段
PCM PCM PCM
当业务PCM数据都确定之后,一般需要上传服务器,上传前需要编码压缩,这里采用Mp3
PCM转Mp3使用的是第三方库lame

基于lame的封装https://github.com/shoyu666/PcmToMp3

你可能感兴趣的:(android AudioRecord 录音功能)