首先要获取录音权限,读写磁盘权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
工具类
package com.zhangyu.myopengl.utils;
import android.content.Context;
import android.media.MediaRecorder;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.io.IOException;
public class MediaRecorderUtil {
private static final String TAG = "MediaRecorderUtil";
private String path;
private MediaRecorder recorder;
private Type type = Type.AAC_AAC;
public enum Type {
AAC_M4A(".m4a", MediaRecorder.AudioEncoder.AAC, MediaRecorder.OutputFormat.MPEG_4),
AAC_AAC(".aac", MediaRecorder.AudioEncoder.AAC, MediaRecorder.OutputFormat.AAC_ADTS),
AMR_AMR(".amr", MediaRecorder.AudioEncoder.AMR_NB, MediaRecorder.OutputFormat.AMR_NB);
String ext;
int audioEncoder;
int outputFormat;
Type(String ext, int audioEncoder, int outputFormat) {
this.ext = ext;
this.audioEncoder = audioEncoder;
this.outputFormat = outputFormat;
}
}
public MediaRecorderUtil(Context context) {
String fileName = "recorder_" + System.currentTimeMillis() + type.ext;
Log.e(TAG, "MediaRecorderUtil: fileName=" + fileName);
String fileDir = Environment.getExternalStorageDirectory() + "/1";
File file = new File(fileDir);
if (!file.exists()) {
file.mkdirs();
}
file = new File(fileDir, fileName);
path = file.getAbsolutePath();
}
public void start() {
try {
recorder = new MediaRecorder();
recorder.setOutputFile(path);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(type.outputFormat);
recorder.setAudioEncoder(type.audioEncoder);
recorder.prepare();
recorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
public void stop() {
if (recorder != null) {
recorder.stop();
recorder.release();
recorder = null;
}
}
public float getVoiceLevel() {
float level = 0.1f;
try {
if (recorder != null) {
level = recorder.getMaxAmplitude() / 32768f;
return level;
}
} catch (Exception e) {
e.printStackTrace();
}
return level;
}
}
调用方法
public void onClick(View view) {
if (mediaRecorderUtil == null) {
mediaRecorderUtil = new MediaRecorderUtil(this);
mediaRecorderUtil.start();
btMediaRecorder.setText("正在录音...");
} else {
mediaRecorderUtil.stop();
mediaRecorderUtil = null;
btMediaRecorder.setText("开始录音");
}
}