这篇博客是讲解刻录音频,无论是刻录音频还是刻录视频都是使用 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外部存储的文件: