1.AudioRecord
AudioRecord和AudioTrack相对应,用于音频记录。AudioRecord的可选采样频率为44100Hz、22050Hz、11025Hz,通道配置为CHANNEL_IN_MONO、CHANNEL_IN_STEREO,音频格式为ENCODING_PCM_16BIT、ENCODING_PCM_8BIT。
AudioRecord的常用方法包括:
read() //从硬件音频设备中记录数据到缓冲中。
startRecording() //开始音频记录
stop() //停止音频记录
setRecordPositionUpdateListener()//设置AudioRecord.OnRecordPositionUpdateListener监听器AudioRecord的记录状态包括RECORDSTATE_STOPPED、RECORDSTATE_RECORDING等。
AudioRecord自身的状态包括STATE_INITIALIZED、STATE_UNINITIALIZED等。
下面是利用AudioRecord的方法:
mAudioRecord=new AudioRecord(MediaRecorder.AudioSource.DEFAULT, mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,AudioFormat.ENCODING_PCM_16BIT,
AudioRecord.getMinBufferSize(mHz,AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT) * 10);
mAudioRecord.startRecording();
2.MediaRecorder
在Android中,录制音频和视频常采用的是MediaRecorder接口。为了录制音频文件,需要设置音频源、输出格式、录制时间、编码格式等。录制音频文件的过程如下:
代码10-2 MediaRecorder录制音频文件
…
private MediaRecorder mMediaRecorder;
…
//设置音频源为麦克风
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置输出格式为3gp
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//设置大录制时间
mMediaRecorder.setMaxDuration(MAX_DURATION_MSEC);
//设置音频编码格式
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.prepare();
mMediaRecorder.start(); //开始录制
当有错误发生时,为了能够监听到相关的消息,可以为MediaRecorder设置监听器。方法如下:
…
private final RecorderErrorCallback mRecorderErrorCallback=new RecorderErrorCallback();
…
private final class RecorderErrorCallback implements MediaRecorder.OnErrorListener {
public void onError(MediaRecorder mr, int what, int extra) {
assertTrue("mediaRecorder error", false);
}
}
…
mMediaRecorder.setOnErrorListener(mRecorderErrorCallback); //设置错误监听器