一、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;
}
点击停止录音之后, 音频文件才会写入到文件中
二、音频文件播放
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;
}
}
结合音频文件的录制与播放的代码, Android提供的现成的api供调用.
音频录制时, 只需要传入生成音频文件时的格式, 其他不需要关心, 音频录制结束时, 调用stop, 系统帮我们生成对应的音频文件.
而播放时, 只需要传入音频文件的路径即可进行播放
所以对于MediaRecorder与MediaPlayer, 使用起来是非常简单的, 同时几乎没有可定制性. 如果需要在音频录制过程中, 需要自定义一些操作, 比如在声音录制过程中, 有可能我们需要得到采集的声音数据并进行处理, 比如降噪, 合成等. MediaRecorder明显不符合要求, 而AudioRecorder潜能满足这种要求, 过程为一段一段进行录制然后得到数据分别进行处理.