Android录音时获取分贝值的方法代码实例
作者:junjie 时间:2022-03-03 04:15:12
参考文章Android中实时获取音量分贝值详解:https://www.jb51.net/article/64806.htm
public class MediaRecorderDemo {
private final String TAG = "MediaRecord";
private MediaRecorder mMediaRecorder;
public static final int MAX_LENGTH = 1000 * 60 * 10;// 最大录音时长1000*60*10;
private String filePath;
public MediaRecorderDemo(){
this.filePath = "/dev/null";
}
public MediaRecorderDemo(File file) {
this.filePath = file.getAbsolutePath();
}
private long startTime;
private long endTime;
/**
* 开始录音 使用amr格式
*
* 录音文件
* @return
*/
public void startRecord() {
// 开始录音
/* ①Initial:实例化MediaRecorder对象 */
if (mMediaRecorder == null)
mMediaRecorder = new MediaRecorder();
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/Default THREE_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();
// AudioRecord audioRecord.
/* 获取开始时间* */
startTime = System.currentTimeMillis();
updateMicStatus();
Log.i("ACTION_START", "startTime" + startTime);
} catch (IllegalStateException e) {
Log.i(TAG,
"call startAmr(File mRecAudioFile) failed!"
+ e.getMessage());
} catch (IOException e) {
Log.i(TAG,
"call startAmr(File mRecAudioFile) failed!"
+ e.getMessage());
}
}
/**
* 停止录音
*
*/
public long stopRecord() {
if (mMediaRecorder == null)
return 0L;
endTime = System.currentTimeMillis();
Log.i("ACTION_END", "endTime" + endTime);
mMediaRecorder.stop();
mMediaRecorder.reset();
mMediaRecorder.release();
mMediaRecorder = null;
Log.i("ACTION_LENGTH", "Time" + (endTime - startTime));
return endTime - startTime;
}
private final Handler mHandler = new Handler();
private Runnable mUpdateMicStatusTimer = new Runnable() {
public void run() {
updateMicStatus();
}
};
/**
* 更新话筒状态
*
*/
private int BASE = 1;
private int SPACE = 100;// 间隔取样时间
private void updateMicStatus() {
if (mMediaRecorder != null) {
double ratio = (double)mMediaRecorder.getMaxAmplitude() /BASE;
double db = 0;// 分贝
if (ratio > 1)
db = 20 * Math.log10(ratio);
Log.d(TAG,"分贝值:"+db);
mHandler.postDelayed(mUpdateMicStatusTimer, SPACE);
}
}
}
标签:Android,录音,分贝值
0
投稿
猜你喜欢
Android中RecyclerView上拉下拉,分割线,多条目的实例代码
2022-10-14 06:05:07
c# 死锁和活锁的发生及避免
2023-05-28 00:45:49
Android开发笔记之:深入理解多线程AsyncTask
2023-07-22 15:16:06
Java实现远程控制技术完整源代码分享
2022-04-10 20:31:53
javaWeb项目部署到阿里云服务器步骤详解
2023-11-07 05:21:36
C#获取图片文件扩展名的方法
2022-03-06 04:27:43
Android仿百度福袋红包界面
2023-11-01 04:53:01
C#文件合并的方法
2022-08-07 13:22:17
Java Base64解码错误及解决方法
2023-02-09 03:36:35
SpringMVC中使用@PathVariable绑定路由中的数组的方法
2023-11-27 14:21:01
Struts2实现多文件上传功能
2021-11-01 13:50:25
Java异步处理机制实例详解
2022-05-12 01:39:37
Java之策略模式比较器案例讲解
2021-12-25 22:24:32
利用C#实现分割GIF图片
2021-06-15 16:16:41
C#中调用VB中Inputbox类的实现方法
2023-09-06 18:12:57
批处理一键安装JDK/一键安装JRE和自动配置Java环境变量
2023-11-29 05:28:30
java多线程抓取铃声多多官网的铃声数据
2023-12-18 23:20:05
Java花式解决'分割回文串 ii'问题详解
2022-07-09 02:01:58
C#简单实现防止多个程序运行的方法
2021-07-31 04:36:27
一文搞懂Java ScheduledExecutorService的使用
2022-11-22 14:23:35