Android录音时获取分贝值的方法代码实例
参考文章Android中实时获取音量分贝值详解:https://www.nhooo.com/article/64806.htm
publicclassMediaRecorderDemo{ privatefinalStringTAG="MediaRecord"; privateMediaRecordermMediaRecorder; publicstaticfinalintMAX_LENGTH=1000*60*10;//最大录音时长1000*60*10; privateStringfilePath; publicMediaRecorderDemo(){ this.filePath="/dev/null"; } publicMediaRecorderDemo(Filefile){ this.filePath=file.getAbsolutePath(); } privatelongstartTime; privatelongendTime; /** *开始录音使用amr格式 * *录音文件 *@return */ publicvoidstartRecord(){ //开始录音 /*①Initial:实例化MediaRecorder对象*/ if(mMediaRecorder==null) mMediaRecorder=newMediaRecorder(); try{ /*②setAudioSource/setVedioSource*/ mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置麦克风 /*②设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default声音的(波形)的采样*/ mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); /* *②设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/DefaultTHREE_GPP(3gp格式 *,H263视频/ARM音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB) */ mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); /*③准备*/ mMediaRecorder.setOutputFile(filePath); mMediaRecorder.setMaxDuration(MAX_LENGTH); mMediaRecorder.prepare(); /*④开始*/ mMediaRecorder.start(); //AudioRecordaudioRecord. /*获取开始时间**/ startTime=System.currentTimeMillis(); updateMicStatus(); Log.i("ACTION_START","startTime"+startTime); }catch(IllegalStateExceptione){ Log.i(TAG, "callstartAmr(FilemRecAudioFile)failed!" +e.getMessage()); }catch(IOExceptione){ Log.i(TAG, "callstartAmr(FilemRecAudioFile)failed!" +e.getMessage()); } } /** *停止录音 * */ publiclongstopRecord(){ if(mMediaRecorder==null) return0L; endTime=System.currentTimeMillis(); Log.i("ACTION_END","endTime"+endTime); mMediaRecorder.stop(); mMediaRecorder.reset(); mMediaRecorder.release(); mMediaRecorder=null; Log.i("ACTION_LENGTH","Time"+(endTime-startTime)); returnendTime-startTime; } privatefinalHandlermHandler=newHandler(); privateRunnablemUpdateMicStatusTimer=newRunnable(){ publicvoidrun(){ updateMicStatus(); } }; /** *更新话筒状态 * */ privateintBASE=1; privateintSPACE=100;//间隔取样时间 privatevoidupdateMicStatus(){ if(mMediaRecorder!=null){ doubleratio=(double)mMediaRecorder.getMaxAmplitude()/BASE; doubledb=0;//分贝 if(ratio>1) db=20*Math.log10(ratio); Log.d(TAG,"分贝值:"+db); mHandler.postDelayed(mUpdateMicStatusTimer,SPACE); } } }