1. 程式人生 > >Android音訊錄製—MediaRecorder

Android音訊錄製—MediaRecorder

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. 初始化
  2. 開始錄音
  3. 停止錄音
  4. 重置錄音器
  5. 釋放錄音器資源

下面我們來看看具體程式碼實現:

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

其他情況可自行處理。