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版权协议,转载请附上原文出处链接和本声明。