AudioRecord 录制PCM
AudioRecord 是 Android 提供的用于实现录音功能,录制得到无损的PCM音频数据。
从AudioRecord构造函数就可以看出:
public AudioRecord(int audioSource, int sampleRateInHz, int channelConfig,
int audioFormat, int bufferSizeInBytes)
- audioSource 音频源,如麦克风MIC
- sampleRateInHz 采样率,每秒采样次数,常用有8000、44100
- channelConfig 声道,有单声道MONO和立体声STEREO
- audioFormat 采样大小,8bit或16bit,采样大小越大,音质越好
- bufferSizeInBytes 采集数据的缓冲区,可以通过getMinBufferSize()获得最小的buffer size
(参考:https://www.jianshu.com/p/80a140cf3d99)
1.初始化
private final static int AudioSource = MediaRecorder.AudioSource.DEFAULT;
private final static int AudioRate = 44100;
private final static int AudioInChannel = AudioFormat.CHANNEL_IN_MONO;
private final static int AudioOutChannel = AudioFormat.CHANNEL_OUT_MONO;
private final static int AudioFormater = AudioFormat.ENCODING_PCM_16BIT;
private AudioRecord mAudioRecord;
private int recordBufferMinSize;
private AudioTrack mAudioTrack;
2.开始录制
private void startRecord() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, MICROPHONE, 2);
return;
}
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, STORAGE, 2);
return;
}
isRecording = true;
mExecutor.execute(new RecordRunnable()); // mExecutor是一个简单的线程池
}
RecordRunnable实现:
- 调用 startRecording() 开始录制
- 读取 AudioRecord音频数据:int readSize = mAudioRecord.read(bufferbytes, 0, recordBufferMinSize);
- 往 FileOutputStream写数据:mOutputStream.write(bufferbytes, 0, readSize);
- 关闭 AudioRcord
private class RecordRunnable implements Runnable {
private Ou