MediaRecorder与MediaPlayer

一、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潜能满足这种要求, 过程为一段一段进行录制然后得到数据分别进行处理.

你可能感兴趣的:(MediaRecorder与MediaPlayer)