Android開發之使用MediaRecorder錄製聲音
為了在 Android 應用中錄製聲音,Android提供了 MediaRecorder 類,關於MediaRecorder的詳解大家可以參考《Android開發之MediaRecorder類詳解》。
使用MediaRecorder錄製聲音的步驟:
1) 建立 MediaRecorder 對象。
2) 調用MediaRecorder對象的setAudioSource()方法設定聲音來源,一般傳入 MediaRecorder. AudioSource.MIC參數指定錄製來自麥克風的聲音。
3) 調用MediaRecorder對象的setOutputFormat()設定所錄製的音頻檔案的格式。
4) 調用MediaRecorder 對象的setAudioEncoder()、setAudioEncodingBitRate(intbitRate)、 setAudioSamplingRate(int samplingRate)設定所錄製的聲音的編碼格式、編碼位率、採樣率等, 這些參數將可以控制所錄製的聲音的品質、檔案的大小。一般來說,聲音品質越好,音效檔越大。
5) 調用MediaRecorder的setOutputFile(Stringpath)方法設定錄製的音頻檔案的儲存位置。
6) 調用MediaRecorder的prepare()方法準備錄製。
7) 調用MediaRecorder對象的start()方法開始錄製。
8) 錄製完成,調用MediaRecorder對象的stop()方法停止錄製,並調用release()方法釋放資源。
提示:1.上面的步驟中第3和第4兩個步驟千萬不能搞反,否則程式將會拋出lllegalStateException 異常。
2. 設定聲音編碼格式要和聲音的輸出格式相對應,不然錄製的音頻檔案不標準。如果編碼格式和輸出格式不對應,錄製出的音頻檔案雖然可以播放,但是將多個這類音頻檔案合并之後,會出現只播放合并檔案中的部分檔案。
應用執行個體
使用MediaRecorder錄製聲音:
執行個體代碼:
package com.jph.recordsound;import java.io.File;import org.crazyit.sound.R;import android.app.Activity;import android.media.MediaRecorder;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageButton;import android.widget.Toast;public class RecordSound extends Activityimplements OnClickListener{// 定義介面上的兩個按鈕ImageButton record, stop;// 系統的音頻檔案File soundFile;MediaRecorder mRecorder;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);// 擷取程式介面中的兩個按鈕record = (ImageButton) findViewById(R.id.record);stop = (ImageButton) findViewById(R.id.stop);// 為兩個按鈕的單擊事件綁定監聽器record.setOnClickListener(this);stop.setOnClickListener(this);}@Overridepublic void onDestroy(){if (soundFile != null && soundFile.exists()){// 停止錄音mRecorder.stop();// 釋放資源mRecorder.release();mRecorder = null;}super.onDestroy();}@Overridepublic void onClick(View source){switch (source.getId()){// 單擊錄音按鈕case R.id.record:if (!Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){Toast.makeText(RecordSound.this, "SD卡不存在,請插入SD卡!",Toast.LENGTH_SHORT).show();return;}try{// 建立儲存錄音的音頻檔案soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile()+ "/sound.amr");mRecorder = new MediaRecorder();// 設定錄音的聲音來源mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設定錄製的聲音的輸出格式(必須在設定聲音編碼格式之前設定)mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);// 設定聲音編碼的格式mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);mRecorder.setOutputFile(soundFile.getAbsolutePath());mRecorder.prepare();// 開始錄音mRecorder.start(); //①}catch (Exception e){e.printStackTrace();}break;// 單擊停止按鈕case R.id.stop:if (soundFile != null && soundFile.exists()){// 停止錄音mRecorder.stop(); //②// 釋放資源mRecorder.release(); //③mRecorder = null;}break;}}}
程式運行: