package com.github.lazylibrary.util; import java.io.IOException; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaRecorder; import android.os.Environment; import android.util.Log; /** * 录音 */ public class RecorderControl { //录音 private MediaRecorder mRecorder = null; /** 采样率 */ private static int SAMPLE_RATE_IN_HZ = 8000; //播放录音 private MediaPlayer mPlayer = null; private boolean playState = false; // 录音的播放状态 private String mFileName; public MediaPlayer getmPlayer() { return mPlayer; } public void setmPlayer(MediaPlayer mPlayer) { this.mPlayer = mPlayer; } public RecorderControl(){ } public RecorderControl(String name) { if(mRecorder == null){ mRecorder = new MediaRecorder(); } if(mPlayer == null){ mPlayer = new MediaPlayer(); } mFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/menmen"; // mFileName += "/" + name + ".3gp"; // mFileName += "/" + name + ".mp3"; mFileName += "/" + name + ".arm"; } /* * 开始录音 */ public void startRecording() { // 实例化MediaRecorder if(mRecorder == null){ mRecorder = new MediaRecorder(); } // 设置音频源为MIC mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置输出文件的格式 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); // mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); // 设置输出文件的名称 mRecorder.setOutputFile(mFileName); //设置音频的编码格式 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB); //设置采样率 mRecorder.setAudioSamplingRate(SAMPLE_RATE_IN_HZ); try { //得到设置的音频来源,编码器,文件格式等等内容,在start()之前调用 mRecorder.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { //开始录音 mRecorder.start(); } catch (Exception e) { mRecorder = null; mRecorder = new MediaRecorder(); } } /** * * @return String */ /* * 停止录音 */ public String stopRecording(){ try { mRecorder.stop(); } catch (Exception e) { //释放资源 mRecorder = null; mRecorder = new MediaRecorder(); } //释放资源 mRecorder.release(); mRecorder = null; return mFileName; } /** * * @param Filename Filename * @param completion completion */ // public void startPlaying(String Filename,OnCompletionListener completion){ if(!playState){ if(mPlayer == null){ mPlayer = new MediaPlayer(); } try { mPlayer.setDataSource(Filename); mPlayer.prepare(); playState = true; mPlayer.start(); mPlayer.setOnCompletionListener(completion); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }else{ if(mPlayer.isPlaying()){ mPlayer.stop(); playState = false; // startPlaying(Filename); } else { playState = false; } } } /** * 播放完后释放资源 */ public void playingFinish(){ Log.i("spoort_list", "RecorderControl 播放结束释放资源"); if(playState){ playState = false; } mPlayer.release(); mPlayer = null; } /** * 停止播放 * @return boolean */ public boolean stopPlaying(){ if(mPlayer!=null){ // if(mPlayer!=null&&mPlayer.isPlaying()){ Log.i("spoort_list", "RecorderControl mPlayer.stop()"); mPlayer.stop(); mPlayer.release(); mPlayer = null; playState = false; return true; }else{ Log.i("spoort_list", "RecorderControl mPlayer.stop() is null"); return false; } } //当文件播放结束后调用此方法 // OnCompletionListener completion = new OnCompletionListener() { // @Override // public void onCompletion(MediaPlayer mp) { //// if(playState){ //// playState = false; //// } // Log.i("spoort_list", "RecorderControl 播放结束"); // mPlayer.release(); // mPlayer = null; // } // }; /** * 获取音量的大小 * @return double */ public double getAmplitude() { if(mRecorder!=null){ return (mRecorder.getMaxAmplitude()); }else return 0; } }