一舞吭、MediaRecorder錄制音頻
1.1 開始錄制音頻
// 開始錄音
private void mediaRecorder_startRecord() {
if (mediaRecorder == null) {
mediaRecorder = new MediaRecorder();
}
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
String filename = DateFormat.format("yyyyMMdd_HHmmss", Calendar.getInstance(Locale.CHINA)) + ".m4a";
String filePath = Environment.getExternalStorageDirectory() + "/AndroidMediaTest/" + filename;
mediaRecorder.setOutputFile(filePath);
mediaRecorder.setMaxDuration(3000);
try {
mediaRecorder.prepare();
} catch (IOException e) {
}
mediaRecorder.start();
}
1.2 停止音頻錄制
// 停止錄音
private void mediaRecorder_stopRecord() {
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
}
點(diǎn)擊停止錄音之后, 音頻文件才會(huì)寫入到文件中
二均芽、音頻文件播放
2.1 開始播放
// 開始播放
private void mediaPlayer_startRlay() {
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(filePath);
mediaPlayer.prepare();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {}
});
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
} catch (IOException e) {
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer = null;
}
}
2.2 停止播放
// 停止播放
private void mediaPlayer_stopPlay() {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer = null;
}
}
結(jié)合音頻文件的錄制與播放的代碼, Android提供的現(xiàn)成的api供調(diào)用.
音頻錄制時(shí), 只需要傳入生成音頻文件時(shí)的格式, 其他不需要關(guān)心, 音頻錄制結(jié)束時(shí), 調(diào)用stop, 系統(tǒng)幫我們生成對(duì)應(yīng)的音頻文件.
而播放時(shí), 只需要傳入音頻文件的路徑即可進(jìn)行播放
所以對(duì)于MediaRecorder與MediaPlayer, 使用起來是非常簡單的, 同時(shí)幾乎沒有可定制性. 如果需要在音頻錄制過程中, 需要自定義一些操作, 比如在聲音錄制過程中, 有可能我們需要得到采集的聲音數(shù)據(jù)并進(jìn)行處理, 比如降噪, 合成等. MediaRecorder明顯不符合要求, 而AudioRecorder潛能滿足這種要求, 過程為一段一段進(jìn)行錄制然后得到數(shù)據(jù)分別進(jìn)行處理.