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);
}
}
}