Android音訊錄製—MediaRecorder
阿新 • • 發佈:2019-02-19
MediaRecorder (基於檔案錄音)
集成了錄音,編碼,壓縮等,支援少量的音訊格式檔案。
優點:封裝度很高,操作簡單
缺點:無法實現實時處理音訊,輸出的音訊格式少。
首先來看看 MediaRecorder 的生命週期:
從生命週期中可以看出,錄製音訊的基本步驟如下:
MediaRecorder mMediaRecorder= new MediaRecorder();
// 音訊輸入源
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 輸出格式
mMediaRecorder.setOutputFormat (MediaRecorder.OutputFormat.DEFAULT);
// 編碼格式
mMediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.DEFAULT);
// 設定錄製音訊的輸出存放檔案
mMediaRecorder.setOutputFile(audioFile.getAbsolutePath());
// 準備
mMediaRecorder.prepare();
// 開始錄音
mMediaRecorder.start();
......
// 停止錄音
mMediaRecorder.stop();
// 重置錄音器
mMediaRecorder.reset ();
// 釋放錄音器資源
mMediaRecorder.release();
將以上整個流程拆分成業務邏輯,主要為:
- 初始化
- 開始錄音
- 停止錄音
- 重置錄音器
- 釋放錄音器資源
下面我們來看看具體程式碼實現:
1.初始化
public void initRecorder(File audioFile){
if(mMediaRecorder==null){
mMediaRecorder = new MediaRecorder();
}
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource .MIC);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mMediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.DEFAULT);
try {
if(!audioFile.exists()) audioFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
mMediaRecorder.setOutputFile(audioFile.getAbsolutePath());
mMediaRecorder.prepare();
}
2.開始錄音
mMediaRecorder.start();
3.停止錄音
mMediaRecorder.stop();
4.重置錄音器
mMediaRecorder.reset();
5.釋放錄音器資源
if(mMediaRecorder!=null){
mMediaRecorder.release();
mMediaRecorder = null;
}
使用情況如下:
(1)一次錄製完成
1 —> 2 —> 3 —>5
(2)錄製完不滿意,想重新錄製,此時檔案還是同一檔案,控制 audioFile 引數即可
1 —> 2 —> 3 —>4 —> 1 —> 2 —>3 —> 5
(3)錄製完繼續錄製第二個,此時檔案是另一個新檔案,控制 audioFile 引數即可
1 —> 2 —> 3 —>4 —> 1 —> 2 —>3 —> 5
其他情況可自行處理。