美文网首页
工具类:MediaRecorder录音

工具类:MediaRecorder录音

作者: 楷桐 | 来源:发表于2017-12-19 23:42 被阅读38次

    第一种

    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;
    
    /**
     * 录音 https://github.com/l123456789jy/Lazy
     */
    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;
        }
    }
    

    第二种

    
    import android.media.MediaRecorder;
    import android.util.Log;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.UUID;
    
    /**
     * Created by cooffee on 15/10/19.
     */
    public class AudioManager {
    
        private MediaRecorder mMediaRecorder;
        private String mDir;
        private String mCurrentFilePath;
    
        private static AudioManager mInstance;
    
        private boolean isPrepared = false;
    
        private AudioManager(String dir) {
            mDir = dir;
        }
    
        public String getCurrentFilePath() {
            return mCurrentFilePath;
        }
    
        /**
         * 回调准备完毕
         */
        public interface AudioStateListener {
            void wellPrepared();
        }
    
        private AudioStateListener mListener;
    
        public void setOnAudioStateListner(AudioStateListener listner) {
            mListener = listner;
        }
    
        public static AudioManager getInstance(String dir) {
            if (null == mInstance) {
                synchronized (AudioManager.class) {
                    if (null == mInstance) {
                        mInstance = new AudioManager(dir);
                    }
                }
            }
            return mInstance;
        }
    
        public void prepareAudio() {
    
            Log.d("LONG", "preparedAudio");
            try {
                isPrepared = false;
                File dir = new File(mDir);
                if (!dir.exists()) {
                    dir.mkdirs();
                }
    
                String fileName = generateFileName();
                File file = new File(dir, fileName);
    
                Log.d("LONG", "the file name is " + fileName);
    
                mCurrentFilePath = file.getAbsolutePath();
                mMediaRecorder = new MediaRecorder();
                // 设置输出文件
                mMediaRecorder.setOutputFile(file.getAbsolutePath()); Log.d("LONG", "1");
                // 设置MediaRecorder的音频源为麦克风
                mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); Log.d("LONG", "2");
                // 设置音频格式 AMR_NB
                mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); Log.d("LONG", "3");
                // 设置音频的编码为AMR
                mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); Log.d("LONG", "4");
    
                mMediaRecorder.prepare(); Log.d("LONG", "5");
                mMediaRecorder.start(); Log.d("LONG", "6");
    
                // 准备结束
                isPrepared = true; Log.d("LONG", "7");
    
                if (mListener != null) {
                    Log.d("LONG", "AudioStateListener is not null");
                    mListener.wellPrepared();
                } else {
                    Log.d("LONG", "lisetner null");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 随机生成文件的名称
         *
         * @return
         */
        private String generateFileName() {
            return UUID.randomUUID().toString() + ".amr";
        }
    
        public int getVoiceLevel(int maxLevel) {
            if (isPrepared) {
                // mMediaRecorder.getMaxAmplitude() 1-32767
                try {
                    return maxLevel * mMediaRecorder.getMaxAmplitude() / 14800; //32768 + 1
                } catch (Exception e) {
                    // 忽略产生的异常
                }
            }
            return 1;
        }
    
        public void release() {
            mMediaRecorder.stop();
            mMediaRecorder.release();
            mMediaRecorder = null;
        }
    
        /**
         * 释放资源 同时删除音频文件
         */
        public void cancel() {
            release();
            if (mCurrentFilePath != null) {
                File file = new File(mCurrentFilePath);
                file.delete();
                mCurrentFilePath = null;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:工具类:MediaRecorder录音

          本文链接:https://www.haomeiwen.com/subject/farwwxtx.html