这篇博客是讲解刻录音频,无论是刻录音频还是刻录视频都是使用 MediaRecorder媒体刻录器来刻录

刻录音频 与 刻录视频 对比:

            刻录音频:MediaRecorder 

            刻录播放:MediaRecorder + SurfaceView

 

MediaRecorder是Android设计的媒体刻录器,不仅仅可以刻录音频文件,还可以刻录视频文件

  刻录:Audio  相关

  刻录:Video  相关

 

以下图,是Android官方提供:MediaRecorder时序图:

只要会看这个图:就能实现音频/视频刻录,开始刻录,停止刻录,等等

看图规律:

    1.蓝色椭圆形是状态; 

    2.单箭头是方法调用;

    3.双箭头是监听回调;

  

MediaRecorder 和 MediaPlayer 的区别:

  MediaRecorder:媒体刻录器,可以刻录(音频 / 视频)

  MediaPlayer:    媒体播放器,可以播放(音频 / 视频)


 

MediaRecorder录制音频:

在AndroidManifest.xml中加入权限:

   <!-- 刻录是很危险的行为,所以需要权限,无论是刻录视频或是刻录音频都是用这个权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

    <!-- 保存音频文件到sdcard外部存储的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

MyMediaRecorderActivity.java 刻录音频

package liudeli.my_media1;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.GestureDetector;
import android.view.MotionEvent;

import java.io.File;
import java.io.IOException;

/**
 * MediaRecorder录制音频
 */
public class MyMediaRecorderActivity extends Activity {

    private GestureDetector gestureDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 创建媒体刻录器
        final MediaRecorder recorder = new MediaRecorder();
        try {
            // 音频录制的来源:麦克风🎤
            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            // 输出的格式
            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            // 音频编码的格式
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            // 文件输出的路径
            File file = new File(Environment.getExternalStorageDirectory(), "MediaRecorderToAudio.3gp");
            recorder.setOutputFile(file.getAbsolutePath());

            // 开始准备
            recorder.prepare();

        } catch (IOException e) {
            e.printStackTrace();
        }

        gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener(){
            @Override
            public boolean onDoubleTap(MotionEvent e) {
                super.onDoubleTap(e);

                // 启动开始刻录
                recorder.start();   // Recording is now started

                new AlertDialog.Builder(MyMediaRecorderActivity.this)
                        .setTitle("刻录音频")
                        .setMessage("正在刻录中.....")
                        .setPositiveButton("停止刻录", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                recorder.stop();
                                recorder.reset();   // You can reuse the object by going back to setAudioSource() step
                                recorder.release(); // Now the object cannot be reused
                            }
                        })
                        .show();
                return true;
            }
        });
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);
        gestureDetector.onTouchEvent(event);
        return true; // 我这里处理了
    }
}

 

效果

 

录制后,保存到Sdcard外部存储的文件: