android 根据声音的大小获取录音的分贝值

1、初始化录音

   /**
     * 开始录音
     * @param fullFileName 录音输出的文件名(绝对路径)
     */
    public void startRecord(String fullFileName) {

        if (fullFileName == null) {
            ListenerOnError(ERROR_REASON.FILE_NAME_ERROR);
            return;
        }
        try {
            mMediaRecorder = new MediaRecorder();
            mMediaRecorder.reset();
            /* ②setAudioSource/setVedioSource*/
            mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置麦克风
			/* ②设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default
			 * THREE_GPP(3gp格式,H263视频/ARM音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB)
			 * */
            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
			/* ②设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default */
            mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

            mRecAudioFile = new File(fullFileName);

            mMediaRecorder.setOutputFile(mRecAudioFile.getAbsolutePath());
            LoggerUtils.d(TAG, mRecAudioFile.getAbsolutePath());
            mMediaRecorder.prepare();
            mMediaRecorder.start();
            checkFile();//检查文件是否存在,振幅是否为零
        } catch (Exception e) {
            e.printStackTrace();
            try {
                mMediaRecorder.stop();
                mMediaRecorder.reset();
                mMediaRecorder.release();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            mMediaRecorder = null;
            ListenerOnError(ERROR_REASON.UNKNOWN);
        }
    }

    /**
     * 停止录音
     */
    public void stopRecord() {
			/* ⑤停止录音 */
        mMediaRecorder.stop();
			/* ⑥释放MediaRecorder */
        mMediaRecorder.reset();
    }
    private static final int BASE = 1;
    /**
     * 获取录音的声音分贝值
     * @return
     */
    public int getDB(){
        double ratio = (double)mMediaRecorder.getMaxAmplitude() /BASE;
        double db = 0;// 分贝
        if (ratio > 1)
            db = 20 * Math.log10(ratio);
        LoggerUtils.d(TAG,"分贝值:"+db);
        return (int) db;
    }

2、根据不同的音量分贝显示不同的UI,给用户友好提示。

 /**
                     * 获取说话的分贝,更新动画
                     */
                    if (mRecorder != null) {
                        int db = mRecorder.getDB();
                        if (db < 44) {
                            ivRecording.setImageLevel(1);
                            ivRecording.setImageResource(R.drawable.pic_recording_01);
                        } else if (db < 52) {
                            ivRecording.setImageLevel(2);
                            ivRecording.setImageResource(R.drawable.pic_recording_02);
                        } else if (db < 60) {
                            ivRecording.setImageLevel(3);
                            ivRecording.setImageResource(R.drawable.pic_recording_03);
                        } else if (db < 68) {
                            ivRecording.setImageLevel(4);
                            ivRecording.setImageResource(R.drawable.pic_recording_04);
                        } else if (db < 76) {
                            ivRecording.setImageLevel(5);
                            ivRecording.setImageResource(R.drawable.pic_recording_05);
                        } else if (db < 84) {
                            ivRecording.setImageLevel(6);
                            ivRecording.setImageResource(R.drawable.pic_recording_06);
                        } else if (db < 92) {
                            ivRecording.setImageLevel(7);
                            ivRecording.setImageResource(R.drawable.pic_recording_07);
                        } else if (db < 100) {
                            ivRecording.setImageLevel(8);
                            ivRecording.setImageResource(R.drawable.pic_recording_08);
                        }
                        mHandler.sendEmptyMessageDelayed(MESSAGE_RECORD, MESSAGE_RECORD_PERIOD);
                    }


版权声明:本文为a1527238987原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。