標籤:android mediarecorder 錄製音頻 例子程式 步驟
使用MediaRecorder錄製音頻步驟:
建立MediaRecorder對象
調用MediaRecorder的setAudioSource()方法設定聲音來源,一般傳入MediaRecorder.AudioSource.MIC參數指定錄製來自麥克風的聲音
調用MediaRecorder對象的setOutputFormat()設定所錄製的音頻 檔案的格式
調用MediaRecorder對象的setAudioEncoder() ,setAudioEncodingBitRate(int bitRate),setAudioSamplingRate(int samplingRate)設定所錄製的聲音的編碼格式,編碼位率,采
樣率等,這些參數將可以控制所錄製的聲音的品質,檔案的大小 ,一般來說品質越好,音效檔越大
調用MediaRecorder的setOutputFile(String path)方法設定 錄製的音頻檔案的儲存位置
調用MediaRecorder的prepare()方法準備錄製
調用MediaRecorder對象的start()方法開始錄製
錄製完成,調用MediaRecorder對象的stop()方法停止錄製,並調用release()方法釋放資源
如下:
MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile(PATH_NAME); recorder.prepare(); recorder.start(); // Recording is now started ... recorder.stop(); recorder.reset(); // You can reuse the object by going back to setAudioSource() step recorder.release(); // Now the object cannot be reused
例子程式:
Activity:
import java.io.File;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.THREE_GPP);// 設定聲音編碼的格式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;}}}
資訊清單檔:
<!-- 授予該程式錄製聲音的許可權 --><uses-permission android:name="android.permission.RECORD_AUDIO" /><!-- 授予該程式向外部儲存空間寫入資料的許可權 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />