Implement 「Record」function
PersonRecordActivity.java
// 給一個布林值sdCardExit判別SD card是否存在
boolean sdCardExit = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
// 自動抓當前的系統時間, 格式自訂為yyyy.MM.dd_HH.mm.ss
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy.MM.dd_HH.mm.ss");
// 錄音狀態以1來表示
static final int RECORDING_STATE = 1;
// 錄音檔名的部份命名
final String SAMPLE_PREFIX = "PersonRecord_";
// 此值紀錄record的起始時間
long recordingStart =0;
MediaRecorder mRecorder = null;
public void onClick(View ImageButton) {
switch (ImageButton.getId()) {
// 當user按下record按鈕
case R.id.ib_record:
// 若SD card存在則執行以下動作
if (sdCardExit) {
// 先將狀態設為錄音中
int mState = RECORDING_STATE;
// 若正在播放檔案, 則先停止它
stopAudioPlayback();
// 開始錄音
startRecording(MediaRecorder.OutputFormat.THREE_GPP, ".3gp", this);
// 更新各ImageButton的圖示
updateUi();
} else {
// 若SD card不存在則show toast提醒user
Toast.makeText(context, "SD Card not exist", Toast.LENGTH_SHORT).show();
}
break;
.
.
.
}
}
private void stopAudioPlayback() {
Intent i = new Intent("com.android.music.musicservicecommand");
i.putExtra("command", "pause");
sendBroadcast(i);
}
public void startRecording(int outputfileformat, String extension, Context context) {
stop();
try {
File sampleDir = new File(PersonRecordActivity.SAVE_PATH);
File recordingFile = new File(sampleDir + java.io.File.separator
+ SAMPLE_PREFIX + sdf.format(new java.util.Date())
+ extension);
} catch (Exception e) {
return;
}
mRecorder = new MediaRecorder();
// 呼叫setAudioSource 指定錄音來源為麥克風錄音
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 呼叫setOutputFormat設定錄音檔案的輸出格式
mRecorder.setOutputFormat(outputfileformat);
// 呼叫MediaRecorder 的setAudioEncoder設定錄音的編碼方式
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
// 呼叫setOutputFile 設定錄音檔案的存放位置
mRecorder.setOutputFile(recordingFile.getAbsolutePath());
try {
// 呼叫prepare 準備錄音
mRecorder.prepare();
// 呼叫start開始錄音
mRecorder.start();
} catch (IOException exception) {
// 呼叫reset可以重複使用已經產生的MediaRecorder 物件,但必須回到setAudioSource重新設定
mRecorder.reset();
// 呼叫release 會立即釋放MediaRecorder 佔用的資源。之後如果想要再使用MediaRecorder 功能,必須重新建立MediaRecorder 物件實體而無法重複使用已經被釋放的MediaRecorder 物件
mRecorder.release();
mRecorder = null;
return;
}
// 給定錄音起始時間為當前系統時間
recordingStart = System.currentTimeMillis();
setState(RECORDING_STATE);
}
private void setState(int state) {
mState = state;
}
沒有留言:
張貼留言