录音有3种方式:https://www.cnblogs.com/wzzkaifa/p/7298608.html
下面是给大家,通过MediaRecorder来进行音频的录制 aar格式的音频。我封装一个类给大家。
public class Recorder { MediaRecorder mediaRecorder; private static Recorder instance; private File mAudioFile; private RecordViewDialog recordViewDialog; private RecordListener recordListener; long mStartRecordTime; long mStopRecordTime; Context mContext; MediaPlayer mMediaPlayer; private Recorder( Context context) { mContext =context; } public static synchronized Recorder getInstance( Context context) { if (instance == null) { instance = new Recorder(context); } return instance; } public Recorder setListener(RecordListener listener) { recordListener = listener; return instance; } public void start(Context context) { record(context); recordViewDialog = new RecordViewDialog(context, R.style.Dialog, onClickListener); recordViewDialog.show(); } /** * 开始录音 */ @SuppressLint("WrongConstant") private void record(Context mContext){ // File file = new File("/sdcard/mediarecorder.amr"); if (!Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){ Toast.makeText(mContext,"SD卡不存在,请插入SD卡!",5000).show(); return; } //释放之前录音的recorder releaseRecorder(); //执行录音逻辑,如果失败 提示用户 if (!doStart()) { recordFail(mContext); } } private boolean doStart() { try { //创建mediaRecorder mediaRecorder = new MediaRecorder(); //创建录音文件 mAudioFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/yinping/" + "lunzhi.aac"); mAudioFile.getParentFile().mkdirs(); mAudioFile.createNewFile(); //配置Media Recorder mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setAudioSamplingRate(44100); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mediaRecorder.setAudioEncodingBitRate(96000); //设置录音文件的位置 mediaRecorder.setOutputFile(mAudioFile.getAbsolutePath()); //开始录音 mediaRecorder.prepare(); mediaRecorder.start(); //记录开始录音时间 用于统计时长 mStartRecordTime = System.currentTimeMillis(); } catch (IOException e) { e.printStackTrace(); return false; } return true; } private boolean doStop() { //停止录音 try { mediaRecorder.stop(); //记录停止时间 handler.postDelayed(new Runnable() { @Override public void run() { if (recordViewDialog != null) recordViewDialog.dismiss(); } }, 100); //停止成功 } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * 停止录音 */ private void stop2(){ //执行停止录音逻辑,失败就要提醒用户 if (!doStop()) { recordFail(mContext); } //释放recorder releaseRecorder(); } private void releaseRecorder() { //检查mediaRecorder不为空 if (mediaRecorder != null) { mediaRecorder.release(); mediaRecorder = null; } } private View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { stop2(); int i = v.getId(); if (i == R.id.ok) { mStopRecordTime=System.currentTimeMillis(); //只接受超过三秒的录音 final int second = (int) (mStopRecordTime - mStartRecordTime)/1000; if (second>3){ recordListener.onComplete(mAudioFile.getAbsolutePath(),second); } else { // recordListener.onComplete("",second); Tools.toast(mContext,"说话时长小于3秒!"); } } else if (i == R.id.delete) { recordListener.onCancel(); } } }; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); } }; private void recordFail(Context mContext) { mAudioFile = null; Toast.makeText(mContext, "录音失败", Toast.LENGTH_SHORT).show(); } public void startPlay(String audioFile) { //配置播放器 mMediaPlayer = new MediaPlayer(); try { //设置声音文件 mMediaPlayer.setDataSource(audioFile); //设置监听回掉 mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { stopPlay(); } }); mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { //提示用户 释放播放器 playFail(); stopPlay(); return true; } }); //配置音量 是否循环 mMediaPlayer.setVolume(1, 1); mMediaPlayer.setLooping(false); //准备 开始 mMediaPlayer.prepare(); mMediaPlayer.start(); } catch (RuntimeException e) { e.printStackTrace(); //异常处理防止闪退 playFail(); } catch (IOException e) { e.printStackTrace(); } } private void stopPlay() { //重置播放状态 if (mMediaPlayer != null) { mMediaPlayer.setOnCompletionListener(null); mMediaPlayer.setOnErrorListener(null); mMediaPlayer.stop(); mMediaPlayer.reset(); mMediaPlayer.release(); mMediaPlayer = null; } } private void playFail() { Toast.makeText(mContext, "播放失败", Toast.LENGTH_SHORT).show(); } }