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
  • asp之家 软件编程 m.aspxhome.com