1.AudioRecord
AudioRecord和AudioTrack相對(duì)應(yīng),用于音頻記錄。AudioRecord的可選采樣頻率為44100Hz、22050Hz、11025Hz,通道配置為CHANNEL_IN_MONO、CHANNEL_IN_STEREO,音頻格式為ENCODING_PCM_16BIT、ENCODING_PCM_8BIT。
AudioRecord的常用方法包括:
read() //從硬件音頻設(shè)備中記錄數(shù)據(jù)到緩沖中。
startRecording() //開始音頻記錄
stop() //停止音頻記錄
setRecordPositionUpdateListener()//設(shè)置AudioRecord.OnRecordPositionUpdateListener監(jiān)聽器AudioRecord的記錄狀態(tài)包括RECORDSTATE_STOPPED、RECORDSTATE_RECORDING等。
AudioRecord自身的狀態(tài)包括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接口。為了錄制音頻文件,需要設(shè)置音頻源、輸出格式、錄制時(shí)間、編碼格式等。錄制音頻文件的過程如下:
代碼10-2 MediaRecorder錄制音頻文件
…
private MediaRecorder mMediaRecorder;
…
//設(shè)置音頻源為麥克風(fēng)
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//設(shè)置輸出格式為3gp
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//設(shè)置大錄制時(shí)間
mMediaRecorder.setMaxDuration(MAX_DURATION_MSEC);
//設(shè)置音頻編碼格式
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.prepare();
mMediaRecorder.start(); //開始錄制
當(dāng)有錯(cuò)誤發(fā)生時(shí),為了能夠監(jiān)聽到相關(guān)的消息,可以為MediaRecorder設(shè)置監(jiān)聽器。方法如下:
…
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); //設(shè)置錯(cuò)誤監(jiān)聽器